Explorar el Código

采购订单批量选择自动发起,筛选条件调整
客户满意度调研表,添加任务审批
工程部员工计件工资计算调整

fyz hace 2 meses
padre
commit
5d1d30e1d0

+ 12 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/schedule/ScheduleTask.java

@@ -3,6 +3,7 @@ package com.malk.lanyun.schedule;
 import com.malk.lanyun.service.FService;
 import com.malk.lanyun.service.SyncAssetsService;
 import com.malk.lanyun.service.TimerService;
+import com.malk.lanyun.service.WorkService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -31,6 +32,9 @@ public class ScheduleTask {
     @Autowired
     private FService fService;
 
+    @Autowired
+    private WorkService workService;
+
     /**
      * 每月1日凌晨1点自动执行
      */
@@ -185,4 +189,12 @@ public class ScheduleTask {
         log.info("每周六上午10点更新每日用车");
         timerService.updateUseCar();
     }
+
+    /**
+     * 每日上午6点30汇总人员考勤
+     */
+    @Scheduled(cron = "0 30 6 * * ?")
+    void getMonthCheck(){
+        workService.getMonthCheck();
+    }
 }

+ 16 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/WorkService.java

@@ -7,7 +7,23 @@ import java.util.Map;
 
 public interface WorkService {
 
+    /**
+     * 每日报工台账
+     */
     void getMonthWorkOrder();
 
+    /**
+     * 报工产值汇总
+     */
+    void getMonthOutSummary();
+
+    /**
+     * 月产值汇总表
+     */
     void getMonthWorkSummary();
+
+    /**
+     * 考勤数据表汇总
+     */
+    void getMonthCheck();
 }

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

@@ -33,10 +33,7 @@ import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -2078,10 +2075,27 @@ public class TimerServiceImpl implements TimerService {
                         .formInstanceId(formInstanceId)
                         .build(),
                 YDConf.FORM_QUERY.retrieve_id).getFormData();
+        long timestamp = Long.parseLong(formData.get("dateField_mfozau95").toString());
+        // 转换为Instant
+        Instant instant = Instant.ofEpochMilli(timestamp);
+        // 转换为LocalDateTime
+        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+        // 获取月份的第一天
+        LocalDateTime firstDay = dateTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        // 获取月份的最后一天
+        LocalDateTime lastDay = dateTime.withDayOfMonth(dateTime.toLocalDate().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));
+
         YDParam ydParam = YDParam.builder().appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                 .formUuid("FORM-B8BF5D90835A41D89577969E4AB47014EY2S")
-                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_luv1szlz",formData.get("selectField_mf5211h0"))))
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_luv1szlz, dateField_mfozau95",formData.get("textField_mfcm1eso"),dateList)))
                 .instanceStatus("RUNNING")
                 .build();
         float pageSize = YDConf.PAGE_SIZE_LIMIT;
@@ -2096,33 +2110,36 @@ public class TimerServiceImpl implements TimerService {
             ydParam.setCurrentPage(page);
             dataList.addAll((List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_process).getData());
         }
