Browse Source

景昱审核模式
修复加班时长校验问题

seyason 11 months ago
parent
commit
63313b45b8

+ 30 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -620,7 +620,7 @@ public class ReportController {
                     System.out.println("第"+(i+1)+"个项目的第一审核人是:" +projectAuditorId[i]);
                 }
             }
-        }else {
+        } else {
             //自动填充项目审核人
             for (int i=0;i<projectAuditorId.length; i++) {
                 if (projectAuditorId[i] == null) {
@@ -1189,7 +1189,7 @@ public class ReportController {
                     double sum = reportList.stream().filter(rl -> rl.getCreateDate().equals(report.getCreateDate()) && rl.getCreatorId().equals(report.getCreatorId())).mapToDouble(Report::getWorkingTime).sum();
                     BigDecimal bigDecimal=new BigDecimal(sum);
                     bigDecimal=bigDecimal.subtract(new BigDecimal(comTimeType.getAllday()));
-                    if(report.getOvertimeHours() != null && report.getOvertimeHours()>0 && report.getOvertimeHours()>bigDecimal.doubleValue()){
+                    if(report.getOvertimeHours() != null && report.getOvertimeHours()>0 && Math.abs(report.getOvertimeHours()-bigDecimal.doubleValue()) > 0.001){
                         httpRespMsg.setError("加班时长不得超过总工作时长-正常工作时长");
                         return httpRespMsg;
                     }
@@ -1401,7 +1401,7 @@ public class ReportController {
             }
         }
         //5:由直属或者部门负责人审核, 6:先由直属或者部门负责人审核-再由项目日报审核人审核
-        if(comTimeType.getReportAuditType() == 5 || comTimeType.getReportAuditType() == 6){
+        else if(comTimeType.getReportAuditType() == 5 || comTimeType.getReportAuditType() == 6){
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",user.getCompanyId()));
             List<User> tempAuditorUserList = new ArrayList<>();
             List<String> creatorIdList = reportList.stream().map(Report::getCreatorId).collect(Collectors.toList());
@@ -1446,6 +1446,31 @@ public class ReportController {
                     }
                 }
             }
+        } else if (comTimeType.getReportAuditType() == 7) {
+            //并行审核,设置部门负责人
+            if (targetUserList == null) {
+                for (Report report : reportList) {
+                    report.setDepartmentAuditState(0);
+                    report.setProjectAuditState(0);
+                    Department department = departmentMapper.selectById(user.getDepartmentId());
+                    if (department != null) {
+                        report.setAuditDeptid(department.getDepartmentId());
+                        report.setAuditDeptManagerid(department.getManagerId());
+                    }
+                }
+            } else {
+                //代填
+                for (Report report : reportList) {
+                    report.setDepartmentAuditState(0);
+                    report.setProjectAuditState(0);
+                    User targetUser = targetUserList.stream().filter(t -> t.getId().equals(report.getCreatorId())).findFirst().get();
+                    Department department = departmentMapper.selectById(targetUser.getDepartmentId());
+                    if (department != null) {
+                        report.setAuditDeptid(department.getDepartmentId());
+                        report.setAuditDeptManagerid(department.getManagerId());
+                    }
+                }
+            }
         }
 
 
@@ -2065,6 +2090,8 @@ public class ReportController {
         HttpRespMsg msg = new HttpRespMsg();
         try {
             msg = reportService.batchApproveReport(ids, isDepartment, request,evaluate);
+        } catch (NullPointerException e) {
+            msg.setError("批量审核失败:NullPointerExp-"+e.getMessage());
         } catch (Exception e) {
             msg.setError("批量审核失败:"+e.getMessage());
         }

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -72,7 +72,8 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                  @Param("startDate") String startDate,
                                                  @Param("endDate") String endDate,
                                                  @Param("targetUserId") List<String> targetUserId,
-                                                 @Param("auditUserId")String auditUserId
+                                                 @Param("auditUserId")String auditUserId,
+                                                 @Param("isParallel")Integer isParallel
                                                  );
 
     //获取本人负责的专业的相关的日报

+ 5 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportBatchServiceImpl.java

@@ -42,6 +42,8 @@ public class ReportBatchServiceImpl extends ServiceImpl<ReportBatchMapper, Repor
     private SysFunctionMapper sysFunctionMapper;
     @Resource
     private ReportMapper reportMapper;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
 
     @Override
     public HttpRespMsg getAuditList(Integer state, Integer departmentId, Integer projectId, String date, String startDate, String endDate, String userId, HttpServletRequest request) {
@@ -49,6 +51,8 @@ public class ReportBatchServiceImpl extends ServiceImpl<ReportBatchMapper, Repor
         try {
             User curUser = userMapper.selectById(request.getHeader("Token"));
             Integer companyId = curUser.getCompanyId();
+            TimeType timeType = timeTypeMapper.selectById(companyId);
+            Integer isParallel = timeType.getReportAuditType() == 7? 1 : 0;
             String leaderId = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "审核全员日报");
             if (functionList.size() == 0) {//没有全员审核的权限
@@ -58,7 +62,7 @@ public class ReportBatchServiceImpl extends ServiceImpl<ReportBatchMapper, Repor
             if (!StringUtils.isEmpty(userId)) {
                 targetUids = ListUtil.convertLongIdsArrayToList(userId);
             }
-            List<Map<String, Object>> auditReportList = reportMapper.getAuditReportList(date, companyId, departmentId, projectId, leaderId, 0, startDate, endDate, targetUids,null);
+            List<Map<String, Object>> auditReportList = reportMapper.getAuditReportList(date, companyId, departmentId, projectId, leaderId, 0, startDate, endDate, targetUids,null, isParallel);
             List<Integer> batchIds = new ArrayList<>();
             for (Map<String, Object> map : auditReportList) {
                 Integer batchId = (Integer)map.get("batchId");

+ 76 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1515,6 +1515,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             User curUser = userMapper.selectById(request.getHeader("Token"));
             Integer companyId = curUser.getCompanyId();
             TimeType timeType = timeTypeMapper.selectById(companyId);
+            Integer isParallel = timeType.getReportAuditType() == 7? 1 : 0;
             Integer isEngeering = companyMapper.selectById(companyId).getPackageEngineering();
             String leaderId = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "审核全员日报");
@@ -1525,7 +1526,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (!StringUtils.isEmpty(userId)) {
                 targetUids = ListUtil.convertLongIdsArrayToList(userId);
             }
-            List<Map<String, Object>> auditReportList = reportMapper.getAuditReportList(date, companyId, departmentId, projectId, leaderId, isEngeering, startDate, endDate, targetUids,auditUserId);
+            List<Map<String, Object>> auditReportList = reportMapper.getAuditReportList(date, companyId, departmentId, projectId, leaderId, isEngeering, startDate, endDate, targetUids,auditUserId, isParallel);
             //针对依斯贝增加服务名称显示
             if (companyId == 3092) {
                 List<SapProjectService> serviceList = sapProjectServiceMapper.selectList(new QueryWrapper<SapProjectService>().eq("company_id", companyId));
@@ -2195,7 +2196,40 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                 }
-            } else {
+            } else if (timeType.getReportAuditType() == 7) {
+                //并行审核
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, creator_id, create_date, project_id,audit_dept_managerid,department_audit_state,project_audit_state, project_auditor_id, is_dept_audit").in("id", ids));
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        newReport.setState(1);
+                        newReport.setDepartmentAuditState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getDepartmentAuditState() == 0 && user.getId().equals(r.getAuditDeptManagerid())) {
+                            newReport.setDepartmentAuditState(1);
+                            r.setDepartmentAuditState(1);
+                        } else if (r.getProjectAuditState() == 0 && user.getId().equals(r.getProjectAuditorId())) {
+                            newReport.setProjectAuditState(1);
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                            r.setProjectAuditState(1);
+                        }
+                        //检查是否项目和部门全部审核通过
+                        if (r.getDepartmentAuditState() == 1 && r.getProjectAuditState() == 1) {
+                            newReport.setState(1);
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
+            }else {
                 //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
@@ -3418,6 +3452,46 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                 }
+            } else if (timeType.getReportAuditType() == 7) {
+                //并行审核
+                allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, creator_id, create_date, project_id,audit_dept_managerid,department_audit_state,project_audit_state, project_auditor_id, is_dept_audit").in("id", ids));
+                allReports = reportList;
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        r.setState(1);
+                        r.setDepartmentAuditState(1);
+                        r.setProjectAuditState(1);
+                        r.setProjectAuditTime(LocalDateTime.now());
+                        newReport.setState(1);
+                        newReport.setDepartmentAuditState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getDepartmentAuditState() == 0 && user.getId().equals(r.getAuditDeptManagerid())) {
+                            newReport.setDepartmentAuditState(1);
+                            r.setDepartmentAuditState(1);
+                        } else if (r.getProjectAuditState() == 0 && user.getId().equals(r.getProjectAuditorId())) {
+                            newReport.setProjectAuditState(1);
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                            r.setProjectAuditState(1);
+                        }
+                        //检查是否项目和部门全部审核通过
+                        if (r.getDepartmentAuditState() == 1 && r.getProjectAuditState() == 1) {
+                            newReport.setState(1);
+                            r.setState(1);
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
             } else {
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())

+ 17 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -586,12 +586,25 @@
             AND a.project_id=#{projectId}
         </if>
         <if test="auditorId != null">
-            AND ((a.is_dept_audit = 0 and a.project_auditor_id = #{auditorId} and a.project_audit_state = 0)
-            or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditorId}))
+            <if test="isParallel == 1">
+                AND ((a.project_auditor_id = #{auditorId} and a.project_audit_state = 0)
+                or (a.audit_dept_managerid = #{auditorId} and a.department_audit_state = 0))
+            </if>
+            <if test="isParallel == 0">
+                AND ((a.is_dept_audit = 0 and a.project_auditor_id = #{auditorId} and a.project_audit_state = 0)
+                or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditorId}))
+            </if>
+
         </if>
         <if test="auditUserId != null and auditUserId !=''">
-            AND ((a.is_dept_audit = 0 and a.project_auditor_id = #{auditUserId} and a.project_audit_state = 0)
-            or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditUserId}))
+            <if test="isParallel == 1">
+                AND ((a.project_auditor_id = #{auditUserId} and a.project_audit_state = 0)
+                or (a.audit_dept_managerid = #{auditUserId} and a.department_audit_state = 0))
+            </if>
+            <if test="isParallel == 0">
+                AND ((a.is_dept_audit = 0 and a.project_auditor_id = #{auditUserId} and a.project_audit_state = 0)
+                or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditUserId}))
+            </if>
         </if>
         <if test="isEngeering == 1">
             AND a.department_audit_state = 1