Browse Source

绩效考核取值调整
澳斯漮项目钉钉发起审批及撤销审批新版SDK
自动发起采购订单

fyz 1 month ago
parent
commit
a7efc47e8d

+ 11 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/controller/PurchaseController.java

@@ -62,4 +62,15 @@ public class PurchaseController {
 
 
         return McR.success(degreeTemplate);
         return McR.success(degreeTemplate);
     }
     }
+
+    /**
+     * 自定义页面发起采购订单
+     */
+    @PostMapping("startPurchaseOrderNew")
+    public McR startPurchaseOrderNew(@RequestParam("formInstanceId") String formInstanceId){
+
+        purchaseService.startPurchaseOrderNew(formInstanceId);
+
+        return McR.success();
+    }
 }
 }

+ 9 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/controller/TimerController.java

@@ -249,6 +249,15 @@ public class TimerController {
         timerService.updateDailyPrice(data.get("formInstId").toString());
         timerService.updateDailyPrice(data.get("formInstId").toString());
     }
     }
 
 
+    /**
+     * 日常物耗申请单中发起节点获取首条供应商价目表单价
+     * @param
+     */
+    @PostMapping("updateDailyPriceService")
+    void updateDailyPrice(@RequestParam("formInstanceId") String formInstanceId){
+        log.info("进入更新获取首条供应商价目表单价方法-服务注册");
+        timerService.updateDailyPrice(formInstanceId);
+    }
     @Autowired
     @Autowired
     private FService fService;
     private FService fService;
 
 

+ 5 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/PurchaseService.java

@@ -13,4 +13,9 @@ public interface PurchaseService {
     List<Map> selectDegreeTemplate();
     List<Map> selectDegreeTemplate();
 
 
     McR updateProcured(Map data);
     McR updateProcured(Map data);
+
+    List<Map> selectAllProcuredNew(Map data);
+
+    void startPurchaseOrderNew(String formInstanceId);
+
 }
 }

+ 4 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/TimerService.java

@@ -138,6 +138,10 @@ public interface TimerService {
 
 
     Map getProjectAnalysisForContract(Map<String, Object> data);
     Map getProjectAnalysisForContract(Map<String, Object> data);
 
 
+    /**
+     * 客户满意度调查
+     * @param formInstanceId
+     */
     void satisfactionSurvey(String formInstanceId);
     void satisfactionSurvey(String formInstanceId);
 
 
     void exportBusinessAnalysisTest(Map data, HttpServletResponse response, HttpServletRequest request);
     void exportBusinessAnalysisTest(Map data, HttpServletResponse response, HttpServletRequest request);

+ 1 - 1
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/TimerServiceImpl.java

@@ -2136,7 +2136,7 @@ public class TimerServiceImpl implements TimerService {
                                         "textareaField_luv1szm8, textField_luv1szm4, textField_luv1szm9, dateField_lrncgx89, digitalSignatureField_lth1gmpg, " +
                                         "textareaField_luv1szm8, textField_luv1szm4, textField_luv1szm9, dateField_lrncgx89, digitalSignatureField_lth1gmpg, " +
                                         "numberField_lrncgx78, selectField_lrncgx7j, tableField_lr3hv46q, textField_lvc64mvt",
                                         "numberField_lrncgx78, selectField_lrncgx7j, tableField_lr3hv46q, textField_lvc64mvt",
                                 formData.get("textareaField_luv1szm5") ,formData.get("textareaField_luv1szm6"),formData.get("textareaField_luv1szm7"),formData.get("textareaField_luv1szm8"),
                                 formData.get("textareaField_luv1szm5") ,formData.get("textareaField_luv1szm6"),formData.get("textareaField_luv1szm7"),formData.get("textareaField_luv1szm8"),
-                                formData.get("textField_luv1szm4"),formData.get("textField_luv1szm9"),formData.get("dateField_lrncgx89"),formData.get("digitalSignatureField_lth1gmpg"),
+                                formData.get("selectField_mgklgmau"),formData.get("textField_luv1szm9"),formData.get("dateField_lrncgx89"),formData.get("digitalSignatureField_lth1gmpg"),
                                 formData.get("numberField_lrncgx78"),formData.get("selectField_lrncgx7j"),mapList,formData.get("textField_lvc64mvt"))))
                                 formData.get("numberField_lrncgx78"),formData.get("selectField_lrncgx7j"),mapList,formData.get("textField_lvc64mvt"))))
                         .build(), YDConf.FORM_OPERATION.execute);
                         .build(), YDConf.FORM_OPERATION.execute);
             });
             });

