Sfoglia il codice sorgente

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

# Conflicts:
#	fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
Min 1 anno fa
parent
commit
a19abf2d0a

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

@@ -1760,56 +1760,7 @@ public class ReportController {
 
     @GetMapping("/fixIssue")
     public HttpRespMsg fixIssue(Integer companyId){
-        HttpRespMsg msg = new HttpRespMsg();
-        List<Map<String, Object>> mapList = reportMapper.getErrorData(companyId);
-        List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-        System.out.println("mapList.size()=="+mapList.size());
-        Report report = new Report();
-        report.setState(0);
-        report.setProjectAuditState(1);
-        List<Integer> ids = new ArrayList<>();
-        mapList.forEach(map->{
-            Integer id = (Integer)map.get("id");
-            ids.add(id);
-        });
-        if (ids.size() > 0) {
-            reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
-        }
-        //按照某日当天的日报是否都是项目审核通过,需要进入下一个节点
-        int totalUpdateCnt = 0;
-        for (Map<String, Object> map : mapList) {
-            String creatorId = (String) map.get("creator_id");
-            String createDate = (String) map.get("create_date");
-            List<Report> sameDayReports = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", createDate)
-                    .eq("creator_id", creatorId));
-            long pendingCount = sameDayReports.stream().filter(same -> same.getProjectAuditState() == 0).count();
-            if (pendingCount == 0) {
-                Report upR = new Report();
-                User auditTargetUser = userService.getById(creatorId);
-                List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
-                        new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
-                                .orderByAsc("seq"));
-                for (int m = 0; m < settings.size(); m++) {
-                    if (settings.get(m).getIsDeptAudit() == 0) {//找到项目审核的那个节点
-                        AuditWorkflowTimeSetting nextNode = settings.get(m + 1);
-                        upR.setIsDeptAudit(nextNode.getIsDeptAudit());
-                        if (upR.getIsDeptAudit() == 1) {
-                            upR.setAuditDeptid(nextNode.getAuditDeptId());
-                            upR.setAuditDeptManagerid(allDepts.stream()
-                                    .filter(ad -> ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId());
-                        }
-                        upR.setIsFinalAudit(nextNode.getIsFinal());
-                        break;
-                    }
-                }
-                List<Integer> collect = sameDayReports.stream().map(Report::getId).collect(Collectors.toList());
-                int cnt = reportMapper.update(upR, new QueryWrapper<Report>().in("id", collect));
-                System.out.println("更新了:" + cnt);
-                totalUpdateCnt += cnt;
-            }
-        }
-        System.out.println("总共更新了:"+totalUpdateCnt);
-        return msg;
+        return reportService.fixIssue(companyId);
     }
 
     /**

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -439,6 +439,19 @@ public class UserCorpwxTimeController {
             if (changedCorpwxTimes.size() > 0) {
                 UserCorpwxTime time = changedCorpwxTimes.get(0);
                 resultMap.put("time", time);
+
+                //如果考勤时间为0,获取当日打卡记录
+                if (time.getWorkHours() == 0) {
+                    LocalDateTime start1 = LocalDateTime.of(localDate, LocalTime.MIN);
+                    LocalDateTime end1 = LocalDateTime.of(localDate, LocalTime.MAX).withSecond(0).withNano(0);
+                    wxCorpInfoService.getUserPunchRecord(user.getCompanyId(),user.getId(),start1,end1,false);
+                    List<UserCorpwxTime> changedCorpwxTimes1 = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>()
+                            .eq("corpwx_userid", user.getCorpwxUserid()).eq("create_date", date));
+                    if (changedCorpwxTimes1.size() > 0) {
+                        UserCorpwxTime time1 = changedCorpwxTimes1.get(0);
+                        resultMap.put("time", time1);
+                    }
+                }
             }
             msg.data=resultMap;
         } else {

+ 12 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java

@@ -63,7 +63,7 @@ public class UserFvTimeController {
     private DecimalFormat df = new DecimalFormat("#0.0");
 
     @RequestMapping("/get")
-    public HttpRespMsg get(){
+    public HttpRespMsg get(String startDate,String endDate, HttpServletRequest request){
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_fanwei", 1));
         List<Integer> compIds = timeTypeList.stream().map(TimeType::getCompanyId).collect(Collectors.toList());
@@ -71,16 +71,20 @@ public class UserFvTimeController {
             httpRespMsg.setError("验证失败");
             return httpRespMsg;
         }
+        //需要修改************************************************  日期
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm");
+        LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
+        if (startDate == null) {
+            startDate = dtf.format(yesterday);
+        }
+        if (endDate == null) {
+            endDate = dtf.format(yesterday.plusDays(30));
+        }
         for (Integer compId : compIds) {
             DockWithMLD dockWithMLD=new DockWithMLD();
             JSONObject jsonObject=new JSONObject();
-            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm");
-            //需要修改************************************************  日期
-            LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
-            String startDate = dtf.format(yesterday);
-            String endDate = dtf.format(yesterday.plusDays(30));
             List<UserFvTime> oldUserFvTimeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().eq("company_id", compId));
             List<LeaveSheet> oldLeaveSheetList = leaveSheetService.list(new QueryWrapper<LeaveSheet>().eq("company_id", compId));
             List<BusinessTrip> oldBusinessTripList = businessTripService.list(new QueryWrapper<BusinessTrip>().eq("company_id", compId));

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

@@ -87,7 +87,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg getReportListByToken(String json);
 
-    HttpRespMsg fixIssue();
+    HttpRespMsg fixIssue(Integer companyId);
 
     HttpRespMsg getWeeklyCardTime(String dateStr, HttpServletRequest request);
 

+ 6 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -34,10 +34,7 @@ import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneOffset;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -1884,12 +1881,13 @@ public class DingDingServiceImpl implements DingDingService {
                     }
                     if (onDutyEarleast != null && offDutyLatest != null) {
                         //下班打卡时间在第二天的情况下设置为前一天的23:59
-                        if(offDutyLatest.getSecond()<onDutyEarleast.getSecond()){
+                        if(offDutyLatest.isBefore(onDutyEarleast)){
                             LocalDateTime localDateTime = check.atTime(LocalTime.MAX);
-                            onDutyEarleast=localDateTime;
+                            onDutyEarleast = localDateTime;
                         }
-                        long seconds = (offDutyLatest.getSecond()- onDutyEarleast.getSecond());
-                        float hours = (offDutyLatest.getHour() - onDutyEarleast.getHour()) + seconds*1.0f/3600;
+                        //计算上下班间隔时长
+                        long deltaTimeSec = Duration.between(onDutyEarleast, offDutyLatest).getSeconds();
+                        float hours = deltaTimeSec*1.0f/3600;
                         cardTime.setWorkHours(hours);
                         //对比,看看之前是否已经存了
                         List<UserDingdingTime> old = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>().eq("user_id", user.getId())

+ 134 - 100
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -892,29 +892,45 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     List<Integer> collect = reportList.stream().map(Report::getId).collect(Collectors.toList());
                     reportMapper.update(new Report().setBatchId(batch.getId()), new QueryWrapper<Report>().in("id", collect));
                 } else {
-                    //每日或按周填报,为每天生成一条记录
-                    List<LocalDate> dateList = reportList.stream().map(Report::getCreateDate).collect(Collectors.toList());
-                    List<Report> updateBIdList = new ArrayList<>();
-                    for (Report r : reportList) {
-                        LocalDate curDate = r.getCreateDate();
+                    //每日或按周填报,为每天生成一条记录; 每日或者按周填报时,填报人就是操作人自己,不存在代填的情况
+                    List<LocalDate> dateList = reportList.stream().map(Report::getCreateDate).distinct().collect(Collectors.toList());
+                    String creatorId = reportList.get(0).getCreatorId();
+                    for (LocalDate curDate : dateList) {
                         //删除已有的记录
-                        reportBatchMapper.delete(new QueryWrapper<ReportBatch>().eq("start_date", curDate).eq("end_date", curDate).eq("creator_id", r.getCreatorId()));
-
+                        reportBatchMapper.delete(new QueryWrapper<ReportBatch>().eq("start_date", curDate).eq("end_date", curDate).eq("creator_id", creatorId));
                         ReportBatch batch = new ReportBatch();
-                        batch.setCreatorId(reportList.get(0).getCreatorId());
+                        batch.setCreatorId(creatorId);
                         batch.setState(0);
                         batch.setCompanyId(companyId);
                         batch.setStartDate(curDate);
                         batch.setEndDate(curDate);
-                        batch.setTotalWorkTime(reportList.stream().filter(item->item.getCreateDate().equals(curDate) && item.getCreatorId().equals(r.getCreatorId())).mapToDouble(Report::getWorkingTime).sum());
+                        batch.setTotalWorkTime(reportList.stream().filter(item->item.getCreateDate().equals(curDate) && item.getCreatorId().equals(creatorId)).mapToDouble(Report::getWorkingTime).sum());
                         reportBatchMapper.insert(batch);
+
                         //更新batchId
-                        Report uItem = new Report();
-                        uItem.setId(r.getId());
-                        uItem.setBatchId(batch.getId());
-                        updateBIdList.add(uItem);
+                        List<Integer> curDateReportIds = reportList.stream().filter(item -> item.getCreateDate().equals(curDate) && item.getCreatorId().equals(creatorId)).map(Report::getId).collect(Collectors.toList());
+                        reportMapper.update(new Report().setBatchId(batch.getId()), new QueryWrapper<Report>().in("id", curDateReportIds));
                     }
-                    reportService.updateBatchById(updateBIdList);
+//                    for (Report r : reportList) {
+//                        LocalDate curDate = r.getCreateDate();
+//                        //删除已有的记录; //TODO: 一天多个项目会导致删除其他项目的记录, 需要修复
+//                        reportBatchMapper.delete(new QueryWrapper<ReportBatch>().eq("start_date", curDate).eq("end_date", curDate).eq("creator_id", r.getCreatorId()));
+//
+//                        ReportBatch batch = new ReportBatch();
+//                        batch.setCreatorId(reportList.get(0).getCreatorId());
+//                        batch.setState(0);
+//                        batch.setCompanyId(companyId);
+//                        batch.setStartDate(curDate);
+//                        batch.setEndDate(curDate);
+//                        batch.setTotalWorkTime(reportList.stream().filter(item->item.getCreateDate().equals(curDate) && item.getCreatorId().equals(r.getCreatorId())).mapToDouble(Report::getWorkingTime).sum());
+//                        reportBatchMapper.insert(batch);
+//                        //更新batchId
+//                        Report uItem = new Report();
+//                        uItem.setId(r.getId());
+//                        uItem.setBatchId(batch.getId());
+//                        updateBIdList.add(uItem);
+//                    }
+//                    reportService.updateBatchById(updateBIdList);
                 }
             }
         } else {
@@ -5381,97 +5397,115 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg fixIssue() {
-        //处理被误操作为自动审核的数据,
-        List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(new QueryWrapper<AuditWorkflowTimeSetting>().select("distinct company_id"));
-        System.out.println("有审批流的公司size="+settings.size());
-
-        List<Report> reportList = reportMapper.selectList(
-                new QueryWrapper<Report>().select("company_id, id, state, project_auditor_id, creator_id, create_date")
-            .eq("report_auto_approve", 1));
-        reportList = reportList.stream().filter(r->r.getCompanyId() != 767).collect(Collectors.toList());
-        System.out.println("查询到数据=="+reportList.size());
-        int dealCnt = 0;
-        List<Report> auditWorkflowReportList = new ArrayList<>();
-        List<Report> noWorkflowReportList = new ArrayList<>();
-        for (Report report : reportList) {
-            if (!settings.stream().anyMatch(s->s.getCompanyId().equals(report.getCompanyId()))) {
-                //无审批流的公司,直接通过
-                Report r = new Report();
-                r.setId(report.getId());
-                r.setReportAutoApprove(0);
-                r.setProjectAuditState(0);
-                r.setState(0);
-                noWorkflowReportList.add(r);
-                dealCnt++;
-            } else {
-                auditWorkflowReportList.add(report);
-            }
-        }
-        if (noWorkflowReportList.size() > 0) {
-            updateBatchById(noWorkflowReportList);
-        }
-
-        System.out.println("已处理无审批流的日报size="+dealCnt);
-        System.out.println("有审批流的日报size="+auditWorkflowReportList.size());
-        //检查哪些是项目没审核的
-        int projectAuditManulPassCnt = 0;
-        int blurFind = 0;
+    public HttpRespMsg fixIssue(Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<ReportBatch> reportBatchList = reportBatchMapper.selectList(new QueryWrapper<ReportBatch>().eq("company_id", companyId));
+        List<Integer> batchIds = reportBatchList.stream().map(ReportBatch::getId).collect(Collectors.toList());
+        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId).notIn("batch_id", batchIds));
         List<Report> updateList = new ArrayList<>();
-        for (Report report : auditWorkflowReportList) {
-            int count = reportLogMapper.selectCount(new QueryWrapper<ReportLog>()
-                    //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
-                    .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
-                    .eq("report_ids", report.getId()));
-            boolean findLog = false;
-
-            if (count == 0) {
-                //模糊匹配一下
-                List<ReportLog> reportLogs = reportLogMapper.selectList(new QueryWrapper<ReportLog>().select("id, report_ids")
-                        //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
-                        .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
-                        .eq("company_id", report.getCompanyId())
-                        .eq("creator_id", report.getCreatorId())
-                        .eq("create_date", report.getCreateDate()));
-                if (reportLogs.size() > 0) {
-                    //找到匹配的记录
-                    System.out.println("开始匹配模糊===reportLog Size=="+reportLogs.size());
-                    for (ReportLog log : reportLogs) {
-                        String[] arr = log.getReportIds().split(",");
-                        for (String s : arr) {
-                            System.out.println("比对=logId="+log.getId()+", "+s+" , "+report.getId());
-                            if (s.equals(report.getId().toString())) {
-                                findLog = true;
-                                blurFind++;
-                                System.out.println("模糊匹配到了====="+blurFind);
-                                break;
-                            }
-                        }
-                    }
-                }
-            } else {
-                findLog = true;
-            }
-            Report r = new Report();
-            r.setId(report.getId());
-            r.setReportAutoApprove(0);
-            r.setState(0);
-            if (findLog) {
-                projectAuditManulPassCnt++;
-                //已经是手动审核通过的,不需要撤回projectAuditState了
-            } else {
-                //没有项目审核通过的,需要撤回为0状态
-                r.setProjectAuditState(0);
-            }
-            updateList.add(r);
+        for(Report r : reportList) {
+            Report targetReport = reportMapper.selectOne(new QueryWrapper<Report>().select("id, batch_id").eq("company_id", companyId).eq("creator_id", r.getCreatorId()).eq("create_date", r.getCreateDate()).orderByDesc("batch_id").last("limit 1"));
+            Report upItem = new Report();
+            upItem.setId(r.getId());
+            upItem.setBatchId(targetReport.getBatchId());
+            updateList.add(upItem);
         }
-
-        System.out.println("手动审核过的日报size="+projectAuditManulPassCnt+", 其中模糊匹配到的size=" +blurFind);
         if (updateList.size() > 0) {
             updateBatchById(updateList);
         }
-        System.out.println("===无审批流的日报size="+noWorkflowReportList.size()+", 有审批流的日报size="+updateList.size());
-        return new HttpRespMsg();
+        msg.setData("共更新"+updateList.size()+"条数据");
+        return msg;
+
+//        //处理被误操作为自动审核的数据,
+//        List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(new QueryWrapper<AuditWorkflowTimeSetting>().select("distinct company_id"));
+//        System.out.println("有审批流的公司size="+settings.size());
+//
+//        List<Report> reportList = reportMapper.selectList(
+//                new QueryWrapper<Report>().select("company_id, id, state, project_auditor_id, creator_id, create_date")
+//            .eq("report_auto_approve", 1));
+//        reportList = reportList.stream().filter(r->r.getCompanyId() != 767).collect(Collectors.toList());
+//        System.out.println("查询到数据=="+reportList.size());
+//        int dealCnt = 0;
+//        List<Report> auditWorkflowReportList = new ArrayList<>();
+//        List<Report> noWorkflowReportList = new ArrayList<>();
+//        for (Report report : reportList) {
+//            if (!settings.stream().anyMatch(s->s.getCompanyId().equals(report.getCompanyId()))) {
+//                //无审批流的公司,直接通过
+//                Report r = new Report();
+//                r.setId(report.getId());
+//                r.setReportAutoApprove(0);
+//                r.setProjectAuditState(0);
+//                r.setState(0);
+//                noWorkflowReportList.add(r);
+//                dealCnt++;
+//            } else {
+//                auditWorkflowReportList.add(report);
+//            }
+//        }
+//        if (noWorkflowReportList.size() > 0) {
+//            updateBatchById(noWorkflowReportList);
+//        }
+//
+//        System.out.println("已处理无审批流的日报size="+dealCnt);
+//        System.out.println("有审批流的日报size="+auditWorkflowReportList.size());
+//        //检查哪些是项目没审核的
+//        int projectAuditManulPassCnt = 0;
+//        int blurFind = 0;
+//        List<Report> updateList = new ArrayList<>();
+//        for (Report report : auditWorkflowReportList) {
+//            int count = reportLogMapper.selectCount(new QueryWrapper<ReportLog>()
+//                    //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+//                    .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
+//                    .eq("report_ids", report.getId()));
+//            boolean findLog = false;
+//
+//            if (count == 0) {
+//                //模糊匹配一下
+//                List<ReportLog> reportLogs = reportLogMapper.selectList(new QueryWrapper<ReportLog>().select("id, report_ids")
+//                        //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+//                        .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
+//                        .eq("company_id", report.getCompanyId())
+//                        .eq("creator_id", report.getCreatorId())
+//                        .eq("create_date", report.getCreateDate()));
+//                if (reportLogs.size() > 0) {
+//                    //找到匹配的记录
+//                    System.out.println("开始匹配模糊===reportLog Size=="+reportLogs.size());
+//                    for (ReportLog log : reportLogs) {
+//                        String[] arr = log.getReportIds().split(",");
+//                        for (String s : arr) {
+//                            System.out.println("比对=logId="+log.getId()+", "+s+" , "+report.getId());
+//                            if (s.equals(report.getId().toString())) {
+//                                findLog = true;
+//                                blurFind++;
+//                                System.out.println("模糊匹配到了====="+blurFind);
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//            } else {
+//                findLog = true;
+//            }
+//            Report r = new Report();
+//            r.setId(report.getId());
+//            r.setReportAutoApprove(0);
+//            r.setState(0);
+//            if (findLog) {
+//                projectAuditManulPassCnt++;
+//                //已经是手动审核通过的,不需要撤回projectAuditState了
+//            } else {
+//                //没有项目审核通过的,需要撤回为0状态
+//                r.setProjectAuditState(0);
+//            }
+//            updateList.add(r);
+//        }
+//
+//        System.out.println("手动审核过的日报size="+projectAuditManulPassCnt+", 其中模糊匹配到的size=" +blurFind);
+//        if (updateList.size() > 0) {
+//            updateBatchById(updateList);
+//        }
+//        System.out.println("===无审批流的日报size="+noWorkflowReportList.size()+", 有审批流的日报size="+updateList.size());
+//        return new HttpRespMsg();
     }
 
     @Override

+ 14 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -985,25 +985,32 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     }
                     Integer min = Collections.min(upList);
                     Integer max = Collections.max(downList);
+
                     String minTime = DateTimeUtil.getTimeFromSeconds(min);
                     String maxTime = DateTimeUtil.getTimeFromSeconds(max);
                     DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm");
-                    userCorpwxTime.setStartTime(LocalTime.parse(minTime,df).plusHours(8).format(df));
-                    userCorpwxTime.setEndTime(LocalTime.parse(maxTime,df).plusHours(8).format(df));
+                    LocalTime startCardTime = LocalTime.parse(minTime,df).plusHours(8);
+                    LocalTime endCardTime = LocalTime.parse(maxTime,df).plusHours(8);
+                    if (showLog) System.out.println("min=" + min + ",max=" + max+", startTime="+startCardTime.format(df)
+                                +"endTime="+endCardTime.format(df));
+                    userCorpwxTime.setStartTime(startCardTime.format(df));
+                    userCorpwxTime.setEndTime(endCardTime.format(df));
                     userCorpwxTime.setWxCorpid(corpInfo.getCorpid());
                     userCorpwxTime.setCreateDate(date);
                     userCorpwxTime.setWeekDay(date.getDayOfWeek().getValue());
                     userCorpwxTime.setWeekDayTxt(DateTimeUtil.getWeekDayTxt(userCorpwxTime.getWeekDay()));
                     //下班打卡时间在第二天的情况下设置为前一天的23:59
-                    if(LocalTime.parse(maxTime,df).isBefore(LocalTime.parse(minTime,df))){
-                        maxTime="23:59";
+                    if(endCardTime.isBefore(startCardTime)){
+                        maxTime="15:59";//23:59减去8小时的偏差
+                        endCardTime.withHour(23).withMinute(59).withSecond(0).withNano(0);
                     }
-                    BigDecimal bigDecimal=new BigDecimal(Duration.between(LocalTime.parse(minTime,df).plusHours(8),LocalTime.parse(maxTime,df).plusHours(8)).toMinutes());
-
+                    BigDecimal bigDecimal = new BigDecimal(Duration.between(startCardTime,endCardTime).toMinutes());
+                    if (showLog) System.out.println("打卡时长(分钟):" + bigDecimal);
                     //开始时间在上午,结束时间在下午,要减去午休时长
-                    if (LocalTime.parse(minTime,df).plusHours(8).compareTo(LocalTime.parse(baseMorningEnd,df)) <= 0 && LocalTime.parse(maxTime,df).plusHours(8).compareTo(LocalTime.parse(baseAfternoonStart,df)) >= 0) {
+                    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));
+                        if (showLog) System.out.println("午休时间:"+restTime+", 减去后,工作时长="+bigDecimal);
                     } else {
                         bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP);
                     }

+ 0 - 113
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application-prod.yml

@@ -1,113 +0,0 @@
-server:
-  port: 10010
-  tomcat:
-    uri-encoding: utf-8
-    max-http-form-post-size: -1
-    connection-timeout: 18000000s
-spring:
-  servlet:
-    multipart:
-      # 配置上传文件的大小设置
-      # Single file max size  即单个文件大小
-      max-file-size: 100MB
-      max-request-size: 100MB
-  datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.100.37.243:7644/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
-    username: root
-    password: Ziyu20141026!@@
-    hikari:
-      maximum-pool-size: 60
-      minimum-idle: 10
-      max-lifetime: 180000
-      # 数据库连接超时时间,默认30秒,即30000
-      connection-timeout: 60000
-      connection-test-query: SELECT 1
-    #######redis配置######
-    # redis
-    redis:
-      host: 127.0.0.1
-      port: 6379
-      timeout: 3
-      # password:
-      pool:
-        minIdle: 1
-        maxIdle: 10
-        maxWait: 3
-        maxActive: 8
-    ####全局配置时间返回格式#####
-  jackson:
-    #参数意义:
-    #JsonInclude.Include.ALWAYS       默认
-    #JsonInclude.Include.NON_DEFAULT   属性为默认值不序列化
-    #JsonInclude.Include.NON_EMPTY     属性为 空(””) 或者为 NULL 都不序列化
-    #JsonInclude.Include.NON_NULL      属性为NULL  不序列化
-    default-property-inclusion: ALWAYS
-    time-zone: GMT+8
-    date-format: yyyy-MM-dd HH:mm:ss
-
-##########日志配置
-logging:
-  level:
-    root: info
-    org.mybatis: error
-    java.sql: error
-    org.springframework.web: error
-    #打印sql语句
-    com.management.platform.mapper: error
-  path: /log/
-  file: worktime.log
-##########
-mybatis-plus:
-  #  mapper-locations: classpath:mapper/*/*.xml
-  #  #实体扫描,多个package用逗号或者分号分隔
-  #  typeAliasesPackage: com.hssx.cloudmodel
-  global-config:
-    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
-    id-type: 0
-    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
-    field-strategy: 2
-    db-column-underline: true
-    refresh-mapper:
-    #################插入和更新非null判断
-    db-config:
-      insert-strategy: not_null
-      update-strategy: not_null
-  configuration:
-    map-underscore-to-camel-case: true
-    cache-enabled: false
-######mybstis配置#######
-mybatis:
-  type-aliases-package: com.management.platform.entity
-  mapper-locations: mappers/*Mapper.xml
-#####配置图片上传路径####
-upload:
-  path: /www/staticproject/timesheet/upload/
-
-
-
-##actuator健康检查配置
-management:
-  security:
-    enabled:false:
-  server:
-    port: 10011
-  #  endpoints:
-  #    web:
-  #      exposure:
-  #        include: "*"
-
-  health:
-    redis:
-      enabled: false
-
-configEnv:
-  isDev: false
-# SFTP上传配置
-sftp:
-  isEnabled: true
-  server: 101.132.166.205
-  port: 22022
-  remoteDir: /bkup/timesheet
-  user: root
-  password: Huoshi@2022

+ 4 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -15,12 +15,10 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_mingyi?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+	url: jdbc:mysql://47.101.180.183:17089/man_mingyi?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
-    password: HuoshiDB@2022
-#    url: jdbc:mysql://127.0.0.1:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
-#    username: root
-#    password: P011430seya
+    password: P011430@Huoshi*
+    
     hikari:
       maximum-pool-size: 60
       minimum-idle: 10
@@ -148,7 +146,7 @@ referer:
     - mldmobworktime.ttkuaiban.com
     - mldworktime.ttkuaiban.com
     - 47.101.180.183
-excludeUrls: /wxcorp/*,/wxcorp/*/*,/dingding/*,/feishu-info/*,/error,/testClient,/corpWXAuth,/corpWXScanningAuth,/corpInsideWXAuth,/wx-corp-info/*,/clean/*,/innerRoles/*,/report/getReportListByToken,/report/getProcessErrorData,/project/synchronizationProject,/user/updateUserDeptHierarchy
+excludeUrls: /wxcorp/*,/wxcorp/*/*,/dingding/*,/feishu-info/*,/error,/testClient,/corpWXAuth,/corpWXScanningAuth,/corpInsideWXAuth,/wx-corp-info/*,/clean/*,/innerRoles/*,/project/getProjectListByToken,/project/getTimeCostByToken,/report/getReportListByToken,/report/getProcessErrorData,/project/synchronizationProject,/user/updateUserDeptHierarchy
 
 #企业微信相关参数
 suitId: ww4e237fd6abb635af

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml

@@ -45,7 +45,7 @@
         user left join department on department.department_id = user.department_id
             LEFT JOIN
         (SELECT a.corpwx_userid,a.name, SUM(a.work_hours) AS workHours FROM user_corpwx_time a, user b WHERE a.company_id = #{companyId}
-        AND a.`corpwx_userid` = b.`corpwx_userid`
+        AND (a.`corpwx_userid` = b.`corpwx_userid` OR (a.corpwx_userid IS NULL AND a.name = b.name))
             AND (a.`create_date` &gt;= b.`induction_date` OR b.`induction_date` IS NULL)
             AND  a.create_date in
            <foreach collection="dateList" item="date" open="(" separator="," close=")">