Explorar el Código

Merge remote-tracking branch 'origin/master'

wzy hace 1 año
padre
commit
9b5128fa35
Se han modificado 42 ficheros con 1293 adiciones y 194 borrados
  1. 13 0
      .gitignore
  2. 17 0
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/controller/KKLController.java
  3. 2 0
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/KKLService.java
  4. 108 63
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/impl/KKLImplService.java
  5. 5 3
      mjava-kuaikeli/src/test/java/com/malk/kuaikeli/DdTest.java
  6. 74 0
      mjava-mc/pom.xml
  7. 19 0
      mjava-mc/src/main/java/com/malk/mc/McApplication.java
  8. 22 0
      mjava-mc/src/main/java/com/malk/mc/config/StartupRunner.java
  9. 45 0
      mjava-mc/src/main/java/com/malk/mc/controller/McProjectController.java
  10. 34 0
      mjava-mc/src/main/java/com/malk/mc/controller/McYdController.java
  11. 16 0
      mjava-mc/src/main/java/com/malk/mc/entity/PocTbTask.java
  12. 17 0
      mjava-mc/src/main/java/com/malk/mc/entity/PocTbUser.java
  13. 21 0
      mjava-mc/src/main/java/com/malk/mc/entity/PocTbWorkTime.java
  14. 68 0
      mjava-mc/src/main/java/com/malk/mc/event/McTbEventImpl.java
  15. 10 0
      mjava-mc/src/main/java/com/malk/mc/mapper/PocTbTaskMapper.java
  16. 10 0
      mjava-mc/src/main/java/com/malk/mc/mapper/PocTbUserMapper.java
  17. 10 0
      mjava-mc/src/main/java/com/malk/mc/mapper/PocTbWorkTimeMapper.java
  18. 9 0
      mjava-mc/src/main/java/com/malk/mc/service/McPocTbService.java
  19. 7 0
      mjava-mc/src/main/java/com/malk/mc/service/McProjectService.java
  20. 96 0
      mjava-mc/src/main/java/com/malk/mc/service/impl/McPocTbServiceImpl.java
  21. 49 0
      mjava-mc/src/main/java/com/malk/mc/service/impl/McProjectServiceImpl.java
  22. 36 0
      mjava-mc/src/main/resources/application-dev.yml
  23. 36 0
      mjava-mc/src/main/resources/application-prod.yml
  24. 17 0
      mjava-mc/src/main/resources/application.yml
  25. 61 0
      mjava-mc/src/main/resources/logback-spring.xml
  26. 38 0
      mjava-mc/src/test/java/com/malk/mc/PocTbTest.java
  27. 19 1
      mjava-pake/pom.xml
  28. 2 0
      mjava-pake/src/main/java/com/malk/pake/PakeApplication.java
  29. 26 0
      mjava-pake/src/main/java/com/malk/pake/controller/PkReportController.java
  30. 58 0
      mjava-pake/src/main/java/com/malk/pake/entity/PkWbcg.java
  31. 17 0
      mjava-pake/src/main/java/com/malk/pake/mapper/PkWbcgMapper.java
  32. 4 4
      mjava-pake/src/main/java/com/malk/pake/schedule/ScheduleTask.java
  33. 14 0
      mjava-pake/src/main/java/com/malk/pake/service/PkWbcgService.java
  34. 31 14
      mjava-pake/src/main/java/com/malk/pake/service/impl/PkDingProcServiceImpl.java
  35. 183 0
      mjava-pake/src/main/java/com/malk/pake/service/impl/PkWbcgServiceImpl.java
  36. 6 0
      mjava-pake/src/main/resources/application-dev.yml
  37. 6 0
      mjava-pake/src/main/resources/application-prod.yml
  38. 3 0
      mjava-pake/src/main/resources/application.yml
  39. 54 0
      mjava-pake/src/main/resources/mapper/SupplierMaterialMapper.xml
  40. 20 0
      mjava-pake/src/test/java/com/malk/pake/DdTest.java
  41. 1 1
      mjava-pake/src/test/java/com/malk/pake/DingTest.java
  42. 9 108
      mjava-pake/src/test/java/com/malk/pake/SlTest.java

+ 13 - 0
.gitignore

@@ -0,0 +1,13 @@
+.idea
+target/
+*.iml
+*/target/
+rebel.xml
+.DS_Store
+.settings
+.project
+.classpath
+*.log
+logs/*
+test/java/*
+.jar

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

@@ -5,6 +5,7 @@ import com.malk.kuaikeli.service.KKLService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
+import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilMap;
 import com.malk.utils.UtilServlet;
 import lombok.extern.slf4j.Slf4j;
@@ -59,6 +60,22 @@ public class KKLController {
         return McR.success();
     }
 
+    /**
+     * 菜单计划审批
+     * -
+     * 通过:数据更新到切配工作单及计划采购单
+     * 拒绝:回退数据到菜单计划
+     */
+    @PostMapping("planApproval")
+    McR planApproval(@RequestBody Map data) {
+        log.info("planApproval, {}", JSON.toJSONString(data));
+        if(PublicUtil.isNull(data,"fid","backFid","results","userId")){
+            return McR.errorNullPointer();
+        }
+        kklService.planApproval(data);
+        return McR.success();
+    }
+
     /**
      * 定价单: 项目点 & 供应商大类, 数据匹配
      */

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

