소스 검색

修复批量审核情况下,审批流BUG造成的错误数据

seyason 2 년 전
부모
커밋
141184dd40

+ 52 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1237,8 +1237,58 @@ public class ReportController {
     }
 
     @GetMapping("/fixIssue")
-    public HttpRespMsg fixIssue(){
-        return reportService.fixIssue();
+    public HttpRespMsg fixIssue(Integer companyId){
+        HttpRespMsg msg = new HttpRespMsg();
+        List<Map<String, Object>> mapList = reportMapper.getErrorData(companyId);
+        List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+        System.out.println("mapList.size()=="+mapList.size());
+        Report report = new Report();
+        report.setState(0);
+        report.setProjectAuditState(1);
+        List<Integer> ids = new ArrayList<>();
+        mapList.forEach(map->{
+            Integer id = (Integer)map.get("id");
+            ids.add(id);
+        });
+        if (ids.size() > 0) {
+            reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
+        }
+        //按照某日当天的日报是否都是项目审核通过,需要进入下一个节点
+        int totalUpdateCnt = 0;
+        for (Map<String, Object> map : mapList) {
+            String creatorId = (String) map.get("creator_id");
+            String createDate = (String) map.get("create_date");
+            List<Report> sameDayReports = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", createDate)
+                    .eq("creator_id", creatorId));
+            long pendingCount = sameDayReports.stream().filter(same -> same.getProjectAuditState() == 0).count();
+            if (pendingCount == 0) {
+                Report upR = new Report();
+                User auditTargetUser = userService.getById(creatorId);
+                List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
+                        new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
+                                .orderByAsc("seq"));
+                for (int m = 0; m < settings.size(); m++) {
+                    if (settings.get(m).getIsDeptAudit() == 0) {//找到项目审核的那个节点
+                        AuditWorkflowTimeSetting nextNode = settings.get(m + 1);
+                        upR.setIsDeptAudit(nextNode.getIsDeptAudit());
+                        if (upR.getIsDeptAudit() == 1) {
+                            upR.setAuditDeptid(nextNode.getAuditDeptId());
+                            upR.setAuditDeptManagerid(allDepts.stream()
+                                    .filter(ad -> ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId());
+                        }
+                        upR.setIsFinalAudit(nextNode.getIsFinal());
+                        break;
+                    }
+                }
+                List<Integer> collect = sameDayReports.stream().map(Report::getId).collect(Collectors.toList());
+                int cnt = reportMapper.update(upR, new QueryWrapper<Report>().in("id", collect));
+                System.out.println("更新了:" + cnt);
+                totalUpdateCnt += cnt;
+            }
+        }
+        System.out.println("总共更新了:"+totalUpdateCnt);
+        return msg;
     }
+
 }
 

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -3,6 +3,7 @@ package com.management.platform.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.management.platform.entity.Report;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
 import java.time.LocalDate;
@@ -131,4 +132,9 @@ public interface ReportMapper extends BaseMapper<Report> {
     void deleteReportTask(Integer taskId);
 
     List<Map<String, Object>> getUserReportTimelinessRate(Integer companyId,String startDate, String endDate);
+    @Select("SELECT report.id, report.creator_id,  DATE_FORMAT(report.`create_date`, '%Y-%m-%d') AS create_date FROM report WHERE report.state = 1  AND report.`project_audit_state`=0 \n" +
+            "AND EXISTS(SELECT 1 FROM audit_workflow_time_setting s, `user` u WHERE s.dept_id = u.department_id AND u.id = report.`creator_id` AND s.audit_dept_id IS NOT NULL)\n" +
+            "AND EXISTS(SELECT 1 FROM report r WHERE report.`creator_id` = r.creator_id AND report.`create_date` = r.create_date AND report.id <> r.id AND r.state = 0)\n" +
+            "AND report.audit_dept_managerid IS NULL AND report.`company_id` = #{companyId}\n")
+    List<Map<String, Object>> getErrorData(Integer companyId);
 }

+ 7 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1327,7 +1327,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                             //当前的先审核通过
-                            reportMapper.update(new Report().setProjectAuditState(1).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
+                            reportMapper.update(new Report().setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                             //项目审核的情况下,需要判断是否该员工当天所有项目是否都是项目经理审核通过了
                             List<Report> sameUserSameDayOtherReports = reportMapper.selectList(new QueryWrapper<Report>()
@@ -1959,7 +1959,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             List<User> allUsers = null;
             List<Report> allReports = null;
             if (timeType.getReportAuditType() == 2) {
-                allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name").eq("company_id", company.getId()));
+                allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
                 //先分组负责人审核,再项目负责人审核
                 List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, project_id, project_audit_state, creator_id, create_date").in("id", ids));
                 allReports = reportList;
@@ -1998,10 +1998,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //公司没有自定义流程,直接进行项目经理审核
                     reportMapper.update(new Report().setState(1).setProjectAuditTime(now),
                             new QueryWrapper<Report>().in("id", ids));
-                    allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name").eq("company_id", company.getId()));
+                    allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
                     allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
                 } else {
-                    allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name").eq("company_id", company.getId()));
+                    allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
                     allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
                     List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", company.getId()));
                     //ids是来自不同人不同日期的报告id
@@ -2016,7 +2016,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         }
                         if (deptSettings.size() == 0) {
                             //直接进行项目经理审核
-                            curReport.setState(1).setProjectAuditTime(now);
+                            curReport.setState(1).setProjectAuditState(1).setProjectAuditTime(now);
                         } else {
                             //按流程走, 取到当前报告的数据
                             Report item = allReports.stream().filter(a->a.getId().equals(rid)).findFirst().get();
@@ -2055,8 +2055,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                         }
                                     }
                                 } else {
+                                    System.out.println("有流程,当前阶段是项目审核,先通过");
                                     //当前的先审核通过
-                                    curReport.setProjectAuditState(1);
+                                    curReport.setProjectAuditState(1).setProjectAuditTime(now);
 //                                reportMapper.update(new Report().setProjectAuditState(1),
 //                                        new QueryWrapper<Report>().in("id", ids));
                                     //项目审核的情况下,需要判断是否该员工的所有项目都审核通过了