PurchaseServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. package com.malk.junengtai.service.Impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.core.JacksonException;
  4. import com.fasterxml.jackson.databind.JsonNode;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.malk.junengtai.service.PurchaseService;
  7. import com.malk.server.aliwork.YDConf;
  8. import com.malk.server.aliwork.YDParam;
  9. import com.malk.server.common.McR;
  10. import com.malk.server.dingtalk.DDConf;
  11. import com.malk.service.aliwork.YDClient;
  12. import com.malk.utils.UtilHttp;
  13. import com.malk.utils.UtilMap;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import java.math.BigDecimal;
  18. import java.time.Instant;
  19. import java.time.LocalDate;
  20. import java.time.ZoneId;
  21. import java.time.format.DateTimeFormatter;
  22. import java.util.*;
  23. import java.util.concurrent.ConcurrentHashMap;
  24. @Slf4j
  25. @Service
  26. public class PurchaseServiceImpl implements PurchaseService {
  27. @Autowired
  28. private YDClient ydClient;
  29. @Autowired
  30. private YDConf ydConf;
  31. @Autowired
  32. private DDConf ddConf;
  33. @Override
  34. public McR synchronizedArchiveTable(String name,String date) throws JacksonException {
  35. if(name.equals("组件信息")){
  36. log.info("开始同步组件信息");
  37. ComponentInformation(date);
  38. } else if (name.equals("供应商信息")) {
  39. log.info("开始同步供应商信息");
  40. supplierInformation(date);
  41. }
  42. return McR.success();
  43. }
  44. @Override
  45. public McR ComponentInformation(String date) throws JacksonException {
  46. HashMap head = new HashMap();
  47. head.put("Authorization","ccd9220f-db1d-4aa1-aa1d-8a2c9180f801");
  48. HashMap<String,Object> body = new HashMap();
  49. List<Map<String, String>> partsList = new ArrayList<>();
  50. Map<String, String> part1 = new HashMap<>();
  51. part1.put("PartNumber", "SSF0009");
  52. partsList.add(part1);
  53. body.put("Parts", partsList);
  54. String dd = UtilHttp.doPost("http://192.168.3.80:10001/api/public/GetAllParts", head, null, body);
  55. ObjectMapper objectMapper = new ObjectMapper();
  56. JsonNode rootNode = objectMapper.readTree(dd);
  57. JsonNode partsNode = rootNode.get("parts");
  58. List<Map<String, String>> List = new ArrayList<>();
  59. Map<String, Map<String, String>> partsMap = new ConcurrentHashMap<>();
  60. if (partsNode != null && partsNode.isArray()) {
  61. for (JsonNode partNode : partsNode) {
  62. Map<String, String> partData = new HashMap<>();
  63. partData.put("partNumber", partNode.get("partNumber").asText());
  64. partData.put("description", partNode.get("description").asText());
  65. partData.put("unit", partNode.get("unit").asText());
  66. partData.put("module",partNode.get("module").isNull() ? "" : partNode.get("module").asText());
  67. partData.put("spec",partNode.get("spec").isNull() ? "" : partNode.get("spec").asText());
  68. partData.put("mark",partNode.get("mark").isNull() ? "" : partNode.get("mark").asText());
  69. partData.put("createDate",partNode.get("createDate").isNull() ? "" : partNode.get("createDate").asText());
  70. List.add(partData);
  71. partsMap.put(partNode.get("partNumber").asText(), partData);
  72. }
  73. }
  74. System.out.println("\n=== 遍历所有零件 ===个数:"+List.size());
  75. int i = 0;
  76. for (Map<String, String> part : List) {
  77. i++;
  78. System.out.println(i +"/" + List.size() + " 零件编号: " + part.get("partNumber") +
  79. ", 描述: " + part.get("description") +
  80. ", 单位: " + part.get("unit") +", 型号: " + part.get("module") + ", 规格: " + part.get("spec") + ", 牌号:" + part.get("mark"));
  81. //传过来的date数据
  82. if(part.get("createDate").toString().equals(date)){
  83. //TODO:向宜搭插入数据
  84. String sc = "textField_logkj6a6, textField_logkj6ai, textField_logkj6aj, textField_mh4k26k6, textField_mh4k26k5, textField_mh4k26k7";//组件号 组件名称 单位 型号 规格 牌号
  85. String partNumber = part.get("partNumber").toString()!= null?part.get("partNumber").toString():"数据库此字段为空";
  86. String description = part.get("description").toString()!=null?part.get("description").toString():"数据库此字段为空";
  87. String unit = part.get("unit").toString()!=null?part.get("unit").toString():"数据库此字段为空";
  88. String module = part.get("module").toString()!=null?part.get("module").toString():"数据库此字段为空";
  89. String spec = part.get("spec").toString()!=null?part.get("spec").toString():"数据库此字段为空";
  90. String mark = part.get("mark").toString()!=null?part.get("mark").toString():"数据库此字段为空";
  91. List<Map> conditions = Arrays.asList( YDConf.searchCondition_TextFiled("textField_logkj6a6", part.get("partNumber"), "eq"));
  92. List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
  93. .formUuid("FORM-4D1B011EF0CC4CB8A5272BE0B5C4D073FKK8")
  94. .searchCondition(JSONObject.toJSONString(conditions))
  95. .build()
  96. ,YDConf.FORM_QUERY.retrieve_list).getData();
  97. Map formData = UtilMap.map(sc,partNumber,description,unit,module,spec,mark);
  98. if(!list.isEmpty()){
  99. ydClient.operateData(YDParam.builder()
  100. .formInstanceId(UtilMap.getString(list.get(0),"formInstanceId"))
  101. .updateFormDataJson(JSONObject.toJSONString(formData))
  102. .build(),YDConf.FORM_OPERATION.update);
  103. }else{
  104. ydClient.operateData(YDParam.builder()
  105. .formUuid("FORM-4D1B011EF0CC4CB8A5272BE0B5C4D073FKK8")
  106. .formDataJson(JSONObject.toJSONString(formData))
  107. .build(), YDConf.FORM_OPERATION.create).toString();
  108. }
  109. }
  110. }
  111. return McR.success();
  112. }
  113. @Override
  114. public McR supplierInformation(String dateString1) throws JacksonException {
  115. HashMap head = new HashMap();
  116. head.put("Authorization","ccd9220f-db1d-4aa1-aa1d-8a2c9180f801");
  117. HashMap<String,Object> body = new HashMap();
  118. ArrayList<Map<String,String>> partsList = new ArrayList<>();
  119. HashMap<String, Object> part1 = new HashMap<>();
  120. part1.put("supplierCode","");
  121. part1.put("name","");
  122. body.put("suppliers",partsList);
  123. String dd = UtilHttp.doPost("http://192.168.3.80:10001/api/public/GetAllSuppliers", head, null, body);
  124. ObjectMapper objectMapper = new ObjectMapper();
  125. JsonNode rootNode = objectMapper.readTree(dd);
  126. JsonNode partsNode = rootNode.get("suppliers");
  127. List<Map<String, String>> List = new ArrayList<>();
  128. Map<String, Map<String, String>> partsMap = new ConcurrentHashMap<>();
  129. if (partsNode != null && partsNode.isArray()) {
  130. for (JsonNode partNode : partsNode) {
  131. Map<String, String> partData = new HashMap<>();
  132. partData.put("supplierCode", partNode.get("supplierCode").asText());
  133. partData.put("name", partNode.get("name").asText());
  134. List.add(partData);
  135. partsMap.put(partNode.get("supplierCode").asText(), partData);
  136. }
  137. }
  138. System.out.println("\n=== 遍历所有供应商 ===个数:"+List.size());
  139. int i = 0;
  140. for (Map<String, String> part : List) {
  141. i++;
  142. System.out.println(i +"/" + List.size() + " 供应商编码: " + part.get("supplierCode") +
  143. ", 供应商名称: " + part.get("name"));
  144. //TODO:向宜搭插入数据
  145. //传过来的date数据
  146. if(part.get("createDate").toString().equals(dateString1)){
  147. String sc = "textField_loggfrvk, textField_loggfrvp";//供应商编码 供应商名称
  148. String supplierCode = part.get("supplierCode").toString()!= null?part.get("supplierCode").toString():"数据库此字段为空";
  149. String name = part.get("name").toString()!=null?part.get("name").toString():"数据库此字段为空";
  150. List<Map> conditions = Arrays.asList( YDConf.searchCondition_TextFiled("textField_loggfrvk", part.get("supplierCode"), "eq"));
  151. List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
  152. .formUuid("FORM-A9A0154249F940268F7313DDEC33925CFNPI")
  153. .searchCondition(JSONObject.toJSONString(conditions))
  154. .build()
  155. ,YDConf.FORM_QUERY.retrieve_list).getData();
  156. Map formData = UtilMap.map(sc,supplierCode,name);
  157. if(!list.isEmpty()){
  158. ydClient.operateData(YDParam.builder()
  159. .formInstanceId(UtilMap.getString(list.get(0),"formInstanceId"))
  160. .updateFormDataJson(JSONObject.toJSONString(formData))
  161. .build(),YDConf.FORM_OPERATION.update);
  162. }else{
  163. ydClient.operateData(YDParam.builder()
  164. .formUuid("FORM-A9A0154249F940268F7313DDEC33925CFNPI")
  165. .formDataJson(JSONObject.toJSONString(formData))
  166. .build(), YDConf.FORM_OPERATION.create).toString();
  167. }
  168. }
  169. }
  170. return McR.success();
  171. }
  172. @Override
  173. public McR queryInventory(Map<String,String> boddy) throws JacksonException {
  174. HashMap header = new HashMap();
  175. header.put("Authorization","ccd9220f-db1d-4aa1-aa1d-8a2c9180f801");
  176. HashMap body = new HashMap();
  177. body.put("PartNumber",boddy.get("PartNumber").toString());
  178. String dd = UtilHttp.doPost("http://192.168.3.80:10001/api/public/GetPartLocationInfos", header, null, body);
  179. HashMap map = new HashMap();
  180. ObjectMapper mapper = new ObjectMapper();
  181. JsonNode rootNode = mapper.readTree(dd);
  182. JsonNode warehouses = rootNode.path("waresehouses");
  183. String warehouseName,partLocationName = "";//仓库:warehouseName 库位:partLocationName
  184. double partLocationBalance;//库存余额:partLocationBalance
  185. for (JsonNode warehouse : warehouses) {
  186. warehouseName = warehouse.path("warehouseName").asText();
  187. JsonNode partLocations = warehouse.path("partLocations");
  188. for (JsonNode location : partLocations) {
  189. partLocationName = location.path("partLocationName").asText();
  190. partLocationBalance = location.path("partLocationBalance").asDouble();
  191. map.put("warehouseName",warehouseName);
  192. map.put("partLocationName",partLocationName);
  193. map.put("partLocationBalance",partLocationBalance);
  194. }
  195. }
  196. return McR.success(map);
  197. }
  198. @Override
  199. public McR purchaseOrder(String instanceId) throws JacksonException {
  200. Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(instanceId)
  201. .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
  202. .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  203. System.out.println(data);
  204. HashMap header = new HashMap();
  205. header.put("Authorization","ccd9220f-db1d-4aa1-aa1d-8a2c9180f801");
  206. //创建主map
  207. HashMap purchaseOrder = new HashMap();
  208. purchaseOrder.put("PurchaseOrderNumber",data.get("serialNumberField_mk21zzwk").toString());//采购订单编号
  209. purchaseOrder.put("SupplierCode",data.get("textField_mhd2mu8c").toString());//供应商编码
  210. purchaseOrder.put("OrderType",data.get("textField_mhd2mu8d").toString());//订单类型
  211. purchaseOrder.put("Warehouse",data.get("selectField_mhd3jyfb").toString());//仓库
  212. purchaseOrder.put("BusinessContactOrderNumber","");//采购合同编码
  213. purchaseOrder.put("OurReference","");//我方联系人
  214. purchaseOrder.put("GoodsLabel","");//行货物标签(不传)
  215. purchaseOrder.put("Currency","元");//货币
  216. // 创建Rows数组
  217. List<Map<String, Object>> rows = new ArrayList<>();
  218. List<Map> jsonString = (List<Map>)data.get("tableField_logke6sx");
  219. for (Map map : jsonString){
  220. HashMap rowItem = new HashMap();
  221. rowItem.put("PartNumber",map.get("textField_logkj6au").toString());//组件号
  222. String purchaseNum = new BigDecimal(map.get("numberField_logke6t1").toString())
  223. .setScale(2,BigDecimal.ROUND_HALF_UP).toString();
  224. rowItem.put("OrderedQuantity",purchaseNum);//采购数量
  225. String price = new BigDecimal(map.get("numberField_mh9x8r54").toString())
  226. .setScale(2,BigDecimal.ROUND_HALF_UP).toString();
  227. rowItem.put("Price",price);//单价
  228. rowItem.put("Unit",map.get("selectField_logkj6ak").toString().equals("") ? "" : map.get("selectField_logkj6ak").toString());//单位
  229. long time = (long)data.get("dateField_loglna5u");
  230. String utc = convertTimestampToDateString(time, "UTC", "yyyy-MM-dd");
  231. rowItem.put("RequirementDate",utc);//交货日期
  232. String vat = new BigDecimal(map.get("numberField_mhj15z8w").toString())
  233. .setScale(2,BigDecimal.ROUND_HALF_UP).toString();
  234. rowItem.put("Vat",vat);
  235. rows.add(rowItem);
  236. }
  237. purchaseOrder.put("Rows", rows);
  238. System.out.println(purchaseOrder);
  239. //调用接口
  240. String dd = UtilHttp.doPost("http://192.168.3.80:10001/api/public/CreatePurchaseOrder", header, null, purchaseOrder);
  241. System.out.println(dd);
  242. return McR.success(dd);
  243. }
  244. @Override
  245. public Map pickingList(Map<String,String> boddy) throws JacksonException {
  246. HashMap header = new HashMap();
  247. header.put("Authorization","ccd9220f-db1d-4aa1-aa1d-8a2c9180f801");
  248. HashMap body = new HashMap();
  249. body.put("PLNumber",boddy.get("PLNumber").toString());
  250. String dd = UtilHttp.doPost("http://192.168.3.80:10001/api/public/GetPickingListInfos", header, null, body);
  251. ObjectMapper mapper =new ObjectMapper();
  252. Map node =mapper.readValue(dd,Map.class);
  253. System.out.println("返回值:"+node);
  254. return node;
  255. }
  256. public String convertTimestampToDateString(long timestamp, String timeZone, String pattern) {
  257. // 将时间戳转换为Instant
  258. Instant instant = Instant.ofEpochMilli(timestamp);
  259. // 将Instant转换为指定时区的日期
  260. LocalDate date = instant.atZone(ZoneId.of(timeZone)).toLocalDate();
  261. date = date.plusDays(1);
  262. // 创建一个DateTimeFormatter来格式化日期
  263. DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
  264. // 格式化LocalDate为字符串
  265. String formattedDate = date.format(formatter);
  266. // 返回格式化后的日期字符串
  267. return formattedDate;
  268. }
  269. }