-        System.out.println(dataList);
-        System.out.println(dataList.size());
 
         List<Map> mapList = (List<Map>) formData.get("tableField_lr3hv46q");
         dataList.forEach(e->{
-            Map result = (Map) ydClient.queryData(YDParam.builder()
-                    .appType("APP_ERBDTFS82HOVBPL3NFH0")
-                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                    .formInstanceId(e.get("processInstanceId").toString()).build(), YDConf.FORM_QUERY.getRunningTasks).getResult();
-
-            ydClient.operateData(YDParam.builder()
+            List<Map> result = (List<Map>) ydClient.queryData(YDParam.builder()
                     .appType("APP_ERBDTFS82HOVBPL3NFH0")
                     .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-                    .formInstanceId(e.get("processInstanceId").toString())
                     .userId("396511732")
-                    .outResult("AGREE")
-                    .noExecuteExpression(true)
-                    .taskId(Long.parseLong(result.get("taskId").toString()))
-                    .useLatestVersion(true)
-                    //服务态度 清洁品质 应急处理 其他 职务 电话 日期 手写签名 总得分 贵司对项目营运工作的总体评价 子表 是否达标
-                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_luv1szm5, textareaField_luv1szm6, textareaField_luv1szm7, " +
-                                    "textareaField_luv1szm8, textField_luv1szm4, textField_luv1szm9, dateField_lrncgx89, digitalSignatureField_lth1gmpg, " +
-                                    "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("textField_luv1szm4"),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"))))
-                    .build(), YDConf.FORM_OPERATION.execute);
+                    .processInstanceId(e.get("processInstanceId").toString()).build(), YDConf.FORM_QUERY.getRunningTasks).getResult();
+
+            log.info("result:{}",result);
+            result.forEach(r->{
+                ydClient.operateData(YDParam.builder()
+                        .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                        .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                        .processInstanceId(e.get("processInstanceId").toString())
+                        .userId("396511732")
+                        .outResult("AGREE")
+                        .remark("同意")
+                        .noExecuteExpression(true)
+                        .taskId(String.valueOf(r.get("taskId")))
+                        .useLatestVersion(true)
+                        //服务态度 清洁品质 应急处理 其他 职务 电话 日期 手写签名 总得分 贵司对项目营运工作的总体评价 子表 是否达标
+                        .formDataJson(JSON.toJSONString(UtilMap.map("textareaField_luv1szm5, textareaField_luv1szm6, textareaField_luv1szm7, " +
+                                        "textareaField_luv1szm8, textField_luv1szm4, textField_luv1szm9, dateField_lrncgx89, digitalSignatureField_lth1gmpg, " +
+                                        "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("textField_luv1szm4"),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"))))
+                        .build(), YDConf.FORM_OPERATION.execute);
+            });
         });
     }
 

+ 175 - 40
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/WorkServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.lanyun.service.WorkService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
@@ -50,14 +51,17 @@ public class WorkServiceImpl implements WorkService {
         Date beginOfMonth = DateUtil.beginOfMonth(DateUtil.lastMonth());
         Date endOfMonth = DateUtil.endOfMonth(DateUtil.lastMonth());
         String[] dateList = new String[2];
-        dateList[0] = String.valueOf(beginOfMonth.getTime());
-        dateList[1] = String.valueOf(endOfMonth.getTime());
+//        dateList[0] = String.valueOf(beginOfMonth.getTime());
+        dateList[0] = String.valueOf(1755705600000L);
+//        dateList[1] = String.valueOf(endOfMonth.getTime());
+        dateList[1] = String.valueOf(1755791999000L);
         //获取当月所有报工单
         List<Map> dataList = ydService.queryFormData_all(_initLYParam()
                 .formUuid("FORM-C9543719A88F4D99A8E197FD6F9DE182ZOW9")
                 .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lrn734i2", (Object) dateList)))
                 .build());
 
+        //分包派发
         List<Map> distributeList = ydService.queryFormData_all(_initLYParam()
                 .formUuid("FORM-886B38D31DA144C2B384BD23C3D13126QSK3")
                 .build());
@@ -71,7 +75,7 @@ public class WorkServiceImpl implements WorkService {
             distributeSonList.forEach(s->{
                 String emp = s.get("employeeField_lrs3k7zx").toString();
                 JSONArray jsonArray = JSONArray.parseArray(emp);
-                Map<String, Object> map = UtilMap.map("code, emp, amount", e.get("textField_mfuyj0dp"), jsonArray.get(0), s.get("numberField_lvkm787c_value"));
+                Map<String, Object> map = UtilMap.map("emp, amount", jsonArray.get(0), s.get("numberField_lvkm787c_value"));
                 distributes.add(map);
             });
             distributeSonList = ydService.queryDetails(_initLYParam()
@@ -81,15 +85,13 @@ public class WorkServiceImpl implements WorkService {
                     .build());
             distributeSonList.forEach(s->{
                 String emp = s.get("textField_mad9s638").toString();
-                Map<String, Object> map = UtilMap.map("code, emp, amount", e.get("textField_mfuyj0dp"), emp, s.get("numberField_m9j7tdn4_value"));
+                Map<String, Object> map = UtilMap.map("emp, amount",emp, s.get("numberField_m9j7tdn4_value"));
                 distributes.add(map);
             });
         });
 
-        Map<String, Map<String, Map<String, Object>>> collect = distributes.stream()
+        Map<String, Map<String, Object>> collect = distributes.stream()
                 .collect(Collectors.groupingBy(
-                        map -> String.valueOf(map.get("code")),
-                        Collectors.groupingBy(
                                 map -> String.valueOf(map.get("emp")),
                                 Collectors.collectingAndThen(
                                         Collectors.toList(),
@@ -104,7 +106,7 @@ public class WorkServiceImpl implements WorkService {
                                         }
                                 )
                         )
-                ));
+                );
         // 2. 核心代码:双层分组汇总
         // 第一级按 "项目点编号" 分组
         // 第二级按 "开票周期文本" 分组,并对 "含税小计" 求和
