Selaa lähdekoodia

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

Lijy 2 vuotta sitten
vanhempi
commit
3e73c61bfc

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

@@ -110,6 +110,12 @@ public class ReportController {
         return reportService.getCardTime(date, request);
     }
 
+    @RequestMapping("/getWeeklyCardTime")
+    public HttpRespMsg getWeeklyCardTime(@RequestParam String dateStr) {
+        return reportService.getWeeklyCardTime(dateStr, request);
+    }
+
+
 
     private void fillReportProgress(Report report, String professionProgress) {
         if (!StringUtil.isEmpty(professionProgress)) {
@@ -1073,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")

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

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -31,6 +32,8 @@ public class StagesController {
     @Resource
     private HttpServletRequest request;
 
+    @Resource
+    private GroupParticipatorMapper groupParticipatorMapper;
     @Resource
     private StagesService stagesService;
     @Resource
@@ -230,9 +233,29 @@ public class StagesController {
             }
         }
 
-
-
-        msg.data = list;
+        //判断当前用户是否有权限创建任务: 有权限的包括管理全部项目,项目创建人,项目PM, 分组负责人,分组参与人
+        List<SysRichFunction> manageAllProjects = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "管理全部项目");
+        boolean canAddTask = false;
+        if (manageAllProjects.size() > 0 || userId.equals(project.getCreatorId()) || userId.equals(project.getInchargerId())) {
+            canAddTask = true;
+        }
+        if (!canAddTask) {
+            //进一步判断是否是分组的负责人,参与人
+            TaskGroup group = taskGroupMapper.selectById(item.getGroupId());
+            if (userId.equals(group.getInchargerId())) {
+                canAddTask = true;
+            }
+            if (!canAddTask) {
+                int count = groupParticipatorMapper.selectCount(new QueryWrapper<GroupParticipator>().eq("user_id", userId).eq("group_id", group.getId()));
+                if (count > 0) {
+                    canAddTask = true;
+                }
+            }
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("list", list);
+        map.put("canAddTask", canAddTask);
+        msg.data = map;
         return msg;
     }
 

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -71,6 +71,11 @@ public class UserController {
         return userService.getEmployeeList(departmentId, keyword, status, roleId, onlyDirect, pageIndex, pageSize, request);
     }
 
+    @RequestMapping("/getSimpleActiveUserList")
+    public HttpRespMsg getSimpleActiveUserList() {
+        return userService.getSimpleActiveUserList(request);
+    }
+
     /**
      * 删除用户
      * userId 用户id

+ 27 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserYearleaveSettingController.java

@@ -9,6 +9,7 @@ import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.OapiAttendanceVacationTypeListRequest;
 import com.dingtalk.api.response.OapiAttendanceVacationTypeListResponse;
 import com.management.platform.entity.*;
+import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.DingDingService;
@@ -59,6 +60,8 @@ public class UserYearleaveSettingController {
     private HttpServletRequest request;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private SysFunctionMapper sysFunctionMapper;
 
     @RequestMapping("/save")
     public HttpRespMsg save(String userId, Integer companyId, Integer yearDays) {
@@ -141,20 +144,31 @@ public class UserYearleaveSettingController {
             map.put("defaultLeaveType", defaultType);
         }
         quotaNumQueryWrapper.eq("leave_code", leaveCode);
-        if (userId != null) {
-            String dingdingUserid = userMapper.selectById(userId).getDingdingUserid();
-            quotaNumQueryWrapper.eq("user_dingding_id", dingdingUserid);
-        } else if (departmentId != null) {
-            //指定部门
-            Department dept = departmentMapper.selectById(departmentId);
-            List<Department> allDept = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-            List<Department> allSubDepts = getSubDeptList(allDept, dept);
-            List<User> userList = userMapper.selectList(
-                    new QueryWrapper<User>()
-                            .in("department_id", allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList())));
-            List<String> userDDIds = userList.stream().map(User::getDingdingUserid).collect(Collectors.toList());
-            quotaNumQueryWrapper.in("user_dingding_id", userDDIds);
+        //是否具有查看全部请假单的权限
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部请假单");
+        if (functionList.size() == 0) {
+            //普通员工只能看自己的
+            quotaNumQueryWrapper.eq("user_dingding_id", user.getDingdingUserid());
+        } else {
+            //管理员看全部的
+            if (userId != null) {
+                String dingdingUserid = userMapper.selectById(userId).getDingdingUserid();
+                quotaNumQueryWrapper.eq("user_dingding_id", dingdingUserid);
+            } else if (departmentId != null) {
+                //指定部门
+                Department dept = departmentMapper.selectById(departmentId);
+                List<Department> allDept = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                List<Department> allSubDepts = getSubDeptList(allDept, dept);
+                List<User> userList = userMapper.selectList(
+                        new QueryWrapper<User>()
+                                .in("department_id", allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList())));
+                List<String> userDDIds = userList.stream().map(User::getDingdingUserid).collect(Collectors.toList());
+                quotaNumQueryWrapper.in("user_dingding_id", userDDIds);
+            }
         }
+
         quotaNumQueryWrapper.orderByAsc("name").orderByAsc("start_time");
         quotaNumQueryWrapper.select("company_id, user_dingding_id, NAME, leave_code, MIN(start_time) AS start_time, MAX(end_time) AS end_time, ROUND(SUM(quota_in_hours),1) AS quota_in_hours, ROUND(SUM(quota_in_days),1) AS quota_in_days, ROUND(SUM(used_in_hours),1) AS used_in_hours, ROUND(SUM(used_in_days),1) AS used_in_days, ROUND(SUM(left_in_hours),1) AS left_in_hours, ROUND(SUM(left_in_days),1) AS left_in_days ");
         quotaNumQueryWrapper.groupBy("company_id, user_dingding_id");

+ 3 - 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);
@@ -86,4 +86,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg getReportListByToken(String token, String startDate, String endDate);
 
     HttpRespMsg fixIssue();
+
+    HttpRespMsg getWeeklyCardTime(String dateStr, HttpServletRequest request);
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -66,4 +66,6 @@ public interface UserService extends IService<User> {
     HttpRespMsg batchUpdateDept(String userIds, Integer deptId, HttpServletRequest request);
 
     HttpRespMsg batchUpdateRole(String userIds, Integer roleId, HttpServletRequest request);
+
+    HttpRespMsg getSimpleActiveUserList(HttpServletRequest request);
 }

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -259,7 +259,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<Integer> projectIds = projectList.stream().distinct().map(pl -> pl.getId()).collect(Collectors.toList());
             List<ProjectSeparate> projectSeparateList=new ArrayList<>();
             if(companyId==936){
-                projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
+                if (projectIds.size() > 0) {
+                    projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
+                }
             }
 
             List<ProjectVO> list = new ArrayList<>();

+ 141 - 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());
@@ -3861,6 +3855,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return new HttpRespMsg();
     }
 
+    @Override
+    public HttpRespMsg getWeeklyCardTime(String dateStr, HttpServletRequest request) {
+        String userId = request.getHeader("TOKEN");
+        User user = userMapper.selectById(userId);
+        int companyId = user.getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
+        HttpRespMsg msg = new HttpRespMsg();
+        List<String> dateList = JSONArray.parseArray(dateStr, String.class);
+        if (timeType.getShowDdCardtime() == 1) {
+            List<UserDingdingTime> dingdingTimes = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>()
+                    .eq("user_id", userId).in("work_date", dateList));
+            msg.data = dingdingTimes;
+        } else if (timeType.getShowCorpwxCardtime() == 1) {
+            List<UserCorpwxTime> corpwxTimes = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>()
+                    .eq("corpwx_userid", user.getCorpwxUserid()).in("create_date", dateList));
+            msg.data = corpwxTimes;
+        }
+        return msg;
+    }
+
     private void selfUpdateToNextWorkFlow(Integer companyId, User auditTargetUser, List<Integer> targetRids, List<Department> allDepts) {
         List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", companyId)

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1734,6 +1734,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getSimpleActiveUserList(HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, phone").eq("company_id", user.getCompanyId()).eq("is_active", 1));
+        msg.data = userList;
+        return msg;
+    }
+
 
     public boolean push(User user, String date) {
         //1,配置

+ 28 - 26
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -56,13 +56,13 @@
 
           <!-- 钉钉环境对接 -->
           <template v-if="isDingding">
-            <el-menu-item index="7" v-if="permissions.leaveAll">
+            <el-menu-item index="7">
                 <template slot="title">
                   <i class="iconfont firerock-iconbaoxiaodan"></i>
                   <span slot="title">请假单列表</span>
                 </template>
             </el-menu-item>
-            <el-menu-item index="8" v-if="permissions.leaveAll">
+            <el-menu-item index="8">
                 <template slot="title">
                   <i class="iconfont firerock-iconbaoxiaodan"></i>
                   <span slot="title">假期剩余表</span>
@@ -511,35 +511,37 @@
           <div class="flex">
             <div>
               <span>请假类型</span>
-              <el-select v-model="leaveTypeItem" placeholder="请选择请假类型" @change="leaveTypeChange()" style="width: 180px" size="small" v-show="permissions.leaveAll" filterable="true">
+              <el-select v-model="leaveTypeItem" placeholder="请选择请假类型" @change="leaveTypeChange()" style="width: 180px" size="small"  filterable="true">
                   <span v-for="item in leaveTypeList" :key="item.leaveCode">
                   <el-option :label="item.leaveName" :value="item.leaveCode"></el-option>
                   </span> 
               </el-select>
             </div>
-            <div>
-              <span>部门筛选</span>
-              <el-cascader
-              size="small"
-              @change="departmentOptionsChg"
-              v-model="departmentSel"
-              :options="departmentOptions"
-              placeholder="请选择部门"
-              :show-all-levels="false"
-              :props="{ checkStrictly: true }"
-              clearable></el-cascader>
-            </div>
-            <div>
-              <span>人员筛选</span>
-              <el-select v-model="userSelId" placeholder="请选择请假人" clearable @change="userChg()" 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> 
-              </el-select>
-            </div>
-            <div style="margin:0 10px 0 40px">
-              <el-button size="small" type="primary" @click="listSynchronize" :loading="synchronizeLoading">从钉钉同步</el-button>
-            </div>
+            <template v-if="permissions.leaveAll">
+              <div>
+                <span>部门筛选</span>
+                <el-cascader
+                size="small"
+                @change="departmentOptionsChg"
+                v-model="departmentSel"
+                :options="departmentOptions"
+                placeholder="请选择部门"
+                :show-all-levels="false"
+                :props="{ checkStrictly: true }"
+                clearable></el-cascader>
+              </div>
+              <div>
+                <span>人员筛选</span>
+                <el-select v-model="userSelId" placeholder="请选择请假人" clearable @change="userChg()" 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> 
+                </el-select>
+              </div>
+              <div style="margin:0 10px 0 40px">
+                <el-button size="small" type="primary" @click="listSynchronize" :loading="synchronizeLoading">从钉钉同步</el-button>
+              </div>
+            </template>
             
           </div>
             <el-table key="apk2is8" v-loading="loading" :data="vacationList" style="width: 100%" height="94%">

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

@@ -3187,12 +3187,16 @@
             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") {
+                        if(res.data.length == 0){
+                            // this.$message({
+                            //     message: '请联系管理员设置负责部门',
+                            //     type: 'error'
+                            // })
+                            return
+                        }
                         this.departmentList = JSON.parse(JSON.stringify(res.data))
                         var list = res.data , list1 = JSON.parse(JSON.stringify(res.data));
                         // let noAllData = JSON.parse(JSON.stringify(res.data));

+ 23 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -395,6 +395,9 @@
                     if(res.code == 'ok'){
                         if(res.data){
                             this.kaoqinText = res.data.startTime + '-' + res.data.endTime + ',' + res.data.workHours + '小时'
+                            if((this.user.timeType.showDdCardtime == 1 || this.user.timeType.showCorpwxCardtime == 1) && this.reportTimeType.type == 1){
+                                this.$set(this.currentForm,'cardtime',res.data.workHours)
+                            }
                         }else {
                             this.kaoqinText = false
                         }
@@ -1313,6 +1316,26 @@
             // 提交日报
             submitReport() {
                 this.form[this.inbtn] = this.currentForm
+                if((this.user.timeType.showDdCardtime == 1 || this.user.timeType.showCorpwxCardtime == 1) && this.reportTimeType.type == 1){
+                    let tips = ''
+                    for(let m in this.form){
+                        let allhours = 0
+                        for(let n in this.form[m].domains){
+                            if(this.form[m].domains[n].projectId){
+                                allhours += this.form[m].domains[n].workingTime
+                            }
+                        }
+                        if(this.form[m].cardtime && this.form[m].cardtime < allhours){
+                            tips += this.weekArr[m] + ','
+                        }
+                    }
+                    if(tips){
+                        tips = tips.substring(0,tips.length - 1)
+                        this.$toast('['+tips+']填报工时之和不能超过考勤总工时')
+                        return
+                    }
+                }
+
                 let formData = new URLSearchParams()
                 for(let formIndex=0;formIndex<this.form.length;formIndex++){
                     this.dateAr = []