YdHuaGaoServiceImpl.java 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650
  1. package com.malk.huagao.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.malk.huagao.entity.*;
  7. import com.malk.huagao.mapper.*;
  8. import com.malk.huagao.service.YdHuaGaoService;
  9. import com.malk.server.aliwork.YDConf;
  10. import com.malk.server.aliwork.YDParam;
  11. import com.malk.server.aliwork.YDSearch;
  12. import com.malk.server.common.McR;
  13. import com.malk.server.dingtalk.DDConf;
  14. import com.malk.service.aliwork.YDClient;
  15. import com.malk.utils.UtilMap;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.slf4j.MDC;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import java.math.BigDecimal;
  21. import java.time.LocalDateTime;
  22. import java.time.ZoneId;
  23. import java.time.format.DateTimeFormatter;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. @Slf4j
  27. @Service
  28. public class YdHuaGaoServiceImpl implements YdHuaGaoService {
  29. @Autowired
  30. private KdYdCustomerMapper kdYdCustomerMapper;
  31. @Autowired
  32. private YDClient ydClient;
  33. @Autowired
  34. private KdYdCustomerReferrerMapper kdYdCustomerReferrerMapper;
  35. @Autowired
  36. private KdYdOrderMapper kdYdOrderMapper;
  37. @Autowired
  38. private KdYdDeliveryMapper kdYdDeliveryMapper;
  39. @Autowired
  40. private KdYdOutboundMapper kdYdOutboundMapper;
  41. @Autowired
  42. private KdYdReceivableMapper kdYdReceivableMapper;
  43. @Autowired
  44. private KdYdOutboundDetailMapper kdYdOutboundDetailMapper;
  45. @Autowired
  46. private KdYdReceivableDetailMapper kdYdReceivableDetailMapper;
  47. @Autowired
  48. private KdYdDeliveryDetailMapper kdYdDeliveryDetailMapper;
  49. @Autowired
  50. private KdYdPaymentReceiptDetailMapper kdYdPaymentReceiptDetailMapper;
  51. @Autowired
  52. private KdYdPaymentReceiptMapper kdYdPaymentReceiptMapper;
  53. @Autowired
  54. private KdYdReceivalablePaymentMapper kdYdReceivalablePaymentMapper;
  55. @Autowired
  56. private KdYdZpMapper kdYdZpMapper;
  57. @Autowired
  58. private KdYdMaterialMapper kdYdMaterialMapper;
  59. @Autowired
  60. private KdYdTransferMapper kdYdTransferMapper;
  61. @Autowired
  62. private KdYdTransferDetailMapper kdYdTransferDetailMapper;
  63. @Autowired
  64. private YDConf ydConf;
  65. @Autowired
  66. private DDConf ddConf;
  67. @Override
  68. public void syncKdYdCustomer() {
  69. }
  70. @Override
  71. public void syncKdYDcustomerLiaison() {
  72. log.info("定时同步-客户推荐人");
  73. try {
  74. LocalDateTime now = LocalDateTime.now();
  75. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  76. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  77. List<KdYdCustomerReferrer> KdYdCustomerReferrers = kdYdCustomerReferrerMapper.selectRecentUpdated(fiveMinutesAgo);
  78. if (KdYdCustomerReferrers.isEmpty()) {
  79. log.info("【客户推荐人同步任务】无需要同步的数据,结束");
  80. return;
  81. }
  82. for (KdYdCustomerReferrer kdYdCustomerReferrer : KdYdCustomerReferrers) {
  83. try {
  84. String bm = kdYdCustomerReferrer.getBm();
  85. String tjruuid = kdYdCustomerReferrer.getTjruuid();
  86. String formInstId = kdYdCustomerReferrer.getFormInstId();
  87. if (ObjectUtil.hasEmpty(formInstId, bm)) {
  88. log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdCustomerReferrer.getId());
  89. continue;
  90. }
  91. // if (tjruuid == null) {
  92. // List<Map> khdata = (List<Map>) ydClient.queryData(
  93. // YDParam.builder()
  94. // .formUuid("FORM-68154CC0A7054BF0B1C933752CD3881FB0SR")
  95. // .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiov3", tjruuid)))
  96. // .build(),
  97. // YDConf.FORM_QUERY.retrieve_list_all
  98. // ).getData();
  99. // if (khdata.size() > 0) {
  100. // khbm = UtilMap.getString(khdata.get(0), "textField_meqhqqvg");
  101. // }
  102. //// }
  103. // LambdaQueryWrapper<KdYdCustomer> YdCustomerLambdaQueryWrapper = new LambdaQueryWrapper<>();
  104. // YdCustomerLambdaQueryWrapper.eq(KdYdCustomer::getTjruuid, tjruuid);
  105. // KdYdCustomer kdYdCustomer1 = kdYdCustomerMapper.selectOne(YdCustomerLambdaQueryWrapper);
  106. // String formInstId1 = kdYdCustomer1.getFormInstId();
  107. // ydClient.operateData(
  108. // YDParam.builder()
  109. // .formInstanceId(formInstId1)
  110. // .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mfdrrg87", bm)))
  111. // .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  112. ydClient.operateData(
  113. YDParam.builder()
  114. .formInstanceId(formInstId)
  115. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiouy", bm)))
  116. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  117. } catch (Exception e) {
  118. log.error("同步单条客户推荐人数据异常: formInstId={}", kdYdCustomerReferrer.getFormInstId(), e);
  119. }
  120. }
  121. log.info("【客户推荐人同步任务】执行完成,共处理 {} 条记录", KdYdCustomerReferrers.size());
  122. } catch (Exception e) {
  123. log.error("【客户推荐人同步任务】执行过程中发生严重错误", e);
  124. }
  125. }
  126. @Override
  127. public void syncKdYdOrder() {
  128. log.info("定时同步-订单");
  129. try {
  130. LocalDateTime now = LocalDateTime.now();
  131. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  132. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  133. List<KdYdOrder> KdYdOrders = kdYdOrderMapper.selectRecentUpdated(fiveMinutesAgo);
  134. if (KdYdOrders.isEmpty()) {
  135. log.info("【订单同步任务】无需要同步的数据,结束");
  136. return;
  137. }
  138. for (KdYdOrder kdYdOrder : KdYdOrders) {
  139. try {
  140. String bm = kdYdOrder.getDjbh();
  141. // String tjruuid = kdYdOrder.getTjruuid();
  142. // String formInstId = kdYdOrder.getForminstid();
  143. // if (ObjectUtil.hasEmpty(formInstId, bm)) {
  144. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdOrder.getId());
  145. // continue;
  146. // }
  147. // if (tjruuid == null) {
  148. // List<Map> khdata = (List<Map>) ydClient.queryData(
  149. // YDParam.builder()
  150. // .formUuid("FORM-68154CC0A7054BF0B1C933752CD3881FB0SR")
  151. // .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiov3", tjruuid)))
  152. // .build(),
  153. // YDConf.FORM_QUERY.retrieve_list_all
  154. // ).getData();
  155. // if (khdata.size() > 0) {
  156. // khbm = UtilMap.getString(khdata.get(0), "textField_meqhqqvg");
  157. // }
  158. //// }
  159. // LambdaQueryWrapper<KdYdCustomer> YdCustomerLambdaQueryWrapper = new LambdaQueryWrapper<>();
  160. // YdCustomerLambdaQueryWrapper.eq(KdYdCustomer::getTjruuid, tjruuid);
  161. // KdYdCustomer kdYdCustomer1 = kdYdCustomerMapper.selectOne(YdCustomerLambdaQueryWrapper);
  162. // String formInstId1 = kdYdCustomer1.getFormInstId();
  163. // ydClient.operateData(
  164. // YDParam.builder()
  165. // .formInstanceId(formInstId1)
  166. // .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mfdrrg87", bm)))
  167. // .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  168. ydClient.operateData(
  169. YDParam.builder()
  170. // .formInstanceId(formInstId)
  171. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mg327tqe", bm)))
  172. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  173. } catch (Exception e) {
  174. // log.error("同步单条订单数据异常: formInstId={}", kdYdOrder.getForminstid(), e);
  175. }
  176. }
  177. log.info("【订单同步任务】执行完成,共处理 {} 条记录", KdYdOrders.size());
  178. } catch (Exception e) {
  179. log.error("【订单同步任务】执行过程中发生严重错误", e);
  180. }
  181. }
  182. @Override
  183. public void syncKdYdDelivery() {
  184. log.info("定时同步-发货单");
  185. try {
  186. LocalDateTime now = LocalDateTime.now();
  187. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  188. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  189. List<KdYdDelivery> KdYdDeliverys = kdYdDeliveryMapper.selectRecentUpdated(fiveMinutesAgo);
  190. if (KdYdDeliverys.isEmpty()) {
  191. log.info("【发货单同步任务】无需要同步的数据,结束");
  192. return;
  193. }
  194. for (KdYdDelivery kdYdDelivery : KdYdDeliverys) {
  195. try {
  196. String djbh = kdYdDelivery.getDjbh();
  197. // String tjruuid = kdYdOrder.getTjruuid();
  198. // String formInstId = kdYdDelivery.getForminstid();
  199. // if (ObjectUtil.hasEmpty(formInstId, djbh)) {
  200. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdDelivery.getId());
  201. // continue;
  202. // }
  203. ydClient.operateData(
  204. YDParam.builder()
  205. // .formInstanceId(formInstId)
  206. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mg3fuqvh", djbh)))
  207. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  208. } catch (Exception e) {
  209. // log.error("同步单条发货单数据异常: formInstId={}", kdYdDelivery.getForminstid(), e);
  210. }
  211. }
  212. log.info("【发货单同步任务】执行完成,共处理 {} 条记录", KdYdDeliverys.size());
  213. } catch (Exception e) {
  214. log.error("【发货单同步任务】执行过程中发生严重错误", e);
  215. }
  216. }
  217. @Override
  218. public void synckdYdOutbound() {
  219. log.info("定时同步-出库单");
  220. // 查询需要删除的数据
  221. LambdaQueryWrapper<KdYdOutbound> outbounddel = new LambdaQueryWrapper<>();
  222. outbounddel.eq(KdYdOutbound::getOperationType, 3)
  223. .eq(KdYdOutbound::getSyncStatus, "0");
  224. List<KdYdOutbound> kdYdOutbounddels = kdYdOutboundMapper.selectList(outbounddel);
  225. // 批量删除处理
  226. if (!kdYdOutbounddels.isEmpty()) {
  227. log.info("开始处理出库单删除操作,共{}条数据", kdYdOutbounddels.size());
  228. ArrayList<String> deleteList = new ArrayList<>();
  229. int deleteSuccessCount = 0;
  230. for (KdYdOutbound kdYdOutbound : kdYdOutbounddels) {
  231. try {
  232. String djbh = kdYdOutbound.getDjbh();
  233. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  234. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  235. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", djbh)))
  236. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  237. if (list1 != null && !list1.isEmpty()) {
  238. for (Map map : list1) {
  239. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  240. if (formInstanceId != null) {
  241. deleteList.add(formInstanceId);
  242. }
  243. }
  244. deleteSuccessCount++;
  245. // 同时删除对应的子表数据
  246. Long outboundId = kdYdOutbound.getId();
  247. LambdaQueryWrapper<KdYdOutboundDetail> detailDelqw = new LambdaQueryWrapper<>();
  248. detailDelqw.eq(KdYdOutboundDetail::getOutboundId, outboundId);
  249. List<KdYdOutboundDetail> detailDels = kdYdOutboundDetailMapper.selectList(detailDelqw);
  250. if (!detailDels.isEmpty()) {
  251. for (KdYdOutboundDetail detail : detailDels) {
  252. detail.setSyncStatus("1");
  253. kdYdOutboundDetailMapper.updateById(detail);
  254. }
  255. }
  256. } else {
  257. log.warn("未找到对应的出库单数据: djbh={}", djbh);
  258. }
  259. // 删除操作完成后更新状态
  260. kdYdOutbound.setSyncStatus("1");
  261. kdYdOutboundMapper.updateById(kdYdOutbound);
  262. } catch (Exception e) {
  263. log.error("删除出库单数据查询异常: djbh={}", kdYdOutbound.getDjbh(), e);
  264. }
  265. }
  266. // 执行批量删除
  267. if (!deleteList.isEmpty()) {
  268. try {
  269. ydClient.operateData(YDParam.builder()
  270. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  271. .formInstanceIdList(deleteList)
  272. .build(), YDConf.FORM_OPERATION.delete_batch);
  273. log.info("出库单批量删除完成,共删除{}条数据", deleteList.size());
  274. } catch (Exception e) {
  275. log.error("出库单批量删除操作异常", e);
  276. }
  277. }
  278. return;
  279. } else {
  280. log.info("【出库单删除任务】无需要删除的数据");
  281. }
  282. LambdaQueryWrapper<KdYdOutbound> outboundqw = new LambdaQueryWrapper<>();
  283. outboundqw.eq(KdYdOutbound::getSyncStatus, "0");
  284. List<KdYdOutbound> kdYdOutbounds = kdYdOutboundMapper.selectList(outboundqw);
  285. if (kdYdOutbounds.isEmpty()) {
  286. log.info("【出库单同步任务】无需要同步的数据,结束");
  287. return;
  288. }
  289. log.info("【出库单同步任务】开始同步,共{}条数据", kdYdOutbounds.size());
  290. int successCount = 0;
  291. int failCount = 0;
  292. for (KdYdOutbound kdYdOutbound : kdYdOutbounds) {
  293. try {
  294. Long outboundId = kdYdOutbound.getId();
  295. String djbh = kdYdOutbound.getDjbh();
  296. String deliveryId = kdYdOutbound.getDeliveryBm();
  297. log.debug("开始同步出库单: ID={}, 单据编号={}", outboundId, djbh);
  298. LambdaQueryWrapper<KdYdOutboundDetail> outbounddetailqw = new LambdaQueryWrapper<>();
  299. outbounddetailqw.eq(KdYdOutboundDetail::getOutboundId, outboundId)
  300. .orderByAsc(KdYdOutboundDetail::getDetailId);
  301. List<KdYdOutboundDetail> kdYdOutboundDetails = kdYdOutboundDetailMapper.selectList(outbounddetailqw);
  302. ArrayList<Object> tableList = new ArrayList<>();
  303. List<Map<String, Object>> tableListxlh = new ArrayList<>(); // 在循环外初始化
  304. for (KdYdOutboundDetail kdYdOutboundDetail : kdYdOutboundDetails) {
  305. HashMap<String, String> tablemap = new HashMap<>();
  306. HashMap<String, String> tablemapxlh = new HashMap<>();
  307. tablemap.put("textField_mejnamff", kdYdOutboundDetail.getWlbm());
  308. tablemap.put("textField_mejnamfg", kdYdOutboundDetail.getWlmc());
  309. tablemap.put("textField_mg34txh1", kdYdOutboundDetail.getTpsb());
  310. tablemap.put("textField_mejnamfh", kdYdOutboundDetail.getGgxh());
  311. tablemap.put("textField_mejnamfk", kdYdOutboundDetail.getKcdw());
  312. tablemap.put("numberField_mejnamfl", String.valueOf(kdYdOutboundDetail.getYfsl() != null ? kdYdOutboundDetail.getYfsl().setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP)));
  313. tablemap.put("numberField_mg34txh2", kdYdOutboundDetail.getSfsl() != null ? kdYdOutboundDetail.getSfsl().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  314. tablemap.put("numberField_mg34txh3", kdYdOutboundDetail.getDj() != null ? kdYdOutboundDetail.getDj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  315. tablemap.put("numberField_mg34txh4", kdYdOutboundDetail.getHsdj() != null ? kdYdOutboundDetail.getHsdj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  316. tablemap.put("textField_mg34txh5", kdYdOutboundDetail.getPh());
  317. tablemap.put("numberField_mg34txh6", kdYdOutboundDetail.getSl() != null ? kdYdOutboundDetail.getSl().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  318. tablemap.put("numberField_mg34txh7", kdYdOutboundDetail.getSe() != null ? kdYdOutboundDetail.getSe().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  319. tablemap.put("numberField_mg34txh8", kdYdOutboundDetail.getJe() != null ? kdYdOutboundDetail.getJe().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  320. tablemap.put("numberField_mg34txh9", kdYdOutboundDetail.getJshj() != null ? kdYdOutboundDetail.getJshj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  321. tablemap.put("textField_mf6a0h6l", kdYdOutboundDetail.getCk());
  322. tablemap.put("textField_mf6a0h6k", kdYdOutboundDetail.getCw());
  323. tablemap.put("textField_mf6a0h6p", kdYdOutboundDetail.getKczt());
  324. tablemap.put("numberField_mg34txha", kdYdOutboundDetail.getJtc() != null ? kdYdOutboundDetail.getJtc().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  325. tablemap.put("textField_mejnamf6", kdYdOutboundDetail.getSjr());
  326. tablemap.put("textField_mejnamf7", kdYdOutboundDetail.getSjdh());
  327. tablemap.put("textareaField_mf6a0h5e", kdYdOutboundDetail.getSjdz());
  328. tablemap.put("textField_mejnamfx", kdYdOutboundDetail.getSsxl());
  329. tablemap.put("textField_mf6a0h6u", kdYdOutboundDetail.getGg());
  330. tablemap.put("textField_mhlqeoas", kdYdOutboundDetail.getZbq());
  331. tablemap.put("dateField_mg34txhb", kdYdOutboundDetail.getFwdqr() != null ? String.valueOf(kdYdOutboundDetail.getFwdqr().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  332. tablemap.put("textField_mf6a0h6w", kdYdOutboundDetail.getXlh());
  333. tablemap.put("textField_mhlqeoat", kdYdOutboundDetail.getZbqsf());
  334. tablemap.put("textField_mf6a0h6x", kdYdOutboundDetail.getKddh());
  335. tablemap.put("textField_mf6a0h6y", kdYdOutboundDetail.getJx());
  336. String xlhjh = kdYdOutboundDetail.getXlh();
  337. if (xlhjh != null && !xlhjh.trim().isEmpty()) {
  338. List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
  339. .map(String::trim)
  340. .filter(item -> !item.isEmpty())
  341. .map(item -> {
  342. Map<String, Object> map = new HashMap<>();
  343. map.put("textField_mf6a0h6w", item); // 序列号
  344. map.put("textField_mjqst61l", kdYdOutboundDetail.getWlbm()); // 对应的物料编码
  345. map.put("textField_mjqst61m", kdYdOutboundDetail.getGgxh());
  346. return map;
  347. })
  348. .collect(Collectors.toList());
  349. tableListxlh.addAll(currentXlhList); // 追加到总列表
  350. }
  351. // 主表仍保留原始 xlh(可选)
  352. tablemap.put("textField_mf6a0h6w", kdYdOutboundDetail.getXlh());
  353. tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
  354. tableList.add(tablemap);
  355. // 更新同步状态
  356. kdYdOutboundDetail.setSyncStatus("1");
  357. kdYdOutboundDetailMapper.updateById(kdYdOutboundDetail);
  358. }
  359. String fhdformInstanceId = null;
  360. String fhdbh = null;
  361. try {
  362. log.debug("开始查询出库数据: deliveryId={}", deliveryId);
  363. List<Map> ddlist = (List<Map>) ydClient.queryData(
  364. YDParam.builder()
  365. .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
  366. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  367. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  368. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", deliveryId)))
  369. .build(),
  370. YDConf.FORM_QUERY.retrieve_list_all
  371. ).getData();
  372. if (ddlist != null && !ddlist.isEmpty()) {
  373. for (Map<String, Object> khitem : ddlist) {
  374. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  375. if (khformData != null && deliveryId.equals(khformData.get("serialNumberField_mheazm7w"))) {
  376. fhdformInstanceId = (String) khitem.get("formInstanceId");
  377. fhdbh = (String) khformData.get("serialNumberField_mheazm7w");
  378. break;
  379. }
  380. }
  381. if (fhdformInstanceId == null) {
  382. log.warn("未找到与fhdbh={}完全匹配的订单数据", fhdbh);
  383. }
  384. } else {
  385. log.warn("未查询到订单数据: fhdbh={}", fhdbh);
  386. }
  387. } catch (Exception e) {
  388. log.error("查询订单数据异常: fhdbh={}, 错误信息={}", fhdbh, e.getMessage(), e);
  389. }
  390. HashMap<Object, Object> updateMap = new HashMap<>();
  391. updateMap.put("tableField_mejnamfd", tableList);
  392. updateMap.put("tableField_mips137b", tableListxlh);
  393. if (fhdbh != null && fhdformInstanceId != null) {
  394. updateMap.put("associationFormField_mejmml36",
  395. Arrays.asList(getfhdAss(fhdformInstanceId,fhdbh)));
  396. }
  397. updateMap.put("dateField_krbgloam", kdYdOutbound.getDateTime() != null ? String.valueOf(kdYdOutbound.getDateTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  398. updateMap.put("textField_krnn5bmr", kdYdOutbound.getXsDept());
  399. updateMap.put("textField_mhjxw689", kdYdOutbound.getFhDept());
  400. updateMap.put("textField_mhjxw686", kdYdOutbound.getCgy());
  401. updateMap.put("selectField_mejowmna", kdYdOutbound.getDjlx());
  402. updateMap.put("textField_mg34txgm", kdYdOutbound.getDjbh());
  403. updateMap.put("textField_mhlqeoar", kdYdOutbound.getJsbb());
  404. updateMap.put("textField_mejnamf2", kdYdOutbound.getKh());
  405. updateMap.put("selectField_mejowmnc", kdYdOutbound.getXslx());
  406. updateMap.put("textField_mhjxw688", kdYdOutbound.getXsy());
  407. updateMap.put("selectField_mg34txgt", kdYdOutbound.getXssx());
  408. updateMap.put("selectField_megi74y8", kdYdOutbound.getKhsx());
  409. updateMap.put("textField_mg34txgy", kdYdOutbound.getKhtjr());
  410. updateMap.put("textField_mg34txgz", kdYdOutbound.getYsdh());
  411. updateMap.put("textField_migw33w6", deliveryId);
  412. // 添加同步操作(根据您的实际需求添加)
  413. ydClient.operateData(YDParam.builder()
  414. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  415. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", kdYdOutbound.getDjbh())))
  416. .formDataJson(JSONObject.toJSONString(updateMap))
  417. .build(), YDConf.FORM_OPERATION.upsert
  418. );
  419. // 更新同步状态
  420. kdYdOutbound.setSyncStatus("1");
  421. kdYdOutboundMapper.updateById(kdYdOutbound);
  422. successCount++;
  423. log.info("出库单同步成功: 单据编号={}", djbh);
  424. } catch (Exception e) {
  425. failCount++;
  426. log.error("同步单条出库单数据异常: 单据编号={}, 错误信息={}",
  427. kdYdOutbound.getDjbh(), e.getMessage(), e);
  428. }
  429. }
  430. log.info("【出库单同步任务】完成: 成功={}, 失败={}, 总计={}",
  431. successCount, failCount, kdYdOutbounds.size());
  432. }
  433. @Override
  434. public void syncKdYdReceivable() {
  435. log.info("定时同步-应收单");
  436. // 查询需要删除的数据
  437. LambdaQueryWrapper<KdYdReceivable> receivabledel = new LambdaQueryWrapper<>();
  438. receivabledel.eq(KdYdReceivable::getOperationType, 3)
  439. .eq(KdYdReceivable::getSyncStatus, "0");
  440. List<KdYdReceivable> kdYdReceivabledels = kdYdReceivableMapper.selectList(receivabledel);
  441. // 批量删除处理
  442. if (!kdYdReceivabledels.isEmpty()) {
  443. log.info("开始处理应收单删除操作,共{}条数据", kdYdReceivabledels.size());
  444. ArrayList<String> deleteList = new ArrayList<>();
  445. int deleteSuccessCount = 0;
  446. for (KdYdReceivable kdYdReceivable : kdYdReceivabledels) {
  447. try {
  448. String djbh = kdYdReceivable.getDjbh();
  449. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  450. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  451. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  452. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  453. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", djbh)))
  454. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  455. if (list1 != null && !list1.isEmpty()) {
  456. for (Map map : list1) {
  457. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  458. if (formInstanceId != null) {
  459. deleteList.add(formInstanceId);
  460. }
  461. }
  462. deleteSuccessCount++;
  463. // 同时删除对应的子表数据
  464. Long receivableId = kdYdReceivable.getId();
  465. // 删除应收单明细
  466. LambdaQueryWrapper<KdYdReceivableDetail> detailDelqw = new LambdaQueryWrapper<>();
  467. detailDelqw.eq(KdYdReceivableDetail::getReceivableId, receivableId);
  468. List<KdYdReceivableDetail> detailDels = kdYdReceivableDetailMapper.selectList(detailDelqw);
  469. if (!detailDels.isEmpty()) {
  470. for (KdYdReceivableDetail detail : detailDels) {
  471. detail.setSyncStatus("1");
  472. kdYdReceivableDetailMapper.updateById(detail);
  473. }
  474. log.debug("更新了{}条应收单明细删除状态", detailDels.size());
  475. }
  476. // 删除收款计划
  477. LambdaQueryWrapper<KdYdReceivablePayment> paymentDelqw = new LambdaQueryWrapper<>();
  478. paymentDelqw.eq(KdYdReceivablePayment::getReceivableId, receivableId);
  479. List<KdYdReceivablePayment> paymentDels = kdYdReceivalablePaymentMapper.selectList(paymentDelqw);
  480. if (!paymentDels.isEmpty()) {
  481. for (KdYdReceivablePayment payment : paymentDels) {
  482. payment.setSyncStatus("1");
  483. kdYdReceivalablePaymentMapper.updateById(payment);
  484. }
  485. log.debug("更新了{}条收款计划删除状态", paymentDels.size());
  486. }
  487. } else {
  488. log.warn("未找到对应的应收单数据: djbh={}", djbh);
  489. }
  490. // 删除操作完成后更新状态
  491. kdYdReceivable.setSyncStatus("1");
  492. kdYdReceivableMapper.updateById(kdYdReceivable);
  493. } catch (Exception e) {
  494. log.error("删除应收单数据查询异常: djbh={}", kdYdReceivable.getDjbh(), e);
  495. }
  496. }
  497. // 执行批量删除
  498. if (!deleteList.isEmpty()) {
  499. try {
  500. ydClient.operateData(YDParam.builder()
  501. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  502. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  503. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  504. .formInstanceIdList(deleteList)
  505. .build(), YDConf.FORM_OPERATION.delete_batch);
  506. log.info("应收单批量删除完成,共删除{}条数据", deleteList.size());
  507. } catch (Exception e) {
  508. log.error("应收单批量删除操作异常", e);
  509. }
  510. }
  511. log.info("应收单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  512. return;
  513. } else {
  514. log.info("【应收单删除任务】无需要删除的数据");
  515. }
  516. LambdaQueryWrapper<KdYdReceivable> receivableqw = new LambdaQueryWrapper<>();
  517. receivableqw.eq(KdYdReceivable::getSyncStatus, "0");
  518. List<KdYdReceivable> kdYdReceivables = kdYdReceivableMapper.selectList(receivableqw);
  519. if (kdYdReceivables.isEmpty()) {
  520. log.info("【应收单同步任务】无需要同步的数据,结束");
  521. return;
  522. }
  523. log.info("【应收单同步任务】开始同步,共{}条数据", kdYdReceivables.size());
  524. int successCount = 0;
  525. int failCount = 0;
  526. for (KdYdReceivable kdYdReceivable : kdYdReceivables) {
  527. try {
  528. Long id = kdYdReceivable.getId();
  529. String djbh = kdYdReceivable.getDjbh();
  530. log.debug("开始同步应收单: ID={}, 单据编号={}", id, djbh);
  531. // 同步应收单明细
  532. LambdaQueryWrapper<KdYdReceivableDetail> receivabledetailqw = new LambdaQueryWrapper<>();
  533. receivabledetailqw.eq(KdYdReceivableDetail::getReceivableId, id)
  534. .orderByAsc(KdYdReceivableDetail::getDetailId);
  535. List<KdYdReceivableDetail> kdYdReceivabledetails = kdYdReceivableDetailMapper.selectList(receivabledetailqw);
  536. if (kdYdReceivabledetails.isEmpty()) {
  537. log.info("【应收单{}】无需要同步的明细数据", djbh);
  538. continue;
  539. }
  540. int count = 1;
  541. ArrayList<Object> tableList = new ArrayList<>();
  542. for (KdYdReceivableDetail kdYdReceivableDetail : kdYdReceivabledetails) {
  543. HashMap<Object, Object> tablemap = new HashMap<>();
  544. String wlbm = kdYdReceivableDetail.getWlbm();
  545. String wlmc = kdYdReceivableDetail.getWlmc();
  546. String ggxh = kdYdReceivableDetail.getGgxh();
  547. String jjdw = kdYdReceivableDetail.getJjdw();
  548. String ssxl = kdYdReceivableDetail.getSsxl();
  549. BigDecimal dj = kdYdReceivableDetail.getDj();
  550. BigDecimal hsdj = kdYdReceivableDetail.getHsdj();
  551. BigDecimal sl = kdYdReceivableDetail.getSl();
  552. BigDecimal je = kdYdReceivableDetail.getJe();
  553. BigDecimal zbjshj = kdYdReceivableDetail.getJshj();
  554. String kcdw = kdYdReceivableDetail.getKcdw();
  555. String ph = kdYdReceivableDetail.getPh();
  556. BigDecimal se = kdYdReceivableDetail.getSe();
  557. BigDecimal jjsl = kdYdReceivableDetail.getJjsl();
  558. BigDecimal zkl = kdYdReceivableDetail.getZkl();
  559. BigDecimal bhsje = kdYdReceivableDetail.getBhsje();
  560. BigDecimal jjjbsl = kdYdReceivableDetail.getJjjbsl();
  561. BigDecimal kcsl = kdYdReceivableDetail.getKcsl();
  562. String sfzp = kdYdReceivableDetail.getSfzp();
  563. String gg = kdYdReceivableDetail.getGg();
  564. BigDecimal tc = kdYdReceivableDetail.getTc();
  565. String jx = kdYdReceivableDetail.getJx();
  566. BigDecimal zke = kdYdReceivableDetail.getZke();
  567. String detailId = kdYdReceivableDetail.getDetailId();
  568. // 优化:确保所有金额字段保留两位小数
  569. tablemap.put("textField_mgt4w4ip", count);
  570. tablemap.put("textField_mf6el3zy", wlbm);
  571. tablemap.put("textField_mf6el3zz", wlmc);
  572. tablemap.put("textField_mejmtic5", ggxh);
  573. tablemap.put("textField_mf6el400", jjdw);
  574. tablemap.put("textField_mhllijwo", ssxl);
  575. tablemap.put("numberField_mf6el402", dj != null ? dj.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  576. tablemap.put("numberField_mejmticb", hsdj != null ? hsdj.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  577. tablemap.put("numberField_mf6el403", sl != null ? sl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  578. tablemap.put("numberField_mejmtic7", zbjshj != null ? zbjshj.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  579. tablemap.put("textField_mf6el409", kcdw);
  580. tablemap.put("textField_mf6el408", ph);
  581. tablemap.put("numberField_mf6el406", se != null ? se.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  582. tablemap.put("numberField_mejmtic6", jjsl != null ? jjsl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  583. tablemap.put("numberField_mf6el404", zkl != null ? zkl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  584. tablemap.put("numberField_mejmticc", bhsje != null ? bhsje.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  585. tablemap.put("numberField_mf6el407", jjjbsl != null ? jjjbsl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  586. tablemap.put("numberField_mf6el40a", kcsl != null ? kcsl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  587. tablemap.put("radioField_mejnamfn", sfzp);
  588. tablemap.put("numberField_mf6el40c", tc != null ? tc.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  589. tablemap.put("textField_mf6el40d", jx);
  590. tablemap.put("textField_mf6el40b", gg);
  591. tablemap.put("numberField_mf6el405", zke != null ? zke.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  592. count++;
  593. tableList.add(tablemap);
  594. kdYdReceivableDetail.setSyncStatus("1");
  595. kdYdReceivableDetailMapper.updateById(kdYdReceivableDetail);
  596. }
  597. // 同步收款计划
  598. LambdaQueryWrapper<KdYdReceivablePayment> receivablepayqw = new LambdaQueryWrapper<>();
  599. receivablepayqw
  600. .eq(KdYdReceivablePayment::getReceivableId, id)
  601. .orderByAsc(KdYdReceivablePayment::getDetailId);
  602. List<KdYdReceivablePayment> kdYdReceivablePayments = kdYdReceivalablePaymentMapper.selectList(receivablepayqw);
  603. ArrayList<Object> tableListPay = new ArrayList<>();
  604. if (!kdYdReceivablePayments.isEmpty()) {
  605. for (KdYdReceivablePayment kdYdReceivablePayment : kdYdReceivablePayments) {
  606. HashMap<Object, Object> tablemap1 = new HashMap<>();
  607. long timestamp = kdYdReceivablePayment.getEndTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli();
  608. String xsddh = kdYdReceivablePayment.getXsddh();
  609. BigDecimal ysje = kdYdReceivablePayment.getYsje();
  610. BigDecimal ysbl = kdYdReceivablePayment.getYsbl();
  611. BigDecimal ysjebwb = kdYdReceivablePayment.getYsjebwb();
  612. BigDecimal stkdglje = kdYdReceivablePayment.getStkdglje();
  613. tablemap1.put("textField_mhiui6va", xsddh);
  614. tablemap1.put("dateField_mhiui6v9", timestamp);
  615. tablemap1.put("numberField_mhiui6v8", ysje != null ? ysje.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  616. tablemap1.put("numberField_mhiui6v6", ysbl != null ? ysbl.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  617. tablemap1.put("numberField_mhiui6vb", ysjebwb != null ? ysjebwb.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  618. tablemap1.put("numberField_mhjy9hzj", stkdglje != null ? stkdglje.setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  619. tableListPay.add(tablemap1);
  620. kdYdReceivablePayment.setSyncStatus("1");
  621. kdYdReceivalablePaymentMapper.updateById(kdYdReceivablePayment);
  622. }
  623. }
  624. String ckddjbh = kdYdReceivable.getCkddjbh();
  625. String ckdformInstanceId = null;
  626. String ckdbh = null;
  627. try {
  628. List<Map> ddlist = (List<Map>) ydClient.queryData(
  629. YDParam.builder()
  630. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  631. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  632. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  633. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mg34txgm", ckddjbh)))
  634. .build(),
  635. YDConf.FORM_QUERY.retrieve_list_all
  636. ).getData();
  637. if (ddlist != null && !ddlist.isEmpty()) {
  638. for (Map<String, Object> khitem : ddlist) {
  639. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  640. if (khformData != null && ckddjbh.equals(khformData.get("textField_mg34txgm"))) {
  641. ckdformInstanceId = (String) khitem.get("formInstanceId");
  642. ckdbh = (String) khformData.get("textField_mg34txgm");
  643. break;
  644. }
  645. }
  646. if (ckdformInstanceId == null) {
  647. log.warn("未找到与ckdbh={}完全匹配的订单数据", ckdbh);
  648. }
  649. } else {
  650. log.warn("未查询到订单数据: ckdbh={}", ckdbh);
  651. }
  652. } catch (Exception e) {
  653. log.error("查询订单数据异常: ckdbh={}, 错误信息={}", ckdbh, e.getMessage(), e);
  654. }
  655. // 构建主表数据
  656. HashMap<Object, Object> updateData = new HashMap<>();
  657. updateData.put("tableField_mf6el3zx", tableList);
  658. if (ckdbh != null && ckdformInstanceId != null) {
  659. updateData.put("associationFormField_mejmtick",
  660. Arrays.asList(getysdAss(ckdbh, ckdformInstanceId)));
  661. }
  662. updateData.put("tableField_mhiui6v5", tableListPay);
  663. updateData.put("textField_mg3a0tgs", kdYdReceivable.getDjbh());
  664. updateData.put("textField_mj15q3dk", ckddjbh);
  665. updateData.put("selectField_mg3a0th4", kdYdReceivable.getDjlx());
  666. updateData.put("selectField_mev13l3r", kdYdReceivable.getSktj());
  667. updateData.put("dateField_mejmtic3", kdYdReceivable.getEndTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
  668. updateData.put("dateField_mejmtic2", kdYdReceivable.getBusinessTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
  669. updateData.put("numberField_mejmtic8", kdYdReceivable.getJshj() != null ? kdYdReceivable.getJshj().setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  670. updateData.put("textField_mejmml3k", kdYdReceivable.getKh());
  671. updateData.put("textField_mhjy9hzh", kdYdReceivable.getXsy());
  672. updateData.put("selectField_mejowmnc", kdYdReceivable.getXslx());
  673. updateData.put("selectField_megi74y8", kdYdReceivable.getKhsx());
  674. updateData.put("textField_krnn5bmr", kdYdReceivable.getXsbm());
  675. updateData.put("textField_mhjy9hzi", kdYdReceivable.getLzlx());
  676. updateData.put("textareaField_mg3a0tgx", kdYdReceivable.getBz());
  677. updateData.put("selectField_mg3fuqvn", kdYdReceivable.getBb());
  678. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU", djbh);
  679. // 执行同步
  680. ydClient.operateData(YDParam.builder()
  681. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  682. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", kdYdReceivable.getDjbh())))
  683. .formDataJson(JSONObject.toJSONString(updateData))
  684. .build(), YDConf.FORM_OPERATION.upsert
  685. );
  686. kdYdReceivable.setSyncStatus("1");
  687. kdYdReceivableMapper.updateById(kdYdReceivable);
  688. successCount++;
  689. log.info("应收单同步成功: 单据编号={}", djbh);
  690. } catch (Exception e) {
  691. failCount++;
  692. log.error("同步应收单异常: ID={}, 单据编号={}, 错误信息={}",
  693. kdYdReceivable.getId(), kdYdReceivable.getDjbh(), e.getMessage(), e);
  694. }
  695. }
  696. log.info("【应收单同步任务】完成: 成功={}, 失败={}, 总计={}",
  697. successCount, failCount, kdYdReceivables.size());
  698. }
  699. @Override
  700. public void synckdYdZp() {
  701. log.info("定时同步-发票单");
  702. try {
  703. LocalDateTime now = LocalDateTime.now();
  704. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  705. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  706. List<KdYdZp> kdYdZps = kdYdZpMapper.selectRecentUpdated(fiveMinutesAgo);
  707. if (kdYdZps.isEmpty()) {
  708. log.info("【发票单同步任务】无需要同步的数据,结束");
  709. return;
  710. }
  711. for (KdYdZp kdYdZp : kdYdZps) {
  712. try {
  713. String djbh = kdYdZp.getDjbh();
  714. String fph = kdYdZp.getFph();
  715. // String formInstId = kdYdZp.getForminstid();
  716. // if (ObjectUtil.hasEmpty(formInstId, djbh, fph)) {
  717. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdZp.getId());
  718. // continue;
  719. // }
  720. ydClient.operateData(
  721. YDParam.builder()
  722. // .formInstanceId(formInstId)
  723. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgt6lcqq, textField_mejmml3a", djbh, fph)))
  724. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  725. } catch (Exception e) {
  726. // log.error("同步单条发票单数据异常: formInstId={}", kdYdZp.getForminstid(), e);
  727. }
  728. }
  729. log.info("【发票单同步任务】执行完成,共处理 {} 条记录", kdYdZps.size());
  730. } catch (Exception e) {
  731. log.error("【发票单同步任务】执行过程中发生严重错误", e);
  732. }
  733. }
  734. @Override
  735. public void synckdYdMaterial() {
  736. log.info("定时同步-物料单");
  737. // 查询需要删除的数据
  738. LambdaQueryWrapper<KdYdMaterial> materialdel = new LambdaQueryWrapper<>();
  739. materialdel.eq(KdYdMaterial::getOperationType, "3")
  740. .eq(KdYdMaterial::getSyncStatus, "0");
  741. List<KdYdMaterial> kdYdMaterialdels = kdYdMaterialMapper.selectList(materialdel);
  742. // 批量删除处理
  743. if (!kdYdMaterialdels.isEmpty()) {
  744. log.info("开始处理删除操作,共{}条数据", kdYdMaterialdels.size());
  745. ArrayList<String> list = new ArrayList<>();
  746. int deleteSuccessCount = 0;
  747. for (KdYdMaterial kdYdMaterial : kdYdMaterialdels) {
  748. try {
  749. String wlbm = String.valueOf(kdYdMaterial.getFMATERIALID());
  750. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  751. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  752. .appType("APP_VQDMMWS6OR1VHL8VMFD3") // 新增:添加应用参数
  753. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2") // 新增:添加系统令牌
  754. .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_misfb2ft", wlbm)))
  755. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  756. if (list1 != null && !list1.isEmpty()) {
  757. for (Map map : list1) {
  758. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  759. if (formInstanceId != null) {
  760. list.add(formInstanceId);
  761. log.debug("找到待删除的表单实例: formInstanceId={}", formInstanceId);
  762. }
  763. }
  764. deleteSuccessCount++;
  765. } else {
  766. log.warn("未找到对应的物料数据: wlbm={}", wlbm);
  767. }
  768. // 删除操作完成后更新状态
  769. kdYdMaterial.setSyncStatus("1");
  770. kdYdMaterialMapper.updateById(kdYdMaterial);
  771. } catch (Exception e) {
  772. log.error("删除物料数据查询异常: wlbm={}", kdYdMaterial.getWlbm(), e);
  773. }
  774. }
  775. // 执行批量删除
  776. if (!list.isEmpty()) {
  777. try {
  778. ydClient.operateData(YDParam.builder()
  779. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  780. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  781. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  782. .formInstanceIdList(list)
  783. .build(), YDConf.FORM_OPERATION.delete_batch);
  784. log.info("批量删除完成,共删除{}条数据", list.size());
  785. } catch (Exception e) {
  786. log.error("批量删除操作异常", e);
  787. }
  788. }
  789. return;
  790. }
  791. LambdaQueryWrapper<KdYdMaterial> materialqw = new LambdaQueryWrapper<>();
  792. materialqw.eq(KdYdMaterial::getSyncStatus, "0");
  793. List<KdYdMaterial> kdYdMaterials = kdYdMaterialMapper.selectList(materialqw);
  794. log.info("本次需要同步的物料单数量: {}", kdYdMaterials.size());
  795. // 同步新增/更新数据
  796. if (kdYdMaterials.isEmpty()) {
  797. log.info("【物料单同步任务】无需要同步的数据,结束");
  798. return;
  799. }
  800. int successCount = 0;
  801. int failCount = 0;
  802. for (KdYdMaterial kdYdMaterial : kdYdMaterials) {
  803. try {
  804. String wlbm = kdYdMaterial.getWlbm();
  805. String wlmc = kdYdMaterial.getWlmc();
  806. String xh = kdYdMaterial.getXh();
  807. String gg = kdYdMaterial.getGg();
  808. String jdnm = String.valueOf(kdYdMaterial.getFMATERIALID());
  809. String wlfz = kdYdMaterial.getWlfz();
  810. String wlsx = kdYdMaterial.getWlsx();
  811. String jbdw = kdYdMaterial.getJbdw();
  812. String ssxl = kdYdMaterial.getSsxl();
  813. String jx = kdYdMaterial.getJx();
  814. Integer sd = kdYdMaterial.getSd();
  815. String mrsl = kdYdMaterial.getMrsl();
  816. String chlb = kdYdMaterial.getChlb();
  817. String xsy = kdYdMaterial.getXsy();
  818. BigDecimal xsjzj = kdYdMaterial.getXsjzj();
  819. String smzs = kdYdMaterial.getSmzs();
  820. String sjzt = kdYdMaterial.getSjzt();
  821. String jyzt = kdYdMaterial.getJyzt();
  822. String dzl = kdYdMaterial.getDzl();
  823. String pzzt = kdYdMaterial.getPzzt();
  824. String sdbb = kdYdMaterial.getSpeedname();
  825. String wlbt = wlmc + wlbm;
  826. // String materialtitle = kdYdMaterial.getMaterialtitle();
  827. Map updateFormData = new HashMap();
  828. updateFormData.put("textField_l43jpnsf", wlmc);
  829. updateFormData.put("textField_mfxbtcdh", wlbm);
  830. updateFormData.put("textField_l43jpnsg", xh);
  831. updateFormData.put("textField_lqbxkzbq", gg);
  832. updateFormData.put("textField_misfb2ft", jdnm);
  833. updateFormData.put("textField_mhlbx8hi", wlfz);
  834. updateFormData.put("textField_l43jpnsh", wlsx);
  835. updateFormData.put("textField_mfxbtcdo", jbdw);
  836. updateFormData.put("textField_mfxbtcdp", ssxl);
  837. updateFormData.put("textField_mejl9nrs", jx);
  838. updateFormData.put("numberField_mfxbtceb", sd);
  839. updateFormData.put("textField_mejl9nrp", dzl);
  840. updateFormData.put("selectField_mejl9nrq", pzzt);
  841. updateFormData.put("textField_mfxbtcdq", mrsl);
  842. updateFormData.put("textField_mhabp7y0", sdbb);
  843. updateFormData.put("textField_mfxbtcdr", chlb);
  844. updateFormData.put("textField_mfxbtce5", xsy);
  845. updateFormData.put("textField_mfxbtce6", sjzt);
  846. updateFormData.put("dateField_ml4ikfa0",
  847. kdYdMaterial.getKsrq() != null && !kdYdMaterial.getKsrq().trim().isEmpty() ?
  848. java.time.LocalDate.parse(kdYdMaterial.getKsrq().trim())
  849. .atStartOfDay(java.time.ZoneId.systemDefault())
  850. .toInstant()
  851. .toEpochMilli() :
  852. null
  853. );
  854. updateFormData.put("dateField_ml4ikfa1",
  855. kdYdMaterial.getJzrq() != null && !kdYdMaterial.getJzrq().trim().isEmpty() ?
  856. java.time.LocalDate.parse(kdYdMaterial.getJzrq().trim())
  857. .atStartOfDay(java.time.ZoneId.systemDefault())
  858. .toInstant()
  859. .toEpochMilli() :
  860. null
  861. );
  862. //确保金额字段保留两位小数
  863. if (xsjzj != null) {
  864. updateFormData.put("numberField_mejl9nsc", xsjzj.setScale(2, java.math.RoundingMode.HALF_UP));
  865. } else {
  866. updateFormData.put("numberField_mejl9nsc", java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  867. }
  868. updateFormData.put("textField_mfxbtce4", smzs);
  869. updateFormData.put("textField_mfxbtcea", jyzt);
  870. updateFormData.put("textField_mg4h6mz5", wlbt);
  871. ydClient.operateData(YDParam.builder()
  872. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  873. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  874. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  875. .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch(
  876. "textField_misfb2ft", jdnm, "金蝶内码", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
  877. .formDataJson(JSONObject.toJSONString(updateFormData))
  878. .build(), YDConf.FORM_OPERATION.upsert);
  879. // 同步成功,更新状态
  880. kdYdMaterial.setSyncStatus("1");
  881. kdYdMaterialMapper.updateById(kdYdMaterial);
  882. successCount++;
  883. log.info("物料单同步成功: wlbm={}, wlmc={}", wlbm, wlmc);
  884. } catch (Exception e) {
  885. failCount++;
  886. log.error("同步单条物料单数据异常: wlbm={}, wlmc={}",
  887. kdYdMaterial.getWlbm(), kdYdMaterial.getWlmc(), e);
  888. }
  889. }
  890. // 添加同步结果统计日志
  891. log.info("物料单同步完成: 成功={}, 失败={}, 总计={}",
  892. successCount, failCount, kdYdMaterials.size());
  893. }
  894. @Override
  895. public void syncKdYdDeliveryDetail() {
  896. log.info("定时同步-发货单详情");
  897. try {
  898. LocalDateTime now = LocalDateTime.now();
  899. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  900. // 1. 查询最近更新的 delivery detail
  901. List<KdYdDeliveryDetail> kdYdDeliveryDetails = kdYdDeliveryDetailMapper.selectRecentUpdated(fiveMinutesAgo);
  902. if (kdYdDeliveryDetails.isEmpty()) {
  903. log.info("【发货详情单同步任务】无需要同步的数据,结束");
  904. return;
  905. }
  906. // 2. 按 deliveryId 提取主单 ID 列表,避免重复查询
  907. Set<Long> deliveryIds = kdYdDeliveryDetails.stream()
  908. .map(KdYdDeliveryDetail::getDeliveryId)
  909. .filter(Objects::nonNull)
  910. .collect(Collectors.toSet());
  911. // 3. 批量查询主单信息(包含 formInstId)
  912. List<KdYdDelivery> mainDeliveries = kdYdDeliveryMapper.selectBatchIds(deliveryIds);
  913. Map<Long, KdYdDelivery> deliveryMap = mainDeliveries.stream()
  914. .collect(Collectors.toMap(KdYdDelivery::getId, d -> d));
  915. // 4. 按 formInstId 分组,减少 API 调用次数
  916. // Map<String, List<KdYdDeliveryDetail>> detailsByFormInstId = kdYdDeliveryDetails.stream()
  917. // .filter(detail -> deliveryMap.containsKey(detail.getDeliveryId()))
  918. // .collect(Collectors.groupingBy(detail -> {
  919. // KdYdDelivery main = deliveryMap.get(detail.getDeliveryId());
  920. // return main != null ? main.getForminstid() : null;
  921. // }));
  922. int successCount = 0;
  923. int errorCount = 0;
  924. // 5. 遍历每个 formInstId,只调用一次 query + 一次 update
  925. // for (Map.Entry<String, List<KdYdDeliveryDetail>> entry : detailsByFormInstId.entrySet()) {
  926. // String formInstId = entry.getKey();
  927. // if (formInstId == null || formInstId.trim().isEmpty()) {
  928. // log.warn("跳过空 formInstId 的记录");
  929. // continue;
  930. // }
  931. //
  932. // try {
  933. // // 查询当前表单数据
  934. // Map formData = ydClient.queryData(
  935. // YDParam.builder()
  936. // .formInstId(formInstId)
  937. // .appType(ydConf.getAppType())
  938. // .systemToken(ydConf.getSystemToken())
  939. // .userId(ddConf.getOperator())
  940. // .build(),
  941. // YDConf.FORM_QUERY.retrieve_id
  942. // ).getFormData();
  943. //
  944. // if (formData == null) {
  945. // log.warn("formInstId={} 的 formData 为空", formInstId);
  946. // continue;
  947. // }
  948. //
  949. // List<Map<String, Object>> tableData = (List<Map<String, Object>>) formData.get("tableField_mejnamfd");
  950. // if (tableData == null || tableData.isEmpty()) {
  951. // log.warn("formInstId={} 的子表 tableField_mejnamfd 为空", formInstId);
  952. // continue;
  953. // }
  954. // // 标记是否需要更新
  955. // boolean modified = false;
  956. //
  957. // // 处理当前 formInstId 下的所有待同步 detail
  958. // for (KdYdDeliveryDetail detail : entry.getValue()) {
  959. // String wlbm = detail.getWlbm();
  960. // String mdh = detail.getMdh();
  961. //
  962. // for (Map<String, Object> row : tableData) {
  963. // Object wlbmIdObj = row.get("textField_mejnamff");
  964. // if (wlbmIdObj != null && wlbm.equals(wlbmIdObj.toString())) {
  965. // row.put("textField_mf6a0h6y", mdh);
  966. // modified = true;
  967. // successCount++;
  968. // break; // 找到匹配行即可跳出
  969. // }
  970. // }
  971. // }
  972. //
  973. // // 只有修改了才提交
  974. // if (modified) {
  975. // ydClient.operateData(
  976. // YDParam.builder()
  977. // .formInstanceId(formInstId)
  978. // .updateFormDataJson(JSON.toJSONString(Collections.singletonMap("tableField_mejnamfd", tableData)))
  979. // .useLatestVersion(true)
  980. // .build(),
  981. // YDConf.FORM_OPERATION.update
  982. // );
  983. // log.debug("已更新 formInstId={} 的子表数据", formInstId);
  984. // } else {
  985. // log.debug("formInstId={} 无需更新", formInstId);
  986. // }
  987. //
  988. // } catch (Exception e) {
  989. // errorCount += entry.getValue().size(); // 统计失败数量
  990. // log.error("同步 formInstId={} 时发生异常", formInstId, e);
  991. // }
  992. // }
  993. //
  994. // log.info("【发货详情单同步任务】执行完成,共处理 {} 条记录,成功 {} 条,失败 {} 条",
  995. // kdYdDeliveryDetails.size(), successCount, errorCount);
  996. //
  997. } catch (Exception e) {
  998. log.error("【发货单同步任务】执行过程中发生严重错误", e);
  999. }
  1000. }
  1001. @Override
  1002. public void synckdYdPayment() {
  1003. log.info("定时同步-收款单");
  1004. LambdaQueryWrapper<KdYdPaymentReceipt> paymentdel = new LambdaQueryWrapper<>();
  1005. paymentdel.eq(KdYdPaymentReceipt::getOperationType, 3)
  1006. .eq(KdYdPaymentReceipt::getSyncStatus, "0");
  1007. List<KdYdPaymentReceipt> kdYdPaymentReceiptdels = kdYdPaymentReceiptMapper.selectList(paymentdel);
  1008. // 批量删除处理
  1009. if (!kdYdPaymentReceiptdels.isEmpty()) {
  1010. log.info("开始处理收款单删除操作,共{}条数据", kdYdPaymentReceiptdels.size());
  1011. ArrayList<String> deleteList = new ArrayList<>();
  1012. int deleteSuccessCount = 0;
  1013. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceiptdels) {
  1014. try {
  1015. String djbh = kdYdPaymentReceipt.getDjbh();
  1016. log.debug("查询需要删除的收款单: djbh={}", djbh);
  1017. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  1018. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1019. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1020. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1021. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", djbh)))
  1022. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  1023. if (list1 != null && !list1.isEmpty()) {
  1024. for (Map map : list1) {
  1025. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  1026. if (formInstanceId != null) {
  1027. deleteList.add(formInstanceId);
  1028. }
  1029. }
  1030. deleteSuccessCount++;
  1031. // 同时删除对应的子表数据
  1032. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  1033. LambdaQueryWrapper<KdYdPaymentReceiptDetail> detailDelqw = new LambdaQueryWrapper<>();
  1034. detailDelqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId);
  1035. List<KdYdPaymentReceiptDetail> detailDels = kdYdPaymentReceiptDetailMapper.selectList(detailDelqw);
  1036. if (!detailDels.isEmpty()) {
  1037. for (KdYdPaymentReceiptDetail detail : detailDels) {
  1038. detail.setSyncStatus("1");
  1039. kdYdPaymentReceiptDetailMapper.updateById(detail);
  1040. }
  1041. }
  1042. } else {
  1043. log.warn("未找到对应的收款单数据: djbh={}", djbh);
  1044. }
  1045. // 删除操作完成后更新状态
  1046. kdYdPaymentReceipt.setSyncStatus("1");
  1047. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1048. } catch (Exception e) {
  1049. log.error("删除收款单数据查询异常: djbh={}", kdYdPaymentReceipt.getDjbh(), e);
  1050. }
  1051. }
  1052. // 执行批量删除
  1053. if (!deleteList.isEmpty()) {
  1054. try {
  1055. ydClient.operateData(YDParam.builder()
  1056. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1057. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1058. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1059. .formInstanceIdList(deleteList)
  1060. .build(), YDConf.FORM_OPERATION.delete_batch);
  1061. log.info("收款单批量删除完成,共删除{}条数据", deleteList.size());
  1062. } catch (Exception e) {
  1063. log.error("收款单批量删除操作异常", e);
  1064. }
  1065. }
  1066. log.info("收款单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  1067. return;
  1068. } else {
  1069. log.info("【收款单删除任务】无需要删除的数据");
  1070. }
  1071. LambdaQueryWrapper<KdYdPaymentReceipt> paymentqw = new LambdaQueryWrapper<>();
  1072. paymentqw.eq(KdYdPaymentReceipt::getSyncStatus, "0");
  1073. List<KdYdPaymentReceipt> kdYdPaymentReceipts = kdYdPaymentReceiptMapper.selectList(paymentqw);
  1074. if (kdYdPaymentReceipts.isEmpty()) {
  1075. log.info("【收款单同步任务】无需要同步的数据,结束");
  1076. return;
  1077. }
  1078. log.info("【收款单同步任务】开始同步,共{}条数据", kdYdPaymentReceipts.size());
  1079. int successCount = 0;
  1080. int failCount = 0;
  1081. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceipts) {
  1082. try {
  1083. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  1084. String djbh = kdYdPaymentReceipt.getDjbh();
  1085. log.debug("开始同步收款单: ID={}, 单据编号={}", paymentReceiptId, djbh);
  1086. LambdaQueryWrapper<KdYdPaymentReceiptDetail> receivedetailqw = new LambdaQueryWrapper<>();
  1087. receivedetailqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId)
  1088. .orderByAsc(KdYdPaymentReceiptDetail::getDetailId);
  1089. List<KdYdPaymentReceiptDetail> kdYDPaymentReceiptDetails = kdYdPaymentReceiptDetailMapper.selectList(receivedetailqw);
  1090. ArrayList<Object> tableList = new ArrayList<>();
  1091. for (KdYdPaymentReceiptDetail kdYdPaymentReceiptDetail : kdYDPaymentReceiptDetails) {
  1092. HashMap<String, String> tablemap = new HashMap<>();
  1093. tablemap.put("textField_mh9woanr", kdYdPaymentReceiptDetail.getJsfs());
  1094. tablemap.put("textField_mh9woans", kdYdPaymentReceiptDetail.getSkyt());
  1095. tablemap.put("textField_mh9woant", kdYdPaymentReceiptDetail.getYsxmlx());
  1096. tablemap.put("textField_mh9woanu", kdYdPaymentReceiptDetail.getYsxsdd());
  1097. tablemap.put("numberField_mh9woanv", kdYdPaymentReceiptDetail.getYsje() != null ? kdYdPaymentReceiptDetail.getYsje().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1098. tablemap.put("numberField_mh9woanw", kdYdPaymentReceiptDetail.getSxf() != null ? kdYdPaymentReceiptDetail.getSxf().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1099. tablemap.put("textField_mhmr1ecr", kdYdPaymentReceiptDetail.getCdk());
  1100. tablemap.put("textField_mh9woany", kdYdPaymentReceiptDetail.getWfyhzh());
  1101. tablemap.put("textField_mh9woao2", kdYdPaymentReceiptDetail.getXsddh());
  1102. tablemap.put("textField_mh9woao1", kdYdPaymentReceiptDetail.getFyxm());
  1103. tablemap.put("numberField_mh9woanz", kdYdPaymentReceiptDetail.getSsje() != null ? kdYdPaymentReceiptDetail.getSsje().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1104. tablemap.put("numberField_mh9woao0", kdYdPaymentReceiptDetail.getZhje() != null ? kdYdPaymentReceiptDetail.getZhje().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1105. kdYdPaymentReceiptDetail.setSyncStatus("1");
  1106. kdYdPaymentReceiptDetailMapper.updateById(kdYdPaymentReceiptDetail);
  1107. // tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
  1108. tableList.add(tablemap);
  1109. }
  1110. String xsddbh = kdYdPaymentReceipt.getXsddbh();
  1111. String ddformInstanceId = null;
  1112. String ddbh = null;
  1113. try {
  1114. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  1115. List<Map> ddlist = (List<Map>) ydClient.queryData(
  1116. YDParam.builder()
  1117. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  1118. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
  1119. .build(),
  1120. YDConf.FORM_QUERY.retrieve_list_all
  1121. ).getData();
  1122. if (ddlist != null && !ddlist.isEmpty()) {
  1123. for (Map<String, Object> khitem : ddlist) {
  1124. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  1125. if (khformData != null && xsddbh.equals(khformData.get("textField_mjs6fuwo"))) {
  1126. ddformInstanceId = (String) khitem.get("formInstanceId");
  1127. ddbh = (String) khformData.get("textField_mjs6fuwo");
  1128. break;
  1129. }
  1130. }
  1131. if (ddformInstanceId == null) {
  1132. log.warn("未找到与xsddbh={}完全匹配的订单数据", xsddbh);
  1133. }
  1134. } else {
  1135. log.warn("未查询到订单数据: xsddbh={}", xsddbh);
  1136. }
  1137. } catch (Exception e) {
  1138. log.error("查询订单数据异常: xsddbh={}, 错误信息={}", xsddbh, e.getMessage(), e);
  1139. }
  1140. HashMap<Object, Object> updateMap = new HashMap<>();
  1141. updateMap.put("tableField_mh9woanl", tableList);
  1142. if (ddbh != null && ddformInstanceId != null) {
  1143. updateMap.put("associationFormField_mh9woamy",
  1144. Arrays.asList(getddAss(ddbh, ddformInstanceId)));
  1145. }
  1146. updateMap.put("textField_mh9woanm", kdYdPaymentReceipt.getDjlx());
  1147. updateMap.put("textField_mh9woann", kdYdPaymentReceipt.getFkdwlx());
  1148. updateMap.put("textField_mh9woamt", kdYdPaymentReceipt.getDjbh());
  1149. updateMap.put("textField_mh9woamz", kdYdPaymentReceipt.getSkgld());
  1150. updateMap.put("textField_mh9woano", kdYdPaymentReceipt.getBb());
  1151. updateMap.put("dateField_mh9woan5", kdYdPaymentReceipt.getYwrq() != null ? String.valueOf(kdYdPaymentReceipt.getYwrq().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  1152. updateMap.put("textField_mh9woanp", kdYdPaymentReceipt.getWldwlx());
  1153. updateMap.put("textField_mh9woanq", kdYdPaymentReceipt.getWldw());
  1154. updateMap.put("numberField_mh9woanc", kdYdPaymentReceipt.getYsje() != null ? kdYdPaymentReceipt.getYsje().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1155. updateMap.put("numberField_mh9woand", kdYdPaymentReceipt.getSsje() != null ? kdYdPaymentReceipt.getSsje().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
  1156. updateMap.put("textField_mhjxv2tf", kdYdPaymentReceipt.getXsy());
  1157. updateMap.put("textField_mhjxv2tg", kdYdPaymentReceipt.getXsbm());
  1158. updateMap.put("textareaField_mh9woank", kdYdPaymentReceipt.getBz());
  1159. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM", djbh);
  1160. // 添加同步操作(根据您的实际需求添加)
  1161. ydClient.operateData(YDParam.builder()
  1162. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1163. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", kdYdPaymentReceipt.getDjbh())))
  1164. .formDataJson(JSONObject.toJSONString(updateMap))
  1165. .build(), YDConf.FORM_OPERATION.upsert);
  1166. // 更新同步状态
  1167. kdYdPaymentReceipt.setSyncStatus("1");
  1168. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1169. successCount++;
  1170. log.info("收款单同步成功: 单据编号={}", djbh);
  1171. } catch (Exception e) {
  1172. failCount++;
  1173. log.error("同步单条收款单数据异常: 单据编号={}, 错误信息={}",
  1174. kdYdPaymentReceipt.getDjbh(), e.getMessage(), e);
  1175. }
  1176. }
  1177. log.info("【收款单同步任务】完成: 成功={}, 失败={}, 总计={}",
  1178. successCount, failCount, kdYdPaymentReceipts.size());
  1179. }
  1180. @Override
  1181. public void synckdYdTRANSFER() {
  1182. log.info("定时同步-调拨单");
  1183. LambdaQueryWrapper<KdYdTransfer> transferdel = new LambdaQueryWrapper<>();
  1184. transferdel.eq(KdYdTransfer::getOperationType, 3)
  1185. .eq(KdYdTransfer::getSyncStatus, "0");
  1186. List<KdYdTransfer> kdYdTRANSFERdels = kdYdTransferMapper.selectList(transferdel);
  1187. // 批量删除处理
  1188. if (!kdYdTRANSFERdels.isEmpty()) {
  1189. log.info("开始处理调拨单删除操作,共{}条数据", kdYdTRANSFERdels.size());
  1190. ArrayList<String> deleteList = new ArrayList<>();
  1191. int deleteSuccessCount = 0;
  1192. for (KdYdTransfer kdYdTransfer : kdYdTRANSFERdels) {
  1193. try {
  1194. String djbh = kdYdTransfer.getDjbh();
  1195. log.debug("查询需要删除的调拨单: djbh={}", djbh);
  1196. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  1197. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1198. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1199. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1200. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
  1201. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  1202. if (list1 != null && !list1.isEmpty()) {
  1203. for (Map map : list1) {
  1204. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  1205. if (formInstanceId != null) {
  1206. deleteList.add(formInstanceId);
  1207. }
  1208. }
  1209. deleteSuccessCount++;
  1210. // 同时删除对应的子表数据
  1211. Long transferId = kdYdTransfer.getId();
  1212. LambdaQueryWrapper<KdYdTransferDetail> detailDelqw = new LambdaQueryWrapper<>();
  1213. detailDelqw.eq(KdYdTransferDetail::getTransferId, transferId);
  1214. List<KdYdTransferDetail> detailDels = kdYdTransferDetailMapper.selectList(detailDelqw);
  1215. if (!detailDels.isEmpty()) {
  1216. for (KdYdTransferDetail detail : detailDels) {
  1217. detail.setSyncStatus("1");
  1218. kdYdTransferDetailMapper.updateById(detail);
  1219. }
  1220. }
  1221. } else {
  1222. log.warn("未找到对应的调拨单数据: djbh={}", djbh);
  1223. }
  1224. // 删除操作完成后更新状态
  1225. kdYdTransfer.setSyncStatus("1");
  1226. kdYdTransferMapper.updateById(kdYdTransfer);
  1227. } catch (Exception e) {
  1228. log.error("删除调拨单数据查询异常: djbh={}", kdYdTransfer.getDjbh(), e);
  1229. }
  1230. }
  1231. // 执行批量删除
  1232. if (!deleteList.isEmpty()) {
  1233. try {
  1234. ydClient.operateData(YDParam.builder()
  1235. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1236. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1237. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1238. .formInstanceIdList(deleteList)
  1239. .build(), YDConf.FORM_OPERATION.delete_batch);
  1240. log.info("调拨单批量删除完成,共删除{}条数据", deleteList.size());
  1241. } catch (Exception e) {
  1242. log.error("调拨单批量删除操作异常", e);
  1243. }
  1244. }
  1245. log.info("调拨单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  1246. return;
  1247. } else {
  1248. log.info("【调拨单删除任务】无需要删除的数据");
  1249. }
  1250. LambdaQueryWrapper<KdYdTransfer> paymentqw = new LambdaQueryWrapper<>();
  1251. paymentqw.eq(KdYdTransfer::getSyncStatus, "0");
  1252. List<KdYdTransfer> kdYdTransfers = kdYdTransferMapper.selectList(paymentqw);
  1253. if (kdYdTransfers.isEmpty()) {
  1254. log.info("【调拨单同步任务】无需要同步的数据,结束");
  1255. return;
  1256. }
  1257. log.info("【调拨单同步任务】开始同步,共{}条数据", kdYdTransfers.size());
  1258. int successCount = 0;
  1259. int failCount = 0;
  1260. for (KdYdTransfer kdYdTransfer : kdYdTransfers) {
  1261. try {
  1262. Long transferId = kdYdTransfer.getId();
  1263. String djbh = kdYdTransfer.getDjbh();
  1264. log.debug("开始同步调拨单: ID={}, 单据编号={}", transferId, djbh);
  1265. LambdaQueryWrapper<KdYdTransferDetail> transferdetailqw = new LambdaQueryWrapper<>();
  1266. transferdetailqw.eq(KdYdTransferDetail::getTransferId, transferId)
  1267. .orderByAsc(KdYdTransferDetail::getDetailId);
  1268. List<KdYdTransferDetail> kdYdTransferDetails = kdYdTransferDetailMapper.selectList(transferdetailqw);
  1269. ArrayList<Object> tableList = new ArrayList<>();
  1270. List<Map<String, Object>> tableListxlh = new ArrayList<>();
  1271. for (KdYdTransferDetail kdYdTransferDetail : kdYdTransferDetails) {
  1272. HashMap<String, String> tablemap = new HashMap<>();
  1273. tablemap.put("textField_mhubzsav", kdYdTransferDetail.getWlbm());
  1274. tablemap.put("textField_mhubzsaw", kdYdTransferDetail.getWlmc());
  1275. tablemap.put("textField_mhubzsax", kdYdTransferDetail.getGgxh());
  1276. tablemap.put("textField_mhubzsay", kdYdTransferDetail.getDw());
  1277. tablemap.put("textareaField_mjshnw4c", kdYdTransferDetail.getKddh());
  1278. tablemap.put("numberField_mhubzsaz", String.valueOf(kdYdTransferDetail.getDbsl()));
  1279. tablemap.put("textField_mhubzsb0", kdYdTransferDetail.getPh());
  1280. tablemap.put("textField_mhubzsb1", kdYdTransferDetail.getDcck());
  1281. tablemap.put("textField_mhubzsb5", kdYdTransferDetail.getDcckzt());
  1282. tablemap.put("textField_mhubzsb2", kdYdTransferDetail.getDccw());
  1283. tablemap.put("textField_mhubzsb3", kdYdTransferDetail.getDrck());
  1284. tablemap.put("textField_mhubzsb6", kdYdTransferDetail.getDrckzt());
  1285. tablemap.put("textField_mhubzsb4", kdYdTransferDetail.getDrcw());
  1286. String xlhjh = kdYdTransferDetail.getXlh();
  1287. if (xlhjh != null && !xlhjh.trim().isEmpty()) {
  1288. List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
  1289. .map(String::trim)
  1290. .filter(item -> !item.isEmpty())
  1291. .map(item -> {
  1292. Map<String, Object> map = new HashMap<>();
  1293. map.put("textField_mf6a0h6w", item); // 序列号
  1294. map.put("textField_mjqst61l", kdYdTransferDetail.getWlbm()); // 对应的物料编码
  1295. map.put("textField_mjqst61m", kdYdTransferDetail.getGgxh());
  1296. return map;
  1297. })
  1298. .collect(Collectors.toList());
  1299. tableListxlh.addAll(currentXlhList); // 追加到总列表
  1300. }
  1301. // 主表仍保留原始 xlh(可选)
  1302. tablemap.put("textField_mf6a0h6w", kdYdTransferDetail.getXlh());
  1303. // tablemap.put("radioField_mf6a0h6h", kdYdTransferDetail.getSfzp());
  1304. tableList.add(tablemap);
  1305. kdYdTransferDetail.setSyncStatus("1");
  1306. kdYdTransferDetailMapper.updateById(kdYdTransferDetail);
  1307. }
  1308. String xsddbh = kdYdTransfer.getDdbh();
  1309. String fhtzdbh = kdYdTransfer.getFhtzdbh();
  1310. String ddformInstanceId = null;
  1311. String fhdformInstanceId = null;
  1312. String ddbh = null;
  1313. String fhdbh = null;
  1314. String jydate = null;
  1315. String ghrq = null;
  1316. String jyyy = null;
  1317. String jtyy = null;
  1318. String xsy = null;
  1319. String khxypj = null;
  1320. String fj = null;
  1321. try {
  1322. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  1323. // 宜搭返回的数据结构:List<Map<String, Object>>
  1324. List<Map<String, Object>> ddlist = (List<Map<String, Object>>) ydClient.queryData(
  1325. YDParam.builder()
  1326. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  1327. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
  1328. .build(),
  1329. YDConf.FORM_QUERY.retrieve_list_all
  1330. ).getData();
  1331. List<Map<String, Object>> fhdlist = (List<Map<String, Object>>) ydClient.queryData(
  1332. YDParam.builder()
  1333. .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
  1334. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", fhtzdbh)))
  1335. .build(),
  1336. YDConf.FORM_QUERY.retrieve_list_all
  1337. ).getData();
  1338. if (fhdlist != null && !fhdlist.isEmpty()) {
  1339. for (Map<String, Object> fhditem : fhdlist) {
  1340. Map<String, Object> fhdformData = (Map<String, Object>) fhditem.get("formData");
  1341. if (fhdformData == null) continue;
  1342. Object serialObj1 = fhdformData.get("serialNumberField_mheazm7w");
  1343. String serialStr1 = serialObj1 != null ? serialObj1.toString() : null;
  1344. if (fhtzdbh.equals(serialStr1)) {
  1345. fhdformInstanceId = safeToString(fhditem.get("formInstanceId"));
  1346. fhdbh = serialStr1;
  1347. break;
  1348. }
  1349. }
  1350. }
  1351. if (ddlist != null && !ddlist.isEmpty()) {
  1352. for (Map<String, Object> khitem : ddlist) {
  1353. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  1354. if (khformData == null) continue;
  1355. // 安全获取字段值(避免 ClassCastException)
  1356. Object serialObj = khformData.get("textField_mjs6fuwo");
  1357. String serialStr = serialObj instanceof String ? (String) serialObj : String.valueOf(serialObj);
  1358. if (xsddbh.equals(serialStr)) {
  1359. ddformInstanceId = safeToString(khitem.get("formInstanceId"));
  1360. ddbh = serialStr;
  1361. jydate = safeToString(khformData.get("dateField_mdya1lom"));
  1362. ghrq = safeToString(khformData.get("dateField_meqpbxsj"));
  1363. jyyy = safeToString(khformData.get("multiSelectField_meqpbxsc"));
  1364. jtyy = safeToString(khformData.get("textareaField_meqpbxsd"));
  1365. khxypj = safeToString(khformData.get("selectField_mewirdx4"));
  1366. xsy = safeToString(khformData.get("employeeField_mejowmng_id"));
  1367. fj = safeToString(khformData.get("attachmentField_mfoqcctz"));
  1368. break;
  1369. }
  1370. }
  1371. if (ddformInstanceId == null) {
  1372. log.warn("未找到与 xsddbh={} 完全匹配的订单数据", xsddbh);
  1373. }
  1374. } else {
  1375. log.warn("未查询到订单数据: xsddbh={}", xsddbh);
  1376. }
  1377. } catch (Exception e) {
  1378. log.error("查询订单数据异常: xsddbh={}, 错误信息={}", xsddbh, e.getMessage(), e);
  1379. }
  1380. // 构建更新数据
  1381. HashMap<String, Object> updateMap = new HashMap<>();
  1382. updateMap.put("tableField_mhubzsau", tableList);
  1383. updateMap.put("tableField_mips137b", tableListxlh);
  1384. if (ddbh != null && ddformInstanceId != null) {
  1385. updateMap.put("associationFormField_mhubzsaf",
  1386. Collections.singletonList(getddAss(ddbh, ddformInstanceId)));
  1387. }
  1388. if (fhdbh != null && fhdformInstanceId != null) {
  1389. updateMap.put("associationFormField_mjzervdt",
  1390. Collections.singletonList(getddAss(fhdbh, fhdformInstanceId)));
  1391. }
  1392. // 只有所有必要字段都非空时才填充关联字段
  1393. if (jydate != null && ghrq != null && jyyy != null && jtyy != null
  1394. && xsy != null && khxypj != null) {
  1395. updateMap.put("dateField_mdya1lom", jydate);
  1396. updateMap.put("dateField_meqpbxsj", ghrq);
  1397. updateMap.put("multiSelectField_meqpbxsc", jyyy);
  1398. updateMap.put("textareaField_meqpbxsd", jtyy); // 注意:原代码这里写成了 jyyy,已修正为 jtyy
  1399. updateMap.put("employeeField_mejowmng", xsy);
  1400. updateMap.put("selectField_mewirdx4", khxypj);
  1401. updateMap.put("attachmentField_mfoqcctz", fj);
  1402. }
  1403. updateMap.put("textField_mjzervdu", kdYdTransfer.getFhtzdbh());
  1404. // 基础字段同步(这些字段即使为空也会覆盖,符合原逻辑)
  1405. updateMap.put("textField_miquh5zj", ddformInstanceId);
  1406. updateMap.put("selectField_mhubzsa5", kdYdTransfer.getDjlx());
  1407. updateMap.put("textField_mhubzsas", kdYdTransfer.getKh());
  1408. updateMap.put("textField_miptelgh", kdYdTransfer.getDdbh());
  1409. updateMap.put("textField_miptelgc", kdYdTransfer.getDjbh());
  1410. updateMap.put("textField_miptelgd", kdYdTransfer.getCgy());
  1411. updateMap.put("selectField_mhubzsa7", kdYdTransfer.getDchzlx());
  1412. updateMap.put("textField_mhubzsa6", kdYdTransfer.getYwlx());
  1413. // 日期字段:转为毫秒字符串(保持原逻辑)
  1414. String rqMillis = "";
  1415. if (kdYdTransfer.getRq() != null) {
  1416. rqMillis = String.valueOf(kdYdTransfer.getRq()
  1417. .atZone(ZoneId.systemDefault())
  1418. .toInstant()
  1419. .toEpochMilli());
  1420. }
  1421. updateMap.put("dateField_mhubzsab", rqMillis);
  1422. updateMap.put("selectField_mhubzsa9", kdYdTransfer.getDrhzlx());
  1423. updateMap.put("selectField_mhubzsaa", kdYdTransfer.getDbfx());
  1424. updateMap.put("selectField_mhubzsac", kdYdTransfer.getDbdlx());
  1425. updateMap.put("textField_miptelge", kdYdTransfer.getDcbm());
  1426. updateMap.put("textField_miptelgf", kdYdTransfer.getDchz());
  1427. updateMap.put("textField_miptelgg", kdYdTransfer.getDrbm());
  1428. updateMap.put("selectField_mhubzsah", kdYdTransfer.getHdfs());
  1429. updateMap.put("selectField_mhubzsai", kdYdTransfer.getYsfs());
  1430. updateMap.put("selectField_mhubzsar", kdYdTransfer.getKdgs());
  1431. updateMap.put("selectField_mhubzsag", kdYdTransfer.getFkfs());
  1432. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR", kdYdTransfer.getDjbh());
  1433. ydClient.operateData(YDParam.builder()
  1434. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1435. .noExecuteExpression(false)
  1436. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", kdYdTransfer.getDjbh())))
  1437. .formDataJson(JSONObject.toJSONString(updateMap))
  1438. .build(), YDConf.FORM_OPERATION.upsert);
  1439. // 更新同步状态
  1440. kdYdTransfer.setSyncStatus("1");
  1441. kdYdTransferMapper.updateById(kdYdTransfer);
  1442. successCount++;
  1443. log.info("调拨单同步成功: 单据编号={}", kdYdTransfer.getDjbh());
  1444. } catch (Exception e) {
  1445. failCount++;
  1446. log.error("同步单条调拨单数据异常: 单据编号={}, 错误信息={}",
  1447. kdYdTransfer.getDjbh(), e.getMessage(), e);
  1448. }
  1449. }
  1450. log.info("【调拨单同步任务】完成: 成功={}, 失败={}, 总计={}",
  1451. successCount, failCount, kdYdTRANSFERdels.size());
  1452. }
  1453. private static String safeToString(Object obj) {
  1454. return obj == null ? null : obj.toString();
  1455. }
  1456. private Object getddAss(String title, String id) {
  1457. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
  1458. }
  1459. private Object getfhdAss(String title, String id) {
  1460. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-A7F03ACEE01D4F609550C86BF7FE87D35M6I", "receipt", id, title, "");
  1461. }
  1462. private Object getysdAss(String title, String id) {
  1463. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-AADBCDA8126F41A0ADDEE3353828583192M8", "receipt", id, title, "");
  1464. }
  1465. }