YdHuaGaoServiceImpl.java 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298
  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.dingtalk.DDConf;
  13. import com.malk.service.aliwork.YDClient;
  14. import com.malk.utils.UtilMap;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.checkerframework.checker.units.qual.A;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.time.LocalDateTime;
  21. import java.time.format.DateTimeFormatter;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. @Slf4j
  25. @Service
  26. public class YdHuaGaoServiceImpl implements YdHuaGaoService {
  27. @Autowired
  28. private KdYdCustomerMapper kdYdCustomerMapper;
  29. @Autowired
  30. private YDClient ydClient;
  31. @Autowired
  32. private KdYdCustomerReferrerMapper kdYdCustomerReferrerMapper;
  33. @Autowired
  34. private KdYdOrderMapper kdYdOrderMapper;
  35. @Autowired
  36. private KdYdDeliveryMapper kdYdDeliveryMapper;
  37. @Autowired
  38. private KdYdOutboundMapper kdYdOutboundMapper;
  39. @Autowired
  40. private KdYdReceivableMapper kdYdReceivableMapper;
  41. @Autowired
  42. private KdYdOutboundDetailMapper kdYdOutboundDetailMapper;
  43. @Autowired
  44. private KdYdReceivableDetailMapper kdYdReceivableDetailMapper;
  45. @Autowired
  46. private KdYdDeliveryDetailMapper kdYdDeliveryDetailMapper;
  47. @Autowired
  48. private KdYdPaymentReceiptDetailMapper kdYdPaymentReceiptDetailMapper;
  49. @Autowired
  50. private KdYdPaymentReceiptMapper kdYdPaymentReceiptMapper;
  51. @Autowired
  52. private KdYdReceivalablePaymentMapper kdYdReceivalablePaymentMapper;
  53. @Autowired
  54. private KdYdZpMapper kdYdZpMapper;
  55. @Autowired
  56. private KdYdMaterialMapper kdYdMaterialMapper;
  57. @Autowired
  58. private YDConf ydConf;
  59. @Autowired
  60. private DDConf ddConf;
  61. @Override
  62. public void syncKdYdCustomer() {
  63. }
  64. @Override
  65. public void syncKdYDcustomerLiaison() {
  66. log.info("定时同步-客户推荐人");
  67. try {
  68. LocalDateTime now = LocalDateTime.now();
  69. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  70. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  71. List<KdYdCustomerReferrer> KdYdCustomerReferrers = kdYdCustomerReferrerMapper.selectRecentUpdated(fiveMinutesAgo);
  72. if (KdYdCustomerReferrers.isEmpty()) {
  73. log.info("【客户推荐人同步任务】无需要同步的数据,结束");
  74. return;
  75. }
  76. for (KdYdCustomerReferrer kdYdCustomerReferrer : KdYdCustomerReferrers) {
  77. try {
  78. String bm = kdYdCustomerReferrer.getBm();
  79. String tjruuid = kdYdCustomerReferrer.getTjruuid();
  80. String formInstId = kdYdCustomerReferrer.getFormInstId();
  81. if (ObjectUtil.hasEmpty(formInstId, bm)) {
  82. log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdCustomerReferrer.getId());
  83. continue;
  84. }
  85. // if (tjruuid == null) {
  86. // List<Map> khdata = (List<Map>) ydClient.queryData(
  87. // YDParam.builder()
  88. // .formUuid("FORM-68154CC0A7054BF0B1C933752CD3881FB0SR")
  89. // .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiov3", tjruuid)))
  90. // .build(),
  91. // YDConf.FORM_QUERY.retrieve_list_all
  92. // ).getData();
  93. // if (khdata.size() > 0) {
  94. // khbm = UtilMap.getString(khdata.get(0), "textField_meqhqqvg");
  95. // }
  96. //// }
  97. // LambdaQueryWrapper<KdYdCustomer> YdCustomerLambdaQueryWrapper = new LambdaQueryWrapper<>();
  98. // YdCustomerLambdaQueryWrapper.eq(KdYdCustomer::getTjruuid, tjruuid);
  99. // KdYdCustomer kdYdCustomer1 = kdYdCustomerMapper.selectOne(YdCustomerLambdaQueryWrapper);
  100. // String formInstId1 = kdYdCustomer1.getFormInstId();
  101. // ydClient.operateData(
  102. // YDParam.builder()
  103. // .formInstanceId(formInstId1)
  104. // .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mfdrrg87", bm)))
  105. // .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  106. ydClient.operateData(
  107. YDParam.builder()
  108. .formInstanceId(formInstId)
  109. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiouy", bm)))
  110. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  111. } catch (Exception e) {
  112. log.error("同步单条客户推荐人数据异常: formInstId={}", kdYdCustomerReferrer.getFormInstId(), e);
  113. }
  114. }
  115. log.info("【客户推荐人同步任务】执行完成,共处理 {} 条记录", KdYdCustomerReferrers.size());
  116. } catch (Exception e) {
  117. log.error("【客户推荐人同步任务】执行过程中发生严重错误", e);
  118. }
  119. }
  120. @Override
  121. public void syncKdYdOrder() {
  122. log.info("定时同步-订单");
  123. try {
  124. LocalDateTime now = LocalDateTime.now();
  125. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  126. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  127. List<KdYdOrder> KdYdOrders = kdYdOrderMapper.selectRecentUpdated(fiveMinutesAgo);
  128. if (KdYdOrders.isEmpty()) {
  129. log.info("【订单同步任务】无需要同步的数据,结束");
  130. return;
  131. }
  132. for (KdYdOrder kdYdOrder : KdYdOrders) {
  133. try {
  134. String bm = kdYdOrder.getDjbh();
  135. // String tjruuid = kdYdOrder.getTjruuid();
  136. // String formInstId = kdYdOrder.getForminstid();
  137. // if (ObjectUtil.hasEmpty(formInstId, bm)) {
  138. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdOrder.getId());
  139. // continue;
  140. // }
  141. // if (tjruuid == null) {
  142. // List<Map> khdata = (List<Map>) ydClient.queryData(
  143. // YDParam.builder()
  144. // .formUuid("FORM-68154CC0A7054BF0B1C933752CD3881FB0SR")
  145. // .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_mgqbiov3", tjruuid)))
  146. // .build(),
  147. // YDConf.FORM_QUERY.retrieve_list_all
  148. // ).getData();
  149. // if (khdata.size() > 0) {
  150. // khbm = UtilMap.getString(khdata.get(0), "textField_meqhqqvg");
  151. // }
  152. //// }
  153. // LambdaQueryWrapper<KdYdCustomer> YdCustomerLambdaQueryWrapper = new LambdaQueryWrapper<>();
  154. // YdCustomerLambdaQueryWrapper.eq(KdYdCustomer::getTjruuid, tjruuid);
  155. // KdYdCustomer kdYdCustomer1 = kdYdCustomerMapper.selectOne(YdCustomerLambdaQueryWrapper);
  156. // String formInstId1 = kdYdCustomer1.getFormInstId();
  157. // ydClient.operateData(
  158. // YDParam.builder()
  159. // .formInstanceId(formInstId1)
  160. // .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mfdrrg87", bm)))
  161. // .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  162. ydClient.operateData(
  163. YDParam.builder()
  164. // .formInstanceId(formInstId)
  165. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mg327tqe", bm)))
  166. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  167. } catch (Exception e) {
  168. // log.error("同步单条订单数据异常: formInstId={}", kdYdOrder.getForminstid(), e);
  169. }
  170. }
  171. log.info("【订单同步任务】执行完成,共处理 {} 条记录", KdYdOrders.size());
  172. } catch (Exception e) {
  173. log.error("【订单同步任务】执行过程中发生严重错误", e);
  174. }
  175. }
  176. @Override
  177. public void syncKdYdDelivery() {
  178. log.info("定时同步-发货单");
  179. try {
  180. LocalDateTime now = LocalDateTime.now();
  181. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  182. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  183. List<KdYdDelivery> KdYdDeliverys = kdYdDeliveryMapper.selectRecentUpdated(fiveMinutesAgo);
  184. if (KdYdDeliverys.isEmpty()) {
  185. log.info("【发货单同步任务】无需要同步的数据,结束");
  186. return;
  187. }
  188. for (KdYdDelivery kdYdDelivery : KdYdDeliverys) {
  189. try {
  190. String djbh = kdYdDelivery.getDjbh();
  191. // String tjruuid = kdYdOrder.getTjruuid();
  192. // String formInstId = kdYdDelivery.getForminstid();
  193. // if (ObjectUtil.hasEmpty(formInstId, djbh)) {
  194. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdDelivery.getId());
  195. // continue;
  196. // }
  197. ydClient.operateData(
  198. YDParam.builder()
  199. // .formInstanceId(formInstId)
  200. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mg3fuqvh", djbh)))
  201. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  202. } catch (Exception e) {
  203. // log.error("同步单条发货单数据异常: formInstId={}", kdYdDelivery.getForminstid(), e);
  204. }
  205. }
  206. log.info("【发货单同步任务】执行完成,共处理 {} 条记录", KdYdDeliverys.size());
  207. } catch (Exception e) {
  208. log.error("【发货单同步任务】执行过程中发生严重错误", e);
  209. }
  210. }
  211. @Override
  212. public void synckdYdOutbound() {
  213. log.info("定时同步-出库单");
  214. // 查询需要删除的数据
  215. LambdaQueryWrapper<KdYdOutbound> outbounddel = new LambdaQueryWrapper<>();
  216. outbounddel.eq(KdYdOutbound::getOperationType, 3)
  217. .eq(KdYdOutbound::getSyncStatus, "0");
  218. List<KdYdOutbound> kdYdOutbounddels = kdYdOutboundMapper.selectList(outbounddel);
  219. // 批量删除处理
  220. if (!kdYdOutbounddels.isEmpty()) {
  221. log.info("开始处理出库单删除操作,共{}条数据", kdYdOutbounddels.size());
  222. ArrayList<String> deleteList = new ArrayList<>();
  223. int deleteSuccessCount = 0;
  224. for (KdYdOutbound kdYdOutbound : kdYdOutbounddels) {
  225. try {
  226. String djbh = kdYdOutbound.getDjbh();
  227. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  228. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  229. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", djbh)))
  230. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  231. if (list1 != null && !list1.isEmpty()) {
  232. for (Map map : list1) {
  233. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  234. if (formInstanceId != null) {
  235. deleteList.add(formInstanceId);
  236. }
  237. }
  238. deleteSuccessCount++;
  239. // 同时删除对应的子表数据
  240. Long outboundId = kdYdOutbound.getId();
  241. LambdaQueryWrapper<KdYdOutboundDetail> detailDelqw = new LambdaQueryWrapper<>();
  242. detailDelqw.eq(KdYdOutboundDetail::getOutboundId, outboundId);
  243. List<KdYdOutboundDetail> detailDels = kdYdOutboundDetailMapper.selectList(detailDelqw);
  244. if (!detailDels.isEmpty()) {
  245. for (KdYdOutboundDetail detail : detailDels) {
  246. detail.setSyncStatus("1");
  247. kdYdOutboundDetailMapper.updateById(detail);
  248. }
  249. }
  250. } else {
  251. log.warn("未找到对应的出库单数据: djbh={}", djbh);
  252. }
  253. // 删除操作完成后更新状态
  254. kdYdOutbound.setSyncStatus("1");
  255. kdYdOutboundMapper.updateById(kdYdOutbound);
  256. } catch (Exception e) {
  257. log.error("删除出库单数据查询异常: djbh={}", kdYdOutbound.getDjbh(), e);
  258. }
  259. }
  260. // 执行批量删除
  261. if (!deleteList.isEmpty()) {
  262. try {
  263. ydClient.operateData(YDParam.builder()
  264. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  265. .formInstanceIdList(deleteList)
  266. .build(), YDConf.FORM_OPERATION.delete_batch);
  267. log.info("出库单批量删除完成,共删除{}条数据", deleteList.size());
  268. } catch (Exception e) {
  269. log.error("出库单批量删除操作异常", e);
  270. }
  271. }
  272. return;
  273. } else {
  274. log.info("【出库单删除任务】无需要删除的数据");
  275. }
  276. LambdaQueryWrapper<KdYdOutbound> outboundqw = new LambdaQueryWrapper<>();
  277. outboundqw.eq(KdYdOutbound::getSyncStatus, "0");
  278. List<KdYdOutbound> kdYdOutbounds = kdYdOutboundMapper.selectList(outboundqw);
  279. if (kdYdOutbounds.isEmpty()) {
  280. log.info("【出库单同步任务】无需要同步的数据,结束");
  281. return;
  282. }
  283. log.info("【出库单同步任务】开始同步,共{}条数据", kdYdOutbounds.size());
  284. int successCount = 0;
  285. int failCount = 0;
  286. for (KdYdOutbound kdYdOutbound : kdYdOutbounds) {
  287. try {
  288. Long outboundId = kdYdOutbound.getId();
  289. String djbh = kdYdOutbound.getDjbh();
  290. String deliveryId = kdYdOutbound.getDeliveryBm();
  291. log.debug("开始同步出库单: ID={}, 单据编号={}", outboundId, djbh);
  292. LambdaQueryWrapper<KdYdOutboundDetail> outbounddetailqw = new LambdaQueryWrapper<>();
  293. outbounddetailqw.eq(KdYdOutboundDetail::getOutboundId, outboundId)
  294. .orderByAsc(KdYdOutboundDetail::getDetailId);
  295. List<KdYdOutboundDetail> kdYdOutboundDetails = kdYdOutboundDetailMapper.selectList(outbounddetailqw);
  296. ArrayList<Object> tableList = new ArrayList<>();
  297. List<Map<String, Object>> tableListxlh = new ArrayList<>();
  298. for (KdYdOutboundDetail kdYdOutboundDetail : kdYdOutboundDetails) {
  299. HashMap<String, String> tablemap = new HashMap<>();
  300. HashMap<String, String> tablemapxlh = new HashMap<>();
  301. tablemap.put("textField_mejnamff", kdYdOutboundDetail.getWlbm());
  302. tablemap.put("textField_mejnamfg", kdYdOutboundDetail.getWlmc());
  303. tablemap.put("textField_mg34txh1", kdYdOutboundDetail.getTpsb());
  304. tablemap.put("textField_mejnamfh", kdYdOutboundDetail.getGgxh());
  305. tablemap.put("textField_mejnamfk", kdYdOutboundDetail.getKcdw());
  306. 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)));
  307. 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());
  308. 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());
  309. 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());
  310. tablemap.put("textField_mg34txh5", kdYdOutboundDetail.getPh());
  311. 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());
  312. 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());
  313. 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());
  314. 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());
  315. tablemap.put("textField_mf6a0h6l", kdYdOutboundDetail.getCk());
  316. tablemap.put("textField_mf6a0h6k", kdYdOutboundDetail.getCw());
  317. tablemap.put("textField_mf6a0h6p", kdYdOutboundDetail.getKczt());
  318. 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());
  319. tablemap.put("textField_mejnamf6", kdYdOutboundDetail.getSjr());
  320. tablemap.put("textField_mejnamf7", kdYdOutboundDetail.getSjdh());
  321. tablemap.put("textareaField_mf6a0h5e", kdYdOutboundDetail.getSjdz());
  322. tablemap.put("textField_mejnamfx", kdYdOutboundDetail.getSsxl());
  323. tablemap.put("textField_mf6a0h6u", kdYdOutboundDetail.getGg());
  324. tablemap.put("textField_mhlqeoas", kdYdOutboundDetail.getZbq());
  325. tablemap.put("dateField_mg34txhb", kdYdOutboundDetail.getFwdqr() != null ? String.valueOf(kdYdOutboundDetail.getFwdqr().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  326. tablemap.put("textField_mf6a0h6w", kdYdOutboundDetail.getXlh());
  327. tablemap.put("textField_mhlqeoat", kdYdOutboundDetail.getZbqsf());
  328. tablemap.put("textField_mf6a0h6x", kdYdOutboundDetail.getKddh());
  329. tablemap.put("textField_mf6a0h6y", kdYdOutboundDetail.getJx());
  330. String xlhjh = kdYdOutboundDetail.getXlh();
  331. if (xlhjh != null && !xlhjh.trim().isEmpty()) {
  332. tableListxlh = Arrays.stream(xlhjh.split(","))
  333. .map(String::trim)
  334. .filter(item -> !item.isEmpty())
  335. .map(item -> {
  336. Map<String, Object> map = new HashMap<>();
  337. map.put("textField_mf6a0h6w", item);
  338. return map;
  339. })
  340. .collect(Collectors.toList());
  341. }
  342. tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
  343. tableList.add(tablemap);
  344. kdYdOutboundDetail.setSyncStatus("1");
  345. kdYdOutboundDetailMapper.updateById(kdYdOutboundDetail);
  346. }
  347. String fhdformInstanceId = null;
  348. String fhdbh = null;
  349. try {
  350. log.debug("开始查询出库数据: deliveryId={}", deliveryId);
  351. List<Map> ddlist = (List<Map>) ydClient.queryData(
  352. YDParam.builder()
  353. .formUuid("FORM-A7F03ACEE01D4F609550C86BF7FE87D35M6I")
  354. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  355. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  356. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", deliveryId)))
  357. .build(),
  358. YDConf.FORM_QUERY.retrieve_list_all
  359. ).getData();
  360. if (ddlist != null && !ddlist.isEmpty()) {
  361. for (Map<String, Object> khitem : ddlist) {
  362. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  363. if (khformData != null && deliveryId.equals(khformData.get("serialNumberField_mheazm7w"))) {
  364. fhdformInstanceId = (String) khitem.get("formInstanceId");
  365. fhdbh = (String) khformData.get("serialNumberField_mheazm7w");
  366. break;
  367. }
  368. }
  369. if (fhdformInstanceId == null) {
  370. log.warn("未找到与fhdbh={}完全匹配的订单数据", fhdbh);
  371. }
  372. } else {
  373. log.warn("未查询到订单数据: fhdbh={}", fhdbh);
  374. }
  375. } catch (Exception e) {
  376. log.error("查询订单数据异常: fhdbh={}, 错误信息={}", fhdbh, e.getMessage(), e);
  377. }
  378. HashMap<Object, Object> updateMap = new HashMap<>();
  379. updateMap.put("tableField_mejnamfd", tableList);
  380. updateMap.put("tableField_migw33w7", tableListxlh);
  381. if (fhdbh != null && fhdformInstanceId != null) {
  382. updateMap.put("associationFormField_mejmml36",
  383. Arrays.asList(getfhdAss(fhdbh, fhdformInstanceId)));
  384. }
  385. updateMap.put("dateField_krbgloam", kdYdOutbound.getDateTime() != null ? String.valueOf(kdYdOutbound.getDateTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  386. updateMap.put("textField_krnn5bmr", kdYdOutbound.getXsDept());
  387. updateMap.put("textField_mhjxw689", kdYdOutbound.getFhDept());
  388. updateMap.put("textField_mhjxw686", kdYdOutbound.getCgy());
  389. updateMap.put("selectField_mejowmna", kdYdOutbound.getDjlx());
  390. updateMap.put("textField_mg34txgm", kdYdOutbound.getDjbh());
  391. updateMap.put("textField_mhlqeoar", kdYdOutbound.getJsbb());
  392. updateMap.put("textField_mejnamf2", kdYdOutbound.getKh());
  393. updateMap.put("selectField_mejowmnc", kdYdOutbound.getXslx());
  394. updateMap.put("textField_mhjxw688", kdYdOutbound.getXsy());
  395. updateMap.put("selectField_mg34txgt", kdYdOutbound.getXssx());
  396. updateMap.put("selectField_megi74y8", kdYdOutbound.getKhsx());
  397. updateMap.put("textField_mg34txgy", kdYdOutbound.getKhtjr());
  398. updateMap.put("textField_mg34txgz", kdYdOutbound.getYsdh());
  399. updateMap.put("textField_migw33w6", deliveryId);
  400. // 添加同步操作(根据您的实际需求添加)
  401. ydClient.operateData(YDParam.builder()
  402. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  403. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", kdYdOutbound.getDjbh())))
  404. .formDataJson(JSONObject.toJSONString(updateMap))
  405. .build(), YDConf.FORM_OPERATION.upsert
  406. );
  407. // 更新同步状态
  408. kdYdOutbound.setSyncStatus("1");
  409. kdYdOutboundMapper.updateById(kdYdOutbound);
  410. successCount++;
  411. log.info("出库单同步成功: 单据编号={}", djbh);
  412. } catch (Exception e) {
  413. failCount++;
  414. log.error("同步单条出库单数据异常: 单据编号={}, 错误信息={}",
  415. kdYdOutbound.getDjbh(), e.getMessage(), e);
  416. }
  417. }
  418. log.info("【出库单同步任务】完成: 成功={}, 失败={}, 总计={}",
  419. successCount, failCount, kdYdOutbounds.size());
  420. }
  421. @Override
  422. public void syncKdYdReceivable() {
  423. log.info("定时同步-应收单");
  424. // 查询需要删除的数据
  425. LambdaQueryWrapper<KdYdReceivable> receivabledel = new LambdaQueryWrapper<>();
  426. receivabledel.eq(KdYdReceivable::getOperationType, 3)
  427. .eq(KdYdReceivable::getSyncStatus, "0");
  428. List<KdYdReceivable> kdYdReceivabledels = kdYdReceivableMapper.selectList(receivabledel);
  429. // 批量删除处理
  430. if (!kdYdReceivabledels.isEmpty()) {
  431. log.info("开始处理应收单删除操作,共{}条数据", kdYdReceivabledels.size());
  432. ArrayList<String > deleteList = new ArrayList<>();
  433. int deleteSuccessCount = 0;
  434. for (KdYdReceivable kdYdReceivable : kdYdReceivabledels) {
  435. try {
  436. String djbh = kdYdReceivable.getDjbh();
  437. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  438. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  439. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  440. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  441. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", djbh)))
  442. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  443. if (list1 != null && !list1.isEmpty()) {
  444. for (Map map : list1) {
  445. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  446. if (formInstanceId != null) {
  447. deleteList.add(formInstanceId);
  448. }
  449. }
  450. deleteSuccessCount++;
  451. // 同时删除对应的子表数据
  452. Long receivableId = kdYdReceivable.getId();
  453. // 删除应收单明细
  454. LambdaQueryWrapper<KdYdReceivableDetail> detailDelqw = new LambdaQueryWrapper<>();
  455. detailDelqw.eq(KdYdReceivableDetail::getReceivableId, receivableId);
  456. List<KdYdReceivableDetail> detailDels = kdYdReceivableDetailMapper.selectList(detailDelqw);
  457. if (!detailDels.isEmpty()) {
  458. for (KdYdReceivableDetail detail : detailDels) {
  459. detail.setSyncStatus("1");
  460. kdYdReceivableDetailMapper.updateById(detail);
  461. }
  462. log.debug("更新了{}条应收单明细删除状态", detailDels.size());
  463. }
  464. // 删除收款计划
  465. LambdaQueryWrapper<KdYdReceivablePayment> paymentDelqw = new LambdaQueryWrapper<>();
  466. paymentDelqw.eq(KdYdReceivablePayment::getReceivableId, receivableId);
  467. List<KdYdReceivablePayment> paymentDels = kdYdReceivalablePaymentMapper.selectList(paymentDelqw);
  468. if (!paymentDels.isEmpty()) {
  469. for (KdYdReceivablePayment payment : paymentDels) {
  470. payment.setSyncStatus("1");
  471. kdYdReceivalablePaymentMapper.updateById(payment);
  472. }
  473. log.debug("更新了{}条收款计划删除状态", paymentDels.size());
  474. }
  475. } else {
  476. log.warn("未找到对应的应收单数据: djbh={}", djbh);
  477. }
  478. // 删除操作完成后更新状态
  479. kdYdReceivable.setSyncStatus("1");
  480. kdYdReceivableMapper.updateById(kdYdReceivable);
  481. } catch (Exception e) {
  482. log.error("删除应收单数据查询异常: djbh={}", kdYdReceivable.getDjbh(), e);
  483. }
  484. }
  485. // 执行批量删除
  486. if (!deleteList.isEmpty()) {
  487. try {
  488. ydClient.operateData(YDParam.builder()
  489. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  490. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  491. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  492. .formInstanceIdList(deleteList)
  493. .build(), YDConf.FORM_OPERATION.delete_batch);
  494. log.info("应收单批量删除完成,共删除{}条数据", deleteList.size());
  495. } catch (Exception e) {
  496. log.error("应收单批量删除操作异常", e);
  497. }
  498. }
  499. log.info("应收单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  500. return;
  501. } else {
  502. log.info("【应收单删除任务】无需要删除的数据");
  503. }
  504. LambdaQueryWrapper<KdYdReceivable> receivableqw = new LambdaQueryWrapper<>();
  505. receivableqw.eq(KdYdReceivable::getSyncStatus, "0");
  506. List<KdYdReceivable> kdYdReceivables = kdYdReceivableMapper.selectList(receivableqw);
  507. if (kdYdReceivables.isEmpty()) {
  508. log.info("【应收单同步任务】无需要同步的数据,结束");
  509. return;
  510. }
  511. log.info("【应收单同步任务】开始同步,共{}条数据", kdYdReceivables.size());
  512. int successCount = 0;
  513. int failCount = 0;
  514. for (KdYdReceivable kdYdReceivable : kdYdReceivables) {
  515. try {
  516. Long id = kdYdReceivable.getId();
  517. String djbh = kdYdReceivable.getDjbh();
  518. log.debug("开始同步应收单: ID={}, 单据编号={}", id, djbh);
  519. // 同步应收单明细
  520. LambdaQueryWrapper<KdYdReceivableDetail> receivabledetailqw = new LambdaQueryWrapper<>();
  521. receivabledetailqw.eq(KdYdReceivableDetail::getReceivableId, id)
  522. .orderByAsc(KdYdReceivableDetail::getDetailId);
  523. List<KdYdReceivableDetail> kdYdReceivabledetails = kdYdReceivableDetailMapper.selectList(receivabledetailqw);
  524. if (kdYdReceivabledetails.isEmpty()) {
  525. log.info("【应收单{}】无需要同步的明细数据", djbh);
  526. continue;
  527. }
  528. int count = 1;
  529. ArrayList<Object> tableList = new ArrayList<>();
  530. for (KdYdReceivableDetail kdYdReceivableDetail : kdYdReceivabledetails) {
  531. HashMap<Object, Object> tablemap = new HashMap<>();
  532. String wlbm = kdYdReceivableDetail.getWlbm();
  533. String wlmc = kdYdReceivableDetail.getWlmc();
  534. String ggxh = kdYdReceivableDetail.getGgxh();
  535. String jjdw = kdYdReceivableDetail.getJjdw();
  536. String ssxl = kdYdReceivableDetail.getSsxl();
  537. BigDecimal dj = kdYdReceivableDetail.getDj();
  538. BigDecimal hsdj = kdYdReceivableDetail.getHsdj();
  539. BigDecimal sl = kdYdReceivableDetail.getSl();
  540. BigDecimal je = kdYdReceivableDetail.getJe();
  541. BigDecimal zbjshj = kdYdReceivableDetail.getJshj();
  542. String kcdw = kdYdReceivableDetail.getKcdw();
  543. String ph = kdYdReceivableDetail.getPh();
  544. BigDecimal se = kdYdReceivableDetail.getSe();
  545. BigDecimal jjsl = kdYdReceivableDetail.getJjsl();
  546. BigDecimal zkl = kdYdReceivableDetail.getZkl();
  547. BigDecimal bhsje = kdYdReceivableDetail.getBhsje();
  548. BigDecimal jjjbsl = kdYdReceivableDetail.getJjjbsl();
  549. BigDecimal kcsl = kdYdReceivableDetail.getKcsl();
  550. String sfzp = kdYdReceivableDetail.getSfzp();
  551. String gg = kdYdReceivableDetail.getGg();
  552. BigDecimal tc = kdYdReceivableDetail.getTc();
  553. String jx = kdYdReceivableDetail.getJx();
  554. BigDecimal zke = kdYdReceivableDetail.getZke();
  555. String detailId = kdYdReceivableDetail.getDetailId();
  556. // 优化:确保所有金额字段保留两位小数
  557. tablemap.put("textField_mgt4w4ip", count);
  558. tablemap.put("textField_mf6el3zy", wlbm);
  559. tablemap.put("textField_mf6el3zz", wlmc);
  560. tablemap.put("textField_mejmtic5", ggxh);
  561. tablemap.put("textField_mf6el400", jjdw);
  562. tablemap.put("textField_mhllijwo", ssxl);
  563. 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));
  564. 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));
  565. 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));
  566. 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));
  567. tablemap.put("textField_mf6el409", kcdw);
  568. tablemap.put("textField_mf6el408", ph);
  569. 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));
  570. 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));
  571. 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));
  572. 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));
  573. 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));
  574. 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));
  575. tablemap.put("radioField_mejnamfn", sfzp);
  576. 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));
  577. tablemap.put("textField_mf6el40d", jx);
  578. tablemap.put("textField_mf6el40b", gg);
  579. 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));
  580. count++;
  581. tableList.add(tablemap);
  582. kdYdReceivableDetail.setSyncStatus("1");
  583. kdYdReceivableDetailMapper.updateById(kdYdReceivableDetail);
  584. }
  585. // 同步收款计划
  586. LambdaQueryWrapper<KdYdReceivablePayment> receivablepayqw = new LambdaQueryWrapper<>();
  587. receivablepayqw
  588. .eq(KdYdReceivablePayment::getReceivableId, id)
  589. .orderByAsc(KdYdReceivablePayment::getDetailId);
  590. List<KdYdReceivablePayment> kdYdReceivablePayments = kdYdReceivalablePaymentMapper.selectList(receivablepayqw);
  591. ArrayList<Object> tableListPay = new ArrayList<>();
  592. if (!kdYdReceivablePayments.isEmpty()) {
  593. for (KdYdReceivablePayment kdYdReceivablePayment : kdYdReceivablePayments) {
  594. HashMap<Object, Object> tablemap1 = new HashMap<>();
  595. long timestamp = kdYdReceivablePayment.getEndTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli();
  596. String xsddh = kdYdReceivablePayment.getXsddh();
  597. BigDecimal ysje = kdYdReceivablePayment.getYsje();
  598. BigDecimal ysbl = kdYdReceivablePayment.getYsbl();
  599. BigDecimal ysjebwb = kdYdReceivablePayment.getYsjebwb();
  600. BigDecimal stkdglje = kdYdReceivablePayment.getStkdglje();
  601. tablemap1.put("textField_mhiui6va", xsddh);
  602. tablemap1.put("dateField_mhiui6v9", timestamp);
  603. 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));
  604. 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));
  605. 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));
  606. 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));
  607. tableListPay.add(tablemap1);
  608. kdYdReceivablePayment.setSyncStatus("1");
  609. kdYdReceivalablePaymentMapper.updateById(kdYdReceivablePayment);
  610. }
  611. }
  612. String ckddjbh = kdYdReceivable.getCkddjbh();
  613. String ckdformInstanceId = null;
  614. String ckdbh = null;
  615. try {
  616. List<Map> ddlist = (List<Map>) ydClient.queryData(
  617. YDParam.builder()
  618. .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
  619. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  620. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  621. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mg34txgm", ckddjbh)))
  622. .build(),
  623. YDConf.FORM_QUERY.retrieve_list_all
  624. ).getData();
  625. if (ddlist != null && !ddlist.isEmpty()) {
  626. for (Map<String, Object> khitem : ddlist) {
  627. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  628. if (khformData != null && ckddjbh.equals(khformData.get("textField_mg34txgm"))) {
  629. ckdformInstanceId = (String) khitem.get("formInstanceId");
  630. ckdbh = (String) khformData.get("textField_mg34txgm");
  631. break;
  632. }
  633. }
  634. if (ckdformInstanceId == null) {
  635. log.warn("未找到与ckdbh={}完全匹配的订单数据", ckdbh);
  636. }
  637. } else {
  638. log.warn("未查询到订单数据: ckdbh={}", ckdbh);
  639. }
  640. } catch (Exception e) {
  641. log.error("查询订单数据异常: ckdbh={}, 错误信息={}", ckdbh, e.getMessage(), e);
  642. }
  643. // 构建主表数据
  644. HashMap<Object, Object> updateData = new HashMap<>();
  645. updateData.put("tableField_mf6el3zx", tableList);
  646. if (ckdbh != null && ckdformInstanceId != null) {
  647. updateData.put("associationFormField_mejmtick",
  648. Arrays.asList(getysdAss(ckdbh, ckdformInstanceId)));
  649. }
  650. updateData.put("tableField_mhiui6v5", tableListPay);
  651. updateData.put("textField_mg3a0tgs", kdYdReceivable.getDjbh());
  652. updateData.put("selectField_mg3a0th4", kdYdReceivable.getDjlx());
  653. updateData.put("selectField_mev13l3r", kdYdReceivable.getSktj());
  654. updateData.put("dateField_mejmtic3", kdYdReceivable.getEndTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
  655. updateData.put("dateField_mejmtic2", kdYdReceivable.getBusinessTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
  656. 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));
  657. updateData.put("textField_mejmml3k", kdYdReceivable.getKh());
  658. updateData.put("textField_mhjy9hzh", kdYdReceivable.getXsy());
  659. updateData.put("selectField_mejowmnc", kdYdReceivable.getXslx());
  660. updateData.put("selectField_megi74y8", kdYdReceivable.getKhsx());
  661. updateData.put("textField_krnn5bmr", kdYdReceivable.getXsbm());
  662. updateData.put("textField_mhjy9hzi", kdYdReceivable.getLzlx());
  663. updateData.put("textareaField_mg3a0tgx", kdYdReceivable.getBz());
  664. updateData.put("selectField_mg3fuqvn", kdYdReceivable.getBb());
  665. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU", djbh);
  666. // 执行同步
  667. ydClient.operateData(YDParam.builder()
  668. .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
  669. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", kdYdReceivable.getDjbh())))
  670. .formDataJson(JSONObject.toJSONString(updateData))
  671. .build(), YDConf.FORM_OPERATION.upsert
  672. );
  673. kdYdReceivable.setSyncStatus("1");
  674. kdYdReceivableMapper.updateById(kdYdReceivable);
  675. successCount++;
  676. log.info("应收单同步成功: 单据编号={}", djbh);
  677. } catch (Exception e) {
  678. failCount++;
  679. log.error("同步应收单异常: ID={}, 单据编号={}, 错误信息={}",
  680. kdYdReceivable.getId(), kdYdReceivable.getDjbh(), e.getMessage(), e);
  681. }
  682. }
  683. log.info("【应收单同步任务】完成: 成功={}, 失败={}, 总计={}",
  684. successCount, failCount, kdYdReceivables.size());
  685. }
  686. @Override
  687. public void synckdYdZp() {
  688. log.info("定时同步-发票单");
  689. try {
  690. LocalDateTime now = LocalDateTime.now();
  691. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  692. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  693. List<KdYdZp> kdYdZps = kdYdZpMapper.selectRecentUpdated(fiveMinutesAgo);
  694. if (kdYdZps.isEmpty()) {
  695. log.info("【发票单同步任务】无需要同步的数据,结束");
  696. return;
  697. }
  698. for (KdYdZp kdYdZp : kdYdZps) {
  699. try {
  700. String djbh = kdYdZp.getDjbh();
  701. String fph = kdYdZp.getFph();
  702. // String formInstId = kdYdZp.getForminstid();
  703. // if (ObjectUtil.hasEmpty(formInstId, djbh, fph)) {
  704. // log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdZp.getId());
  705. // continue;
  706. // }
  707. ydClient.operateData(
  708. YDParam.builder()
  709. // .formInstanceId(formInstId)
  710. .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgt6lcqq, textField_mejmml3a", djbh, fph)))
  711. .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
  712. } catch (Exception e) {
  713. // log.error("同步单条发票单数据异常: formInstId={}", kdYdZp.getForminstid(), e);
  714. }
  715. }
  716. log.info("【发票单同步任务】执行完成,共处理 {} 条记录", kdYdZps.size());
  717. } catch (Exception e) {
  718. log.error("【发票单同步任务】执行过程中发生严重错误", e);
  719. }
  720. }
  721. @Override
  722. public void synckdYdMaterial() {
  723. log.info("定时同步-物料单");
  724. // 查询需要删除的数据
  725. LambdaQueryWrapper<KdYdMaterial> materialdel = new LambdaQueryWrapper<>();
  726. materialdel.eq(KdYdMaterial::getOperationType, 3) // 修正:使用 materialdel 而不是 materialqw
  727. .eq(KdYdMaterial::getSyncStatus, "0");
  728. List<KdYdMaterial> kdYdMaterialdels = kdYdMaterialMapper.selectList(materialdel);
  729. // 批量删除处理
  730. if (!kdYdMaterialdels.isEmpty()) {
  731. log.info("开始处理删除操作,共{}条数据", kdYdMaterialdels.size());
  732. ArrayList<String> list = new ArrayList<>();
  733. int deleteSuccessCount = 0;
  734. for (KdYdMaterial kdYdMaterial : kdYdMaterialdels) {
  735. try {
  736. String wlbm = kdYdMaterial.getWlbm();
  737. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  738. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  739. .appType("APP_VQDMMWS6OR1VHL8VMFD3") // 新增:添加应用参数
  740. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2") // 新增:添加系统令牌
  741. .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_mfxbtcdh", wlbm)))
  742. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  743. if (list1 != null && !list1.isEmpty()) {
  744. for (Map map : list1) {
  745. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  746. if (formInstanceId != null) {
  747. list.add(formInstanceId);
  748. log.debug("找到待删除的表单实例: formInstanceId={}", formInstanceId);
  749. }
  750. }
  751. deleteSuccessCount++;
  752. } else {
  753. log.warn("未找到对应的物料数据: wlbm={}", wlbm);
  754. }
  755. // 删除操作完成后更新状态
  756. kdYdMaterial.setSyncStatus("1");
  757. kdYdMaterialMapper.updateById(kdYdMaterial);
  758. } catch (Exception e) {
  759. log.error("删除物料数据查询异常: wlbm={}", kdYdMaterial.getWlbm(), e);
  760. }
  761. }
  762. // 执行批量删除
  763. if (!list.isEmpty()) {
  764. try {
  765. ydClient.operateData(YDParam.builder()
  766. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  767. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  768. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  769. .formInstanceIdList(list)
  770. .build(), YDConf.FORM_OPERATION.delete_batch);
  771. log.info("批量删除完成,共删除{}条数据", list.size());
  772. } catch (Exception e) {
  773. log.error("批量删除操作异常", e);
  774. }
  775. }
  776. return;
  777. }
  778. LambdaQueryWrapper<KdYdMaterial> materialqw = new LambdaQueryWrapper<>();
  779. materialqw.eq(KdYdMaterial::getSyncStatus, "0");
  780. List<KdYdMaterial> kdYdMaterials = kdYdMaterialMapper.selectList(materialqw);
  781. log.info("本次需要同步的物料单数量: {}", kdYdMaterials.size());
  782. // 同步新增/更新数据
  783. if (kdYdMaterials.isEmpty()) {
  784. log.info("【物料单同步任务】无需要同步的数据,结束");
  785. return;
  786. }
  787. int successCount = 0;
  788. int failCount = 0;
  789. for (KdYdMaterial kdYdMaterial : kdYdMaterials) {
  790. try {
  791. String wlbm = kdYdMaterial.getWlbm();
  792. String wlmc = kdYdMaterial.getWlmc();
  793. String xh = kdYdMaterial.getXh();
  794. String gg = kdYdMaterial.getGg();
  795. String wlfz = kdYdMaterial.getWlfz();
  796. String wlsx = kdYdMaterial.getWlsx();
  797. String jbdw = kdYdMaterial.getJbdw();
  798. String ssxl = kdYdMaterial.getSsxl();
  799. String jx = kdYdMaterial.getJx();
  800. Integer sd = kdYdMaterial.getSd();
  801. String mrsl = kdYdMaterial.getMrsl();
  802. String chlb = kdYdMaterial.getChlb();
  803. String xsy = kdYdMaterial.getXsy();
  804. BigDecimal xsjzj = kdYdMaterial.getXsjzj();
  805. String smzs = kdYdMaterial.getSmzs();
  806. String sjzt = kdYdMaterial.getSjzt();
  807. String jyzt = kdYdMaterial.getJyzt();
  808. String dzl = kdYdMaterial.getDzl();
  809. String pzzt = kdYdMaterial.getPzzt();
  810. String wlbt = wlmc + wlbm;
  811. // String materialtitle = kdYdMaterial.getMaterialtitle();
  812. Map updateFormData = new HashMap();
  813. updateFormData.put("textField_l43jpnsf", wlmc);
  814. updateFormData.put("textField_mfxbtcdh", wlbm);
  815. updateFormData.put("textField_l43jpnsg", xh);
  816. updateFormData.put("textField_lqbxkzbq", gg);
  817. updateFormData.put("textField_mhlbx8hi", wlfz);
  818. updateFormData.put("textField_l43jpnsh", wlsx);
  819. updateFormData.put("textField_mfxbtcdo", jbdw);
  820. updateFormData.put("textField_mfxbtcdp", ssxl);
  821. updateFormData.put("textField_mejl9nrs", jx);
  822. updateFormData.put("numberField_mfxbtceb", sd);
  823. updateFormData.put("textField_mejl9nrp", dzl);
  824. updateFormData.put("selectField_mejl9nrq", pzzt);
  825. updateFormData.put("textField_mfxbtcdq", mrsl);
  826. updateFormData.put("textField_mfxbtcdr", chlb);
  827. updateFormData.put("textField_mfxbtce5", xsy);
  828. //确保金额字段保留两位小数
  829. if (xsjzj != null) {
  830. updateFormData.put("numberField_mejl9nsc", xsjzj.setScale(2, java.math.RoundingMode.HALF_UP));
  831. } else {
  832. updateFormData.put("numberField_mejl9nsc", java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  833. }
  834. updateFormData.put("textField_mfxbtce4", smzs);
  835. updateFormData.put("textField_mfxbtcea", jyzt);
  836. updateFormData.put("textField_mg4h6mz5", wlbt);
  837. ydClient.operateData(YDParam.builder()
  838. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  839. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  840. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  841. // .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg4h6mz5", wlbt)))
  842. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mfxbtcdh", wlbm)))
  843. .formDataJson(JSONObject.toJSONString(updateFormData))
  844. .build(), YDConf.FORM_OPERATION.upsert);
  845. // 同步成功,更新状态
  846. kdYdMaterial.setSyncStatus("1");
  847. kdYdMaterialMapper.updateById(kdYdMaterial);
  848. successCount++;
  849. log.info("物料单同步成功: wlbm={}, wlmc={}", wlbm, wlmc);
  850. } catch (Exception e) {
  851. failCount++;
  852. log.error("同步单条物料单数据异常: wlbm={}, wlmc={}",
  853. kdYdMaterial.getWlbm(), kdYdMaterial.getWlmc(), e);
  854. }
  855. }
  856. // 添加同步结果统计日志
  857. log.info("物料单同步完成: 成功={}, 失败={}, 总计={}",
  858. successCount, failCount, kdYdMaterials.size());
  859. }
  860. @Override
  861. public void syncKdYdDeliveryDetail() {
  862. log.info("定时同步-发货单详情");
  863. try {
  864. LocalDateTime now = LocalDateTime.now();
  865. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  866. // 1. 查询最近更新的 delivery detail
  867. List<KdYdDeliveryDetail> kdYdDeliveryDetails = kdYdDeliveryDetailMapper.selectRecentUpdated(fiveMinutesAgo);
  868. if (kdYdDeliveryDetails.isEmpty()) {
  869. log.info("【发货详情单同步任务】无需要同步的数据,结束");
  870. return;
  871. }
  872. // 2. 按 deliveryId 提取主单 ID 列表,避免重复查询
  873. Set<Long> deliveryIds = kdYdDeliveryDetails.stream()
  874. .map(KdYdDeliveryDetail::getDeliveryId)
  875. .filter(Objects::nonNull)
  876. .collect(Collectors.toSet());
  877. // 3. 批量查询主单信息(包含 formInstId)
  878. List<KdYdDelivery> mainDeliveries = kdYdDeliveryMapper.selectBatchIds(deliveryIds);
  879. Map<Long, KdYdDelivery> deliveryMap = mainDeliveries.stream()
  880. .collect(Collectors.toMap(KdYdDelivery::getId, d -> d));
  881. // 4. 按 formInstId 分组,减少 API 调用次数
  882. // Map<String, List<KdYdDeliveryDetail>> detailsByFormInstId = kdYdDeliveryDetails.stream()
  883. // .filter(detail -> deliveryMap.containsKey(detail.getDeliveryId()))
  884. // .collect(Collectors.groupingBy(detail -> {
  885. // KdYdDelivery main = deliveryMap.get(detail.getDeliveryId());
  886. // return main != null ? main.getForminstid() : null;
  887. // }));
  888. int successCount = 0;
  889. int errorCount = 0;
  890. // 5. 遍历每个 formInstId,只调用一次 query + 一次 update
  891. // for (Map.Entry<String, List<KdYdDeliveryDetail>> entry : detailsByFormInstId.entrySet()) {
  892. // String formInstId = entry.getKey();
  893. // if (formInstId == null || formInstId.trim().isEmpty()) {
  894. // log.warn("跳过空 formInstId 的记录");
  895. // continue;
  896. // }
  897. //
  898. // try {
  899. // // 查询当前表单数据
  900. // Map formData = ydClient.queryData(
  901. // YDParam.builder()
  902. // .formInstId(formInstId)
  903. // .appType(ydConf.getAppType())
  904. // .systemToken(ydConf.getSystemToken())
  905. // .userId(ddConf.getOperator())
  906. // .build(),
  907. // YDConf.FORM_QUERY.retrieve_id
  908. // ).getFormData();
  909. //
  910. // if (formData == null) {
  911. // log.warn("formInstId={} 的 formData 为空", formInstId);
  912. // continue;
  913. // }
  914. //
  915. // List<Map<String, Object>> tableData = (List<Map<String, Object>>) formData.get("tableField_mejnamfd");
  916. // if (tableData == null || tableData.isEmpty()) {
  917. // log.warn("formInstId={} 的子表 tableField_mejnamfd 为空", formInstId);
  918. // continue;
  919. // }
  920. // // 标记是否需要更新
  921. // boolean modified = false;
  922. //
  923. // // 处理当前 formInstId 下的所有待同步 detail
  924. // for (KdYdDeliveryDetail detail : entry.getValue()) {
  925. // String wlbm = detail.getWlbm();
  926. // String mdh = detail.getMdh();
  927. //
  928. // for (Map<String, Object> row : tableData) {
  929. // Object wlbmIdObj = row.get("textField_mejnamff");
  930. // if (wlbmIdObj != null && wlbm.equals(wlbmIdObj.toString())) {
  931. // row.put("textField_mf6a0h6y", mdh);
  932. // modified = true;
  933. // successCount++;
  934. // break; // 找到匹配行即可跳出
  935. // }
  936. // }
  937. // }
  938. //
  939. // // 只有修改了才提交
  940. // if (modified) {
  941. // ydClient.operateData(
  942. // YDParam.builder()
  943. // .formInstanceId(formInstId)
  944. // .updateFormDataJson(JSON.toJSONString(Collections.singletonMap("tableField_mejnamfd", tableData)))
  945. // .useLatestVersion(true)
  946. // .build(),
  947. // YDConf.FORM_OPERATION.update
  948. // );
  949. // log.debug("已更新 formInstId={} 的子表数据", formInstId);
  950. // } else {
  951. // log.debug("formInstId={} 无需更新", formInstId);
  952. // }
  953. //
  954. // } catch (Exception e) {
  955. // errorCount += entry.getValue().size(); // 统计失败数量
  956. // log.error("同步 formInstId={} 时发生异常", formInstId, e);
  957. // }
  958. // }
  959. //
  960. // log.info("【发货详情单同步任务】执行完成,共处理 {} 条记录,成功 {} 条,失败 {} 条",
  961. // kdYdDeliveryDetails.size(), successCount, errorCount);
  962. //
  963. } catch (Exception e) {
  964. log.error("【发货单同步任务】执行过程中发生严重错误", e);
  965. }
  966. }
  967. @Override
  968. public void synckdYdPayment() {
  969. log.info("定时同步-收款单");
  970. LambdaQueryWrapper<KdYdPaymentReceipt> paymentdel = new LambdaQueryWrapper<>();
  971. paymentdel.eq(KdYdPaymentReceipt::getOperationType, 3)
  972. .eq(KdYdPaymentReceipt::getSyncStatus, "0");
  973. List<KdYdPaymentReceipt> kdYdPaymentReceiptdels = kdYdPaymentReceiptMapper.selectList(paymentdel);
  974. // 批量删除处理
  975. if (!kdYdPaymentReceiptdels.isEmpty()) {
  976. log.info("开始处理收款单删除操作,共{}条数据", kdYdPaymentReceiptdels.size());
  977. ArrayList<String> deleteList = new ArrayList<>();
  978. int deleteSuccessCount = 0;
  979. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceiptdels) {
  980. try {
  981. String djbh = kdYdPaymentReceipt.getDjbh();
  982. log.debug("查询需要删除的收款单: djbh={}", djbh);
  983. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  984. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  985. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  986. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  987. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", djbh)))
  988. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  989. if (list1 != null && !list1.isEmpty()) {
  990. for (Map map : list1) {
  991. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  992. if (formInstanceId != null) {
  993. deleteList.add(formInstanceId);
  994. }
  995. }
  996. deleteSuccessCount++;
  997. // 同时删除对应的子表数据
  998. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  999. LambdaQueryWrapper<KdYdPaymentReceiptDetail> detailDelqw = new LambdaQueryWrapper<>();
  1000. detailDelqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId);
  1001. List<KdYdPaymentReceiptDetail> detailDels = kdYdPaymentReceiptDetailMapper.selectList(detailDelqw);
  1002. if (!detailDels.isEmpty()) {
  1003. for (KdYdPaymentReceiptDetail detail : detailDels) {
  1004. detail.setSyncStatus("1");
  1005. kdYdPaymentReceiptDetailMapper.updateById(detail);
  1006. }
  1007. }
  1008. } else {
  1009. log.warn("未找到对应的收款单数据: djbh={}", djbh);
  1010. }
  1011. // 删除操作完成后更新状态
  1012. kdYdPaymentReceipt.setSyncStatus("1");
  1013. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1014. } catch (Exception e) {
  1015. log.error("删除收款单数据查询异常: djbh={}", kdYdPaymentReceipt.getDjbh(), e);
  1016. }
  1017. }
  1018. // 执行批量删除
  1019. if (!deleteList.isEmpty()) {
  1020. try {
  1021. ydClient.operateData(YDParam.builder()
  1022. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1023. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1024. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1025. .formInstanceIdList(deleteList)
  1026. .build(), YDConf.FORM_OPERATION.delete_batch);
  1027. log.info("收款单批量删除完成,共删除{}条数据", deleteList.size());
  1028. } catch (Exception e) {
  1029. log.error("收款单批量删除操作异常", e);
  1030. }
  1031. }
  1032. log.info("收款单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  1033. return;
  1034. } else {
  1035. log.info("【收款单删除任务】无需要删除的数据");
  1036. }
  1037. LambdaQueryWrapper<KdYdPaymentReceipt> paymentqw = new LambdaQueryWrapper<>();
  1038. paymentqw.eq(KdYdPaymentReceipt::getSyncStatus, "0");
  1039. List<KdYdPaymentReceipt> kdYdPaymentReceipts = kdYdPaymentReceiptMapper.selectList(paymentqw);
  1040. if (kdYdPaymentReceipts.isEmpty()) {
  1041. log.info("【收款单同步任务】无需要同步的数据,结束");
  1042. return;
  1043. }
  1044. log.info("【收款单同步任务】开始同步,共{}条数据", kdYdPaymentReceipts.size());
  1045. int successCount = 0;
  1046. int failCount = 0;
  1047. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceipts) {
  1048. try {
  1049. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  1050. String djbh = kdYdPaymentReceipt.getDjbh();
  1051. log.debug("开始同步收款单: ID={}, 单据编号={}", paymentReceiptId, djbh);
  1052. LambdaQueryWrapper<KdYdPaymentReceiptDetail> receivedetailqw = new LambdaQueryWrapper<>();
  1053. receivedetailqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId)
  1054. .orderByAsc(KdYdPaymentReceiptDetail::getDetailId);
  1055. List<KdYdPaymentReceiptDetail> kdYDPaymentReceiptDetails = kdYdPaymentReceiptDetailMapper.selectList(receivedetailqw);
  1056. ArrayList<Object> tableList = new ArrayList<>();
  1057. for (KdYdPaymentReceiptDetail kdYdPaymentReceiptDetail : kdYDPaymentReceiptDetails) {
  1058. HashMap<String, String> tablemap = new HashMap<>();
  1059. tablemap.put("textField_mh9woanr", kdYdPaymentReceiptDetail.getJsfs());
  1060. tablemap.put("textField_mh9woans", kdYdPaymentReceiptDetail.getSkyt());
  1061. tablemap.put("textField_mh9woant", kdYdPaymentReceiptDetail.getYsxmlx());
  1062. tablemap.put("textField_mh9woanu", kdYdPaymentReceiptDetail.getYsxsdd());
  1063. 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());
  1064. 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());
  1065. tablemap.put("textField_mhmr1ecr", kdYdPaymentReceiptDetail.getCdk());
  1066. tablemap.put("textField_mh9woany", kdYdPaymentReceiptDetail.getWfyhzh());
  1067. tablemap.put("textField_mh9woao2", kdYdPaymentReceiptDetail.getXsddh());
  1068. tablemap.put("textField_mh9woao1", kdYdPaymentReceiptDetail.getFyxm());
  1069. 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());
  1070. 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());
  1071. kdYdPaymentReceiptDetail.setSyncStatus("1");
  1072. kdYdPaymentReceiptDetailMapper.updateById(kdYdPaymentReceiptDetail);
  1073. // tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
  1074. tableList.add(tablemap);
  1075. }
  1076. String xsddbh = kdYdPaymentReceipt.getXsddbh();
  1077. String ddformInstanceId = null;
  1078. String ddbh = null;
  1079. try {
  1080. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  1081. List<Map> ddlist = (List<Map>) ydClient.queryData(
  1082. YDParam.builder()
  1083. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  1084. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mewfgzku", xsddbh)))
  1085. .build(),
  1086. YDConf.FORM_QUERY.retrieve_list_all
  1087. ).getData();
  1088. if (ddlist != null && !ddlist.isEmpty()) {
  1089. for (Map<String, Object> khitem : ddlist) {
  1090. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  1091. if (khformData != null && xsddbh.equals(khformData.get("serialNumberField_mewfgzku"))) {
  1092. ddformInstanceId = (String) khitem.get("formInstanceId");
  1093. ddbh = (String) khformData.get("serialNumberField_mewfgzku");
  1094. break;
  1095. }
  1096. }
  1097. if (ddformInstanceId == null) {
  1098. log.warn("未找到与xsddbh={}完全匹配的订单数据", xsddbh);
  1099. }
  1100. } else {
  1101. log.warn("未查询到订单数据: xsddbh={}", xsddbh);
  1102. }
  1103. } catch (Exception e) {
  1104. log.error("查询订单数据异常: xsddbh={}, 错误信息={}", xsddbh, e.getMessage(), e);
  1105. }
  1106. HashMap<Object, Object> updateMap = new HashMap<>();
  1107. updateMap.put("tableField_mh9woanl", tableList);
  1108. if (ddbh != null && ddformInstanceId != null) {
  1109. updateMap.put("associationFormField_mh9woamy",
  1110. Arrays.asList(getddAss(ddbh, ddformInstanceId)));
  1111. }
  1112. updateMap.put("textField_mh9woanm", kdYdPaymentReceipt.getDjlx());
  1113. updateMap.put("textField_mh9woann", kdYdPaymentReceipt.getFkdwlx());
  1114. updateMap.put("textField_mh9woamt", kdYdPaymentReceipt.getDjbh());
  1115. updateMap.put("textField_mh9woamz", kdYdPaymentReceipt.getSkgld());
  1116. updateMap.put("textField_mh9woano", kdYdPaymentReceipt.getBb());
  1117. updateMap.put("dateField_mh9woan5", kdYdPaymentReceipt.getYwrq() != null ? String.valueOf(kdYdPaymentReceipt.getYwrq().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  1118. updateMap.put("textField_mh9woanp", kdYdPaymentReceipt.getWldwlx());
  1119. updateMap.put("textField_mh9woanq", kdYdPaymentReceipt.getWldw());
  1120. 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());
  1121. 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());
  1122. updateMap.put("textField_mhjxv2tf", kdYdPaymentReceipt.getXsy());
  1123. updateMap.put("textField_mhjxv2tg", kdYdPaymentReceipt.getXsbm());
  1124. updateMap.put("textareaField_mh9woank", kdYdPaymentReceipt.getBz());
  1125. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM", djbh);
  1126. // 添加同步操作(根据您的实际需求添加)
  1127. ydClient.operateData(YDParam.builder()
  1128. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1129. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", kdYdPaymentReceipt.getDjbh())))
  1130. .formDataJson(JSONObject.toJSONString(updateMap))
  1131. .build(), YDConf.FORM_OPERATION.upsert);
  1132. // 更新同步状态
  1133. kdYdPaymentReceipt.setSyncStatus("1");
  1134. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1135. successCount++;
  1136. log.info("收款单同步成功: 单据编号={}", djbh);
  1137. } catch (Exception e) {
  1138. failCount++;
  1139. log.error("同步单条收款单数据异常: 单据编号={}, 错误信息={}",
  1140. kdYdPaymentReceipt.getDjbh(), e.getMessage(), e);
  1141. }
  1142. }
  1143. log.info("【收款单同步任务】完成: 成功={}, 失败={}, 总计={}",
  1144. successCount, failCount, kdYdPaymentReceipts.size());
  1145. }
  1146. private Object getddAss(String title, String id) {
  1147. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
  1148. }
  1149. private Object getfhdAss(String title, String id) {
  1150. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-A7F03ACEE01D4F609550C86BF7FE87D35M6I", "receipt", id, title, "");
  1151. }
  1152. private Object getysdAss(String title, String id) {
  1153. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-AADBCDA8126F41A0ADDEE3353828583192M8", "receipt", id, title, "");
  1154. }
  1155. }