KdYdTransferServiceImpl.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. package com.malk.huagao.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.malk.huagao.entity.KdYdDelivery;
  6. import com.malk.huagao.entity.KdYdDeliveryDetail;
  7. import com.malk.huagao.entity.KdYdTransfer;
  8. import com.malk.huagao.entity.KdYdTransferDetail;
  9. import com.malk.huagao.mapper.*;
  10. import com.malk.huagao.service.IKdYdTransferService;
  11. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  12. import com.malk.server.aliwork.YDConf;
  13. import com.malk.server.aliwork.YDParam;
  14. import com.malk.server.dingtalk.DDR_New;
  15. import com.malk.service.aliwork.YDClient;
  16. import com.malk.utils.UtilMap;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.slf4j.MDC;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import java.math.BigDecimal;
  22. import java.math.RoundingMode;
  23. import java.time.Instant;
  24. import java.time.LocalDateTime;
  25. import java.time.ZoneId;
  26. import java.time.format.DateTimeFormatter;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * <p>
  31. * 服务实现类
  32. * </p>
  33. *
  34. * @author LQY
  35. * @since 2025-11-12
  36. */
  37. @Service
  38. @Slf4j
  39. public class KdYdTransferServiceImpl extends ServiceImpl<KdYdTransferMapper, KdYdTransfer> implements IKdYdTransferService {
  40. @Autowired
  41. private YDClient ydClient;
  42. @Autowired
  43. private KdYdTransferMapper kdYdTransferMapper;
  44. @Autowired
  45. private KdYdTransferDetailMapper kdYdTransferDetailMapper;
  46. @Override
  47. public void insertTransfer(Map map) {
  48. MDC.put("MDC_KEY_PID", "1003");
  49. String formInstId = UtilMap.getString(map, "formInstId");
  50. String type = UtilMap.getString(map, "type");
  51. if ("3".equals(type)) {
  52. String bm = UtilMap.getString(map, "bm");
  53. KdYdTransfer kdYdTransfer = new KdYdTransfer();
  54. kdYdTransfer.setOperationType("3");
  55. kdYdTransfer.setSyncStatus("0");
  56. kdYdTransferMapper.update(kdYdTransfer, new LambdaQueryWrapper<KdYdTransfer>().eq(KdYdTransfer::getDjbh, bm));
  57. return; // 或者根据你的业务逻辑返回相应的结果
  58. }
  59. DDR_New ddrNew = ydClient.queryData(YDParam.builder()
  60. .formInstId(formInstId)
  61. .build(), YDConf.FORM_QUERY.retrieve_id);
  62. Map formData = ddrNew.getFormData();
  63. String djlx = UtilMap.getString(formData, "selectField_mhubzsa5");
  64. LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_mhubzsab"));
  65. String kh = UtilMap.getString(formData, "textField_mhubzsas");
  66. String dchzlx = UtilMap.getString(formData, "selectField_mhubzsa7");
  67. String djbh = UtilMap.getString(formData, "serialNumberField_mhubzsa4");
  68. String ywlx = UtilMap.getString(formData, "textField_mhubzsa6");
  69. String xsy = UtilMap.getString(formData, "employeeField_mhubzsa8").replace("[\"", "").replace("\"]", "").trim();
  70. String dcbm = UtilMap.getString(formData, "departmentSelectField_mhubzsae").replace("[\"", "").replace("\"]", "").trim();
  71. String drbm = UtilMap.getString(formData, "departmentSelectField_mhubzsad").replace("[\"", "").replace("\"]", "").trim();
  72. String drhzlx = UtilMap.getString(formData, "selectField_mhubzsa9");
  73. String dbfx = UtilMap.getString(formData, "selectField_mhubzsaa");
  74. String dbdlx = UtilMap.getString(formData, "selectField_mhubzsac");
  75. String dchz = UtilMap.getString(formData, "textField_mhubzsat");
  76. String hdfs = UtilMap.getString(formData, "selectField_mhubzsah");
  77. String ysfs = UtilMap.getString(formData, "selectField_mhubzsai");
  78. String kdgs = UtilMap.getString(formData, "selectField_mhubzsar");
  79. String fkfs = UtilMap.getString(formData, "selectField_mhubzsag");
  80. List<Map> tableField = (List<Map>) formData.get("tableField_mhubzsau");
  81. KdYdTransfer kdYdTransfer = new KdYdTransfer();
  82. kdYdTransfer.setDjlx(djlx);
  83. kdYdTransfer.setRq(rq);
  84. kdYdTransfer.setKh(kh);
  85. kdYdTransfer.setDjbh(djbh);
  86. kdYdTransfer.setSyncStatus("0");
  87. kdYdTransfer.setOperationType("1");
  88. kdYdTransfer.setYsfs(ysfs);
  89. kdYdTransfer.setHdfs(hdfs);
  90. kdYdTransfer.setKdgs(kdgs);
  91. kdYdTransfer.setFkfs(fkfs);
  92. kdYdTransfer.setDchzlx(dchzlx);
  93. kdYdTransfer.setDchz(dchz);
  94. kdYdTransfer.setDchzlx(dchzlx);
  95. kdYdTransfer.setDbfx(dbfx);
  96. kdYdTransfer.setDbdlx(dbdlx);
  97. kdYdTransfer.setDcbm(dcbm);
  98. kdYdTransfer.setDrbm(drbm);
  99. kdYdTransfer.setDrhzlx(drhzlx);
  100. kdYdTransfer.setYwlx(ywlx);
  101. kdYdTransfer.setCgy(xsy);
  102. if ("2".equals(type)) {
  103. kdYdTransfer.setOperationType(type);
  104. kdYdTransferMapper.update(kdYdTransfer, new LambdaQueryWrapper<KdYdTransfer>().eq(KdYdTransfer::getDjbh, djbh));
  105. } else {
  106. kdYdTransferMapper.insert(kdYdTransfer);
  107. }
  108. Long id = kdYdTransfer.getId();
  109. int count = 1;
  110. for (Map item : tableField) {
  111. String wlbm = safeGetString(item, "textField_mhubzsav");
  112. String wlmc = safeGetString(item, "textField_mhubzsaw");
  113. String ggxh = safeGetString(item, "textField_mhubzsax");
  114. String dw = safeGetString(item, "textField_mhubzsay");
  115. int dbsl = parseInt(safeGetString(item, "numberField_mhubzsaz"), 0); // 如果为空或格式错误,返回 0
  116. String ph = safeGetString(item, "textField_mhubzsb0");
  117. String dcck = safeGetString(item, "textField_mhubzsb1");
  118. String dcckzt = safeGetString(item, "textField_mhubzsb5");
  119. String dccw = safeGetString(item, "textField_mhubzsb2");
  120. String drck = safeGetString(item, "textField_mhubzsb3");
  121. String drckzt = safeGetString(item, "textField_mhubzsb6");
  122. String drcw = safeGetString(item, "textField_mhubzsb4");
  123. KdYdTransferDetail kdYdTransferDetail = new KdYdTransferDetail();
  124. kdYdTransferDetail.setTransferId(id);
  125. kdYdTransferDetail.setWlbm(wlbm);
  126. kdYdTransferDetail.setWlmc(wlmc);
  127. kdYdTransferDetail.setGgxh(ggxh);
  128. kdYdTransferDetail.setDetailId(count);
  129. kdYdTransferDetail.setGgxh(ggxh);
  130. kdYdTransferDetail.setDw(dw);
  131. kdYdTransferDetail.setDbsl(dbsl);
  132. kdYdTransferDetail.setPh(ph);
  133. kdYdTransferDetail.setDcck(dcck);
  134. kdYdTransferDetail.setDcckzt(dcckzt);
  135. kdYdTransferDetail.setDccw(dccw);
  136. kdYdTransferDetail.setDrck(drck);
  137. kdYdTransferDetail.setDrckzt(drckzt);
  138. kdYdTransferDetail.setDrcw(drcw);
  139. kdYdTransferDetail.setSyncStatus("0");
  140. kdYdTransferDetail.setOperationType("1");
  141. if ("2".equals(type) || "3".equals(type)) {
  142. kdYdTransferDetail.setOperationType(type);
  143. kdYdTransferDetailMapper.update(kdYdTransferDetail, new LambdaQueryWrapper<KdYdTransferDetail>()
  144. .eq(KdYdTransferDetail::getWlbm, wlbm)
  145. .eq(KdYdTransferDetail::getTransferId, id));
  146. } else {
  147. kdYdTransferDetailMapper.insert(kdYdTransferDetail);
  148. }
  149. count++;
  150. //save(kdYdDeliveryDetail);
  151. }
  152. // ydClient.operateData(
  153. // YDParam.builder()
  154. // .formInstanceId(formInstId)
  155. // .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrqnxmm", id)))
  156. // .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  157. }
  158. @Override
  159. public Map<String, Object> insertTransfer1(Map json) {
  160. HashMap<String, Object> result = new HashMap<>();
  161. try {
  162. MDC.put("MDC_KEY_PID", "1003"); // 设置不同的 PID 以便区分日志
  163. List<Map<String, Object>> kdYdTransferDels = UtilMap.getList(json, "data");
  164. String action = UtilMap.getString(json, "action");
  165. String table = UtilMap.getString(json, "table");
  166. // 批量删除处理
  167. if (!kdYdTransferDels.isEmpty() && "del".equals(action) && "KD_YD_TRANSFER".equals(table)) {
  168. log.info("开始处理调拨单删除操作,共{}条数据", kdYdTransferDels.size());
  169. ArrayList<String> deleteList = new ArrayList<>();
  170. int deleteSuccessCount = 0;
  171. for (Map<String, Object> item : kdYdTransferDels) {
  172. try {
  173. String djbh = String.valueOf(item.get("djbh"));
  174. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  175. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  176. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
  177. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  178. if (list1 != null && !list1.isEmpty()) {
  179. for (Map map : list1) {
  180. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  181. if (formInstanceId != null) {
  182. deleteList.add(formInstanceId);
  183. }
  184. }
  185. deleteSuccessCount++;
  186. } else {
  187. log.warn("未找到对应的调拨单数据: djbh={}", djbh);
  188. }
  189. } catch (Exception e) {
  190. log.error("删除调拨单数据查询异常: djbh={}", item.get("djbh"), e);
  191. }
  192. }
  193. // 执行批量删除
  194. if (!deleteList.isEmpty()) {
  195. try {
  196. ydClient.operateData(YDParam.builder()
  197. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  198. .formInstanceIdList(deleteList)
  199. .build(), YDConf.FORM_OPERATION.delete_batch);
  200. log.info("调拨单批量删除完成,共删除{}条数据", deleteList.size());
  201. } catch (Exception e) {
  202. log.error("调拨单批量删除操作异常", e);
  203. }
  204. }
  205. // 返回删除结果
  206. result.put("code", "200");
  207. result.put("msg", "删除成功,共删除" + deleteList.size() + "条数据");
  208. result.put("data", new HashMap<String, Object>() {{
  209. put("deletedCount", deleteList.size());
  210. put("deletedIds", deleteList);
  211. }});
  212. return result;
  213. } else if ("del".equals(action)) {
  214. log.info("【调拨单删除任务】无需要删除的数据");
  215. result.put("code", "200");
  216. result.put("msg", "无需要删除的数据");
  217. result.put("data", new HashMap<>());
  218. return result;
  219. }
  220. // 同步新增/更新数据
  221. List<Map<String, Object>> kdYdTransfers = UtilMap.getList(json, "data");
  222. if (kdYdTransfers.isEmpty()) {
  223. log.info("【调拨单同步任务】无需要同步的数据,结束");
  224. result.put("code", "200");
  225. result.put("msg", "无需要同步的数据");
  226. result.put("data", new HashMap<>());
  227. return result;
  228. }
  229. log.info("【调拨单同步任务】开始同步,共{}条数据", kdYdTransfers.size());
  230. List<Map<String, Object>> operationResults = new ArrayList<>();
  231. int successCount = 0;
  232. int failCount = 0;
  233. for (Map<String, Object> transferItem : kdYdTransfers) {
  234. Map<String, Object> singleResult = new HashMap<>();
  235. try {
  236. String djbh = String.valueOf(transferItem.get("djbh"));
  237. List<Map<String, Object>> tableListData = UtilMap.getList(transferItem, "tableList");
  238. String transferId = UtilMap.getString(transferItem, "transferId");
  239. // 检查明细数据是否存在
  240. if (tableListData == null || tableListData.isEmpty()) {
  241. log.warn("调拨单明细数据为空: djbh={}", djbh);
  242. singleResult.put("errorMsg", "明细数据为空");
  243. singleResult.put("status", "fail");
  244. failCount++;
  245. operationResults.add(singleResult);
  246. continue;
  247. }
  248. ArrayList<Object> tableList = new ArrayList<>();
  249. List<Map<String, Object>> tableListxlh = new ArrayList<>();
  250. // 处理明细数据
  251. for (Map<String, Object> detailItem : tableListData) {
  252. HashMap<String, String> tablemap = new HashMap<>();
  253. tablemap.put("textField_mhubzsav", String.valueOf(detailItem.get("wlbm")));
  254. tablemap.put("textField_mhubzsaw", String.valueOf(detailItem.get("wlmc")));
  255. tablemap.put("textField_mqudgs70", String.valueOf(detailItem.get("jx")));
  256. tablemap.put("textField_mhubzsax", String.valueOf(detailItem.get("ggxh")));
  257. tablemap.put("textField_mhubzsay", String.valueOf(detailItem.get("dw")));
  258. tablemap.put("textareaField_mjshnw4c", String.valueOf(detailItem.get("kddh")));
  259. tablemap.put("numberField_mhubzsaz", safeConvertBigDecimalToString(detailItem.get("dbsl")));
  260. tablemap.put("textField_mhubzsb0", String.valueOf(detailItem.get("ph")));
  261. tablemap.put("textField_mhubzsb1", String.valueOf(detailItem.get("dcck")));
  262. tablemap.put("textField_mhubzsb5", String.valueOf(detailItem.get("dcckzt")));
  263. tablemap.put("textField_mhubzsb2", String.valueOf(detailItem.get("dccw")));
  264. tablemap.put("textField_mhubzsb3", String.valueOf(detailItem.get("drck")));
  265. tablemap.put("textField_mhubzsb6", String.valueOf(detailItem.get("drckzt")));
  266. tablemap.put("textField_mhubzsb4", String.valueOf(detailItem.get("drcw")));
  267. // 处理序列号明细
  268. String xlhjh = String.valueOf(detailItem.get("xlh"));
  269. if (xlhjh != null && !xlhjh.trim().isEmpty() && !"null".equals(xlhjh)) {
  270. List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
  271. .map(String::trim)
  272. .filter(item -> !item.isEmpty())
  273. .map(item -> {
  274. Map<String, Object> xlhMap = new HashMap<>();
  275. xlhMap.put("textField_mf6a0h6w", item);
  276. xlhMap.put("textField_mjqst61l", String.valueOf(detailItem.get("wlbm")));
  277. xlhMap.put("textField_mjqst61m", String.valueOf(detailItem.get("ggxh")));
  278. return xlhMap;
  279. })
  280. .collect(Collectors.toList());
  281. tableListxlh.addAll(currentXlhList);
  282. tableList.add(tablemap);
  283. }
  284. }
  285. // 查询关联表单数据
  286. String xsddbh = String.valueOf(transferItem.get("ddbh"));
  287. String fhtzdbh = String.valueOf(transferItem.get("fhtzdbh"));
  288. String ddformInstanceId = null;
  289. String fhdformInstanceId = null;
  290. String ddbh = null;
  291. String fhdbh = null;
  292. String jydate = null;
  293. String ghrq = null;
  294. String jyyy = null;
  295. String jtyy = null;
  296. String xsy = null;
  297. String khxypj = null;
  298. String fj = null;
  299. try {
  300. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  301. // 查询订单数据
  302. if (xsddbh != null && !"null".equals(xsddbh) && !xsddbh.trim().isEmpty()) {
  303. List<Map<String, Object>> ddlist = (List<Map<String, Object>>) ydClient.queryData(
  304. YDParam.builder()
  305. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  306. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
  307. .build(),
  308. YDConf.FORM_QUERY.retrieve_list_all
  309. ).getData();
  310. if (ddlist != null && !ddlist.isEmpty()) {
  311. for (Map<String, Object> khitem : ddlist) {
  312. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  313. if (khformData == null) continue;
  314. Object serialObj = khformData.get("textField_mjs6fuwo");
  315. String serialStr = serialObj != null ? serialObj.toString() : null;
  316. if (xsddbh.equals(serialStr)) {
  317. ddformInstanceId = safeToString(khitem.get("formInstanceId"));
  318. ddbh = serialStr;
  319. jydate = safeToString(khformData.get("dateField_mdya1lom"));
  320. ghrq = safeToString(khformData.get("dateField_meqpbxsj"));
  321. jyyy = safeToString(khformData.get("multiSelectField_meqpbxsc"));
  322. jtyy = safeToString(khformData.get("textareaField_meqpbxsd"));
  323. khxypj = safeToString(khformData.get("selectField_mewirdx4"));
  324. xsy = safeToString(khformData.get("employeeField_mejowmng_id"));
  325. fj = safeToString(khformData.get("attachmentField_mfoqcctz"));
  326. break;
  327. }
  328. }
  329. }
  330. }
  331. // 查询发货单数据
  332. if (fhtzdbh != null && !"null".equals(fhtzdbh) && !fhtzdbh.trim().isEmpty()) {
  333. List<Map<String, Object>> fhdlist = (List<Map<String, Object>>) ydClient.queryData(
  334. YDParam.builder()
  335. .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
  336. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", fhtzdbh)))
  337. .build(),
  338. YDConf.FORM_QUERY.retrieve_list_all
  339. ).getData();
  340. if (fhdlist != null && !fhdlist.isEmpty()) {
  341. for (Map<String, Object> fhditem : fhdlist) {
  342. Map<String, Object> fhdformData = (Map<String, Object>) fhditem.get("formData");
  343. if (fhdformData == null) continue;
  344. Object serialObj = fhdformData.get("serialNumberField_mheazm7w");
  345. String serialStr = serialObj != null ? serialObj.toString() : null;
  346. if (fhtzdbh.equals(serialStr)) {
  347. fhdformInstanceId = safeToString(fhditem.get("formInstanceId"));
  348. fhdbh = serialStr;
  349. break;
  350. }
  351. }
  352. }
  353. }
  354. } catch (Exception e) {
  355. log.error("查询关联表单数据异常: xsddbh={}, fhtzdbh={}", xsddbh, fhtzdbh, e);
  356. }
  357. // 构建更新数据
  358. HashMap<String, Object> updateMap = new HashMap<>();
  359. updateMap.put("tableField_mhubzsau", tableList);
  360. updateMap.put("tableField_mips137b", tableListxlh);
  361. // 添加关联表单数据
  362. if (ddbh != null && ddformInstanceId != null) {
  363. updateMap.put("associationFormField_mhubzsaf",
  364. Collections.singletonList(getddAss(ddbh, ddformInstanceId)));
  365. }
  366. if (fhdbh != null && fhdformInstanceId != null) {
  367. updateMap.put("associationFormField_mjzervdt",
  368. Collections.singletonList(getfhdAss(fhdbh, fhdformInstanceId)));
  369. }
  370. // 添加订单相关字段(如果所有字段都存在)
  371. if (jydate != null && ghrq != null && jyyy != null && jtyy != null
  372. && xsy != null && khxypj != null) {
  373. updateMap.put("dateField_mdya1lom", jydate);
  374. updateMap.put("dateField_meqpbxsj", ghrq);
  375. updateMap.put("multiSelectField_meqpbxsc", jyyy);
  376. updateMap.put("textareaField_meqpbxsd", jtyy);
  377. updateMap.put("employeeField_mejowmng", xsy);
  378. updateMap.put("selectField_mewirdx4", khxypj);
  379. updateMap.put("attachmentField_mfoqcctz", fj);
  380. }
  381. // 添加主表字段
  382. updateMap.put("textField_mjzervdu", fhtzdbh);
  383. updateMap.put("textField_miquh5zj", ddformInstanceId);
  384. updateMap.put("selectField_mhubzsa5", String.valueOf(transferItem.get("djlx")));
  385. updateMap.put("textField_mhubzsas", String.valueOf(transferItem.get("kh")));
  386. updateMap.put("textField_miptelgh", String.valueOf(transferItem.get("ddbh")));
  387. updateMap.put("textField_miptelgc", djbh);
  388. updateMap.put("textField_miptelgd", String.valueOf(transferItem.get("cgy")));
  389. updateMap.put("selectField_mhubzsa7", String.valueOf(transferItem.get("dchzlx")));
  390. updateMap.put("textField_mhubzsa6", String.valueOf(transferItem.get("ywlx")));
  391. // 处理日期字段
  392. Object rq = transferItem.get("rq");
  393. updateMap.put("dateField_mhubzsab", safeConvertDateTimeToString(rq));
  394. updateMap.put("selectField_mhubzsa9", String.valueOf(transferItem.get("drhzlx")));
  395. updateMap.put("selectField_mhubzsaa", String.valueOf(transferItem.get("dbfx")));
  396. updateMap.put("selectField_mhubzsac", String.valueOf(transferItem.get("dbdlx")));
  397. updateMap.put("textField_miptelge", String.valueOf(transferItem.get("dcbm")));
  398. updateMap.put("textField_miptelgf", String.valueOf(transferItem.get("dchz")));
  399. updateMap.put("textField_miptelgg", String.valueOf(transferItem.get("drbm")));
  400. updateMap.put("selectField_mhubzsah", String.valueOf(transferItem.get("hdfs")));
  401. updateMap.put("selectField_mhubzsai", String.valueOf(transferItem.get("ysfs")));
  402. updateMap.put("selectField_mhubzsar", String.valueOf(transferItem.get("kdgs")));
  403. updateMap.put("selectField_mhubzsag", String.valueOf(transferItem.get("fkfs")));
  404. // 执行同步操作
  405. Object operationResult = ydClient.operateData(YDParam.builder()
  406. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  407. .noExecuteExpression(false)
  408. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
  409. .formDataJson(JSONObject.toJSONString(updateMap))
  410. .build(), YDConf.FORM_OPERATION.upsert);
  411. // 记录成功结果
  412. singleResult.put("operationResult", operationResult);
  413. singleResult.put("status", "success");
  414. singleResult.put("ddformInstanceId", ddformInstanceId);
  415. singleResult.put("fhdformInstanceId", fhdformInstanceId);
  416. successCount++;
  417. log.info("调拨单同步成功: djbh={}, transferId={}", djbh, transferId);
  418. } catch (Exception e) {
  419. log.error("同步单条调拨单数据异常: djbh={}", transferItem.get("djbh"), e);
  420. singleResult.put("errorMsg", e.getMessage());
  421. singleResult.put("status", "fail");
  422. failCount++;
  423. }
  424. operationResults.add(singleResult);
  425. }
  426. // 构建返回结果
  427. Map<String, Object> data = new HashMap<>();
  428. data.put("operationResults", operationResults);
  429. data.put("totalCount", kdYdTransfers.size());
  430. data.put("successCount", successCount);
  431. data.put("failCount", failCount);
  432. result.put("code", failCount == 0 ? "200" : "300");
  433. result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
  434. result.put("data", data);
  435. log.info("【调拨单同步任务】完成,共处理{}条数据,成功{}条,失败{}条",
  436. kdYdTransfers.size(), successCount, failCount);
  437. } catch (Exception e) {
  438. log.error("调拨单同步任务执行异常", e);
  439. result.put("code", "500");
  440. result.put("msg", "系统异常:" + e.getMessage());
  441. result.put("data", new HashMap<>());
  442. }
  443. return result;
  444. }
  445. // private String safeConvertDateTimeToString(Object dateTime) {
  446. // try {
  447. // if (dateTime instanceof LocalDateTime) {
  448. // return String.valueOf(((LocalDateTime) dateTime)
  449. // .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
  450. // }
  451. // if (dateTime instanceof Date) return String.valueOf(((Date) dateTime).getTime());
  452. // if (dateTime instanceof Long) return String.valueOf(dateTime);
  453. // if (dateTime instanceof Integer) {
  454. // long t = ((Integer) dateTime).longValue();
  455. // return String.valueOf(t < 10000000000L ? t * 1000L : t);
  456. // }
  457. // if (dateTime instanceof String) {
  458. // String s = ((String) dateTime).trim();
  459. // if (s.matches("\\d+")) {
  460. // return String.valueOf(s.length() == 10 ? Long.parseLong(s) * 1000L : Long.parseLong(s));
  461. // }
  462. // }
  463. // return "";
  464. // } catch (Exception e) { return ""; }
  465. // }
  466. // 辅助方法 - 安全转换 BigDecimal 为字符串
  467. private String safeConvertBigDecimalToString(Object value) {
  468. if (value == null) {
  469. return "";
  470. }
  471. if (value instanceof BigDecimal) {
  472. return ((BigDecimal) value).toPlainString();
  473. }
  474. return String.valueOf(value);
  475. }
  476. // 辅助方法 - 安全转换日期时间为字符串
  477. private String safeConvertDateTimeToString(Object value) {
  478. if (value == null) {
  479. return "";
  480. }
  481. if (value instanceof LocalDateTime) {
  482. return ((LocalDateTime) value).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
  483. }
  484. return String.valueOf(value);
  485. }
  486. // 辅助方法 - 安全转换为字符串
  487. private String safeToString(Object obj) {
  488. return obj != null ? obj.toString() : null;
  489. }
  490. private static LocalDateTime parseTimestamp(String timestampStr) {
  491. if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
  492. try {
  493. long timestamp = Long.parseLong(timestampStr.trim());
  494. return LocalDateTime.ofInstant(
  495. Instant.ofEpochMilli(timestamp),
  496. ZoneId.systemDefault()
  497. );
  498. } catch (NumberFormatException e) {
  499. return null;
  500. }
  501. }
  502. private static int parseInt(String str, int defaultValue) {
  503. if (str == null || str.trim().isEmpty()) {
  504. return defaultValue;
  505. }
  506. try {
  507. return Integer.parseInt(str.trim());
  508. } catch (NumberFormatException e) {
  509. return defaultValue;
  510. }
  511. }
  512. private Object getddAss(String title, String id) {
  513. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
  514. }
  515. private Object getfhdAss(String title, String id) {
  516. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-FAE2575E112644ED914CAB4FEC9309F32AVR", "receipt", id, title, "");
  517. }
  518. private String safeGetString(Map formData, String key) {
  519. Object val = formData.get(key);
  520. return val == null ? "" : String.valueOf(val);
  521. }
  522. public static BigDecimal toBigDecimal(String str) {
  523. if (str == null || str.trim().isEmpty()) {
  524. return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  525. }
  526. try {
  527. return new BigDecimal(str.trim())
  528. .setScale(2, RoundingMode.HALF_UP);
  529. } catch (NumberFormatException e) {
  530. // 返回默认值而不是抛出异常,避免程序中断
  531. return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  532. }
  533. }
  534. /**
  535. * 重载方法,支持Number类型输入
  536. */
  537. public static BigDecimal toBigDecimal(Number number) {
  538. if (number == null) {
  539. return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  540. }
  541. return new BigDecimal(number.toString())
  542. .setScale(2, RoundingMode.HALF_UP);
  543. }
  544. }