lfx 6 ヶ月 前
コミット
d89f35fa78

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

@@ -47,7 +47,7 @@ public class McTbEventImpl implements TBEvent {
         JSONObject data=eventJson.getJSONObject("data");
         if(orgId.equals("6034c885e71842e1e5bb5218")){
             // poc
-            mcPocTbService.saveWorkTimes(data.getString("taskId"),data.getString("executorId"), UtilMap.getList(data,"workTimeIds"));
+            mcPocTbService.saveWorkTimes(data.getString("taskId"),data.getString("userId"), UtilMap.getList(data,"workTimeIds"));
         }
     }
 

+ 26 - 8
mjava-mc/src/main/java/com/malk/mc/service/impl/McYdServiceImpl.java

@@ -152,8 +152,8 @@ public class McYdServiceImpl implements McYdService {
     public McR convertSubTableNumber(Map map) {
         String formInstId = getString(map.get("formInstId"));
         String tableField = getString(map.get("tableField"));
-        String numberFieldCode = getString(map.get("numFileCode"));
-        String textFieldCode = getString(map.get("textFieldCode"));
+        String numberFieldCode = getString(map.get("numFileCodes"));
+        String textFieldCode = getString(map.get("textFieldCodes"));
 
         if (Strings.isNotBlank(formInstId)){
             DDR_New ddrNew = ydClient.queryData(YDParam.builder()
@@ -162,13 +162,31 @@ public class McYdServiceImpl implements McYdService {
             Map formData = ddrNew.getFormData();
             List<Map> table = (List<Map>) formData.get(tableField);
             for (Map item : table) {
-                BigDecimal number = (BigDecimal) item.get(numberFieldCode);
-                // 创建一个 DecimalFormat 实例,指定千位分隔符模式
-                DecimalFormat df = new DecimalFormat("#,###.00");
+                String[] numberFieldCodes=numberFieldCode.split(",");
+                String[] textFieldCodes=textFieldCode.split(",");
+                for (int i = 0; i < numberFieldCodes.length; i++) {
+                    BigDecimal number = (BigDecimal) item.get(numberFieldCodes[i]);
+                    // 创建一个 DecimalFormat 实例,指定千位分隔符模式
+                    DecimalFormat df = new DecimalFormat("#,###.00");
+
+                    // 格式化 double 数值
+                    String formattedText = df.format(number);
+                    item.put(textFieldCodes[i],formattedText);
+                }
 
-                // 格式化 double 数值
-                String formattedText = df.format(number);
-                item.put(textFieldCode,formattedText);
+            }
+
+            if(!PublicUtil.isNull(map,"mainNumKeys","mainTextKeys")){
+                String[] mainNumKeys=UtilMap.getString(map,"mainNumKeys").split(",");
+                String[] mainTextKeys=UtilMap.getString(map,"mainTextKeys").split(",");
+                for (int i = 0; i < mainNumKeys.length; i++) {
+                    BigDecimal number = (BigDecimal) formData.get(mainNumKeys[i]);
+                    // 创建一个 DecimalFormat 实例,指定千位分隔符模式
+                    DecimalFormat df = new DecimalFormat("#,###.00");
+                    // 格式化 double 数值
+                    String formattedText = df.format(number);
+                    formData.put(mainTextKeys[i],formattedText);
+                }
             }
 
             ydClient.operateData(YDParam.builder()

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

@@ -2,6 +2,7 @@ package com.malk.mc;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.mc.entity.PocTbUser;
 import com.malk.mc.mapper.PocTbUserMapper;
 import com.malk.mc.service.McPocTbService;
@@ -55,4 +56,11 @@ public class PocTbTest {
         mcPocTbService.saveWeekly("667a8acecb1f84f76e4e1b4e",content,"61e6614bd80be3b12f0ba72d","665c9db8ae4a37f6c0fc5be4","2024-06-25T09:15:58.230Z","2024-06-25T09:15:58.230Z" );
     }
 
+    @Test
+    public void tt(){
+        String userId="{\"created\":\"2024-10-18T03:08:18.523Z\",\"dates\":[\"2024-10-18T00:00:00.000Z\"],\"executorId\":\"61b0993141573193a85b0074\",\"id\":\"6711d12248fdd60012792eb0\",\"organizationId\":\"6034c885e71842e1e5bb5218\"" +
+                ",\"taskId\":\"66ebe2e3e5e72e2d893490f8\",\"updated\":\"2024-10-18T03:08:18.523Z\",\"workTime\":3600000,\"workTimeIds\":[\"6711d12248fdd60012792eb0\"]}";
+        JSONObject data=JSONObject.parseObject(userId);
+        mcPocTbService.saveWorkTimes(data.getString("taskId"),data.getString("executorId"), UtilMap.getList(data,"workTimeIds"));
+    }
 }

+ 246 - 0
mjava-mc/src/test/java/com/malk/mc/YyYdTest.java

@@ -0,0 +1,246 @@
+package com.malk.mc;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSON;
+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.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+import javax.rmi.CORBA.Util;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/***
+ * 逸耀宜搭
+ */
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class YyYdTest {
+
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private YDService ydService;
+
+    private static String FORM_UUID="FORM-E83C9E307FFB4A978E0CB8DE1B899E9DXTXB";
+
+    @Test
+    public void ad(){
+        McProject.addYida("2001",new String[]{"APP_JKO9PRYX6FK5KB9N56MM","FRB66P61QBNGH6BZ7YK9P9AQUZ4W1ZW9C3ZPLQQL"});
+        MDC.put("MDC_KEY_PID","2001");
+        Object obj=ydClient.queryData(YDParam.builder().formInstanceId("95bab7fb-5957-4a8c-9f82-b5b79de0844c").build(), YDConf.FORM_QUERY.retrieve_id);
+        System.out.println(JSONObject.toJSONString(obj));
+
+    }
+
+    @Test
+    public void tt(){
+        // 人员名称修改后刷新历史数据
+        MDC.put("MDC_KEY_PID","1001");
+        List<Map> list = ydService.queryFormData_all(YDParam.builder().formUuid("FORM-FDB285F000E549A192A15525579EFE33SVKI").build());
+        int i=1;
+        for (Map map:list){
+            log.info("进度:{}/{}",i,list.size());
+            ydClient.operateData(YDParam.builder().formInstanceId(String.valueOf(map.get("formInstanceId")))
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("employeeField_lxjrgss7",map.get("employeeField_lxjrgss7_id")))).build(), YDConf.FORM_OPERATION.update);
+            i++;
+        }
+    }
+
+    @Test
+    public void test2(){
+        MDC.put("MDC_KEY_PID","1013");
+//        List<String> ids= FileUtil.readUtf8Lines("/home/ids.txt");
+        List<Map> list=ydService.queryAllFormData(YDParam.builder().formUuid("FORM-E83C9E307FFB4A978E0CB8DE1B899E9DXTXB")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_lu9l6otz","202210147"))).build());
+        for (int i = 0; i < list.size();) {
+            log.info("进度:{}/{}",i,list.size());
+            String id=UtilMap.getString(list.get(i),"formInstanceId");
+            Map formData=UtilMap.getMap(list.get(i),"formData");
+            try {
+                String no="";
+                if(!PublicUtil.isNull(formData,"textField_lu9l6otz")){
+                    no=UtilMap.getString(formData,"textField_lu9l6otz");
+                    System.out.println("销售"+ no);
+                }else if(!PublicUtil.isNull(formData,"textField_lvbu33zk")){
+                    no=UtilMap.getString(formData,"textField_lvbu33zk");
+                    System.out.println("维保"+no);
+                }else if(!PublicUtil.isNull(formData,"textField_lwu3ucd5")){
+                    no=UtilMap.getString(formData,"textField_lwu3ucd5");
+                    System.out.println("采购"+no);
+                }else{
+                    System.out.println("其他");
+                }
+                Map map=new HashMap();
+                if(!no.equals("")){
+                    List<Map>  tab1MapList=new ArrayList<>();
+                    List<Map>  tab2MapList=new ArrayList<>();
+                    List<Map> tab1=ydService.queryFormData_all(YDParam.builder().formUuid("FORM-6EB79C0C67984EF2A0857D167B2883A9K4JL").searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_lu9l6otz",no))).build());
+                    for (Map data:tab1){
+                        Map tabmap=new HashMap();
+                        tabmap.put("selectField_lw5rauoi", UtilMap.getString(data,"textField_lv0mf6ey")); // 软著产品
+                        tabmap.put("numberField_lw60trpm",UtilMap.getString(data,"numberField_m4y162c9")); // 金额
+                        tabmap.put("textField_lwkdqole",UtilMap.getString(data,"textField_lv0mf6ey")+""+UtilMap.getString(data,"numberField_m4y162c9"));
+                        tabmap.put("textField_lw5rhd9n",IdUtil.simpleUUID());
+                        tab1MapList.add(tabmap);
+                    }
+                    List<Map> tab2=ydService.queryFormData_all(YDParam.builder().formUuid("FORM-B2149CDBA96C437ABD0BBF430B2E2204XDCY").searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_lu9l6otz",no))).build());
+                    for (Map data:tab2){
+                        Map tabmap=new HashMap();
+                        tabmap.put("selectField_ltdyaj0y",UtilMap.getString(data,"selectField_ltdyaj0y")); // 产品模块名称
+                        tabmap.put("textField_lu2hd406",UtilMap.getString(data,"textField_lv0mf6ey")); // 产品编码
+                        tabmap.put("numberField_lw8oxeid",UtilMap.getString(data,"numberField_m4zg4614"));
+                        tabmap.put("numberField_lual03ls",UtilMap.getString(data,"numberField_lual03ls"));
+                        tabmap.put("associationFormField_lu2hd407", JSON.parse(UtilMap.getString(data,"associationFormField_lu2hd407")));
+                        tabmap.put("numberField_ltdyaj0z",UtilMap.getString(data,"numberField_ltdyaj0z"));
+                        tabmap.put("numberField_lub0gska",UtilMap.getString(data,"numberField_lub0gska"));
+                        tabmap.put("textField_lw8ogxzj",UtilMap.getString(data,"textField_lw8ogxzj"));
+                        tabmap.put("numberField_lual03lt",UtilMap.getString(data,"numberField_ltdyaj10"));// 合计
+//                        tabmap.put("numberField_lual03lt",data.get("numberField_m4zi7vib"));// 指导价合计
+                        tabmap.put("textField_lu0x7jsx",UtilMap.getString(data,"textField_m5ug9229"));
+                        tab2MapList.add(tabmap);
+                    }
+                    if(tab1MapList.size()>0){
+                        map.put("tableField_lw5rauof",tab1MapList);
+                    }
+                    if(tab2MapList.size()>0){
+                        map.put("tableField_ltdyaj0x",tab2MapList);
+                    }
+                }
+                log.info("up:{}",map);
+                ydClient.operateData(YDParam.builder()
+                        .formInstId(id)
+                        .useLatestVersion(true)
+                        .updateFormDataJson(JSONObject.toJSONString(map)).build(), YDConf.FORM_OPERATION.update);
+            }catch (Exception e){
+                e.printStackTrace();
+                log.info("重试{}",i);
+                continue;
+            }
+            i++;
+        }
+
+    }
+
+    /***
+     * 变更次数统计并生成excel展示数据
+     * @throws InterruptedException
+     */
+    @Test
+    public void test() throws InterruptedException {
+        MDC.put("MDC_KEY_PID","1013");
+        List<String> ids= FileUtil.readUtf8Lines("/home/ids.txt");
+        List<List<String>> result=new ArrayList<>();
+        int i = 0,max=100;
+        for (int t = 0; i < ids.size()/max; i++) {
+            query(ids.subList(i*max,(i+1)*max),result);
+            log.info("进度:{}/{}",i,ids.size()/max);
+            Thread.sleep(2000);
+        }
+        query(ids.subList(i*max,ids.size()),result);
+        log.info("result:{}",result);
+
+        // 写法1
+        String fileName = "/home/yyresult-" + System.currentTimeMillis() + ".xlsx";
+        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
+        EasyExcel.write(fileName).head(Arrays.asList(
+                Arrays.asList("实例ID"),Arrays.asList("变更记录数量")
+        )).sheet("数量").doWrite(result);
+    }
+
+    private void query(List<String> ids,List<List<String>> result){
+        Map<String,Object> map = ydClient.queryData(YDParam.builder().formUuid(FORM_UUID).formInstanceIdList(ids).build(), YDConf.FORM_QUERY.retrieve_changed).getOperationLogMap();
+        for (String key:map.keySet()){
+            List<Map> operations= UtilMap.getList(map,key);
+            List<Map> evenOperations=operations.stream().filter(item ->
+                    !UtilMap.getString(UtilMap.getMap(item,"operator"),"displayName").equals("宜搭平台")
+            ).collect(Collectors.toList());
+            log.info("数据[{}]操作记录条数:{};过滤后:{}",key,operations.size(),evenOperations.size());
+            result.add(Arrays.asList(key,String.valueOf(evenOperations.size()-1)));
+        }
+    }
+
+    /***
+     * 项目立项流程审批时间写入主表
+     */
+    @Test
+    public void test3(){
+        MDC.put("MDC_KEY_PID","1013");
+        List<String> ids= FileUtil.readUtf8Lines("/home/ids.txt");
+        for (int i = 0; i < ids.size(); i++) {
+            log.info("进度:{}/{}",i+1,ids.size());
+            cp(ids.get(i));
+        }
+    }
+
+    private void cp(String id){
+        Map keyMap=new HashMap();
+        keyMap.put("项目启动项目经理填写","dateField_lv6a4gxu");
+        keyMap.put("系统部署项目经理填写","dateField_lv6a4gxp");
+        keyMap.put("系统对接项目经理填写","dateField_lv6a4gxq");
+        keyMap.put("系统培训项目经理填写","dateField_lv6a4gxr");
+        keyMap.put("系统上线项目经理填写","dateField_lv6a4gxs");
+        keyMap.put("项目验收项目经理填写","dateField_lv6a4gxt");
+
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().processInstanceId(id).build(), YDConf.FORM_QUERY.retrieve_approval_record).getResult();
+        Map upMap=new HashMap();
+        for (int i = 0; i < list.size(); i++) {
+            Map data=list.get(i);
+//            System.out.println(JSONObject.toJSONString(list.get(i)));
+            String showName=UtilMap.getString(data,"showName");
+            if(keyMap.containsKey(showName)&&data.containsKey("actionExit")&&"agree".equals(UtilMap.getString(data,"actionExit"))){
+                if(data.containsKey("operateTimeGMT")){
+                    upMap.put(keyMap.get(showName),convertToTimestamp(UtilMap.getString(data,"operateTimeGMT")));
+                }
+            }
+        }
+        System.out.println(JSONObject.toJSONString(upMap));
+        ydClient.operateData(YDParam.builder().formInstanceId(id).updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
+    }
+
+    /**
+     * 自定义日期时间格式化器,允许解析没有秒数的ISO 8601格式时间字符串。
+     */
+    private static final DateTimeFormatter CUSTOM_ISO_DATE_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm[':ss']X");
+
+    /**
+     * 将ISO 8601格式的时间字符串转换为时间戳。
+     *
+     * @param isoDateTime ISO 8601格式的时间字符串,例如:"2024-11-12T15:13Z"
+     * @return 自1970-01-01T00:00:00Z以来的毫秒数
+     */
+    public static long convertToTimestamp(String isoDateTime) {
+        try {
+            // 使用自定义格式化器解析时间字符串
+            Instant instant = Instant.from(CUSTOM_ISO_DATE_TIME.parse(isoDateTime));
+            // 返回自纪元以来的毫秒数
+            return instant.toEpochMilli()-28800000L;
+        } catch (DateTimeParseException e) {
+            throw new IllegalArgumentException("无法解析时间字符串: " + isoDateTime, e);
+        }
+    }
+
+}