| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- package com.malk.huagao.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.malk.huagao.entity.KdYdCustomer;
- import com.malk.huagao.entity.KdYdMaterial;
- import com.malk.huagao.mapper.KdYdMaterialMapper;
- import com.malk.huagao.service.IKdYdMaterialService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.aliwork.YDSearch;
- import com.malk.server.dingtalk.DDR_New;
- import com.malk.service.aliwork.YDClient;
- import com.malk.utils.UtilMap;
- import lombok.extern.slf4j.Slf4j;
- import org.slf4j.MDC;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.*;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author LQY
- * @since 2025-10-16
- */
- @Service
- @Slf4j
- public class KdYdMaterialServiceImpl extends ServiceImpl<KdYdMaterialMapper, KdYdMaterial> implements IKdYdMaterialService {
- @Autowired
- private YDClient ydClient;
- @Autowired
- private KdYdMaterialMapper kdYdMaterialMapper;
- @Override
- public void insertkdYdMaterial(Map map) {
- MDC.put("MDC_KEY_PID", "1003");
- String formInstId = UtilMap.getString(map, "formInstId");
- DDR_New ddrNew = ydClient.queryData(YDParam.builder()
- .formInstId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id);
- Map formData = ddrNew.getFormData();
- System.out.println(formData);
- String wlmc = UtilMap.getString(formData, "textField_l43jpnsf");
- String xh = UtilMap.getString(formData, "textField_l43jpnsg");
- String gg = UtilMap.getString(formData, "textField_lqbxkzbq");
- String wlfz = UtilMap.getString(formData, "selectField_mguazu3k");
- String wlsx = UtilMap.getString(formData, "textField_l43jpnsh");
- String xsy = UtilMap.getString(formData, "employeeField_mgu5vocz").replace("[\"", "").replace("\"]", "").trim();
- String ssxl = UtilMap.getString(formData, "textField_mfxbtcdp");
- String jx = UtilMap.getString(formData, "textField_mejl9nrs");
- int sd = parseInt(safeGetString(formData, "numberField_mfxbtceb"), 0);
- String mrsl = UtilMap.getString(formData, "textField_mfxbtcdq");
- String chlb = UtilMap.getString(formData, "textField_mfxbtcdr");
- String jbdw = UtilMap.getString(formData, "textField_mfxbtcdo");
- BigDecimal xsjzj = toBigDecimal(safeGetString(formData, "numberField_mejl9nsc"));
- String smzs = UtilMap.getString(formData, "textField_mfxbtce4");
- String sjzt = UtilMap.getString(formData, "textField_mfxbtce6");
- String jyzt = UtilMap.getString(formData, "textField_mfxbtcea");
- String dzl = UtilMap.getString(formData, "textField_mfxbtcea");
- String pzzt = UtilMap.getString(formData, "selectField_mejl9nrq");
- String wlbt = wlmc+"-"+xh;
- // String sdmc = ssxl+"-"+pzzt+"-"+safeGetString(formData, "numberField_mfxbtceb");
- KdYdMaterial kdYdMaterial = new KdYdMaterial();
- kdYdMaterial.setWlmc(wlmc);
- kdYdMaterial.setXh(xh);
- kdYdMaterial.setGg(gg);
- kdYdMaterial.setWlfz(wlfz);
- kdYdMaterial.setWlsx(wlsx);
- kdYdMaterial.setJbdw(jbdw);
- kdYdMaterial.setSsxl(ssxl);
- kdYdMaterial.setJx(jx);
- kdYdMaterial.setSd(sd);
- kdYdMaterial.setMrsl(mrsl);
- kdYdMaterial.setChlb(chlb);
- kdYdMaterial.setXsy(xsy);
- kdYdMaterial.setXsjzj(xsjzj);
- kdYdMaterial.setSmzs(smzs);
- kdYdMaterial.setSjzt(sjzt);
- kdYdMaterial.setJyzt(jyzt);
- kdYdMaterial.setDzl(dzl);
- kdYdMaterial.setPzzt(pzzt);
- kdYdMaterial.setMaterialtitle(wlbt);
- // kdYdMaterial.setSpeedname(sdmc);
- kdYdMaterial.setForminstid(formInstId);
- kdYdMaterialMapper.insert(kdYdMaterial);
-
- }
- @Override
- public Map<String, Object> addkdYdMaterial(Map json) {
- Map<String, Object> result = new HashMap<>();
- try {
- MDC.put("MDC_KEY_PID", "1003");
- // 查询需要删除的数据
- List<Map<String, Object>> kdYdMaterialdels = UtilMap.getList(json ,"data");
- String action = json.get("action").toString();
- String table = json.get("table").toString();
- // 批量删除处理
- if (!kdYdMaterialdels.isEmpty() && action.equals("del") && table.equals("KD_YD_MATERIAL")) {
- log.info("开始处理删除操作,共{}条数据", kdYdMaterialdels.size());
- ArrayList<String> list = new ArrayList<>();
- for (Map item : kdYdMaterialdels) {
- try {
- // 修复:使用安全的方式转换FMATERIALID
- Object fmaterialidObj = item.get("FMATERIALID");
- String fmaterialidStr = String.valueOf(fmaterialidObj);
- List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
- .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
- .appType("APP_VQDMMWS6OR1VHL8VMFD3")
- .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
- .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_misfb2ft", fmaterialidStr)))
- .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
- if (list1 != null && !list1.isEmpty()) {
- for (Map map : list1) {
- String formInstanceId = UtilMap.getString(map, "formInstanceId");
- if (formInstanceId != null) {
- list.add(formInstanceId);
- log.info("找到待删除的表单实例: formInstanceId={}", formInstanceId);
- }
- }
- } else {
- log.info("未找到对应的物料数据: fmaterialid={}", fmaterialidStr);
- }
- } catch (Exception e) {
- log.info("删除物料数据查询异常: FMATERIALID={}", item.get("FMATERIALID"), e);
- }
- }
- // 执行批量删除
- if (!list.isEmpty()) {
- try {
- Object deleteResult = ydClient.operateData(YDParam.builder()
- .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
- .appType("APP_VQDMMWS6OR1VHL8VMFD3")
- .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
- .formInstanceIdList(list)
- .build(), YDConf.FORM_OPERATION.delete_batch);
- // 返回删除结果
- result.put("code", "200");
- result.put("msg", "删除成功,共删除" + list.size() + "条数据");
- result.put("data", new HashMap<String, Object>() {{
- put("deleteResult", "删除成功");
- put("deletedCount", list.size());
- put("deletedIds", list);
- }});
- return result;
- } catch (Exception e) {
- log.error("批量删除操作异常", e);
- result.put("code", "500");
- result.put("msg", "批量删除操作异常:" + e.getMessage());
- result.put("data", new HashMap<>());
- return result;
- }
- } else {
- result.put("code", "200");
- result.put("msg", "未找到需要删除的数据");
- result.put("data", new HashMap<>());
- return result;
- }
- }
- List<Map<String, Object>> kdYdMaterials = UtilMap.getList(json ,"data");
- // 同步新增/更新数据
- if (kdYdMaterials.isEmpty()) {
- log.info("【物料单同步任务】无需要同步的数据,结束");
- result.put("code", "200");
- result.put("msg", "无需要同步的数据");
- result.put("data", new HashMap<>());
- return result;
- }
- // 存储所有操作的结果
- List<Map<String, Object>> operationResults = new ArrayList<>();
- int successCount = 0;
- int failCount = 0;
- for (Map kdYdMaterial : kdYdMaterials) {
- Map<String, Object> singleResult = new HashMap<>();
- try {
- // 修复:安全地获取所有字段值
- String wlbm = safeGetStringValue(kdYdMaterial, "wlbm");
- String wlmc = safeGetStringValue(kdYdMaterial, "wlmc");
- String xh = safeGetStringValue(kdYdMaterial, "xh");
- String gg = safeGetStringValue(kdYdMaterial, "gg");
- // 修复:安全处理FMATERIALID,可能为字符串或数字
- Object fmaterialidObj = kdYdMaterial.get("FMATERIALID");
- String fmaterialidStr = String.valueOf(fmaterialidObj);
- String wlfz = safeGetStringValue(kdYdMaterial, "wlfz");
- String wlsx = safeGetStringValue(kdYdMaterial, "wlsx");
- String jbdw = safeGetStringValue(kdYdMaterial, "jbdw");
- String ssxl = safeGetStringValue(kdYdMaterial, "ssxl");
- String jx = safeGetStringValue(kdYdMaterial, "jx");
- // 修复:安全处理sd字段
- Object sdObj = kdYdMaterial.get("sd");
- Integer sd = null;
- if (sdObj != null) {
- try {
- if (sdObj instanceof Integer) {
- sd = (Integer) sdObj;
- } else if (sdObj instanceof String) {
- sd = Integer.parseInt((String) sdObj);
- } else if (sdObj instanceof Number) {
- sd = ((Number) sdObj).intValue();
- }
- } catch (Exception e) {
- log.warn("无法解析sd字段: {}", sdObj);
- }
- }
- String mrsl = safeGetStringValue(kdYdMaterial, "mrsl");
- String chlb = safeGetStringValue(kdYdMaterial, "chlb");
- String xsy = safeGetStringValue(kdYdMaterial, "xsy");
- // 修复:安全处理xsjzj字段
- Object xsjzjObj = kdYdMaterial.get("xsjzj");
- BigDecimal xsjzj = null;
- if (xsjzjObj != null) {
- try {
- if (xsjzjObj instanceof BigDecimal) {
- xsjzj = (BigDecimal) xsjzjObj;
- } else if (xsjzjObj instanceof String) {
- xsjzj = new BigDecimal((String) xsjzjObj);
- } else if (xsjzjObj instanceof Number) {
- xsjzj = new BigDecimal(xsjzjObj.toString());
- }
- } catch (Exception e) {
- log.warn("无法解析xsjzj字段: {}", xsjzjObj);
- }
- }
- String smzs = safeGetStringValue(kdYdMaterial, "smzs");
- String sjzt = safeGetStringValue(kdYdMaterial, "sjzt");
- String jyzt = safeGetStringValue(kdYdMaterial, "jyzt");
- String dzl = safeGetStringValue(kdYdMaterial, "dzl");
- String wlzl = safeGetStringValue(kdYdMaterial, "wlzl");
- String pzzt = safeGetStringValue(kdYdMaterial, "pzzt");
- String sdbb = safeGetStringValue(kdYdMaterial, "sdbb");
- String wlbt = wlmc + wlbm;
- Map updateFormData = new HashMap();
- updateFormData.put("textField_l43jpnsf", wlmc);
- updateFormData.put("textField_mfxbtcdh", wlbm);
- updateFormData.put("textField_l43jpnsg", xh);
- updateFormData.put("textField_lqbxkzbq", gg);
- updateFormData.put("textField_misfb2ft", fmaterialidStr); // 使用字符串类型
- updateFormData.put("textField_mhlbx8hi", wlfz);
- updateFormData.put("textField_l43jpnsh", wlsx);
- updateFormData.put("textField_mfxbtcdo", jbdw);
- updateFormData.put("textField_mfxbtcdp", ssxl);
- updateFormData.put("textField_mejl9nrs", jx);
- if (sd != null) {
- updateFormData.put("numberField_mfxbtceb", sd);
- } else {
- updateFormData.put("numberField_mfxbtceb", 0);
- }
- updateFormData.put("textField_mejl9nrp", dzl);
- updateFormData.put("selectField_mejl9nrq", pzzt);
- updateFormData.put("textField_mfxbtcdq", mrsl);
- updateFormData.put("textField_mhabp7y0", sdbb);
- updateFormData.put("textField_mfxbtcdr", chlb);
- updateFormData.put("textField_mfxbtce5", xsy);
- // 确保金额字段保留两位小数
- if (xsjzj != null) {
- updateFormData.put("numberField_mejl9nsc", xsjzj.setScale(2, java.math.RoundingMode.HALF_UP));
- } else {
- updateFormData.put("numberField_mejl9nsc", java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
- }
- updateFormData.put("textField_mfxbtce4", smzs);
- updateFormData.put("textField_mfxbtcea", jyzt);
- updateFormData.put("textField_mg4h6mz5", wlbt);
- // 执行操作并获取结果
- Object operationResult = ydClient.operateData(YDParam.builder()
- .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
- .appType("APP_VQDMMWS6OR1VHL8VMFD3")
- .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
- .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch(
- "textField_misfb2ft", fmaterialidStr, "金蝶内码", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
- .formDataJson(JSONObject.toJSONString(updateFormData))
- .build(), YDConf.FORM_OPERATION.upsert);
- log.info("物料单同步成功: wlbm={}, wlmc={}", wlbm, wlmc);
- // 记录单个操作结果
- singleResult.put("FMATERIALID", fmaterialidStr);
- singleResult.put("operationResult", operationResult);
- singleResult.put("status", "success");
- successCount++;
- } catch (Exception e) {
- log.error("物料单同步失败", e);
- // 修复:安全获取FMATERIALID
- Object fmaterialidObj = kdYdMaterial.get("FMATERIALID");
- String fmaterialidStr = fmaterialidObj != null ? String.valueOf(fmaterialidObj) : "unknown";
- singleResult.put("FMATERIALID", fmaterialidStr);
- singleResult.put("errorMsg", e.getMessage());
- singleResult.put("status", "fail");
- failCount++;
- }
- operationResults.add(singleResult);
- }
- // 构建返回结果
- Map<String, Object> data = new HashMap<>();
- data.put("operationResults", operationResults);
- data.put("totalCount", kdYdMaterials.size());
- data.put("successCount", successCount);
- data.put("failCount", failCount);
- result.put("code", failCount == 0 ? "200" : "300");
- result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
- result.put("data", data);
- return result;
- } catch (Exception e) {
- log.error("物料单同步任务执行异常", e);
- result.put("code", "500");
- result.put("msg", "系统异常:" + e.getMessage());
- result.put("data", new HashMap<>());
- return result;
- }
- }
- // 辅助方法:安全获取字符串值
- private String safeGetStringValue(Map map, String key) {
- if (map == null) return "";
- Object value = map.get(key);
- if (value == null) return "";
- return String.valueOf(value);
- }
- private static int parseInt(String str, int defaultValue) {
- if (str == null || str.trim().isEmpty()) {
- return defaultValue;
- }
- try {
- return Integer.parseInt(str.trim());
- } catch (NumberFormatException e) {
- return defaultValue;
- }
- }
- private String safeGetString(Map formData, String key) {
- Object val = formData.get(key);
- return val == null ? "" : String.valueOf(val);
- }
- public static BigDecimal toBigDecimal(String str) {
- if (str == null || str.trim().isEmpty()) {
- return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
- }
- try {
- return new BigDecimal(str.trim())
- .setScale(2, RoundingMode.HALF_UP);
- } catch (NumberFormatException e) {
- // 返回默认值而不是抛出异常,避免程序中断
- return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
- }
- }
- /**
- * 重载方法,支持Number类型输入
- */
- public static BigDecimal toBigDecimal(Number number) {
- if (number == null) {
- return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
- }
- return new BigDecimal(number.toString())
- .setScale(2, RoundingMode.HALF_UP);
- }
- }
|