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

审批流支持配置本部门负责人的日报由上级部门负责人审核;
支持设置隐藏子项目

seyason преди 1 година
родител
ревизия
978e2a1174

+ 44 - 38
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -899,18 +899,7 @@ public class ReportController {
                             if (comTimeType.getReportAuditType() == 3) {
                                 report.setAuditorSetting(auditorSettingList.get(i));
                             }
-                            if (auditWorkflowList.size() == 0) {
-                                //没有自定义审核流,默认的直接是项目负责人审核
-                                report.setIsDeptAudit(0);
-                                report.setIsFinalAudit(1);
-                            } else {
-                                //取第一个审核节点
-                                AuditWorkflowTimeSetting firstNode = auditWorkflowList.get(0);
-                                report.setIsFinalAudit(auditWorkflowList.size() > 1?0:1);
-                                report.setIsDeptAudit(firstNode.getIsDeptAudit());
-                                report.setAuditDeptid(firstNode.getAuditDeptId());
-                                report.setAuditDeptManagerid(firstNode.getAuditDeptId() != null?allDeptList.stream().filter(d->d.getDepartmentId().equals(firstNode.getAuditDeptId())).findFirst().get().getManagerId(): null);
-                            }
+                            setReportWorkflowAuditor(auditWorkflowList, allDeptList, report,comTimeType);
                             if (taskId != null && taskId[i] != null && taskId[i] != 0) {
                                 report.setTaskId(taskId[i]);
                             }
@@ -966,18 +955,7 @@ public class ReportController {
                                 if (comTimeType.getReportAuditType() == 3) {
                                     report.setAuditorSetting(auditorSettingList.get(i));
                                 }
-                                if (auditWorkflowList.size() == 0) {
-                                    //没有自定义审核流,默认的直接是项目负责人审核
-                                    report.setIsDeptAudit(0);
-                                    report.setIsFinalAudit(1);
-                                } else {
-                                    //取第一个审核节点
-                                    AuditWorkflowTimeSetting firstNode = auditWorkflowList.get(0);
-                                    report.setIsFinalAudit(auditWorkflowList.size() > 1?0:1);
-                                    report.setIsDeptAudit(firstNode.getIsDeptAudit());
-                                    report.setAuditDeptid(firstNode.getAuditDeptId());
-                                    report.setAuditDeptManagerid(firstNode.getAuditDeptId() != null?allDeptList.stream().filter(d->d.getDepartmentId().equals(firstNode.getAuditDeptId())).findFirst().get().getManagerId(): null);
-                                }
+                                setReportWorkflowAuditor(auditWorkflowList, allDeptList, report,comTimeType);
                                 if (taskId != null && taskId[i] != null && taskId[i] != 0) {
                                     report.setTaskId(taskId[i]);
                                 }
@@ -995,7 +973,6 @@ public class ReportController {
                                 } else {
                                     fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
                                 }
-
                                 fillReportProgress(report, professionProgress[i]);
                                 reportList.add(report);
                             }
@@ -1035,18 +1012,7 @@ public class ReportController {
                         if (comTimeType.getReportAuditType() == 3) {
                             report.setAuditorSetting(auditorSettingList.get(i));
                         }
-                        if (auditWorkflowList.size() == 0) {
-                            //没有自定义审核流,默认的直接是项目负责人审核
-                            report.setIsDeptAudit(0);
-                            report.setIsFinalAudit(1);
-                        } else {
-                            //取第一个审核节点
-                            AuditWorkflowTimeSetting firstNode = auditWorkflowList.get(0);
-                            report.setIsFinalAudit(auditWorkflowList.size() > 1?0:1);
-                            report.setIsDeptAudit(firstNode.getIsDeptAudit());
-                            report.setAuditDeptid(firstNode.getAuditDeptId());
-                            report.setAuditDeptManagerid(firstNode.getAuditDeptId() != null?allDeptList.stream().filter(d->d.getDepartmentId().equals(firstNode.getAuditDeptId())).findFirst().get().getManagerId(): null);
-                        }
+                        setReportWorkflowAuditor(auditWorkflowList, allDeptList, report,comTimeType);
                         if (taskId != null && taskId[i] != null && taskId[i] != 0) {
                             report.setTaskId(taskId[i]);
                         }
@@ -1821,6 +1787,40 @@ public class ReportController {
         }
     }
 
+    private void setReportWorkflowAuditor(List<AuditWorkflowTimeSetting> auditWorkflowList, List<Department> allDeptList, Report report, TimeType comTimeType) {
+        if (auditWorkflowList.size() == 0) {
+            //没有自定义审核流,默认的直接是项目负责人审核
+            report.setIsDeptAudit(0);
+            report.setIsFinalAudit(1);
+        } else {
+            //取第一个审核节点
+            AuditWorkflowTimeSetting firstNode = auditWorkflowList.get(0);
+            report.setIsFinalAudit(auditWorkflowList.size() > 1?0:1);
+            report.setIsDeptAudit(firstNode.getIsDeptAudit());
+            report.setAuditDeptid(firstNode.getAuditDeptId());
+            if (firstNode.getIsDeptAudit() == 1) {
+                Department curDept = allDeptList.stream()
+                        .filter(ad->ad.getDepartmentId().equals(firstNode.getAuditDeptId())).findFirst().get();
+                String curDeptManagerId = curDept.getManagerId();
+                //启用了本部门负责人的日报由上级部门主要负责人审核
+                if (comTimeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(report.getCreatorId())) {
+                    //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                    Integer parentDeptId = curDept.getSuperiorId();
+                    if (parentDeptId == null) {
+                        //没有上级部门,直接取当前部门的负责人
+                        report.setAuditDeptManagerid(curDeptManagerId);
+                    } else {
+//                        report.setAuditDeptid(parentDeptId);
+                        report.setAuditDeptManagerid(allDeptList.stream()
+                                .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                    }
+                } else {
+                    report.setAuditDeptManagerid(curDeptManagerId);
+                }
+            }
+        }
+    }
+
     /**
      * 删除报告
      * id 要删除的报告的id
@@ -1932,7 +1932,13 @@ public class ReportController {
 
     @RequestMapping("/batchApproveReport")
     public HttpRespMsg batchApproveReport(@RequestParam String ids, Integer isDepartment, HttpServletRequest request,String evaluate) {
-        return reportService.batchApproveReport(ids, isDepartment, request,evaluate);
+        HttpRespMsg msg = new HttpRespMsg();
+        try {
+            msg = reportService.batchApproveReport(ids, isDepartment, request,evaluate);
+        } catch (Exception e) {
+            msg.setError("批量审核失败:"+e.getMessage());
+        }
+        return msg;
     }
 
     @RequestMapping("/batchApproveByDate")

+ 12 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-03-23
+ * @since 2024-03-24
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -548,6 +548,17 @@ public class TimeType extends Model<TimeType> {
     @TableField("hide_task")
     private Integer hideTask;
 
+    /**
+     * 项目隐藏子项目功能按钮
+     */
+    @TableField("hide_subproject")
+    private Integer hideSubproject;
+
+    /**
+     * 开启日报审批流的本部门负责人由上级部门负责人审核
+     */
+    @TableField("report_audit_flow_enable_super_dept_aduit")
+    private Integer reportAuditFlowEnableSuperDeptAduit;
 
     @TableField(exist = false)
     private List<User> userList;

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -51,7 +51,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg getMembList(String date, HttpServletRequest request);
 
-    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request,String evaluate);
+    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request,String evaluate) throws Exception;
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);
 
     HttpRespMsg cancelReport(String userId, String reportIds, HttpServletRequest request);

