Преглед на файлове

项目点档案开票金额月统计测试
采购订单批量选择自动发起
客户满意度调研表,添加任务审批
员工计件工资计算

fyz преди 2 месеца
родител
ревизия
0877334b52

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

@@ -30,6 +30,16 @@ public class PurchaseController {
 
         return McR.success(procureds);
     }
+    /**
+     * 更新待采购数据已采购数量
+     */
+    @PostMapping("updateProcured")
+    public McR updateProcured(@RequestBody Map data){
+
+        McR mcR = purchaseService.updateProcured(data);
+
+        return mcR;
+    }
     /**
      * 自定义页面发起采购订单
      */
@@ -40,4 +50,15 @@ public class PurchaseController {
 
         return McR.success();
     }
+
+    /**
+     * 品管查询满意度模板
+     */
+    @PostMapping("selectDegreeTemplate")
+    public McR selectDegreeTemplate(){
+
+        List<Map> degreeTemplate = purchaseService.selectDegreeTemplate();
+
+        return McR.success(degreeTemplate);
+    }
 }

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

@@ -1,5 +1,7 @@
 package com.malk.lanyun.service;
 
+import com.malk.server.common.McR;
+
 import java.util.List;
 import java.util.Map;
 
@@ -7,4 +9,8 @@ public interface PurchaseService {
     List<Map> selectAllProcured(Map data);
 
     void startPurchaseOrder(Map data);
+
+    List<Map> selectDegreeTemplate();
+
+    McR updateProcured(Map data);
 }

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

@@ -0,0 +1,13 @@
+package com.malk.lanyun.service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+public interface WorkService {
+
+    void getMonthWorkOrder();
+
+    void getMonthWorkSummary();
+}

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

@@ -157,7 +157,9 @@ public class FImplService implements FService {
     public void syncAgingToProject() {
         List<Map> dataList = ydService.queryFormData_all(_initLYParam()
                 .formUuid("FORM-EC785A5AB2B9432C892062823EB7C62A9NTL")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lvituew9, radioField_m883s9n6","正常","否")))
                 .build());
+        System.out.println(dataList.size());
         // 2. 核心代码:双层分组汇总
         // 第一级按 "项目点编号" 分组
         // 第二级按 "开票周期文本" 分组,并对 "含税小计" 求和
@@ -167,7 +169,7 @@ public class FImplService implements FService {
                         Collectors.groupingBy(
                                 map -> (String) map.get("textField_m25j5gxv"), // 第二级分类器
                                 Collectors.summingDouble(
-                                        map -> ((Number) map.get("numberField_lvdnme0z_value")).doubleValue() // 汇总器,处理不同的Number类型
+                                        map -> ((Number) Double.parseDouble(map.get("numberField_lvdnme0z_value").toString().isEmpty()?"0.0":map.get("numberField_lvdnme0z_value").toString())).doubleValue() // 汇总器,处理不同的Number类型
                                 )
                         )
                 ));
@@ -186,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_lrru2to2",stringDoubleMap.get(k1));
+                                s.put("numberField_mfkyfgok",stringDoubleMap.get(k1));
                             }
                         });
                     });

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

@@ -3484,7 +3484,7 @@ public class NCServiceImpl implements NCService {
             log.info("去除直属队、去除运作模式=整体外包的项目收入合计:{}",exceptZSDIncome);
             String delete = "DELETE \n" +
                     "FROM\n" +
-                    " `lanyun_project_analysis_copy1` \n" +
+                    " `lanyun_project_analysis_salary` \n" +
                     "WHERE\n" +
                     " monthString = '"+ yearAndMonth +"'";
 

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

@@ -11,6 +11,7 @@ import com.malk.lanyun.entity.ProjectAnalysis;
 import com.malk.lanyun.service.TimerService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
@@ -2100,19 +2101,28 @@ public class TimerServiceImpl implements TimerService {
 
         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()
                     .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, " +
+                                    "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.update);
+                    .build(), YDConf.FORM_OPERATION.execute);
         });
     }
 

+ 336 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/WorkServiceImpl.java

