lfx 3 月之前
父节点
当前提交
59c63780a1

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

@@ -6,6 +6,7 @@ import java.util.Map;
 public class EastarParam {
     public static Map<String,String> CUSTFIELD_ACCE=new HashMap<>();
     public static Map<String,String> CUSTFIELD_DOLL=new HashMap<>();
+    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_ORDER="FORM-A731443BE0F04467A5D7FC1A82431D6AL2JO"; // 订单表
@@ -25,6 +26,14 @@ public class EastarParam {
 //        CUSTFIELD_DOLL.put("配件品类","selectField_me2f7tvk");
         CUSTFIELD_DOLL.put("工厂(供应商)","textField_mec5w62j");
         CUSTFIELD_DOLL.put("订单数量","numberField_mec5w621");
-    }
 
+        TFNAME_YDKEY.put("未开始","numberField_mfavvfzm");
+        TFNAME_YDKEY.put("白样","numberField_mfavvfzo");
+        TFNAME_YDKEY.put("制版","numberField_mfavvfzq");
+        TFNAME_YDKEY.put("产前样","numberField_mfavvfzs");
+        TFNAME_YDKEY.put("大货","numberField_mfavvfzu");
+        TFNAME_YDKEY.put("包装","numberField_mfavvfzx");
+        TFNAME_YDKEY.put("出货","numberField_mfavvg00");
+        TFNAME_YDKEY.put("已完成","numberField_mfavvg03");
+    }
 }

+ 42 - 0
src/main/java/com/malk/eastar/controller/EastarDdController.java

@@ -0,0 +1,42 @@
+package com.malk.eastar.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Report;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/dd")
+public class EastarDdController {
+
+    @Autowired
+    private DDClient_Report ddClientReport;
+    @Autowired
+    private DDClient ddClient;
+
+    @PostMapping("/report/create")
+    public McR createReport(@RequestBody JSONObject param){
+        log.info("创建日志:{}",param);
+        McException.assertParamException_Null(param,"template_id","to_chat","dd_from","userid","contents");
+        JSONObject contents=param.getJSONObject("contents");
+        List list=new ArrayList();
+        for(String key:contents.keySet()){
+            list.add(contents.getJSONObject(key));
+        }
+        String result=ddClientReport.createReport(ddClient.getAccessToken(),param.getString("to_userids"),param.getString("to_cids")
+                ,param.getString("template_id"),param.getBoolean("to_chat"),param.getString("dd_from"),param.getString("userid"),
+                list);
+        return McR.success(result);
+    }
+}

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

@@ -44,4 +44,15 @@ public class EastarTbController {
         Map result=eastarTbService.taskStateChange(data.getString("taskIds"),data.getString("tfsName"));
         return McR.success(result);
     }
+
+    /**
+     * 同步任务状态数量
+     */
+    @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"));
+        return McR.success();
+    }
 }

+ 19 - 0
src/main/java/com/malk/eastar/controller/Test2Controller.java

@@ -0,0 +1,19 @@
+package com.malk.eastar.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McR;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/tlb")
+public class Test2Controller {
+
+    @PostMapping("/test")
+    public McR test(@RequestBody String data) {
+        log.info("data:{}",data);
+        return McR.success();
+    }
+
+}

+ 96 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask.java