+ 16 - 14
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/WorkServiceImpl.java

@@ -566,6 +566,7 @@ public class WorkServiceImpl implements WorkService {
                 .formUuid("FORM-EA91EECA918848EA9EFFA87107B60BD0SLXX")
                 .formUuid("FORM-EA91EECA918848EA9EFFA87107B60BD0SLXX")
                 .formDataJson(JSON.toJSONString(UtilMap.map("dateField_mfo3dvpr, tableField_mfo51ygb",
                 .formDataJson(JSON.toJSONString(UtilMap.map("dateField_mfo3dvpr, tableField_mfo51ygb",
                         lastMonthTime,sonList)))
                         lastMonthTime,sonList)))
+                        .useLatestVersion(true)
                 .build(), YDConf.FORM_OPERATION.start);
                 .build(), YDConf.FORM_OPERATION.start);
     }
     }
 
 
@@ -612,7 +613,8 @@ public class WorkServiceImpl implements WorkService {
                                     //社保公积金补贴
                                     //社保公积金补贴
                                     double sbgjj = list.stream()
                                     double sbgjj = list.stream()
                                             .mapToDouble(map -> ((Number) (Double.parseDouble(!map.get("numberField_kp1tzw9_value").toString().isEmpty() ? map.get("numberField_kp1tzw9_value").toString() : "0.0")
                                             .mapToDouble(map -> ((Number) (Double.parseDouble(!map.get("numberField_kp1tzw9_value").toString().isEmpty() ? map.get("numberField_kp1tzw9_value").toString() : "0.0")
-                                                    + Double.parseDouble(!map.get("numberField_lixe8q3_value").toString().isEmpty() ? map.get("numberField_lixe8q3_value").toString() : "0.0"))).doubleValue())
+                                                    + Double.parseDouble(!map.get("numberField_lixe8q3_value").toString().isEmpty() ? map.get("numberField_lixe8q3_value").toString() : "0.0")
+                                                    + UtilMap.getDouble(map, "numberField_x4wvwkm"))).doubleValue())
                                             .sum();
                                             .sum();
                                     //小业主费用
                                     //小业主费用
                                     double xyzfy = list.stream()
                                     double xyzfy = list.stream()
@@ -901,9 +903,9 @@ public class WorkServiceImpl implements WorkService {
         });
         });
 
 
         // 获取上月份的第一天
         // 获取上月份的第一天
-        firstDay = LocalDateTime.now().plusMonths(-3).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        firstDay = LocalDateTime.now().plusMonths(-2).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         // 获取上月份的最后一天
         // 获取上月份的最后一天
-        lastDay =  LocalDateTime.now().plusMonths(-3).withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
+        lastDay =  LocalDateTime.now().plusMonths(-2).withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
                 .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
                 .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
         // 转换回时间戳
         // 转换回时间戳
         firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
         firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