@@ -0,0 +1,336 @@
+package com.malk.lanyun.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.malk.lanyun.service.WorkService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Personnel;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class WorkServiceImpl implements WorkService {
+    @Value("${dingtalk.agentId}")
+    private Long agentId;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    @Autowired
+    private YDService ydService;
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDClient_Personnel ddClientPersonnel;
+    private YDParam.YDParamBuilder _initLYParam() {
+        return YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP");
+    }
+    @Override
+    public void getMonthWorkOrder() {
+        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());
+
+        List<Map> distributeList = ydService.queryFormData_all(_initLYParam()
+                .formUuid("FORM-886B38D31DA144C2B384BD23C3D13126QSK3")
+                .build());
+        List<Map<String, Object>> distributes = new ArrayList<>();
+        distributeList.forEach(e->{
+            List<Map> distributeSonList = ydService.queryDetails(_initLYParam()
+                    .formInstanceId(e.get("formInstanceId").toString())
+                    .formUuid("FORM-886B38D31DA144C2B384BD23C3D13126QSK3")
+                    .tableFieldId("tableField_lrn734ib")
+                    .build());
+            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"));
+                distributes.add(map);
+            });
+            distributeSonList = ydService.queryDetails(_initLYParam()
+                    .formInstanceId(e.get("formInstanceId").toString())
+                    .formUuid("FORM-886B38D31DA144C2B384BD23C3D13126QSK3")
+                    .tableFieldId("tableField_m9j7tdn7")
+                    .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"));
+                distributes.add(map);
+            });
+        });
+
+        Map<String, 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(),
+                                        list -> {
+                                            double amountSum = list.stream()
+                                                    .mapToDouble(map -> Double.parseDouble(map.get("amount").toString()))
+                                                    .sum();
+
+                                            Map<String, Object> summary = new HashMap<>();
+                                            summary.put("amountSum", amountSum);
+                                            return summary;
+                                        }
+                                )
+                        )
+                ));
+        // 2. 核心代码:双层分组汇总
+        // 第一级按 "项目点编号" 分组
+        // 第二级按 "开票周期文本" 分组,并对 "含税小计" 求和
+        Map<String, List<Map>> groupByIds = dataList.stream()
+                .collect(Collectors.groupingBy(map -> (String) map.get("textField_luqsbqsn")));
+        groupByIds.forEach((k,v)->{
+            //第一步,求和所有相同工程订单的工时合计
+            Double sum = 0.0;
+            for (int i = 0; i < groupByIds.get(k).size(); i++) {
+                //直属队工时合计
+                double zsdWorkHours = Double.parseDouble(ObjectUtil.isNotNull(groupByIds.get(k).get(i).get("numberField_lrn7frhu_value")) &&
+                        !groupByIds.get(k).get(i).get("numberField_lrn7frhu_value").toString().isEmpty() ? groupByIds.get(k).get(i).get("numberField_lrn7frhu_value").toString() : "0.0");
+                //外协工时合计
+                double outWorkHours = Double.parseDouble(ObjectUtil.isNotNull(groupByIds.get(k).get(i).get("numberField_lrn7fri0_value")) &&
+                        !groupByIds.get(k).get(i).get("numberField_lrn7fri0_value").toString().isEmpty() ? groupByIds.get(k).get(i).get("numberField_lrn7fri0_value").toString() : "0.0");
+                //内协工时合计
+                double inWorkHours = Double.parseDouble(ObjectUtil.isNotNull(groupByIds.get(k).get(i).get("numberField_lrn7frig_value")) &&
+                        !groupByIds.get(k).get(i).get("numberField_lrn7frig_value").toString().isEmpty() ? groupByIds.get(k).get(i).get("numberField_lrn7frig_value").toString() : "0.0");
+                sum = sum + zsdWorkHours + outWorkHours + inWorkHours;
+            }
+            //第二步,获取工程订单合同总金额,已在报工单中——numberField_luz7kj3p
+            //第三步,遍历三个人员子表分别统计
+
+            List<Map<String,Object>> dataForm = new ArrayList<>();
+
+            Double finalSum = sum;
+            groupByIds.get(k).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");
+                //负责人
+                Object fzr = g.get("employeeField_lrn7frgx");
+                //施工日期
+                String workDate = g.get("dateField_lrn734i2").toString();
+                //施工内容
+                String workContent = g.get("textField_lrn7frh6").toString();
+                //施工地点
+                String workFrom = g.get("textField_lrn734ie").toString();
+                //备注
+                String bz = g.get("textField_lrn7frhb").toString();
+                //直属队人员名单
+                List<Map> zsdList = ydService.queryDetails(_initLYParam()
+                        .formInstanceId(g.get("formInstanceId").toString())
+                        .formUuid("FORM-C9543719A88F4D99A8E197FD6F9DE182ZOW9")
+                        .tableFieldId("tableField_lrn734ib")
+                        .build());
+                if (ObjectUtil.isNotNull(zsdList) && zsdList.size()>0){
+                    zsdList.forEach(e->{
+                        //人员
+                        String emp = e.get("employeeField_lrs3k7zx").toString();
+                        JSONArray jsonArray = JSONArray.parseArray(emp);
+                        //工时
+                        Double workHours = Double.parseDouble(ObjectUtil.isNotNull(e.get("numberField_lrn7frho_value")) && !e.get("numberField_lrn7frho_value").toString().isEmpty() ? e.get("numberField_lrn7frho_value").toString() : "0.0");
+                        //人均产值
+                        double avg = amount / finalSum * workHours;
+                        //内包/非内包
+                        String type = 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",
+                                workDate, workFrom, workContent, jsonArray.get(0), "", fzr, finalSum, workHours, 0.0, "", avg, amount, bz, "内协",type,k);
+                        dataForm.add(map);
+                    });
+                }
+                //外协人员名单
+                List<Map> outList = ydService.queryDetails(_initLYParam()
+                        .formInstanceId(g.get("formInstanceId").toString())
+                        .formUuid("FORM-C9543719A88F4D99A8E197FD6F9DE182ZOW9")
+                        .tableFieldId("tableField_lrn7frhz")
+                        .build());
+                if (ObjectUtil.isNotNull(outList) && outList.size()>0){
+                    outList.forEach(e->{
+                        //人员
+                        String emp = e.get("textField_lte7odks").toString();
+                        //工时
+                        Double workHours = Double.parseDouble(ObjectUtil.isNotNull(e.get("numberField_lrn7frhx_value")) && !e.get("numberField_lrn7frhx_value").toString().isEmpty() ? e.get("numberField_lrn7frhx_value").toString() : "0.0");
+                        //人均产值
+                        double avg = amount / finalSum * workHours;
+                        //内包/非内包
+                        String type = 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",
+                                workDate, workFrom, workContent, emp, "", fzr, finalSum, workHours, 0.0, "", avg, amount, bz, "内协",type,k);
+                        dataForm.add(map);
+                    });
+                }
+                //内协人员名单
+                List<Map> inList = ydService.queryDetails(_initLYParam()
+                        .formInstanceId(g.get("formInstanceId").toString())
+                        .formUuid("FORM-C9543719A88F4D99A8E197FD6F9DE182ZOW9")
+                        .tableFieldId("tableField_lrn7frif")
+                        .build());
+                if (ObjectUtil.isNotNull(inList) && inList.size()>0){
+                    inList.forEach(e->{
+                        //人员
+                        String emp = e.get("employeeField_lrs3k7zz").toString();
+                        JSONArray jsonArray = JSONArray.parseArray(emp);
+                        //工时
+                        Double workHours = Double.parseDouble(ObjectUtil.isNotNull(e.get("numberField_lrn7fric_value")) && !e.get("numberField_lrn7fric_value").toString().isEmpty() ? e.get("numberField_lrn7fric_value").toString() : "0.0");
+                        //人均产值
+                        double avg = amount / finalSum * workHours;
+                        //内包/非内包
+                        String type = 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",
+                                workDate, workFrom, workContent, jsonArray.get(0), "", fzr, finalSum, workHours, 0.0, "", avg, amount, bz, "内协",type, k);
+                        dataForm.add(map);
+                    });
+                }
+
+                dataForm.forEach(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);
+                                }
+                            });
+                        }
+
+                    });
+                });
+            });
+        });
+    }
+
+    @Override
+    public void getMonthWorkSummary() {
+        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(YDParam.builder()
+                .appType("APP_FKRD7416H19LDAIN348Y")
+                .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
+                .formUuid("FORM-A3E6A06628024EC183BDF295C9BDD42BNZ5Y")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_mfmbs72j", (Object) dateList)))
+                .build());
+        // 按 "姓名" 分组,汇总工时、人均产值、出勤天数
+        Map<String, Map<String, Object>> groupByIds = dataList.stream()
+                .collect(
+                        Collectors.groupingBy(
+                                map -> (String) map.get("textField_mfmbs72k"),
+                                Collectors.collectingAndThen(
+                                        Collectors.toList(),
+                                        list -> {
+                                            double workHours = list.stream()
+                                                    .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_mfmbs72u_value").toString().isEmpty()?map.get("numberField_mfmbs72u_value").toString():"0.0")).doubleValue())
+                                                    .sum();
+                                            int totalSummary = list.stream()
+                                                    .mapToInt(map -> ((Number) Double.parseDouble(!map.get("numberField_mfmbs72y_value").toString().isEmpty()?map.get("numberField_mfmbs72y_value").toString():"0.0")).intValue())
+                                                    .sum();
+                                            return new HashMap<String, Object>() {{
+                                                put("workHours",(double) workHours);
+                                                put("totalSummary", (double) totalSummary);
+                                                put("recordCount", list.size());
+                                            }};
+                                        }
+                                )
+                        )
+                );
+        // 按 "姓名" 分组,汇总工时、人均产值、出勤天数
+        Map<String, Map<String, Map<String, Object>>> groupByType = dataList.stream()
+                .collect(
+                        Collectors.groupingBy(
+                                map -> (String) map.get("textField_mfmbs72k"),
+                                Collectors.groupingBy(
+                                        map -> (String) map.get("textField_mfmbs72x"),
+                                        Collectors.collectingAndThen(
+                                                Collectors.toList(),
+                                                list -> {
+                                                    double workHours = list.stream()
+                                                            .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_mfmbs72u_value").toString().isEmpty() ? map.get("numberField_mfmbs72u_value").toString() : "0.0")).doubleValue())
+                                                            .sum();
+                                                    double totalSummary = list.stream()
+                                                            .mapToInt(map -> ((Number) Double.parseDouble(!map.get("numberField_mfmbs72y_value").toString().isEmpty() ? map.get("numberField_mfmbs72y_value").toString() : "0.0")).intValue())
+                                                            .sum();
+                                                    double totalAmount = list.stream()
+                                                            .mapToInt(map -> ((Number) Double.parseDouble(!map.get("numberField_mfmbs72v_value").toString().isEmpty() ? map.get("numberField_mfmbs72v_value").toString() : "0.0")).intValue())
+                                                            .sum();
+                                                    return new HashMap<String, Object>() {{
+                                                        put("workHours", workHours);
+                                                        put("totalSummary", totalSummary);
+                                                        put("totalAmount", totalAmount);
+                                                        put("recordCount", list.size());
+                                                    }};
+                                                }
+                                        )
+                                )
+                        ));
+        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"));
+                        }
+                    });
+                }
+            });
+            ydClient.operateData(YDParam.builder()
+                    .appType("APP_FKRD7416H19LDAIN348Y")
+                    .systemToken("86D66PA11ITXR3RC60J43DUP75EC2T5T6Z0EMZ91")
+                    .formUuid("FORM-72AAAAD2C4A24F729B0D103A4AF3BE59UFOS")
+                    .formDataJson(JSON.toJSONString(dataMap))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.create);
+        });
+    }
+}

