Browse Source

修复时间为0做除数的问题
优化工时报告模块性能

seyason 1 year ago
parent
commit
ca2d63907a

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

@@ -681,7 +681,8 @@ public class ReportController {
                 //检查填报日期,是否早于限制的日期
                 boolean isForbidden = false;
                 boolean isLastMonthFail = false;
-                LocalDate fillDay = LocalDate.now().withDayOfMonth(compTimeType.getFillMonthOnDay());
+                //获取设置的当月几号作为填报的截止日期
+                LocalDate curMonthDeadline = LocalDate.now().withDayOfMonth(compTimeType.getFillMonthOnDay());
                 if (createDate.length > 0) {
                     String createDateOne = createDate[0];
                     //日期都是一样的,取第一个就行了
@@ -697,7 +698,7 @@ public class ReportController {
                             } else {
                                 if (localStartDate.getMonth().getValue() == lastMonth.getMonth().getValue()) {
                                     //补填到上个月的情况,要检查当前日期,是否在设置的日期之前
-                                    if (LocalDate.now().isAfter(fillDay)) {
+                                    if (LocalDate.now().isAfter(curMonthDeadline)) {
                                         isForbidden = true;
                                         isLastMonthFail = true;
                                     }
@@ -710,7 +711,7 @@ public class ReportController {
                             } else {
                                 if (LocalDate.parse(createDateOne, dateTimeFormatter).getMonth().getValue() == lastMonth.getMonth().getValue()) {
                                     //补填到上个月的情况,要检查当前日期,是否在设置的日期之前
-                                    if (LocalDate.now().isAfter(fillDay)) {
+                                    if (LocalDate.now().isAfter(curMonthDeadline)) {
                                         isForbidden = true;
                                         isLastMonthFail = true;
                                     }
@@ -760,7 +761,7 @@ public class ReportController {
                                 if (!isLastMonthFail) {
                                     msg.setError(MessageUtils.message("profession.repairError",dateTimeFormatter.format(targetDate)));
                                 } else {
-                                    msg.setError("不得晚于"+dateTimeFormatter.format(fillDay)+"后补填,请联系系统管理员代填。");
+                                    msg.setError("不得晚于"+dateTimeFormatter.format(curMonthDeadline)+"后补填,请联系系统管理员代填。");
                                 }
                                 return msg;
                             }

+ 20 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -11583,15 +11583,23 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             laborHourRateVo.setWorking_time(timeSum);
             laborHourRateVo.setDate_count(dayCount);
             laborHourRateVo.setCount(isActiveCount);
-            laborHourRateVo.setTotal_time((long) (8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
+            if (inActiveDays == 0) {
+                laborHourRateVo.setTotal_time(0L);
+                laborHourRateVo.setRate(0.0);
+                laborHourRateVos.add(laborHourRateVo);
+            } else {
+                laborHourRateVo.setTotal_time((long) (8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
+                BigDecimal bd = new BigDecimal(timeSum/(8*inActiveDays+isActiveCount*8*dayCount)*100);
+                bd = bd.setScale(2, RoundingMode.HALF_UP);
+                laborHourRateVo.setRate(bd.doubleValue());
+                laborHourRateVos.add(laborHourRateVo);
+            }
+
 //            System.out.println("============="+inActiveDays);
 //            System.out.println("============="+isActiveCount);
             laborHourRateVo.setDay_time(8);
 
-            BigDecimal bd = new BigDecimal(timeSum/(8*inActiveDays+isActiveCount*8*dayCount)*100);
-            bd = bd.setScale(2, RoundingMode.HALF_UP);
-            laborHourRateVo.setRate(bd.doubleValue());
-            laborHourRateVos.add(laborHourRateVo);
+
         }
 
         double totalWorkTime = laborHourRateVos.stream().mapToDouble(LaborHourRateVo::getWorking_time).sum();
@@ -11605,9 +11613,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         laborHourRateVo.setDay_time(8);
         laborHourRateVo.setDate_count(dayCount);
 
-        BigDecimal bd = new BigDecimal(totalWorkTime/sumTotalTime*100);
-        bd = bd.setScale(2, RoundingMode.HALF_UP);
-        laborHourRateVo.setRate(bd.doubleValue());
+        if (sumTotalTime > 0) {
+            BigDecimal bd = new BigDecimal(totalWorkTime/sumTotalTime*100);
+            bd = bd.setScale(2, RoundingMode.HALF_UP);
+            laborHourRateVo.setRate(bd.doubleValue());
+        } else {
+            laborHourRateVo.setRate(0.0);
+        }
 
         laborHourRateVos.add(laborHourRateVo);
 

+ 51 - 45
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2805,16 +2805,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         String token = request.getHeader("Token");
         User curUser = userMapper.selectById(token);
         Integer companyId = curUser.getCompanyId();
-        //获取当日已填写的人员报告
-        List<Map<String, Object>> reportNameByDate = reportMapper.getReportNameByDate(date, companyId, null);
 
-        HttpRespMsg departmentList = departmentService.getDepartmentList(request);
-        List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
-        List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
+        List<DepartmentVO> list = null;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看全公司工时");
 
         if (functionList.size() > 0) {
             //查看全部的
+            HttpRespMsg departmentList = departmentService.getDepartmentList(request);
+            list = (List<DepartmentVO>) departmentList.data;
             //加上未分配的部门
             DepartmentVO unAssignedDept = new DepartmentVO();
             unAssignedDept.setId(0);
@@ -2822,6 +2820,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             unAssignedDept.setLabel(MessageUtils.message("department.noDistribution"));
             list.add(unAssignedDept);
         } else {
+            List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
             //按权限查看
             boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
             //负责的部门:先查担任主要负责人的部门
@@ -2863,50 +2862,57 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
 
             list = realMDeptList;
+            System.out.println("负责部门的数量:"+list.size());
         }
 
-        //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
-        QueryWrapper<User> queryWrapper = new QueryWrapper<User>().eq("company_id", companyId);
-        queryWrapper.and(wrapper->wrapper.eq("is_active", 1).eq("report_status",0)
-                .or(wrapper2->wrapper2.eq("is_active", 0).gt("inactive_date", date)));
-        List<User> userList = userMapper.selectList(queryWrapper);
-        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", companyId));
-        LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        List<HashMap> userMapList = new ArrayList<>();
-        LocalDate curDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        for (User u : userList) {
-            //入职日期在当前日期之后的,不要显示
-            if (u.getInductionDate() != null && u.getInductionDate().isAfter(curDate)) {
-                continue;
+        if (list.size() > 0) {
+            //存在查看权限的部门
+            //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
+            QueryWrapper<User> queryWrapper = new QueryWrapper<User>().eq("company_id", companyId);
+            queryWrapper.and(wrapper->wrapper.eq("is_active", 1).eq("report_status",0)
+                    .or(wrapper2->wrapper2.eq("is_active", 0).gt("inactive_date", date)));
+            List<User> userList = userMapper.selectList(queryWrapper);
+            List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", companyId));
+            LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            List<HashMap> userMapList = new ArrayList<>();
+            LocalDate curDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+            //获取当日已填写的人员报告
+            List<Map<String, Object>> reportNameByDate = reportMapper.getReportNameByDate(date, companyId, null);
+            for (User u : userList) {
+                //入职日期在当前日期之后的,不要显示
+                if (u.getInductionDate() != null && u.getInductionDate().isAfter(curDate)) {
+                    continue;
+                }
+                HashMap<String, Object> user = new HashMap<String, Object>();
+                user.put("id", u.getId());
+                user.put("name", u.getName());
+                user.put("departmentId", u.getDepartmentId());
+                Optional<Map<String, Object>> first = reportNameByDate.stream().filter(r -> r.get("id").equals(u.getId())).findFirst();
+                //获取角色请假情况 存在同条件下多条请假记录
+                List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(u.getId()) &&
+                        ((localDate.isAfter(ls.getStartDate()) || localDate.isEqual(ls.getStartDate())) && (localDate.isBefore(ls.getEndDate()) || localDate.isEqual(ls.getEndDate())))).collect(Collectors.toList());
+                if(leaveSheets.size()>0){
+                    Integer leaveType=leaveSheets.get(0).getLeaveType();
+                    BigDecimal leaveDays=new BigDecimal(0);
+                    BigDecimal leaveTimes=new BigDecimal(0);
+                    for (LeaveSheet leaveSheet : leaveSheets) {
+                        leaveDays=leaveDays.add(new BigDecimal(leaveSheet.getTimeDays()));
+                        leaveTimes=leaveTimes.add(new BigDecimal(leaveSheet.getTimeHours()));
+                    }
+                    user.put("leaveType",leaveType);
+                    if(leaveSheets.stream().anyMatch(ls->ls.getTimeType()==0)){
+                        user.put("leaveDays",leaveDays);
+                    }else user.put("leaveTimes",leaveTimes);
+                }
+                if (first.isPresent()) {
+                    user.put("state", first.get().get("state"));
+                    user.put("workingTime", first.get().get("workingTime"));
+                }
+                userMapList.add(user);
             }
-            HashMap<String, Object> user = new HashMap<String, Object>();
-            user.put("id", u.getId());
-            user.put("name", u.getName());
-            user.put("departmentId", u.getDepartmentId());
-            Optional<Map<String, Object>> first = reportNameByDate.stream().filter(r -> r.get("id").equals(u.getId())).findFirst();
-            //获取角色请假情况 存在同条件下多条请假记录
-            List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(u.getId()) &&
-                    ((localDate.isAfter(ls.getStartDate()) || localDate.isEqual(ls.getStartDate())) && (localDate.isBefore(ls.getEndDate()) || localDate.isEqual(ls.getEndDate())))).collect(Collectors.toList());
-            if(leaveSheets.size()>0){
-                Integer leaveType=leaveSheets.get(0).getLeaveType();
-                BigDecimal leaveDays=new BigDecimal(0);
-                BigDecimal leaveTimes=new BigDecimal(0);
-                for (LeaveSheet leaveSheet : leaveSheets) {
-                    leaveDays=leaveDays.add(new BigDecimal(leaveSheet.getTimeDays()));
-                    leaveTimes=leaveTimes.add(new BigDecimal(leaveSheet.getTimeHours()));
-                }
-                user.put("leaveType",leaveType);
-                if(leaveSheets.stream().anyMatch(ls->ls.getTimeType()==0)){
-                    user.put("leaveDays",leaveDays);
-                }else user.put("leaveTimes",leaveTimes);
-            }
-            if (first.isPresent()) {
-                user.put("state", first.get().get("state"));
-                user.put("workingTime", first.get().get("workingTime"));
-            }
-            userMapList.add(user);
+            fillDeptUser(list, userMapList);
         }
-        fillDeptUser(list, userMapList);
 
         HttpRespMsg msg = new HttpRespMsg();
         msg.data = list;