Procházet zdrojové kódy

工艺区分删除前提交版本

lfx před 1 týdnem
rodič
revize
8690f9ecc5

+ 5 - 1
src/main/java/com/malk/eastar/conf/EastarParam.java

@@ -9,10 +9,13 @@ public class EastarParam {
     public static Map<String,String> TFNAME_YDKEY=new HashMap<>(); //状态(阶段)对应项目表KEY
     public static String YD_FORMUUID_PROJECT="FORM-D8DFF1F8C07A4869BCC850090F3A3B4EE0AV"; // 立项流程
     public static String YD_FORMUUID_RECOD="FORM-64A758B8173341879B24D612E180BE997E0B"; // TB项目档案
+    public static String YD_FORMUUID_GYS_YW="FORM-3AB247087A81401F87264BFA74944BE3R086"; // 供应商-业务对应表
+    public static String YD_FORMUUID_CGTASK="FORM-B9CBFB34DB3249C483415EF641202AC199J9"; // 采购任务表
     public static String YD_FORMUUID_ORDER="FORM-A731443BE0F04467A5D7FC1A82431D6AL2JO"; // 订单表
     public static String YD_FORMUUID_SONCONF="FORM-760F4001E1C743BA8527721F7217E068534G"; // 子任务拆分配置表
+    public static String TB_MAINPROJECT_ID="68ee14ecbc248ae7b68816c1";
 
-    public static String TB_PROJECT_TEMP="68b4fa329ae5c6b2af2d8e18";
+    public static String TB_PROJECT_TEMP="68d49cdbd17a8ab739a424ce";
 
     static {
         CUSTFIELD_ACCE.put("配件名","textField_me2f7tvo");
@@ -20,6 +23,7 @@ public class EastarParam {
 //        CUSTFIELD_ACCE.put("语言","selectField_me2f7tvj"); //调整为子表拆分传输
         CUSTFIELD_ACCE.put("配件品类","selectField_me2f7tvk");
         CUSTFIELD_ACCE.put("工厂(供应商)","textField_me2f7tvz");
+        CUSTFIELD_ACCE.put("配件编号","textField_me2f7tvn");
 //        CUSTFIELD_ACCE.put("订单数量","numberField_me2f7tvl"); //调整为子表拆分传输
         CUSTFIELD_DOLL.put("配件名","textField_me2f7tw6");
         CUSTFIELD_DOLL.put("系列名称","selectField_me2f7tw3");

+ 2 - 2
src/main/java/com/malk/eastar/controller/EastarTbController.java

@@ -51,8 +51,8 @@ public class EastarTbController {
     @PostMapping("task/count")
     McR taskCount(@RequestBody JSONObject data) {
         log.info("同步任务状态数量, {}", data);
-        McException.assertParamException_Null(data, "pid","tbPid","fid","taskTypeName");
-        eastarTbService.taskCount(data.getString("pid"),data.getString("tbPid"),data.getString("fid"),data.getString("taskTypeName"));
+        McException.assertParamException_Null(data, "pid","tbPid","fid","taskTypeName","projectState");
+        eastarTbService.taskCount(data.getString("pid"),data.getString("tbPid"),data.getString("fid"),data.getString("taskTypeName"),data.getString("projectState"));
         return McR.success();
     }
 }

+ 122 - 2
src/main/java/com/malk/eastar/controller/Test2Controller.java

@@ -2,18 +2,138 @@ package com.malk.eastar.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.malk.server.common.McR;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 @Slf4j
 @RestController
 @RequestMapping("/tlb")
 public class Test2Controller {
 
     @PostMapping("/test")
-    public McR test(@RequestBody String data) {
+    public Map<String, Object> test(@RequestBody String data) {
         log.info("data:{}",data);
-        return McR.success();
+
+        String aa="{\n" +
+                "    \"data\": [\n" +
+                "      {\n" +
+                "        \"uv\": \"324\",\n" +
+                "        \"appInfo\": {\n" +
+                "          \"value\": \"钉钉考勤是钉钉的官方应用,致力于为企业提供软硬一体的员工考勤管理的解决方案。\"\n" +
+                "        },\n" +
+                "        \"rank\": {\n" +
+                "          \"value\": 1,\n" +
+                "          \"textColorToken\": \"common_level1_base_color\",\n" +
+                "          \"bgColorToken\": \"common_blue1_color\",\n" +
+                "          \"borderColorToken\": \"common_blue1_color\",\n" +
+                "          \"cornerRadius\": 4,\n" +
+                "          \"fontSize\": 16\n" +
+                "        },\n" +
+                "        \"appItem\": {\n" +
+                "          \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n" +
+                "          \"name\": \"考勤打卡\"\n" +
+                "        },\n" +
+                "        \"action\": {\n" +
+                "          \"id\": \"1\",\n" +
+                "          \"text\": \"打开链接\",\n" +
+                "          \"marginLeft\": 6,\n" +
+                "          \"marginRight\": 6,\n" +
+                "          \"marginTop\": 6,\n" +
+                "          \"marginBottom\": 6,\n" +
+                "          \"url\": \"https://www.dingtalk.com\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"uv\": \"350\",\n" +
+                "        \"appInfo\": {\n" +
+                "          \"value\": \"钉钉智能人事提供了强大、灵活、安全的人事解决方案,让企业迅速建立起来员工花名册,搭建员工入职、转正、调岗、离职流程,并给员工以良好的使用体验。\",\n" +
+                "          \"url\": \"https://www.dingtalk.com\"\n" +
+                "        },\n" +
+                "        \"rank\": {\n" +
+                "          \"value\": 2,\n" +
+                "          \"textAlign\": \"left\"\n" +
+                "        },\n" +
+                "        \"appItem\": {\n" +
+                "          \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n" +
+                "          \"name\": \"智能人事\"\n" +
+                "        },\n" +
+                "        \"action\": {\n" +
+                "          \"id\": \"2\",\n" +
+                "          \"text\": \"打开链接\",\n" +
+                "          \"marginLeft\": 6,\n" +
+                "          \"marginRight\": 6,\n" +
+                "          \"marginTop\": 6,\n" +
+                "          \"marginBottom\": 6,\n" +
+                "          \"color\": \"gray\",\n" +
+                "          \"url\": \"https://www.dingtalk.com\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"uv\": \"189\",\n" +
+                "        \"appInfo\": {\n" +
+                "          \"value\": \"钉钉日志是由阿里巴巴集团旗下钉钉自主研发的日志产品。提供丰富的自定义模板、定时提醒、自动统计等功能方便管理者了解员工每日工作情况,可以帮助员工总结沉淀工作经验。帮助企业、组织、团队进行高效工作内容汇报、沉淀以及分享。\",\n" +
+                "          \"textColorToken\": \"common_orange1_color\",\n" +
+                "          \"request\": true\n" +
+                "        },\n" +
+                "        \"rank\": {\n" +
+                "          \"value\": 3,\n" +
+                "          \"textAlign\": \"right\"\n" +
+                "        },\n" +
+                "        \"appItem\": {\n" +
+                "          \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n" +
+                "          \"name\": \"日志\"\n" +
+                "        },\n" +
+                "        \"action\": {\n" +
+                "          \"id\": \"3\",\n" +
+                "          \"text\": \"禁用\",\n" +
+                "          \"status\": \"disabled\",\n" +
+                "          \"color\": \"red\",\n" +
+                "          \"marginLeft\": 6,\n" +
+                "          \"marginRight\": 6,\n" +
+                "          \"marginTop\": 6,\n" +
+                "          \"marginBottom\": 6,\n" +
+                "          \"url\": \"https://www.dingtalk.com\"\n" +
+                "        }\n" +
+                "      }\n" +
+                "    ],\n" +
+                "    \"meta\": [\n" +
+                "      {\n" +
+                "        \"aliasName\": \"\",\n" +
+                "        \"dataType\": \"OBJECT\",\n" +
+                "        \"alias\": \"rank\",\n" +
+                "        \"weight\": 10\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"aliasName\": \"应用名\",\n" +
+                "        \"dataType\": \"MICROAPP\",\n" +
+                "        \"alias\": \"appItem\",\n" +
+                "        \"weight\": 20\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"aliasName\": \"应用介绍\",\n" +
+                "        \"dataType\": \"OBJECT\",\n" +
+                "        \"alias\": \"appInfo\",\n" +
+                "        \"weight\": 40\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"aliasName\": \"点击人数\",\n" +
+                "        \"dataType\": \"STRING\",\n" +
+                "        \"alias\": \"uv\",\n" +
+                "        \"weight\": 15\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"aliasName\": \"动作\",\n" +
+                "        \"dataType\": \"BUTTON\",\n" +
+                "        \"alias\": \"action\",\n" +
+                "        \"weight\": 15\n" +
+                "      }\n" +
+                "    ]\n" +
+                "  }";
+
+        return UtilMap.map("table",JSONObject.parse(aa));
     }
 
 }

+ 29 - 1
src/main/java/com/malk/eastar/schedule/ScheduleTask.java

@@ -6,6 +6,7 @@ import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.aliwork.YDSearch;
 import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
 import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilMap;
@@ -20,6 +21,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -36,6 +38,8 @@ public class ScheduleTask {
     private YDClient ydClient;
     @Autowired
     private EastarTbService eastarTbService;
+    @Autowired
+    private YDService ydService;
 
     /**
      */
@@ -81,11 +85,12 @@ public class ScheduleTask {
                 if(PublicUtil.isNull(tbPid)){
                     continue;
                 }
+                String projectState=UtilMap.getString(formData,"selectField_me2hylde");
                 String fid=UtilMap.getString(map,"formInstanceId");
                 List<UtilMap.assDetail> assDetails=UtilMap.getAssFieldValue(formData,"associationFormField_me9n24kk_id");
                 if(assDetails!=null&&assDetails.size()>0){
                     String tastTypeName= assDetails.get(0).title; // 项目任务类型
-                    eastarTbService.taskCount(pid,tbPid,fid,tastTypeName);
+                    eastarTbService.taskCount(pid,tbPid,fid,tastTypeName,projectState);
                 }
             }
         }catch (Exception e){
@@ -93,4 +98,27 @@ public class ScheduleTask {
         }
     }
 
+    @Scheduled(cron = "0 30 1 1 1 ?")
+    public void syncCust(){
+        log.info("同步客户上一年等级");
+        List<Map> list= ydService.queryAllFormData(YDParam.builder().formUuid("FORM-9261FABA687B4D1D917617F53B4A5DB7UN16").build());
+        for(Map map:list){
+            Map formData =UtilMap.getMap(map,"formData");
+            log.info("任务数量同步:客户:{},等级:{} ", formData.get("textField_lqanqe6j"),formData.get("selectField_mcsoft5i"));
+            Map updateMap=new HashMap();
+            updateMap.put("selectField_mfkshib3",formData.get("selectField_mcsoft5i"));
+            updateMap.put("numberField_mfkshib2",0);
+            updateMap.put("selectField_mcsoft5i","E");
+            String fid=UtilMap.getString(map,"formInstanceId");
+            ydClient.operateData(YDParam.builder().formInstId(fid).updateFormDataJson(JSONObject.toJSONString(updateMap)).useLatestFormSchemaVersion(true).build(), YDConf.FORM_OPERATION.update);
+            Map recod=new HashMap();
+            recod.put("textField_lqanqe6j",formData.get("textField_lqanqe6j"));
+            recod.put("textField_mfkrv5w6",formData.get("serialNumberField_lqanqe6i"));
+            recod.put("selectField_mcsoft5i",formData.get("selectField_mcsoft5i"));
+            recod.put("dateField_mfkrv5w8",UtilDateTime.getLocalDateTimeTimeStamp((LocalDate.of(LocalDate.now().getYear()-1,1,1).atStartOfDay())));
+            recod.put("associationFormField_mfkrv5w7",Arrays.asList(UtilMap.map("formType, formUuid, instanceId, title, appType","receipt","FORM-9261FABA687B4D1D917617F53B4A5DB7UN16",fid,formData.get("textField_lqanqe6j"),"APP_GM7D1NW6XCD0ZJBPVH51")));
+            ydClient.operateData(YDParam.builder().formDataJson(JSONObject.toJSONString(recod)).formUuid("FORM-51F53E33609C4E20A918D5C55E237E95Z2GS").build(), YDConf.FORM_OPERATION.create);
+        }
+    }
+
 }

+ 1 - 1
src/main/java/com/malk/eastar/service/EastarTbService.java

@@ -10,5 +10,5 @@ public interface EastarTbService {
 
     Map taskStateChange(String taskIds,String tfsName);
 
-    void taskCount(String pid,String tbPid,String fid,String taskTypeName);
+    void taskCount(String pid,String tbPid,String fid,String taskTypeName, String projectState);
 }

+ 178 - 48
src/main/java/com/malk/eastar/service/impl/EastarTbServiceImpl.java

@@ -1,5 +1,6 @@
 package com.malk.eastar.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.eastar.conf.EastarParam;
 import com.malk.eastar.util.ConfigDataProcessor;
@@ -51,9 +52,46 @@ public class EastarTbServiceImpl  implements EastarTbService {
         return UtilMap.map("tbProjectId",tbProjectId);
     }
 
+    private String creatMainProjectTask(String pId,String name,String id,List<Map> table,String executorId,List mainProjectcustomfields){
+        Map taskMap = new HashMap();
+        taskMap.put("content",name+"-"+id);
+        taskMap.put("projectId",EastarParam.TB_MAINPROJECT_ID);
+        taskMap.put("executorId",executorId); // 通过供应商确定执行人
+        taskMap.put("customfields",mainProjectcustomfields);
+        taskMap.put("startDate", DateUtil.format(new Date(UtilMap.getLong(table.get(0),"dateField_mgu5rm3g")),"yyyy-MM-dd"));
+        taskMap.put("dueDate", DateUtil.format(new Date(UtilMap.getLong(table.get(table.size()-1),"dateField_mgu5rm3h")),"yyyy-MM-dd"));
+        Map result=createTask(taskMap);
+        for (Map map:table){
+            Map son=new HashMap();
+            son.put("content",name+"-"+id+"-"+map.get("textField_mgu5rm3f"));
+            son.put("projectId",EastarParam.TB_MAINPROJECT_ID);
+            son.put("executorId",executorId); // 通过供应商确定执行人
+            son.put("parentTaskId",result.get("taskId"));
+            son.put("startDate", DateUtil.format(new Date(UtilMap.getLong(map,"dateField_mgu5rm3g")),"yyyy-MM-dd"));
+            son.put("dueDate", DateUtil.format(new Date(UtilMap.getLong(map,"dateField_mgu5rm3h")),"yyyy-MM-dd"));
+            son.put("customfields",mainProjectcustomfields);
+            Map sonResult=createTask( son);
+        }
+        return UtilMap.getString(result, "taskId");
+    }
+
+    private Map createTask(Map map){
+        try {
+            return tbTask.createTask(tbConf.getOperatorId(), map);
+        }catch (McException e){
+            if(e.getMessage().equals("截止时间必须晚于开始时间")||e.getMessage().equals("The end time should not be earlier than the start time.")){
+                map.remove("startDate");
+                return createTask(map);
+            }else {
+                throw e;
+            }
+        }
+    }
+
 
     @Override
     public Map createTask(String formInstId) {
+        // 查询立项数据
         Map data=ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
         String merName= UtilMap.getString(data,"textField_me87x1o0");// 客户名称
         String pMainName= UtilMap.getString(data,"textField_me9n24kq"); // 主项目名称
@@ -61,23 +99,50 @@ public class EastarTbServiceImpl  implements EastarTbService {
         String pName= UtilMap.getString(data,"textField_me87x1nz"); // 项目名称
         String pId= UtilMap.getString(data,"textField_me2hyldc");// 项目编号
         String orderType= UtilMap.getString(data,"selectField_mdf997wp"); // 订单类型 大货 打样
-        String pTaskType= UtilMap.getAssFieldValue(data,"associationFormField_me9n24kk_id").get(0).title; // 项目任务类型
+//        String pTaskType= UtilMap.getAssFieldValue(data,"associationFormField_me9n24kk_id").get(0).title; // 项目任务类型
+        String pTaskType = UtilMap.getString(data,"textField_mfqnsa9d");// 项目任务类型
+        // 查询记录判断是否创建过看板
         List<Map> recodList = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_RECOD).searchCondition(
                 JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_me2hyldb",pMainId,"主项目编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ)))
         ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        // 成员处理
+        List<String> pmUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld8_id");// 项目经理
+        List<String> ssUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld9_id");// 业务
+        List<String> qeUserId = (List<String>) UtilMap.getList(data, "employeeField_me9n24ka_id");// QE
+        pmUserId=tbUser.getUserIds(pmUserId, false);
+        ssUserId=tbUser.getUserIds(ssUserId, false);
+        List<String> programUsers=new ArrayList<>();
+        programUsers.addAll(pmUserId);
+        programUsers.addAll(ssUserId);
+        programUsers.remove(tbConf.getOperatorId());
+        Set<String> programUsersSet = new HashSet<>(programUsers);
+        programUsers = new ArrayList<>(programUsersSet);
         // 项目创建
         String tbProjectId;
         if(recodList == null || recodList.size()<1){
             Map result = tbProject.projectCreateWithTemplate(pMainName, EastarParam.TB_PROJECT_TEMP, tbConf.getOperatorId());
             tbProjectId = UtilMap.getString(result, "id");
+            // 同步项目集
+            List<Map> programList = tbProject.queryProgramList("", merName);
+            String programId = "";
+            if (programList.size() > 0) {
+                programId=UtilMap.getString(programList.get(0), "id");
+            }else{
+                Map program=tbProject.createProgramList(merName,"");
+                programId=UtilMap.getString(program,"id");
+            }
+            tbProject.upsertProgramProject(programId, Arrays.asList(tbProjectId), tbConf.getOperatorId());
+            tbProject.createProgramMember(programId,tbConf.getOperatorId(),programUsers);
         }else {
             tbProjectId = UtilMap.getString(UtilMap.getMap(recodList.get(0),"formData"),"textField_mecmytpo");
         }
         // 订单数据
-        String orderFid= UtilMap.getAssFieldValue(data,"associationFormField_me2hylda_id").get(0).instanceId; // 项目任务类型
+        List<UtilMap.assDetail> projectOrder=UtilMap.getAssFieldValue(data,"associationFormField_me2hylda_id");
+        String orderFid= projectOrder.get(0).instanceId; // 项目任务类型
         Map orderData=ydClient.queryData(YDParam.builder().formInstId(orderFid).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
         List<Map> orderLangConf=UtilMap.getList(orderData,"tableField_meqqj4we");// 语言配置
         List<Map> orderTypeConfALl=UtilMap.getList(orderData,"tableField_mesc7nvp");// 类型源配置
+        List<Map> xlConf=UtilMap.getList(orderData,"tableField_mesc7nvj");// 系列源配置
         List<Map> orderTypeAndLangConf=new ArrayList<>();// 语言+类型配置
         List<Map> orderTypeConf=new ArrayList<>();// 纯类型配置
         for(Map map:orderTypeConfALl){
@@ -90,26 +155,13 @@ public class EastarTbServiceImpl  implements EastarTbService {
         // 子任务拆分数据
         List<Map> sonConfData= ydService.queryDetails(YDParam.builder().formInstanceId("FINST-X1B66Y81IUFY9U417XIUE99I8YV93HGMJ8WEMF").formUuid(EastarParam.YD_FORMUUID_SONCONF).tableFieldId("tableField_mew7d9f3").build());// 全品类配件表
         Map<String,Map<String,List<String>>>  sonConf= ConfigDataProcessor.processConfigData(sonConfData);
-        // 同步项目集
-        List<Map> programList = tbProject.queryProgramList("", merName);
-        String programId = ""; // LEV项目管理
-        if (programList.size() > 0) {
-            programId=UtilMap.getString(programList.get(0), "id");
-        }else{
-            Map program=tbProject.createProgramList(merName,"");
-            programId=UtilMap.getString(program,"id");
-        }
-        tbProject.upsertProgramProject(programId, Arrays.asList(tbProjectId), tbConf.getOperatorId());
+
         // 成员处理
-        List<String> pmUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld8_id");// 项目经理
-        List<String> ssUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld9_id");// 业务
-        List<String> qeUserId = (List<String>) UtilMap.getList(data, "employeeField_me9n24ka_id");// QE
-        pmUserId=tbUser.getUserIds(pmUserId, false);
-        ssUserId=tbUser.getUserIds(ssUserId, false);
         qeUserId=tbUser.getUserIds(qeUserId, false);
         List<Map> mchTable= UtilMap.getList(data,"tableField_mec6juik");// 跟单
         List<String> mchList=new ArrayList<>();
         Map<String,String> mchMap=new HashMap<>();
+        Map<String,String> mchDDIdMap=new HashMap<>();
         Map<String,String> userIdMap=new HashMap<>();
         for (Map map:mchTable){
             String ddId=String.valueOf(UtilMap.getList(map,"employeeField_me9n24kl_id").get(0));
@@ -118,6 +170,7 @@ public class EastarTbServiceImpl  implements EastarTbService {
                 userIdMap.put(ddId,tbUser.getUserId(ddId,false));
             }
             mchMap.put(UtilMap.getString(map,"textField_mec6juil"),userIdMap.get(ddId));
+            mchDDIdMap.put(UtilMap.getString(map,"textField_mec6juil"),ddId);
         }
         mchList=tbUser.getUserIds(mchList, false);
         mchList.remove(tbConf.getOperatorId());
@@ -142,6 +195,25 @@ public class EastarTbServiceImpl  implements EastarTbService {
             String roleId = _getProjectRoleId(tbProjectId, "项目拥有者");
             tbProject.updateProjectMember(pmUserId, Arrays.asList(roleId), tbProjectId);
         }
+        String projectTaskId= UtilMap.getString(data,"textField_mgu73usl");// 大看板任务编号
+        if(PublicUtil.isNull(projectTaskId)){
+            // 创建任务及看板
+            List mainProjectcustomfields=new ArrayList();
+            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("项目类型",orderType));
+            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("订单金额(美金)",UtilMap.getString(orderData,"numberField_mdy6ezcu")));
+//            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("产品类型",orderType));
+            List<String> gcNameList=new ArrayList<>(mchMap.keySet()); // 工厂
+            mainProjectcustomfields.add(tbConf.assembleCustomField("工厂",getCustFiledValueTitle(gcNameList)));
+            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("客户",merName));
+            mainProjectcustomfields.add(tbConf.assembleCustomField("业务(Sales)",getCustFiledValueId(ssUserId)));
+            mainProjectcustomfields.add(tbConf.assembleCustomField("跟单人",getCustFiledValueId(mchList)));
+            mainProjectcustomfields.add(tbConf.assembleCustomField("品控(QE)",getCustFiledValueId(qeUserId)));
+            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("Project Name",UtilMap.getString(data,"textField_me9n24l0")));
+            mainProjectcustomfields.add(tbConf.assembleCustomFieldName("客户分级",UtilMap.getString(data,"textField_mgokximj")));
+            projectTaskId=creatMainProjectTask(tbProjectId,pName,pId,UtilMap.getList(data,"tableField_mgu5rm3e"),pmUserId.get(0),mainProjectcustomfields);
+            ydClient.operateData(YDParam.builder().formInstanceId(formInstId)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgu73usl",projectTaskId))).build(), YDConf.FORM_OPERATION.update);
+        }
         // 任务公用字段
         List maincustomfields=new ArrayList();
         maincustomfields.add(tbConf.assembleCustomFieldName("项目编号",pId));
@@ -151,6 +223,8 @@ public class EastarTbServiceImpl  implements EastarTbService {
         maincustomfields.add(tbConf.assembleCustomField("业务(Sales)",getCustFiledValueId(ssUserId)));
         maincustomfields.add(tbConf.assembleCustomField("项目经理(PM)",getCustFiledValueId(pmUserId)));
         maincustomfields.add(tbConf.assembleCustomField("品控(QE)",getCustFiledValueId(qeUserId)));
+        maincustomfields.add(tbConf.assembleCustomFieldName("Project Name",UtilMap.getString(data,"textField_me9n24l0")));
+        maincustomfields.add(tbConf.assembleCustomFieldName("客户分级",UtilMap.getString(data,"textField_mgokximj")));
 
         // 任务类型
         String scenariofieldconfigId=_getTaskType(tbProjectId,pTaskType);
@@ -161,13 +235,15 @@ public class EastarTbServiceImpl  implements EastarTbService {
         List<Map> table= ydService.queryDetails(YDParam.builder().formInstanceId(formInstId).formUuid(EastarParam.YD_FORMUUID_PROJECT).tableFieldId("tableField_mdy8x198").build());// 全品类配件表
         List<Map> recodTable = new ArrayList<>();
         List<String> jds=UtilMap.getList(data,"checkboxField_me9n37rs");
+        Map<String,List<Map>> gysOrderData=new HashMap<>(); // 采购需求数据  按照供应商拆分BOM
         for(Map map:table){
             Map taskMap=UtilMap.map("projectId, tasklistId, scenariofieldconfigId, stageId",tbProjectId,tasklistId,scenariofieldconfigId,stageId);
-            taskMap.put("content",String.valueOf(map.get("selectField_me2f7tw4"))+"-"+String.valueOf(map.get("textField_me2f7tvo"))); //系列 配件
-            taskMap.put("executorId",mchMap.get(UtilMap.getString(map,"textField_me2f7tvz"))); // 通过供应商确定执行人
+            taskMap.put("content",getValue(map,"selectField_me2f7tw4","-")+getValue(map,"textField_me2f7tvo","")); //系列 配件
+            String gysName=UtilMap.getString(map,"textField_me2f7tvz");
+            taskMap.put("executorId",mchMap.get(gysName)); // 通过供应商确定执行人
             List<Map> customfields=getCustomfields(EastarParam.CUSTFIELD_ACCE,map);
             customfields.addAll(maincustomfields);
-            List<Map> resulr=null;
+            List<Map> result=null;
             boolean isLang="是".equals(UtilMap.getString(map,"radioField_me2f7tvx"));
             boolean isType="是".equals(UtilMap.getString(map,"radioField_metn23go"));
             String type=UtilMap.getString(map,"selectField_me2f7tvk"); // 配件大类
@@ -185,49 +261,77 @@ public class EastarTbServiceImpl  implements EastarTbService {
             }
             if(isType){// 区分工艺
                 if(isLang){ // 区分语言  通过工艺拆分
-                    resulr=saveTbTask(taskMap,orderTypeAndLangConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId);
+                    result=saveTbTask(taskMap,orderTypeAndLangConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId,gysName,pId);
                 }else{// 不区分语言  通过工艺没有
-                    resulr=saveTbTask(taskMap,orderTypeConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId);
+                    result=saveTbTask(taskMap,orderTypeConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId,gysName,pId);
                 }
             }else{// 不区分工艺
                 if(isLang){ // 区分语言
-                    resulr=saveTbTask(taskMap,orderLangConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId);
+                    result=saveTbTask(taskMap,orderLangConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId,gysName,pId);
                 }else{
-                    resulr=saveTbTask(taskMap,Arrays.asList(UtilMap.map("textField_meqqj4wa, textField_mesc7nvm, numberField_mesc7nvo",
-                            map.get("selectField_me2f7tw4"),map.get("selectField_me2f7tvj"),map.get("numberField_me2f7tvl"))),
-                            UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId);
+                    result=saveTbTask(taskMap,xlConf,UtilMap.getString(map,"selectField_me2f7tw4"),customfields,isLang,isType,sonconf,sonScenariofieldconfigId,gysName,pId);
                 }
             }
-            recodTable.addAll(resulr);
+            if(gysOrderData.containsKey(gysName)){
+                gysOrderData.get(gysName).addAll(result);
+            }else{
+                gysOrderData.put(gysName,result);
+            }
+            recodTable.addAll(result);
         }
         // 公仔任务生成
         List<Map> recodTable2 = new ArrayList<>();
-        boolean isNeedDoll="是".equals(UtilMap.getString(data,"selectField_mdf997xg"));
-        if(isNeedDoll){
-            List<Map> table2= ydService.queryDetails(YDParam.builder().formInstanceId(formInstId).formUuid(EastarParam.YD_FORMUUID_PROJECT).tableFieldId("tableField_me2f7tw1").build());// 公仔配件表
-            maincustomfields.add(tbConf.assembleCustomFieldName("配件品类","公仔类"));
-            for(Map map: table2){
-                Map taskMap=UtilMap.map("projectId, tasklistId, scenariofieldconfigId, stageId",tbProjectId,tasklistId,scenariofieldconfigId,stageId);
-                taskMap.put("content",String.valueOf(map.get("selectField_me2f7tw3"))+"-"+String.valueOf(map.get("textField_mec5w62c")));
-                taskMap.put("executorId",mchMap.get(UtilMap.getString(map,"textField_mec5w62j"))); // 通过供应商确定执行人
-                List<Map> customfields=getCustomfields(EastarParam.CUSTFIELD_DOLL,map);
-                customfields.addAll(maincustomfields);
-                taskMap.put("customfields",customfields);
-                Map result=tbTask.createTask(tbConf.getOperatorId(), taskMap);
-                recodTable2.add(UtilMap.map("textField_mecmytpu, textField_mecmytpv, textField_mecmytpw",result.get("content"),result.get("taskId"),"未开始"));
+//        boolean isNeedDoll="是".equals(UtilMap.getString(data,"selectField_mdf997xg"));
+//        if(isNeedDoll){
+//            List<Map> table2= ydService.queryDetails(YDParam.builder().formInstanceId(formInstId).formUuid(EastarParam.YD_FORMUUID_PROJECT).tableFieldId("tableField_me2f7tw1").build());// 公仔配件表
+//            maincustomfields.add(tbConf.assembleCustomFieldName("配件品类","公仔类"));
+//            for(Map map: table2){
+//                Map taskMap=UtilMap.map("projectId, tasklistId, scenariofieldconfigId, stageId",tbProjectId,tasklistId,scenariofieldconfigId,stageId);
+//                taskMap.put("content",String.valueOf(map.get("selectField_me2f7tw3"))+"-"+String.valueOf(map.get("textField_mec5w62c")));
+//                taskMap.put("executorId",mchMap.get(UtilMap.getString(map,"textField_mec5w62j"))); // 通过供应商确定执行人
+//                List<Map> customfields=getCustomfields(EastarParam.CUSTFIELD_DOLL,map);
+//                customfields.addAll(maincustomfields);
+//                taskMap.put("customfields",customfields);
+//                Map result=tbTask.createTask(tbConf.getOperatorId(), taskMap);
+//                recodTable2.add(UtilMap.map("textField_mecmytpu, textField_mecmytpv, textField_mecmytpw",result.get("content"),result.get("taskId"),"未开始"));
+//            }
+//        }
+        saveRecod(data,tbProjectId,recodTable,recodTable2);
+        // 循环保存采购任务
+        for (String key:gysOrderData.keySet()){
+            List<Map> arr=gysOrderData.get(key);
+            Map order=UtilMap.map("textField_mifp03ew, selectField_mifp03e7, tableField_mifp03em",tbProjectId,"待采购",arr);
+            order.put("associationFormField_mifp03e9",projectOrder);
+            order.put("associationFormField_mifp03e8",UtilMap.getAssFieldValue(data,"associationFormField_mdy7w1wn_id")); // 项目
+            order.put("textField_mifp03e6",pName+"-"+key);
+            order.put("textField_mimwnauk",pId);
+            order.put("employeeField_mifp03eu",Arrays.asList(mchDDIdMap.get(key)));
+            List<Map> gysList = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_GYS_YW).searchCondition(
+                    JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_mec6lku3",key,"供应商简称", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ)))
+            ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+            if(gysList!=null&&gysList.size()>0){
+                order.put("associationFormField_mifp03ea",UtilMap.getAssFieldValue(UtilMap.getMap(gysList.get(0),"formData"),"associationFormField_mec6lku4_id"));
             }
+            ydClient.operateData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_CGTASK).formDataJson(JSONObject.toJSONString(order)).build(), YDConf.FORM_OPERATION.create);
         }
-        saveRecod(data,tbProjectId,recodTable,recodTable2);
         return Collections.emptyMap();
     }
 
-    private List<Map> saveTbTask(Map taskMap,List<Map> orderConf,String series,List<Map> customfields,boolean isLang,boolean isType,List<String> sonconf,String sonScenariofieldconfigId){
+    private String getValue(Map map,String key,String s){
+        String value=UtilMap.getString(map,key);
+        return value.length()==0?"":value+s;
+    }
+
+    private List<Map> saveTbTask(Map taskMap,List<Map> orderConf,String series,List<Map> customfields,boolean isLang,boolean isType,List<String> sonconf,String sonScenariofieldconfigId,String gysName,String pId){
         log.info("创建任务:{},是否区分语言{},是否区分工艺{}",taskMap.get("content"),isLang,isType);
         List<Map> recodTable=new ArrayList<>();
+        if (PublicUtil.isNull(taskMap,"executorId")){
+            taskMap.remove("executorId");
+        }
         for(Map map: orderConf){
             Map tMap=new HashMap();
             tMap.putAll(taskMap);
-            String confSeries=UtilMap.getString_first(map,"textField_meqqj4wa","textField_mesc7nvl");// 系列
+            String confSeries=UtilMap.getString_first(map,"textField_meqqj4wa","textField_mesc7nvl","textField_mesc7nvf");// 系列
             if(!series.equals(confSeries)){
                 continue;
             }
@@ -245,22 +349,27 @@ public class EastarTbServiceImpl  implements EastarTbService {
                     tMap.put("content",tMap.get("content")+"-"+type);
                 }
             }
-            String value=String.valueOf(UtilMap.get_first(map,"numberField_mesc7nvo","numberField_meqqj4wd")); // 数量
+            String value=UtilMap.getString_first(map,"numberField_mesc7nvo","numberField_meqqj4wd","numberField_mesc7nvi"); // 数量
+            String sku="";
             customfields.add(tbConf.assembleCustomFieldName("订单数量",value));
             tMap.put("customfields",customfields);
-            log.info("最终任务名称:{}",tMap.get("content"));
+            log.info("最终任务名称:{},详细参数:{}",tMap.get("content"),tMap);
             Map result=tbTask.createTask(tbConf.getOperatorId(), tMap);// 更新任务所属任务列表
-            recodTable.add(UtilMap.map("textField_mecmytpr, textField_mecmytps, textField_mecmytpt",result.get("content"),result.get("taskId"),"未开始"));
+            recodTable.add(UtilMap.map("textField_mecmytpr, textField_mecmytps, textField_mecmytpt, numberField_mifp03el, textField_mifp03eo, textField_miib17jx",result.get("content"),result.get("taskId"),"未开始",value,sku,pId));
             for (String son:sonconf){
                 Map sonMap=new HashMap();
                 sonMap.put("content",tMap.get("content")+"/"+son.replace("/","-"));
-                sonMap.put("executorId",taskMap.get("executorId"));
+                if(taskMap.containsKey("executorId")){
+                    sonMap.put("executorId",taskMap.get("executorId"));
+                }
                 sonMap.put("stageId",taskMap.get("stageId"));
                 sonMap.put("tasklistId",taskMap.get("tasklistId"));
                 sonMap.put("scenariofieldconfigId",sonScenariofieldconfigId);
                 sonMap.put("parentTaskId",result.get("taskId"));
                 List soncustomfields=new ArrayList();
                 soncustomfields.add(tbConf.assembleCustomFieldName("SKU类型",son));
+                soncustomfields.add(tbConf.assembleCustomFieldName("工厂(SKU供应商)",gysName));
+                soncustomfields.add(tbConf.assembleCustomFieldName("订单数量",value));
                 sonMap.put("customfields",soncustomfields);
                 sonMap.put("projectId",taskMap.get("projectId"));
                 Map sonResult=tbTask.createTask(tbConf.getOperatorId(), sonMap);
@@ -283,7 +392,7 @@ public class EastarTbServiceImpl  implements EastarTbService {
     }
 
     @Override
-    public void taskCount(String pid, String tbPid, String fid, String taskTypeName) {
+    public void taskCount(String pid, String tbPid, String fid, String taskTypeName, String projectState) {
         // 1.1循环所有项目
         // 1.2查询项目的自定义字段
         List<Map> tidList=tbProject.queryProjectCustomField(tbPid,UtilMap.map("q","项目编号"));
@@ -300,9 +409,25 @@ public class EastarTbServiceImpl  implements EastarTbService {
             log.info("{}阶段数量:{}",map.get("name"),count);
             updateMap.put(TFNAME_YDKEY.get(map.get("name")),count);
         }
+        if(projectState.equals("立项阶段")){
+            updateMap.put("selectField_me2hylde","样品阶段");
+        }else if(projectState.equals("样品阶段")&&!isYp(updateMap,Arrays.asList("未开始","白样","制版","产前样"))){
+            updateMap.put("selectField_me2hylde","生产阶段");
+        }
         ydClient.operateData(YDParam.builder().formInstId(fid).updateFormDataJson(JSONObject.toJSONString(updateMap)).useLatestFormSchemaVersion(true).build(), YDConf.FORM_OPERATION.update);
     }
 
+    private boolean isYp(Map updateMap,List<String> list){
+        for (String key:list){
+            if(updateMap.containsKey(TFNAME_YDKEY.get(key))){
+                if(UtilMap.getInt(updateMap,TFNAME_YDKEY.get(key))>0){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     private void saveRecod(Map formData,String tbProjectId,List<Map> recodTable,List<Map> recodTable2){
         Map map=new HashMap();
         map.put("textField_me87x1nz",formData.get("textField_me87x1nz"));
@@ -337,6 +462,11 @@ public class EastarTbServiceImpl  implements EastarTbService {
             return UtilMap.map("id, title",item,item);
         }).collect(Collectors.toList());
     }
+    private static List<Map> getCustFiledValueTitle(List<String> values){
+        return values.stream().map(item->{
+            return UtilMap.map("title",item);
+        }).collect(Collectors.toList());
+    }
 
     String _getTaskType(String projectId, String taskTypeName) {
         return _getTaskType(projectId,taskTypeName,"id");

+ 1 - 1
src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9001
+  port: 9000
   servlet:
     context-path: /api/eastar
 enable:

+ 28 - 36
src/test/java/TbTest.java

@@ -1,3 +1,5 @@
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.net.URLDecoder;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.eastar.LtcEastarApplication;
 import com.malk.eastar.conf.CfsToStageEnum;
@@ -26,10 +28,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import java.lang.reflect.Array;
 import java.time.LocalDate;
 import java.time.LocalTime;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static cn.hutool.core.net.MaskBit.get;
@@ -44,6 +43,8 @@ public class TbTest {
     private EastarTbService eastarTbService;
     @Autowired
     private TBClient_Task tbTask;
+    @Autowired
+            private TBClient_Project tbProject;
 
     String tempId="689edfd6ee73c95fe1438e24";
     String projectId = "";
@@ -56,47 +57,38 @@ public class TbTest {
 
     @Test
     public void createTask() {
-        Map map=eastarTbService.createTask("93cd379b-cc9c-4060-a7fa-77cbc4f14af1");
+        Map map=eastarTbService.createTask("51cf01e0-d5c9-47c2-bdf6-f80c69853a7a");
     }
 
     @Autowired
-    private TBClient_Project tbProject;
+    private YDClient ydClient;
+    @Autowired
+    private YDService ydService;
 
     @Test
-    public void taskCount() {
-        // 1.查询所有项目
-        String pid="Easter-afanda202508200006";
-        String tbPid="68bf81834991ad9a71b1e06a";
-        String fid="18636044-7ba1-4338-b247-0cb769173f9a";
-        eastarTbService.taskCount(pid,tbPid,fid,"完整流程");
-
+    public void testYd(){
+//        ydClient.operateData(YDParam.builder().formInstanceId("e29ffbc0-8159-49a2-ac3d-ec01b1dd7a93")
+//                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgu73usl",""))).useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+        List<Map> gysList = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_GYS_YW).searchCondition(
+                JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_mec6lku3","和丰","供应商简称", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ)))
+        ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        System.out.println(gysList);
     }
 
-
-    @Autowired
-    private YDClient ydClient;
-
     @Test
-    public void testYd(){
-        List<Map> list= (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-D8DFF1F8C07A4869BCC850090F3A3B4EE0AV").searchCondition(JSONObject.toJSONString(
-                Arrays.asList(
-                        new YDSearch("selectField_me2hylde",Arrays.asList("立项阶段","样品阶段","生产阶段","包装阶段","出货阶段","收尾阶段"),"项目状态", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.CONTAINS)
-                )
-        )).build(), YDConf.FORM_QUERY.retrieve_list).getData();
-        for(Map map:list){
-            Map formData =UtilMap.getMap(map,"formData");
-            log.info("任务数量同步:项目:{} ", formData.get("textField_me87x1nz"));
-            String pid=UtilMap.getString(formData,"textField_me2hyldc");
-            String tbPid=UtilMap.getString(formData,"textField_mecmytpo");
-            if(PublicUtil.isNull(tbPid)){
-                continue;
-            }
-            String fid=UtilMap.getString(map,"formInstanceId");
-            List<UtilMap.assDetail> assDetails=UtilMap.getAssFieldValue(formData,"associationFormField_me9n24kk_id");
-            if(assDetails!=null&&assDetails.size()>0){
-                String tastTypeName= assDetails.get(0).title; // 项目任务类型
-                eastarTbService.taskCount(pid,tbPid,fid,tastTypeName);
+    public void testData(){
+        List<String> list= FileUtil.readUtf8Lines("/home/ids.txt");
+        List<String> errList=new ArrayList<>();
+        for (int i = 245; i < list.size(); i++) {
+            log.info("处理进度:{}/{}",i+1,list.size());
+            String[] str=list.get(i).split("###");
+            String name=str[0].replaceAll(" ","").toUpperCase();
+            try {
+                ydClient.operateData(YDParam.builder().formInstId(str[1]).updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_meks6pjp", name))).build(), YDConf.FORM_OPERATION.update);
+            }catch (McException e){
+                errList.add(name+"+"+e.getMessage());
             }
         }
+        log.info("errList:{}",errList);
     }
 }