Browse Source

任务工时填报及时率表

QuYueTing 1 month ago
parent
commit
c34ee72842

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

@@ -303,7 +303,7 @@ public class ProjectController {
         String token = request.getHeader("token");
         User user = userMapper.selectById(token);
         //苏州正北定制工时表
-        if (user.getCompanyId() == 8138 || user.getCompanyId() == 7) {
+        if (user.getCompanyId() == 8138 || user.getCompanyId() == 7703 || user.getCompanyId() == 7) {
             return projectService.exportZhengBeiTimeReport(date, request);
         }
         return projectService.exportTimeByProjectAndEmployee(date, request);

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

@@ -2014,7 +2014,7 @@ public class ReportController {
         }
         if (comTimeType.getFillOvertime() == 0) {
             //不允许填报加班
-            reportList.forEach(r->r.setIsOvertime(0));
+            reportList.forEach(r->r.setIsOvertime(0).setOvertimeHours(0.0));
         }
         HttpRespMsg httpRespMsg = reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId(), summary, weeklyAttachment);
         //填报自动通过功能:【上海绎维】、【火石演示】、【博通容合】、【威派格】使用;以及设置了自动审核通过的公司

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

@@ -10149,7 +10149,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new LambdaQueryWrapper<LeaveSheet>()
                 .eq(LeaveSheet::getCompanyId, targetUser.getCompanyId()).le(LeaveSheet::getStartDate,endDate).ge(LeaveSheet::getEndDate,startDate));
         List<TimelinessRateVO> resultList=new ArrayList<>();
-        //针对美莱德 去除2024-02-09
         //针对人员已经特殊节假日设置去除相对应的日期
         List<HolidaySetting> allUsersSetting = holidaySettingList.stream().filter(h -> h.getRangeType() == 0).collect(Collectors.toList());
         List<HolidaySetting> targetUserOrDeptSetting = holidaySettingList.stream().filter(h -> h.getRangeType() == 1).collect(Collectors.toList());

+ 22 - 40
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -10971,8 +10971,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Integer> taskIds = reportRateTaskVOList.stream().distinct().map(r -> r.getTaskId()).collect(Collectors.toList());
         System.out.println(taskIds.toString());
         taskIds.add(-1);
-        List<Map<String,Object>> reportList=reportMapper.getUserReportTimelinessRateWithTask(companyId,taskIds);
-        Map<Object, List<Map<String, Object>>> listMap = reportList.stream().filter(item->!StringUtils.isEmpty(item.get("userName"))).collect(Collectors.groupingBy(rp -> rp.get("userName")));
+        List<Map<String,Object>> reportList = reportMapper.getUserReportTimelinessRateWithTask(companyId,taskIds);
+//        Map<Object, List<Map<String, Object>>> listMap = reportList.stream().filter(item->!StringUtils.isEmpty(item.get("taskId"))).collect(Collectors.groupingBy(rp -> rp.get("userName")));
         //获取到公司设置的特殊节假日设置
         List<HolidaySetting> holidaySettingList = holidaySettingService.list(new LambdaQueryWrapper<HolidaySetting>().eq(HolidaySetting::getCompanyId, companyId).isNotNull(HolidaySetting::getHolidayDate));
         List<HolidaySetting> allUsersSetting = holidaySettingList.stream().filter(h -> h.getRangeType() == 0).collect(Collectors.toList());
@@ -10991,21 +10991,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     rateTaskVO.setDepartmentName(dept.getDepartmentName());
                 }
 
-                List<Map<String, Object>> mapList = listMap.get(user.getName());
+                List<Map<String, Object>> curTaskUserReportList = reportList.stream().filter(r->r.get("taskId")!=null
+                        &&Integer.parseInt(r.get("taskId").toString()) == rateTaskVO.getTaskId() && r.get("userId")!=null
+                        &&r.get("userId").equals(rateTaskVO.getUserId())).collect(Collectors.toList());
                 LocalDate startDate = rateTaskVO.getStartDate();
