Prechádzať zdrojové kódy

综合部门主要负责人和其他负责人查看和导出工时报告的处理

seyason 2 rokov pred
rodič
commit
4b6beccd5c

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

@@ -1079,12 +1079,12 @@ public class ReportController {
     }
 
     @RequestMapping("/getMembList")
-    public HttpRespMsg getMembList(@RequestParam(required=false) String date, Integer manageDeptId, HttpServletRequest request) {
+    public HttpRespMsg getMembList(@RequestParam(required=false) String date, HttpServletRequest request) {
         if (date == null) {
             //默认获取今天的
             date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
         }
-        return reportService.getMembList(date, manageDeptId, request);
+        return reportService.getMembList(date, request);
     }
 
     @RequestMapping("/approveAllImport")

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

@@ -45,7 +45,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request);
 
-    HttpRespMsg getMembList(String date, Integer manageDeptId, HttpServletRequest request);
+    HttpRespMsg getMembList(String date, HttpServletRequest request);
 
     HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request);
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);

+ 121 - 127
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -214,86 +214,56 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     map.put("cost", total);
                     map.put("state", state);
                 }
-                boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-                //需要看本部门的所有人员的日报
-                if (hasDeptWorktimePriv || (user.getManageDeptId() != null &&  user.getManageDeptId() > 0)) {
-                    //找到该部门的所有子部门
-                    List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-                    //查找当前部门经理负责的部门 或者作为其他负责人的部分
-                    List<Department> queryDeptList = null;
-                    if (deptId != null) {
-                        queryDeptList = allDepts.stream().filter(dp->dp.getDepartmentId().equals(deptId)).collect(Collectors.toList());
-                    } else {
-                        queryDeptList = allDepts.stream().filter(
-                                dp -> user.getId().equals(dp.getManagerId()) || (hasDeptWorktimePriv && dp.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
-                        for (Integer integer : otherCollect) {
-                            Optional<Department> first = allDepts.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
-                            if(first.isPresent()){
-                                queryDeptList.add(first.get());
+                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
+                //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
+                if (allVisibleDeptIdList.size() > 0) {
+                    nameList = reportMapper.getReportNameByDateAndDept(date,
+                            allVisibleDeptIdList, targetUid, null);
+
+                    if (nameList.size() > 0) {
+                        List<String> userIds = new ArrayList<>();
+                        nameList.forEach(n->{
+                            String id = (String) n.get("id");
+                            userIds.add(id);
+                        });
+                        List<Map<String, Object>> reportList = reportMapper.getUserReportByDate(date, userIds);
+                        for (Map<String, Object> memb : nameList) {
+                            //再根据人分别获取当天的报告
+                            List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
+                            BigDecimal total = new BigDecimal(0);
+                            for (Map<String, Object> report : reportList) {
+                                if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
+                                    rList.add(report);
+                                    total = total.add((BigDecimal) report.get("cost"));
+                                }
                             }
-                        }
-
-                    }
-
-                    if (queryDeptList.size() > 0) {
-                        //递归获取全部子部门
-                        List<Department> deptList = new ArrayList<>();
-                        for (Department dept : queryDeptList) {
-                            deptList.add(dept);
-                            deptList.addAll(getSubDepts(dept, allDepts));
-                        }
-
-                        List ids = deptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                        nameList = reportMapper.getReportNameByDateAndDept(date,
-                                ids, targetUid, null);
-
-                        if (nameList.size() > 0) {
-                            List<String> userIds = new ArrayList<>();
-                            nameList.forEach(n->{
-                                String id = (String) n.get("id");
-                                userIds.add(id);
-                            });
-                            List<Map<String, Object>> reportList = reportMapper.getUserReportByDate(date, userIds);
-                            for (Map<String, Object> memb : nameList) {
-                                //再根据人分别获取当天的报告
-                                List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
-                                BigDecimal total = new BigDecimal(0);
-                                for (Map<String, Object> report : reportList) {
-                                    if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
-                                        rList.add(report);
-                                        total = total.add((BigDecimal) report.get("cost"));
+                            memb.put("data", rList);
+                            memb.put("cost", total);
+                            double reportTime = 0;
+                            if (rList.size() > 0) {
+                                int state = 1;
+                                for (Map<String, Object> m : rList) {
+                                    double t = (double) m.get("time");
+                                    reportTime += t;
+
+                                    //取最低的状态
+                                    if (state == 2) {
+                                        continue;
                                     }
-                                }
-                                memb.put("data", rList);
-                                memb.put("cost", total);
-                                double reportTime = 0;
-                                if (rList.size() > 0) {
-                                    int state = 1;
-                                    for (Map<String, Object> m : rList) {
-                                        double t = (double) m.get("time");
-                                        reportTime += t;
-
-                                        //取最低的状态
-                                        if (state == 2) {
-                                            continue;
-                                        }
-                                        if (state == 0) {
-                                            if ((int)m.get("state") == 2) {
-                                                state = 2;
-                                            } else {
-                                                continue;
-                                            }
+                                    if (state == 0) {
+                                        if ((int)m.get("state") == 2) {
+                                            state = 2;
                                         } else {
-                                            state = (int)m.get("state");
+                                            continue;
                                         }
+                                    } else {
+                                        state = (int)m.get("state");
                                     }
-                                    memb.put("state", state);
                                 }
-                                DecimalFormat df = new DecimalFormat("0.00");
-                                memb.put("reportTime", df.format(reportTime));
+                                memb.put("state", state);
                             }
+                            DecimalFormat df = new DecimalFormat("0.00");
+                            memb.put("reportTime", df.format(reportTime));
                         }
                     }
                 }
@@ -1671,8 +1641,43 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return retList;
     }
 
+    //获取可见的所有的部门id List
+    public List<Integer> getAllVisibleDeptIdList(User curUser, List<Department> allDepartmentList) {
+        if (allDepartmentList == null) {
+            allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
+        }
+        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+        //负责的部门:先查担任主要负责人的部门
+        List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", curUser.getId()));
+        //其他负责的部门
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", curUser.getId()));
+        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+        for (Integer integer : otherCollect) {
+            Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
+            if(first.isPresent()){
+                allMDeptList.add(first.get());
+            }
+        }
+
+        //如果有查看本部门工时的权限,加上自己所在的部门
+        if (hasDeptWorktimePriv && curUser.getDepartmentId() != null&& curUser.getDepartmentId()!=0) {
+            Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
+            //要加上自己的部门,如果没有的话
+            if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
+                allMDeptList.add(ownerDept);
+            }
+        }
+        List<Department> subDepts = new ArrayList<>();
+        for (Department dp : allMDeptList) {
+            subDepts.addAll(getSubDepts(dp, allDepartmentList));
+            subDepts.add(dp);
+        }
+        List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+        return collect;
+    }
+
     @Override
-    public HttpRespMsg getMembList(String date, Integer manageDeptId, HttpServletRequest request) {
+    public HttpRespMsg getMembList(String date, HttpServletRequest request) {
         String token = request.getHeader("Token");
         User curUser = userMapper.selectById(token);
         Integer companyId = curUser.getCompanyId();
@@ -1683,7 +1688,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
         List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看全公司工时");
-        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+
         if (functionList.size() > 0) {
             //查看全部的
             //加上未分配的部门
@@ -1691,9 +1696,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             unAssignedDept.setId(0);
             unAssignedDept.setLabel("未分配");
             list.add(unAssignedDept);
-        } else if (hasDeptWorktimePriv || (manageDeptId != null && manageDeptId > 0)) {
-            //指定查看某个部门下的,一个人可能负责多个部门
+        } else {
+            //按权限查看
+            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+            //负责的部门:先查担任主要负责人的部门
             List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", token));
+            //其他负责的部门
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", curUser.getId()));
             List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
             for (Integer integer : otherCollect) {
@@ -1702,26 +1710,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     allMDeptList.add(first.get());
                 }
             }
+
+            //如果有查看本部门工时的权限,加上自己所在的部门
             if (hasDeptWorktimePriv && curUser.getDepartmentId() != null&& curUser.getDepartmentId()!=0) {
                 Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
                 //要加上自己的部门,如果没有的话
                 if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
                     allMDeptList.add(ownerDept);
                 }
-                if (manageDeptId == null || manageDeptId == 0) {
-                    manageDeptId = curUser.getDepartmentId();
-                }
             }
 
-            if (allMDeptList.size() == 1) {
-                list = getSpecifiedDept(list, manageDeptId);
-            } else {
-                ArrayList realMDeptList = new ArrayList<>();
-                for (Department d : allMDeptList) {
-                    realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
-                }
-                list = realMDeptList;
+            ArrayList realMDeptList = new ArrayList<>();
+            for (Department d : allMDeptList) {
+                realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
             }
+            list = realMDeptList;
         }
 
         //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
@@ -2471,20 +2474,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
         if (functionList.size() == 0) {
-            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-            //检查是不是部门负责人
-            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 0)) {
-                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId()) || (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                List<Department> subDepts = new ArrayList<>();
-                for (Department dp : myDeptList) {
-                    subDepts.addAll(getSubDepts(dp, allDepts));
-                    subDepts.add(dp);
-                }
-                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
+            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+
+            //检查是不是部门负责人(含主要负责人和其他负责人)
+            List<Integer> allDeptIds = getAllVisibleDeptIdList(user, allDeptList);
+            if (allDeptIds.size() > 0) {
+//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId()) || (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
+//                List<Department> subDepts = new ArrayList<>();
+//                for (Department dp : myDeptList) {
+//                    subDepts.addAll(getSubDepts(dp, allDepts));
+//                    subDepts.add(dp);
+//                }
+//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allDeptIds, null);
                 //部门负责人看自己部门相关的
-                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect).orderByDesc("department_id"));
+                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allDeptIds).orderByDesc("department_id"));
             } else {
                 //看自己的所负责的项目相关人员的
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());
@@ -3102,23 +3107,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             int rowNum = 1;
             List<HashMap<String, Object>> allReportByDate = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
-            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-
             if (functionList.size() == 0) {
                 //检查是否是部门负责人
-                if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() > 0)) {
-                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-                    List<Department> deptList = allDeptList.stream().filter(dept->user.getId().equals(dept.getManagerId())|| (hasDeptWorktimePriv && dept.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                    List<Department> allSubDepts = new ArrayList<>();
-                    allSubDepts.addAll(deptList);
-                    for (Department dept: deptList) {
-                        allSubDepts.addAll(getSubDepts(dept, allDeptList));
-                    }
-                    List<Integer> collect = allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                    List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
-                    List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
-                    collect.addAll(otherCollect);
-                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, collect, endDate, projectId,stateKey,departmentId);
+                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
+                if (allVisibleDeptIdList.size() > 0) {
+                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, allVisibleDeptIdList, endDate, projectId,stateKey,departmentId);
                 }
 
                 List<HashMap<String, Object>> reportsFromProjects = null;
@@ -3491,19 +3484,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
         boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
         if (functionList.size() == 0) {
+            List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
             //检查是不是部门负责人
-            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 0)) {
-                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())|| (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                List<Department> subDepts = new ArrayList<>();
-                for (Department dp : myDeptList) {
-                    subDepts.addAll(getSubDepts(dp, allDepts));
-                    subDepts.add(dp);
-                }
-                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
+            if (allVisibleDeptIdList.size() > 0) {
+//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())|| (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
+//                List<Department> subDepts = new ArrayList<>();
+//                for (Department dp : myDeptList) {
+//                    subDepts.addAll(getSubDepts(dp, allDepts));
+//                    subDepts.add(dp);
+//                }
+//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allVisibleDeptIdList, null);
                 //部门负责人看自己部门相关的
-                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect).eq("report_status",0));
+                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allVisibleDeptIdList).eq("report_status",0));
             } else {
                 //看自己的所负责的项目相关人员的
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());

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

@@ -3187,9 +3187,6 @@
             getDepartment() {
                 let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 var param = {date:this.date + day};
-                if (this.user.manageDeptId != 0 && !this.permissions.reportsCompany && !this.permissions.reportsDept) {
-                    param.manageDeptId = this.user.manageDeptId; 
-                }
                 this.http.post("/report/getMembList", param,
                 res => {
                     if (res.code == "ok") {