Forráskód Böngészése

绩效考核取值调整
钉钉OA发起审批新版SDK

fyz 1 hónapja%!(EXTRA string=óta)
szülő
commit
b8e53a022b

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

@@ -188,7 +188,7 @@ public class FImplService implements FService {
                     stringDoubleMap.forEach((k1,v1)->{
                         sonList.forEach(s->{
                             if (s.get("textField_luh0k82j").equals(k1)){
-                                s.put("numberField_mfkyfgok",stringDoubleMap.get(k1));
+                                s.put("numberField_lrru2to2",stringDoubleMap.get(k1));
                             }
                         });
                     });

+ 33 - 5
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/NCServiceImpl.java

@@ -2238,10 +2238,37 @@ public class NCServiceImpl implements NCService {
             statement = connection.createStatement();
 
             // 测试sql 执行查询
-            String sql = "SELECT b.adjustperiod AS adjustperiod, b.pk_accasoa AS pk_accasoa,a.name AS accasoa_name, SUM ( b.creditamount ) AS creditamount             FROM gl_detail b JOIN bd_accasoa a ON b.pk_accasoa = a.pk_accasoa WHERE b.yearv = "+year+" AND b.adjustperiod = '"+ month + "'" +
-                    "            AND (b.accountcode like '6602%' OR b.accountcode IN ('660101','660103','660104'))" +
-                    "            AND b.pk_accountingbook IN ( SELECT pk_accountingbook FROM org_accountingbook WHERE code IN ( 'A01-0004', 'A02-0004', 'A03-0004', 'A04-0004', 'A05-0004', 'A06-0004', 'A10-0004', 'A11-0004' ))             GROUP BY b.adjustperiod,  b.pk_accasoa,  a.name";
-
+            String sql = "SELECT\n" +
+                    "\tb.adjustperiod AS adjustperiod,\n" +
+                    "\tb.pk_accasoa AS pk_accasoa,\n" +
+                    "\ta.NAME AS accasoa_name,\n" +
+                    "\torg_dept.CODE bmcode,\n" +
+                    "\torg_dept.NAME bmname,\n" +
+                    "\tSUM( b.creditamount ) AS creditamount \n" +
+                    "FROM\n" +
+                    "\tgl_detail b\n" +
+                    "\tJOIN bd_accasoa a ON b.pk_accasoa = a.pk_accasoa\n" +
+                    "  LEFT JOIN gl_docfree1 ON b.assid = gl_docfree1.assid \n" +
+                    "\tLEFT JOIN org_dept ON gl_docfree1.f1 = org_dept.pk_dept  \n" +
+                    "WHERE 1=1\n" +
+                    "\tAND b.yearv = '"+ year +"' \n" +
+                    "\tAND b.adjustperiod = '"+ month +"' \n" +
+                    "\tAND (\n" +
+                    "\t\tb.accountcode LIKE '6602%' \n" +
+                    "\tOR b.accountcode IN ( '660101', '660103', '660104' )) \n" +
+                    "\tAND b.pk_accountingbook IN (\n" +
+                    "\tSELECT\n" +
+                    "\t\tpk_accountingbook \n" +
+                    "\tFROM\n" +
+                    "\t\torg_accountingbook \n" +
+                    "\tWHERE\n" +
+                    "\tCODE IN ( 'A01-0004', 'A02-0004', 'A03-0004', 'A04-0004', 'A05-0004', 'A06-0004', 'A10-0004', 'A11-0004' )) \n" +
+                    "GROUP BY\n" +
+                    "\tb.adjustperiod,\n" +
+                    "\tb.pk_accasoa,\n" +
+                    "\ta.NAME,\n" +
+                    "\torg_dept.CODE,\n" +
+                    "\torg_dept.NAME";
 
             resultSet = statement.executeQuery(sql);
 
@@ -2253,7 +2280,8 @@ public class NCServiceImpl implements NCService {
                 hashMap.put("textField_m0dkzhwo", yearAndNonth);
                 hashMap.put("textField_m0dkzhwu",resultSet.getString("pk_accasoa"));
                 hashMap.put("textField_m0dkzhwv",resultSet.getString("accasoa_name"));
-                hashMap.put("textField_m0eudqp0","部门");
+                hashMap.put("textField_mdzs6wr9",resultSet.getString("bmcode"));
+                hashMap.put("textField_m0eudqp0",resultSet.getString("bmname"));
                 hashMap.put("numberField_m0dkzhx1",resultSet.getBigDecimal("creditamount"));
 
                 ydClient.operateData(YDParam.builder()

+ 410 - 245
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/WorkServiceImpl.java

@@ -18,7 +18,10 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
-import java.time.*;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -50,6 +53,7 @@ public class WorkServiceImpl implements WorkService {
         SETTLEMENT_PERIOD.put("双月结", 60);
         SETTLEMENT_PERIOD.put("季结", 90);
         SETTLEMENT_PERIOD.put("半年结", 180);
+        SETTLEMENT_PERIOD.put("", 0);
     }
 
     //回款账期枚举
@@ -62,6 +66,7 @@ public class WorkServiceImpl implements WorkService {
         PAYMENT_TERM.put("45天", 45);
         PAYMENT_TERM.put("60天", 60);
         PAYMENT_TERM.put("90天", 90);
+        PAYMENT_TERM.put("", 0);
     }
     private YDParam.YDParamBuilder _initLYParam() {
         return YDParam.builder()
@@ -567,9 +572,9 @@ public class WorkServiceImpl implements WorkService {
     @Override
     public void quotaArchive() {
         LocalDate currentDate = LocalDate.now();
-        YearMonth lastMonth = YearMonth.from(currentDate).minusMonths(1);
-        String formatLastMonth = lastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
-        String formatNowMonth = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+//        YearMonth lastMonth = YearMonth.from(currentDate).minusMonths(1);
+        String formatNowMonth = LocalDateTime.now().plusMonths(-2).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+        String formatLastMonth = LocalDateTime.now().plusMonths(-3).format(DateTimeFormatter.ofPattern("yyyy-MM"));
         // 获取月份的第一天
         LocalDateTime firstDay = LocalDateTime.now().plusMonths(-2).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         // 获取月份的最后一天
@@ -604,14 +609,6 @@ public class WorkServiceImpl implements WorkService {
                         Collectors.collectingAndThen(
                                 Collectors.toList(),
                                 list -> {
-                                    //企业社保
-                                    double qysb = list.stream()
-                                            .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_420j7m8_value").toString().isEmpty() ? map.get("numberField_420j7m8_value").toString() : "0.0")).doubleValue())
-                                            .sum();
-                                    //企业公积金
-                                    double qygjj = list.stream()
-                                            .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_528s4hl_value").toString().isEmpty() ? map.get("numberField_528s4hl_value").toString() : "0.0")).doubleValue())
-                                            .sum();
                                     //社保公积金补贴
                                     double sbgjj = list.stream()
                                             .mapToDouble(map -> ((Number) (Double.parseDouble(!map.get("numberField_kp1tzw9_value").toString().isEmpty() ? map.get("numberField_kp1tzw9_value").toString() : "0.0")
@@ -638,17 +635,45 @@ public class WorkServiceImpl implements WorkService {
                                             .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_765hruk_value").toString().isEmpty() ? map.get("numberField_765hruk_value").toString() : "0.0")).doubleValue())
                                             .sum();
                                     return new HashMap<String, Object>() {{
-                                        put("numberField_mfenmehs", qysb);
-                                        put("numberField_mfenmeht", qygjj);
                                         put("numberField_mfenmehu", sbgjj);
                                         put("numberField_mfenmehv", xyzfy);
                                         put("numberField_mfenmehx", yfgzA);
                                         put("numberField_mfenmehz", jfjl);
                                         put("numberField_mfenmei1", wpgz);
                                         put("numberField_mfenmei3", jxgz);
-                                        put("numberField_mfenmehw", qysb + qygjj + sbgjj + xyzfy);//定额工资(未加人工定额)
-                                        put("numberField_mfenmei5", yfgzA - jfjl + wpgz + jxgz + qysb + qygjj);//调整后应发工资(未加生产成本-业务外包费)
-                                        put("rgzbfz", yfgzA + wpgz + jxgz + qysb + qygjj + sbgjj);//人工占比分子
+                                        put("numberField_mfenmehw", sbgjj + xyzfy);//定额工资(未加人工定额)
+                                        put("numberField_mfenmei5", yfgzA - jfjl + wpgz + jxgz);//调整后应发工资(未加生产成本-业务外包费)
+                                        put("rgzbfz", yfgzA + wpgz + jxgz + sbgjj);//人工占比分子
+                                    }};
+                                }
+                        )
+                )
+        );
+        //社保公积金档案表
+        List<Map> socialList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-25029DD7E7394B2DBF558D9B73112059Q8QK")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_4lnxn1m",dateList)))
+                .build());
+
+        Map<String, Map<String, Object>> socials = socialList.stream().collect(
+                Collectors.groupingBy(
+                        map -> (String) map.get("textField_mgrrqy9k").toString(),
+                        Collectors.collectingAndThen(
+                                Collectors.toList(),
+                                list -> {
+                                    //企业社保
+                                    double qysb = list.stream()
+                                            .mapToDouble(map -> ((Number) UtilMap.getDouble(map,"numberField_luaq2ehm_value")).doubleValue())
+                                            .sum();
+                                    //企业公积金
+                                    double qygjj = list.stream()
+                                            .mapToDouble(map -> ((Number) UtilMap.getDouble(map,"numberField_luaq2ehj_value")).doubleValue())
+                                            .sum();
+                                    return new HashMap<String, Object>() {{
+                                        put("numberField_mfenmehs", qysb);
+                                        put("numberField_mfenmeht", qygjj);
                                     }};
                                 }
                         )
@@ -693,18 +718,18 @@ public class WorkServiceImpl implements WorkService {
                 .build());
         List<Map> orderSons = new ArrayList<>();
         orderList.forEach(o->{
+//            List<Map> sonList = ydService.queryDetails(YDParam.builder().
+//                    appType("APP_ERBDTFS82HOVBPL3NFH0")
+//                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+//                    .formInstanceId(o.get("formInstanceId").toString())
+//                    .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
+//                    .tableFieldId("tableField_lr26l3hl")
+//                    .build());
+//            sonList.forEach(s->{
+//                Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iah"), s.get("textField_lr26l3ht"), s.get("numberField_lr26l3i1_value"));
+//                orderSons.add(map);
+//            });
             List<Map> sonList = ydService.queryDetails(YDParam.builder().
-                    appType("APP_ERBDTFS82HOVBPL3NFH0")
-                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                    .formInstanceId(o.get("formInstanceId").toString())
-                    .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
-                    .tableFieldId("tableField_lr26l3hl")
-                    .build());
-            sonList.forEach(s->{
-                Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iah"), s.get("textField_lr26l3ht"), s.get("numberField_lr26l3i1_value"));
-                orderSons.add(map);
-            });
-            sonList = ydService.queryDetails(YDParam.builder().
                     appType("APP_ERBDTFS82HOVBPL3NFH0")
                     .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                     .formInstanceId(o.get("formInstanceId").toString())
@@ -712,13 +737,13 @@ public class WorkServiceImpl implements WorkService {
                     .tableFieldId("tableField_ltxyt76f")
                     .build());
             sonList.forEach(s->{
-                Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iag"), s.get("textField_ltxyt75x"), s.get("numberField_ltxyt764_value"));
+                Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iag"), s.get("textField_lu23oe2x"), s.get("numberField_ltxyt764_value"));
                 orderSons.add(map);
             });
         });
 
         //采购订单档案工作服数据
-        Map<String, HashMap<String, Object>> workCloCost = orderSons.stream().filter(m -> "工作服".equals(m.get("wlname"))).collect(
+        Map<String, HashMap<String, Object>> workCloCost = orderSons.stream().filter(m -> "保洁服".equals(m.get("wlname"))).collect(
                 Collectors.groupingBy(
                         //根据项目点名称
                         map -> map.get("name").toString(),
@@ -780,6 +805,100 @@ public class WorkServiceImpl implements WorkService {
                                 }
                         )
                 ));
+        //采购订单明细档案
+        List<Map> procurementDetailsList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-15CA65DBF03C41E2B497C235827ED410KFE9")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lr26l3h2",dateList)))
+                .build());
+
+        Map<String, HashMap<String, Object>> procurements = procurementDetailsList.stream().collect(
+                Collectors.groupingBy(
+                        //根据项目点编号
+                        map -> map.get("textField_ltxutdfi").toString(),
+                        Collectors.collectingAndThen(
+                                Collectors.toList(),
+                                list -> {
+                                    //可入库数量
+                                    double cost = list.stream()
+                                            .mapToDouble(map -> ((Number) UtilMap.getDouble(map,"numberField_lu24bwcz_value")).doubleValue())
+                                            .sum();
+                                    return new HashMap<String, Object>() {{
+                                        put("cost", cost);
+                                    }};
+                                }
+                        )
+                ));
+
+        //物耗出库单
+        List<Map> materialOutList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-52A2462CCB374CBF8AC95438E8D16C543E6X")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lr26l3h2",dateList)))
+                .build());
+
+        Map<String, HashMap<String, Object>> materialOuts = materialOutList.stream().collect(
+                Collectors.groupingBy(
+                        //根据项目点编号
+                        map -> map.get("textField_ludto47p").toString(),
+                        Collectors.collectingAndThen(
+                                Collectors.toList(),
+                                list -> new HashMap<String, Object>() {{
+                                    put("size", size());
+                                }}
+                        )
+                ));
+
+        //物耗盘点单
+        List<Map> materialCheckList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-C2576D2264944067B278E6522D4F0A81UBZ3")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lr347gek",dateList)))
+                .build());
+
+        Map<String, HashMap<String, Object>> materialChecks = materialCheckList.stream().collect(
+                Collectors.groupingBy(
+                        //根据项目点编号
+                        map -> map.get("textField_luay64kn").toString(),
+                        Collectors.collectingAndThen(
+                                Collectors.toList(),
+                                list -> new HashMap<String, Object>() {{
+                                    put("size", size());
+                                }}
+                        )
+                ));
+        //本月开票档案
+        List<Map> toOpenList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn",dateList,"小业主")))
+                .build());
+        //本月开票档案
+        Map<String, List<Long>> toOpen = toOpenList.stream().filter(map -> ObjectUtil.isNotNull(map.get("dateField_m0f5xiio"))).collect(
+                Collectors.groupingBy(
+                        //根据项目点编号
+                        map -> map.get("textField_lvdntzul").toString(),
+                        Collectors.mapping(
+                                map -> {
+                                    long startTimestamp = UtilMap.getLong(map, "dateField_lw5ud9bk");
+                                    long endTimestamp = UtilMap.getLong(map, "dateField_m0f5xiio");
+                                    Date startDate = DateUtil.date(startTimestamp);
+                                    Date endDate = DateUtil.date(endTimestamp);
+
+                                    return Math.abs(DateUtil.betweenDay(startDate, endDate, true));
+                                },
+                                Collectors.toList()
+                        )
+                ));
+        Map<String, Long> daysDiff = new HashMap<>();
+        toOpen.forEach((k,v)->{
+            long value = v.stream().mapToLong(Long::longValue).max().orElse(0)/30;
+            daysDiff.put(k,value);
+        });
 
         // 获取上月份的第一天
         firstDay = LocalDateTime.now().plusMonths(-3).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
