lfx před 1 rokem
rodič
revize
798c2c4ad5

+ 0 - 28
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/schedule/TestTask.java

@@ -1,28 +0,0 @@
-package com.malk.kuaikeli.schedule;
-
-import com.malk.service.dingtalk.DDClient;
-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.LocalDateTime;
-
-@Slf4j
-@Configuration
-@EnableScheduling
-@ConditionalOnProperty(name = {"enable.scheduling"})
-public class TestTask {
-
-    @Autowired
-    private DDClient ddClient;
-
-    @Scheduled(cron = "0/5 * * * * ?")
-    public void sync(){
-//        String accessToken = ddClient.getAccessToken();
-        System.out.println(LocalDateTime.now());
-    }
-
-}

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

@@ -112,7 +112,7 @@ public class KKLImplService implements KKLService {
      */
     @Override
     @SneakyThrows
-//    @Synchronized
+    @Synchronized
     public void serviceRate(Map data) {
 
         // todo: 宜搭更新,校验的超时等待在3s, 因此方法修改为异步. 容错定时任务?匹配不一致数据

+ 25 - 12
mjava-kuaikeli/src/test/java/com/malk/kuaikeli/DdTest.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.HashMap;
 import java.util.Map;
 
 @Slf4j
@@ -37,22 +38,22 @@ public class DdTest {
 
     @Test
     public void test(){
-//        Map form = ydClient.queryData(YDParam.builder()
+        Map form = ydClient.queryData(YDParam.builder()
 //                .appType("APP_K8EYBJO1GLUWYIXT12DI")
 //                .systemToken("7C766871QS1GIKQ68SWX0BS71RSZ1LONSB2PLA")
-//                .formInstanceId(String.valueOf("0b8d83d3-65e8-47ce-94f0-5ac326ec7992"))
-//                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
-//        System.out.println(JSONObject.toJSONString(form));
-        ydClient.operateData(YDParam.builder()
-                        .appType("APP_YSEVMCWNRJAKT4X1HRWZ")
-                .systemToken("TL7661A1OXSJJ5EI6EPT36859MJT383P9MGUL25")
-                .formUuid("FORM-430FF05A3B89497D9AFE0D89660E1E34HKQ5")
-                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_lvm4l2i7","1001")))
-                .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_lvm4l2i7, textField_lvm4l2i8, textField_lvm4o3p9","1001","张三", RandomUtil.randomString(10))))
-                .build(), YDConf.FORM_OPERATION.upsert);
+                .formInstanceId(String.valueOf("FINST-87D66K71SITKC3IR638H7B7ZNYG83GWMS3WVL5CE1"))
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        System.out.println(JSONObject.toJSONString(form));
+//        ydClient.operateData(YDParam.builder()
+//                        .appType("APP_YSEVMCWNRJAKT4X1HRWZ")
+//                .systemToken("TL7661A1OXSJJ5EI6EPT36859MJT383P9MGUL25")
+//                .formUuid("FORM-430FF05A3B89497D9AFE0D89660E1E34HKQ5")
+//                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_lvm4l2i7","1001")))
+//                .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_lvm4l2i7, textField_lvm4l2i8, textField_lvm4o3p9","1001","张三", RandomUtil.randomString(10))))
+//                .build(), YDConf.FORM_OPERATION.upsert);
     }
 
-    String aa="{\"code\":\"GYS-20240429-014\",\"proCode\":\"XM-20240429-015\",\"rate\":\"[\\\"10\\\",\\\"10\\\",\\\"10\\\",\\\"10\\\"]\",\"rate2\":\"[\\\"10\\\",\\\"10\\\",\\\"10\\\",\\\"10\\\"]\",\"proName\":\"测试项目案例\",\"type\":\"[\\\"猪肉类\\\",\\\"冷冻肉类制品\\\",\\\"叶菜类\\\",\\\"水果\\\"]\",\"status\":\"[\\\"已启用\\\",\\\"已启用\\\",\\\"已启用\\\",\\\"已启用\\\"]\"}";
+    String aa="{\"code\":\"GYS-20240508-015\",\"proCode\":\"XM-20240508-017\",\"rate\":\"[\\\"35\\\",\\\"35\\\",\\\"35\\\",\\\"35\\\",\\\"35\\\"]\",\"rate2\":\"[\\\"35\\\",\\\"35\\\",\\\"35\\\",\\\"35\\\",\\\"35\\\"]\",\"proName\":\"联发芯项目2\",\"type\":\"[\\\"叶菜类\\\",\\\"菌类\\\",\\\"茄果类\\\",\\\"瓜类\\\",\\\"其他蔬菜\\\"]\",\"status\":\"[\\\"已启用\\\",\\\"已启用\\\",\\\"已启用\\\",\\\"已启用\\\",\\\"已启用\\\"]\"}";
 
     @Test
     public void tt(){
@@ -65,4 +66,16 @@ public class DdTest {
             e.printStackTrace();
         }
     }
+
+    @Test
+    public void kklTest(){
+        Map form = ydClient.queryData(YDParam.builder()
+                .formInstanceId(String.valueOf("FINST-87D66K71SITKC3IR638H7B7ZNYG83GWMS3WVL5CE1"))
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        Map data=new HashMap();
+        data.put("name",form.get("textField_lln477nh"));
+        data.put("area",form.get("selectField_llm1i9yl"));
+        data.put("list",form.get("tableField_lln477nw"));
+        kklService.validateApprove(data);
+    }
 }

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

@@ -0,0 +1,74 @@
+package com.malk.pake.schedule;
+
+import cn.hutool.http.HttpUtil;
+import com.malk.pake.service.PkWorkingHoursService;
+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.format.DateTimeFormatter;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask {
+
+    @Autowired
+    private PkWorkingHoursService pkWorkingHoursService;
+
+    /**
+     * 工时填写提醒-按月
+     * 每月5-8号10:00提醒一次
+     */
+    @Scheduled(cron = "0 0 10 5-8 * ?")
+    public void fillInReminderMonth() {
+        log.info("工时填写提醒-按月");
+        try {
+            pkWorkingHoursService.fillInReminderMonth();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 工时填写提醒-按天
+     * 每日10:00提醒一次
+     */
+    @Scheduled(cron = "0 0 10 * * ?")
+    public void fillInReminderDay() {
+        log.info("工时填写提醒-按天");
+        try {
+            String result= HttpUtil.get("https://tool.bitefu.net/jiari/?d=".concat(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
+            if(result.equals("0")){
+                // 工作日
+                pkWorkingHoursService.fillInReminderDay();
+            }else{
+                log.info("周末或休息日,不提醒。接口返回:{}",result);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 工时填写提醒-指定人员
+     * 每月3-4号10:00提醒一次
+     */
+    @Scheduled(cron = "0 0 10 3-4 * ?")
+    public void fillInReminderPeople() {
+        log.info("工时填写提醒-指定人员");
+        try {
+            pkWorkingHoursService.fillInReminderPeople();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 11 - 0
mjava-pake/src/main/java/com/malk/pake/service/PkWorkingHoursService.java

@@ -0,0 +1,11 @@
+package com.malk.pake.service;
+
+public interface PkWorkingHoursService {
+
+    void fillInReminderMonth();
+
+    void fillInReminderDay();
+
+    void fillInReminderPeople();
+
+}

+ 133 - 0
mjava-pake/src/main/java/com/malk/pake/service/impl/PkWorkingHoursServiceImpl.java

@@ -0,0 +1,133 @@
+package com.malk.pake.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.service.PkWorkingHoursService;
+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.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Notice;
+import com.malk.utils.UtilEnv;
+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.LocalDate;
+import java.time.ZoneOffset;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class PkWorkingHoursServiceImpl implements PkWorkingHoursService {
+
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private DDClient_Notice ddClient_notice;
+    @Autowired
+    private YDClient ydClient;
+
+    private static String FORM_UUID="FORM-F50C31C6F5F34955870B2454275C7846TNPF";
+    private static String NOTICE_MONTH="请及时填写上月工时!";
+    private static String NOTICE_DAY="请及时填写今日工时!";
+    private static String NOTICE_PEOPLE="请及时上传工时填写人员实际出勤时长!";
+
+    @Override
+    public void fillInReminderMonth() {
+        Long lastMonth= LocalDate.now().minusMonths(1).withDayOfMonth(1).atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+        int i=0;
+        long total;
+        do {
+            i++;
+            DDR_New ddr_new = ydClient.queryData(YDParam.builder().formUuid(FORM_UUID).pageNumber(i)
+                            .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_lvyvp4ab", "按月"))).build(),
+                    YDConf.FORM_QUERY.retrieve_list);
+            List<Map> list =(List<Map>) ddr_new.getData();
+            total=ddr_new.getTotalCount();
+            log.info("数量,{}",list.size());
+            for (Map map:list){
+                Map formData=UtilMap.getMap(map,"formData");
+                log.info("formData:{}",formData);
+                String url=UtilMap.getString(formData,"textField_lvyvp4at");
+                List<String> users=UtilMap.getList(formData,"employeeField_lvyvp4a9_id");
+                // 判断是否填写
+                List<Map> list2 =(List<Map>) ydClient.queryData(YDParam.builder().formUuid(url.substring(url.indexOf("FORM-"),url.indexOf("?")))
+                                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("employeeField_ls2x7t46, dateField_ls2x7t40", users.get(0),Arrays.asList(lastMonth,lastMonth)))).build(),
+                        YDConf.FORM_QUERY.retrieve_list).getData();
+                if(list2.size()>0){
+                    log.info("{}已填写,跳过",formData.get("employeeField_lvyvp4a9"));
+                    continue;
+                }
+                sendNotice(users,NOTICE_MONTH,url);
+            }
+        }while (i*100<total);
+    }
+
+    @Override
+    public void fillInReminderDay() {
+        Long now= LocalDate.now().atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+        int i=0;
+        long total;
+        do {
+            i++;
+            DDR_New ddr_new = ydClient.queryData(YDParam.builder().formUuid(FORM_UUID).pageNumber(i)
+                            .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_lvyvp4ab", "按天"))).build(),
+                    YDConf.FORM_QUERY.retrieve_list);
+            List<Map> list =(List<Map>) ddr_new.getData();
+            total=ddr_new.getTotalCount();
+            log.info("数量,{}",list.size());
+            for (Map map:list){
+                Map formData=UtilMap.getMap(map,"formData");
+                log.info("formData:{}",formData);
+                String url=UtilMap.getString(formData,"textField_lvyvp4at");
+                List<String> users=UtilMap.getList(formData,"employeeField_lvyvp4a9_id");
+                // 判断是否填写
+                List<Map> list2 =(List<Map>) ydClient.queryData(YDParam.builder().formUuid(url.substring(url.indexOf("FORM-"),url.indexOf("?")))
+                                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("employeeField_lrhjd0eq, dateField_lrhl6dm1", users.get(0),Arrays.asList(now,now)))).build(),
+                        YDConf.FORM_QUERY.retrieve_list).getData();
+                if(list2.size()>0){
+                    log.info("{}已填写,跳过",formData.get("employeeField_lvyvp4a9"));
+                    continue;
+                }
+                sendNotice(users,NOTICE_DAY,url);
+            }
+        }while (i*100<total);
+    }
+
+    @Override
+    public void fillInReminderPeople() {
+        Long lastMonth= LocalDate.now().minusMonths(1).withDayOfMonth(1).atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+        List<Map> list2 =(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-275444E476654714A0B8E5AC8EDC2735LDZK")
+                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("dateField_ls72x2hs", Arrays.asList(lastMonth,lastMonth)))).build(),
+                YDConf.FORM_QUERY.retrieve_list).getData();
+        log.info("数量,{}",list2.size());
+        if(list2.size()>0){
+            log.info("已填写,跳过");
+            return;
+        }
+        // 指定接收人员 陈柳润[17101209603456094]
+        sendNotice(Arrays.asList("17101209603456094"),NOTICE_PEOPLE,"https://bmogyb.aliwork.com/APP_UNSAR4O4Y7NBDUYXLIP4/submission/FORM-275444E476654714A0B8E5AC8EDC2735LDZK?corpid=ding2ef56b69014fbfec35c2f4657eb6378f");
+    }
+
+
+    private void sendNotice(List<String> users,String msg,String url){
+        if(!UtilEnv.ENV_PROD.equals(UtilEnv.getActiveProfile())){
+            log.info("非生产环境,消息转发到开发人员。应收到人员列表:{}",users);
+            users=Arrays.asList("153620324221442254");
+        }
+        Map linkMap=new HashMap();
+        linkMap.put("messageUrl",url);
+        linkMap.put("picUrl","@lALOACZwe2Rk");
+        linkMap.put("title","工时填写提醒");
+        linkMap.put("text",msg);
+        Map msgMap=new HashMap();
+        msgMap.put("msgtype","link");
+        msgMap.put("link",linkMap);
+        ddClient_notice.sendNotification(ddClient.getAccessToken(),users,null,false,msgMap);
+    }
+}

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

@@ -12,9 +12,9 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId:
-  appKey: dingn3i8b1htbuealing
-  appSecret: yrKb6sUl2sAT0YoQJ-1us1xYY9AWR4RG5RLlBA1Uaz1cVsbbfwcklVxVTeyDa1y_
+  agentId: 2691784047
+  appKey: dinghbynhnd2dbgypmsa # dingn3i8b1htbuealing
+  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq #yrKb6sUl2sAT0YoQJ-1us1xYY9AWR4RG5RLlBA1Uaz1cVsbbfwcklVxVTeyDa1y_
   corpId:
   aesKey:
   token:

+ 236 - 6
mjava-pake/src/test/java/com/malk/pake/DdTest.java

@@ -1,17 +1,29 @@
 package com.malk.pake;
 
+import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
 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.utils.PublicUtil;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
 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.time.ZoneOffset;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Slf4j
 @SpringBootTest
 @RunWith(SpringRunner.class)
@@ -20,14 +32,232 @@ public class DdTest {
     @Autowired
     private YDClient ydClient;
 
+    @Test
+    public void nullData(){
+        List<String> list=FileUtil.readLines("/home/ids.txt","utf-8");
+        for (int i = 0; i < list.size(); i++) {
+            log.info("处理进度:{}/{}",i+1,list.size());
+            String[] str=list.get(i).split("###");
+            String month=str[0].split("-")[1];
+            String id=str[1];
+            Long date=LocalDate.of(2024,Integer.parseInt(month),1).atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(id)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("dateField_ls2x7t40", date)))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+    }
+
+    // 处理数据
+    @Test
+    public void test3(){
+        List<String> list=FileUtil.readLines("/home/ids.txt","utf-8");
+        int i=1;
+        for (String id:list){
+            log.info("处理进度:{}/{}",i,list.size());
+            i++;
+            Map formData =ydClient.queryData(YDParam.builder()
+                    .formInstanceId(id)
+                    .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            Map mainData=new HashMap();
+            mainData.put("textField_lvw66i56",id);
+            mainData.put("selectField_lvw57eo9","成都慧享工时");
+            mainData.put("departmentSelectField_ls2x7t47",formData.get("departmentSelectField_ls2x7t47_id"));
+            mainData.put("employeeField_ls2x7t46",formData.get("employeeField_ls2x7t46_id"));
+            mainData.put("dateField_ls2x7t40",formData.get("dateField_ls2x7t40"));// 月份
+            mainData.put("dateField_lvw40y8e","");// 日期
+            // 项目
+            List<Map> list1=UtilMap.getList(formData,"tableField_ls30qr4f");
+            for (Map map:list1){
+                if(PublicUtil.isNull(map,"textField_ls30qr4a")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","项目");
+                data.put("textField_lrpt148q",map.get("textField_ls30qr4a"));
+                data.put("selectField_lrhiklat",map.get("selectField_luwcwjak"));
+                data.put("numberField_lrhiklas",map.get("numberField_ltqveodc"));
+                saveData(data);
+            }
+            // 商机
+            List<Map> list2=UtilMap.getList(formData,"tableField_lts9jusn");
+            for (Map map:list2){
+                if(PublicUtil.isNull(map,"textField_lts9jush")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","商机");
+                data.put("textField_lrpt148q",map.get("textField_lts9jush"));
+                data.put("selectField_lrhiklat",map.get("selectField_luwcwjal"));
+                data.put("numberField_lrhiklas",map.get("numberField_lts9jusl"));
+                saveData(data);
+            }
+            // 产品
+            List<Map> list3=UtilMap.getList(formData,"tableField_lvvpxztg");
+            for (Map map:list3){
+                if(PublicUtil.isNull(map,"textField_lvvpxzt9")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","产品");
+                data.put("textField_lrpt148q",map.get("textField_lvvpxzt9"));
+                data.put("selectField_lrhiklat",map.get("selectField_lvvpxztb"));
+                data.put("numberField_lrhiklas",map.get("numberField_lvvpxzte"));
+                saveData(data);
+            }
+            // 其他
+            List<Map> list4=UtilMap.getList(formData,"tableField_ls30qr4m");
+            for (Map map:list4){
+                if(PublicUtil.isNull(map,"textField_luwcwjap")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","其他");
+                data.put("textField_lrpt148q",map.get("textField_luwcwjap"));
+                data.put("selectField_lrhiklat",map.get("selectField_luwcwjao"));
+                data.put("numberField_lrhiklas",map.get("numberField_ltqveodd"));
+                saveData(data);
+            }
+        }
+    }
+
+    // 处理数据
+    @Test
+    public void test2(){
+        List<String> list=FileUtil.readLines("/home/ids.txt","utf-8");
+        int i=1;
+        for (String id:list){
+            log.info("处理进度:{}/{}",i,list.size());
+            i++;
+            Map formData =ydClient.queryData(YDParam.builder()
+                    .formInstanceId(id)
+                    .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            Map mainData=new HashMap();
+            mainData.put("textField_lvw66i56",id);
+            mainData.put("selectField_lvw57eo9","运营相关工时");
+            mainData.put("departmentSelectField_ls2x7t47",formData.get("departmentSelectField_ls2x7t47_id"));
+            mainData.put("employeeField_ls2x7t46",formData.get("employeeField_ls2x7t46_id"));
+            mainData.put("dateField_ls2x7t40",formData.get("dateField_ls2x7t40"));// 月份
+            mainData.put("dateField_lvw40y8e","");// 日期
+            // 项目
+            List<Map> list1=UtilMap.getList(formData,"tableField_ls30qr4f");
+            for (Map map:list1){
+                if(PublicUtil.isNull(map,"textField_ls30qr4a")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","项目");
+                data.put("textField_lrpt148q",map.get("textField_ls30qr4a"));
+                data.put("selectField_lrhiklat","");
+                data.put("numberField_lrhiklas",map.get("numberField_lt6zyzpg"));
+                saveData(data);
+            }
+            // 其他
+            List<Map> list3=UtilMap.getList(formData,"tableField_ls30qr4m");
+            for (Map map:list3){
+                if(PublicUtil.isNull(map,"textField_lrsvczk1")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","其他");
+                data.put("textField_lrpt148q","");
+                data.put("selectField_lrhiklat","");
+                data.put("numberField_lrhiklas",map.get("numberField_lt6zyzph"));
+                saveData(data);
+            }
+            // 计费点
+            List<Map> list4=UtilMap.getList(formData,"tableField_ls2x7t4g");
+            for (Map map:list4){
+                if(PublicUtil.isNull(map,"textField_ls2x7t4a")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","计费点");
+                data.put("textField_lrpt148q",map.get("textField_ls2x7t4a"));
+                data.put("selectField_lrhiklat","");
+                data.put("numberField_lrhiklas",map.get("numberField_lt6zyzpf"));
+                saveData(data);
+            }
+        }
+    }
 
     @Test
-    public void test(){
-        JSONArray data = (JSONArray) ydClient.queryData(YDParam.builder()
-                .formUuid("FORM-XN966G71JIOCJM8O9D2YVDJZNMVC2SYBNECKLE")
-                .pageSize(1)
-                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
-        System.out.println(JSONObject.toJSONString(data));
+    public void test1(){
+        List<String> list=FileUtil.readLines("/home/ids.txt","utf-8");
+        int i=1;
+        for (String id:list){
+            log.info("处理进度:{}/{}",i,list.size());
+            i++;
+            Map formData =ydClient.queryData(YDParam.builder()
+                    .formInstanceId(id)
+                    .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            Map mainData=new HashMap();
+            mainData.put("textField_lvw66i56",id);
+            mainData.put("selectField_lvw57eo9","项目/研发/产品/运维工时");
+            mainData.put("departmentSelectField_ls2x7t47",formData.get("departmentSelectField_lrhjd0ep_id"));
+            mainData.put("employeeField_ls2x7t46",formData.get("employeeField_lrhjd0eq_id"));
+            mainData.put("dateField_ls2x7t40",formData.get("dateField_luuynvj8"));// 月份
+            mainData.put("dateField_lvw40y8e",formData.get("dateField_lrhl6dm1"));// 日期
+            // 项目
+            List<Map> list1=UtilMap.getList(formData,"tableField_lrhiklaq");
+            for (Map map:list1){
+                if(PublicUtil.isNull(map,"textField_lrpt148q")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","项目");
+                data.put("textField_lrpt148q",map.get("textField_lrpt148q"));
+                data.put("selectField_lrhiklat",map.get("selectField_lrhiklat"));
+                data.put("numberField_lrhiklas",map.get("numberField_lrhiklas"));
+                saveData(data);
+            }
+            // 产品
+            List<Map> list2=UtilMap.getList(formData,"tableField_lrhjxup8");
+            for (Map map:list2){
+                if(PublicUtil.isNull(map,"textField_lrpt148r")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","产品");
+                data.put("textField_lrpt148q",map.get("textField_lrpt148r"));
+                data.put("selectField_lrhiklat",map.get("selectField_lrhjxup6"));
+                data.put("numberField_lrhiklas",map.get("numberField_lrhjxup5"));
+                saveData(data);
+            }
+            // 其他
+            List<Map> list3=UtilMap.getList(formData,"tableField_lrhjxupf");
+            for (Map map:list3){
+                if(PublicUtil.isNull(map,"textField_lrsvczk1")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","其他");
+                data.put("textField_lrpt148q",map.get("textField_lrsvczk1"));
+                data.put("selectField_lrhiklat",map.get("selectField_lrhjxupd"));
+                data.put("numberField_lrhiklas",map.get("numberField_lrhjxupc"));
+                saveData(data);
+            }
+            // 计费点
+            List<Map> list4=UtilMap.getList(formData,"tableField_lrhjxupm");
+            for (Map map:list4){
+                if(PublicUtil.isNull(map,"textField_lrpt148s")){
+                    continue;
+                }
+                Map data=new HashMap(mainData);
+                data.put("selectField_lvw57eo7","计费点");
+                data.put("textField_lrpt148q",map.get("textField_lrpt148s"));
+                data.put("selectField_lrhiklat",map.get("selectField_lrhjxupk"));
+                data.put("numberField_lrhiklas",map.get("numberField_lrhjxupj"));
+                saveData(data);
+            }
+        }
     }
 
+    private void saveData(Map data){
+        ydClient.operateData(YDParam.builder()
+                .formUuid("FORM-223E89E230F3488885A7BEB44352A9C06HZ5")
+                .formDataJson(JSONObject.toJSONString(data))
+                .userId(String.valueOf(UtilMap.getList(data,"employeeField_ls2x7t46").get(0)))
+                .build(), YDConf.FORM_OPERATION.create);
+    }
 }

+ 33 - 0
mjava-pake/src/test/java/com/malk/pake/WorkingHoursTest.java

@@ -0,0 +1,33 @@
+package com.malk.pake;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.service.PkWorkingHoursService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+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.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class WorkingHoursTest {
+
+    @Autowired
+    private PkWorkingHoursService pkWorkingHoursService;
+
+    @Test
+    public void test(){
+        pkWorkingHoursService.fillInReminderPeople();
+    }
+}