+ 117 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2346,7 +2346,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     updateBatchById(updateReportList);
                 }
             } else {
-                //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流
+                //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
                                 .orderByAsc("seq"));
@@ -2383,9 +2383,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     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());
+                                        Department curDept = allDepts.stream()
+                                                .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                                        String curDeptManagerId = curDept.getManagerId();
+                                        //启用了本部门负责人的日报由上级部门主要负责人审核
+                                        if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(item.getCreatorId())) {
+                                            //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                            Integer parentDeptId = curDept.getSuperiorId();
+                                            if (parentDeptId == null) {
+                                                //没有上级部门,直接取当前部门的负责人
+                                                upR.setAuditDeptManagerid(curDeptManagerId);
+                                            } else {
+//                                                upR.setAuditDeptid(parentDeptId);
+                                                upR.setAuditDeptManagerid(allDepts.stream()
+                                                        .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                            }
+                                        } else {
+                                            upR.setAuditDeptManagerid(curDeptManagerId);
+                                        }
                                     }
                                     upR.setIsFinalAudit(nextNode.getIsFinal());
                                     break;
@@ -2417,8 +2434,27 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                             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());
+                                                Department curDept = allDepts.stream()
+                                                        .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                                                String curDeptManagerId = curDept.getManagerId();
+                                                //启用了本部门负责人的日报由上级部门主要负责人审核
+                                                if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(item.getCreatorId())) {
+                                                    //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                                    Integer parentDeptId = curDept.getSuperiorId();
+                                                    if (parentDeptId == null) {
+                                                        //没有上级部门,直接取当前部门的负责人
+                                                        upR.setAuditDeptManagerid(curDeptManagerId);
+                                                    } else {
+//                                                        upR.setAuditDeptid(parentDeptId);
+                                                        upR.setAuditDeptManagerid(allDepts.stream()
+                                                                .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                                    }
+                                                } else {
+                                                    upR.setAuditDeptManagerid(curDeptManagerId);
+                                                }
+
+//                                                upR.setAuditDeptManagerid(allDepts.stream()
+//                                                        .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId());
                                             }
                                             upR.setIsFinalAudit(nextNode.getIsFinal());
                                             break;
