Bladeren bron

快客利更新供应商v2.0

wzy 10 maanden geleden
bovenliggende
commit
68933ca867

+ 16 - 0
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/controller/KKLController.java

@@ -29,6 +29,11 @@ public class KKLController {
     @Autowired
     private KKLService kklService;
 
+    @GetMapping("hello")
+    public String hello() {
+        return "hello";
+    }
+
     /**
      * [动态] 发起单据, 分供应商进行流程推送
      */
@@ -174,6 +179,11 @@ public class KKLController {
         return McR.success(result);
     }
 
+    /**
+     * 更新菜品管理原材料
+     * @param map
+     * @return
+     */
     @PostMapping("updateSuppliers")
     McR updateSuppliers(@RequestBody Map map) {
         String formInstId = String.valueOf(map.get("formInstId"));
@@ -183,6 +193,12 @@ public class KKLController {
         return kklService.updateSuppliers(formInstId);
     }
 
+    @PostMapping("updateFoodMaterials")
+    McR updateFoodMaterials(@RequestBody Map map) {
+        String formInstId = map.get("formInstId").toString();
+        return kklService.updateFoodMaterials(formInstId);
+    }
+
     
     @PostMapping("test")
     McR test(HttpServletRequest request) {

+ 4 - 2
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/KKLService.java

@@ -17,7 +17,7 @@ public interface KKLService {
     @Async
     void updateState(String id);
 
-    @Async
+//    @Async
     void serviceRate(Map data);
 
     void adjustCost(Map data);
@@ -28,8 +28,10 @@ public interface KKLService {
 
     List<Map<String, String>> getDiffMatchingSuppliers(String oldSupplierCode,String newSupplierCode);
 
-
+    @Async
     McR updateSuppliers(String formInstId);
 
     List<Map<String, String>> getDiffMatchingSuppliers2(String projectCode,String oldSupplierCode, String newSupplierCode);
+
+    McR updateFoodMaterials(String formInstId);
 }

+ 203 - 28
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/impl/KKLImplService.java

@@ -19,6 +19,7 @@ import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -30,8 +31,11 @@ public class KKLImplService implements KKLService {
 
     //供应商原材料档案表
     private static final String SUPPLIER_MATERIALS = "FORM-12EB6BCE3C264630824721E7BBABCC03L8U9";
+    private static final String SUPPLIER_CHANGE = "FORM-C939E9F486124464B17A6910D66A2425EWPX";
     //定价单明细中间表
     private static final String PRICE_DETAIL_MIDDLE = "FORM-E6766M811CKD2PIXEAKOM9S2DKBM2PBQU1MLL5";
+    //菜品管理
+    private static final String FOOD = "FORM-GP666M71DIGDE0ZADDLZ85VEFBD128OUH1MLLF";
 
     @Autowired
     private YDService ydService;
@@ -651,6 +655,50 @@ public class KKLImplService implements KKLService {
         return diffList;
     }
 
+    @Async
+    @Override
+    public McR updateFoodMaterials(String formInstId) {
+        //获取菜品管理信息
+        Map foodFormData = ydClient.queryData(YDParam.builder().formInstanceId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        List<Map> materialList = (List<Map>) foodFormData.get("tableField_llm1i9yy");
+        for (Map material : materialList) {
+            String jsonString = material.get("associationFormField_lln3lmmv_id").toString();
+            String materialJsonString = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));//新供应商原材料(关联表单)
+
+            Map materialMap =(((List<Map>) JSONArray.parse(materialJsonString))).get(0);
+            String instanceId = materialMap.get("instanceId").toString();
+
+            //获取定价单明细中间表信息
+            Map formData1 = ydClient.queryData(YDParam.builder().formInstanceId(instanceId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+            materialMap.put("title",formData1.get("textField_llkb7kd1").toString());
+            materialMap.put("subTitle",formData1.get("textField_lmkfg67e"));
+            List<Map> list = new ArrayList<>();
+            list.add(materialMap);
+            material.put("associationFormField_lln3lmmv",list);//原材料(关联表单)
+            material.put("textField_lln3lmn2",formData1.get("textField_llkb7kd3"));//单位
+            material.put("textField_llyy3khw",formData1.get("textField_lmkfg67e"));//品牌
+            material.put("textField_lz0ve9ct",formData1.get("textField_llkb7kd4"));//规格
+            material.put("numberField_lnrzzg03",formData1.get("numberField_lnrzzg03"));//整包装数量
+            material.put("textField_lnrzzg04",formData1.get("textField_lnrzzg04"));//整包装单位
+            material.put("textField_llndm599",formData1.get("textField_llkb7kd1"));//原材料名称
+            material.put("textField_lmk94yf5",formData1.get("textField_llkb7kd2"));//原材料编号
+            material.put("selectField_lmqclyx9",formData1.get("selectField_llkb7kd5"));//第一分类
+            material.put("numberField_lmqclyxa",formData1.get("numberField_llkknd6h"));//供货价
+            material.put("numberField_lmsvffts",formData1.get("numberField_llkknd6g"));//成本单价
+            material.put("numberField_lmsvfftt",formData1.get("numberField_llkb7kcy"));//服务费率
+        }
+
+//        foodFormData.put("tableField_llm1i9yy",materialList);
+
+        ydClient.operateData(YDParam.builder()
+                .formInstanceId(formInstId)
+                .updateFormDataJson(JSON.toJSONString(foodFormData))
+                .build(), YDConf.FORM_OPERATION.update);
+
+        return McR.success();
+    }
+
     private List<Map> getYdFormDataList(String formUuid, String searchCondition, YDConf.FORM_QUERY formQuery) {
         List<Map> list = new ArrayList<>();
         DDR_New ddrNew;
@@ -668,6 +716,25 @@ public class KKLImplService implements KKLService {
         return list;
     }
 
+    private List<Map> getYdInnerTableList(String formUuid,String formInstId,String tableFieldId) {
+        List<Map> list = new ArrayList<>();
+        DDR_New ddrNew;
+        int pageNumber = 1;
+        int pageSize = 50;
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder()
+                    .formUuid(formUuid)
+                    .formInstanceId(formInstId)
+                    .tableFieldId(tableFieldId)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize).build(), YDConf.FORM_QUERY.retrieve_details);
+
+            list.addAll((List<Map>) ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+        return list;
+    }
+
 
     @Override
     public McR updateSuppliers(String formInstId) {
@@ -679,28 +746,39 @@ public class KKLImplService implements KKLService {
         String newSupplierCode = String.valueOf(formData.get("textField_llzzbai8"));//新供应商编号
         String newSupplierName = String.valueOf(formData.get("textField_lmsli3bq"));//新供应商名称
         String jsonString = formData.get("associationFormField_llkb7kct_id").toString();
-        String res = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));
-        List<Map> supplier =(List<Map>) JSONArray.parse(res);//供应商(关联表单)
+        String supplierJsonString = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));//新供应商(关联表单)
+        List<Map> supplier =(List<Map>) JSONArray.parse(supplierJsonString);
+
+        String jsonString2 = formData.get("associationFormField_llkb7kcs_id").toString();
+        String orderJsonString = StringEscapeUtils.unescapeJava(jsonString2.substring(1, jsonString2.length() - 1));//定价单(关联表单)
+        List<Map> order =(List<Map>) JSONArray.parse(orderJsonString);
 
         String projectCode = String.valueOf(formData.get("textField_lllovku7"));//定价单编号
+
         //新供应商差异原材料编号
         List<String> newDiffSupplierMaterialCodes = new ArrayList<>();
-        //老供应商差异原材料编号
-        List<String> oldDiffSupplierMaterialCodes = new ArrayList<>();
-        //老供应商匹配原材料编号
-        List<String> oldMatchSupplierMaterialCodes = new ArrayList<>();
         //新供应商匹配原材料编号
         List<String> newMatchSupplierMaterialCodes = new ArrayList<>();
         //新供应商匹配原材料名称
         List<String> newMatchSupplierMaterialNames = new ArrayList<>();
 
+        //老供应商差异原材料编号
+        List<String> oldDiffSupplierMaterialCodes = new ArrayList<>();
+        //老供应商匹配原材料编号
+        List<String> oldMatchSupplierMaterialCodes = new ArrayList<>();
+
+
         //校验新供应商原材料是否存在
         List<Map> newSupplierMaterials = getYdFormDataList(SUPPLIER_MATERIALS, JSON.toJSONString(UtilMap.map("textField_llzzbyj1", newSupplierCode)), YDConf.FORM_QUERY.retrieve_list);
         List<String> newSupplierMaterialCodes = newSupplierMaterials.stream()
                 .map(item -> String.valueOf(((Map)item.get("formData")).get("textField_llkb7kd2")))
                 .collect(Collectors.toList());
 
-        List<Map> diffList = (List<Map>) formData.get("tableField_lywr2qcp");
+        //获取差异子表所有数据(可能超过50条)
+        List<Map> diffList = getYdInnerTableList(SUPPLIER_CHANGE, formInstId, "tableField_lywr2qcp");
+
+
+//        List<Map> diffList = (List<Map>) formData.get("tableField_lywr2qcp");
 
         for (Map diff : diffList) {
             String oldCode = String.valueOf(diff.get("textField_lyxr5c44"));//老供应商原材料编号
@@ -736,58 +814,155 @@ public class KKLImplService implements KKLService {
                         .build(), YDConf.FORM_QUERY.retrieve_list).getData();
                 //复制旧供应商原材料信息到新供应商
                 if (Objects.nonNull(data) && !data.isEmpty()){
-                    Map formData1 = (Map) data.get(0).get("formData");
-                    formData1.put("associationFormField_lphya7cq",res);//供应商(关联表单)
-                    formData1.put("textField_llzzbyj1", newSupplierCode);//供应商编号
-                    formData1.put("textField_lmsli3bq", newSupplierName);//供应商名称
-                    formData1.put("textField_llkb7kd2", newCode);//物品编号
+                    Map diffFormData = (Map) data.get(0).get("formData");
+                    diffFormData.put("associationFormField_lphya7cq",supplierJsonString);//供应商(关联表单)
+                    diffFormData.put("textField_llzzbyj1", newSupplierCode);//供应商编号
+                    diffFormData.put("textField_lmsli3bq", newSupplierName);//供应商名称
+                    diffFormData.put("textField_llkb7kd2", newCode);//物品编号
 
                     ydClient.operateData(YDParam.builder().formUuid(SUPPLIER_MATERIALS)
-                            .formDataJson(JSON.toJSONString(formData1)).build(), YDConf.FORM_OPERATION.create);
+                            .formDataJson(JSON.toJSONString(diffFormData)).build(), YDConf.FORM_OPERATION.create);
                 }
             }
         }
-
+        Map changeCodeMap = new HashMap<>();
         //获取旧供应商定价单明细中间表
         List<Map> oldSupplierMaterials = getYdFormDataList(PRICE_DETAIL_MIDDLE, JSON.toJSONString(UtilMap.map("textField_llzzbyj1, textField_llm1vtjm", oldSupplierCode,projectCode)), YDConf.FORM_QUERY.retrieve_list);
         for (Map oldSupplierMaterial : oldSupplierMaterials) {
-            Map formData2 = (Map) oldSupplierMaterial.get("formData");
-            String code = String.valueOf(formData2.get("textField_llkb7kd2"));
-            String name = String.valueOf(formData2.get("textField_llkb7kd1"));
+            Map oldSupplierMaterialFormData = (Map) oldSupplierMaterial.get("formData");
+            String code = String.valueOf(oldSupplierMaterialFormData.get("textField_llkb7kd2"));
+            String name = String.valueOf(oldSupplierMaterialFormData.get("textField_llkb7kd1"));
             String formInstanceId = String.valueOf(oldSupplierMaterial.get("formInstanceId"));
 
+            String newCode = "";
+            String newName = "";
+
             //更新定价单明细中间表
-            formData2.put("textField_lmsli3bq", newSupplierName);//供应商名称
-            formData2.put("textField_llzzbyj1", newSupplierCode);//供应商编号
+            oldSupplierMaterialFormData.put("textField_lmsli3bq", newSupplierName);//供应商名称
+            oldSupplierMaterialFormData.put("textField_llzzbyj1", newSupplierCode);//供应商编号
+
             //未匹配上的原材料
             int index1 = oldDiffSupplierMaterialCodes.indexOf(code);
             if (index1 != -1){
-                formData2.put("textField_llkb7kd2", newDiffSupplierMaterialCodes.get(index1));//物品编号
+                newCode = newDiffSupplierMaterialCodes.get(index1);
+                oldSupplierMaterialFormData.put("textField_llkb7kd2", newCode);//物品编号
                 ydClient.operateData(YDParam.builder().formUuid(PRICE_DETAIL_MIDDLE)
                         .formInstanceId(formInstanceId)
-                        .updateFormDataJson(JSON.toJSONString(formData2)).build(), YDConf.FORM_OPERATION.update);
+                        .updateFormDataJson(JSON.toJSONString(oldSupplierMaterialFormData)).build(), YDConf.FORM_OPERATION.update);
+                changeCodeMap.put(code,newCode);
                 continue;
             }
             //手动匹配上的原材料
             int index2 = oldMatchSupplierMaterialCodes.indexOf(code);
             if (index2 != -1){
-                formData2.put("textField_llkb7kd2", newMatchSupplierMaterialCodes.get(index2));//物品编号
-                formData2.put("textField_llkb7kd1",newMatchSupplierMaterialNames.get(index2));//物品名称
+                newCode = newMatchSupplierMaterialCodes.get(index2);
+                oldSupplierMaterialFormData.put("textField_llkb7kd2", newCode);//物品编号
+                oldSupplierMaterialFormData.put("textField_llkb7kd1",newMatchSupplierMaterialNames.get(index2));//物品名称
                 ydClient.operateData(YDParam.builder().formUuid(PRICE_DETAIL_MIDDLE)
                         .formInstanceId(formInstanceId)
-                        .updateFormDataJson(JSON.toJSONString(formData2)).build(), YDConf.FORM_OPERATION.update);
+                        .updateFormDataJson(JSON.toJSONString(oldSupplierMaterialFormData)).build(), YDConf.FORM_OPERATION.update);
+                changeCodeMap.put(code,newCode);
                 continue;
             }
             //自动匹配上的原材料
             for (Map newSupplierMaterial : newSupplierMaterials) {
-                Map formData4 = (Map) newSupplierMaterial.get("formData");
-                if (String.valueOf(formData4.get("textField_llkb7kd1")).equals(name)){
-                    formData2.put("textField_llkb7kd2", formData4.get("textField_llkb7kd2").toString());//物品编号
+                Map newSupplierMaterialFormData = (Map) newSupplierMaterial.get("formData");
+                if (String.valueOf(newSupplierMaterialFormData.get("textField_llkb7kd1")).equals(name)){
+                    newCode = newSupplierMaterialFormData.get("textField_llkb7kd2").toString();
+                    oldSupplierMaterialFormData.put("textField_llkb7kd2", newCode);//物品编号
                     ydClient.operateData(YDParam.builder().formUuid(PRICE_DETAIL_MIDDLE)
                             .formInstanceId(formInstanceId)
-                            .formDataJson(JSON.toJSONString(formData2)).build(), YDConf.FORM_OPERATION.update);
+                            .updateFormDataJson(JSON.toJSONString(oldSupplierMaterialFormData)).build(), YDConf.FORM_OPERATION.update);
+                    changeCodeMap.put(code,newCode);
+                    break;
                 }
             }
+
+        }
+
+        //更新定价单
+        String supplierInstanceId = supplier.get(0).get("instanceId").toString();
+        Map supplierMap = ydClient.queryData(YDParam.builder()
+                .formInstId(supplierInstanceId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        List<Map> employee = (List<Map>) supplierMap.get("employeeField_lllodwha_id");
+
+        String orderInstanceId = order.get(0).get("instanceId").toString();
+        Map updateFormData = new HashMap<>();
+        updateFormData.put("associationFormField_llkb7kct",supplierJsonString);//供应商(关联表单)
+        updateFormData.put("textField_llzzbai8", newSupplierCode);//供应商编号
+        updateFormData.put("textField_lmsli3bq", newSupplierName);//供应商名称
+        updateFormData.put("textField_lv3w1k1l", oldSupplierCode);//历史供应商编号
+        updateFormData.put("employeeField_lmsli3br", employee);//供应商负责人
+
+        ydClient.operateData(YDParam.builder()
+                .formInstId(orderInstanceId)
+                .updateFormDataJson(JSON.toJSONString(updateFormData))
+                .build(), YDConf.FORM_OPERATION.update);
+
+        //更新菜品
+        List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid(FOOD)
+                .searchCondition(JSON.toJSONString(UtilMap.map("textField_lln3lmn1", projectCode)))
+                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+        for (Map datum : data) {
+            //获取菜品管理信息
+            Map foodFormData = (Map) datum.get("formData");
+            List<Map> materialList = (List<Map>) foodFormData.get("tableField_llm1i9yy");
+
+//            Map foodFormData = ydClient.queryData(YDParam.builder().formInstanceId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+//            List<Map> materialList = (List<Map>) foodFormData.get("tableField_llm1i9yy");
+            for (Map material : materialList) {
+                String jsonString3 = material.get("associationFormField_lln3lmmv_id").toString();
+                String materialJsonString = StringEscapeUtils.unescapeJava(jsonString3.substring(1, jsonString3.length() - 1));//新供应商原材料(关联表单)
+
+                Map materialMap =(((List<Map>) JSONArray.parse(materialJsonString))).get(0);
+                String instanceId = materialMap.get("instanceId").toString();
+
+                //获取定价单明细中间表信息
+                Map formData1 = ydClient.queryData(YDParam.builder().formInstanceId(instanceId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+                materialMap.put("title",formData1.get("textField_llkb7kd1").toString());
+                materialMap.put("subTitle",formData1.get("textField_lmkfg67e"));
+                List<Map> list = new ArrayList<>();
+                list.add(materialMap);
+                material.put("associationFormField_lln3lmmv",list);//原材料(关联表单)
+                material.put("textField_lln3lmn2",formData1.get("textField_llkb7kd3"));//单位
+                material.put("textField_llyy3khw",formData1.get("textField_lmkfg67e"));//品牌
+                material.put("textField_lz0ve9ct",formData1.get("textField_llkb7kd4"));//规格
+                material.put("numberField_lnrzzg03",formData1.get("numberField_lnrzzg03"));//整包装数量
+                material.put("textField_lnrzzg04",formData1.get("textField_lnrzzg04"));//整包装单位
+                material.put("textField_llndm599",formData1.get("textField_llkb7kd1"));//原材料名称
+                material.put("textField_lmk94yf5",formData1.get("textField_llkb7kd2"));//原材料编号
+                material.put("selectField_lmqclyx9",formData1.get("selectField_llkb7kd5"));//第一分类
+                material.put("numberField_lmqclyxa",formData1.get("numberField_llkknd6h"));//供货价
+                material.put("numberField_lmsvffts",formData1.get("numberField_llkknd6g"));//成本单价
+                material.put("numberField_lmsvfftt",formData1.get("numberField_llkb7kcy"));//服务费率
+            }
+
+        foodFormData.put("tableField_llm1i9yy",materialList);
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstId)
+                    .updateFormDataJson(JSON.toJSONString(foodFormData))
+                    .build(), YDConf.FORM_OPERATION.update);
+
+            /*for (Map material : materialList) {
+
+
+
+
+                String code = material.get("textField_lmk94yf5").toString();//老供应商原材料编号
+                if (changeCodeMap.containsKey(code)){
+                    material.put("textField_lmk94yf5", changeCodeMap.get(code));//新供应商原材料编号
+                }
+
+            }
+
+            foodFormData.put("tableField_llm1i9yy",materialList);
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(datum.get("formInstanceId").toString())
+                    .updateFormDataJson(JSON.toJSONString(foodFormData))
+                    .build(),YDConf.FORM_OPERATION.update);*/
         }
 
         return McR.success();