+ 40 - 5
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/purchaseServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.malk.lanyun.service.PurchaseService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
@@ -50,11 +51,6 @@ 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("customer"))){
-            param.put("textField_ltxstp8h",data.get("customer"));
-        } else if (ObjectUtil.isNotNull(data.get("project"))) {
-            param.put("textField_ltxstp85",data.get("project"));
-        }
         if ("物耗/配件".equals(data.get("type"))){
             List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
                     .appType("APP_ERBDTFS82HOVBPL3NFH0")
@@ -94,4 +90,43 @@ public class purchaseServiceImpl implements PurchaseService {
 //                        beginTime,department,header,tableList,jsonArray,sendTime)))
 //                .build(), YDConf.FORM_OPERATION.start);
     }
+
+    @Override
+    public List<Map> selectDegreeTemplate() {
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-643380CCDB014FF29AAEF983B52346C6IBXS")
+                .build());
+        List<Map> sonList = ydService.queryDetails(YDParam.builder().
+                appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formInstanceId(dataList.get(0).get("formInstanceId").toString())
+                .formUuid("FORM-643380CCDB014FF29AAEF983B52346C6IBXS")
+                .tableFieldId("tableField_lr3hv46q")
+                .build());
+        return sonList;
+    }
+
+    @Override
+    public McR updateProcured(Map data) {
+        List<Map> mapList = (List<Map>) data.get("records");
+        mapList.forEach(e->{
+            Double thisBuyNum = Double.parseDouble(e.get("thisBuyNum").toString());//本次采购数量
+            Double canBuyNum = Double.parseDouble(e.get("numberField_ltxyjf0s").toString());//可下单数量
+            Double buyingNum = Double.parseDouble(e.get("numberField_ltxyjf0r").toString());//申请中数量
+            String isAll = "否";
+            if (thisBuyNum == canBuyNum){
+                isAll = "是";
+            }
+            ydClient.operateData(YDParam.builder()
+                    .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                    .formInstanceId(e.get("formInstanceId").toString())
+                    .useLatestVersion(true)
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_ltxyjf0s, numberField_ltxyjf0r, selectField_mff51th7",canBuyNum-thisBuyNum,buyingNum+buyingNum,isAll)))
+                    .build(), YDConf.FORM_OPERATION.update);
+        });
+        return McR.error("400","更新错误");
+    }
 }