@@ -131,7 +133,7 @@ public class WorkServiceImpl implements WorkService {
             List<Map<String,Object>> dataForm = new ArrayList<>();
 
             Double finalSum = sum;
-            groupByIds.get(k).forEach(g->{
+            v.forEach(g->{
                 //合同总金额
                 Double amount = Double.parseDouble(ObjectUtil.isNotNull(g.get("numberField_luz7kj3p_value"))&& !g.get("numberField_luz7kj3p_value").toString().isEmpty()?g.get("numberField_luz7kj3p_value").toString():"0.0");
                 //负责人
@@ -160,7 +162,7 @@ public class WorkServiceImpl implements WorkService {
                         //人均产值
                         double avg = amount / finalSum * workHours;
                         //内包/非内包
-                        String type = e.get("selectField_mfmkxzbk").toString();
+                        String type = ObjectUtil.isNotNull(e.get("selectField_mfmkxzbk"))?e.get("selectField_mfmkxzbk").toString():"非内包";
                         //日期 施工单位 施工内容 姓名 定点 负责人 总工时 工时 计件金额 内包 人均产值 总额 备注
                         Map<String, Object> map = UtilMap.map("dateField_mfmbs72j, textField_mfmbs72h, textField_mfmbs72i, textField_mfmbs72k, textField_mfmbs72m, employeeField_mfmbs72q, numberField_mfmbs72s, " +
                                         "numberField_mfmbs72u, numberField_mfmbs72v, textField_mfmbs72x, numberField_mfmbs72y, numberField_mfmbs72z, textField_mfmbs731, textField_mfmj5lmy, textField_mfmbs72x, code",
@@ -183,7 +185,7 @@ public class WorkServiceImpl implements WorkService {
                         //人均产值
                         double avg = amount / finalSum * workHours;
                         //内包/非内包
-                        String type = e.get("selectField_mfmkxzbm").toString();
+                        String type = ObjectUtil.isNotNull(e.get("selectField_mfmkxzbm"))?e.get("selectField_mfmkxzbm").toString():"非内包";
                         //日期 施工单位 施工内容 姓名 定点 负责人 总工时 工时 计件金额 内包 人均产值 总额 备注
                         Map<String, Object> map = UtilMap.map("dateField_mfmbs72j, textField_mfmbs72h, textField_mfmbs72i, textField_mfmbs72k, textField_mfmbs72m, employeeField_mfmbs72q, numberField_mfmbs72s, " +
                                         "numberField_mfmbs72u, numberField_mfmbs72v, textField_mfmbs72x, numberField_mfmbs72y, numberField_mfmbs72z, textField_mfmbs731, textField_mfmj5lmy, textField_mfmbs72x, code",
@@ -207,7 +209,7 @@ public class WorkServiceImpl implements WorkService {
                         //人均产值
                         double avg = amount / finalSum * workHours;
                         //内包/非内包
-                        String type = e.get("selectField_mfmkxzbo").toString();
+                        String type = ObjectUtil.isNotNull(e.get("selectField_mfmkxzbo"))?e.get("selectField_mfmkxzbo").toString():"非内包";
                         //日期 施工单位 施工内容 姓名 定点 负责人 总工时 工时 计件金额 内包 人均产值 总额 备注
                         Map<String, Object> map = UtilMap.map("dateField_mfmbs72j, textField_mfmbs72h, textField_mfmbs72i, textField_mfmbs72k, textField_mfmbs72m, employeeField_mfmbs72q, numberField_mfmbs72s, " +
                                         "numberField_mfmbs72u, numberField_mfmbs72v, textField_mfmbs72x, numberField_mfmbs72y, numberField_mfmbs72z, textField_mfmbs731, textField_mfmj5lmy, textField_mfmbs72x, code",
@@ -217,27 +219,72 @@ public class WorkServiceImpl implements WorkService {
                 }
 
                 dataForm.forEach(e->{
+                    System.out.println(e);
                     collect.forEach((k0,v0)->{
-                        if (k0.equals(e.get("code"))){
-                            collect.get(k0).forEach((k1,v1)->{
-                                if (k1.equals(e.get("textField_mfmbs72k"))){
-                                    ydClient.operateData(YDParam.builder()
-                                            .appType("APP_FKRD7416H19LDAIN348Y")
-                                            .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
-                                            .formUuid("FORM-A3E6A06628024EC183BDF295C9BDD42BNZ5Y")
-                                            .formDataJson(JSON.toJSONString(e))
-                                            .useLatestVersion(true)
-                                            .build(), YDConf.FORM_OPERATION.create);
-                                }
-                            });
+                        if (e.get("textField_mfmbs72k").toString().contains(k0)){
+                            if ("内包".equals(e.get("textField_mfmbs72x"))){
+                                e.put("numberField_mfmbs72v",v0.get("amountSum"));
+                                return;
+                            }
                         }
-
                     });
+                    ydClient.operateData(YDParam.builder()
+                            .appType("APP_FKRD7416H19LDAIN348Y")
+                            .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
+                            .formUuid("FORM-A3E6A06628024EC183BDF295C9BDD42BNZ5Y")
+                            .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfmbs72j, textField_mfmbs72k", dateList, e.get("textField_mfmbs72k"))))
+                            .formDataJson(JSON.toJSONString(e))
+                            .useLatestVersion(true)
+                            .build(), YDConf.FORM_OPERATION.create);
                 });
             });
         });
     }
 
+    @Override
+    public void getMonthOutSummary() {
+        Date date = DateUtil.date();
+        Date beginOfMonth = DateUtil.beginOfMonth(DateUtil.lastMonth());
+        Date endOfMonth = DateUtil.endOfMonth(DateUtil.lastMonth());
+        String[] dateList = new String[2];
+        dateList[0] = String.valueOf(beginOfMonth.getTime());
+        dateList[1] = String.valueOf(endOfMonth.getTime());
+        //获取当月所有报工单
+        List<Map> dataList = ydService.queryFormData_all(_initLYParam()
+                .formUuid("FORM-C9543719A88F4D99A8E197FD6F9DE182ZOW9")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lrn734i2", (Object) dateList)))
+                .build());
+        dataList.forEach(d->{
+            //直属队工时合计
+            double zsdWorkHours = Double.parseDouble(ObjectUtil.isNotNull(d.get("numberField_lrn7frhu_value")) &&
+                    !d.get("numberField_lrn7frhu_value").toString().isEmpty() ? d.get("numberField_lrn7frhu_value").toString() : "0.0");
+            //外协工时合计
+            double outWorkHours = Double.parseDouble(ObjectUtil.isNotNull(d.get("numberField_lrn7fri0_value")) &&
+                    !d.get("numberField_lrn7fri0_value").toString().isEmpty() ? d.get("numberField_lrn7fri0_value").toString() : "0.0");
+            //内协工时合计
+            double inWorkHours = Double.parseDouble(ObjectUtil.isNotNull(d.get("numberField_lrn7frig_value")) &&
+                    !d.get("numberField_lrn7frig_value").toString().isEmpty() ? d.get("numberField_lrn7frig_value").toString() : "0.0");
+            //合同总额
+            Double amount = Double.parseDouble(ObjectUtil.isNotNull(d.get("numberField_luz7kj3p_value"))&& !d.get("numberField_luz7kj3p_value").toString().isEmpty()?d.get("numberField_luz7kj3p_value").toString():"0.0");
+
+            //日期 早上到达时间 下午结束时间 施工单位 施工内容 联系人 工程负责人 人工数 人均产值 物耗金额 物耗成本比率 施工地址 联系电话
+            Map<String, Object> dataForm = UtilMap.map("dateField_mfmbs72j, dateField_lrn7frgy, dateField_lrn7frgz, textField_mfmbs72h, textField_mfmbs72i, textField_mfmbs72k, employeeField_mfmbs72q, " +
+                            "numberField_mfmbs72s, numberField_mfmbs72y, numberField_mfmbs72z, numberField_mfz00i97, textField_mfz00i96, textField_mfz00i98", d.get("dateField_lrn734i2"),
+                    d.get("dateField_lrn7frgy"), d.get("dateField_lrn7frgz"), d.get("textField_lrn734ie"), d.get("textField_lrn7frh6"), d.get("textField_lv37crl1"),
+                    d.get("employeeField_lrn7frgx_id"), zsdWorkHours + outWorkHours + inWorkHours, amount / (zsdWorkHours + outWorkHours + inWorkHours), 0.0, 0.0,
+                    d.get("textField_luz6ben7"), d.get("textField_lv37crkw"));
+
+            ydClient.operateData(YDParam.builder()
+                    .appType("APP_FKRD7416H19LDAIN348Y")
+                    .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
+                    .formUuid("FORM-52DCE3E917C3432AA559A146E582EB71NI0B")
+                    .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfmbs72j, textField_mfmbs72k", dateList, dataForm.get("textField_mfmbs72k"))))
+                    .formDataJson(JSON.toJSONString(dataForm))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        });
+    }
+
     @Override
     public void getMonthWorkSummary() {
         Date beginOfMonth = DateUtil.beginOfMonth(DateUtil.lastMonth());
@@ -275,7 +322,7 @@ public class WorkServiceImpl implements WorkService {
                                 )
                         )
                 );
-        // 按 "姓名" 分组,汇总工时、人均产值、出勤天数
+        // 按 "姓名"、"内包/非内包" 分组,汇总工时、人均产值、出勤天数
         Map<String, Map<String, Map<String, Object>>> groupByType = dataList.stream()
                 .collect(
                         Collectors.groupingBy(
@@ -298,39 +345,127 @@ public class WorkServiceImpl implements WorkService {
                                                         put("workHours", workHours);
                                                         put("totalSummary", totalSummary);
                                                         put("totalAmount", totalAmount);
-                                                        put("recordCount", list.size());
                                                     }};
                                                 }
                                         )
                                 )
                         ));
+        List<Map> balanceList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_FKRD7416H19LDAIN348Y")
+                .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
+                .formUuid("FORM-C76A49442DF84ECCA6C0654623464861ELB2")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_mfxkiafr", (Object) dateList)))
+                .build());
         groupByIds.forEach((k0,v0)->{
             Map<String, Object> dataMap = UtilMap.map("dateField_mfmbs72j, textField_mfmbs72k, numberField_mfmbs72s, numberField_mfmbs72u, numberField_mfmbs72y",
                     DateUtil.lastMonth(), k0, v0.get("recordCount"), v0.get("workHours"), v0.get("totalSummary"));
             groupByType.forEach((k1,v1)->{
                 //月份 姓名 出勤天数 工时 应计总产值
                 if (k0.equals(k1)){
-                    v1.forEach((k2,v2)->{
-                        if ("内包".equals(k2)){
-                            double inWorkHours = Double.parseDouble(v2.get("workHours").toString().isEmpty()?"0.0":v2.get("workHours").toString());
-                            double allWorkHours = Double.parseDouble(v0.get("workHours").toString().isEmpty()?"0.0":v0.get("workHours").toString());
-                            double outWorkHours = allWorkHours - inWorkHours;
-                            //内包工时 非内包工时 内包金额
-                            dataMap.putAll(UtilMap.map("numberField_mfmjcdtu, numberField_mfmjcdtt, numberField_mfmjcdu0",inWorkHours,outWorkHours,v2.get("totalAmount")));
-                        } else if ("非内包".equals(k2)) {
-                            double totalAmount = Double.parseDouble(v2.get("totalAmount").toString().isEmpty()?"0.0":v2.get("totalAmount").toString());
-                            dataMap.put("numberField_mfmbs72v",v2.get("totalSummary"));
-                        }
-                    });
+                    double allWorkHours = Double.parseDouble(v0.get("workHours").toString().isEmpty()?"0.0":v0.get("workHours").toString());
+                    if (v1.containsKey("内包")){
+                        double inWorkHours = Double.parseDouble(v1.get("内包").get("workHours").toString().isEmpty()?"0.0":v1.get("内包").get("workHours").toString());
+                        double outWorkHours = allWorkHours - inWorkHours;
+                        //内包工时 非内包工时 内包金额
+                        dataMap.putAll(UtilMap.map("numberField_mfmjcdtu, numberField_mfmjcdtt, numberField_mfmjcdu0",inWorkHours,outWorkHours,v1.get("内包").get("totalAmount")));
+                    }else {
+                        dataMap.putAll(UtilMap.map("numberField_mfmjcdtu, numberField_mfmjcdtt, numberField_mfmjcdu0",0.0,allWorkHours,0.0));
+                    }
+                    if (v1.containsKey("非内包")){
+                        double totalSummary = Double.parseDouble(v1.get("非内包").get("totalSummary").toString().isEmpty()?"0.0":v1.get("非内包").get("totalSummary").toString());
+                        dataMap.put("numberField_mfmbs72v",totalSummary);
+                    }else {
+                        dataMap.put("numberField_mfmbs72v",0.0);
+                    }
+                }
+            });
+            //匹配调差
+            balanceList.forEach(b->{
+                if (k0.contains(b.get("textField_mfxkiafs").toString())){
+                    double balance = Double.parseDouble(ObjectUtil.isNotNull(b.get("numberField_mfxkiafq")) && !b.get("numberField_mfxkiafq").toString().isEmpty() ? b.get("numberField_mfxkiafq").toString() : "0.0");
+                    //补差产值
+                    dataMap.put("numberField_mfmbs72z",balance);
+
                 }
             });
+            double totalSummary = Double.parseDouble(ObjectUtil.isNotNull(dataMap.get("numberField_mfmbs72v")) && !dataMap.get("numberField_mfmbs72v").toString().isEmpty() ? dataMap.get("numberField_mfmbs72v").toString() : "0.0");
+            double outWorkHours = Double.parseDouble(ObjectUtil.isNotNull(dataMap.get("numberField_mfmbs72u")) && !dataMap.get("numberField_mfmbs72u").toString().isEmpty() ? dataMap.get("numberField_mfmbs72u").toString() : "0.0");
+            double cqts = Double.parseDouble(ObjectUtil.isNotNull(dataMap.get("numberField_mfmbs72s")) && !dataMap.get("numberField_mfmbs72s").toString().isEmpty() ? dataMap.get("numberField_mfmbs72s").toString() : "0.0");
+            double balance = Double.parseDouble(ObjectUtil.isNotNull(dataMap.get("numberField_mfmbs72z")) && !dataMap.get("numberField_mfmbs72z").toString().isEmpty() ? dataMap.get("numberField_mfmbs72z").toString() : "0.0");
+            totalSummary = totalSummary + balance;
+            //个人效率总量(非内包金额)
+            dataMap.put("numberField_mfmjcdtv",totalSummary);
+            //效率工作量
+            dataMap.put("numberField_mfmjcdtw",totalSummary * 0.06);
+            //队月度人均工作量
+            dataMap.put("numberField_mfmjcdtx",totalSummary / outWorkHours);
+            //队月度人均效益工作量(非内包人均)
+            dataMap.put("numberField_mfmjcdty",totalSummary / outWorkHours * 0.4 / 21.75 * cqts);
             ydClient.operateData(YDParam.builder()
                     .appType("APP_FKRD7416H19LDAIN348Y")
                     .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
                     .formUuid("FORM-72AAAAD2C4A24F729B0D103A4AF3BE59UFOS")
+                    .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfmbs72j, textField_mfmbs72k", dateList, k0)))
                     .formDataJson(JSON.toJSONString(dataMap))
                     .useLatestVersion(true)
-                    .build(), YDConf.FORM_OPERATION.create);
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        });
+    }
+
+    @Override
+    public void getMonthCheck() {
+        Date date = DateUtil.date();
+        Date beginOfMonth = DateUtil.beginOfMonth(date);
+        Date endOfMonth = DateUtil.endOfMonth(date);
+        String[] dateList = new String[2];
+        dateList[0] = String.valueOf(beginOfMonth.getTime());
+        dateList[1] = String.valueOf(endOfMonth.getTime());
+        //获取当月所有报工单
+        List<Map> dataList = ydService.queryFormData_all(_initLYParam()
+                .formUuid("FORM-78C6682DCD5C4A549F463CE86133B0C9XTKC")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lr521kcc", (Object) dateList)))
+                .build());
+        Map<String, HashMap<String, Object>> collect = dataList.stream()
+                .filter(map -> ObjectUtil.isNotNull(map.get("departmentSelectField_ltgjv0bp")))
+                .collect(
+                        Collectors.groupingBy(
+                                map -> (String) map.get("departmentSelectField_ltgjv0bp").toString(),
+                                Collectors.collectingAndThen(
+                                        Collectors.toList(),
+                                        list -> {
+                                            double ys = list.stream()
+                                                    .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lr521kce_value").toString().isEmpty() ? map.get("numberField_lr521kce_value").toString() : "0.0")).doubleValue())
+                                                    .sum();
+                                            double sx = list.stream()
+                                                    .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lr521kcg_value").toString().isEmpty() ? map.get("numberField_lr521kcg_value").toString() : "0.0")).doubleValue())
+                                                    .sum();
+                                            double jr = list.stream()
+                                                    .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lr521kch_value").toString().isEmpty() ? map.get("numberField_lr521kch_value").toString() : "0.0")).doubleValue())
+                                                    .sum();
+                                            return new HashMap<String, Object>() {{
+                                                put("numberField_lr521kce", ys);
+                                                put("numberField_lr521kcg", sx);
+                                                put("numberField_lr521kch", jr);
+                                            }};
+                                        }
+                                )
+                        )
+                );
+        System.out.println(collect.size());
+        //遍历获取项目点名称
+        collect.forEach((k0,v0)->{
+            JSONArray jsonArray = JSONArray.parseArray(k0);
+            Map<String, Object> updateMap = UtilMap.map("departmentSelectField_ltgjv0bp, dateField_lr521kcc", k0,beginOfMonth);
+            jsonArray.forEach(e->{
+                updateMap.put("textField_mfxoavab",e.toString());
+                updateMap.putAll(collect.get(k0));
+            });
+            System.out.println(updateMap);
+            ydClient.operateData(_initLYParam()
+                    .searchCondition(JSON.toJSONString(UtilMap.map("dateField_lr521kcc, textField_mfxoavab", dateList, jsonArray.get(0))))
+                    .formUuid("FORM-80FE813A909547139065CFEAA98C26C31HSW")
+                    .formDataJson(JSON.toJSONString(updateMap))
+                    .build(), YDConf.FORM_OPERATION.upsert);
         });
     }
 }