@@ -916,20 +918,20 @@ public class WorkServiceImpl implements WorkService {
         List<Map> lastOpenList = ydService.queryFormData_all(YDParam.builder()
         List<Map> lastOpenList = ydService.queryFormData_all(YDParam.builder()
                 .appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                .formUuid("FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL")
-                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn, selectField_lvituew9",dateList,"小业主","正常")))
+                .formUuid("FORM-EC785A5AB2B9432C892062823EB7C62A9NTL")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_m25j5gxu, selectField_lvc9x4vn, selectField_lvituew9",dateList,"小业主","正常")))
                 .build());
                 .build());
         //上月开票档案
         //上月开票档案
         Map<String, HashMap<String, Object>> lastOpens = lastOpenList.stream().collect(
         Map<String, HashMap<String, Object>> lastOpens = lastOpenList.stream().collect(
                 Collectors.groupingBy(
                 Collectors.groupingBy(
                         //根据项目点编号
                         //根据项目点编号
-                        map -> map.get("textField_lvdntzul").toString(),
+                        map -> map.get("textField_m25j5gxk").toString(),
                         Collectors.collectingAndThen(
                         Collectors.collectingAndThen(
                                 Collectors.toList(),
                                 Collectors.toList(),
                                 list -> {
                                 list -> {
                                     //企业社保
                                     //企业社保
                                     double open = list.stream()
                                     double open = list.stream()
-                                            .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lvd8pp36_value").toString().isEmpty() ? map.get("numberField_lvd8pp36_value").toString() : "0.0")).doubleValue())
+                                            .mapToDouble(map -> ((Number) UtilMap.getDouble(map,"numberField_lvdnme0z")).doubleValue())
                                             .sum();
                                             .sum();
                                     return new HashMap<String, Object>() {{
                                     return new HashMap<String, Object>() {{
                                         put("open", open);
                                         put("open", open);
@@ -939,9 +941,9 @@ public class WorkServiceImpl implements WorkService {
                 ));
                 ));
 
 
         // 获取上上月份的第一天
         // 获取上上月份的第一天
-        firstDay = LocalDateTime.now().plusMonths(-4).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        firstDay = LocalDateTime.now().plusMonths(-3).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         // 获取上上月份的最后一天
         // 获取上上月份的最后一天
-        lastDay =  LocalDateTime.now().plusMonths(-4).withDayOfMonth(LocalDate.now().plusMonths(-4).lengthOfMonth())
+        lastDay =  LocalDateTime.now().plusMonths(-3).withDayOfMonth(LocalDate.now().plusMonths(-4).lengthOfMonth())
                 .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
                 .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
         firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
         firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
         lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
         lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
@@ -953,21 +955,21 @@ public class WorkServiceImpl implements WorkService {
         List<Map> lastLastOpenList = ydService.queryFormData_all(YDParam.builder()
         List<Map> lastLastOpenList = ydService.queryFormData_all(YDParam.builder()
                 .appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                .formUuid("FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL")
-                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn, selectField_lvituew9",dateList,"小业主","正常")))
+                .formUuid("FORM-EC785A5AB2B9432C892062823EB7C62A9NTL")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_m25j5gxu, selectField_lvc9x4vn, selectField_lvituew9",dateList,"小业主","正常")))
                 .build());
                 .build());
 
 
         //上上月开票档案
         //上上月开票档案
         Map<String, HashMap<String, Object>> lastLastOpens = lastLastOpenList.stream().collect(
         Map<String, HashMap<String, Object>> lastLastOpens = lastLastOpenList.stream().collect(
                 Collectors.groupingBy(
                 Collectors.groupingBy(
                         //根据项目点编号
                         //根据项目点编号
-                        map -> map.get("textField_lvdntzul").toString(),
+                        map -> map.get("textField_m25j5gxk").toString(),
                         Collectors.collectingAndThen(
                         Collectors.collectingAndThen(
                                 Collectors.toList(),
                                 Collectors.toList(),
                                 list -> {
                                 list -> {
                                     //企业社保
                                     //企业社保
                                     double open = list.stream()
                                     double open = list.stream()
-                                            .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lvd8pp36_value").toString().isEmpty() ? map.get("numberField_lvd8pp36_value").toString() : "0.0")).doubleValue())
+                                            .mapToDouble(map -> ((Number) UtilMap.getDouble(map,"numberField_lvdnme0z")).doubleValue())
                                             .sum();
                                             .sum();
                                     return new HashMap<String, Object>() {{
                                     return new HashMap<String, Object>() {{
                                         put("open", open);
                                         put("open", open);
@@ -1036,7 +1038,7 @@ public class WorkServiceImpl implements WorkService {
                     dataMap.put("numberField_mfenmek8",back);
                     dataMap.put("numberField_mfenmek8",back);
                 });
                 });
                 //项目点档案子表上月
                 //项目点档案子表上月
-                List<Map> sonLastMonthList = sonList.stream().filter(m -> formatLastMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
+                List<Map> sonLastMonthList = sonList.stream().filter(m -> formatNowMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
                 sonLastMonthList.forEach(s->{
                 sonLastMonthList.forEach(s->{
                     //开票金额
                     //开票金额
                     double open = UtilMap.getDouble(s,"numberField_lrru2to2_value");
                     double open = UtilMap.getDouble(s,"numberField_lrru2to2_value");

+ 206 - 4
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/purchaseServiceImpl.java

@@ -18,10 +18,11 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
 @Service
 @Slf4j
 @Slf4j
@@ -136,4 +137,205 @@ public class purchaseServiceImpl implements PurchaseService {
         });
         });
         return McR.error("400","更新错误");
         return McR.error("400","更新错误");
     }
     }
+
+    @Override
+    public List<Map> selectAllProcuredNew(Map data) {
+        LocalDateTime firstDay = LocalDateTime.now().plusMonths(-1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        // 获取月份的最后一天
+        LocalDateTime lastDay =  LocalDateTime.now().withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
+                .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
+        // 转换回时间戳
+        long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+        long lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+
+        List<String> dateList = new ArrayList<>();
+        dateList.add(String.valueOf(firstDayTimestamp));
+        dateList.add(String.valueOf(lastDayTimestamp));
+        //项目点数据
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_ltxstp81",dateList)))
+                .build());
+        //过滤参与批量发起为否的数据
+        dataList = dataList.stream().filter(map -> !"否".equals(map.get("selectField_mgswtsqu"))).collect(Collectors.toList());
+
+        return dataList;
+    }
+
+    @Override
+    public void startPurchaseOrderNew(String formInstanceId) {
+
+        LocalDateTime firstDay = LocalDateTime.now().plusMonths(-1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        // 获取月份的最后一天
+        LocalDateTime lastDay =  LocalDateTime.now().withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
+                .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
+        // 转换回时间戳
+        long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+        long lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+
+        List<String> dateList = new ArrayList<>();
+        dateList.add(String.valueOf(firstDayTimestamp));
+        dateList.add(String.valueOf(lastDayTimestamp));
+        //项目点数据
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_ltxstp81",dateList)))
+                .build());
+        //过滤参与批量发起为否的数据
+        dataList = dataList.stream().filter(map -> !"否".equals(map.get("selectField_mgswtsqu"))).collect(Collectors.toList());
+
+        //分组求和
+        Map<Object, Long> groupCountMap = dataList.stream()
+                .collect(Collectors.groupingBy(
+                        //成本组织编码 + 项目点编号 + 供应商编码 + 物耗申请订单号
+                        map -> (String) map.get("textField_lus384vk") + "-" + map.get("textField_ltxstp86")
+                                + "-" + map.get("textField_ltxstp8g") + "=" + map.get("textField_ltxstp83"),
+                        Collectors.counting()
+                ));
+        Comparator<Map.Entry<Object, Long>> comparator = Map.Entry.comparingByValue();
+//        if (!ascending) {
+        comparator = comparator.reversed();
+//        }
+
+        // 3. 转换为List<Map>格式返回
+        List<Map<String, Object>> collect = groupCountMap.entrySet().stream()
+                .sorted(comparator)
+                .map(entry -> {
+                    Map<String, Object> result = new HashMap<>();
+                    String[] split = entry.getKey().toString().split("=");
+                    result.put("groupBy",split[0]);
+                    result.put("orderNum", split[1]);
+                    result.put("count", entry.getValue());
+                    return result;
+                })
+                .collect(Collectors.toList());
+
+        System.out.println(collect);
+        // 记录已经处理过的key,避免重复添加
+        Set<String> processedKeys = new HashSet<>();
+        List<Map> lastDataList = new ArrayList<>();
+        for (int i = 0; i < collect.size(); i++) {
+            String orderNumI = UtilMap.getString(collect.get(i), "orderNum");
+            //相加成功的作为一个list
+            if (!processedKeys.contains(orderNumI)) {
+                processedKeys.add(orderNumI);
+                List<String> orders = new ArrayList<>();
+                orders.add(orderNumI);
+                //第一层的数据条数
+                int countI = UtilMap.getInt(collect.get(i), "count");
+                String groupBy = UtilMap.getString(collect.get(i), "groupBy");
+                if (countI < 100) {
+                    //数据处理
+                    for (int r = collect.size() - 1; r >= 0; r--) {
+                        String orderNumR = UtilMap.getString(collect.get(r), "orderNum");
+                        if (!processedKeys.contains(orderNumR) && groupBy.equals(collect.get(r).get("groupBy"))) {
+                            int countR = UtilMap.getInt(collect.get(r), "count");
+                            if (countI + countR > 100) {
+                                continue;
+                            } else if (countI + countR == 100) {
+                                processedKeys.add(orderNumR);
+                                orders.add(orderNumR);
+                                break;
+                            } else if (countI + countR < 100) {
+                                processedKeys.add(orderNumR);
+                                orders.add(orderNumR);
+                            }
+                        }
+                    }
+                } else if (countI == 100) {
+                    continue;
+                }
+                //记录重复key
+                lastDataList.add(UtilMap.map(String.valueOf(UUID.randomUUID()), orders));
+            }
+        }
+        List<Map> finalDataList = dataList;
+        final int[] totalCount = {0};
+        final double[] amountSum = {0.0};
+        final int[] successCount = {0};
+        final int[] errorCount = {0};
+        try {
+            lastDataList.forEach(e->{
+                //根据第一步拼接好的集合做发起流程操作
+                List<Map> tableList = new ArrayList<>();
+                final String[] cbzz = {"",""};
+                final String[] gys = {"",""};
+
+                e.forEach((k,v)->{
+                    List<String> v1 = (List<String>) v;
+                    if (v1.size()>=3){
+
+                        for (String s : (List<String>) v) {
+                            List<Map> costList = finalDataList.stream().filter(map -> s.equals(map.get("textField_ltxstp83"))).collect(Collectors.toList());
+                            costList.forEach(c->{
+                                gys[0] = UtilMap.getString(c,"textField_ltxstp8g");
+                                gys[1] = UtilMap.getString(c,"textField_ltxstp8h");
+                                cbzz[0] = UtilMap.getString(c,"textField_lus384vk");
+                                cbzz[1] = UtilMap.getString(c,"selectField_ltxstp89");
+                                extracted(totalCount, amountSum, tableList, c);
+                            });
+                        }
+                        /*发起流程*/
+                        ydClient.operateData(YDParam.builder()
+                                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                                .formUuid("FORM-70F543E10887467188485B1E8AB3FFFDJUGK")
+                                .formDataJson(JSON.toJSONString(UtilMap.map("selectField_lr26l3h7, textField_lus384vk, selectField_lr26l3h8, " +
+                                                "textField_lr26l3hf, textField_lwg62y7o, numberField_lr26l3hq, numberField_lr26l3hr, tableField_ltxug6h1",
+                                        cbzz[1], cbzz[0], "物耗/配件", gys[0], gys[1], totalCount[0], amountSum[0], tableList)))
+                                .build(), YDConf.FORM_OPERATION.start);
+                    }
+                });
+                successCount[0]++;
+            });
+        } catch (Exception ex) {
+            errorCount[0]++;
+            ex.printStackTrace();
+            return;
+        }
+        ydClient.operateData(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formInstanceId(formInstanceId)
+//                    .useLatestVersion(true)
+//                    .updateFormDataJson(JSONObject.toJSONString(new HashMap<>()))
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mhdgj16d, textField_mhdgj16e, textField_mhdgj16f, textField_mhdgj16g",
+                        lastDataList.size(),successCount[0],errorCount[0],"同步完毕")))
+                .build(), YDConf.FORM_OPERATION.update);
+        log.info("总条数:{} 执行成功条数:{} 失败条数:{}",lastDataList.size(),successCount[0],errorCount[0]);
+
+    }
+
+    private void extracted(int[] totalCount, double[] amountSum, List<Map> tableList, Map i) {
+        Map<String, Object> tableData = UtilMap.map("textField_lu22o9f1, textField_ltxug6gp, textField_lus3rn9y, textField_lus3rn9x, " +
+                        "textField_ltxug6gn, numberField_ltxug6gq, numberField_mff54y69, numberField_ltxug6gr, " +
+                        "numberField_ltxug6gs, numberField_lv1rs4aa, numberField_ltxug6gt, numberField_lvvyh9la, " +
+                        "numberField_lyinhl6g, textField_ltxug6gu, textField_lup6gfl1, textField_lu22o9f0, " +
+                        "textField_lu2gyq5g, textField_lu825bqq, addressField_m1mxxnin, textField_ltxug6gw, " +
+                        "textField_lufl71pv, textField_lu825bqp, employeeField_lwa3x3uh, employeeField_lwa3x3ui, " +
+                        "employeeField_lxu7fhde, associationFormField_ltxug6gm",
+                UtilMap.getString(i, "textField_ltxstp84"), UtilMap.getString(i, "textField_ltxstp8c"),
+                UtilMap.getString(i, "textField_ltxstp8e"), UtilMap.getString(i, "textField_ltxstp8f"),
+                UtilMap.getString(i, "textField_ltxstp8a"), UtilMap.getString(i, "buyNum"),
+                UtilMap.getString(i, "numberField_ltxyjf0s"), UtilMap.getString(i, "numberField_ltxstp8l"),
+                UtilMap.getString(i, "numberField_ltxstp8d"), UtilMap.getString(i, "numberField_lv1r2pay"),
+                UtilMap.getString(i, "inTaxAmount"), UtilMap.getString(i, "outTaxAmount"),
+                UtilMap.getString(i, "taxAmount"), UtilMap.getString(i, "textField_ltxstp8n"),
+                UtilMap.getString(i, "textField_ltxstp85"), UtilMap.getString(i, "textField_ltxstp86"),
+                UtilMap.getString(i, "textField_ltxstp88"), UtilMap.getString(i, "textField_luhs4y3r"),
+                UtilMap.getString(i, "addressField_lt4209fv"), UtilMap.getString(i, "textField_ltxstp87"),
+                UtilMap.getString(i, "textField_ltxstp8b"), UtilMap.getString(i, "textField_ltxstp7y"),
+                UtilMap.getString(i, "employeeField_lwa3x3uh"), UtilMap.getString(i, "employeeField_lwa3x3ui"),
+                UtilMap.getString(i, "employeeField_lx03kyul"),
+                Arrays.asList(UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_ERBDTFS82HOVBPL3NFH0",
+                        "FORM-0E95A616B4A54BBBB42AAEEEDCC4D9206XGA","receipt", UtilMap.getString(i,"formInstanceId"),
+                        UtilMap.getString(i,"textField_ltxstp8b"), UtilMap.getString(i,"textField_ltxstp84"))));
+        tableList.add(tableData);
+        totalCount[0] = totalCount[0] + UtilMap.getInt(i,"numberField_ltxyjf0s");
+        amountSum[0] = amountSum[0] + UtilMap.getDouble(i,"numberField_ltxstp8l") * UtilMap.getInt(i,"numberField_ltxyjf0s");
+    }
 }
 }

+ 4 - 1
mjava/src/main/java/com/malk/server/crm/DDR.java

@@ -5,6 +5,7 @@ import com.malk.server.common.VenR;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -25,13 +26,15 @@ public class DDR<T> extends VenR {
 
 
     private T data;
     private T data;
 
 
+    private T empList;
+
     /**
     /**
      * token
      * token
      */
      */
     private String corpAccessToken;
     private String corpAccessToken;
 
 
     // 成功状态标记
     // 成功状态标记
-    private final static String SUC_CODE = "200000";
+    private final static String SUC_CODE = "0";
 
 
 
 
     /**
     /**

+ 2 - 0
mjava/src/main/java/com/malk/service/dingtalk/DDClient_Workflow.java

@@ -74,6 +74,8 @@ public interface DDClient_Workflow {
      */
      */
     Map getInstanceIds(String access_token, String processCode, long startTime, long endTime, Map body_ext);
     Map getInstanceIds(String access_token, String processCode, long startTime, long endTime, Map body_ext);
 
 
+    boolean updateApprove(String access_token, String opUserId, String processInstanceId, String processCode, List<Map> variables, String remark);
+
     /**
     /**
      * 获取审批实例ID列表_全部 [若轮询, 时间需要覆盖]
      * 获取审批实例ID列表_全部 [若轮询, 时间需要覆盖]
      *
      *

+ 15 - 2
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Workflow.java

@@ -2,7 +2,6 @@ package com.malk.service.dingtalk.impl;
 
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.malk.server.common.VenR;
 import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR;
 import com.malk.server.dingtalk.DDR;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.server.dingtalk.DDR_New;
@@ -57,7 +56,7 @@ public class DDImplClient_Workflow implements DDClient_Workflow {
     /**
     /**
      * 获取单个审批实例详情
      * 获取单个审批实例详情
      *
      *
-     * @apiNote https://open.dingtalk.com/document/orgapp/obtains-the-details-of-a-single-approval-instance
+     * @apiNote https://open.dingtalk.com/document/development/obtains-the-details-of-a-single-approval-instance-pop
      */
      */
     @Override
     @Override
     public Map getProcessInstanceId(String access_token, String processInstanceId) {
     public Map getProcessInstanceId(String access_token, String processInstanceId) {
@@ -161,6 +160,20 @@ public class DDImplClient_Workflow implements DDClient_Workflow {
         return (Map) ddr_new.getResult();
         return (Map) ddr_new.getResult();
     }
     }
 
 
+    /**
+     * 更新审批实例 (钉钉高级版专享)
+     *
+     * @apiNote https://open.dingtalk.com/document/development/api-premiumupdateprocessinstancevariables#h2-qnz-wee-qhf
+     */
+    @Override
+    public boolean updateApprove(String access_token, String opUserId, String processInstanceId, String processCode, List<Map> variables, String remark) {
+        Map header = DDConf.initTokenHeader(access_token);
+        Map body = UtilMap.map("opUserId, processCode, variables, processInstanceId, remark", opUserId, processCode, variables, processInstanceId, remark);
+        String doPost = UtilHttp.doPut("https://api.dingtalk.com/v1.0/workflow/premium/processInstances", header, null, body);
+        JSONObject jsonObject = JSONObject.parseObject(doPost);
+        return (Boolean) jsonObject.get("result");
+    }
+
     /**
     /**
      * 获取审批实例ID列表_全部
      * 获取审批实例ID列表_全部
      */
      */