@@ -2447,8 +2483,27 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                                 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());
+                                                    Department curDept = allDepts.stream()
+                                                            .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                                                    String curDeptManagerId = curDept.getManagerId();
+                                                    //启用了本部门负责人的日报由上级部门主要负责人审核
+                                                    if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(item.getCreatorId())) {
+                                                        //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                                        Integer parentDeptId = curDept.getSuperiorId();
+                                                        if (parentDeptId == null) {
+                                                            //没有上级部门,直接取当前部门的负责人
+                                                            upR.setAuditDeptManagerid(curDeptManagerId);
+                                                        } else {
+//                                                            upR.setAuditDeptid(parentDeptId);
+                                                            upR.setAuditDeptManagerid(allDepts.stream()
+                                                                    .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                                        }
+                                                    } else {
+                                                        upR.setAuditDeptManagerid(curDeptManagerId);
+                                                    }
+
+//                                                    upR.setAuditDeptManagerid(allDepts.stream()
+//                                                            .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId());
                                                 }
                                                 upR.setIsFinalAudit(nextNode.getIsFinal());
                                                 break;
@@ -3136,7 +3191,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
+    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) throws Exception {
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         Company company = companyMapper.selectById(user.getCompanyId());
@@ -3559,12 +3614,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                                 Optional<Department> first = allDepts.stream()
                                                         .filter(ad -> ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst();
                                                 if (!first.isPresent()) {
-
                                                     System.out.println(item.getId()+"下个节点找不到: "+nextNode.getAuditDeptId()+", "+nextNode.getAuditDeptName());
-
+                                                    throw new Exception("找不到部门");
+                                                }
+                                                Department curDept = first.get();
+                                                String curDeptManagerId = curDept.getManagerId();
+                                                //启用了本部门负责人的日报由上级部门主要负责人审核
+                                                if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(creatorId)) {
+                                                    //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                                    Integer parentDeptId = curDept.getSuperiorId();
+                                                    if (parentDeptId == null) {
+                                                        //没有上级部门,直接取当前部门的负责人
+                                                        curReport.setAuditDeptManagerid(curDeptManagerId);
+                                                    } else {
+//                                                        curReport.setAuditDeptid(parentDeptId);
+                                                        curReport.setAuditDeptManagerid(allDepts.stream()
+                                                                .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                                    }
+                                                } else {
+                                                    curReport.setAuditDeptManagerid(curDeptManagerId);
                                                 }
-                                                String managerId = first.get().getManagerId();
-                                                curReport.setAuditDeptManagerid(managerId);
                                             }
                                             curReport.setIsFinalAudit(nextNode.getIsFinal());
                                             break;
@@ -3594,8 +3663,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                                 curReport.setIsDeptAudit(nextNode.getIsDeptAudit());
                                                 if (curReport.getIsDeptAudit() == 1) {
                                                     curReport.setAuditDeptid(nextNode.getAuditDeptId());
-                                                    curReport.setAuditDeptManagerid(allDepts.stream()
-                                                            .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId());
+                                                    Department curDept = allDepts.stream()
+                                                            .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                                                    String curDeptManagerId = curDept.getManagerId();
+                                                    //启用了本部门负责人的日报由上级部门主要负责人审核
+                                                    if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(creatorId)) {
+                                                        //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                                        Integer parentDeptId = curDept.getSuperiorId();
+                                                        if (parentDeptId == null) {
+                                                            //没有上级部门,直接取当前部门的负责人
+                                                            curReport.setAuditDeptManagerid(curDeptManagerId);
+                                                        } else {
+//                                                            curReport.setAuditDeptid(parentDeptId);
+                                                            curReport.setAuditDeptManagerid(allDepts.stream()
+                                                                    .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                                        }
+                                                    } else {
+                                                        curReport.setAuditDeptManagerid(curDeptManagerId);
+                                                    }
                                                 }
                                                 curReport.setIsFinalAudit(nextNode.getIsFinal());
                                                 upR = curReport;
@@ -3639,8 +3724,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                                         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());
+                                                            Department curDept = allDepts.stream()
+                                                                    .filter(ad->ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                                                            String curDeptManagerId = curDept.getManagerId();
+                                                            //启用了本部门负责人的日报由上级部门主要负责人审核
+                                                            if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(creatorId)) {
+                                                                //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                                                                Integer parentDeptId = curDept.getSuperiorId();
+                                                                if (parentDeptId == null) {
+                                                                    //没有上级部门,直接取当前部门的负责人
+                                                                    curReport.setAuditDeptManagerid(curDeptManagerId);
+                                                                } else {
+//                                                                    curReport.setAuditDeptid(parentDeptId);
+                                                                    curReport.setAuditDeptManagerid(allDepts.stream()
+                                                                            .filter(ad->ad.getDepartmentId().equals(parentDeptId)).findFirst().get().getManagerId());
+                                                                }
+                                                            } else {
+                                                                curReport.setAuditDeptManagerid(curDeptManagerId);
+                                                            }
                                                         }
                                                         upR.setIsFinalAudit(nextNode.getIsFinal());
                                                         break;