@@ -838,7 +957,7 @@ public class WorkServiceImpl implements WorkService {
                 .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn",dateList,"小业主")))
                 .build());
 
-        //上月开票档案
+        //上月开票档案
         Map<String, HashMap<String, Object>> lastLastOpens = lastLastOpenList.stream().collect(
                 Collectors.groupingBy(
                         //根据项目点编号
@@ -859,226 +978,272 @@ public class WorkServiceImpl implements WorkService {
         //数据整合处理
         projectList.forEach(e->{
             String name = e.get("textField_lrr3rg6i").toString();
-            String code = e.get("textField_ltxrn8h1").toString();
-            List<Map<String,Object>> objects = new ArrayList<>();
-            Map<String, Object> map = UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle",
-                    "APP_ERBDTFS82HOVBPL3NFH0", "FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC", "receipt",
-                    e.get("formInstanceId"), name, code);
-            objects.add(map);
-            Map<String, Object> dataMap = UtilMap.map("associationFormField_mfo3dvqa, textField_mfenmegp, " +
-                            "dateField_mfo3dvpr, radioField_mfo5qdfc, selectField_mfo51ygd, selectField_mfp86vfw, " +
-                            "textField_mfenmegj, textField_mfo6i24e, textField_mgizxcry, numberField_mfo3dvq0, " +
-                            "numberField_mfo3dvpy",
-                    objects, code,LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(),
-                    "项目点负责人","否","否",name,formatNowMonth,name,UtilMap.getDouble(e,"numberField_lrhjdu5l"),
-                    UtilMap.getDouble(e,"numberField_lrpvi1wf"));
-            if (ObjectUtil.isNotNull(e.get("employeeField_lw1usgpt_id"))){
-                //项目点负责人
-                String xmdfzr = e.get("employeeField_lw1usgpt_id").toString();
-                JSONArray xmdfzrArray = JSONArray.parseArray(xmdfzr);
-                dataMap.put("employeeField_mfo3dvpt",xmdfzrArray.get(0));
-                dataMap.put("textField_mgoljmhh",xmdfzrArray.get(0));
-            }
+//            if ("虹桥机场外场区".equals(name)){
 
-            if (ObjectUtil.isNotNull(e.get("employeeField_lrpswhaj_id"))){
-                //营运经理
-                String yyjl = e.get("employeeField_lrpswhaj_id").toString();
-                JSONArray yyjlArray = JSONArray.parseArray(yyjl);
-                dataMap.put("employeeField_mfo3dvq2",yyjlArray.get(0));
-                dataMap.put("textField_mgolu3w2",yyjlArray.get(0));
-            }
-            List<Map> sonList = ydService.queryDetails(YDParam.builder().
-                    appType("APP_ERBDTFS82HOVBPL3NFH0")
-                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                    .formInstanceId(e.get("formInstanceId").toString())
-                    .formUuid("FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC")
-                    .tableFieldId("tableField_lrru2tnq")
-                    .build());
-            //项目点档案子表本月
-            List<Map> sonFilterList = sonList.stream().filter(m -> formatNowMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
-            sonFilterList.forEach(s->{
-                //人工定额
-                double person = UtilMap.getDouble(s,"numberField_lrru2tnt_value");
-                //物料定额
-                double cost = UtilMap.getDouble(s,"numberField_lrru2tnu_value");
-                //收入定额
-                double income = UtilMap.getDouble(s,"numberField_lrru2tns_value");
-                //回款金额
-                double back = UtilMap.getDouble(s,"numberField_lrru2to3_value");
-                //工资定额分项
-                dataMap.put("numberField_mfenmehp",person);
-                //物料定额
-                dataMap.put("numberField_mfenmeih",cost);
-                //定额收入
-                dataMap.put("numberField_mfenmejp",income);
-                //回款金额
-                dataMap.put("numberField_mfenmek8",back);
-            });
-            //项目点档案子表上月
-            List<Map> sonLastMonthList = sonList.stream().filter(m -> formatLastMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
-            sonLastMonthList.forEach(s->{
-                //开票金额
-                double open = UtilMap.getDouble(s,"numberField_lrru2to2_value");
-                //开票金额
-                dataMap.put("numberField_mfenmejr",open);
-            });
-            //算薪结果表
-            salarys.forEach((k,v)->{
-                if (k.equals(name)){
-                    dataMap.putAll(v);
+                String code = e.get("textField_ltxrn8h1").toString();
+                List<Map<String,Object>> objects = new ArrayList<>();
+                Map<String, Object> map = UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle",
+                        "APP_ERBDTFS82HOVBPL3NFH0", "FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC", "receipt",
+                        e.get("formInstanceId"), name, code);
+                objects.add(map);
+                Map<String, Object> dataMap = UtilMap.map("associationFormField_mfo3dvqa, textField_mfenmegp, " +
+                                "dateField_mfo3dvpr, radioField_mfo5qdfc, selectField_mfo51ygd, selectField_mfp86vfw, " +
+                                "textField_mfenmegj, textField_mfo6i24e, textField_mgizxcry, numberField_mfo3dvq0, " +
+                                "numberField_mfo3dvpy",
+                        objects, code,LocalDateTime.now().plusMonths(-2).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(),
+                        "项目点负责人","否","否",name,formatNowMonth,name,UtilMap.getDouble(e,"numberField_lrhjdu5l"),
+                        UtilMap.getDouble(e,"numberField_lrpvi1wf"));
+                if (ObjectUtil.isNotNull(e.get("employeeField_lw1usgpt_id"))){
+                    //项目点负责人
+                    String xmdfzr = e.get("employeeField_lw1usgpt_id").toString();
+                    JSONArray xmdfzrArray = JSONArray.parseArray(xmdfzr);
+                    dataMap.put("employeeField_mfo3dvpt",xmdfzrArray.get(0));
+                    dataMap.put("textField_mgoljmhh",xmdfzrArray.get(0));
                 }
-            });
 
-            //遍历部门成本
-            dataMap.put("numberField_mfenmei2",0.0);
-            dataMap.put("numberField_mfenmeil",0.0);
-            dataMap.put("numberField_mfenmeio",0.0);
-            costCollect.forEach((k0,v0)->{
-                if (k0.equals(name)){
-                    v0.forEach((k1,v1)->{
-                        if ("生产成本-业务外包费".equals(k1)){
-                            //劳务所临时工费用
-                            dataMap.put("numberField_mfenmei2",v1.get("cost"));
-                        }else if ("生产成本-租赁费".equals(k1)){
-                            //租赁
-                            dataMap.put("numberField_mfenmeil",v1.get("cost"));
-                        }else if ("生产成本-折旧".equals(k1)) {
-                            //折旧
-                            dataMap.put("numberField_mfenmeio", v1.get("cost"));
-                        }
-                    });
+                if (ObjectUtil.isNotNull(e.get("employeeField_lrpswhaj_id"))){
+                    //营运经理
+                    String yyjl = e.get("employeeField_lrpswhaj_id").toString();
+                    JSONArray yyjlArray = JSONArray.parseArray(yyjl);
+                    dataMap.put("employeeField_mfo3dvq2",yyjlArray.get(0));
+                    dataMap.put("textField_mgolu3w2",yyjlArray.get(0));
                 }
-            });
-            //劳防用品
-            dataMap.put("numberField_mfenmeim",0.0);
-            workCloCost.forEach((k,v)->{
-                if (k.equals(name)){
-                    dataMap.put("numberField_mfenmeim",v.get("cost"));
+                List<Map> sonList = ydService.queryDetails(YDParam.builder().
+                        appType("APP_ERBDTFS82HOVBPL3NFH0")
+                        .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                        .formInstanceId(e.get("formInstanceId").toString())
+                        .formUuid("FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC")
+                        .tableFieldId("tableField_lrru2tnq")
+                        .build());
+                //项目点档案子表本月
+                List<Map> sonFilterList = sonList.stream().filter(m -> formatNowMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
+                sonFilterList.forEach(s->{
+                    //人工定额
+                    double person = UtilMap.getDouble(s,"numberField_lrru2tnt_value");
+                    //物料定额
+                    double cost = UtilMap.getDouble(s,"numberField_lrru2tnu_value");
+                    //收入定额
+                    double income = UtilMap.getDouble(s,"numberField_lrru2tns_value");
+                    //回款金额
+                    double back = UtilMap.getDouble(s,"numberField_lrru2to3_value");
+                    //工资定额分项
+                    dataMap.put("numberField_mfenmehp",person);
+                    //物料定额
+                    dataMap.put("numberField_mfenmeih",cost);
+                    //定额收入
+                    dataMap.put("numberField_mfenmejp",income);
+                    //回款金额
+                    dataMap.put("numberField_mfenmek8",back);
+                });
+                //项目点档案子表上月
+                List<Map> sonLastMonthList = sonList.stream().filter(m -> formatLastMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
+                sonLastMonthList.forEach(s->{
+                    //开票金额
+                    double open = UtilMap.getDouble(s,"numberField_lrru2to2_value");
+                    //开票金额
+                    dataMap.put("numberField_mfenmejr",open);
+                });
+                //算薪结果表
+                salarys.forEach((k,v)->{
+                    if (k.equals(name)){
+                        dataMap.putAll(v);
+                    }
+                });
+                //社保公积金
+                socials.forEach((k,v)->{
+                    if (k.equals(name)){
+                        dataMap.putAll(v);
+                    }
+                });
+
+                //遍历部门成本
+                dataMap.put("numberField_mfenmei2",0.0);
+                dataMap.put("numberField_mfenmeil",0.0);
+                dataMap.put("numberField_mfenmeio",0.0);
+                dataMap.put("numberField_mfenmelh",0.0);
+                dataMap.put("numberField_mfenmelg",0.0);
+                dataMap.put("numberField_mfenmek9",0.0);
+                costCollect.forEach((k0,v0)->{
+                    if (k0.equals(name)){
+                        v0.forEach((k1,v1)->{
+                            if ("生产成本-业务外包费".equals(k1)){
+                                //劳务所临时工费用
+                                dataMap.put("numberField_mfenmei2",v1.get("cost"));
+                            }else if ("生产成本-租赁费".equals(k1)){
+                                //租赁
+                                dataMap.put("numberField_mfenmeil",v1.get("cost"));
+                            }else if ("生产成本-折旧".equals(k1)) {
+                                //折旧
+                                dataMap.put("numberField_mfenmeio", v1.get("cost"));
+                            }
+                        });
+                    }
+                });
+                //劳防用品
+                dataMap.put("numberField_mfenmeim",0.0);
+                workCloCost.forEach((k,v)->{
+                    if (k.equals(name)){
+                        dataMap.put("numberField_mfenmeim",v.get("cost"));
+                    }
+                });
+                //物耗(非工作服)
+                dataMap.put("numberField_mfenmeii",0.0);
+                workNoCloCost.forEach((k,v)->{
+                    if (k.equals(name)){
+                        dataMap.put("numberField_mfenmeii",v.get("cost"));
+                    }
+                });
+                //设备维修
+                dataMap.put("numberField_mfenmeij",0.0);
+                repairBillCost.forEach((k,v)->{
+                    if (k.equals(code)){
+                        dataMap.put("numberField_mfenmeij",v.get("cost"));
+                    }
+                });
+                //超期时间
+                daysDiff.forEach((k,v)->{
+                    if (k.equals(code)){
+                        dataMap.put("numberField_mfenmek9",v);
+                    }
+                });
+
+                double bzwhcb = UtilMap.getDouble(e,"numberField_lrn2oy4q_value");
+                final double[] krksl = {0.0};
+                //入库
+                procurements.forEach((k,v)->{
+                    if (k.equals(code)){
+                        krksl[0] = UtilMap.getDouble(v,"cost");
+                    }
+                });
+                if (bzwhcb == 0 || (bzwhcb != 0 && krksl[0] == 0)){
+                    dataMap.put("numberField_mfenmekv",5);//7-入库
+                }else {
+                    dataMap.put("numberField_mfenmekv",0);//7-入库
                 }
-            });
-            //物耗(非工作服)
-            dataMap.put("numberField_mfenmeii",0.0);
-            workNoCloCost.forEach((k,v)->{
-                if (k.equals(name)){
-                    dataMap.put("numberField_mfenmeii",v.get("cost"));
+                //出库
+                materialOuts.forEach((k,v)->{
+                    if (k.equals(code)){
+                        krksl[0] = UtilMap.getDouble(v,"size");
+                    }
+                });
+                if (bzwhcb == 0 || (bzwhcb != 0 && krksl[0] > 0)){
+                    dataMap.put("numberField_mfenmel3",3);//7-出库
+                }else {
+                    dataMap.put("numberField_mfenmel3",0);//7-出库
                 }
-            });
-            //设备维修
-            dataMap.put("numberField_mfenmeij",0.0);
-            repairBillCost.forEach((k,v)->{
-                if (k.equals(code)){
-                    dataMap.put("numberField_mfenmeij",v.get("cost"));
+                //盘点
+                materialChecks.forEach((k,v)->{
+                    if (k.equals(code)){
+                        krksl[0] = UtilMap.getDouble(v,"size");
+                    }
+                });
+                if (bzwhcb == 0 || (bzwhcb != 0 && krksl[0] > 0)){
+                    dataMap.put("numberField_mfenmel9",2);//7-自盘
+                }else {
+                    dataMap.put("numberField_mfenmel9",0);//7-自盘
                 }
-            });
-
-            double bzwhcb = Double.parseDouble(ObjectUtil.isNotNull(e.get("numberField_lrn2oy4q_value")) && !e.get("numberField_lrn2oy4q_value").toString().isEmpty() ? e.get("numberField_lrn2oy4q_value").toString() : "0.0");
-            if (bzwhcb == 0){
-                dataMap.put("numberField_mfenmekv",3);//7-入库
-                dataMap.put("numberField_mfenmel3",3);//7-出库
-                dataMap.put("numberField_mfenmel9",2);//7-自盘
-            }else {
-                dataMap.put("numberField_mfenmekv",0);//7-入库
-                dataMap.put("numberField_mfenmel3",0);//7-出库
-                dataMap.put("numberField_mfenmel9",0);//7-自盘
-            }
-
-            //上月小业主开票
-            lastOpens.forEach((k,v)->{
-                dataMap.put("numberField_mfenmelh",0.0);
-                if (k.equals(code)){
-                    dataMap.put("numberField_mfenmelh",v.get("open"));
+                //上月小业主开票
+                lastOpens.forEach((k,v)->{
+                    if (k.equals(code)){
+                        dataMap.put("numberField_mfenmelh",v.get("open"));
+                    }
+                });
+                //上上月小业主开票
+                lastLastOpens.forEach((k,v)->{
+                    if (k.equals(code)){
+                        dataMap.put("numberField_mfenmelg",v.get("open"));
+                    }
+                });
+                //结算帐期
+                dataMap.put("textField_mfenmejo",SETTLEMENT_PERIOD.get(UtilMap.getString(e,"selectField_mejp7y3y")));
+                //回款账期
+                dataMap.put("textField_mfenmejq",PAYMENT_TERM.get(UtilMap.getString(e,"selectField_lt590fk8")));
+
+
+                //公式字段计算
+                //定额工资
+                dataMap.put("numberField_mfenmehw", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmehp")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmehs")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmeht"));
+                //调整后应发工资
+                dataMap.put("numberField_mfenmei5", UtilMap.getDouble(dataMap,"numberField_mfenmei5")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmei2")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmehs")
+                        + UtilMap.getDouble(dataMap,"numberField_mfenmeht"));
+                //人工结余
+                dataMap.put("numberField_mfenmei6", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
+                        -  UtilMap.getDouble(dataMap,"numberField_mfenmei5"));
+                //人工占比
+                double fm = UtilMap.getDouble(dataMap,"numberField_mfenmejr")
+                        +  UtilMap.getDouble(dataMap,"numberField_mfenmelh");
+                if (fm == 0){
+                    dataMap.put("numberField_mfenmei4",0);
+                }else {
+                    dataMap.put("numberField_mfenmei4", (UtilMap.getDouble(dataMap,"rgzbfz")
+                            + UtilMap.getDouble(dataMap,"numberField_mfenmehs")
+                            + UtilMap.getDouble(dataMap,"numberField_mfenmeht")
+                            + UtilMap.getDouble(dataMap,"numberField_mfenmei2")) / fm * 100);
                 }
-            });
-            //上上月小业主开票
-            lastLastOpens.forEach((k,v)->{
-                dataMap.put("numberField_mfenmelg",0.0);
-                if (k.equals(code)){
-                    dataMap.put("numberField_mfenmelg",v.get("open"));
+                //结余比例
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmehw") == 0){
+                    dataMap.put("numberField_mfenmei7",0);
+                }else {
+                    dataMap.put("numberField_mfenmei7", UtilMap.getDouble(dataMap,"numberField_mfenmei6")
+                            /  UtilMap.getDouble(dataMap,"numberField_mfenmehw") * 100);
                 }
-            });
-            //结算帐期
-            dataMap.put("textField_mfenmejo",SETTLEMENT_PERIOD.get(e.get("selectField_mejp7y3y").toString()));
-            //回款账期
-            dataMap.put("textField_mfenmejq",PAYMENT_TERM.get(e.get("selectField_lt590fk8").toString()));
-
-
-            //公式字段计算
-            //定额工资
-            dataMap.put("numberField_mfenmehw", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmehp"));
-            //调整后应发工资
-            dataMap.put("numberField_mfenmei5", UtilMap.getDouble(dataMap,"numberField_mfenmei5")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmei2"));
-            //人工结余
-            dataMap.put("numberField_mfenmei6", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
-                    -  UtilMap.getDouble(dataMap,"numberField_mfenmei5"));
-            //人工占比
-            double fm = UtilMap.getDouble(dataMap,"numberField_mfenmejr")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmelh");
-            if (fm == 0){
-                dataMap.put("numberField_mfenmei4",0);
-            }else {
-                dataMap.put("numberField_mfenmei4", (UtilMap.getDouble(dataMap,"rgzbfz")
-                        + UtilMap.getDouble(dataMap,"numberField_mfenmei2")) / fm * 100);
-            }
-            //结余比例
-            if (UtilMap.getDouble(dataMap,"numberField_mfenmehw") == 0){
-                dataMap.put("numberField_mfenmei7",0);
-            }else {
-                dataMap.put("numberField_mfenmei7", UtilMap.getDouble(dataMap,"numberField_mfenmei6")
-                        /  UtilMap.getDouble(dataMap,"numberField_mfenmehw") * 100);
-            }
-            //实际费用 (工作服  非工作服  生产成本-租赁费   生产成本-折旧   设备维修)
-            dataMap.put("numberField_mfenmeip",UtilMap.getDouble(dataMap,"numberField_mfenmeim")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmeii")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmeil")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmeio")
-                    +  UtilMap.getDouble(dataMap,"numberField_mfenmeij"));
-            //物耗占比
-            if (UtilMap.getDouble(dataMap,"numberField_mfenmejr")  == 0){
-                dataMap.put("numberField_mfenmeir",0);
-            }else {
-                dataMap.put("numberField_mfenmeir", UtilMap.getDouble(dataMap,"numberField_mfenmeii")
-                        /  UtilMap.getDouble(dataMap,"numberField_mfenmejr") * 100);
-            }
-            //物料结余
-            dataMap.put("numberField_mfenmeis", UtilMap.getDouble(dataMap,"numberField_mfenmeih")
-                    -  UtilMap.getDouble(dataMap,"numberField_mfenmeii"));
-            //结余比例
-            if (UtilMap.getDouble(dataMap,"numberField_mfenmeih") == 0){
-                dataMap.put("numberField_mfenmeit",0);
-            }else {
-                dataMap.put("numberField_mfenmeit", UtilMap.getDouble(dataMap,"numberField_mfenmeis")
-                        /  UtilMap.getDouble(dataMap,"numberField_mfenmeih") * 100);
-            }
-            //结算金额-差额
-            dataMap.put("numberField_mfenmejs", UtilMap.getDouble(dataMap,"numberField_mfenmejr")
-                    -  UtilMap.getDouble(dataMap,"numberField_mfenmejp"));
-            //开票状态
-            if (UtilMap.getDouble(dataMap,"numberField_mfenmejr") > 0){
-                dataMap.put("textField_mgohy54u","已开票");
-            }else {
-                dataMap.put("textField_mgohy54u","未开票");
-            }
-            //增长金额
-            dataMap.put("numberField_mfenmeli", UtilMap.getDouble(dataMap,"numberField_mfenmelh")
-                    -  UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
-            //增长率
-            if (UtilMap.getDouble(dataMap,"numberField_mfenmelg") == 0 && UtilMap.getDouble(dataMap,"numberField_mfenmelh") >= 500){
-                dataMap.put("numberField_mfenmelj",100);
-            }else {
-                dataMap.put("numberField_mfenmelj", UtilMap.getDouble(dataMap,"numberField_mfenmeli")
-                        / UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
-            }
-            UtilMap.map("numberField_mfenmehq, numberField_mfenmehr, numberField_mfenmehy, numberField_mfenmei0",0,0,0,0);
-            ydClient.operateData(YDParam.builder()
-                    .appType("APP_TKO2FYGFQYQQMQFUTUU5")
-                    .systemToken("2IF66SC1XCSY45IUBXA0X9WYE09G3W8GGNEFM7T4")
-                    .formUuid("FORM-C17DA3AEA3064A3D9CA118BBB3116BF6NLUB")
-                    .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfo3dvpr, textField_mfenmegp", dateList, code)))
-                    .formDataJson(JSON.toJSONString(dataMap))
-                    .useLatestVersion(true)
-                    .build(), YDConf.FORM_OPERATION.upsert);
+                //实际费用 (工作服  非工作服  生产成本-租赁费   生产成本-折旧   设备维修)
+                dataMap.put("numberField_mfenmeip",UtilMap.getDouble(dataMap,"numberField_mfenmeim")
+                        +  UtilMap.getDouble(dataMap,"numberField_mfenmeii")
+                        +  UtilMap.getDouble(dataMap,"numberField_mfenmeil")
+                        +  UtilMap.getDouble(dataMap,"numberField_mfenmeio")
+                        +  UtilMap.getDouble(dataMap,"numberField_mfenmeij"));
+                //物耗占比
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmejr")  == 0){
+                    dataMap.put("numberField_mfenmeir",0);
+                }else {
+                    dataMap.put("numberField_mfenmeir", UtilMap.getDouble(dataMap,"numberField_mfenmeii")
+                            /  UtilMap.getDouble(dataMap,"numberField_mfenmejr") * 100);
+                }
+                //物料结余
+                dataMap.put("numberField_mfenmeis", UtilMap.getDouble(dataMap,"numberField_mfenmeih")
+                        -  UtilMap.getDouble(dataMap,"numberField_mfenmeii"));
+                //结余比例
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmeih") == 0){
+                    dataMap.put("numberField_mfenmeit",0);
+                }else {
+                    dataMap.put("numberField_mfenmeit", UtilMap.getDouble(dataMap,"numberField_mfenmeis")
+                            /  UtilMap.getDouble(dataMap,"numberField_mfenmeih") * 100);
+                }
+                //结算金额-差额
+                dataMap.put("numberField_mfenmejs", UtilMap.getDouble(dataMap,"numberField_mfenmejr")
+                        -  UtilMap.getDouble(dataMap,"numberField_mfenmejp"));
+                //开票状态
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmejr") > 0){
+                    dataMap.put("textField_mgohy54u","已开票");
+                }else {
+                    dataMap.put("textField_mgohy54u","未开票");
+                }
+                //增长金额
+                dataMap.put("numberField_mfenmeli", UtilMap.getDouble(dataMap,"numberField_mfenmelh")
+                        -  UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
+                //增长率
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmelg") == 0 && UtilMap.getDouble(dataMap,"numberField_mfenmelh") >= 500){
+                    dataMap.put("numberField_mfenmelj",100);
+                }else {
+                    dataMap.put("numberField_mfenmelj", UtilMap.getDouble(dataMap,"numberField_mfenmeli")
+                            / UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
+                }
+                UtilMap.map("numberField_mfenmehq, numberField_mfenmehr, numberField_mfenmehy, numberField_mfenmei0",0,0,0,0);
+                ydClient.operateData(YDParam.builder()
+                        .appType("APP_TKO2FYGFQYQQMQFUTUU5")
+                        .systemToken("2IF66SC1XCSY45IUBXA0X9WYE09G3W8GGNEFM7T4")
+                        .formUuid("FORM-C17DA3AEA3064A3D9CA118BBB3116BF6NLUB")
+                        .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfo3dvpr, textField_mfenmegp", dateList, code)))
+                        .formDataJson(JSON.toJSONString(dataMap))
+                        .useLatestVersion(true)
+                        .build(), YDConf.FORM_OPERATION.upsert);
+//            }
         });
     }
 
@@ -1136,12 +1301,12 @@ public class WorkServiceImpl implements WorkService {
     @Override
     public void startQuotaConfirm() {
         LocalDate currentDate = LocalDate.now();
-        String formatNowMonth = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+        String formatNowMonth = LocalDateTime.now().plusMonths(-2).format(DateTimeFormatter.ofPattern("yyyy-MM"));
 
         // 获取月份的第一天
-        LocalDateTime firstDay = LocalDateTime.now().withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        LocalDateTime firstDay = LocalDateTime.now().plusMonths(-2).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         // 获取月份的最后一天
-        LocalDateTime lastDay =  LocalDateTime.now().withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
+        LocalDateTime lastDay =  LocalDateTime.now().plusMonths(-2).withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
                 .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
         // 转换回时间戳
         long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();

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

@@ -17,6 +17,14 @@ public interface DDClient_Workflow {
      * @implNote formComponentValues 表单数据内容,控件列表,最大列表长度:150。
      */
     String doProcessInstances(String access_token, String originatorUserId, String processCode, List formComponentValues, Map body_ext);
+    /**
+     * 发起审批实例 新版SDK
+     *
+     * @implNote 若approvers已传值时(即直接指定审批人列表, 最大列表长度:20。),则deptId不需填写。若approvers未传值时(即不直接指定审批人列表),则deptId需必填,若为根部门ID需填1。
+     * @implNote targetSelectActioners 使用OA后台设置的默认流程,并且流程中有审批人自选节点,该参数必填。
+     * @implNote formComponentValues 表单数据内容,控件列表,最大列表长度:150。
+     */
+    String doProcessInstancesNew(String access_token, String originatorUserId, String processCode, List<Map> formComponentValues);
 
     /**
      * 获取审批实例详情

+ 11 - 1
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Workflow.java

@@ -41,7 +41,17 @@ public class DDImplClient_Workflow implements DDClient_Workflow {
         DDR ddr = DDR.doPost("https://oapi.dingtalk.com/topapi/processinstance/create", header, DDConf.initTokenParams(access_token), body);
         return ddr.getProcessInstanceId();
     }
-
+    /**
+     * 发起审批实例 新SDK
+     *
+     * @apiNote https://open.dingtalk.com/document/isvapp/initiate-approval-new
+     */
+    @Override
+    public String doProcessInstancesNew(String access_token, String originatorUserId, String processCode, List<Map> formComponentValues) {
+        Map header = DDConf.initTokenHeader(access_token);
+        Map body = UtilMap.map("originatorUserId, processCode, formComponentValues, deptId", originatorUserId, processCode, formComponentValues,"977208212");
+        return UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances", header, DDConf.initTokenParams(access_token), body);
+    }
     /**
      * 获取单个审批实例详情
      *