Переглянути джерело

请假,加班,任务里程碑等接口

seyason 3 роки тому
батько
коміт
025b79e3d2
59 змінених файлів з 1298 додано та 146 видалено
  1. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/images/qr_dingding.png
  2. 17 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuditWorkflowSettingController.java
  3. 43 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/GroupParticipatorController.java
  4. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFileController.java
  5. 9 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetController.java
  6. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/MilestoneTaskRefController.java
  7. 28 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  8. 24 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  9. 18 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/StagesController.java
  10. 51 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  11. 241 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java
  12. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  13. 7 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFile.java
  14. 48 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeavePmaudit.java
  15. 31 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheet.java
  16. 52 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/MilestoneTaskRef.java
  17. 8 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  18. 8 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java
  19. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  20. 79 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFiles.java
  21. 8 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  22. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/GroupParticipatorMapper.java
  23. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeavePmauditMapper.java
  24. 19 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/MilestoneTaskRefMapper.java
  25. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  26. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskFileMapper.java
  27. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java
  28. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/GroupParticipatorService.java
  29. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeavePmauditService.java
  30. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveSheetService.java
  31. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/MilestoneTaskRefService.java
  32. 7 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  33. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysFunctionService.java
  34. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskFileService.java
  35. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java
  36. 72 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/GroupParticipatorServiceImpl.java
  37. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeavePmauditServiceImpl.java
  38. 47 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java
  39. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/MilestoneTaskRefServiceImpl.java
  40. 51 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  41. 27 18
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  42. 15 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysFunctionServiceImpl.java
  43. 0 20
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFileServiceImpl.java
  44. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFilesServiceImpl.java
  45. 43 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  46. 5 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFileMapper.xml
  47. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeavePmauditMapper.xml
  48. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml
  49. 36 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/MilestoneTaskRefMapper.xml
  50. 23 4
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  51. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  52. 26 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFilesMapper.xml
  53. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  54. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml
  55. 9 9
      fhKeeper/formulahousekeeper/octopus/config/index.js
  56. 5 3
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/application.yml
  57. 7 8
      fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue
  58. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  59. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

BIN
fhKeeper/formulahousekeeper/inva_4_tivo/images/qr_dingding.png


+ 17 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuditWorkflowSettingController.java