Файловите разлики са ограничени, защото са твърде много
+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -402,7 +402,7 @@
             </el-table-column>
             <el-table-column :label="$t('operation')" :width="showColumnWidth" align="left" fixed="right" v-if="showColumnWidth != '0' || permissions.projectManagement">
                 <template slot-scope="scope">
-                    <el-button v-if="(permissions.projectManagement || user.id==scope.row.creatorId) && user.timeType.mainProjectState != '1'" size="mini"  @click="subProject(scope.row)">{{ $t('lable.subproject') }}</el-button>
+                    <el-button v-if="(permissions.projectManagement || user.id==scope.row.creatorId) && user.timeType.mainProjectState != '1' && !user.timeType.hideSubproject" size="mini"  @click="subProject(scope.row)">{{ $t('lable.subproject') }}</el-button>
                     <el-button size="mini" v-if="permissions.projectParticipator || permissions.projectManagement || user.id==scope.row.inchargerId || user.id==scope.row.creatorId" type="primary" @click="handleAdd(scope.$index, scope.row)">{{ $t('bian-ji') }}</el-button>
                     <!-- <el-button v-if="permissions.projectManagement || user.id==scope.row.creatorId" size="mini"  @click="deletePro(scope.$index, scope.row)">删除</el-button> -->
                     <el-dropdown class="customdropdown" split-button size="mini" @click="finishPro(scope.row)" v-if="(permissions.projectManagement || user.id==scope.row.creatorId || user.id==scope.row.inchargerId) && scope.row.status == 1" placement="bottom-start">