|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|