@@ -10,6 +10,8 @@ public interface KKLService {
 
     boolean validateApprove(Map data);
 
+    void planApproval(Map data);
+
     @Async
     void updateState(String id);
 

+ 108 - 63
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/impl/KKLImplService.java

@@ -65,46 +65,75 @@ public class KKLImplService implements KKLService {
      */
     @Override
     public boolean validateApprove(Map data) {
-
-        boolean approve = false;
+        boolean approve =UtilMap.getBoolean(data,"approveFlag");
+//        boolean approve = false;
         List<Map> dataList = UtilMap.getList(data, "list");
-        for (Map row : dataList) {
-
-            // 匹配切配工作单, 采购
-            List<Map> formList = (List<Map>) ydClient.queryData(YDParam.builder()
-                            .formUuid("FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2")
-                            .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lmsuq8am, textField_lm8zta2z, textField_ln1ez5li", data.get("name"), data.get("area"), row.get("textField_ln1ez5li"))))
-                            .build(),
-                    YDConf.FORM_QUERY.retrieve_search_form).getData();
-
-            if (formList.size() == 0) {
-                approve = true;
-                break;
-            }
-            Map formData = (Map) formList.get(0).get("formData");
-            float cur = UtilMap.getFloat(row, "numberField_lmym5628");
-            float src = UtilMap.getFloat(formData, "numberField_lnrkgimz");
-            if (cur > src || (src - cur) / src > 0.2f) {
-                approve = true;
-                break;
-            }
-        }
+//        for (Map row : dataList) {
+//             匹配切配工作单, 采购
+//            List<Map> formList = (List<Map>) ydClient.queryData(YDParam.builder()
+//                            .formUuid("FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2")
+//                            .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lmsuq8am, textField_lm8zta2z, textField_ln1ez5li, textField_llndm599", data.get("name"), data.get("area"), row.get("textField_ln1ez5li"), row.get("textField_llndm599"))))
+//                            .build(),
+//                    YDConf.FORM_QUERY.retrieve_search_form).getData();
+//
+//            if (formList.size() == 0) {
+//                approve = true;// 添加原材料  判断条件是否有对应的切配工作单
+//                break;
+//            }
+//            Map formData = (Map) formList.get(0).get("formData");
+//            float cur = UtilMap.getFloat(row, "numberField_lmym5628");// 计划数量
+//            float src = UtilMap.getFloat(formData, "numberField_lln477o2");// 切配工作单数量
+//            if (cur > src || (src - cur) / src > 0.2f) {
+//                approve = true;
+//                break;
+//            }
+//        }
+        String poid=UtilMap.getString(data,"poid");
         if (approve) {
             // 发起菜单审批
             log.info("发起菜单审批");
+            // 保存数据到备份表单
+            String id=(String) ydService.mirrorFormData(poid,"FORM-1FD63CF820F3444D994F0486CA95F6E6UZ2E","",new HashMap(),"");
+            Map form=UtilMap.getMap(data,"form");
+            form.put("textField_lx2l5l2s",poid);
+            form.put("textField_lx2l5l2t",id);
+            form.put("textField_lx2omku4",data.get("user").toString());
             ydClient.operateData(YDParam.builder()
                     .formUuid("FORM-UP96637100HD036TA1M05B74GHLV3DRS54NLLC")
                     .processCode("TPROC--UP96637100HD036TA1M05B74GHLV3ERS54NLLD")
-                    .formDataJson(JSON.toJSONString(data.get("form"))) // 前端数据组装
+                    .formDataJson(JSON.toJSONString(form)) // 前端数据组装
                     .userId(data.get("user").toString())
                     .build(), YDConf.FORM_OPERATION.start);
+        }else{
+            log.info("未触发审批 执行业务逻辑-编辑前后更新计划采购单");
+            planUpdate(poid,dataList,data.get("user").toString());
         }
-        // 执行业务逻辑-编辑前后更新计划采购单
-        log.info("执行业务逻辑-编辑前后更新计划采购单");
-        planUpdate(UtilMap.getString(data,"poid"),dataList,data.get("user").toString());
         return approve;
     }
 
+    @Override
+    public void planApproval(Map data) {
+        String fid=UtilMap.getString(data,"fid");
+        String backFid=UtilMap.getString(data,"backFid");
+        String results=UtilMap.getString(data,"results");
+        String userId=UtilMap.getString(data,"userId");
+        if(results.equals("通过")){
+            log.info("审批通过 保存变更信息");
+            // 新数据
+            Map formData=(Map) ydClient.queryData(YDParam.builder().formInstId(fid).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            // 旧数据
+            Map backData=(Map) ydClient.queryData(YDParam.builder().formInstId(backFid).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            List<Map> list=UtilMap.getList(backData,"tableField_lln477nw");
+            saveData(list,formData,false,userId);// -
+            list=UtilMap.getList(formData,"tableField_lln477nw");
+            saveData(list,formData,true,userId);// +
+
+        }else{
+            log.info("审批拒绝 还原备份数据");
+            ydService.mirrorFormData(backFid,"FORM-IH966T61XJZDNT4D9N6D189RJ2CK3Q27NZ5ML0","",new HashMap(),fid);
+        }
+    }
+
     @Override
     public void updateState(String id) {
         try {
@@ -121,14 +150,21 @@ public class KKLImplService implements KKLService {
     }
 
     private void planUpdate(String poid,List<Map> dataList,String userId){
-        String formUuid="FORM-XHA66881J8KDA6V3FM6LZBUP9PDE37VESDNLL6";
         Map formData=(Map) ydClient.queryData(YDParam.builder().formInstId(poid).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
         List<Map> list=UtilMap.getList(formData,"tableField_lln477nw");
-        saveData(list,formData,formUuid,false,userId);// -
-        saveData(dataList,formData,formUuid,true,userId);// +
+        saveData(list,formData,false,userId);// -
+        saveData(dataList,formData,true,userId);// +
     }
 
-    private void saveData(List<Map> list,Map formData,String formUuid,boolean isAdd,String userId){
+    /***
+     * 保存数据
+     * @param list true:新数据 false:老数据
+     * @param formData 菜单计划数据
+     * @param isAdd true 加数据 false 减数据
+     * @param userId 新增操作的用户编号
+     */
+    private void saveData(List<Map> list,Map formData,boolean isAdd,String userId){
+        String formUuid="FORM-XHA66881J8KDA6V3FM6LZBUP9PDE37VESDNLL6";// 计划采购单
         for(Map map:list){
             Map queryMap=new HashMap();
             queryMap.put("dateField_llndtdwl", Arrays.asList(map.get("dateField_ln1ez5lg"),map.get("dateField_ln1ez5lg")));// 日期
@@ -165,46 +201,55 @@ public class KKLImplService implements KKLService {
                 Map oldMap=UtilMap.getMap(list2.get(0),"formData");
                 if(isAdd){
                     upMap.put("numberField_lln477o2", NumberUtil.add(UtilMap.getString(oldMap,"numberField_lln477o2"),UtilMap.getString(map,"numberField_lmym5628")));// 初始采购数量(kg)
-                    upMap.put("numberField_lm9008fq", NumberUtil.add(UtilMap.getString(oldMap,("numberField_lm9008fq")),UtilMap.getString(map,("numberField_lmym5628"))));// 实际采购数量(kg)
-                    upMap.put("numberField_lns0dkzv", NumberUtil.add(UtilMap.getString(oldMap,("numberField_lns0dkzv")),UtilMap.getString(map,("numberField_lns0dkzv"))));// 投料数量
-                    upMap.put("numberField_loe04txa",NumberUtil.add(UtilMap.getString(oldMap,"numberField_loe04txa"),UtilMap.getString(map,"numberField_lomyf89l")));// 采购量
+                    upMap.put("numberField_lm9008fq", NumberUtil.add(UtilMap.getString(oldMap,"numberField_lm9008fq"),UtilMap.getString(map,"numberField_lmym5628")));// 实际采购数量(kg)
+                    upMap.put("numberField_lns0dkzv", NumberUtil.add(UtilMap.getString(oldMap,"numberField_lns0dkzv"),UtilMap.getString(map,"numberField_lns0dkzv")));// 投料数量
+                    upMap.put("numberField_loe04txa", NumberUtil.add(UtilMap.getString(oldMap,"numberField_loe04txa"),UtilMap.getString(map,"numberField_lomyf89l")));// 采购量
                 }else {
                     upMap.put("numberField_lln477o2", NumberUtil.sub(UtilMap.getString(oldMap, "numberField_lln477o2"), UtilMap.getString(map, "numberField_lmym5628")));// 初始采购数量(kg)
-                    upMap.put("numberField_lm9008fq", NumberUtil.sub(UtilMap.getString(oldMap, ("numberField_lm9008fq")), UtilMap.getString(map, ("numberField_lmym5628"))));// 实际采购数量(kg)
-                    upMap.put("numberField_lns0dkzv", NumberUtil.sub(UtilMap.getString(oldMap, ("numberField_lns0dkzv")), UtilMap.getString(map, ("numberField_lns0dkzv"))));// 投料数量
-                    upMap.put("numberField_loe04txa",NumberUtil.sub(UtilMap.getString(oldMap,"numberField_loe04txa"),UtilMap.getString(map,"numberField_lomyf89l")));// 采购量
+                    upMap.put("numberField_lm9008fq", NumberUtil.sub(UtilMap.getString(oldMap, "numberField_lm9008fq"), UtilMap.getString(map, "numberField_lmym5628")));// 实际采购数量(kg)
+                    upMap.put("numberField_lns0dkzv", NumberUtil.sub(UtilMap.getString(oldMap, "numberField_lns0dkzv"), UtilMap.getString(map, "numberField_lns0dkzv")));// 投料数量
+                    upMap.put("numberField_loe04txa", NumberUtil.sub(UtilMap.getString(oldMap,"numberField_loe04txa"),UtilMap.getString(map,"numberField_lomyf89l")));// 采购量
                 }
                 ydClient.operateData(YDParam.builder().formInstanceId(UtilMap.getString(list2.get(0),"formInstanceId")).updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
             }
-            if(isAdd){
-                // 保存切配工作单
-                String formUuid2="FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2";
-                Map qMap=new HashMap();
-                qMap.put("textField_lmsuq8am",formData.get("textField_lln477nh"));// 项目编号
-                qMap.put("dateField_llndtdwl",Arrays.asList(map.get("dateField_ln1ez5lg"),map.get("dateField_ln1ez5lg")));// 日期
-                qMap.put("textField_lm8zta2z",formData.get("selectField_llm1i9yl"));// 餐次
-                qMap.put("selectField_lln3lmn5",map.get("textField_lm4m83rv"));// 切配类型
-                qMap.put("textField_llndm599",map.get("textField_llndm599"));// 原材料名称
-                Map addMap=new HashMap();
-                addMap.putAll(qMap);
-                String data=String.valueOf(formData.get("associationFormField_lln477nb_id"));
-                addMap.put("associationFormField_llndtdwg",JSONObject.parseArray(data.substring(1,data.length()-1).replaceAll("\\\\","")));// 项目点
+            String formUuid2="FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2";
+            Map qMap=new HashMap();
+            qMap.put("textField_lmsuq8am",formData.get("textField_lln477nh"));// 项目编号
+            qMap.put("dateField_llndtdwl",Arrays.asList(map.get("dateField_ln1ez5lg"),map.get("dateField_ln1ez5lg")));// 日期
+            qMap.put("textField_lm8zta2z",formData.get("selectField_llm1i9yl"));// 餐次
+            qMap.put("selectField_lln3lmn5",map.get("textField_lm4m83rv"));// 切配类型
+            qMap.put("textField_llndm599",map.get("textField_llndm599"));// 原材料名称
+            Map addMap=new HashMap();
+            addMap.putAll(qMap);
+            String data=String.valueOf(formData.get("associationFormField_lln477nb_id"));
+            addMap.put("associationFormField_llndtdwg",JSONObject.parseArray(data.substring(1,data.length()-1).replaceAll("\\\\","")));// 项目点
+            addMap.put("textField_ln1ez5li",map.get("textField_ln1ez5li"));// 计划日期(文本)
+            addMap.put("dateField_llndtdwl",map.get("dateField_ln1ez5lg"));// 日期
+            List<Map> list3=(List<Map>) ydClient.queryData(YDParam.builder().formUuid(formUuid2).searchFieldJson(JSONObject.toJSONString(qMap)).build(),
+                    YDConf.FORM_QUERY.retrieve_list).getData();
+            if(list3==null||list3.size()<1){
+                if(!isAdd){
+                    log.info("未找到对应的切配工作单,退出");
+                    continue;
+                }
                 addMap.put("numberField_lln477o2",map.get("numberField_lmym5628"));// 数量(kg)
                 addMap.put("numberField_lnrkgimz",map.get("numberField_lomyf89l"));// 初始采购数量
-                addMap.put("textField_ln1ez5li",map.get("textField_ln1ez5li"));// 计划日期(文本)
-                addMap.put("dateField_llndtdwl",map.get("dateField_ln1ez5lg"));// 日期
-                List<Map> list3=(List<Map>) ydClient.queryData(YDParam.builder().formUuid(formUuid2).searchFieldJson(JSONObject.toJSONString(qMap)).build(),
-                        YDConf.FORM_QUERY.retrieve_list).getData();
-                if(list3==null||list3.size()<1){
-                    ydClient.operateData(YDParam.builder().formUuid(formUuid2)
-                            .formDataJson(JSONObject.toJSONString(addMap))
-                            .userId(userId)
-                            .build(), YDConf.FORM_OPERATION.create);
-                }else{
-                    ydClient.operateData(YDParam.builder().formInstanceId(UtilMap.getString(list3.get(0),"formInstanceId"))
-                            .updateFormDataJson(JSONObject.toJSONString(addMap))
-                            .build(), YDConf.FORM_OPERATION.update);
+                ydClient.operateData(YDParam.builder().formUuid(formUuid2)
+                        .formDataJson(JSONObject.toJSONString(addMap))
+                        .userId(userId)
+                        .build(), YDConf.FORM_OPERATION.create);
+            }else{
+                Map oldMap=UtilMap.getMap(list3.get(0),"formData");
+                if(isAdd){
+                    addMap.put("numberField_lln477o2", NumberUtil.add(UtilMap.getString(oldMap,"numberField_lln477o2"),UtilMap.getString(map,"numberField_lmym5628")));// 数量(kg)
+                    addMap.put("numberField_lnrkgimz", NumberUtil.add(UtilMap.getString(oldMap,"numberField_lnrkgimz"),UtilMap.getString(map,"numberField_lomyf89l")));// 初始采购数量
+                }else {
+                    addMap.put("numberField_lln477o2", NumberUtil.sub(UtilMap.getString(oldMap,"numberField_lln477o2"), UtilMap.getString(map, "numberField_lmym5628")));// 数量(kg)
+                    addMap.put("numberField_lnrkgimz", NumberUtil.sub(UtilMap.getString(oldMap,"numberField_lnrkgimz"), UtilMap.getString(map, "numberField_lomyf89l")));// 初始采购数量
                 }
+                ydClient.operateData(YDParam.builder().formInstanceId(UtilMap.getString(list3.get(0),"formInstanceId"))
+                        .updateFormDataJson(JSONObject.toJSONString(addMap))
+                        .build(), YDConf.FORM_OPERATION.update);
             }
         }
     }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 5 - 3
mjava-kuaikeli/src/test/java/com/malk/kuaikeli/DdTest.java


+ 74 - 0
mjava-mc/pom.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version> <!-- 使用最新的稳定版或其他适用版本 -->
+    </parent>
+
+    <groupId>com.malk</groupId>
+    <artifactId>mjava-mc</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>mc</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+
+</project>

+ 19 - 0
mjava-mc/src/main/java/com/malk/mc/McApplication.java

@@ -0,0 +1,19 @@
+package com.malk.mc;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+@MapperScan("com.malk.mc.mapper")
+public class McApplication {
+
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(McApplication.class,args);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+}

+ 22 - 0
mjava-mc/src/main/java/com/malk/mc/config/StartupRunner.java

@@ -0,0 +1,22 @@
+package com.malk.mc.config;
+
+import com.malk.core.McProject;
+import com.malk.mc.service.McProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class StartupRunner implements ApplicationRunner {
+
+    @Autowired
+    private McProjectService mcProjectService;
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        mcProjectService.init();
+//        System.out.println("项目启动完毕,可以根据启动参数执行相应操作!");
+//        args.getOptionNames().forEach(System.out::println); // 打印所有选项参数名
+    }
+}

+ 45 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McProjectController.java

@@ -0,0 +1,45 @@
+package com.malk.mc.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.core.McProject;
+import com.malk.mc.service.McProjectService;
+import com.malk.server.common.McR;
+import com.malk.utils.PublicUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/project/")
+public class McProjectController {
+
+    @Autowired
+    private McProjectService mcProjectService;
+
+    @PostMapping("add")
+    public McR add(@RequestBody JSONObject param){
+        if(PublicUtil.isNull(param,"projectId","appType","systemToken")){
+            return McR.errorNullPointer();
+        }
+        McProject.addYida(param.getString("projectId"),new String[]{param.getString("appType"),param.getString("systemToken")});
+        return McR.success(McProject.getYida(param.getString("projectId")));
+    }
+
+    @GetMapping("queryAll")
+    public McR queryAll(){
+        return McR.success(McProject.getYida());
+    }
+
+    @GetMapping("clear")
+    public McR clear(){
+        McProject.clearYida();
+        return McR.success(McProject.getYida());
+    }
+
+    @GetMapping("init")
+    public McR init(){
+        mcProjectService.init();
+        return McR.success(McProject.getYida());
+    }
+
+
+}

+ 34 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McYdController.java

@@ -0,0 +1,34 @@
+package com.malk.mc.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDService;
+import com.malk.utils.PublicUtil;
+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;
+
+/***
+ * 宜搭服务
+ */
+@RestController
+@RequestMapping("/yd/")
+public class McYdController {
+
+    @Autowired
+    private YDService ydService;
+
+    @PostMapping("copy")
+    public McR copy(@RequestBody JSONObject param){
+        if(PublicUtil.isNull(param,"instanceId","formUuid")){
+            return McR.errorNullPointer();
+        }
+        ydService.mirrorFormData(param.getString("instanceId"),param.getString("formUuid"),param.getString("processCode"),
+                param.getJSONObject("updateData"),param.getString("updateInstanceId"));
+        return McR.success();
+    }
+
+}

+ 16 - 0
mjava-mc/src/main/java/com/malk/mc/entity/PocTbTask.java

@@ -0,0 +1,16 @@
+package com.malk.mc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("poc_tb_task")
+public class PocTbTask {
+
+    @TableId(value = "task_id", type = IdType.INPUT)
+    private String taskId;
+    private String taskName;
+
+}

+ 17 - 0
mjava-mc/src/main/java/com/malk/mc/entity/PocTbUser.java

@@ -0,0 +1,17 @@
+package com.malk.mc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("poc_tb_user")
+public class PocTbUser {
+
+    @TableId(value = "tb_user_id", type = IdType.INPUT)
+    private String tbUserId;
+    private String ddUserId;
+    private String userName;
+
+}

+ 21 - 0
mjava-mc/src/main/java/com/malk/mc/entity/PocTbWorkTime.java

@@ -0,0 +1,21 @@
+package com.malk.mc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("poc_tb_work_time")
+public class PocTbWorkTime {
+
+    @TableId(value = "id", type = IdType.INPUT)
+    String id;
+    String taskId;
+    String userId;
+    String workTime;
+    String description;
+    String createdAt;
+    String workData;
+
+}

+ 68 - 0
mjava-mc/src/main/java/com/malk/mc/event/McTbEventImpl.java

@@ -0,0 +1,68 @@
+package com.malk.mc.event;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.delegate.TBEvent;
+import com.malk.mc.service.McPocTbService;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Primary
+@Service
+@Slf4j
+public class McTbEventImpl implements TBEvent {
+
+    @Autowired
+    private McPocTbService mcPocTbService;
+
+
+    @Override
+    public void callBackTask(JSONObject eventJson) {
+
+    }
+
+    @Override
+    public void callBackProject(JSONObject eventJson) {
+
+    }
+
+    @Async
+    @Override
+    public void callBackWorktime(JSONObject eventJson) {
+        String orgId = eventJson.getString("orgId");
+        JSONObject data=eventJson.getJSONObject("data");
+        if(orgId.equals("6034c885e71842e1e5bb5218")){
+            // poc
+            mcPocTbService.saveWorkTimes(data.getString("taskId"),data.getString("executorId"), UtilMap.getList(data,"workTimeIds"));
+        }
+    }
+
+    // {
+    //    "eventId": "6671330be541008d302bbf11",
+    //    "resourceId": "",
+    //    "data": {
+    //        "created": "2024-06-18T07:11:07.671Z",
+    //        "dates": [
+    //            "2024-06-18T00:00:00.000Z"
+    //        ],
+    //        "executorId": "616fb6f78ad4104a10515809",
+    //        "id": "6671330b546ad300120e4c5c",
+    //        "organizationId": "6034c885e71842e1e5bb5218",
+    //        "taskId": "665ee80a57df029b4375c6de",
+    //        "updated": "2024-06-18T07:11:07.671Z",
+    //        "userId": "616fb6f78ad4104a10515809",
+    //        "workTime": 7200000,
+    //        "workTimeIds": [
+    //            "6671330b546ad300120e4c5c"
+    //        ]
+    //    },
+    //    "hookId": "65b37d9bfd71812b35f89aa4",
+    //    "event": "worktime.create",
+    //    "category": "",
+    //    "orgId": "6034c885e71842e1e5bb5218",
+    //    "timestamp": 1718694667768
+    // }
+}

+ 10 - 0
mjava-mc/src/main/java/com/malk/mc/mapper/PocTbTaskMapper.java

@@ -0,0 +1,10 @@
+package com.malk.mc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.mc.entity.PocTbTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PocTbTaskMapper extends BaseMapper<PocTbTask> {
+
+}

+ 10 - 0
mjava-mc/src/main/java/com/malk/mc/mapper/PocTbUserMapper.java

@@ -0,0 +1,10 @@
+package com.malk.mc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.mc.entity.PocTbUser;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PocTbUserMapper extends BaseMapper<PocTbUser> {
+
+}

+ 10 - 0
mjava-mc/src/main/java/com/malk/mc/mapper/PocTbWorkTimeMapper.java

@@ -0,0 +1,10 @@
+package com.malk.mc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.mc.entity.PocTbWorkTime;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PocTbWorkTimeMapper extends BaseMapper<PocTbWorkTime> {
+
+}

+ 9 - 0
mjava-mc/src/main/java/com/malk/mc/service/McPocTbService.java

@@ -0,0 +1,9 @@
+package com.malk.mc.service;
+
+import java.util.List;
+
+public interface McPocTbService {
+
+    void saveWorkTimes(String taskId,String userId,List<String> ids);
+
+}

+ 7 - 0
mjava-mc/src/main/java/com/malk/mc/service/McProjectService.java

@@ -0,0 +1,7 @@
+package com.malk.mc.service;
+
+public interface McProjectService {
+
+    void init();
+
+}

+ 96 - 0
mjava-mc/src/main/java/com/malk/mc/service/impl/McPocTbServiceImpl.java

@@ -0,0 +1,96 @@
+package com.malk.mc.service.impl;
+
+import cn.hutool.core.util.NumberUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.mc.entity.PocTbTask;
+import com.malk.mc.entity.PocTbWorkTime;
+import com.malk.mc.mapper.PocTbTaskMapper;
+import com.malk.mc.mapper.PocTbUserMapper;
+import com.malk.mc.mapper.PocTbWorkTimeMapper;
+import com.malk.mc.service.McPocTbService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.teambition.TBClient;
+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.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Slf4j
+public class McPocTbServiceImpl implements McPocTbService {
+
+    @Autowired
+    private TBClient tbClient;
+    @Autowired
+    private PocTbWorkTimeMapper pocTbWorkTimeMapper;
+    @Autowired
+    private PocTbTaskMapper pocTbTaskMapper;
+    @Autowired
+    private PocTbUserMapper pocTbUserMapper;
+    @Autowired
+    private YDClient ydClient;
+
+    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
+    private SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @Override
+    public void saveWorkTimes(String taskId, String userId, List<String> ids) {
+        Map task=tbClient.queryTaskDetail(taskId,"","").get(0);
+        String projectId=UtilMap.getString(task,"projectId");
+        if(!projectId.equals("66124f3f6f4d77e0259b40d5")){
+            return;
+        }
+        PocTbTask pocTbTask=pocTbTaskMapper.selectById(taskId);
+        if(pocTbTask==null){
+            pocTbTask=new PocTbTask();
+            pocTbTask.setTaskId(taskId);
+            pocTbTask.setTaskName(UtilMap.getString(task,"content"));
+            pocTbTaskMapper.insert(pocTbTask);
+        }
+        String ddUserId = pocTbUserMapper.selectById(userId).getDdUserId();
+        for(String id:ids){
+            Map map=tbClient.queryWorktime(id);
+            PocTbWorkTime pocTbWorkTime=new PocTbWorkTime();
+            pocTbWorkTime.setId(id);
+            pocTbWorkTime.setUserId(userId);
+            pocTbWorkTime.setTaskId(taskId);
+            pocTbWorkTime.setDescription(UtilMap.getString(map,"description"));
+            pocTbWorkTime.setWorkTime(UtilMap.getString(map,"worktime"));
+            pocTbWorkTime.setCreatedAt(timeFormat(UtilMap.getString(map,"createdAt")));
+            String workData=timeFormat(UtilMap.getString(map,"date"));
+            pocTbWorkTime.setWorkData(workData.split(" ")[0]);
+            pocTbWorkTimeMapper.insert(pocTbWorkTime);
+            Map data=new HashMap();
+            data.put("employeeField_lxk6f7i2", Arrays.asList(ddUserId));//
+            data.put("dateField_lxk6f7i3", UtilDateTime.getLocalDateTimeTimeStamp(UtilDateTime.parseLocalDateTime(workData)));//
+            data.put("textField_lxk6f7i5",pocTbTask.getTaskName());//
+            data.put("numberField_lxk6f7i4", NumberUtil.div(pocTbWorkTime.getWorkTime(),"3600000"));//
+            data.put("textareaField_lxk6f7i6",pocTbWorkTime.getDescription());//
+            ydClient.operateData(YDParam.builder().formUuid("FORM-EDFDBFBE08F149AAB4FD7A9BA00FAFD8DQER").formDataJson(JSONObject.toJSONString(data)).build(), YDConf.FORM_OPERATION.create);
+        }
+    }
+
+    private String timeFormat(String startDate){
+        String result = "";
+        Date rwStateTime = null;
+        if (startDate == null) {
+            System.out.println("该项目没有获取到任务开始时间!");
+        } else {
+            startDate = startDate.replace("Z", " UTC");
+            try {
+                rwStateTime = format.parse(startDate);
+                result = defaultFormat.format(rwStateTime);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return result;
+    }
+}

+ 49 - 0
mjava-mc/src/main/java/com/malk/mc/service/impl/McProjectServiceImpl.java

@@ -0,0 +1,49 @@
+package com.malk.mc.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.core.McProject;
+import com.malk.mc.service.McProjectService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class McProjectServiceImpl implements McProjectService {
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Override
+    public void init() {
+        int i=0;
+        int t=1;
+        Map<String, String[]> data = new HashMap();
+        do {
+            i++;
+            DDR_New projectData = ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-7ACBE9705A034ED2B19397A883781175LQWH")
+                    .pageNumber(i)
+                    .build(), YDConf.FORM_QUERY.retrieve_list);
+            if(i==1){
+                t=Integer.parseInt(String.valueOf((projectData.getTotalCount()/YDConf.PAGE_SIZE_LIMIT)))+1;
+            }
+            List<Map> dataList = (List<Map>) projectData.getData();
+            for (Map map:dataList){
+                Map formData=UtilMap.getMap(map,"formData");
+                data.put(UtilMap.getString(formData,"serialNumberField_lxlfw7nn"),new String[]{UtilMap.getString(formData,"textField_lxlfw7no"),UtilMap.getString(formData,"textField_lxlfw7np")});
+            }
+        }while (i<t);
+        McProject.insertYida(data);
+        log.info("项目加载完毕:{}",data.keySet());
+    }
+}

+ 36 - 0
mjava-mc/src/main/resources/application-dev.yml

@@ -0,0 +1,36 @@
+server:
+  port: 9900
+  servlet:
+    context-path: /api/mc
+spring:
+  datasource:
+    url: jdbc:mysql://47.97.181.40:3306/mc?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
+    username: root
+    password: cp-root@2022++
+    driver-class-name: com.mysql.cj.jdbc.Driver
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/mc/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 2691784047
+  appKey: dinghbynhnd2dbgypmsa
+  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  corpId: dingcc1b1ffad0d5ca1d
+  aesKey:
+  token:
+# teambition
+teambition:
+  AppID: 65956b5dd0ac095d62d0e592
+  AppSecret: gjQUoqKa1PHjTiyQFFuachfqKPyNeacA
+  TenantId: 6034c885e71842e1e5bb5218
+  OperatorId: 616fb6f78ad4104a10515809    # 公共账号, 需要有操作权限 [牧语]
+# aliwork
+aliwork:
+  appType: APP_HZ5V1PF2YGBIUCIYOSI5
+  systemToken: DIC66I91HJ3MWKL3FAQ5UD46GIR129PR66KXLA

+ 36 - 0
mjava-mc/src/main/resources/application-prod.yml

@@ -0,0 +1,36 @@
+server:
+  port: 9900
+  servlet:
+    context-path: /api/mc
+spring:
+  datasource:
+    url: jdbc:mysql://127.0.0.1:3306/mc?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
+    username: root
+    password: cp-root@2022++
+    driver-class-name: com.mysql.cj.jdbc.Driver
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/mc/log/
+  level:
+    com.malk.*: info
+
+# dingtalk
+dingtalk:
+  agentId: 2691784047
+  appKey: dinghbynhnd2dbgypmsa
+  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  corpId: dingcc1b1ffad0d5ca1d
+  aesKey:
+  token:
+# teambition
+teambition:
+  AppID: 65956b5dd0ac095d62d0e592
+  AppSecret: gjQUoqKa1PHjTiyQFFuachfqKPyNeacA
+  TenantId: 6034c885e71842e1e5bb5218
+  OperatorId: 616fb6f78ad4104a10515809    # 公共账号, 需要有操作权限 [牧语]
+# aliwork
+aliwork:
+  appType: APP_HZ5V1PF2YGBIUCIYOSI5
+  systemToken: DIC66I91HJ3MWKL3FAQ5UD46GIR129PR66KXLA

+ 17 - 0
mjava-mc/src/main/resources/application.yml

@@ -0,0 +1,17 @@
+spring:
+  profiles:
+    active: dev
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  http:
+    enabled: false
+mybatis-plus:
+  mappers-locations: mapper/*.xml
+  type-aliases-package: com.malk.mc.entity
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    db-config:
+      id-type: auto

+ 61 - 0
mjava-mc/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.zitoo.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 38 - 0
mjava-mc/src/test/java/com/malk/mc/PocTbTest.java

@@ -0,0 +1,38 @@
+package com.malk.mc;
+
+import com.malk.mc.entity.PocTbUser;
+import com.malk.mc.mapper.PocTbUserMapper;
+import com.malk.mc.service.McPocTbService;
+import com.malk.service.teambition.TBClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class PocTbTest {
+
+    @Autowired
+    private McPocTbService mcPocTbService;
+    @Autowired
+    private TBClient tbClient;
+
+    @Autowired
+    private PocTbUserMapper pocTbUserMapper;
+
+    @Test
+    public void test() {
+        mcPocTbService.saveWorkTimes("665ee80a57df029b4375c6de","616fb6f78ad4104a10515809", Arrays.asList("6671330b546ad300120e4c5c"));
+    }
+
+}

+ 19 - 1
mjava-pake/pom.xml

@@ -27,7 +27,25 @@
         <dependency>
             <groupId>com.malk</groupId>
             <artifactId>base</artifactId>
-            <version>1.0-SNAPSHOT</version>
+            <version>1.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.32</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
 
         <!--钉钉相关-->

+ 2 - 0
mjava-pake/src/main/java/com/malk/pake/PakeApplication.java

@@ -1,9 +1,11 @@
 package com.malk.pake;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication(scanBasePackages = {"com.malk"})
+@MapperScan("com.malk.pake.mapper")
 public class PakeApplication {
 
     public static void main(String[] args) {

+ 26 - 0
mjava-pake/src/main/java/com/malk/pake/controller/PkReportController.java

@@ -0,0 +1,26 @@
+package com.malk.pake.controller;
+
+import com.malk.pake.service.PkWbcgService;
+import com.malk.server.common.McR;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/report")
+public class PkReportController {
+
+    @Autowired
+    private PkWbcgService pkWbcgService;
+
+    @GetMapping("/wbcg/list")
+    public McR addProject(String dept1,String dept2){
+        List<Map> result= pkWbcgService.selectSumDataList(dept1,dept2);
+        return McR.success(result);
+    }
+
+}

+ 58 - 0
mjava-pake/src/main/java/com/malk/pake/entity/PkWbcg.java

@@ -0,0 +1,58 @@
+package com.malk.pake.entity;
+
+import cn.hutool.core.util.NumberUtil;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.malk.utils.UtilMap;
+import lombok.Data;
+
+/***
+ * 外部采购
+ */
+@Data
+@TableName(value = "pake_wbcg")
+public class PkWbcg {
+
+    @TableId
+    private String name;
+
+    private String no;
+    private String subject;
+    private String dept1;
+    private String dept2;
+    private String amt1;
+    private String amt2;
+    private String amt3;
+    private String amt4;
+    private String amt5;
+    private String amt6;
+    private String amt7;
+    private String amt8;
+    private String amt9;
+    private String amt10;
+    private String amt11;
+    private String amt12;
+    private String total;
+    private String ysamt1;
+    private String ysamt2;
+    private String ysamt3;
+    private String ysamt4;
+    private String ysamt5;
+    private String ysamt6;
+    private String ysamt7;
+    private String ysamt8;
+    private String ysamt9;
+    private String ysamt10;
+    private String ysamt11;
+    private String ysamt12;
+    private String ystotal;
+    private String ndystotal;
+
+    public PkWbcg(String no,String subject,String dept1,String dept2){
+        this.no=no;
+        this.subject=subject;
+        this.dept1=dept1;
+        this.dept2=dept2;
+        this.name=no.concat("-").concat(dept1).concat("-").concat(dept2);
+    }
+}

+ 17 - 0
mjava-pake/src/main/java/com/malk/pake/mapper/PkWbcgMapper.java

@@ -0,0 +1,17 @@
+package com.malk.pake.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.pake.entity.PkWbcg;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+@Mapper
+public interface PkWbcgMapper extends BaseMapper<PkWbcg> {
+
+    List<Map> selectSumDataList(@Param("dept1")String dept1, @Param("dept2")String dept2);
+}

+ 4 - 4
mjava-pake/src/main/java/com/malk/pake/schedule/ScheduleTask.java

@@ -31,7 +31,7 @@ public class ScheduleTask {
      * 工时填写提醒-按月
      * 每月5-8号10:00提醒一次
      */
-    @Scheduled(cron = "0 0 10 5-8 * ?")
+    @Scheduled(cron = "0 2 10 5-8 * ?")
     public void fillInReminderMonth() {
         log.info("工时填写提醒-按月");
         try {
@@ -45,7 +45,7 @@ public class ScheduleTask {
      * 工时填写提醒-按天
      * 每日10:00提醒一次
      */
-    @Scheduled(cron = "0 0 10 * * ?")
+    @Scheduled(cron = "0 2 10 * * ?")
     public void fillInReminderDay() {
         log.info("工时填写提醒-按天");
         try {
@@ -65,7 +65,7 @@ public class ScheduleTask {
      * 工时填写提醒-指定人员
      * 每月3-4号10:00提醒一次
      */
-    @Scheduled(cron = "0 0 10 3-4 * ?")
+    @Scheduled(cron = "0 2 10 3-4 * ?")
     public void fillInReminderPeople() {
         log.info("工时填写提醒-指定人员");
         try {
@@ -79,7 +79,7 @@ public class ScheduleTask {
      * 工程维保项目-维保预警
      * 每天10:00重新计算维保剩余天数及变更维保预警状态,根据状态发送提醒
      */
-    @Scheduled(cron = "0 0 10 * * ?")
+    @Scheduled(cron = "0 2 10 * * ?")
     public void maintenanceWarning() {
         log.info("工程维保项目-维保预警");
         try {

+ 14 - 0
mjava-pake/src/main/java/com/malk/pake/service/PkWbcgService.java

@@ -0,0 +1,14 @@
+package com.malk.pake.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PkWbcgService {
+
+    List<Map> selectSumDataList(String dept1,String dept2);
+
+    void syncData(String id);
+
+    void syncYsData();
+
+}

+ 31 - 14
mjava-pake/src/main/java/com/malk/pake/service/impl/PkDingProcServiceImpl.java

@@ -53,38 +53,51 @@ public class PkDingProcServiceImpl implements PkDingProcService {
             Map ccMap=ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(),String.valueOf(cc.get("procInstId")));
             Map ccRule=new HashMap();
             ccRule.put("TableField_GN1B25VL6PKW","detail");// 费用报销类型
+            ccRule.put("DDSelectField-KDCL0BQO","ccType");//
             Map ccData=getData(ccMap,ccRule);
             log.info("ccData:{}",ccData);
             List<Map> table=JSONObject.parseArray(UtilMap.getString(UtilMap.getMap(ccData,"detail"),"value"),Map.class);
             if(table==null||table.size()<1){
                 return;
             }
+            String ccType=UtilMap.getString(ccData,"ccType");
+            if(!ccType.equals("项目费用")){
+                return;
+            }
             List<Map> detail=UtilMap.getList(table.get(0),"rowValue");
             Optional optional = detail.stream().filter(item -> "DDSelectField-KDCL1UD0".equals(item.get("key"))).findAny();
             projectId=((JSONObject) optional.get()).getJSONObject("extendValue").getString("codeName");
         }else{
             rule.put("TableField_VXS0O5SIYUPS","detail");// 报销明细
+            rule.put("DDSelectField_12JKA5S3V6P6O","fycc");// 费用出处
+            rule.put("TextField_1EWZ8SATVB280","projectId");
             data=getData(map,rule);
             log.info("data:{}",data);
-            List<Map> table=JSONObject.parseArray(UtilMap.getString(UtilMap.getMap(data,"detail"),"value"),Map.class);
-            if(table==null||table.size()<1){
-                return;
-            }
-            List<Map> detail=UtilMap.getList(table.get(0),"rowValue");
-            Optional optional = detail.stream().filter(item -> "DDSelectField_GEABKH83MMO0".equals(item.get("key"))).findAny();
-            String isProject=((JSONObject) optional.get()).getString("value");
-            if(!"是".equals(isProject)){
+            String fycc=UtilMap.getString(data,"fycc");
+            if(!fycc.equals("项目费用")){
                 return;
             }
-            log.info("detail:{}",detail);
-            Optional optional1 = detail.stream().filter(item -> "FormRelateField_319R30PPM0W0".equals(item.get("key"))).findAny();
-            List<Map> projects=((JSONObject) optional1.get()).getJSONObject("extendValue").getJSONArray("list")
-                    .getJSONObject(0).getJSONArray("rowValue").toJavaList(Map.class);
-            Optional optional3 = projects.stream().filter(item -> "TextField-K2AD4O5B".equals(item.get("key"))).findAny();
-            projectId=((JSONObject) optional3.get()).getString("value");
+            projectId=UtilMap.getString(data,"projectId");
+//            List<Map> table=JSONObject.parseArray(UtilMap.getString(UtilMap.getMap(data,"detail"),"value"),Map.class);
+//            if(table==null||table.size()<1){
+//                return;
+//            }
+//            List<Map> detail=UtilMap.getList(table.get(0),"rowValue");
+//            Optional optional = detail.stream().filter(item -> "DDSelectField_GEABKH83MMO0".equals(item.get("key"))).findAny();
+//            String isProject=((JSONObject) optional.get()).getString("value");
+//            if(!"是".equals(isProject)){
+//                return;
+//            }
+//            log.info("detail:{}",detail);
+//            Optional optional1 = detail.stream().filter(item -> "FormRelateField_319R30PPM0W0".equals(item.get("key"))).findAny();
+//            List<Map> projects=((JSONObject) optional1.get()).getJSONObject("extendValue").getJSONArray("list")
+//                    .getJSONObject(0).getJSONArray("rowValue").toJavaList(Map.class);
+//            Optional optional3 = projects.stream().filter(item -> "TextField-K2AD4O5B".equals(item.get("key"))).findAny();
+//            projectId=((JSONObject) optional3.get()).getString("value");
         }
         List<Map> list=UtilMap.getList(JSONObject.parseObject(UtilMap.getString(UtilMap.getMap(data,"detail"),"extValue")),"statValue");
         if(list!=null&&list.size()>0){
+            log.info("projectId:{},type:{},amt:{}",projectId,String.valueOf(data.get("type")),String.valueOf(list.get(0).get("num")));
             syncYida(projectId,String.valueOf(data.get("type")),String.valueOf(list.get(0).get("num")));
             log.info("同步完成!");
         }else{
@@ -112,6 +125,10 @@ public class PkDingProcServiceImpl implements PkDingProcService {
     }
 
     private void syncYida(String projectId,String type,String amt){
+        if(PublicUtil.isNull(projectId)||PublicUtil.isNull(type)||PublicUtil.isNull(amt)){
+            log.error("有空数据退出");
+            return;
+        }
         List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-NO96679107GDYGUK9SM8T42G95KA2KZOMUELL4")
                 .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_llemcq7d", projectId))).build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
         if(list==null||list.size()<1){

+ 183 - 0
mjava-pake/src/main/java/com/malk/pake/service/impl/PkWbcgServiceImpl.java

@@ -0,0 +1,183 @@
+package com.malk.pake.service.impl;
+
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ReflectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.entity.PkWbcg;
+import com.malk.pake.mapper.PkWbcgMapper;
+import com.malk.pake.service.PkWbcgService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+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.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class PkWbcgServiceImpl implements PkWbcgService {
+
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private PkWbcgMapper pkWbcgMapper;
+
+    private static List<configDto> config2;
+
+    {
+        config2=new ArrayList<>();
+        // 类型   金额  一级部门 二级部门
+        config2.add(new configDto("01","第三方采购","textField_40lr8u5","textField_qpi47c5","textField_iqu0lt4"));
+        config2.add(new configDto("02","代运营保底赔付","textField_4ja4exh","默认",""));
+        config2.add(new configDto("02","代运营保底赔付","textField_9lolz7t","全国营销中心","河北办事处"));
+        config2.add(new configDto("02","代运营保底赔付","textField_mchzg5g","全国营销中心","新疆办事处"));
+        config2.add(new configDto("02","代运营保底赔付","textField_uh7xzvp","全国营销中心","浙江办事处"));
+        config2.add(new configDto("02","代运营保底赔付","textField_u9ezpca","全国营销中心","销售与解决方案事业部"));
+        config2.add(new configDto("02","代运营保底赔付","textField_1q1mngd","全国营销中心","驻地运营事业部"));
+
+        config2.add(new configDto("03","内容成本","textField_yskuizk","textField_n6dgais","textField_nywps4o&&textField_cq3wrgw"));
+        config2.add(new configDto("04","渠道成本","textField_0p6725u","textField_niydh0v","textField_cq3wrgw"));
+        config2.add(new configDto("05","版权赔付","textField_7z9umea","textField_n6dgais","textField_cq3wrgw"));
+        config2.add(new configDto("06","项目专线、IDC租赁","textField_o7hrwxq","textField_niydh0v","textField_nywps4o&&textField_cq3wrgw"));
+        config2.add(new configDto("07","中标服务费","textField_rl6bu4e","textField_niydh0v","textField_nywps4o"));
+        config2.add(new configDto("08","经营性固定资产采购","textField_zkp9rt7","textField_qpi47c5","textField_iqu0lt4"));
+        config2.add(new configDto("09","研发设备采购费","textField_f4hxczh","textField_bs5acse","textField_absucq7"));
+        config2.add(new configDto("10","研发软件及服务采购","textField_vh8bd91","textField_r391zwq","textField_4kzpuqt"));
+        config2.add(new configDto("11","投流成本","textField_6fykj0t","textField_pr7mh62","textField_2hpmihn"));
+    }
+
+    private class configDto{
+        public String id;
+        public String key;
+        public String key2;
+        public String key3;
+        public String key4;
+        public configDto(String key,String key2){
+            this.key=key;
+            this.key2=key2;
+        }
+        public configDto(String id,String key,String key2,String key3,String key4){
+            this.id=id;
+            this.key=key;
+            this.key2=key2;
+            this.key3=key3;
+            this.key4=key4;
+        }
+    }
+
+    @Override
+    public List<Map> selectSumDataList(String dept1, String dept2) {
+        return pkWbcgMapper.selectSumDataList(dept1,dept2);
+    }
+
+    @Override
+    public void syncData(String id) {
+        Map<String,Object> data =ydClient.queryData(YDParam.builder().formInstId(id).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        LocalDateTime localDateTime= UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(data,"dateField_cs14yue"));
+        int month=localDateTime.getMonthValue();
+        for(configDto configDto:config2){
+            String amt="";
+            if(configDto.key2.contains("&&")){
+                String[] keys=configDto.key2.split("&&");
+                for (int i = 0; i < keys.length; i++) {
+                    amt= NumberUtil.add(UtilMap.getNumberStr(data,keys[i]),amt).toString();
+                }
+            }else{
+                amt=UtilMap.getNumberStr(data,configDto.key2);
+            }
+            String dept1,dept2;
+            if(configDto.key3.contains("textField")){
+                if(configDto.key3.contains("&&")){
+                    String[] keys=configDto.key3.split("&&");
+                    String[] values=new String[keys.length];
+                    for (int i = 0; i < keys.length; i++) {
+                        values[i]=UtilMap.getString(data,keys[i]);
+                    }
+                    dept1=String.join(",", values);
+                }else{
+                    dept1=UtilMap.getString(data,configDto.key3);
+                }
+            }else{
+                dept1=configDto.key3;
+            }
+            if(configDto.key4.contains("textField")){
+                if(configDto.key4.contains("&&")){
+                    String[] keys=configDto.key4.split("&&");
+                    String[] values=new String[keys.length];
+                    for (int i = 0; i < keys.length; i++) {
+                        values[i]=UtilMap.getString(data,keys[i]);
+                    }
+                    dept2=String.join(",", values);
+                }else{
+                    dept2=UtilMap.getString(data,configDto.key4);
+                }
+            }else{
+                dept2=configDto.key4;
+            }
+            PkWbcg pkWbcg=new PkWbcg(configDto.id,configDto.key,dept1,dept2);
+            save(pkWbcg,"setAmt".concat(String.valueOf(month)),amt,"setTotal");
+        }
+        System.out.println("处理完成");
+    }
+
+    @Override
+    public void syncYsData() {
+        for(configDto configDto:config2) {
+            List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-2172522109C047D9AC18A872ED2FCD792YMZ")
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_b3run5c, selectField_m7qqwok", "外部采购",configDto.key)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+            for (int i = 0; i < list.size(); i++) {
+                log.info("处理进度:{}/{}", i + 1, list.size());
+                Map data = list.get(i);
+                String dept1=UtilMap.getString(data,"textField_67lf04e");
+                String dept2=UtilMap.getString(data,"textField_vco7vnl");
+                String amt=UtilMap.getString(data,"numberField_397v7ux");
+                PkWbcg pkWbcg = new PkWbcg(configDto.id, configDto.key, dept1, dept2);
+                if(PublicUtil.isNull(data,"dateField_w3yecdm")){
+                    // 年度预算
+                    save(pkWbcg,amt);
+                }else{
+                    LocalDateTime localDateTime = UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(data, "dateField_w3yecdm"));
+                    String amtMethodName= "setYsamt".concat(String.valueOf(localDateTime.getMonthValue()));
+                    save(pkWbcg, amtMethodName, amt, "setYstotal");
+                }
+            }
+        }
+        System.out.println("处理完成");
+    }
+
+    private void save(PkWbcg pkWbcg,String amtMethodName,String amt,String totalMethodName){
+        PkWbcg data=pkWbcgMapper.selectById(pkWbcg.getName());
+        if(data==null){
+            ReflectUtil.invoke(pkWbcg,amtMethodName,amt);
+            ReflectUtil.invoke(pkWbcg,totalMethodName,amt);
+            pkWbcgMapper.insert(pkWbcg);
+        }else{
+            String newAmt=NumberUtil.add(ReflectUtil.invoke(data,amtMethodName.replace("set","get")),amt).toString();
+            String totalAmt=NumberUtil.add(ReflectUtil.invoke(data,totalMethodName.replace("set","get")),amt).toString();
+            ReflectUtil.invoke(data,amtMethodName,newAmt);
+            ReflectUtil.invoke(data,totalMethodName,totalAmt);
+            pkWbcgMapper.updateById(data);
+        }
+    }
+
+    private void save(PkWbcg pkWbcg,String ndysAmt){
+        PkWbcg data=pkWbcgMapper.selectById(pkWbcg.getName());
+        if(data==null){
+            ReflectUtil.invoke(pkWbcg,"setNdystotal",ndysAmt);
+            pkWbcgMapper.insert(pkWbcg);
+        }else{
+            String totalAmt=NumberUtil.add(ReflectUtil.invoke(data,"getNdystotal"),ndysAmt).toString();
+            ReflectUtil.invoke(data,"setNdystotal",totalAmt);
+            pkWbcgMapper.updateById(data);
+        }
+    }
+}

+ 6 - 0
mjava-pake/src/main/resources/application-dev.yml

@@ -2,6 +2,12 @@ server:
   port: 8104
   servlet:
     context-path: /pake
+spring:
+  datasource:
+    url: jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=GMT%2B8
+    username: root
+    password: cp-root@2022++
+    driver-class-name: com.mysql.cj.jdbc.Driver
 enable:
   scheduling: false
 logging:

+ 6 - 0
mjava-pake/src/main/resources/application-prod.yml

@@ -2,6 +2,12 @@ server:
   port: 8104
   servlet:
     context-path: /pake
+spring:
+  datasource:
+      url: jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=GMT%2B8
+      username: root
+      password: cp-root@2022++
+      driver-class-name: com.mysql.cj.jdbc.Driver
 enable:
   scheduling: true
 logging:

+ 3 - 0
mjava-pake/src/main/resources/application.yml

@@ -7,6 +7,9 @@ spring:
       max-request-size: 100MB
   http:
     enabled: false
+mybatis-plus:
+  mappers-locations: mapper/*.xml
+  type-aliases-package: com.malk.pake.entity
   global-config:
     db-config:
       id-type: auto

+ 54 - 0
mjava-pake/src/main/resources/mapper/SupplierMaterialMapper.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.malk.pake.mapper.PkWbcgMapper">
+
+    <select id="selectSumDataList" resultType="java.util.Map" parameterType="java.lang.String">
+          SELECT
+            `SUBJECT`,
+            ROUND(SUM(amt1),2) amt1,
+            ROUND(SUM(amt2),2) amt2,
+            ROUND(SUM(amt3),2) amt3,
+            ROUND(SUM(amt4),2) amt4,
+            ROUND(SUM(amt5),2) amt5,
+            ROUND(SUM(amt6),2) amt6,
+            ROUND(SUM(amt7),2) amt7,
+            ROUND(SUM(amt8),2) amt8,
+            ROUND(SUM(amt9),2) amt9,
+            ROUND(SUM(amt10),2) amt10,
+            ROUND(SUM(amt11),2) amt11,
+            ROUND(SUM(amt12),2) amt12,
+            ROUND(SUM(total),2) total,
+            ROUND(SUM(ysamt1),2) ysamt1,
+            ROUND(SUM(ysamt2),2) ysamt2,
+            ROUND(SUM(ysamt3),2) ysamt3,
+            ROUND(SUM(ysamt4),2) ysamt4,
+            ROUND(SUM(ysamt5),2) ysamt5,
+            ROUND(SUM(ysamt6),2) ysamt6,
+            ROUND(SUM(ysamt7),2) ysamt7,
+            ROUND(SUM(ysamt8),2) ysamt8,
+            ROUND(SUM(ysamt9),2) ysamt9,
+            ROUND(SUM(ysamt10),2) ysamt10,
+            ROUND(SUM(ysamt11),2) ysamt11,
+            ROUND(SUM(ysamt12),2) ysamt12,
+            ROUND(SUM(ystotal),2) ystotal,
+            ROUND(SUM(ndystotal),2) ndystotal
+        FROM
+            `pake_wbcg`
+        <where>
+            <if test="dept1 != null and dept1 != ''">
+                AND dept1 LIKE '%' #{dept1} '%'
+            </if>
+            <if test="dept1 == null || dept1 == ''">
+                AND (dept1="默认" || `no` !="02")
+            </if>
+            <if test="dept2 != null and dept2 != ''">
+                AND dept2 LIKE '%' #{dept2} '%'
+            </if>
+        </where>
+        GROUP BY
+            `no`,`SUBJECT`
+        ORDER BY `no`
+    </select>
+</mapper>

+ 20 - 0
mjava-pake/src/test/java/com/malk/pake/DdTest.java

@@ -3,9 +3,11 @@ package com.malk.pake;
 import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.malk.core.McProject;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilMap;
@@ -13,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.checkerframework.checker.units.qual.A;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -31,6 +34,23 @@ public class DdTest {
 
     @Autowired
     private YDClient ydClient;
+    @Autowired
+    private YDService ydService;
+
+    @Test
+    public void te(){
+//        MDC.put("MDC_KEY_PID","1001");
+//        McProject.addYida("1001","APP_FTJYB2MKWHXQAFBCZB47,K7D66L91A44LPGKP70LJ8DY05VJT262JR47WLQ8C".split(","));
+//        ydService.mirrorFormData("4e6d34ba-b297-43cf-8c3e-463d76c16892","FORM-79DD3E6855BA4B7B93807F32DF4ADD076QQV","",UtilMap.map("textField_lxb9mj4b","111"),"");
+
+        List<String> ids=FileUtil.readLines("/home/ids.txt","utf-8");
+
+        int i = 0;
+        for (int t = 0; i < ids.size()/300; i++) {
+            ydClient.operateData(YDParam.builder().formInstanceIdList(ids.subList(i*300,(i+1)*300)).formUuid("FORM-223E89E230F3488885A7BEB44352A9C06HZ5").build(), YDConf.FORM_OPERATION.delete_batch);
+        }
+        ydClient.operateData(YDParam.builder().formInstanceIdList(ids.subList(i*300,ids.size())).formUuid("FORM-223E89E230F3488885A7BEB44352A9C06HZ5").build(), YDConf.FORM_OPERATION.delete_batch);
+    }
 
     @Test
     public void nullData(){

+ 1 - 1
mjava-pake/src/test/java/com/malk/pake/DingTest.java

@@ -46,7 +46,7 @@ public class DingTest {
 
     @Test
     public void test(){
-        pkDingProcService.syncAmt("yAO7UGNwRlqIIIufoVhXJg06821716431500");
+        pkDingProcService.syncAmt("Agt9MobvR-ubwYeGd14fmA06821717753263");
 //        System.out.println("hello");
     }
 

+ 9 - 108
mjava-pake/src/test/java/com/malk/pake/SlTest.java

@@ -1,30 +1,15 @@
 package com.malk.pake;
 
-import cn.hutool.core.util.NumberUtil;
-import com.alibaba.fastjson.JSONObject;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.dingtalk.DDClient;
-import com.malk.service.dingtalk.DDClient_Alibtrip;
-import com.malk.utils.PublicUtil;
-import com.malk.utils.UtilDateTime;
-import com.malk.utils.UtilMap;
-import lombok.Data;
+import cn.hutool.core.io.FileUtil;
+import com.malk.pake.service.PkWbcgService;
 import lombok.extern.slf4j.Slf4j;
-import netscape.javascript.JSObject;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 @Slf4j
 @SpringBootTest
@@ -32,99 +17,15 @@ import java.util.Map;
 public class SlTest {
 
     @Autowired
-    private YDClient ydClient;
-
-    private static List<configDto> config;
-    private static List<configDto> config2;
-
-    {
-        config=new ArrayList<>();
-        // 实际   预算
-        config.add(new configDto("numberField_lwswoudr","numberField_lwswouds"));
-        config.add(new configDto("numberField_lwswoudt","numberField_lwswoueo"));
-        config.add(new configDto("numberField_lwswoue6","numberField_lwswouez"));
-        config.add(new configDto("numberField_lwswoue7","numberField_lwswouf0"));
-        config.add(new configDto("numberField_lwswoue8","numberField_lwswouf1"));
-        config.add(new configDto("numberField_lwswoue9","numberField_lwswouf2"));
-        config.add(new configDto("numberField_lwswouea","numberField_lwswouf3"));
-        config.add(new configDto("numberField_lwswoueb","numberField_lwswouf5"));
-        config.add(new configDto("numberField_lwswouec","numberField_lwswouf7"));
-        config.add(new configDto("numberField_lwswoued","numberField_lwswouf9"));
-        config.add(new configDto("numberField_lwswouee","numberField_lwswoufb"));
-        config.add(new configDto("numberField_lwswouef","numberField_lwswoufd"));
-
-        config2=new ArrayList<>();
-        // 类型   金额  一级部门 二级部门
-        config2.add(new configDto("100","第三方采购","textField_40lr8u5","textField_qpi47c5","textField_iqu0lt4"));
-        config2.add(new configDto("200","代运营保底赔付","textField_4ja4exh","",""));
-        config2.add(new configDto("201","代运营保底赔付","textField_4ja4exh","",""));
-        config2.add(new configDto("300","内容成本","textField_yskuizk","textField_n6dgais","textField_nywps4o&&textField_cq3wrgw"));
-        config2.add(new configDto("400","渠道成本","textField_0p6725u","textField_niydh0v","textField_cq3wrgw"));
-        config2.add(new configDto("500","版权赔付","textField_7z9umea","textField_n6dgais","textField_cq3wrgw"));
-        config2.add(new configDto("600","项目专线、IDC租赁","textField_o7hrwxq","textField_niydh0v","textField_nywps4o&&textField_cq3wrgw"));
-        config2.add(new configDto("700","中标服务费","textField_rl6bu4e","textField_niydh0v","textField_nywps4o"));
-        config2.add(new configDto("800","经营性固定资产采购","textField_zkp9rt7","textField_qpi47c5","textField_iqu0lt4"));
-        config2.add(new configDto("900","研发设备采购费","textField_f4hxczh","textField_bs5acse","textField_absucq7"));
-        config2.add(new configDto("1000","研发软件及服务采购","textField_vh8bd91","textField_r391zwq","textField_4kzpuqt"));
-        config2.add(new configDto("1100","投流成本","textField_6fykj0t","textField_pr7mh62","textField_2hpmihn"));
-    }
-
-    private class configDto{
-        public String id;
-        public String key;
-        public String key2;
-        public String key3;
-        public String key4;
-        public configDto(String key,String key2){
-            this.key=key;
-            this.key2=key2;
-        }
-        public configDto(String id,String key,String key2,String key3,String key4){
-            this.id=id;
-            this.key=key;
-            this.key2=key2;
-            this.key3=key3;
-            this.key4=key4;
-        }
-    }
+    private PkWbcgService pkWbcgService;
 
     @Test
     public void test(){
-        Map data =ydClient.queryData(YDParam.builder().formInstId("FINST-II966NA1L6ILZK9FEVQUNC9LJZ7K2RN315QWL741").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
-        System.out.println(data);
-        LocalDateTime localDateTime= UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(data,"dateField_cs14yue"));
-        int month=localDateTime.getMonthValue();
-        for(configDto configDto:config2){
-            String amt=UtilMap.getString(data,configDto.key2);
-            syncYida(configDto.id,configDto.key,config.get(month).key,amt,"numberField_lwswoufl");// 实际;预算:numberField_lwswoufm
-        }
-        System.out.println("处理完成");
+//        List<String> list= FileUtil.readLines("/home/ids.txt","utf-8");
+//        for (int i = 0; i < list.size(); i++) {
+//            log.info("处理进度:{}/{}",i+1,list.size());
+//            pkWbcgService.syncData(list.get(i));
+//        }
+        pkWbcgService.syncYsData();
     }
-
-    private void syncYida(String id,String type,String amtKey,String amt,String totalKey){
-        Map map1=new HashMap();
-        map1.put("textField_lwu9zcqh",id);
-        map1.put("textField_lwswoudn",type);
-        map1.put(amtKey,amt);
-        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-486A690141BD41E29C47355F79E5137CLTO2")
-                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_lwu9zcqh", type))).build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
-        if(list==null||list.size()<1){
-            map1.put(totalKey,amt);// 汇总
-            ydClient.operateData(YDParam.builder()
-                    .formUuid("FORM-486A690141BD41E29C47355F79E5137CLTO2")
-                    .formDataJson(JSONObject.toJSONString(map1))
-                    .build(), YDConf.FORM_OPERATION.create);
-        }else{
-            Map map=list.get(0);
-            Map formData=UtilMap.getMap(map,"formData");
-            map.put(amtKey, NumberUtil.add(UtilMap.getString(formData,(amtKey)),amt));
-            map.put(totalKey, NumberUtil.add(UtilMap.getString(formData,(totalKey)),amt));
-            ydClient.operateData(YDParam.builder().formInstId("FORM-486A690141BD41E29C47355F79E5137CLTO2")
-                    .updateFormDataJson(JSONObject.toJSONString(map))
-                    .build(), YDConf.FORM_OPERATION.update);
-        }
-    }
-
-
-
 }