+ 6 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/purchaseServiceImpl.java

@@ -51,6 +51,12 @@ public class purchaseServiceImpl implements PurchaseService {
         List<Map> lastList = new ArrayList<>();
         Map<String, Object> param = new HashMap<>();
         param.put("selectField_mff51th7","否");
+        if (ObjectUtil.isNotNull(data.get("gszt"))){
+            param.put("selectField_ltxstp89",data.get("gszt"));
+        }
+        if (ObjectUtil.isNotNull(data.get("gysmc"))){
+            param.put("textField_ltxstp8h",data.get("gysmc"));
+        }
         if ("物耗/配件".equals(data.get("type"))){
             List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
                     .appType("APP_ERBDTFS82HOVBPL3NFH0")

+ 18 - 14
mjava/src/main/java/com/malk/server/aliwork/YDParam.java

@@ -21,7 +21,21 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 public class YDParam extends BaseDto {
+    ////  任务字段  ////
+    /**
+     * 任务id
+     */
+    private String taskId = "";
 
+    /**
+     * 审批意见
+     */
+    private String remark = "";
+
+    /**
+     * 审批结果
+     */
+    private String outResult = "";
     /**
      * 接口参数
      */
@@ -80,21 +94,7 @@ public class YDParam extends BaseDto {
     private String instanceStatus;
 
     private String approvedResult;
-    ////  任务字段  ////
-    /**
-     * 任务id
-     */
-    private long taskId;
-
-    /**
-     * 审批意见
-     */
-    private String remark;
 
-    /**
-     * 审批结果
-     */
-    private String outResult;
     /**
      * 格式化赋值: 内部使用
      */
@@ -238,4 +238,8 @@ public class YDParam extends BaseDto {
     public interface Definition extends Default {
 
     }
+
+    public interface Task extends Default {
+
+    }
 }

+ 2 - 0
mjava/src/main/java/com/malk/server/dingtalk/DDR_New.java

@@ -60,6 +60,8 @@ public class DDR_New<T> extends VenR {
 
     private String formInstId;
 
+    private String taskId;
+
     private Map formData;
 
     /**

+ 1 - 1
mjava/src/main/java/com/malk/service/aliwork/impl/YDClientImpl.java

@@ -139,7 +139,7 @@ public class YDClientImpl implements YDClient {
                 ddr_new = DDR_New.doPost(getRequestUrl("/forms/instances/ids") + "/" + ydParam.getAppType() + "/" + ydParam.getFormUuid(), ddClient.initTokenHeader(), param, param);
                 break;
             case getRunningTasks:
-                ddr_new = DDR_New.doGet(getRequestUrl("/processes/tasks/getRunningTasks?processInstanceId=")+ydParam.getProcessInstanceId()+ "&appType=" + ydParam.getAppType() + "&systemToken=" + ydParam.getSystemToken() , ddClient.initTokenHeader(), param);
+                ddr_new = DDR_New.doGet(getRequestUrl("/processes/tasks/getRunningTasks?processInstanceId=")+ydParam.getProcessInstanceId()+ "&appType=" + ydParam.getAppType() + "&systemToken=" + ydParam.getSystemToken() + "&userId=" + ydParam.getUserId(), ddClient.initTokenHeader(), param);
                 break;
             case retrieve_details:
                 ddr_new = DDR_New.doGet(getRequestUrl("/forms/innerTables", ydParam.getFormInstanceId()), ddClient.initTokenHeader(), param);