+ 3 - 1
mjava/src/main/java/com/malk/server/aliwork/YDConf.java

@@ -64,6 +64,7 @@ public class YDConf {
         retrieve_changed,    // 变更记录
         retrieve_definition, // 表单定义
         retrieve_approval_record,
+        getRunningTasks             //查询运行任务
 
     }
 
@@ -82,7 +83,8 @@ public class YDConf {
         start,                      // 发起流程
         batchSave,                  // 批量创建
         terminate,                  // 终止流程
-        remarks;
+        remarks,
+        execute,                    //执行任务
     }
 
     /**

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

@@ -80,7 +80,21 @@ public class YDParam extends BaseDto {
     private String instanceStatus;
 
     private String approvedResult;
+    ////  任务字段  ////
+    /**
+     * 任务id
+     */
+    private long taskId;
 
+    /**
+     * 审批意见
+     */
+    private String remark;
+
+    /**
+     * 审批结果
+     */
+    private String outResult;
     /**
      * 格式化赋值: 内部使用
      */

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

@@ -69,6 +69,9 @@ public class YDClientImpl implements YDClient {
             case upsert:
                 ddr_new = (DDR_New)UtilHttp.doPost(this.getRequestUrl("/forms/instances/insertOrUpdate"), this.ddClient.initTokenHeader(), bodys, DDR_New.class);
                 break;
+            case execute:
+                ddr_new = (DDR_New)UtilHttp.doPost(this.getRequestUrl("/tasks/execute"), this.ddClient.initTokenHeader(), bodys, DDR_New.class);
+                break;
             case upsert_v2:
                 ddr_new = (DDR_New) UtilHttp.doPost(this.getRequestUrl_v2("/forms/instances/insertOrUpdate"), this.ddClient.initTokenHeader(), bodys, DDR_New.class);
                 break;
@@ -135,7 +138,9 @@ public class YDClientImpl implements YDClient {
             case retrieve_search_form_id:
                 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);
+                break;
             case retrieve_details:
                 ddr_new = DDR_New.doGet(getRequestUrl("/forms/innerTables", ydParam.getFormInstanceId()), ddClient.initTokenHeader(), param);
                 break;