YdHuaGaoServiceImpl.java 91 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632
  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. //确保金额字段保留两位小数
  846. if (xsjzj != null) {
  847. updateFormData.put("numberField_mejl9nsc", xsjzj.setScale(2, java.math.RoundingMode.HALF_UP));
  848. } else {
  849. updateFormData.put("numberField_mejl9nsc", java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
  850. }
  851. updateFormData.put("textField_mfxbtce4", smzs);
  852. updateFormData.put("textField_mfxbtcea", jyzt);
  853. updateFormData.put("textField_mg4h6mz5", wlbt);
  854. ydClient.operateData(YDParam.builder()
  855. .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
  856. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  857. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  858. .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch(
  859. "textField_misfb2ft", jdnm, "金蝶内码", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
  860. .formDataJson(JSONObject.toJSONString(updateFormData))
  861. .build(), YDConf.FORM_OPERATION.upsert);
  862. // 同步成功,更新状态
  863. kdYdMaterial.setSyncStatus("1");
  864. kdYdMaterialMapper.updateById(kdYdMaterial);
  865. successCount++;
  866. log.info("物料单同步成功: wlbm={}, wlmc={}", wlbm, wlmc);
  867. } catch (Exception e) {
  868. failCount++;
  869. log.error("同步单条物料单数据异常: wlbm={}, wlmc={}",
  870. kdYdMaterial.getWlbm(), kdYdMaterial.getWlmc(), e);
  871. }
  872. }
  873. // 添加同步结果统计日志
  874. log.info("物料单同步完成: 成功={}, 失败={}, 总计={}",
  875. successCount, failCount, kdYdMaterials.size());
  876. }
  877. @Override
  878. public void syncKdYdDeliveryDetail() {
  879. log.info("定时同步-发货单详情");
  880. try {
  881. LocalDateTime now = LocalDateTime.now();
  882. LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
  883. // 1. 查询最近更新的 delivery detail
  884. List<KdYdDeliveryDetail> kdYdDeliveryDetails = kdYdDeliveryDetailMapper.selectRecentUpdated(fiveMinutesAgo);
  885. if (kdYdDeliveryDetails.isEmpty()) {
  886. log.info("【发货详情单同步任务】无需要同步的数据,结束");
  887. return;
  888. }
  889. // 2. 按 deliveryId 提取主单 ID 列表,避免重复查询
  890. Set<Long> deliveryIds = kdYdDeliveryDetails.stream()
  891. .map(KdYdDeliveryDetail::getDeliveryId)
  892. .filter(Objects::nonNull)
  893. .collect(Collectors.toSet());
  894. // 3. 批量查询主单信息(包含 formInstId)
  895. List<KdYdDelivery> mainDeliveries = kdYdDeliveryMapper.selectBatchIds(deliveryIds);
  896. Map<Long, KdYdDelivery> deliveryMap = mainDeliveries.stream()
  897. .collect(Collectors.toMap(KdYdDelivery::getId, d -> d));
  898. // 4. 按 formInstId 分组,减少 API 调用次数
  899. // Map<String, List<KdYdDeliveryDetail>> detailsByFormInstId = kdYdDeliveryDetails.stream()
  900. // .filter(detail -> deliveryMap.containsKey(detail.getDeliveryId()))
  901. // .collect(Collectors.groupingBy(detail -> {
  902. // KdYdDelivery main = deliveryMap.get(detail.getDeliveryId());
  903. // return main != null ? main.getForminstid() : null;
  904. // }));
  905. int successCount = 0;
  906. int errorCount = 0;
  907. // 5. 遍历每个 formInstId,只调用一次 query + 一次 update
  908. // for (Map.Entry<String, List<KdYdDeliveryDetail>> entry : detailsByFormInstId.entrySet()) {
  909. // String formInstId = entry.getKey();
  910. // if (formInstId == null || formInstId.trim().isEmpty()) {
  911. // log.warn("跳过空 formInstId 的记录");
  912. // continue;
  913. // }
  914. //
  915. // try {
  916. // // 查询当前表单数据
  917. // Map formData = ydClient.queryData(
  918. // YDParam.builder()
  919. // .formInstId(formInstId)
  920. // .appType(ydConf.getAppType())
  921. // .systemToken(ydConf.getSystemToken())
  922. // .userId(ddConf.getOperator())
  923. // .build(),
  924. // YDConf.FORM_QUERY.retrieve_id
  925. // ).getFormData();
  926. //
  927. // if (formData == null) {
  928. // log.warn("formInstId={} 的 formData 为空", formInstId);
  929. // continue;
  930. // }
  931. //
  932. // List<Map<String, Object>> tableData = (List<Map<String, Object>>) formData.get("tableField_mejnamfd");
  933. // if (tableData == null || tableData.isEmpty()) {
  934. // log.warn("formInstId={} 的子表 tableField_mejnamfd 为空", formInstId);
  935. // continue;
  936. // }
  937. // // 标记是否需要更新
  938. // boolean modified = false;
  939. //
  940. // // 处理当前 formInstId 下的所有待同步 detail
  941. // for (KdYdDeliveryDetail detail : entry.getValue()) {
  942. // String wlbm = detail.getWlbm();
  943. // String mdh = detail.getMdh();
  944. //
  945. // for (Map<String, Object> row : tableData) {
  946. // Object wlbmIdObj = row.get("textField_mejnamff");
  947. // if (wlbmIdObj != null && wlbm.equals(wlbmIdObj.toString())) {
  948. // row.put("textField_mf6a0h6y", mdh);
  949. // modified = true;
  950. // successCount++;
  951. // break; // 找到匹配行即可跳出
  952. // }
  953. // }
  954. // }
  955. //
  956. // // 只有修改了才提交
  957. // if (modified) {
  958. // ydClient.operateData(
  959. // YDParam.builder()
  960. // .formInstanceId(formInstId)
  961. // .updateFormDataJson(JSON.toJSONString(Collections.singletonMap("tableField_mejnamfd", tableData)))
  962. // .useLatestVersion(true)
  963. // .build(),
  964. // YDConf.FORM_OPERATION.update
  965. // );
  966. // log.debug("已更新 formInstId={} 的子表数据", formInstId);
  967. // } else {
  968. // log.debug("formInstId={} 无需更新", formInstId);
  969. // }
  970. //
  971. // } catch (Exception e) {
  972. // errorCount += entry.getValue().size(); // 统计失败数量
  973. // log.error("同步 formInstId={} 时发生异常", formInstId, e);
  974. // }
  975. // }
  976. //
  977. // log.info("【发货详情单同步任务】执行完成,共处理 {} 条记录,成功 {} 条,失败 {} 条",
  978. // kdYdDeliveryDetails.size(), successCount, errorCount);
  979. //
  980. } catch (Exception e) {
  981. log.error("【发货单同步任务】执行过程中发生严重错误", e);
  982. }
  983. }
  984. @Override
  985. public void synckdYdPayment() {
  986. log.info("定时同步-收款单");
  987. LambdaQueryWrapper<KdYdPaymentReceipt> paymentdel = new LambdaQueryWrapper<>();
  988. paymentdel.eq(KdYdPaymentReceipt::getOperationType, 3)
  989. .eq(KdYdPaymentReceipt::getSyncStatus, "0");
  990. List<KdYdPaymentReceipt> kdYdPaymentReceiptdels = kdYdPaymentReceiptMapper.selectList(paymentdel);
  991. // 批量删除处理
  992. if (!kdYdPaymentReceiptdels.isEmpty()) {
  993. log.info("开始处理收款单删除操作,共{}条数据", kdYdPaymentReceiptdels.size());
  994. ArrayList<String> deleteList = new ArrayList<>();
  995. int deleteSuccessCount = 0;
  996. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceiptdels) {
  997. try {
  998. String djbh = kdYdPaymentReceipt.getDjbh();
  999. log.debug("查询需要删除的收款单: djbh={}", djbh);
  1000. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  1001. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1002. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1003. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1004. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", djbh)))
  1005. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  1006. if (list1 != null && !list1.isEmpty()) {
  1007. for (Map map : list1) {
  1008. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  1009. if (formInstanceId != null) {
  1010. deleteList.add(formInstanceId);
  1011. }
  1012. }
  1013. deleteSuccessCount++;
  1014. // 同时删除对应的子表数据
  1015. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  1016. LambdaQueryWrapper<KdYdPaymentReceiptDetail> detailDelqw = new LambdaQueryWrapper<>();
  1017. detailDelqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId);
  1018. List<KdYdPaymentReceiptDetail> detailDels = kdYdPaymentReceiptDetailMapper.selectList(detailDelqw);
  1019. if (!detailDels.isEmpty()) {
  1020. for (KdYdPaymentReceiptDetail detail : detailDels) {
  1021. detail.setSyncStatus("1");
  1022. kdYdPaymentReceiptDetailMapper.updateById(detail);
  1023. }
  1024. }
  1025. } else {
  1026. log.warn("未找到对应的收款单数据: djbh={}", djbh);
  1027. }
  1028. // 删除操作完成后更新状态
  1029. kdYdPaymentReceipt.setSyncStatus("1");
  1030. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1031. } catch (Exception e) {
  1032. log.error("删除收款单数据查询异常: djbh={}", kdYdPaymentReceipt.getDjbh(), e);
  1033. }
  1034. }
  1035. // 执行批量删除
  1036. if (!deleteList.isEmpty()) {
  1037. try {
  1038. ydClient.operateData(YDParam.builder()
  1039. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1040. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1041. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1042. .formInstanceIdList(deleteList)
  1043. .build(), YDConf.FORM_OPERATION.delete_batch);
  1044. log.info("收款单批量删除完成,共删除{}条数据", deleteList.size());
  1045. } catch (Exception e) {
  1046. log.error("收款单批量删除操作异常", e);
  1047. }
  1048. }
  1049. log.info("收款单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  1050. return;
  1051. } else {
  1052. log.info("【收款单删除任务】无需要删除的数据");
  1053. }
  1054. LambdaQueryWrapper<KdYdPaymentReceipt> paymentqw = new LambdaQueryWrapper<>();
  1055. paymentqw.eq(KdYdPaymentReceipt::getSyncStatus, "0");
  1056. List<KdYdPaymentReceipt> kdYdPaymentReceipts = kdYdPaymentReceiptMapper.selectList(paymentqw);
  1057. if (kdYdPaymentReceipts.isEmpty()) {
  1058. log.info("【收款单同步任务】无需要同步的数据,结束");
  1059. return;
  1060. }
  1061. log.info("【收款单同步任务】开始同步,共{}条数据", kdYdPaymentReceipts.size());
  1062. int successCount = 0;
  1063. int failCount = 0;
  1064. for (KdYdPaymentReceipt kdYdPaymentReceipt : kdYdPaymentReceipts) {
  1065. try {
  1066. Long paymentReceiptId = kdYdPaymentReceipt.getId();
  1067. String djbh = kdYdPaymentReceipt.getDjbh();
  1068. log.debug("开始同步收款单: ID={}, 单据编号={}", paymentReceiptId, djbh);
  1069. LambdaQueryWrapper<KdYdPaymentReceiptDetail> receivedetailqw = new LambdaQueryWrapper<>();
  1070. receivedetailqw.eq(KdYdPaymentReceiptDetail::getPayreceiptId, paymentReceiptId)
  1071. .orderByAsc(KdYdPaymentReceiptDetail::getDetailId);
  1072. List<KdYdPaymentReceiptDetail> kdYDPaymentReceiptDetails = kdYdPaymentReceiptDetailMapper.selectList(receivedetailqw);
  1073. ArrayList<Object> tableList = new ArrayList<>();
  1074. for (KdYdPaymentReceiptDetail kdYdPaymentReceiptDetail : kdYDPaymentReceiptDetails) {
  1075. HashMap<String, String> tablemap = new HashMap<>();
  1076. tablemap.put("textField_mh9woanr", kdYdPaymentReceiptDetail.getJsfs());
  1077. tablemap.put("textField_mh9woans", kdYdPaymentReceiptDetail.getSkyt());
  1078. tablemap.put("textField_mh9woant", kdYdPaymentReceiptDetail.getYsxmlx());
  1079. tablemap.put("textField_mh9woanu", kdYdPaymentReceiptDetail.getYsxsdd());
  1080. 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());
  1081. 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());
  1082. tablemap.put("textField_mhmr1ecr", kdYdPaymentReceiptDetail.getCdk());
  1083. tablemap.put("textField_mh9woany", kdYdPaymentReceiptDetail.getWfyhzh());
  1084. tablemap.put("textField_mh9woao2", kdYdPaymentReceiptDetail.getXsddh());
  1085. tablemap.put("textField_mh9woao1", kdYdPaymentReceiptDetail.getFyxm());
  1086. 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());
  1087. 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());
  1088. kdYdPaymentReceiptDetail.setSyncStatus("1");
  1089. kdYdPaymentReceiptDetailMapper.updateById(kdYdPaymentReceiptDetail);
  1090. // tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
  1091. tableList.add(tablemap);
  1092. }
  1093. String xsddbh = kdYdPaymentReceipt.getXsddbh();
  1094. String ddformInstanceId = null;
  1095. String ddbh = null;
  1096. try {
  1097. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  1098. List<Map> ddlist = (List<Map>) ydClient.queryData(
  1099. YDParam.builder()
  1100. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  1101. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
  1102. .build(),
  1103. YDConf.FORM_QUERY.retrieve_list_all
  1104. ).getData();
  1105. if (ddlist != null && !ddlist.isEmpty()) {
  1106. for (Map<String, Object> khitem : ddlist) {
  1107. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  1108. if (khformData != null && xsddbh.equals(khformData.get("textField_mjs6fuwo"))) {
  1109. ddformInstanceId = (String) khitem.get("formInstanceId");
  1110. ddbh = (String) khformData.get("textField_mjs6fuwo");
  1111. break;
  1112. }
  1113. }
  1114. if (ddformInstanceId == null) {
  1115. log.warn("未找到与xsddbh={}完全匹配的订单数据", xsddbh);
  1116. }
  1117. } else {
  1118. log.warn("未查询到订单数据: xsddbh={}", xsddbh);
  1119. }
  1120. } catch (Exception e) {
  1121. log.error("查询订单数据异常: xsddbh={}, 错误信息={}", xsddbh, e.getMessage(), e);
  1122. }
  1123. HashMap<Object, Object> updateMap = new HashMap<>();
  1124. updateMap.put("tableField_mh9woanl", tableList);
  1125. if (ddbh != null && ddformInstanceId != null) {
  1126. updateMap.put("associationFormField_mh9woamy",
  1127. Arrays.asList(getddAss(ddbh, ddformInstanceId)));
  1128. }
  1129. updateMap.put("textField_mh9woanm", kdYdPaymentReceipt.getDjlx());
  1130. updateMap.put("textField_mh9woann", kdYdPaymentReceipt.getFkdwlx());
  1131. updateMap.put("textField_mh9woamt", kdYdPaymentReceipt.getDjbh());
  1132. updateMap.put("textField_mh9woamz", kdYdPaymentReceipt.getSkgld());
  1133. updateMap.put("textField_mh9woano", kdYdPaymentReceipt.getBb());
  1134. updateMap.put("dateField_mh9woan5", kdYdPaymentReceipt.getYwrq() != null ? String.valueOf(kdYdPaymentReceipt.getYwrq().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
  1135. updateMap.put("textField_mh9woanp", kdYdPaymentReceipt.getWldwlx());
  1136. updateMap.put("textField_mh9woanq", kdYdPaymentReceipt.getWldw());
  1137. 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());
  1138. 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());
  1139. updateMap.put("textField_mhjxv2tf", kdYdPaymentReceipt.getXsy());
  1140. updateMap.put("textField_mhjxv2tg", kdYdPaymentReceipt.getXsbm());
  1141. updateMap.put("textareaField_mh9woank", kdYdPaymentReceipt.getBz());
  1142. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM", djbh);
  1143. // 添加同步操作(根据您的实际需求添加)
  1144. ydClient.operateData(YDParam.builder()
  1145. .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
  1146. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", kdYdPaymentReceipt.getDjbh())))
  1147. .formDataJson(JSONObject.toJSONString(updateMap))
  1148. .build(), YDConf.FORM_OPERATION.upsert);
  1149. // 更新同步状态
  1150. kdYdPaymentReceipt.setSyncStatus("1");
  1151. kdYdPaymentReceiptMapper.updateById(kdYdPaymentReceipt);
  1152. successCount++;
  1153. log.info("收款单同步成功: 单据编号={}", djbh);
  1154. } catch (Exception e) {
  1155. failCount++;
  1156. log.error("同步单条收款单数据异常: 单据编号={}, 错误信息={}",
  1157. kdYdPaymentReceipt.getDjbh(), e.getMessage(), e);
  1158. }
  1159. }
  1160. log.info("【收款单同步任务】完成: 成功={}, 失败={}, 总计={}",
  1161. successCount, failCount, kdYdPaymentReceipts.size());
  1162. }
  1163. @Override
  1164. public void synckdYdTRANSFER() {
  1165. log.info("定时同步-调拨单");
  1166. LambdaQueryWrapper<KdYdTransfer> transferdel = new LambdaQueryWrapper<>();
  1167. transferdel.eq(KdYdTransfer::getOperationType, 3)
  1168. .eq(KdYdTransfer::getSyncStatus, "0");
  1169. List<KdYdTransfer> kdYdTRANSFERdels = kdYdTransferMapper.selectList(transferdel);
  1170. // 批量删除处理
  1171. if (!kdYdTRANSFERdels.isEmpty()) {
  1172. log.info("开始处理调拨单删除操作,共{}条数据", kdYdTRANSFERdels.size());
  1173. ArrayList<String> deleteList = new ArrayList<>();
  1174. int deleteSuccessCount = 0;
  1175. for (KdYdTransfer kdYdTransfer : kdYdTRANSFERdels) {
  1176. try {
  1177. String djbh = kdYdTransfer.getDjbh();
  1178. log.debug("查询需要删除的调拨单: djbh={}", djbh);
  1179. List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
  1180. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1181. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1182. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1183. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
  1184. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  1185. if (list1 != null && !list1.isEmpty()) {
  1186. for (Map map : list1) {
  1187. String formInstanceId = UtilMap.getString(map, "formInstanceId");
  1188. if (formInstanceId != null) {
  1189. deleteList.add(formInstanceId);
  1190. }
  1191. }
  1192. deleteSuccessCount++;
  1193. // 同时删除对应的子表数据
  1194. Long transferId = kdYdTransfer.getId();
  1195. LambdaQueryWrapper<KdYdTransferDetail> detailDelqw = new LambdaQueryWrapper<>();
  1196. detailDelqw.eq(KdYdTransferDetail::getTransferId, transferId);
  1197. List<KdYdTransferDetail> detailDels = kdYdTransferDetailMapper.selectList(detailDelqw);
  1198. if (!detailDels.isEmpty()) {
  1199. for (KdYdTransferDetail detail : detailDels) {
  1200. detail.setSyncStatus("1");
  1201. kdYdTransferDetailMapper.updateById(detail);
  1202. }
  1203. }
  1204. } else {
  1205. log.warn("未找到对应的调拨单数据: djbh={}", djbh);
  1206. }
  1207. // 删除操作完成后更新状态
  1208. kdYdTransfer.setSyncStatus("1");
  1209. kdYdTransferMapper.updateById(kdYdTransfer);
  1210. } catch (Exception e) {
  1211. log.error("删除调拨单数据查询异常: djbh={}", kdYdTransfer.getDjbh(), e);
  1212. }
  1213. }
  1214. // 执行批量删除
  1215. if (!deleteList.isEmpty()) {
  1216. try {
  1217. ydClient.operateData(YDParam.builder()
  1218. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1219. .appType("APP_VQDMMWS6OR1VHL8VMFD3")
  1220. .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
  1221. .formInstanceIdList(deleteList)
  1222. .build(), YDConf.FORM_OPERATION.delete_batch);
  1223. log.info("调拨单批量删除完成,共删除{}条数据", deleteList.size());
  1224. } catch (Exception e) {
  1225. log.error("调拨单批量删除操作异常", e);
  1226. }
  1227. }
  1228. log.info("调拨单删除操作处理完成: 成功查询={}, 待删除={}", deleteSuccessCount, deleteList.size());
  1229. return;
  1230. } else {
  1231. log.info("【调拨单删除任务】无需要删除的数据");
  1232. }
  1233. LambdaQueryWrapper<KdYdTransfer> paymentqw = new LambdaQueryWrapper<>();
  1234. paymentqw.eq(KdYdTransfer::getSyncStatus, "0");
  1235. List<KdYdTransfer> kdYdTransfers = kdYdTransferMapper.selectList(paymentqw);
  1236. if (kdYdTransfers.isEmpty()) {
  1237. log.info("【调拨单同步任务】无需要同步的数据,结束");
  1238. return;
  1239. }
  1240. log.info("【调拨单同步任务】开始同步,共{}条数据", kdYdTransfers.size());
  1241. int successCount = 0;
  1242. int failCount = 0;
  1243. for (KdYdTransfer kdYdTransfer : kdYdTransfers) {
  1244. try {
  1245. Long transferId = kdYdTransfer.getId();
  1246. String djbh = kdYdTransfer.getDjbh();
  1247. log.debug("开始同步调拨单: ID={}, 单据编号={}", transferId, djbh);
  1248. LambdaQueryWrapper<KdYdTransferDetail> transferdetailqw = new LambdaQueryWrapper<>();
  1249. transferdetailqw.eq(KdYdTransferDetail::getTransferId, transferId)
  1250. .orderByAsc(KdYdTransferDetail::getDetailId);
  1251. List<KdYdTransferDetail> kdYdTransferDetails = kdYdTransferDetailMapper.selectList(transferdetailqw);
  1252. ArrayList<Object> tableList = new ArrayList<>();
  1253. List<Map<String, Object>> tableListxlh = new ArrayList<>();
  1254. for (KdYdTransferDetail kdYdTransferDetail : kdYdTransferDetails) {
  1255. HashMap<String, String> tablemap = new HashMap<>();
  1256. tablemap.put("textField_mhubzsav", kdYdTransferDetail.getWlbm());
  1257. tablemap.put("textField_mhubzsaw", kdYdTransferDetail.getWlmc());
  1258. tablemap.put("textField_mhubzsax", kdYdTransferDetail.getGgxh());
  1259. tablemap.put("textField_mhubzsay", kdYdTransferDetail.getDw());
  1260. tablemap.put("textareaField_mjshnw4c", kdYdTransferDetail.getKddh());
  1261. tablemap.put("numberField_mhubzsaz", String.valueOf(kdYdTransferDetail.getDbsl()));
  1262. tablemap.put("textField_mhubzsb0", kdYdTransferDetail.getPh());
  1263. tablemap.put("textField_mhubzsb1", kdYdTransferDetail.getDcck());
  1264. tablemap.put("textField_mhubzsb5", kdYdTransferDetail.getDcckzt());
  1265. tablemap.put("textField_mhubzsb2", kdYdTransferDetail.getDccw());
  1266. tablemap.put("textField_mhubzsb3", kdYdTransferDetail.getDrck());
  1267. tablemap.put("textField_mhubzsb6", kdYdTransferDetail.getDrckzt());
  1268. tablemap.put("textField_mhubzsb4", kdYdTransferDetail.getDrcw());
  1269. String xlhjh = kdYdTransferDetail.getXlh();
  1270. if (xlhjh != null && !xlhjh.trim().isEmpty()) {
  1271. List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
  1272. .map(String::trim)
  1273. .filter(item -> !item.isEmpty())
  1274. .map(item -> {
  1275. Map<String, Object> map = new HashMap<>();
  1276. map.put("textField_mf6a0h6w", item); // 序列号
  1277. map.put("textField_mjqst61l", kdYdTransferDetail.getWlbm()); // 对应的物料编码
  1278. map.put("textField_mjqst61m", kdYdTransferDetail.getGgxh());
  1279. return map;
  1280. })
  1281. .collect(Collectors.toList());
  1282. tableListxlh.addAll(currentXlhList); // 追加到总列表
  1283. }
  1284. // 主表仍保留原始 xlh(可选)
  1285. tablemap.put("textField_mf6a0h6w", kdYdTransferDetail.getXlh());
  1286. // tablemap.put("radioField_mf6a0h6h", kdYdTransferDetail.getSfzp());
  1287. tableList.add(tablemap);
  1288. kdYdTransferDetail.setSyncStatus("1");
  1289. kdYdTransferDetailMapper.updateById(kdYdTransferDetail);
  1290. }
  1291. String xsddbh = kdYdTransfer.getDdbh();
  1292. String fhtzdbh = kdYdTransfer.getFhtzdbh();
  1293. String ddformInstanceId = null;
  1294. String fhdformInstanceId = null;
  1295. String ddbh = null;
  1296. String fhdbh = null;
  1297. String jydate = null;
  1298. String ghrq = null;
  1299. String jyyy = null;
  1300. String jtyy = null;
  1301. String xsy = null;
  1302. String khxypj = null;
  1303. String fj = null;
  1304. try {
  1305. log.debug("开始查询订单数据: xsddbh={}", xsddbh);
  1306. // 宜搭返回的数据结构:List<Map<String, Object>>
  1307. List<Map<String, Object>> ddlist = (List<Map<String, Object>>) ydClient.queryData(
  1308. YDParam.builder()
  1309. .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
  1310. .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
  1311. .build(),
  1312. YDConf.FORM_QUERY.retrieve_list_all
  1313. ).getData();
  1314. List<Map<String, Object>> fhdlist = (List<Map<String, Object>>) ydClient.queryData(
  1315. YDParam.builder()
  1316. .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
  1317. .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", fhtzdbh)))
  1318. .build(),
  1319. YDConf.FORM_QUERY.retrieve_list_all
  1320. ).getData();
  1321. if (fhdlist != null && !fhdlist.isEmpty()) {
  1322. for (Map<String, Object> fhditem : fhdlist) {
  1323. Map<String, Object> fhdformData = (Map<String, Object>) fhditem.get("formData");
  1324. if (fhdformData == null) continue;
  1325. Object serialObj1 = fhdformData.get("serialNumberField_mheazm7w");
  1326. String serialStr1 = serialObj1 != null ? serialObj1.toString() : null;
  1327. if (fhtzdbh.equals(serialStr1)) {
  1328. fhdformInstanceId = safeToString(fhditem.get("formInstanceId"));
  1329. fhdbh = serialStr1;
  1330. break;
  1331. }
  1332. }
  1333. }
  1334. if (ddlist != null && !ddlist.isEmpty()) {
  1335. for (Map<String, Object> khitem : ddlist) {
  1336. Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
  1337. if (khformData == null) continue;
  1338. // 安全获取字段值(避免 ClassCastException)
  1339. Object serialObj = khformData.get("textField_mjs6fuwo");
  1340. String serialStr = serialObj instanceof String ? (String) serialObj : String.valueOf(serialObj);
  1341. if (xsddbh.equals(serialStr)) {
  1342. ddformInstanceId = safeToString(khitem.get("formInstanceId"));
  1343. ddbh = serialStr;
  1344. jydate = safeToString(khformData.get("dateField_mdya1lom"));
  1345. ghrq = safeToString(khformData.get("dateField_meqpbxsj"));
  1346. jyyy = safeToString(khformData.get("multiSelectField_meqpbxsc"));
  1347. jtyy = safeToString(khformData.get("textareaField_meqpbxsd"));
  1348. khxypj = safeToString(khformData.get("selectField_mewirdx4"));
  1349. xsy = safeToString(khformData.get("employeeField_mejowmng_id"));
  1350. fj = safeToString(khformData.get("attachmentField_mfoqcctz"));
  1351. break;
  1352. }
  1353. }
  1354. if (ddformInstanceId == null) {
  1355. log.warn("未找到与 xsddbh={} 完全匹配的订单数据", xsddbh);
  1356. }
  1357. } else {
  1358. log.warn("未查询到订单数据: xsddbh={}", xsddbh);
  1359. }
  1360. } catch (Exception e) {
  1361. log.error("查询订单数据异常: xsddbh={}, 错误信息={}", xsddbh, e.getMessage(), e);
  1362. }
  1363. // 构建更新数据
  1364. HashMap<String, Object> updateMap = new HashMap<>();
  1365. updateMap.put("tableField_mhubzsau", tableList);
  1366. updateMap.put("tableField_mips137b", tableListxlh);
  1367. if (ddbh != null && ddformInstanceId != null) {
  1368. updateMap.put("associationFormField_mhubzsaf",
  1369. Collections.singletonList(getddAss(ddbh, ddformInstanceId)));
  1370. }
  1371. if (fhdbh != null && fhdformInstanceId != null) {
  1372. updateMap.put("associationFormField_mjzervdt",
  1373. Collections.singletonList(getddAss(fhdbh, fhdformInstanceId)));
  1374. }
  1375. // 只有所有必要字段都非空时才填充关联字段
  1376. if (jydate != null && ghrq != null && jyyy != null && jtyy != null
  1377. && xsy != null && khxypj != null) {
  1378. updateMap.put("dateField_mdya1lom", jydate);
  1379. updateMap.put("dateField_meqpbxsj", ghrq);
  1380. updateMap.put("multiSelectField_meqpbxsc", jyyy);
  1381. updateMap.put("textareaField_meqpbxsd", jtyy); // 注意:原代码这里写成了 jyyy,已修正为 jtyy
  1382. updateMap.put("employeeField_mejowmng", xsy);
  1383. updateMap.put("selectField_mewirdx4", khxypj);
  1384. updateMap.put("attachmentField_mfoqcctz", fj);
  1385. }
  1386. updateMap.put("textField_mjzervdu", kdYdTransfer.getFhtzdbh());
  1387. // 基础字段同步(这些字段即使为空也会覆盖,符合原逻辑)
  1388. updateMap.put("textField_miquh5zj", ddformInstanceId);
  1389. updateMap.put("selectField_mhubzsa5", kdYdTransfer.getDjlx());
  1390. updateMap.put("textField_mhubzsas", kdYdTransfer.getKh());
  1391. updateMap.put("textField_miptelgh", kdYdTransfer.getDdbh());
  1392. updateMap.put("textField_miptelgc", kdYdTransfer.getDjbh());
  1393. updateMap.put("textField_miptelgd", kdYdTransfer.getCgy());
  1394. updateMap.put("selectField_mhubzsa7", kdYdTransfer.getDchzlx());
  1395. updateMap.put("textField_mhubzsa6", kdYdTransfer.getYwlx());
  1396. // 日期字段:转为毫秒字符串(保持原逻辑)
  1397. String rqMillis = "";
  1398. if (kdYdTransfer.getRq() != null) {
  1399. rqMillis = String.valueOf(kdYdTransfer.getRq()
  1400. .atZone(ZoneId.systemDefault())
  1401. .toInstant()
  1402. .toEpochMilli());
  1403. }
  1404. updateMap.put("dateField_mhubzsab", rqMillis);
  1405. updateMap.put("selectField_mhubzsa9", kdYdTransfer.getDrhzlx());
  1406. updateMap.put("selectField_mhubzsaa", kdYdTransfer.getDbfx());
  1407. updateMap.put("selectField_mhubzsac", kdYdTransfer.getDbdlx());
  1408. updateMap.put("textField_miptelge", kdYdTransfer.getDcbm());
  1409. updateMap.put("textField_miptelgf", kdYdTransfer.getDchz());
  1410. updateMap.put("textField_miptelgg", kdYdTransfer.getDrbm());
  1411. updateMap.put("selectField_mhubzsah", kdYdTransfer.getHdfs());
  1412. updateMap.put("selectField_mhubzsai", kdYdTransfer.getYsfs());
  1413. updateMap.put("selectField_mhubzsar", kdYdTransfer.getKdgs());
  1414. updateMap.put("selectField_mhubzsag", kdYdTransfer.getFkfs());
  1415. log.debug("开始同步到宜搭: 单据编号={}, 表单UUID=FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR", kdYdTransfer.getDjbh());
  1416. ydClient.operateData(YDParam.builder()
  1417. .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
  1418. .noExecuteExpression(false)
  1419. .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", kdYdTransfer.getDjbh())))
  1420. .formDataJson(JSONObject.toJSONString(updateMap))
  1421. .build(), YDConf.FORM_OPERATION.upsert);
  1422. // 更新同步状态
  1423. kdYdTransfer.setSyncStatus("1");
  1424. kdYdTransferMapper.updateById(kdYdTransfer);
  1425. successCount++;
  1426. log.info("调拨单同步成功: 单据编号={}", kdYdTransfer.getDjbh());
  1427. } catch (Exception e) {
  1428. failCount++;
  1429. log.error("同步单条调拨单数据异常: 单据编号={}, 错误信息={}",
  1430. kdYdTransfer.getDjbh(), e.getMessage(), e);
  1431. }
  1432. }
  1433. log.info("【调拨单同步任务】完成: 成功={}, 失败={}, 总计={}",
  1434. successCount, failCount, kdYdTRANSFERdels.size());
  1435. }
  1436. private static String safeToString(Object obj) {
  1437. return obj == null ? null : obj.toString();
  1438. }
  1439. private Object getddAss(String title, String id) {
  1440. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
  1441. }
  1442. private Object getfhdAss(String title, String id) {
  1443. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-A7F03ACEE01D4F609550C86BF7FE87D35M6I", "receipt", id, title, "");
  1444. }
  1445. private Object getysdAss(String title, String id) {
  1446. return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-AADBCDA8126F41A0ADDEE3353828583192M8", "receipt", id, title, "");
  1447. }
  1448. }