-                LocalDate endDate = rateTaskVO.getEndDate();
+                int lines = timeType.getTimeliness();//0-当天,1-次日,2-第二天
+                LocalDate maxEndDate = LocalDate.now().minusDays(lines + 1);//最大只检测到当前日期的前几天
+                LocalDate endDate = rateTaskVO.getEndDate() == null ? maxEndDate :(rateTaskVO.getEndDate().isAfter(maxEndDate)?maxEndDate:rateTaskVO.getEndDate());
                 AtomicReference<List<LocalDate>> listAtomicReference = new AtomicReference<>(getDays(startDate, endDate));
                 long days = listAtomicReference.get().size();
                 for (LocalDate localDateTime : listAtomicReference.get()) {
-                    if(mapList!=null){
-                        //在非工作日下 填报了的情况下 及时填报了就算作及时率计算的基数
-                        if(localDateTime!=null&& !WorkDayCalculateUtils.isWorkDay(localDateTime)&&!mapList.stream().anyMatch(ml->{
-                            Integer taskId=ml.get("taskId")!=null?Integer.parseInt(ml.get("taskId").toString()):null;
-                            if (taskId == null || !taskId.equals(rateTaskVO.getTaskId())) {
-                                return false;
-                            }
-                            Date date = (Date) ml.get("createDate");
-                            LocalDate createDate = date != null ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null;
+                    if(curTaskUserReportList!=null && curTaskUserReportList.size() > 0){
+                        //在非工作日下,并且没有填写日报,就不算填报基数。 如果非工作日填了,是要算成基数的
+                        if(!WorkDayCalculateUtils.isWorkDay(localDateTime)&&!curTaskUserReportList.stream().anyMatch(ml->{
+                            java.sql.Date date = (java.sql.Date) ml.get("createDate");
+                            LocalDate createDate = date.toLocalDate();
                             return createDate.isEqual(localDateTime);
                         })){
                             days-=1;
@@ -11074,13 +11074,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 days++;
                                 continue;
                             }
-                            if(mapList!=null&&mapList.stream().anyMatch(ml->{
-                                Integer taskId=ml.get("taskId")!=null?Integer.parseInt(ml.get("taskId").toString()):null;
-                                if (taskId == null || !taskId.equals(rateTaskVO.getTaskId())) {
-                                    return false;
-                                }
-                                Date date = (Date) ml.get("createDate");
-                                LocalDate createDate = date != null ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null;
+                            if(curTaskUserReportList!=null&&curTaskUserReportList.stream().anyMatch(ml->{
+                                java.sql.Date date = (java.sql.Date) ml.get("createDate");
+                                LocalDate createDate = date.toLocalDate();
                                 return createDate.isEqual(localDateTime.toLocalDate());
                             })){
                                 days++;
@@ -11090,22 +11086,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
 
                 int num=0;
-                if(mapList!=null){
-                    for (Map<String, Object> map : mapList) {
+                if(curTaskUserReportList!=null){
+                    for (Map<String, Object> map : curTaskUserReportList) {
                         if (map.get("createDate")!=null && map.get("createTime")!=null) {
                             Map<String, Object> objectMap = new HashMap<>();
-                            Date date = (Date) map.get("createDate");
+                            java.sql.Date date = (java.sql.Date) map.get("createDate");
                             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                             //去掉sql返回的毫秒值
-                            java.sql.Date createTime = (java.sql.Date) map.get("createTime");
-                            LocalDate createDate = date != null ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null;
-                            // 针对美莱德 去除2024-02-09
-                            if (user.getCompanyId() == 876) {
-                                if (createDate.isEqual(LocalDate.parse("2024-02-09"))) {
-                                    continue;
-                                }
-                            }
-                            LocalDate createTimeDate = createTime.toLocalDate();
+                            java.sql.Timestamp createTime = (java.sql.Timestamp) map.get("createTime");
+                            LocalDate createDate = date.toLocalDate();
+                            LocalDate createTimeDate = createTime.toLocalDateTime().toLocalDate();
                             //根据设置
                             switch (timeliness) {
                                 case 1:
@@ -11133,14 +11123,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         }
 
                     }
-                    //处理漏填的情况,漏填的也算不及时
-                    boolean hasMissReport = false;
-                    for (LocalDate localDateTime : listAtomicReference.get()) {
-                        if(localDateTime!=null&&!WorkDayCalculateUtils.isWorkDay(localDateTime)){
-                            continue;
-                        }
-                        hasMissReport = true;
-                    }
                     BigDecimal bigDecimal=new BigDecimal(num);
                     BigDecimal bigDecimalWithLeave=new BigDecimal(num+(daysWithLeave-days));
                     BigDecimal divide;

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -1114,7 +1114,8 @@
 
 
     <select id="getUserReportTimelinessRateWithTask" resultType="java.util.Map">
-        select `user`.name as userName,t.id taskId, `user`.corpwx_userid as corpwxUserId,`user`.corpwx_deptid as corpwxDeptId,rl.operate_date as createDate,MIN(rl.work_date )as createTime
+        select `user`.id as userId, `user`.name as userName,t.id taskId, `user`.corpwx_userid as corpwxUserId,`user`.corpwx_deptid as corpwxDeptId,
+               rl.work_date as createDate,MIN(rl.operate_date )as createTime
         from report_log_detail rl
         left join `user` on `user`.id=rl.operator_id
         left join report r on r.id =rl.report_id
@@ -1127,7 +1128,7 @@
                 #{item}
             </foreach>
         </if>
-        group by t.id
+        group by t.id,user.id,rl.work_date
     </select>
 
     <select id="getDefaultDegree" resultType="java.util.Map">