ProcessServiceImpl.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. package com.malk.diwei.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.malk.diwei.entity.*;
  6. import com.malk.diwei.entity.Process;
  7. import com.malk.diwei.mapper.*;
  8. import com.malk.diwei.service.ProcessService;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import com.malk.server.aliwork.YDConf;
  11. import com.malk.server.aliwork.YDParam;
  12. import com.malk.server.common.McR;
  13. import com.malk.service.aliwork.YDClient;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.math.BigDecimal;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. /**
  20. * <p>
  21. * 服务实现类
  22. * </p>
  23. *
  24. * @author WZY
  25. * @since 2025-03-27
  26. */
  27. @Service
  28. public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> implements ProcessService {
  29. @Autowired
  30. private ProcessMapper processMapper;
  31. @Autowired
  32. private DepartmentMapper departmentMapper;
  33. @Autowired
  34. private EmployeeMapper employeeMapper;
  35. @Autowired
  36. private ProcessMaterialMapper processMaterialMapper;
  37. @Autowired
  38. private YDClient ydClient;
  39. @Autowired
  40. private BomMapper bomMapper;
  41. @Autowired
  42. private GoodsMapper goodsMapper;
  43. @Autowired
  44. private ColorMapper colorMapper;
  45. @Autowired
  46. private UnitMapper unitMapper;
  47. @Autowired
  48. private GoodsPartsMapper goodsPartsMapper;
  49. @Autowired
  50. private WorkProcStepMapper workProcStepMapper;
  51. @Autowired
  52. private ClientMapper clientMapper;
  53. @Autowired
  54. private ProcessItemMapper processItemMapper;
  55. @Autowired
  56. private ProcessONDetailMapper processONDetailMapper;
  57. private static final Map PROC_STEP_TYPE = new HashMap<>();
  58. static {
  59. PROC_STEP_TYPE.put(1, "厂内工序");
  60. PROC_STEP_TYPE.put(3, "裁剪工序");
  61. PROC_STEP_TYPE.put(4, "工艺委外工序");
  62. }
  63. @Override
  64. public McR syncProcess() {
  65. LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
  66. processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
  67. .or()
  68. .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
  69. .eq(Process::getEntityObjKey,"ProductionSW")
  70. .eq(Process::getProcessStatus,2);
  71. /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
  72. .or()
  73. .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
  74. .eq(Process::getEntityObjKey,"ProductionSW")
  75. .eq(Process::getProcessStatus,2);*/
  76. List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
  77. for (Process process : processeList) {
  78. Map formData = new HashMap();
  79. formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
  80. formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
  81. LambdaQueryWrapper<Bom> bomLambdaQueryWrapper = new LambdaQueryWrapper<>();
  82. bomLambdaQueryWrapper.eq(Bom::getBomID, process.getProcessBomID());
  83. Bom bom = bomMapper.selectOne(bomLambdaQueryWrapper);
  84. formData.put("textField_m8pi90ej",bom.getBomCode());//BOM
  85. formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
  86. if (process.getProcessDeptID() != null && process.getProcessDeptID() != 0){
  87. LambdaQueryWrapper<Department> departmentLambdaQueryWrapper = new LambdaQueryWrapper<>();
  88. departmentLambdaQueryWrapper.eq(Department::getDeptID, process.getProcessDeptID());
  89. Department department = departmentMapper.selectOne(departmentLambdaQueryWrapper);
  90. formData.put("textField_m8pi90eq",department.getDeptName());//部门
  91. }
  92. formData.put("textField_m8pi90es","总部");//组织机构
  93. formData.put("textField_m8pi90ex",process.getProcessSOClientName());//订单客户
  94. formData.put("textField_m8pi90ey",process.getProcessSOClientOrderCode());//客户订单号
  95. formData.put("textField_m8pi90ez",process.getProcessSOGoodsCode());//订单款号
  96. if (process.getProcessQCMerchandiserID() != null && process.getProcessQCMerchandiserID() != 0){
  97. LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  98. employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessQCMerchandiserID());
  99. Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
  100. formData.put("textField_m8pi90f4",employee.getEmpName());//QC跟单
  101. }
  102. formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
  103. //加工产品
  104. List<Map> list = processMapper.selectProductById(process.getProcessID());
  105. List<Map> collect = list.stream().map(map -> {
  106. Map map1 = new HashMap();
  107. map1.put("textField_m8pi90fa",map.get("GoodsCode"));//款号
  108. map1.put("textField_m8pi90fe",map.get("GoodsName"));//款名
  109. map1.put("textField_m8pi90fi",map.get("UnitName"));//单位
  110. map1.put("numberField_m8pi90fk",map.get("qty"));//加工数
  111. map1.put("textField_m8pi90fm",map.get("ProcessItemReferBillCode"));//引用单据编号
  112. return map1;
  113. }).collect(Collectors.toList());
  114. formData.put("tableField_m8pi90f9",collect);
  115. //加工件数
  116. int num1 = 0;
  117. for (Map map : list) {
  118. num1 += ((BigDecimal) map.get("qty")).intValue();
  119. }
  120. formData.put("numberField_m8pi90hw",num1);
  121. //横机/附件外发明细
  122. List<Map> processDetailList = processMapper.selectProcessONDetailByCode(process.getProcessCode());
  123. List<Map> processDetails = new ArrayList<>();
  124. for (Map processDetail : processDetailList) {
  125. Map map = new HashMap();
  126. map.put("textField_m8pi90fo",processDetail.get("ProcessCode"));//外发单号
  127. map.put("dateField_m8pi90fc",((Date)processDetail.get("ProcessDate")).getTime());//外发日期
  128. //状态
  129. int status = ((Short) processDetail.get("ProcessStatus")).intValue();
  130. switch (status){
  131. case 1:map.put("textField_m8pi90fp","草稿");break;
  132. case 2:map.put("textField_m8pi90fp","已提交");break;
  133. case 3:map.put("textField_m8pi90fp","已审核");break;
  134. default:break;
  135. }
  136. map.put("textField_m8pi90fq",processDetail.get("ClientName"));//加工厂
  137. map.put("textField_m8pi90fr",processDetail.get("GoodsPartsName"));//部件
  138. map.put("textField_m8pi90ft",processDetail.get("WPSProcStepName"));//工序
  139. map.put("textField_m8pi90fv",processDetail.get("GoodsNeedleType"));//针型
  140. map.put("textField_m8pi90fx",processDetail.get("GoodsMachineType"));//机型
  141. map.put("numberField_m8pi90fz",processDetail.get("WPSHadRecordQty"));//外发数
  142. processDetails.add(map);
  143. }
  144. formData.put("tableField_m8pi90fn",processDetails);
  145. //原料需求
  146. double num2 = 0.0;
  147. List<Map> processMaterialList = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),3);
  148. List<Map> processMaterials = new ArrayList<>();
  149. for (Map processMaterial : processMaterialList) {
  150. Map map = new HashMap();
  151. map.put("textField_m8pi90g3",processMaterial.get("GoodsPartsName"));//部件
  152. map.put("textField_m8pi90g5",processMaterial.get("GoodsCode"));//原料编码
  153. map.put("textField_m8pi90g7",processMaterial.get("GoodsName"));//原料名称
  154. map.put("textField_m8pi90g9",processMaterial.get("ColorName"));//颜色
  155. map.put("textField_m8pi90gb",processMaterial.get("ProcessMaterialColorVCode"));//色号
  156. map.put("textField_m8pi90gd",processMaterial.get("ProcessMaterialDes"));//批号
  157. map.put("textField_m8pi90gf",processMaterial.get("UnitName"));//单位
  158. map.put("numberField_m8pi90gh",processMaterial.get("ProcessMaterialQty"));//需求数
  159. num2 += Double.parseDouble(processMaterial.get("ProcessMaterialQty").toString());
  160. processMaterials.add(map);
  161. }
  162. formData.put("tableField_m8pi90g2",processMaterials);
  163. formData.put("numberField_m8pi90hy",num2);
  164. //辅料需求
  165. double num3 = 0.0;
  166. List<Map> processMaterialList2 = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),4);
  167. List<Map> processMaterials2 = new ArrayList<>();
  168. for (Map processMaterial : processMaterialList2) {
  169. Map map = new HashMap();
  170. map.put("textField_m8pi90h5",processMaterial.get("GoodsCode"));//辅料编码
  171. map.put("textField_m8pi90h6",processMaterial.get("GoodsName"));//辅料名称
  172. map.put("textField_m8pi90h7",processMaterial.get("ColorName"));//颜色
  173. map.put("textField_m8pi90h9",processMaterial.get("GoodsSpecs"));//规格
  174. map.put("textField_m8pi90ha",processMaterial.get("UnitName"));//单位
  175. map.put("numberField_m8pi90hb",processMaterial.get("ProcessMaterialQty"));//需求数
  176. map.put("numberField_m8pi90he",processMaterial.get("ProcessMaterialPickQty"));//已领数
  177. num3 += Double.parseDouble(processMaterial.get("ProcessMaterialQty").toString());
  178. processMaterials2.add(map);
  179. }
  180. formData.put("tableField_m8pi90hc",processMaterials2);
  181. formData.put("numberField_m8pi90hz",num3);
  182. //加工工艺
  183. LambdaQueryWrapper<WorkProcStep> workProcStepLambdaQueryWrapper = new LambdaQueryWrapper<>();
  184. workProcStepLambdaQueryWrapper.eq(WorkProcStep::getProcessID,process.getProcessID());
  185. List<WorkProcStep> workProcStepList = workProcStepMapper.selectList(workProcStepLambdaQueryWrapper);
  186. List<Map> workProcSteps = new ArrayList<>();
  187. for (WorkProcStep workProcStep : workProcStepList) {
  188. Map map = new HashMap();
  189. map.put("textField_m8pi90hh",workProcStep.getWPSProcStepName());//工序
  190. int wpsProcStepType = workProcStep.getWPSProcStepType();
  191. map.put("textField_m8pi90hj",PROC_STEP_TYPE.get(wpsProcStepType));//类型
  192. map.put("radioField_m8zkxbjm",workProcStep.getWPSProcStepIsFKM() == 1 ? "是" : "否");//横机
  193. int WPSConfirmQty = 0;
  194. if (wpsProcStepType == 4){
  195. WPSConfirmQty = workProcStep.getWPSConfirmQty();
  196. }else {
  197. WPSConfirmQty = ((BigDecimal)list.get(0).get("qty")).intValue();
  198. }
  199. int WPSHadRecordQty = workProcStep.getWPSHadRecordQty();
  200. int WPSUnRecordQty = WPSConfirmQty - WPSHadRecordQty;
  201. map.put("numberField_m8pi90hp",WPSConfirmQty);//应排
  202. map.put("numberField_m8pi90hq",WPSHadRecordQty);//已排
  203. map.put("numberField_m8pi90hr",WPSUnRecordQty);//未排
  204. Long wpsFactoryID = workProcStep.getWPSFactoryID();
  205. if (wpsFactoryID != null && wpsFactoryID != 0){
  206. LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
  207. clientLambdaQueryWrapper.eq(Client::getClientID,workProcStep.getWPSFactoryID());
  208. Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
  209. if (client != null){
  210. map.put("textField_m8pi90hn",client.getClientName());//委外加工厂
  211. }
  212. }
  213. workProcSteps.add(map);
  214. }
  215. formData.put("tableField_m8pi90hg",workProcSteps);
  216. ydClient.operateData(YDParam.builder()
  217. .formUuid("FORM-233DD96AE9A342C69DFF33016370504ETO2Z")
  218. .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
  219. .formDataJson(JSONObject.toJSONString(formData))
  220. .build(), YDConf.FORM_OPERATION.upsert);
  221. }
  222. return McR.success();
  223. }
  224. @Override
  225. public McR syncProcessOut() {
  226. LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
  227. processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
  228. .or()
  229. .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
  230. .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
  231. .eq(Process::getProcessOutSideType,3)
  232. .eq(Process::getProcessStatus,2);
  233. /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
  234. .or()
  235. .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
  236. .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
  237. .eq(Process::getProcessOutSideType,3)
  238. .eq(Process::getProcessStatus,2);*/
  239. List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
  240. for (Process process : processeList) {
  241. Map formData = new HashMap();
  242. formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
  243. formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
  244. formData.put("textField_m8pi90es","总部");//组织机构
  245. formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
  246. LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
  247. clientLambdaQueryWrapper.eq(Client::getClientID,process.getFactoryID());
  248. Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
  249. if (Objects.nonNull(client)){
  250. formData.put("textField_m8pi90ex",client.getClientName());//加工厂
  251. }
  252. if (process.getProcessSalesmanID() != null && process.getProcessSalesmanID() != 0){
  253. LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  254. employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessSalesmanID());
  255. Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
  256. formData.put("textField_m8pjta80",employee.getEmpName());//业务跟单
  257. }
  258. if (process.getProcessQCMerchandiserID() != null && process.getProcessQCMerchandiserID() != 0){
  259. LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  260. employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessQCMerchandiserID());
  261. Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
  262. formData.put("textField_m8pi90f4",employee.getEmpName());//QC跟单
  263. }
  264. formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
  265. //外发明细
  266. List<Map> outSideDetails = new ArrayList<>();
  267. List<Map> outSideDetailList = processMapper.selectOutSideDetails(process.getProcessID());
  268. int num = 0;
  269. for (Map outSideDetail : outSideDetailList) {
  270. Map map = new HashMap();
  271. map.put("textField_m8pjta82",outSideDetail.get("GoodsPartsName"));//部件
  272. map.put("textField_m8pi90fa",outSideDetail.get("GoodsCode"));//款号
  273. map.put("textField_m8pi90fe",outSideDetail.get("GoodsName"));//款名
  274. map.put("textField_m8pjta83",outSideDetail.get("GoodsNeedleType"));//针型
  275. map.put("textField_m8pjta84",outSideDetail.get("GoodsMachineType"));//机型
  276. map.put("textField_m8pjta85",outSideDetail.get("ColorName"));//颜色
  277. map.put("textField_m8pi90fi",outSideDetail.get("SizeName"));//尺码
  278. map.put("textField_m8pjta86",outSideDetail.get("WPSProcStepName"));//工序
  279. map.put("numberField_m8pi90fk",outSideDetail.get("ProcessONDetailQty"));//外发数
  280. map.put("numberField_m8pjta87",outSideDetail.get("WPSProcStepPrice"));//工序单价
  281. map.put("textareaField_m8pjta88",outSideDetail.get("ProcessItemDesc"));//备注
  282. map.put("textField_m8pi90fm",outSideDetail.get("ProcessItemReferBillCode"));//加工单号
  283. num += ((BigDecimal) outSideDetail.get("ProcessONDetailQty")).intValue();
  284. outSideDetails.add(map);
  285. }
  286. formData.put("tableField_m8pi90f9",outSideDetails);
  287. formData.put("numberField_m8pi90hw",num);//外发数合计
  288. List<Map> processMaterialList = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),3);
  289. List<Map> processMaterials = new ArrayList<>();
  290. for (Map processMaterial : processMaterialList) {
  291. Map map = new HashMap();
  292. map.put("textField_m8pi90g3",processMaterial.get("GoodsPartsName"));//部件
  293. map.put("textField_m8pi90g5",processMaterial.get("GoodsCode"));//原料编码
  294. map.put("textField_m8pi90g7",processMaterial.get("GoodsName"));//原料名称
  295. map.put("textField_m8pi90g9",processMaterial.get("ColorName"));//颜色
  296. map.put("textField_m8pi90gb",processMaterial.get("ProcessMaterialColorVCode"));//色号
  297. map.put("textField_m8pi90gd",processMaterial.get("ProcessMaterialDes"));//批号
  298. map.put("textField_m8pi90gf",processMaterial.get("UnitName"));//单位
  299. map.put("numberField_m8pi90gh",processMaterial.get("ProcessMaterialQty"));//需求数
  300. map.put("numberField_m8pjta81",processMaterial.get("ProcessMaterialPickQty"));//已领数
  301. processMaterials.add(map);
  302. }
  303. formData.put("tableField_m8pi90g2",processMaterials);
  304. //辅料需求
  305. List<Map> processMaterialList2 = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),4);
  306. List<Map> processMaterials2 = new ArrayList<>();
  307. for (Map processMaterial : processMaterialList2) {
  308. Map map = new HashMap();
  309. map.put("textField_m8pi90h5",processMaterial.get("GoodsCode"));//辅料编码
  310. map.put("textField_m8pi90h6",processMaterial.get("GoodsName"));//辅料名称
  311. map.put("textField_m8pi90h7",processMaterial.get("ColorName"));//颜色
  312. map.put("textField_m8pi90h9",processMaterial.get("GoodsSpecs"));//规格
  313. map.put("textField_m8pi90ha",processMaterial.get("UnitName"));//单位
  314. map.put("numberField_m8pi90hb",processMaterial.get("ProcessMaterialQty"));//需求数
  315. processMaterials2.add(map);
  316. }
  317. formData.put("tableField_m8pi90hc",processMaterials2);
  318. ydClient.operateData(YDParam.builder()
  319. .formUuid("FORM-BEEFBB3E63CB427DA0FFD4391780ED2AAIQ4")
  320. .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
  321. .formDataJson(JSONObject.toJSONString(formData))
  322. .build(), YDConf.FORM_OPERATION.upsert);
  323. }
  324. return McR.success();
  325. }
  326. @Override
  327. public McR syncProcessOut2() {
  328. LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
  329. processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
  330. .or()
  331. .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
  332. .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
  333. .eq(Process::getProcessOutSideType,0)
  334. .eq(Process::getProcessStatus,2);
  335. /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
  336. .or()
  337. .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
  338. .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
  339. .eq(Process::getProcessOutSideType,0)
  340. .eq(Process::getProcessStatus,2);*/
  341. List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
  342. for (Process process : processeList) {
  343. Map formData = new HashMap();
  344. formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
  345. formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
  346. formData.put("textField_m8pi90es","总部");//组织机构
  347. formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
  348. LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
  349. clientLambdaQueryWrapper.eq(Client::getClientID,process.getFactoryID());
  350. Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
  351. if (Objects.nonNull(client)){
  352. formData.put("textField_m8pi90ex",client.getClientName());//加工厂
  353. }
  354. formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
  355. //外发明细
  356. double num = 0;
  357. double price = 0;
  358. List<Map> outSideDetails = new ArrayList<>();
  359. List<Map> outSideDetailList = processMapper.selectOutSideDetails(process.getProcessID());
  360. for (Map outSideDetail : outSideDetailList) {
  361. Map map = new HashMap();
  362. map.put("textField_m8pi90fa",outSideDetail.get("GoodsCode"));//款号
  363. map.put("textField_m8pjta85",outSideDetail.get("ColorName"));//颜色
  364. map.put("textField_m8pi90fi",outSideDetail.get("SizeName"));//尺码
  365. if (Objects.isNull(outSideDetail.get("ColorName")) && Objects.isNull(outSideDetail.get("SizeName"))){
  366. map.put("textField_m8pld6zz","不分色码");
  367. }else {
  368. map.put("textField_m8pld6zz","分色分码");
  369. }
  370. map.put("textField_m8pjta86",outSideDetail.get("WPSProcStepName"));//工序
  371. map.put("numberField_m8pi90fk",outSideDetail.get("ProcessItemQty"));//委外件数
  372. map.put("numberField_m8pjta87",outSideDetail.get("WPSProcStepPrice"));//工序单价
  373. map.put("textareaField_m8pjta88",outSideDetail.get("ProcessItemDesc"));//备注
  374. map.put("textField_m8pi90fm",outSideDetail.get("ProcessItemReferBillCode"));//加工单号
  375. num += ((BigDecimal) outSideDetail.get("ProcessONDetailQty")).doubleValue();
  376. price += ((BigDecimal) outSideDetail.get("WPSProcStepPrice")).doubleValue();
  377. outSideDetails.add(map);
  378. }
  379. formData.put("tableField_m8pi90f9",outSideDetails);
  380. formData.put("numberField_m8pi90hw",num);//数量合计
  381. formData.put("numberField_m8pld6zw",price);//金额合计
  382. ydClient.operateData(YDParam.builder()
  383. .formUuid("FORM-CBB8EADCBBD84982BAD3C6F38CB56171V6PS")
  384. .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
  385. .formDataJson(JSONObject.toJSONString(formData))
  386. .build(), YDConf.FORM_OPERATION.upsert);
  387. }
  388. return McR.success();
  389. }
  390. @Override
  391. public McR syncProcessOn() {
  392. LambdaQueryWrapper<ProcessONDetail> processONDetailLambdaQueryWrapper = new LambdaQueryWrapper<>();
  393. processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, DateUtil.beginOfDay(DateUtil.yesterday()))
  394. .or()
  395. .ge(ProcessONDetail::getProcessONDetailCreatDate,DateUtil.beginOfDay(DateUtil.yesterday())))
  396. .eq(ProcessONDetail::getProcessONDetailType,2)//回收
  397. .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
  398. .like(ProcessONDetail::getProcessONDetailCode,"PCWR");
  399. /*processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, "2025-04-10 00:00:00")
  400. .or()
  401. .ge(ProcessONDetail::getProcessONDetailCreatDate,"2025-04-10 00:00:00"))
  402. .eq(ProcessONDetail::getProcessONDetailType,2)//回收
  403. .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
  404. .like(ProcessONDetail::getProcessONDetailCode,"PCWR");*/
  405. List<ProcessONDetail> processONDetails = processONDetailMapper.selectList(processONDetailLambdaQueryWrapper);
  406. Set<String> processONDetailCodeSet = new HashSet<>();
  407. for (ProcessONDetail processONDetail : processONDetails) {
  408. String processONDetailCode = processONDetail.getProcessONDetailCode();
  409. processONDetailCodeSet.add(processONDetailCode);
  410. }
  411. for (String processONDetailCode : processONDetailCodeSet) {
  412. Map formData = new HashMap();
  413. //基础信息
  414. Map base = processMapper.selectOnBaseInfo(processONDetailCode);
  415. formData.put("dateField_m8pi90ec",((Date)base.get("ProcessONDetailDate")).getTime());//单据日期
  416. formData.put("textField_m99n1t8f",base.get("ProcessONDetailCode"));//回收单号
  417. formData.put("textField_m8pkxdg5",base.get("WPSProcStepName"));//工序
  418. formData.put("textField_m8pi90ex",base.get("ClientName"));//加工厂
  419. //关联明细
  420. List<Map> details = new ArrayList<>();
  421. List<Map> detailList = processMapper.selectOnDetails(processONDetailCode);
  422. int sumQty = 0;
  423. double sumWeight = 0;
  424. for (Map detail : detailList) {
  425. Map map= new HashMap();
  426. map.put("textField_m8pkxdf6",detail.get("GoodsCode"));//款号
  427. map.put("textField_m99n1t8d",detail.get("GoodsName"));//款名
  428. map.put("textField_m99n1t8e",detail.get("GoodsPartsName"));//部件
  429. map.put("textField_m8pkxdfa",detail.get("ColorName"));//颜色
  430. map.put("textField_m8pkxdfb",detail.get("SizeName"));//尺码
  431. map.put("numberField_m99n1t88",detail.get("ProcessONDetailQty"));//件数
  432. map.put("numberField_m99n1t89",detail.get("ProcessONDetailWeight"));//重量
  433. map.put("textField_m99n1t8a",detail.get("ProcessCode"));//外发单号
  434. map.put("textField_m99n1t8b",detail.get("ProcessItemReferBillCode"));//毛衫加工单
  435. sumQty += ((BigDecimal) detail.get("ProcessONDetailQty")).intValue();
  436. sumWeight += ((BigDecimal) detail.get("ProcessONDetailWeight")).doubleValue();
  437. details.add(map);
  438. }
  439. formData.put("tableField_m8pkxdfh",details);
  440. formData.put("numberField_m8pkxdgc",sumQty);//件数合计
  441. formData.put("numberField_m8pkxdgd",sumWeight);//重量合计
  442. //款号汇总
  443. //将details根据款号、款名、颜色、尺码进行分组,计算总件数、总数量
  444. List<Map<String, Object>> summaryList = details.stream()
  445. .collect(Collectors.groupingBy(
  446. detail -> {
  447. // 使用款号、款名、颜色、尺码作为分组键
  448. return detail.get("textField_m8pkxdf6") + "-" +
  449. detail.get("textField_m99n1t8d") + "-" +
  450. detail.get("textField_m8pkxdfa") + "-" +
  451. detail.get("textField_m8pkxdfb");
  452. }
  453. ))
  454. .entrySet().stream()
  455. .map(entry -> {
  456. Map<String, Object> groupSummary = new HashMap<>();
  457. List<Map> groupDetails = entry.getValue();
  458. int totalQty = groupDetails.stream()
  459. .mapToInt(detail -> ((BigDecimal) detail.get("numberField_m99n1t88")).intValue())
  460. .sum();
  461. double totalWeight = groupDetails.stream()
  462. .mapToDouble(detail -> ((BigDecimal) detail.get("numberField_m99n1t89")).doubleValue())
  463. .sum();
  464. // 设置汇总信息
  465. groupSummary.put("textField_m99n1t87", entry.getKey().split("-")[0]); //款号
  466. groupSummary.put("textField_m99n1t8c", entry.getKey().split("-")[1]); //款名
  467. groupSummary.put("textField_m8pkxdfl", entry.getKey().split("-")[2]); //颜色
  468. groupSummary.put("textField_m8pkxdfm", entry.getKey().split("-")[3]); //尺码
  469. groupSummary.put("numberField_m8pkxdfn", totalQty); //总件数
  470. groupSummary.put("numberField_m8pkxdfw", totalWeight); //总重量
  471. return groupSummary;
  472. })
  473. .collect(Collectors.toList());
  474. formData.put("tableField_m8pkxdfj",summaryList);
  475. //条码明细
  476. List<Map> cardBarDetails = new ArrayList<>();
  477. List<Map> cardBarDetailList = processMapper.selectOnCardBarDetails(processONDetailCode);
  478. for (Map cardBarDetail : cardBarDetailList) {
  479. Map map= new HashMap();
  480. map.put("textField_m99n1t8p",cardBarDetail.get("ProceCardBarCode"));//条码
  481. cardBarDetails.add(map);
  482. }
  483. formData.put("tableField_m99n1t8k",cardBarDetails);
  484. ydClient.operateData(YDParam.builder()
  485. .formUuid("FORM-C003D6F6769F400FA324851889EE458EOH9H")
  486. .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m99n1t8f",processONDetailCode,"eq"))))
  487. .formDataJson(JSONObject.toJSONString(formData))
  488. .build(), YDConf.FORM_OPERATION.upsert);
  489. }
  490. return McR.success();
  491. }
  492. @Override
  493. public McR syncProcessOn2() {
  494. LambdaQueryWrapper<ProcessONDetail> processONDetailLambdaQueryWrapper = new LambdaQueryWrapper<>();
  495. processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, DateUtil.beginOfDay(DateUtil.yesterday()))
  496. .or()
  497. .ge(ProcessONDetail::getProcessONDetailCreatDate,DateUtil.beginOfDay(DateUtil.yesterday())))//
  498. .eq(ProcessONDetail::getProcessONDetailType,2)//回收
  499. .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
  500. .like(ProcessONDetail::getProcessONDetailCode,"PCNR");
  501. /*processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, "2025-04-10 00:00:00")
  502. .or()
  503. .ge(ProcessONDetail::getProcessONDetailCreatDate,"2025-04-10 00:00:00"))//
  504. .eq(ProcessONDetail::getProcessONDetailType,2)//回收
  505. .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
  506. .like(ProcessONDetail::getProcessONDetailCode,"PCNR");*/
  507. List<ProcessONDetail> processONDetails = processONDetailMapper.selectList(processONDetailLambdaQueryWrapper);
  508. Set<String> processONDetailCodeSet = new HashSet<>();
  509. for (ProcessONDetail processONDetail : processONDetails) {
  510. String processONDetailCode = processONDetail.getProcessONDetailCode();
  511. processONDetailCodeSet.add(processONDetailCode);
  512. }
  513. for (String processONDetailCode : processONDetailCodeSet) {
  514. Map formData = new HashMap();
  515. //基础信息
  516. Map base = processMapper.selectOnBaseInfo(processONDetailCode);
  517. formData.put("dateField_m8pi90ec",((Date)base.get("ProcessONDetailDate")).getTime());//单据日期
  518. formData.put("textField_m99n1t8f",base.get("ProcessONDetailCode"));//回收单号
  519. formData.put("textField_m8pkxdg5",base.get("WPSProcStepName"));//工序
  520. formData.put("textField_m8pi90ex",base.get("ClientName"));//加工厂
  521. //关联明细
  522. List<Map> details = new ArrayList<>();
  523. List<Map> detailList = processMapper.selectOnDetails(processONDetailCode);
  524. int sumQty = 0;
  525. double sumWeight = 0;
  526. for (Map detail : detailList) {
  527. Map map= new HashMap();
  528. map.put("textField_m8pkxdf6",detail.get("GoodsCode"));//款号
  529. map.put("textField_m99n1t8d",detail.get("GoodsName"));//款名
  530. map.put("textField_m99n1t8e",detail.get("GoodsPartsName"));//部件
  531. map.put("textField_m8pkxdfa",detail.get("ColorName"));//颜色
  532. map.put("textField_m8pkxdfb",detail.get("SizeName"));//尺码
  533. map.put("numberField_m99n1t88",detail.get("ProcessONDetailQty"));//件数
  534. map.put("numberField_m99n1t89",detail.get("ProcessONDetailWeight"));//重量
  535. map.put("textField_m99n1t8a",detail.get("ProcessCode"));//外发单号
  536. map.put("textField_m99n1t8b",detail.get("ProcessItemReferBillCode"));//毛衫加工单
  537. sumQty += ((BigDecimal) detail.get("ProcessONDetailQty")).intValue();
  538. sumWeight += ((BigDecimal) detail.get("ProcessONDetailWeight")).doubleValue();
  539. details.add(map);
  540. }
  541. formData.put("tableField_m8pkxdfh",details);
  542. formData.put("numberField_m8pkxdgc",sumQty);//件数合计
  543. formData.put("numberField_m8pkxdgd",sumWeight);//重量合计
  544. //款号汇总
  545. //将details根据款号、款名、颜色、尺码进行分组,计算总件数、总数量
  546. List<Map<String, Object>> summaryList = details.stream()
  547. .collect(Collectors.groupingBy(
  548. detail -> {
  549. // 使用款号、款名、颜色、尺码作为分组键
  550. return detail.get("textField_m8pkxdf6") + "-" +
  551. detail.get("textField_m99n1t8d") + "-" +
  552. detail.get("textField_m8pkxdfa") + "-" +
  553. detail.get("textField_m8pkxdfb");
  554. }
  555. ))
  556. .entrySet().stream()
  557. .map(entry -> {
  558. Map<String, Object> groupSummary = new HashMap<>();
  559. List<Map> groupDetails = entry.getValue();
  560. int totalQty = groupDetails.stream()
  561. .mapToInt(detail -> ((BigDecimal) detail.get("numberField_m99n1t88")).intValue())
  562. .sum();
  563. double totalWeight = groupDetails.stream()
  564. .mapToDouble(detail -> ((BigDecimal) detail.get("numberField_m99n1t89")).doubleValue())
  565. .sum();
  566. // 设置汇总信息
  567. groupSummary.put("textField_m99n1t87", entry.getKey().split("-")[0]); //款号
  568. groupSummary.put("textField_m99n1t8c", entry.getKey().split("-")[1]); //款名
  569. groupSummary.put("textField_m8pkxdfl", entry.getKey().split("-")[2]); //颜色
  570. groupSummary.put("textField_m8pkxdfm", entry.getKey().split("-")[3]); //尺码
  571. groupSummary.put("numberField_m8pkxdfn", totalQty); //总件数
  572. groupSummary.put("numberField_m8pkxdfw", totalWeight); //总重量
  573. return groupSummary;
  574. })
  575. .collect(Collectors.toList());
  576. formData.put("tableField_m8pkxdfj",summaryList);
  577. //条码明细
  578. List<Map> cardBarDetails = new ArrayList<>();
  579. List<Map> cardBarDetailList = processMapper.selectOnCardBarDetails2(processONDetailCode);
  580. for (Map cardBarDetail : cardBarDetailList) {
  581. Map map= new HashMap();
  582. map.put("textField_m99n1t8p",cardBarDetail.get("ProceCardBarCode"));//条码
  583. cardBarDetails.add(map);
  584. }
  585. formData.put("tableField_m99n1t8k",cardBarDetails);
  586. ydClient.operateData(YDParam.builder()
  587. .formUuid("FORM-B6D30D0FD0064383BBD45DD64078B31E3KQK")
  588. .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m99n1t8f",processONDetailCode,"eq"))))
  589. .formDataJson(JSONObject.toJSONString(formData))
  590. .build(), YDConf.FORM_OPERATION.upsert);
  591. }
  592. return McR.success();
  593. }
  594. }