QuYueTing vor 1 Monat
Ursprung
Commit
583e010920

+ 19 - 2
fhKeeper/formulahousekeeper/collectdata/src/main/java/com/management/collectdata/controller/DataCollectController.java

@@ -425,7 +425,9 @@ public class DataCollectController {
         return localTime.format(df);
     }
 
-    private float calculateWorkHoursFromTime(UserFvTime userFvTime) {
+
+    public static float calculateWorkHoursFromTime(UserFvTime userFvTime) {
+        String baseMorningStart = "06:00";
         String baseMorningEnd = "12:00";
         String baseAfternoonStart = "13:00";
         double restTime = 1.0;
@@ -433,12 +435,27 @@ public class DataCollectController {
         DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm");
         LocalTime startCardTime = LocalTime.parse(userFvTime.getStartTime(),df);
         LocalTime endCardTime = LocalTime.parse(userFvTime.getEndTime(),df);
+        if (userFvTime.getEndTime().compareTo(baseMorningStart) < 0) {
+            //算夜班加班
+            endCardTime.plusHours(24);
+        }
+
 //        System.out.println(", startTime="+startCardTime.format(df)
 //                +"endTime="+endCardTime.format(df));
         BigDecimal bigDecimal = new BigDecimal(Duration.between(startCardTime,endCardTime).toMinutes());
 //        System.out.println("打卡时长(分钟):" + bigDecimal);
+        if (endCardTime.compareTo(LocalTime.parse(baseMorningStart,df)) < 0) {
+            bigDecimal = bigDecimal.add(BigDecimal.valueOf(24*60));
+//            System.out.println("矫正后打卡时长(分钟):" + bigDecimal);
+            bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP);
+            if (startCardTime.compareTo(LocalTime.parse(baseMorningEnd,df)) <= 0) {
+                //重新计算打卡工时时,需要减去中间午休时间
+                bigDecimal = bigDecimal.subtract(new BigDecimal(restTime));
+            }
+            System.out.println("矫正后打卡时长(小时):" + bigDecimal);
+        }
         //开始时间在上午,结束时间在下午,要减去午休时长
-        if (startCardTime.compareTo(LocalTime.parse(baseMorningEnd,df)) <= 0 && endCardTime.compareTo(LocalTime.parse(baseAfternoonStart,df)) >= 0) {
+        else if (startCardTime.compareTo(LocalTime.parse(baseMorningEnd,df)) <= 0 && endCardTime.compareTo(LocalTime.parse(baseAfternoonStart,df)) >= 0) {
             //重新计算打卡工时时,需要减去中间午休时间
             bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(restTime));
 //            System.out.println("午休时间:"+restTime+", 减去后,工作时长="+bigDecimal);

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

@@ -2147,8 +2147,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     //项目经理换人,对应任务计划的第一审核人得换
                     String inchargerId_old = oldProject.getInchargerId();
                     if (!inchargerId.equals(inchargerId_old)){
-                        taskService.update(null,new UpdateWrapper<Task>().eq("project_id",oldProject.getId())
-                                .eq("task_plan",1).set("check_first_id",inchargerId));
+                        taskExecutorService.update(null, new UpdateWrapper<TaskExecutor>().eq("project_id", oldProject.getId()).set("first_auditor_id", inchargerId));
                     }
                     if (customerId == null) {
                         //去掉客户

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

@@ -11130,7 +11130,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if(days!=0){
                         divide = bigDecimal.divide(BigDecimal.valueOf(days), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(days==0){
-                        divide=new BigDecimal(1);
+                        divide=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (days==0&&num!=0&&leaveSheetList.size()>0){
                         divide=new BigDecimal(1);
@@ -11144,7 +11144,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if(daysWithLeave!=0){
                         divideWithLeave = bigDecimalWithLeave.divide(BigDecimal.valueOf(daysWithLeave), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(daysWithLeave==0){
-                        divideWithLeave=new BigDecimal(1);
+                        divideWithLeave=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (daysWithLeave==0&&num!=0&&leaveSheetList.size()>0){
                         divideWithLeave=new BigDecimal(1);
@@ -11269,7 +11269,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         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")));
+//        Map<Object, List<Map<String, Object>>> listMap = reportList.stream().filter(item->!StringUtils.isEmpty(item.get("userName"))).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());
@@ -11288,21 +11288,22 @@ 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(curTaskUserReportList!=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(localDateTime != null && !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;
@@ -11371,13 +11372,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++;
@@ -11387,22 +11384,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:
@@ -11430,14 +11421,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;
@@ -11445,7 +11428,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if(days!=0){
                         divide = bigDecimal.divide(BigDecimal.valueOf(days), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(days==0){
-                        divide=new BigDecimal(1);
+                        divide=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (days==0&&num!=0&&leaveSheetList.size()>0){
                         divide=new BigDecimal(1);
@@ -11459,7 +11442,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if(daysWithLeave!=0){
                         divideWithLeave = bigDecimalWithLeave.divide(BigDecimal.valueOf(daysWithLeave), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(daysWithLeave==0){
-                        divideWithLeave=new BigDecimal(1);
+                        divideWithLeave=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (daysWithLeave==0&&num!=0&&leaveSheetList.size()>0){
                         divideWithLeave=new BigDecimal(1);
@@ -11483,7 +11466,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         System.out.println("及时日=="+num+","+days);
                         divide = bigDecimal.divide(BigDecimal.valueOf(days), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(days==0){
-                        divide=new BigDecimal(1);
+                        divide=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (days==0&&num!=0&&leaveSheetList.size()>0){
                         divide=new BigDecimal(1);
@@ -11499,7 +11482,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if(daysWithLeave!=0){
                         divideWithLeave = bigDecimalWithLeave.divide(BigDecimal.valueOf(daysWithLeave), 2, BigDecimal.ROUND_HALF_UP);
                     }else if(daysWithLeave==0){
-                        divideWithLeave=new BigDecimal(1);
+                        divideWithLeave=new BigDecimal(0);
                         //查看当天有请假直接算100%
                     }else if (daysWithLeave==0&&num!=0&&leaveSheetList.size()>0){
                         divideWithLeave=new BigDecimal(1);

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ExcelUtil.java

@@ -1487,9 +1487,9 @@ public class ExcelUtil {
         String result="系统提示:Excel文件导出成功!";
         String fileName="";
         if (type==0){
-            fileName= "任务工时填报及时表_任务"+".xlsx";
+            fileName= "任务工时填报及时表_任务"+System.currentTimeMillis()+".xlsx";
         }else {
-            fileName= "任务工时填报及时表_人员"+".xlsx";
+            fileName= "任务工时填报及时表_人员"+System.currentTimeMillis()+".xlsx";
         }
 
         try {