@@ -0,0 +1,96 @@
+package com.malk.eastar.schedule;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.eastar.service.EastarTbService;
+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.utils.PublicUtil;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask {
+
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private EastarTbService eastarTbService;
+
+    /**
+     */
+    @Scheduled(cron = "0 0 8 * * ?")
+    public void syncMer() {
+        log.info("客户公海同步");
+        try {
+            long endTime= UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().minusDays(30).atTime(LocalTime.MIN));
+            List<Map> list= (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-9261FABA687B4D1D917617F53B4A5DB7UN16").searchCondition(JSONObject.toJSONString(
+                    Arrays.asList(
+                            new YDSearch("radioField_md6q7oxa","私","公私海", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
+                            new YDSearch("radioField_md6q7ox8","新","新老客户", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
+                            new YDSearch("dateField_l3tw3kfn",endTime,"截至跟进时间",YDSearch.Type.DATE_FIELD,YDSearch.Operator.LT)
+                    )
+            )).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+            for(Map map:list){
+                log.info("客户:{}释放为公海", UtilMap.getMap(map,"formData").get("textField_lqanqe6j"));
+                ydClient.operateData(YDParam.builder().formInstId(UtilMap.getString(map,"formInstanceId")).updateFormDataJson(
+                        JSONObject.toJSONString(UtilMap.map("radioField_md6q7oxa, employeeField_lqanqe6n, employeeField_lqx3act6","公","[]","[]"))
+                ).build(), YDConf.FORM_OPERATION.update);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     */
+    @Scheduled(cron = "0 30 6 * * ?")
+    public void syncTaskCount() {
+        log.info("同步任务状态数量");
+        try {
+            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);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+}

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

@@ -9,4 +9,6 @@ public interface EastarTbService {
     Map createTask(String formInstId);
 
     Map taskStateChange(String taskIds,String tfsName);
+
+    void taskCount(String pid,String tbPid,String fid,String taskTypeName);
 }

+ 29 - 1
src/main/java/com/malk/eastar/service/impl/EastarTbServiceImpl.java

@@ -23,6 +23,8 @@ import com.malk.eastar.service.EastarTbService;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.malk.eastar.conf.EastarParam.TFNAME_YDKEY;
+
 @Slf4j
 @Service
 public class EastarTbServiceImpl  implements EastarTbService {
@@ -280,6 +282,27 @@ public class EastarTbServiceImpl  implements EastarTbService {
         return Collections.emptyMap();
     }
 
+    @Override
+    public void taskCount(String pid, String tbPid, String fid, String taskTypeName) {
+        // 1.1循环所有项目
+        // 1.2查询项目的自定义字段
+        List<Map> tidList=tbProject.queryProjectCustomField(tbPid,UtilMap.map("q","项目编号"));
+        String cfId=String.valueOf(tidList.get(0).get("id")); // 项目编号ID
+        // 2.查询该项目的工作流
+        String taskflowId=_getTaskType(tbPid,taskTypeName,"taskflowId"); // 任务工作流ID
+        // 2.1循环工作流所有状态
+        List<Map> tfsList=tbProject.queryProjectCustomFlowStatus(tbPid,"",taskflowId,UtilMap.map("",""));
+        Map updateMap=new HashMap();
+        for(Map map:tfsList){
+            // 3.查询该状态下任务数量
+            String q="tfsId = "+String.valueOf(map.get("id"))+" AND cf:"+cfId+"='"+pid+"'";
+            int count=tbProject.taskCount(tbPid,q,false);
+            log.info("{}阶段数量:{}",map.get("name"),count);
+            updateMap.put(TFNAME_YDKEY.get(map.get("name")),count);
+        }
+        ydClient.operateData(YDParam.builder().formInstId(fid).updateFormDataJson(JSONObject.toJSONString(updateMap)).useLatestFormSchemaVersion(true).build(), YDConf.FORM_OPERATION.update);
+    }
+
     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"));
@@ -316,12 +339,17 @@ public class EastarTbServiceImpl  implements EastarTbService {
     }
 
     String _getTaskType(String projectId, String taskTypeName) {
+        return _getTaskType(projectId,taskTypeName,"id");
+
+    }
+
+    String _getTaskType(String projectId, String taskTypeName,String key) {
 
         List<Map> customFlowStatus = tbProject.queryProjectTaskType(projectId, UtilMap.map("q", taskTypeName));
         // 7.10 避免模糊匹配
         customFlowStatus = customFlowStatus.stream().filter(item -> taskTypeName.equals(UtilMap.getString(item, "name"))).collect(Collectors.toList());
         McException.assertAccessException(customFlowStatus.isEmpty(), "工作流名称未匹配");
-        return String.valueOf(customFlowStatus.get(0).get("id"));
+        return String.valueOf(customFlowStatus.get(0).get(key));
     }
 
     String _getTaskList(String projectId, String taskListName) {

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

@@ -12,9 +12,9 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId: 2691784047
-  appKey: dinghbynhnd2dbgypmsa
-  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  agentId: 3994149360
+  appKey: dinguffyrvb1xi60czgd
+  appSecret: Ivi00_qC6qEh5hDQ3cCzNHEx4gY7Tey3B6vgHiysHDh27ZbMwrnBTv8HfTFdYzhg
   corpId: dingcc1b1ffad0d5ca1d
   aesKey:
   token:

+ 4 - 4
src/main/resources/application-prod.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9900
+  port: 9001
   servlet:
     context-path: /api/eastar
 enable:
@@ -12,9 +12,9 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId: 2691784047
-  appKey: dinghbynhnd2dbgypmsa
-  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  agentId: 3994149360
+  appKey: dinguffyrvb1xi60czgd
+  appSecret: Ivi00_qC6qEh5hDQ3cCzNHEx4gY7Tey3B6vgHiysHDh27ZbMwrnBTv8HfTFdYzhg
   corpId: dingcc1b1ffad0d5ca1d
   aesKey:
   token:

+ 45 - 4
src/test/java/TbTest.java

@@ -6,10 +6,14 @@ import com.malk.eastar.service.EastarTbService;
 import com.malk.eastar.util.ConfigDataProcessor;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
+import com.malk.server.common.McException;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.service.teambition.TBClient_Project;
 import com.malk.service.teambition.TBClient_Task;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilList;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
@@ -20,10 +24,16 @@ import org.springframework.boot.test.context.SpringBootTest;
 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.stream.Collectors;
+
+import static cn.hutool.core.net.MaskBit.get;
+import static com.malk.eastar.conf.EastarParam.TFNAME_YDKEY;
 
 @Slf4j
 @SpringBootTest(classes = LtcEastarApplication.class)
@@ -50,12 +60,43 @@ public class TbTest {
     }
 
     @Autowired
-    private YDService ydService;
+    private TBClient_Project tbProject;
+
+    @Test
+    public void taskCount() {
+        // 1.查询所有项目
+        String pid="Easter-afanda202508200006";
+        String tbPid="68bf81834991ad9a71b1e06a";
+        String fid="18636044-7ba1-4338-b247-0cb769173f9a";
+        eastarTbService.taskCount(pid,tbPid,fid,"完整流程");
+
+    }
+
+
+    @Autowired
+    private YDClient ydClient;
 
     @Test
     public void testYd(){
-        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>>>  map= ConfigDataProcessor.processConfigData(sonConfData);
-        log.info("map:{}",map);
+        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);
+            }
+        }
     }
 }