@@ -112,7 +112,7 @@ public class AuditWorkflowSettingController {
         HttpRespMsg msg = new HttpRespMsg();
         if (auditWorkflowTimeSettings.size() == 0) {
             int seq = 1;
-            //未独立设置,获取默认的设置,默认直接就是项目负责人审批
+            //出差,默认是项目负责人审批
             Department dept = departmentMapper.selectById(deptId);
             AuditWorkflowSetting setting = new AuditWorkflowSetting();
             setting.setSeq(seq);
@@ -121,6 +121,22 @@ public class AuditWorkflowSettingController {
             setting.setIsFinal(1);
             setting.setAuditorType(0);
             auditWorkflowTimeSettings.add(setting);
+//            if (type ==1) {
+//
+//            } else {
+//                //获取默认的设置,默认直接就是部门负责人审批
+//                Department dept = departmentMapper.selectById(deptId);
+//                AuditWorkflowSetting setting = new AuditWorkflowSetting();
+//                setting.setSeq(seq);
+//                setting.setCompanyId(companyId);
+//                setting.setDeptId(dept.getDepartmentId());
+//                setting.setAuditDeptId(dept.getDepartmentId());
+//                setting.setAuditDeptName(dept.getDepartmentName());
+//                setting.setIsFinal(1);
+//                setting.setAuditorType(1);
+//                auditWorkflowTimeSettings.add(setting);
+//            }
+
         }
         msg.data = auditWorkflowTimeSettings;
         return msg;

+ 43 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/GroupParticipatorController.java

@@ -0,0 +1,43 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.GroupParticipator;
+import com.management.platform.service.GroupParticipatorService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+@RestController
+@RequestMapping("/group-participator")
+public class GroupParticipatorController {
+    @Resource
+    private GroupParticipatorService groupParticipatorService;
+
+    @RequestMapping("/save")
+    public HttpRespMsg save(Integer groupId, String idsJson) {
+        return groupParticipatorService.save(groupId, idsJson);
+    }
+
+    @RequestMapping("/get")
+    public HttpRespMsg get(Integer groupId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<GroupParticipator> gpList = groupParticipatorService.list(new QueryWrapper<GroupParticipator>().eq("group_id", groupId));
+        msg.data = gpList.stream().map(GroupParticipator::getUserId).collect(Collectors.toList());
+        return msg;
+    }
+}
+

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

@@ -11,11 +11,11 @@ import org.springframework.web.bind.annotation.RestController;
  * </p>
  *
  * @author Seyason
- * @since 2021-04-19
+ * @since 2022-04-21
  */
 @RestController
-@RequestMapping("/task-file")
-public class TaskFileController {
+@RequestMapping("/leave-pmaudit")
+public class LeavePmauditController {
 
 }
 

+ 9 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetController.java

@@ -42,10 +42,16 @@ public class LeaveSheetController {
     SysFunctionMapper sysFunctionMapper;
 
 
+    /**
+     *
+     * @param sheet 请假单封装数据
+     * @param projectAuditorJson 项目审核人ids
+     * @return
+     */
     @RequestMapping("/add")
-    public HttpRespMsg add(LeaveSheet sheet) {
+    public HttpRespMsg add(LeaveSheet sheet, String projectAuditorJson) {
         String userId = request.getHeader("Token");
-        return leaveSheetService.add(sheet, userId);
+        return leaveSheetService.add(sheet, userId, projectAuditorJson);
 
     }
 
@@ -59,7 +65,7 @@ public class LeaveSheetController {
     public HttpRespMsg list(LeaveSheet sheet, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
-        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部请假单");
         if (functionList.size() == 0) {
             //普通员工只能看自己的
             sheet.setOwnerId(user.getId());

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/MilestoneTaskRefController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-19
+ */
+@RestController
+@RequestMapping("/milestone-task-ref")
+public class MilestoneTaskRefController {
+
+}
+

+ 28 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -35,6 +35,14 @@ public class ProjectController {
     @Resource
     private HttpServletRequest request;
 
+    /**
+     * 获取我参与的全部项目的负责人列表
+     * @return
+     */
+    @RequestMapping("/getMyParticiPMList")
+    public HttpRespMsg getMyParticiPMList() {
+        return projectService.getMyParticiPMList(request);
+    }
 
     /**
      * 获取项目列表
@@ -77,11 +85,12 @@ public class ProjectController {
                                    String associateDegreeNames,
                                    Integer taskGpIncharge,
                                    String auditUserIds,
-                                   Integer category
+                                   Integer category,
+                                   String projectDesc
                                    ) {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,
                 projectBaseCostData,
-                 budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames, taskGpIncharge,auditUserIds, category, request);
+                 budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames, taskGpIncharge,auditUserIds, category, projectDesc, request);
     }
 
     @RequestMapping("/adjustBase")
@@ -319,8 +328,21 @@ public class ProjectController {
      * @return
      */
     @RequestMapping("/getOvertimeList")
-    public HttpRespMsg getOvertimeList(Integer projectId, String startDate, String endDate) {
-        return projectService.getOvertimeList(projectId, startDate, endDate, request);
+    public HttpRespMsg getOvertimeList(Integer userId, Integer projectId, String startDate, String endDate) {
+        return projectService.getOvertimeList(userId, projectId, startDate, endDate, request);
+    }
+
+    /**
+     * 查看加班详情
+     * @param userId
+     * @param projectId
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    @RequestMapping("/getOvertimeDetail")
+    public HttpRespMsg getOvertimeDetail(Integer userId, Integer projectId, String startDate, String endDate) {
+        return projectService.getOvertimeDetail(userId, projectId, startDate, endDate, request);
     }
 
 
@@ -332,8 +354,8 @@ public class ProjectController {
      * @return
      */
     @RequestMapping("/exportOvertimeList")
-    public HttpRespMsg exportOvertimeList(Integer projectId, String startDate, String endDate) {
-        return projectService.exportOvertimeList(projectId, startDate, endDate, request);
+    public HttpRespMsg exportOvertimeList(Integer userId, Integer projectId, String startDate, String endDate) {
+        return projectService.exportOvertimeList(userId, projectId, startDate, endDate, request);
     }
 
     /**

+ 24 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -284,6 +284,7 @@ public class ReportController {
         LocalDate now = LocalDate.now();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         BigDecimal hourCost = null;
+        TimeType comTimeType = timeTypeMapper.selectById(user.getCompanyId());
         //自己填写的情况,计算个人自己的时薪
         if (targetUidList == null) {
             if (user.getCostApplyDate() != null) {
@@ -471,9 +472,9 @@ public class ReportController {
                             }
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
                             }
 
                             //项目专业的进展
@@ -526,9 +527,9 @@ public class ReportController {
                                 }
                                 //计算工时和成本
                                 if (report.getMultiWorktime() == 0) {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
                                 } else {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
                                 }
 
                                 fillReportProgress(report, professionProgress[i]);
@@ -581,9 +582,9 @@ public class ReportController {
                         }
                         //计算工时和成本
                         if (report.getMultiWorktime() == 0) {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf, comTimeType);
                         } else {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
                         }
 
                         fillReportProgress(report, professionProgress[i]);
@@ -659,9 +660,9 @@ public class ReportController {
                             hourCost = subsUser.getCost();
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
                             }
 
                             fillReportProgress(report, professionProgress[i]);
@@ -691,7 +692,11 @@ public class ReportController {
                 return httpRespMsg;
             }
             if (report.getIsOvertime() != null && report.getIsOvertime() == 1) {
-                if (report.getOvertimeHours() > report.getWorkingTime()) {
+                if (report.getOvertimeHours() <= 0) {
+                    HttpRespMsg httpRespMsg = new HttpRespMsg();
+                    httpRespMsg.setError("加班时长必须大于0");
+                    return httpRespMsg;
+                } else if (report.getOvertimeHours() > report.getWorkingTime()) {
                     HttpRespMsg httpRespMsg = new HttpRespMsg();
                     httpRespMsg.setError("加班时长("+report.getOvertimeHours()+"h)不能超过工作时长("+report.getWorkingTime()+"h)");
                     return httpRespMsg;
@@ -702,7 +707,7 @@ public class ReportController {
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
 
-    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf) {
+    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf, TimeType comTimeType) {
         if (report.getMultiWorktime() == 0) {
             //普通工时成本计算
             if (report.getReportTimeType() == 0) {
@@ -748,6 +753,15 @@ public class ReportController {
                 e.printStackTrace();
             }
         }
+        //如果设置了加班有工资并且当前存在加班的勾选,需要计算一下
+        if (report.getIsOvertime() != null && report.getIsOvertime() == 1 && comTimeType.getPayOvertime()) {
+            BigDecimal overtimeCost = hourCost.multiply(new BigDecimal(report.getOvertimeHours())).multiply(new BigDecimal(comTimeType.getOvertimeRatio()));
+            report.setOvertimeCost(overtimeCost);
+            //重新计算总的cost
+            BigDecimal nonOvertimeCost = hourCost.multiply(new BigDecimal(report.getWorkingTime() - report.getOvertimeHours()));
+            BigDecimal totalTimeCost = nonOvertimeCost.add(overtimeCost);
+            report.setCost(totalTimeCost);
+        }
     }
 
     /**

+ 18 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/StagesController.java

@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.api.R;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.SysRichFunction;
-import com.management.platform.mapper.ProjectMapper;
-import com.management.platform.mapper.SysFunctionMapper;
-import com.management.platform.mapper.TaskGroupMapper;
-import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.StagesService;
 import com.management.platform.service.TaskGroupService;
 import com.management.platform.service.TaskService;
@@ -52,6 +49,8 @@ public class StagesController {
     private ProjectMapper projectMapper;
     @Resource
     private SysFunctionMapper sysFunctionMapper;
+    @Resource
+    private MilestoneTaskRefMapper milestoneTaskRefMapper;
     /**
      * 保存任务列表
      */
@@ -207,6 +206,10 @@ public class StagesController {
             }
             subTasks.addAll(subLists);
         }
+        //获取里程碑关联情况
+        List<MilestoneTaskRef> refList = milestoneTaskRefMapper.getAllMTlist(projectId, item.getGroupId());
+
+
         for (int i = 0; i < list.size(); i++) {
             Stages stages = list.get(i);
             List<Task> taskList = tasks.stream().filter(t -> t.getStagesId().equals(stages.getId())).collect(Collectors.toList());
@@ -218,10 +221,21 @@ public class StagesController {
                     t.setSubTaskList(subList);
                     long count = subList.stream().filter(s -> s.getTaskStatus() == 1).count();
                     t.setSubTaskFinishNum((int)count);
+
+                    if (t.getTaskType() == 1) {
+                        //里程碑类型
+                        List<MilestoneTaskRef> refTaskList = refList.stream().filter(r->r.getMilestoneId().equals(t.getId())).collect(Collectors.toList());
+                        int pass = (int) refTaskList.stream().filter(r->r.getTaskStatus()==1).count();
+                        t.setRefTaskList(refTaskList);
+                        t.setFinishRefTaskCount(pass);
+
+                    }
                 });
             }
         }
 
+
+
         msg.data = list;
         return msg;
     }

+ 51 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -394,7 +394,58 @@ public class TaskController {
         return msg;
     }
 
+    @RequestMapping("/getTaskOnlyList")
+    public HttpRespMsg getTaskOnlyList(Integer projectId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String userId = request.getHeader("Token");
+        User user = userMapper.selectById(userId);
+        QueryWrapper<Task> queryWrapper = new QueryWrapper<>();
+        //只看任务类型的
+        queryWrapper.eq("project_id", projectId).eq("task_type", 0);
+        queryWrapper.orderByDesc("id");
+        List<Task> list = taskService.nameList(queryWrapper);
+        Project project = projectService.getById(projectId);
 
+        //没有权限只能看到自己创建的,负责的和待分配的任务
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部任务");
+        if (functionList.size() == 0 && !userId.equals(project.getInchargerId())) {
+            list = list.stream().filter(t->t.getExecutorId() == null || t.getExecutorId().contains(userId) || t.getCreaterId().equals(userId)).collect(Collectors.toList());
+        }
+
+        msg.data = list;
+        return msg;
+    }
+
+    /**
+     * 添加关联的任务
+     * @param milestoneId
+     * @param taskIds
+     * @return
+     */
+    @RequestMapping("/addMileStoneTask")
+    public HttpRespMsg addMileStoneTask(Integer milestoneId, String taskIds) {
+        return taskService.addMileStoneTask(milestoneId, taskIds);
+    }
+
+    /**
+     * 删除关联的任务
+     * @param id
+     * @return
+     */
+    @RequestMapping("/removeMileStoneTask")
+    public HttpRespMsg removeMileStoneTask(Integer id) {
+        return taskService.removeMileStoneTask(id);
+    }
+
+    /**
+     * 获取关联的任务列表
+     * @param milestoneId
+     * @return
+     */
+    @RequestMapping("/getMilestoneTaskList")
+    public HttpRespMsg getMilestoneTaskList(Integer milestoneId) {
+        return taskService.getMilestoneTaskList(milestoneId);
+    }
 
 
     /**

+ 241 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java

@@ -0,0 +1,241 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
+import com.management.platform.service.ProjectDocumentService;
+import com.management.platform.util.DocumentTypeUtil;
+import com.management.platform.util.FileUtil;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.OpenOfficeService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-20
+ */
+@RestController
+@RequestMapping("/task-files")
+public class TaskFilesController {
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private TaskFilesMapper taskFilesMapper;
+    @Resource
+    private ProjectDocumentService projectDocumentService;
+    @Value("${upload.path}")
+    private String uploadPath;
+
+    /**
+     * 获取该项目下的所有有效的文件列表
+     * @param keyword
+     * @return
+     */
+    @RequestMapping("/getDocumentList")
+    public HttpRespMsg getDocumentList(Integer projectId, String keyword) {
+        HttpRespMsg msg = new HttpRespMsg();
+        QueryWrapper<ProjectDocument> queryWrapper = new QueryWrapper<ProjectDocument>()
+                .eq("is_folder", 0).eq("is_deleted", 0).eq("project_id", projectId);
+        if (!StringUtils.isEmpty(keyword)) {
+            queryWrapper.like("document_name", keyword);
+        }
+        msg.data = projectDocumentService.list(queryWrapper);
+        return msg;
+    }
+
+    /**
+     * 添加关联的文件
+     * @param documentId
+     * @param taskId
+     * @param projectId
+     * @return
+     */
+    @RequestMapping("/addDocumentRef")
+    public HttpRespMsg addDocumentRef(Integer documentId, Integer taskId, Integer projectId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        ProjectDocument document = projectDocumentService.getById(documentId);
+        TaskFiles record = new TaskFiles();
+        record.setCreatorId(user.getId());
+        record.setCreatorName(user.getName());
+        record.setDocumentName(document.getDocumentName());
+        record.setTaskId(taskId);
+        record.setProjectId(projectId);
+        record.setDocumentType(document.getDocumentType());
+        record.setSize(document.getSize());
+        record.setServerName(document.getServerName());
+        record.setUrl(document.getUrl());
+        taskFilesMapper.insert(record);
+        return msg;
+    }
+
+
+
+    /**
+     * 上传文件
+     * @param projectId 项目id
+     * @param taskId 任务id
+     * @param files 上传的文件
+     * @param response
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value="uploadFile")
+    public HttpRespMsg uploadFile(
+            @RequestParam Integer projectId,
+            @RequestParam Integer taskId,
+            @RequestParam("file") MultipartFile[] files,
+            HttpServletResponse response) throws Exception {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        for (MultipartFile file : files) {
+            TaskFiles record = new TaskFiles();
+            record.setCreatorId(user.getId());
+            record.setCreatorName(user.getName());
+            record.setDocumentName(file.getOriginalFilename());
+            record.setTaskId(taskId);
+            record.setProjectId(projectId);
+            if (file != null && !file.isEmpty()) {
+                //截取文件后缀
+                String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+                record.setDocumentType(DocumentTypeUtil.DocumentType(fileSuffix));
+                //处理文件
+                File dir = new File(uploadPath);
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+                String fileName= "";
+                if (file!=null && !file.isEmpty()) {
+                    fileName = file.getOriginalFilename();
+
+                    int pos = fileName.lastIndexOf(".");
+                    String suffix = fileName.substring(pos).toLowerCase();
+                    //用uuid替换原始的文件名
+                    String purFName = UUID.randomUUID().toString().replaceAll("-", "");
+                    fileName = purFName + suffix;
+                    File saveFile = new File(dir, fileName);
+                    try {
+                        saveFile.createNewFile();
+                        file.transferTo(saveFile);
+                        //计算文件大小
+                        long fileSize = saveFile.length();
+                        String fileLength = FileUtil.getReadableFileSize(fileSize);
+                        record.setServerName(uploadPath + fileName);
+                        record.setSize(fileLength);
+                        String pathPrefix = "/upload/";
+                        record.setUrl(pathPrefix + fileName);
+                        //上传图片到OSS
+//                        OSSClient ossClient=AliyunOSSClientUtil.getOSSClient();
+//                        String md5key = AliyunOSSClientUtil.uploadObject2OSS(ossClient, saveFile, OSSClientConstants.BUCKET_NAME, OSSClientConstants.FOLDER);
+//                        String url = AliyunOSSClientUtil.getFullUrl(fileName);
+//                        record.setUrl(url);
+                        taskFilesMapper.insert(record);
+                        String path = uploadPath;
+//                        if (OpenOfficeService.canTransferToPdf(suffix)) {
+//                            //上传完,需要生成pdf
+//                            String dFile1 = path + UUID.randomUUID().toString().replaceAll("-", "") + ".pdf";
+//                            File newFile = new File(dFile1);
+//                            if (!newFile.exists()) {
+//                                openOfficeService.office2PDF(path + fileName, dFile1);
+//                                PdfFile pdfFile = new PdfFile();
+//                                pdfFile.setPdfUrl(pathPrefix + dFile1.substring(path.length()));
+//                                pdfFile.setFileId(record.getId());
+//                                pdfFile.setType(1);
+//                                pdfFile.setSourceFileUrl(record.getUrl());
+//                                pdfFileMapper.insert(pdfFile);
+//                            }
+//                        }
+
+                        //生成原文件名称与服务器文件名称对应
+                        msg.data = record;
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage()+", path="+dir.getAbsolutePath());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage()+", path="+dir.getAbsolutePath());
+                    }
+                } else {
+                    msg.setError("文件不存在");
+                }
+            }
+        }
+
+        return msg;
+    }
+
+    @RequestMapping(value="delete")
+    public HttpRespMsg delFile(@RequestParam Integer id) {
+        TaskFiles taskFiles = taskFilesMapper.selectById(id);
+        if (taskFiles.getDocumentId() == null) {
+            //仅当前任务上传的,需要把文件删掉
+            File dir = new File(uploadPath);
+            File targetFile = new File(dir, taskFiles.getServerName());
+            if (targetFile.exists()) {
+                targetFile.delete();
+            }
+        }
+        taskFilesMapper.deleteById(id);
+
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data="删除成功";
+        return msg;
+    }
+
+    @RequestMapping(value="createDocument")
+    public HttpRespMsg createDocument(Integer id, Integer projectId, String documentName, Integer folderId, Integer isFolder) {
+        User user = userMapper.selectById(request.getHeader("Token"));
+        ProjectDocument record = new ProjectDocument();
+        record.setId(id);
+        record.setIsFolder(isFolder);
+        record.setDocumentName(documentName);
+        record.setFolderId(folderId);
+        record.setProjectId(projectId);
+        record.setCreatorId(user.getId());
+        record.setCreatorName(user.getName());
+        projectDocumentService.saveOrUpdate(record);
+        HttpRespMsg msg = new HttpRespMsg();
+        return msg;
+    }
+
+    /**
+     * 所有文件列表
+     * taskId 任务id
+     */
+    @RequestMapping(value="getTaskFiles")
+    public HttpRespMsg getTaskFiles(Integer taskId) {
+        List<TaskFiles> list = taskFilesMapper.selectList(new QueryWrapper<TaskFiles>().eq("task_id", taskId));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = list;
+        return msg;
+    }
+
+}
+

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -722,7 +722,10 @@ public class WeiXinCorpController {
         HttpRespMsg msg = new HttpRespMsg();
         User curUser = userMapper.selectById(userId);
         //https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
-
+        if (curUser == null) {
+            msg.setError("该用户不存在,请退出重新登录");
+            return msg;
+        }
         String url = GET_CORP_USERINFO_URL.replace("SUITE_ACCESS_TOKEN", getSuiteAccessToken()).replace("CODE", code);
         String forObject = this.restTemplate.getForObject(url, String.class);
         JSONObject obj = JSONObject.parseObject(forObject);

+ 7 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFile.java

@@ -15,29 +15,23 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2021-04-19
+ * @since 2022-04-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-public class TaskFile extends Model<TaskFile> {
+public class GroupParticipator extends Model<GroupParticipator> {
 
     private static final long serialVersionUID=1L;
 
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    /**
-     * 任务id
-     */
-    @TableField("task_id")
-    private Integer taskId;
-
-    /**
-     * file_mapping id
-     */
-    @TableField("file_mapping_id")
-    private Integer fileMappingId;
+    @TableField("group_id")
+    private Integer groupId;
+
+    @TableField("user_id")
+    private String userId;
 
 
     @Override

+ 48 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeavePmaudit.java

@@ -0,0 +1,48 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class LeavePmaudit extends Model<LeavePmaudit> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("leave_id")
+    private Integer leaveId;
+
+    @TableField("auditor_id")
+    private String auditorId;
+
+    /**
+     * 0-待审核,1-已通过,2-已驳回
+     */
+    @TableField("status")
+    private Integer status;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 31 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheet.java

@@ -20,7 +20,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2021-12-10
+ * @since 2022-04-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -120,6 +120,36 @@ public class LeaveSheet extends Model<LeaveSheet> {
     @TableField("tel")
     private String tel;
 
+    /**
+     * 审核人id
+     */
+    @TableField("auditor_id")
+    private String auditorId;
+
+    /**
+     * 审核人姓名
+     */
+    @TableField("auditor_name")
+    private String auditorName;
+
+    /**
+     * 审核流程:当前审核的部门id
+     */
+    @TableField("audit_deptid")
+    private Integer auditDeptid;
+
+    /**
+     * 是否是最后一步审核
+     */
+    @TableField("is_final_audit")
+    private Integer isFinalAudit;
+
+    /**
+     * 1-部门审核,0-项目负责人审核,2-指定人员审核
+     */
+    @TableField("auditor_type")
+    private Integer auditorType;
+
 
     @Override
     protected Serializable pkVal() {

+ 52 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/MilestoneTaskRef.java

@@ -0,0 +1,52 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class MilestoneTaskRef extends Model<MilestoneTaskRef> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("milestone_id")
+    private Integer milestoneId;
+
+    @TableField("task_id")
+    private Integer taskId;
+
+    @TableField("project_id")
+    private Integer projectId;
+
+    @TableField(exist = false)
+    private String taskName;
+
+    @TableField(exist = false)
+    private Integer taskStatus;
+
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-03-24
+ * @since 2022-04-22
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -251,6 +251,13 @@ public class Project extends Model<Project> {
     private String categoryName;
 
 
+    /**
+     * 项目描述
+     */
+    @TableField("project_desc")
+    private String projectDesc;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java

@@ -24,7 +24,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-04-18
+ * @since 2022-04-20
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -298,6 +298,13 @@ public class Report extends Model<Report> {
     private Double overtimeHours;
 
 
+    /**
+     * 加班薪资
+     */
+    @TableField("overtime_cost")
+    private BigDecimal overtimeCost;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -199,6 +199,11 @@ public class Task extends Model<Task> {
     @TableField(exist = false)
     private String executorListStr;
 
+    @TableField(exist = false)
+    private List<MilestoneTaskRef> refTaskList;
+    @TableField(exist = false)
+    private Integer finishRefTaskCount;
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 79 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFiles.java

@@ -0,0 +1,79 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TaskFiles extends Model<TaskFiles> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("task_id")
+    private Integer taskId;
+
+    @TableField("project_id")
+    private Integer projectId;
+
+    @TableField("document_name")
+    private String documentName;
+
+    @TableField("server_name")
+    private String serverName;
+
+    @TableField("url")
+    private String url;
+
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    @TableField("size")
+    private String size;
+
+    @TableField("document_type")
+    private Integer documentType;
+
+    /**
+     * 上传人id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 上传人姓名
+     */
+    @TableField("creator_name")
+    private String creatorName;
+
+    /**
+     * 引入的文档id
+     */
+    @TableField("document_id")
+    private Integer documentId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 8 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-03-22
+ * @since 2022-04-19
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -91,7 +91,7 @@ public class TimeType extends Model<TimeType> {
     private Integer fixMonthcost;
 
     /**
-     * 可补填几个月的, 0-不限制,1-本月,2-上个月,3-上上月
+     * 可补填几个月的, 0-不限制,1-本月,2-上个月,3-上上月,4- 7天内 ,5- 前一天
      */
     @TableField("fill_months")
     private Integer fillMonths;
@@ -150,6 +150,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("finance_audit")
     private Integer financeAudit;
 
+    /**
+     * 加班倍数
+     */
+    @TableField("overtime_ratio")
+    private Double overtimeRatio;
+
 
     @Override
     protected Serializable pkVal() {

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/GroupParticipatorMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.GroupParticipator;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+public interface GroupParticipatorMapper extends BaseMapper<GroupParticipator> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeavePmauditMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.LeavePmaudit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+public interface LeavePmauditMapper extends BaseMapper<LeavePmaudit> {
+
+}

+ 19 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/MilestoneTaskRefMapper.java

@@ -0,0 +1,19 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.MilestoneTaskRef;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-19
+ */
+public interface MilestoneTaskRefMapper extends BaseMapper<MilestoneTaskRef> {
+    List<MilestoneTaskRef> getMilestoneTaskList(Integer milestoneId);
+    List<MilestoneTaskRef> getAllMTlist(Integer projectId, Integer groupId);
+}

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -67,10 +67,12 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     List<Map<String, Object>> getUserMonthTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
-    List<Map<String, Object>> getOvertimeList(Integer companyId, String startDate, String endDate, Integer projectId);
+    List<Map<String, Object>> getOvertimeList(Integer userId, Integer companyId, String startDate, String endDate, Integer projectId);
 
     List<Map<String, Object>> getDegreeCost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("companyId") Integer companyId);
 
     //获取导出的项目数据
     List<HashMap<String, Object>> getExportData(Integer companyId, String userId);
+
+    List<Map<String, Object>> getOvertimeDetail(Integer userId, Integer companyId, String startDate, String endDate, Integer projectId);
 }

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskFileMapper.java

@@ -1,6 +1,6 @@
 package com.management.platform.mapper;
 
-import com.management.platform.entity.TaskFile;
+import com.management.platform.entity.TaskFiles;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author Seyason
- * @since 2021-04-19
+ * @since 2022-04-20
  */
-public interface TaskFileMapper extends BaseMapper<TaskFile> {
+public interface TaskFilesMapper extends BaseMapper<TaskFiles> {
 
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java

@@ -1,6 +1,8 @@
 package com.management.platform.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.User;
 import org.apache.ibatis.annotations.Param;
@@ -31,4 +33,6 @@ public interface UserMapper extends BaseMapper<User> {
 
     List<Map<String, Object>> getProjectPushUserList(@Param("projectId") Integer projectId);
 
+    List<Map<String, Object>> getSimpleNameList(@Param(Constants.WRAPPER) QueryWrapper<User> queryWrapper);
+
 }

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/GroupParticipatorService.java

@@ -0,0 +1,18 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.GroupParticipator;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+public interface GroupParticipatorService extends IService<GroupParticipator> {
+
+    HttpRespMsg save(Integer groupId, String idsJson);
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeavePmauditService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.LeavePmaudit;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+public interface LeavePmauditService extends IService<LeavePmaudit> {
+
+}

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

@@ -15,7 +15,7 @@ import com.management.platform.util.HttpRespMsg;
  */
 public interface LeaveSheetService extends IService<LeaveSheet> {
 
-    HttpRespMsg add(LeaveSheet sheet, String userId);
+    HttpRespMsg add(LeaveSheet sheet, String userId, String projectAuditorJson);
 
     HttpRespMsg delete(Integer id);
 

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/MilestoneTaskRefService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.MilestoneTaskRef;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-19
+ */
+public interface MilestoneTaskRefService extends IService<MilestoneTaskRef> {
+
+}

+ 7 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -37,6 +37,7 @@ public interface ProjectService extends IService<Project> {
                             Integer taskGpIncharge,
                             String auditUserIds,
                             Integer category,
+                            String projectDesc,
                             HttpServletRequest request);
 
     HttpRespMsg deleteProject(Integer id, Integer force);
@@ -93,9 +94,9 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportProjectStagesCost( HttpServletRequest request);
 
-    HttpRespMsg getOvertimeList(Integer projectId, String startDate, String endDate, HttpServletRequest request);
+    HttpRespMsg getOvertimeList(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request);
 
-    HttpRespMsg exportOvertimeList(Integer projectId, String startDate, String endDate, HttpServletRequest request);
+    HttpRespMsg exportOvertimeList(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request);
 
     HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
 
@@ -106,4 +107,8 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg exportCustomDataSum(String startDate, String endDate, Integer projectId, String userId, HttpServletRequest request);
 
     HttpRespMsg getMyUsers(HttpServletRequest request);
+
+    HttpRespMsg getMyParticiPMList(HttpServletRequest request);
+
+    HttpRespMsg getOvertimeDetail(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request);
 }

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

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SysFunctionService extends IService<SysFunction> {
 
+    public boolean hasPriviledge(int roleId, String functionName);
 }

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskFileService.java

@@ -1,6 +1,6 @@
 package com.management.platform.service;
 
-import com.management.platform.entity.TaskFile;
+import com.management.platform.entity.TaskFiles;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author Seyason
- * @since 2021-04-19
+ * @since 2022-04-20
  */
-public interface TaskFileService extends IService<TaskFile> {
+public interface TaskFilesService extends IService<TaskFiles> {
 
 }

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java

@@ -29,6 +29,8 @@ public interface TaskService extends IService<Task> {
 
     //获取不带任务描述的列表数据
     List<Task> simpleList(Wrapper<Task> queryWrapper);
+    List<Task> nameList(Wrapper<Task> queryWrapper);
+
 
     HttpRespMsg getTaskTimeCompare(Integer projectId);
     HttpRespMsg exportTaskTimeCompare(Integer projectId);
@@ -38,4 +40,10 @@ public interface TaskService extends IService<Task> {
     HttpRespMsg importTask(Integer projectId, Integer groupId, Integer stagesId, MultipartFile file, HttpServletRequest request);
 
     HttpRespMsg delete(TaskGroup item);
+
+    HttpRespMsg addMileStoneTask(Integer milestoneId, String taskId);
+
+    HttpRespMsg removeMileStoneTask(Integer id);
+
+    HttpRespMsg getMilestoneTaskList(Integer milestoneId);
 }

+ 72 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/GroupParticipatorServiceImpl.java

@@ -0,0 +1,72 @@
+package com.management.platform.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.GroupParticipator;
+import com.management.platform.entity.Participation;
+import com.management.platform.mapper.GroupParticipatorMapper;
+import com.management.platform.mapper.ParticipationMapper;
+import com.management.platform.mapper.TaskGroupMapper;
+import com.management.platform.service.GroupParticipatorService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.ParticipationService;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.poi.hssf.record.GroupMarkerSubRecord;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+@Service
+public class GroupParticipatorServiceImpl extends ServiceImpl<GroupParticipatorMapper, GroupParticipator> implements GroupParticipatorService {
+    @Resource
+    private GroupParticipatorMapper groupParticipatorMapper;
+    @Resource
+    private ParticipationMapper participationMapper;
+    @Resource
+    private TaskGroupMapper taskGroupMapper;
+    @Resource
+    private ParticipationService participationService;
+
+    @Override
+    public HttpRespMsg save(Integer groupId, String idsJson) {
+        groupParticipatorMapper.delete(new QueryWrapper<GroupParticipator>().eq("group_id", groupId));
+        List<String> idsArray = JSONArray.parseArray(idsJson, String.class);
+        List<GroupParticipator> participatorList = new ArrayList<>();
+        for (String id : idsArray) {
+            GroupParticipator p = new GroupParticipator();
+            p.setGroupId(groupId);
+            p.setUserId(id);
+            participatorList.add(p);
+        }
+        saveBatch(participatorList);
+        //检查项目的参与人里面是否有,如果没有自动加上
+        int projectId = taskGroupMapper.selectById(groupId).getProjectId();
+        List<Participation> proPartList = participationMapper.selectList(new QueryWrapper<Participation>().eq("project_id", projectId));
+        List<String> nonList = idsArray.stream().filter(p->!proPartList.stream().anyMatch(pro->pro.getUserId().equals(p))).collect(Collectors.toList());
+        if (nonList.size() > 0) {
+            //加上
+            List<Participation> pList = new ArrayList<>();
+            for (String id:nonList) {
+                Participation p = new Participation();
+                p.setProjectId(projectId);
+                p.setUserId(id);
+                pList.add(p);
+            }
+            participationService.saveBatch(pList);
+        }
+        return new HttpRespMsg();
+    }
+
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeavePmauditServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.LeavePmaudit;
+import com.management.platform.mapper.LeavePmauditMapper;
+import com.management.platform.service.LeavePmauditService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-21
+ */
+@Service
+public class LeavePmauditServiceImpl extends ServiceImpl<LeavePmauditMapper, LeavePmaudit> implements LeavePmauditService {
+
+}

+ 47 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.ExpenseItemService;
+import com.management.platform.service.LeavePmauditService;
 import com.management.platform.service.LeaveSheetService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
@@ -41,17 +42,24 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
     private TimeTypeMapper timeTypeMapper;
     @Resource
     private ReportMapper reportMapper;
+    @Resource
+    private AuditWorkflowSettingMapper auditWorkflowSettingMapper;
+    @Resource
+    private DepartmentMapper departmentMapper;
+    @Resource
+    private LeavePmauditService leavePmauditService;
+    @Resource
+    private UserYearleaveSettingMapper userYearleaveSettingMapper;
 
 
     @Override
-    public HttpRespMsg add(LeaveSheet sheet, String userId) {
+    public HttpRespMsg add(LeaveSheet sheet, String userId, String projectAuditorJson) {
         HttpRespMsg msg = new HttpRespMsg();
         boolean isNew = false;
         if (sheet.getId() == null) {
             isNew = true;
         }
         sheet.setOperatorId(userId);//设置操作人id
-//        sheet.setOwnerId(userId);
         User user = userMapper.selectById(userId);
         sheet.setOwnerName(userMapper.selectById(sheet.getOwnerId()).getName());
         sheet.setCompanyId(user.getCompanyId());
@@ -70,8 +78,44 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
             int count = leaveSheetMapper.selectCount(queryWrapper);
             if (count > 0) {
                 msg.setError("该时间段已有请假申请,不能重复请假");
+            } else {
+                //校验当前的指定的项目审核人
+                if (StringUtils.isEmpty(projectAuditorJson)) {
+                    msg.setError("项目审核人不能为空");
+                } else {
+                    //获取第一个审批人
+                    User owner = userMapper.selectById(sheet.getOwnerId());
+                    AuditWorkflowSetting workflowNode = auditWorkflowSettingMapper.selectOne(new QueryWrapper<AuditWorkflowSetting>().eq("type", 0)
+                            .eq("dept_id", owner.getDepartmentId()).orderByAsc("seq").last("limit 1"));
+                    if (workflowNode != null) {
+                        if (workflowNode.getAuditorType() == 0) {
+                            //项目负责人审核, 创建时指定的项目审核人
+
+                        } else if (workflowNode.getAuditorType() == 1) {
+                            //部门负责人
+                            Department dept = departmentMapper.selectById(workflowNode.getAuditDeptId());
+                            sheet.setAuditorId(dept.getManagerId());
+
+                        } else {
+                            //指定一个人审批
+                            sheet.setAuditorId(workflowNode.getUserId());
+                            sheet.setAuditorName(workflowNode.getUserName());
+                        }
+                    }
+                    leaveSheetMapper.insert(sheet);
+                    //设置项目的负责人审核
+                    List<String> userIds = JSONArray.parseArray(projectAuditorJson, String.class);
+                    List<LeavePmaudit> pmauditList = new ArrayList<>();
+                    for (String id : userIds) {
+                        LeavePmaudit leavePmaudit = new LeavePmaudit();
+                        leavePmaudit.setLeaveId(sheet.getId());
+                        leavePmaudit.setAuditorId(id);
+                        leavePmaudit.setStatus(0);
+                        pmauditList.add(leavePmaudit);
+                    }
+                    leavePmauditService.saveBatch(pmauditList);
+                }
             }
-            leaveSheetMapper.insert(sheet);
         } else {
             leaveSheetMapper.updateById(sheet);
         }

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/MilestoneTaskRefServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.MilestoneTaskRef;
+import com.management.platform.mapper.MilestoneTaskRefMapper;
+import com.management.platform.service.MilestoneTaskRefService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-19
+ */
+@Service
+public class MilestoneTaskRefServiceImpl extends ServiceImpl<MilestoneTaskRefMapper, MilestoneTaskRef> implements MilestoneTaskRefService {
+
+}

+ 51 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -12,6 +12,7 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.ProjectAuditorService;
 import com.management.platform.service.ProjectNotifyUserService;
 import com.management.platform.service.ProjectService;
+import com.management.platform.service.SysFunctionService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.ListUtil;
@@ -106,6 +107,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     DepartmentMapper departmentMapper;
     @Resource
     ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    SysFunctionService sysFunctionService;
 
     @Resource
     private HttpServletResponse response;
@@ -118,8 +121,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             User user = userMapper.selectById(request.getHeader("Token"));
-            List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部项目");
-            if (functionList.size() == 0) {
+            if (!sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部项目")) {
                 //普通员工只能看本人相关的项目列表
                 httpRespMsg.data = projectMapper.getParticipatedProject(user.getId(), user.getCompanyId());
             } else {
@@ -220,6 +222,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    Integer taskGpIncharge,
                                    String auditUserIds,
                                    Integer category,
+                                   String projectDesc,
                                    HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
@@ -273,6 +276,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setAssociateDegrees(associateDegrees)
                             .setAssociateDegreeNames(associateDegreeNames)
                             .setCustomerId(customerId)
+                            .setProjectDesc(projectDesc)
                             .setTaskGpIncharge(taskGpIncharge);
                     if (category != null) {
                         ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
@@ -339,6 +343,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setAssociateDegrees(associateDegrees)
                         .setAssociateDegreeNames(associateDegreeNames)
                         .setCustomerId(customerId)
+                        .setProjectDesc(projectDesc)
                         .setTaskGpIncharge(taskGpIncharge);
                 if (category != null) {
                     ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
@@ -517,7 +522,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             auditor.setAuditorId(inchargerId);
                             auditor.setAuditorName(userMapper.selectById(inchargerId).getName());
                             projectAuditorMapper.insert(auditor);
-                            //将日报的审核人换成
                         }
                     }
                     //检查日报,如果有删除的审核人的正在审核的日报,要更新审核人为当前的第一个人
@@ -1572,37 +1576,42 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg getOvertimeList(Integer projectId, String startDate, String endDate, HttpServletRequest request) {
+    public HttpRespMsg getOvertimeList(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
-        msg.data = projectMapper.getOvertimeList(user.getCompanyId(), startDate, endDate, projectId);
+        msg.data = projectMapper.getOvertimeList(userId, user.getCompanyId(), startDate, endDate, projectId);
         return msg;
     }
 
     @Override
-    public HttpRespMsg exportOvertimeList(Integer projectId, String startDate, String endDate, HttpServletRequest request) {
+    public HttpRespMsg exportOvertimeList(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             String token = request.getHeader("TOKEN");
             User user = userMapper.selectById(token);
-            List<Map<String, Object>> list = projectMapper.getOvertimeList(user.getCompanyId(), startDate, endDate, projectId);
-
+            List<Map<String, Object>> list = projectMapper.getOvertimeList(userId, user.getCompanyId(), startDate, endDate, projectId);
+            boolean hasViewSalary = sysFunctionService.hasPriviledge(user.getRoleId(), "查看加班成本");
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             List<String> headList = new ArrayList<String>();
             headList.add("人员");
             headList.add("加班工时(h)");
-            headList.add("加班成本(元)");
+            if (hasViewSalary) {
+                headList.add("加班成本(元)");
+            }
+
             List<List<String>> allList = new ArrayList<List<String>>();
             allList.add(headList);
             double totalCostTime = 0;
             for (Map<String, Object> map : list) {
                 totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("cost"));
-                totalCostTime += (Double)map.get("workingTime");
+                totalCostTime += (Double)map.get("overtimeHours");
                 List<String> rowData = new ArrayList<String>();
                 rowData.add((String)map.get("username"));
-                rowData.add(((Double)map.get("workingTime")).toString());
-                rowData.add(((BigDecimal)map.get("cost")).toString());
+                rowData.add(((Double)map.get("overtimeHours")).toString());
+                if (hasViewSalary) {
+                    rowData.add(((BigDecimal)map.get("cost")).toString());
+                }
                 allList.add(rowData);
             }
             String total = totalMoneyCost.toString();
@@ -1610,7 +1619,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<String> sumRow = new ArrayList<String>();
             sumRow.add("合计");
             sumRow.add(""+totalCostTime);
-            sumRow.add(totalMoneyCost.toString());
+            if (hasViewSalary) {
+                sumRow.add(totalMoneyCost.toString());
+            }
             allList.add(sumRow);
             //生成excel文件导出
             String fileName = "加班统计报表_"+System.currentTimeMillis();
@@ -2040,6 +2051,33 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getMyParticiPMList(HttpServletRequest request) {
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().eq("user_id", token));
+        HttpRespMsg msg = new HttpRespMsg();
+        if (participationList.size() > 0) {
+            List<Integer> pIds = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
+            //仅需要进行中项目负责人来审核
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", pIds).eq("status", 1));
+            List<String> inchargerIds = projectList.stream().map(Project::getInchargerId).collect(Collectors.toList());
+            List<Map<String, Object>> userList = userMapper.getSimpleNameList(new QueryWrapper<User>().in("id", inchargerIds));
+            msg.data = userList;
+        }
+
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg getOvertimeDetail(Integer userId, Integer projectId, String startDate, String endDate, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        msg.data = projectMapper.getOvertimeDetail(userId, user.getCompanyId(), startDate, endDate, projectId);
+        return msg;
+    }
+
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());;

+ 27 - 18
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -595,11 +595,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     public HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         TimeType timeType = timeTypeMapper.selectById(companyId);
-        double totalWorkTime = 0;
-        for (Report report : reportList) {
-            totalWorkTime +=report.getWorkingTime();
-        }
-
         //删除不在本次更新名单中的老记录
         if (date != null && !date.contains("@")) {
             //取到已有记录的id集合
@@ -612,23 +607,37 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
         }
 
-        for (Report report : reportList) {
-            //检查是否存在计算加班工资的情况,,重新计算当日薪酬
-            if (!timeType.getPayOvertime()) {
-                //不能超过最多时间,超过的话,等比例核算
-                if (totalWorkTime > timeType.getAllday()) {
-                    BigDecimal cost;
-                    if (hourCost == null) {
-                        cost = userList.stream().filter(u -> u.getId().equals(report.getCreatorId())).findFirst().get().getCost().multiply(new BigDecimal(timeType.getAllday()))
-                                .multiply(new BigDecimal(report.getWorkingTime())).divide(new BigDecimal(totalWorkTime), RoundingMode.HALF_UP);
-                    } else {
-                        cost = hourCost.multiply(new BigDecimal(timeType.getAllday()))
-                                .multiply(new BigDecimal(report.getWorkingTime())).divide(new BigDecimal(totalWorkTime), RoundingMode.HALF_UP);
+        //存在按周填报的情况,需要处理一天一个汇总
+        Map<LocalDate, List<Report>> groupMap = reportList.stream().collect(Collectors.groupingBy(Report::getCreateDate));
+        Iterator<LocalDate> it = groupMap.keySet().iterator();
+        double totalWorkTime;
+        while (it.hasNext()) {
+            LocalDate createDate = it.next();
+            List<Report> sameDayList = groupMap.get(createDate);
+            totalWorkTime = 0;
+            for (Report report : sameDayList) {
+                totalWorkTime +=report.getWorkingTime();
+            }
+            //当前一天的总时间
+            for (Report report : sameDayList) {
+                //检查是否存在计算加班工资的情况,,重新计算当日薪酬
+                if (!timeType.getPayOvertime()) {
+                    //不能超过最多时间,超过的话,等比例核算
+                    if (totalWorkTime > timeType.getAllday()) {
+                        BigDecimal cost;
+                        if (hourCost == null) {
+                            cost = userList.stream().filter(u -> u.getId().equals(report.getCreatorId())).findFirst().get().getCost().multiply(new BigDecimal(timeType.getAllday()))
+                                    .multiply(new BigDecimal(report.getWorkingTime())).divide(new BigDecimal(totalWorkTime), RoundingMode.HALF_UP);
+                        } else {
+                            cost = hourCost.multiply(new BigDecimal(timeType.getAllday()))
+                                    .multiply(new BigDecimal(report.getWorkingTime())).divide(new BigDecimal(totalWorkTime), RoundingMode.HALF_UP);
+                        }
+                        report.setCost(cost);
                     }
-                    report.setCost(cost);
                 }
             }
         }
+
         //批量新增或更新
         reportService.saveOrUpdateBatch(reportList);
 

+ 15 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysFunctionServiceImpl.java

@@ -1,11 +1,15 @@
 package com.management.platform.service.impl;
 
 import com.management.platform.entity.SysFunction;
+import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.service.SysFunctionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.List;
+
 /**
  * <p>
  * 菜单功能权限关联表 服务实现类
@@ -16,5 +20,16 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SysFunctionServiceImpl extends ServiceImpl<SysFunctionMapper, SysFunction> implements SysFunctionService {
+    @Resource
+    private SysFunctionMapper sysFunctionMapper;
 
+    @Override
+    public boolean hasPriviledge(int roleId, String functionName) {
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(roleId, functionName);
+        if (functionList.size() > 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 }

+ 0 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFileServiceImpl.java

@@ -1,20 +0,0 @@
-package com.management.platform.service.impl;
-
-import com.management.platform.entity.TaskFile;
-import com.management.platform.mapper.TaskFileMapper;
-import com.management.platform.service.TaskFileService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author Seyason
- * @since 2021-04-19
- */
-@Service
-public class TaskFileServiceImpl extends ServiceImpl<TaskFileMapper, TaskFile> implements TaskFileService {
-
-}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFilesServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.TaskFiles;
+import com.management.platform.mapper.TaskFilesMapper;
+import com.management.platform.service.TaskFilesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-04-20
+ */
+@Service
+public class TaskFilesServiceImpl extends ServiceImpl<TaskFilesMapper, TaskFiles> implements TaskFilesService {
+
+}

+ 43 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -1,10 +1,12 @@
 package com.management.platform.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.util.StringUtil;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
+import com.management.platform.service.MilestoneTaskRefService;
 import com.management.platform.service.TaskExecutorService;
 import com.management.platform.service.TaskService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -58,6 +60,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
     private TaskGroupMapper taskGroupMapper;
     @Resource
     private TaskExecutorService taskExecutorService;
+    @Resource
+    private MilestoneTaskRefMapper milestoneTaskRefMapper;
+
     @Override
     public HttpRespMsg getExecutorPanel(Integer projectId) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -84,6 +89,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         return taskMapper.simpleList(queryWrapper);
     }
 
+    @Override
+    public List<Task> nameList(Wrapper<Task> queryWrapper) {
+        return taskMapper.nameList(queryWrapper);
+    }
+
     @Override
     public HttpRespMsg getTaskTimeCompare(Integer projectId) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -450,4 +460,37 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         }
         return msg;
     }
+
+    @Override
+    public HttpRespMsg addMileStoneTask(Integer milestoneId, String taskIds) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<Integer> ids = JSONArray.parseArray(taskIds, Integer.class);
+        int projectId = taskMapper.selectById(milestoneId).getProjectId();
+        for (Integer taskId : ids) {
+            MilestoneTaskRef ref = new MilestoneTaskRef();
+            ref.setMilestoneId(milestoneId);
+            ref.setTaskId(taskId);
+            ref.setProjectId(projectId);
+            int cnt = milestoneTaskRefMapper.selectCount(new QueryWrapper<MilestoneTaskRef>().eq("milestone_id", milestoneId).eq("task_id", taskId));
+            if (cnt == 0) {
+                milestoneTaskRefMapper.insert(ref);
+            }
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg removeMileStoneTask(Integer id) {
+        milestoneTaskRefMapper.deleteById(id);
+        return new HttpRespMsg();
+    }
+
+    @Override
+    public HttpRespMsg getMilestoneTaskList(Integer milestoneId) {
+        List<MilestoneTaskRef> list = milestoneTaskRefMapper.getMilestoneTaskList(milestoneId);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = list;
+        return msg;
+    }
+
 }

+ 5 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFileMapper.xml

@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.management.platform.mapper.TaskFileMapper">
+<mapper namespace="com.management.platform.mapper.GroupParticipatorMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.management.platform.entity.TaskFile">
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.GroupParticipator">
         <id column="id" property="id" />
-        <result column="task_id" property="taskId" />
-        <result column="file_mapping_id" property="fileMappingId" />
+        <result column="group_id" property="groupId" />
+        <result column="user_id" property="userId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, task_id, file_mapping_id
+        id, group_id, user_id
     </sql>
 
 </mapper>

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeavePmauditMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.LeavePmauditMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.LeavePmaudit">
+        <id column="id" property="id" />
+        <result column="leave_id" property="leaveId" />
+        <result column="auditor_id" property="auditorId" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, leave_id, auditor_id, status
+    </sql>
+
+</mapper>

+ 6 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml

@@ -19,11 +19,16 @@
         <result column="indate" property="indate" />
         <result column="time_type" property="timeType" />
         <result column="tel" property="tel" />
+        <result column="auditor_id" property="auditorId" />
+        <result column="auditor_name" property="auditorName" />
+        <result column="audit_deptid" property="auditDeptid" />
+        <result column="is_final_audit" property="isFinalAudit" />
+        <result column="auditor_type" property="auditorType" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel
+        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, audit_deptid, is_final_audit, auditor_type
     </sql>
     <select id="summaryData"  resultMap="BaseResultMap">
         select owner_id, owner_name, sum(time_hours) as time_hours, sum(time_days) as time_days from leave_sheet

+ 36 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/MilestoneTaskRefMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.MilestoneTaskRefMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.MilestoneTaskRef">
+        <id column="id" property="id" />
+        <result column="milestone_id" property="milestoneId" />
+        <result column="task_id" property="taskId" />
+        <result column="project_id" property="projectId" />
+    </resultMap>
+    <resultMap id="ResultMap2" type="com.management.platform.entity.MilestoneTaskRef">
+        <id column="id" property="id" />
+        <result column="milestone_id" property="milestoneId" />
+        <result column="task_id" property="taskId" />
+        <result column="name" property="taskName" />
+        <result column="task_status" property="taskStatus" />
+    </resultMap>
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, milestone_id, task_id, project_id
+    </sql>
+
+    <select id="getMilestoneTaskList" resultMap="ResultMap2">
+        select milestone_task_ref.id, milestone_id, task_id, name, task_status from milestone_task_ref left join task on task.id = milestone_task_ref.task_id
+        where milestone_id = #{milestoneId}
+    </select>
+
+    <select id="getAllMTlist" resultMap="ResultMap2">
+        select milestone_task_ref.id, milestone_id, task_id, name, task_status from milestone_task_ref left join task on task.id = milestone_task_ref.task_id
+        where milestone_task_ref.project_id = #{projectId}
+        <if test="groupId != null">
+            and task.group_id = #{groupId}
+        </if>
+    </select>
+</mapper>

+ 23 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -37,14 +37,14 @@
         <result column="task_gp_incharge" property="taskGpIncharge" />
         <result column="category" property="category" />
         <result column="category_name" property="categoryName" />
+        <result column="project_desc" property="projectDesc" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, project_name, company_id, project_code, incharger_id, plan_start_date, plan_end_date, progress, level, status, finish_date, creator_id, creator_name, create_date, contract_amount, budget, base_man, base_outsourcing, base_risk1, base_risk2, base_fee, fee_normal, fee_travel, fee_outsourcing, fee_man, customer_id, customer_name, is_public, associate_degrees, associate_degree_names, task_gp_incharge, category, category_name
+        id, project_name, company_id, project_code, incharger_id, plan_start_date, plan_end_date, progress, level, status, finish_date, creator_id, creator_name, create_date, contract_amount, budget, base_man, base_outsourcing, base_risk1, base_risk2, base_fee, fee_normal, fee_travel, fee_outsourcing, fee_man, customer_id, customer_name, is_public, associate_degrees, associate_degree_names, task_gp_incharge, category, category_name, project_desc
     </sql>
 
-
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.vo.ProjectWithStage">
         <result column="id" property="id" />
         <result column="project_name" property="projectName" />
@@ -343,7 +343,8 @@
     <!--获取加班统计报表 -->
     <select id="getOvertimeList" resultType="java.util.Map">
         SELECT report.`creator_id` AS userId, user.`name` AS username, SUM(report.`working_time`) AS workingTime,
-        SUM(report.cost) AS cost FROM report LEFT JOIN user ON user.id = report.`creator_id`
+        SUM(report.`overtime_hours`) AS overtimeHours,
+        SUM(report.overtime_cost) AS cost FROM report LEFT JOIN user ON user.id = report.`creator_id`
         WHERE report.is_overtime = 1
         and report.`state` = 1
         AND report.`create_date` BETWEEN #{startDate} and #{endDate}
@@ -351,10 +352,28 @@
         <if test="projectId != null">
             AND report.`project_id` = #{projectId}
         </if>
+        <if test="userId != null">
+            AND report.`creator_id` = #{userId}
+        </if>
         GROUP BY report.creator_id
     </select>
 
-
+    <!-- 获取某个员工的某时间段内的加班详情 -->
+    <select id="getOvertimeDetail" resultType="java.util.Map">
+        SELECT date_format(report.`create_date`, '%Y-%m-%d') AS createDate, report.`creator_id` AS userId, user.`name` AS username, SUM(report.`working_time`) AS workingTime,
+        SUM(report.`overtime_hours`) AS overtimeHours,
+        SUM(report.overtime_cost) AS cost FROM report LEFT JOIN user ON user.id = report.`creator_id`
+        WHERE report.is_overtime = 1
+        and report.`state` = 1
+        AND report.`create_date` BETWEEN #{startDate} and #{endDate}
+        AND user.`company_id` = #{companyId}
+        <if test="projectId != null">
+            AND report.`project_id` = #{projectId}
+        </if>
+        <if test="userId != null">
+            AND report.`creator_id` = #{userId}
+        </if>
+    </select>
     <!--按照项目内的阶段名称分组统计工时-->
     <select id="getDegreeCost" resultType="java.util.Map">
         SELECT IFNULL(b.name, "未分配") as name, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney

Різницю між файлами не показано, бо вона завелика
+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


+ 26 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFilesMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.TaskFilesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.TaskFiles">
+        <id column="id" property="id" />
+        <result column="task_id" property="taskId" />
+        <result column="project_id" property="projectId" />
+        <result column="document_name" property="documentName" />
+        <result column="server_name" property="serverName" />
+        <result column="url" property="url" />
+        <result column="indate" property="indate" />
+        <result column="size" property="size" />
+        <result column="document_type" property="documentType" />
+        <result column="creator_id" property="creatorId" />
+        <result column="creator_name" property="creatorName" />
+        <result column="document_id" property="documentId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, task_id, project_id, document_name, server_name, url, indate, size, document_type, creator_id, creator_name, document_id
+    </sql>
+
+</mapper>

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml

@@ -25,11 +25,12 @@
         <result column="custom_data_active" property="customDataActive" />
         <result column="custom_data_name" property="customDataName" />
         <result column="finance_audit" property="financeAudit" />
+        <result column="overtime_ratio" property="overtimeRatio" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        company_id, allday, am, pm, month_days, hour_cost_input_type, type, pay_overtime, alert_time, multi_worktime, fix_monthcost, fill_months, custom_degree_active, custom_degree_name, alert_msg, sync_corpwx_time, need_dept_audit, report_workflow, custom_data_active, custom_data_name, finance_audit
+        company_id, allday, am, pm, month_days, hour_cost_input_type, type, pay_overtime, alert_time, multi_worktime, fix_monthcost, fill_months, custom_degree_active, custom_degree_name, alert_msg, sync_corpwx_time, need_dept_audit, report_workflow, custom_data_active, custom_data_name, finance_audit, overtime_ratio
     </sql>
 
 </mapper>

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml

@@ -106,4 +106,8 @@
         AND a.is_active = 1
         AND a.id in (select user_id from participation where project_id = #{projectId})
     </select>
+    <select id="getSimpleNameList" resultType="java.util.HashMap">
+        select id, name from user
+        ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 9 - 9
fhKeeper/formulahousekeeper/octopus/config/index.js

@@ -4,15 +4,15 @@ var path = require('path')
 // var ip = '192.168.2.13'
 var ip = '47.100.37.243' 
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     } 
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    } 
+}
 
 module.exports = {
   build: {

+ 5 - 3
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/application.yml

@@ -14,10 +14,12 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+#    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+#    username: root
+#    password: HuoshiDB@2022
+    url: jdbc:mysql://47.100.37.243:7644/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
     username: root
-    password: HuoshiDB@2022
-
+    password: Ziyu20141026!@@
     hikari:
       maximum-pool-size: 10
       minimum-idle: 3

+ 7 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -86,7 +86,7 @@
                     </template>
                 </el-form-item>
                 <!-- 请假人 -->
-                <el-form-item label="请假人" prop="ownerId"  style="width: 300px">
+                <el-form-item label="请假人" prop="ownerId"  style="width: 300px" v-show="false">
                     <!--普通员工只能自己填报自己的 -->
                     <el-select v-model="addForm.ownerId" @change="txselts(addForm.leaveType,addForm.ownerId)" placeholder="请选择请假人" style="width: 240px" :disabled="!permissions.leaveFil" filterable="true">
                         <span v-for="(item, index) in users" :key="index">
@@ -155,7 +155,7 @@
         <div class="ctons">
           <div class="flex">
             <div>
-              <el-select v-model="ownerIds" placeholder="请选择请假人" clearable @change="chufas()" style="width: 180px" size="small" :disabled="!permissions.leaveAll" filterable="true">
+              <el-select v-model="ownerIds" placeholder="请选择请假人" clearable @change="chufas()" style="width: 180px" size="small" v-show="permissions.leaveAll" filterable="true">
                   <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                   </span> 
@@ -1069,12 +1069,11 @@ export default {
                 for (let i = 0; i < this.users.length; i++) {
                   this.susers.push({value:this.users[i].id,label:this.users[i].name})
                 }
-                if (this.user.role == 0) {
-                    this.addForm.ownerId = this.user.id;
-                    this.ownerIds = this.user.id
-                    this.addForm.status = 1;
-                    this.addForm.tel = this.user.phone
-                }
+                //只能自己填报自己的请假单
+                this.addForm.ownerId = this.user.id;
+                this.ownerIds = this.user.id
+                this.addForm.status = 1;
+                this.addForm.tel = this.user.phone
             } else {
                 this.$message({
                 message: res.msg,

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -232,9 +232,9 @@
         <div class="yanjiu">
             <p style="margin-left:10px;color:#666;">是否开启导入审核</p>
             <el-switch style="margin-left: 55px" v-model="timeType.needDeptAudit" active-color="#13ce66" inactive-color="#ff4949"> </el-switch>
+            <span v-if="timeType.needDeptAudit == 1" style="margin-left:10px;color:#999;">审核人为各部门直属领导</span>
         </div>
 
-
         <div style="width:80px;margin:0 auto;padding:20px;">
             <el-button  type="primary" @click="submitInsert" :loading="addLoading">保存</el-button>
         </div>

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -192,12 +192,12 @@
                                                 <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
                                                 <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
                                             {{item2.time.toFixed(1)}}h  
-                                            <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}小时</span></el-tag>
+                                            <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
                                             </p>
                                             <p>事项:<span v-html="item2.content"></span></p>
                                             </div>
                                             <div v-if="item2.multiWorktime==1" >
-                                                <p>项目时长:{{item2.time.toFixed(1)}}h  <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}小时</span></el-tag></p>
+                                                <p>项目时长:{{item2.time.toFixed(1)}}h  <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
                                                 <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
                                                     style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
                                                     <p style="display: inline-block;">时长: