浏览代码

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

ggooalice 2 年之前
父节点
当前提交
80dd4235e4
共有 15 个文件被更改,包括 1179 次插入1075 次删除
  1. 9 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java
  2. 95 57
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  4. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  5. 18 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 39 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  7. 27 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  8. 198 211
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  9. 5 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  10. 719 714
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties
  11. 42 39
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties
  12. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml
  13. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  14. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  15. 19 12
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 9 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java

@@ -262,12 +262,15 @@ public class DingDingController {
                                         //员工离职
                                         String corpId = bizItem.getString("corp_id");
                                         String unionId = actionBizData.getString("unionid");
-                                        Integer companyId = companyDingdingMapper.selectById(corpId).getCompanyId();
-                                        User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("dingding_unionid", unionId));
-                                        if (user != null && user.getIsActive() == 1) {
-                                            user.setIsActive(0);
-                                            user.setInactiveDate(LocalDate.now());
-                                            userMapper.updateById(user);
+                                        CompanyDingding companyDingding = companyDingdingMapper.selectById(corpId);
+                                        if (companyDingding != null) {
+                                            Integer companyId = companyDingding.getCompanyId();
+                                            User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("dingding_unionid", unionId));
+                                            if (user != null && user.getIsActive() == 1) {
+                                                user.setIsActive(0);
+                                                user.setInactiveDate(LocalDate.now());
+                                                userMapper.updateById(user);
+                                            }
                                         }
                                     }
                                 }

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

@@ -71,6 +71,8 @@ public class ReportController {
     private ProjectMapper projectMapper;
     @Resource
     private SysFunctionMapper sysFunctionMapper;
+    @Resource
+    private UserCorpwxTimeMapper userCorpwxTimeMapper;
 
 
 
@@ -263,6 +265,16 @@ public class ReportController {
             ProjectBasecostSetting alarmSetting = projectBasecostSettingMapper.selectOne(new QueryWrapper<ProjectBasecostSetting>()
                     .eq("company_id", company.getId()).eq("alarm_type", 1).last("limit 1"));
             if (alarmSetting != null) {
+                if (basecostId.length < projectId.length) {
+                    System.err.println("预算成本数组与项目id数组长度不一致:");
+                    for (Integer pid : projectId) {
+                        System.out.println("项目id="+pid);
+                    }
+                    System.out.println("========================");
+                    for (Integer b : basecostId) {
+                        System.out.println("预算项id="+b);
+                    }
+                }
                 //有预警类型的预算成本,默认给选上
                 for (int i=0;i<projectId.length; i++) {
                     if (basecostId[i] == 0) {
@@ -273,47 +285,47 @@ public class ReportController {
         }
 
 
-        //检查项目是否可填报
+        //检查项目是否可填报; 修改为不校验项目,前端加载的项目已经过滤掉了完成和撤销的
         List<Integer> integers = Arrays.asList(projectId);
         List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", integers));
-        for (int i=0;i<projectId.length; i++) {
-            int pid = projectId[i];
-            Optional<Project> findP = projectList.stream().filter(p->p.getId().equals(pid)).findFirst();
-            if (findP.isPresent()) {
-                Project curP = findP.get();
-                if (!createDate[i].contains("@")) {
-                    if (curP.getStatus() == 2) {
-                        HttpRespMsg msg = new HttpRespMsg();
-                        //msg.setError("项目["+curP.getProjectName()+"]已完成。");
-                        msg.setError(MessageUtils.message("project.complete",curP.getProjectName()));
-                        return msg;
-                    }
-                    if (curP.getStatus() == 3) {
-                        HttpRespMsg msg = new HttpRespMsg();
-                        //msg.setError("项目["+curP.getProjectName()+"]已撤销。");
-                        msg.setError(MessageUtils.message("project.revoke",curP.getProjectName()));
-                        return msg;
-                    }
-                } else {
-                    //批量填报(含代填)
-                    String[] dateArr = createDate[i].split("@");
-                    for (String curDate : dateArr) {
-                        if (curP.getStatus() == 2) {
-                            HttpRespMsg msg = new HttpRespMsg();
-                            //msg.setError("项目["+curP.getProjectName()+"]已完成。");
-                            msg.setError(MessageUtils.message("project.complete",curP.getProjectName()));
-                            return msg;
-                        }
-                        if (curP.getStatus() == 3) {
-                            HttpRespMsg msg = new HttpRespMsg();
-                            //msg.setError("项目["+curP.getProjectName()+"]已撤销。");
-                            msg.setError(MessageUtils.message("project.revoke",curP.getProjectName()));
-                            return msg;
-                        }
-                    }
-                }
-            }
-        }
+//        for (int i=0;i<projectId.length; i++) {
+//            int pid = projectId[i];
+//            Optional<Project> findP = projectList.stream().filter(p->p.getId().equals(pid)).findFirst();
+//            if (findP.isPresent()) {
+//                Project curP = findP.get();
+//                if (!createDate[i].contains("@")) {
+//                    if (curP.getStatus() == 2) {
+//                        HttpRespMsg msg = new HttpRespMsg();
+//                        //msg.setError("项目["+curP.getProjectName()+"]已完成。");
+//                        msg.setError(MessageUtils.message("project.complete",curP.getProjectName()));
+//                        return msg;
+//                    }
+//                    if (curP.getStatus() == 3) {
+//                        HttpRespMsg msg = new HttpRespMsg();
+//                        //msg.setError("项目["+curP.getProjectName()+"]已撤销。");
+//                        msg.setError(MessageUtils.message("project.revoke",curP.getProjectName()));
+//                        return msg;
+//                    }
+//                } else {
+//                    //批量填报(含代填)
+//                    String[] dateArr = createDate[i].split("@");
+//                    for (String curDate : dateArr) {
+//                        if (curP.getStatus() == 2) {
+//                            HttpRespMsg msg = new HttpRespMsg();
+//                            //msg.setError("项目["+curP.getProjectName()+"]已完成。");
+//                            msg.setError(MessageUtils.message("project.complete",curP.getProjectName()));
+//                            return msg;
+//                        }
+//                        if (curP.getStatus() == 3) {
+//                            HttpRespMsg msg = new HttpRespMsg();
+//                            //msg.setError("项目["+curP.getProjectName()+"]已撤销。");
+//                            msg.setError(MessageUtils.message("project.revoke",curP.getProjectName()));
+//                            return msg;
+//                        }
+//                    }
+//                }
+//            }
+//        }
         TimeType comTimeType = timeTypeMapper.selectById(user.getCompanyId());
         List<ReportAuditorSetting> auditorSettingList = null;
         if (comTimeType.getReportAuditType() == 3) {
@@ -1015,28 +1027,54 @@ public class ReportController {
                                 return msg;
                             }
                         }
-                    } else {
-                        //按周填报时不校验已填的工时日报了
-//                        List<LocalDate> collect = oldReportList.stream().map(Report::getCreateDate).collect(Collectors.toList());
-//                        for (Report report : reportList) {
-//                            if (report.getId() == null) {
-//                                if (collect.stream().anyMatch(oldDate->oldDate.isEqual(report.getCreateDate()))) {
-//                                    sb.append(mdFormatter.format(report.getCreateDate())).append(",");
-//                                }
-//                            }
-//                        }
-
-//                        String s = sb.toString();
-//                        if (s.length() > 0) {
-//                            s = s.substring(0, s.length() -1);
-//                            HttpRespMsg msg = new HttpRespMsg();
-//                            msg.setError("已存在填写日报: " + s+", 请先删除后再填报。");
-//                            return msg;
-//                        }
                     }
                 }
             }
         }
+        if (createDate[0].contains("@") && targetUserList == null) {
+            //个人批量填报,判断是否需要考勤校验
+            if (comTimeType.getSyncCorpwxTime() == 1) {
+                String[] dateArr = createDate[0].split("@");
+                List<UserCorpwxTime> cardTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", user.getCorpwxUserid()).between("create_date", dateArr[0], dateArr[1]));
+                //考勤记录不能为空或时长为0
+                if (comTimeType.getNotAllowedNoAttendance() == 1) {
+                    String str = "";
+                    for (Report r : reportList) {
+                        Optional<UserCorpwxTime> first = cardTimeList.stream().filter(card -> card.getCreateDate().isEqual(r.getCreateDate())).findFirst();
+                        if (first.isPresent()) {
+                            if (first.get().getWorkHours() == 0) {
+                                str += dtf.format(r.getCreateDate()) + ",";
+                            }
+                        } else {
+                            str += dtf.format(r.getCreateDate()) + ",";
+                        }
+                    }
+                    //有无考勤的日期
+                    if (str.length() > 0) {
+                        str = str.substring(0, str.length()-1);
+                        HttpRespMsg msg = new HttpRespMsg();
+                        msg.setError(MessageUtils.message("report.lackCardTime", str));
+                        return msg;
+                    }
+                }
+                String str = "";
+                for (Report r : reportList) {
+                    Optional<UserCorpwxTime> first = cardTimeList.stream().filter(card -> card.getCreateDate().isEqual(r.getCreateDate())).findFirst();
+                    if (first.isPresent()) {
+                        double cardTime = first.get().getWorkHours();
+                        if (r.getWorkingTime() > cardTime) {
+                            str += dtf.format(r.getCreateDate()) + ",";
+                        }
+                    }
+                }
+                if (str.length() > 0) {
+                    str = str.substring(0, str.length()-1);
+                    HttpRespMsg msg = new HttpRespMsg();
+                    msg.setError(MessageUtils.message("report.lackCardTime", str));
+                    return msg;
+                }
+            }
+        }
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
 

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

@@ -317,7 +317,7 @@ public class UserCorpwxTimeController {
                 .eq("corpwx_userid", user.getCorpwxUserid()).eq("create_date", date));
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate localDate = LocalDate.parse(date, df);
-        if(!localDate.isEqual(LocalDate.now())&&oldCorpwxTimes.size()>0){
+        if(!localDate.isEqual(LocalDate.now())&&oldCorpwxTimes.size()>0 && oldCorpwxTimes.get(0).getWorkHours() > 0){
             UserCorpwxTime time = oldCorpwxTimes.get(0);
             resultMap.put("time", time);
             msg.data=resultMap;

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

@@ -1287,6 +1287,8 @@ public class DingDingServiceImpl implements DingDingService {
                             sheet.setGmtFinished(item.getString("gmt_finished"));
                             Long cha = sheet.getEndDate().toEpochDay() - sheet.getStartDate().toEpochDay() + 1;
                             sheet.setTimeDays((float)cha);
+                            TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
+                            sheet.setTimeHours(sheet.getTimeDays()*allDay.getAllday());
                             sheet.setCompanyId(dingding.getCompanyId());
                             sheet.setStatus(0);
                             sheet.setProcinstId(item.getString("procInst_id"));

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

@@ -3094,13 +3094,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         if (!StringUtils.isEmpty(code)) {
                             int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
                             if (cnt > 0) {
-                                if(key==0){
-                                    continue;
-                                }
 //                            throw new Exception("项目编号存在重复: " + code);
                                 existCodeList.add(code);
                                 //跳过编号重复的数据
                                 exists=true;
+                                if(key==0){
+                                    continue;
+                                }
                             }
                         }
                         project.setProjectCode(code);
@@ -3295,7 +3295,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 msg.data = MessageUtils.message("data.importSucRow",importCount);
                 if (existCodeList.size() > 0) {
                     String collect = existCodeList.stream().collect(Collectors.joining(","));
-                    msg.data += MessageUtils.message("data.upSkip",existCodeList.size(),collect);
+                    if(key==0){
+                        msg.data += MessageUtils.message("data.skip",existCodeList.size(),collect);
+                    }else {
+                        msg.data += MessageUtils.message("data.upSkip",existCodeList.size(),collect);
+                    }
+
                 }
                 OperationRecord operationRecord=new OperationRecord();
                 operationRecord.setCompanyId(user.getCompanyId());
@@ -3592,13 +3597,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         if (!StringUtils.isEmpty(code)) {
                             int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
                             if (cnt > 0) {
-                                if(key==0){
-                                    continue;
-                                }
 //                            throw new Exception("项目编号存在重复: " + code);
                                 existCodeList.add(code);
                                 //跳过编号重复的数据
                                 exists=true;
+                                if(key==0){
+                                    continue;
+                                }
                             }
                         }
                         project.setProjectCode(code);
@@ -4270,9 +4275,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 //msg.data = "成功导入"+importCount+"条数据。";
                 msg.data = MessageUtils.message("data.importSucRow",importCount);
+                System.out.println(existCodeList);
                 if (existCodeList.size() > 0) {
                     String collect = existCodeList.stream().collect(Collectors.joining(","));
-                    msg.data += MessageUtils.message("data.upSkip",existCodeList.size(),collect);
+                    if(key==0){
+                        msg.data += MessageUtils.message("data.skip",existCodeList.size(),collect);
+                    }else {
+                        msg.data += MessageUtils.message("data.upSkip",existCodeList.size(),collect);
+                    }
                 }
                 OperationRecord operationRecord=new OperationRecord();
                 operationRecord.setCompanyId(user.getCompanyId());

+ 39 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -126,6 +126,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Resource
     private CompanyMapper companyMapper;
     @Resource
+    private UserCustomMapper userCustomMapper;
+    @Resource
     private ReportMapper reportMapper;
     @Resource
     private ParticipationMapper participationMapper;
@@ -3537,6 +3539,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             TimeType timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
             Company company = companyMapper.selectById(user.getCompanyId());
             Integer companyId = company.getId();
+            List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", companyId));
             WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
             //准备导出
@@ -3555,6 +3558,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             titles.add(MessageUtils.message("entry.serialNo"));
             titles.add(MessageUtils.message("entry.No"));
             titles.add(MessageUtils.message("excel.staff"));
+            for (int i = 0; i < userCustomList.size(); i++) {
+                titles.add(userCustomList.get(i).getName());
+            }
             titles.add(MessageUtils.message("entry.department"));
             titles.add(MessageUtils.message("entry.projectId"));
             titles.add(MessageUtils.message("entry.projectName"));
@@ -3774,34 +3780,53 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     map.put("time", DateTimeUtil.localDateTimeToDate(time));
 
                     //审核时间
-                    String projectAuditTime = sdf.format((Date)map.get("projectAuditTime"));
-                    LocalDateTime auditTime = LocalDateTime.parse(projectAuditTime, dtf);
-                    auditTime = auditTime.plusSeconds(offsetSeconds);
-                    map.put("projectAuditTime", DateTimeUtil.localDateTimeToDate(auditTime));
+                    if(map.get("projectAuditTime")!=null){
+                        String projectAuditTime = sdf.format((Date)map.get("projectAuditTime"));
+                        LocalDateTime auditTime = LocalDateTime.parse(projectAuditTime, dtf);
+                        auditTime = auditTime.plusSeconds(offsetSeconds);
+                        map.put("projectAuditTime", DateTimeUtil.localDateTimeToDate(auditTime));
+                    }else  map.put("projectAuditTime","");
+
                 }
             }
             for (Map<String, Object> map : allReportByDate) {
                 HSSFRow row = sheet.createRow(rowNum);
                 row.createCell(0).setCellValue(rowNum);
                 row.createCell(1).setCellValue((String) map.get("jobNumber"));
+                for (int i = 0; i < userCustomList.size(); i++) {
+                    String value="";
+                    switch (i){
+                        case 0:value=String.valueOf(map.get("plate1")==null?"":map.get("plate1"));
+                            break;
+                        case 1:value=String.valueOf(map.get("plate2")==null?"":map.get("plate2"));
+                            break;
+                        case 2:value=String.valueOf(map.get("plate3")==null?"":map.get("plate3"));
+                            break;
+                        case 3:value=String.valueOf(map.get("plate4")==null?"":map.get("plate4"));
+                            break;
+                        case 4:value=String.valueOf(map.get("plate5")==null?"":map.get("plate5"));
+                            break;
+                    }
+                    row.createCell(3+i).setCellValue(value);
+                }
                 if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                     row.createCell(2).setCellValue("$userName="+(map.get("corpwxUserId")==null?"":map.get("corpwxUserId"))+"$");
-                    row.createCell(3).setCellValue("$departmentName="+(map.get("corpwxDeptId")==null?"":map.get("corpwxDeptId"))+"$");
+                    row.createCell(3+userCustomList.size()).setCellValue("$departmentName="+(map.get("corpwxDeptId")==null?"":map.get("corpwxDeptId"))+"$");
                 }else {
                     row.createCell(2).setCellValue((String) map.get("name"));
-                    row.createCell(3).setCellValue((String) map.get("departmentName"));
+                    row.createCell(3+userCustomList.size()).setCellValue((String) map.get("departmentName"));
                 }
-                row.createCell(4).setCellValue((String) map.get("projectCode"));
-                row.createCell(5).setCellValue((String) map.get("project"));
-                row.createCell(6).setCellValue((String) map.get("categoryName"));
+                row.createCell(4+userCustomList.size()).setCellValue((String) map.get("projectCode"));
+                row.createCell(5+userCustomList.size()).setCellValue((String) map.get("project"));
+                row.createCell(6+userCustomList.size()).setCellValue((String) map.get("categoryName"));
                 if(timeType.getMainProjectState()==1){
-                    row.createCell(7).setCellValue((String) map.get("projectMainName"));
+                    row.createCell(7+userCustomList.size()).setCellValue((String) map.get("projectMainName"));
                 }else {
-                    row.createCell(7).setCellValue((String) map.get("subProjectName"));
+                    row.createCell(7+userCustomList.size()).setCellValue((String) map.get("subProjectName"));
                 }
-                int index = 8;
+                int index = 8+userCustomList.size();
                 if (company.getPackageProject() == 1) {
-                    row.createCell(8).setCellValue((String) map.get("taskName"));
+                    row.createCell(8+userCustomList.size()).setCellValue((String) map.get("taskName"));
                     index++;
                 }
                 HSSFCell cell = row.createCell(index);
@@ -4713,7 +4738,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         LocalDate endDate = LocalDate.parse(dateStr,df);
         endDate=endDate.plusMonths(1);
         List<Map<String,Object>> resultList=reportMapper.getUploadThirdReportData(companyId,startDate,endDate);
-        String url="http://116.236.135.252:18009/dataservice/apiInfo/queryData/test/sap/sysLaborhour";
+        String url="http://10.20.35.48:8009/dataservice/apiInfo/queryData/prd/sap/sysLaborhour";
         //认证的账号和密码
         HttpHeaders headers=new HttpHeaders();
         JSONObject param = new JSONObject();

+ 27 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1423,12 +1423,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
 
                 if (rowIndex == 0) {
-                    if ((!"工号".equals(jobNumber)) || (!"Job No".equals(jobNumber))) {
+                    if (("工号".equals(jobNumber)) || ("Job No".equals(jobNumber))) {
+                        continue;
+                    } else {
                         //httpRespMsg.setError("缺少部门列,请下载最新模板进行导入");
                         httpRespMsg.setError(MessageUtils.message("Template.lackJobNumber"));
                         return httpRespMsg;
-                    } else {
-                        continue;
                     }
                 }
                 //姓名为空的,不处理
@@ -1710,6 +1710,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             String userId = request.getHeader("Token");
             User user = userMapper.selectById(userId);
             WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+            List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", user.getCompanyId()));
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
             //HSSFSheet sheet = workbook.createSheet("全部员工列表");
@@ -1766,7 +1767,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //headCell.setCellValue("证书");
             headCell.setCellValue(MessageUtils.message("excel.certificate"));
             headCell.setCellStyle(headStyle);
-            headCell = headRow.createCell(8);
+            for (int i = 0; i < userCustomList.size(); i++) {
+                headCell = headRow.createCell(8+i);
+                headCell.setCellValue(userCustomList.get(i).getName());
+                headCell.setCellStyle(headStyle);
+            }
+            headCell = headRow.createCell(8+userCustomList.size());
             //headCell.setCellValue("状态");
             headCell.setCellValue(MessageUtils.message("leave.status"));
             headCell.setCellStyle(headStyle);
@@ -1826,7 +1832,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }else {
                     row.createCell(7).setCellValue("");
                 }
-                row.createCell(8).setCellValue(item.getIsActive()==1?MessageUtils.message("excel.normal"):MessageUtils.message("access.deactivated"));
+                for (int i = 0; i < userCustomList.size(); i++) {
+                    String value="";
+                    switch (i){
+                        case 0:value=item.getPlate1()==null?"":item.getPlate1();
+                            break;
+                        case 1:value=item.getPlate2()==null?"":item.getPlate2();
+                            break;
+                        case 2:value=item.getPlate3()==null?"":item.getPlate3();
+                            break;
+                        case 3:value=item.getPlate4()==null?"":item.getPlate4();
+                            break;
+                        case 4:value=item.getPlate5()==null?"":item.getPlate5();
+                            break;
+                    }
+                    row.createCell(8+i).setCellValue(value);
+                }
+                row.createCell(8+userCustomList.size()).setCellValue(item.getIsActive()==1?MessageUtils.message("excel.normal"):MessageUtils.message("access.deactivated"));
                 rowNum++;
             }
             //生成Excel文件

+ 198 - 211
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -12,6 +12,7 @@ import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.*;
+import javafx.scene.effect.Light;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.client.utils.HttpClientUtils;
@@ -546,7 +547,12 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             Integer time = (Integer) jsonObject.get("checkin_time");
                             if (jsonObject.get("checkin_type").equals("上班打卡")&&!jsonObject.get("exception_type").equals("未打卡")) {
                                 upList.add(time);
-                            } else if(jsonObject.get("checkin_type").equals("下班打卡")&&!jsonObject.get("exception_type").equals("未打卡")) downList.add(time);
+                            } else if(jsonObject.get("checkin_type").equals("下班打卡")&&!jsonObject.get("exception_type").equals("未打卡")){
+                                downList.add(time);
+                            } else if(jsonObject.get("checkin_type").equals("外出打卡")){
+                                upList.add(time);
+                                downList.add(time);
+                            }
                         }
                     }
                     double restTime = 0.0;//小时为单位
@@ -574,6 +580,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             System.out.println("下班"+DateTimeUtil.getTimeFromSeconds(integer));
                         }
                     }
+                    System.out.println(upList);
+                    System.out.println(downList);
                     if(upList.isEmpty()||downList.isEmpty()){
                         continue;
                     }
@@ -1132,201 +1140,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         }
     }
 
-    //查询微信请假单详情
-    private List<LeaveSheet> wxLeaveDetail(String startTime,String endTime,List<String> fail,String accessToken,WxCorpInfo wxCorpInfo){
-        String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=ACCESS_TOKEN";
-        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=ACCESS_TOKEN";
-        HttpHeaders headers = new HttpHeaders();
-        RestTemplate restTemplate = new RestTemplate();
-        ArrayList<LeaveSheet> result = new ArrayList<>();
-        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
-        headers.setContentType(type);
-        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
-        //批量获取审批单号
-        ArrayList<HashMap> list = new ArrayList<>();
-        HashMap<String, String> record_type = new HashMap<>();
-        list.add(record_type);
-        record_type.put("key", "record_type");
-        record_type.put("value", "1");
-        JSONObject requestMap = new JSONObject();
-        requestMap.put("starttime", startTime);
-        requestMap.put("endtime", endTime);
-        requestMap.put("cursor", 0);
-        requestMap.put("size", 100);
-        requestMap.put("filters", list);
-        HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
-        ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
-        if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
-            String resp = ResponseEntity.getBody();
-            JSONObject json = JSONObject.parseObject(resp);
-            Object[] sp_no_lists = json.getJSONArray("sp_no_list").toArray();
-            //查询每个审批号审批详情
-            for (int i = 0; i < sp_no_lists.length; i++) {
-                detailUrl = detailUrl.replace("ACCESS_TOKEN", accessToken);
-                JSONObject detailMap = new JSONObject();
-                detailMap.put("sp_no", sp_no_lists[i]);
-                HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
-                ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
-                if(ResponseEntity.getStatusCode() == HttpStatus.OK){
-                    //封装请假单数据
-                    String detailResp = detailResponseEntity.getBody();
-                    JSONObject infoJson = JSONObject.parseObject(detailResp).getJSONObject("info");
-                    //审核状态
-                    Integer sp_status = infoJson.getInteger("sp_status");
-                    switch (sp_status){
-                        //审批中
-                        case 1:
-                            sp_status=1;
-                            break;
-                        //已通过
-                        case 2:
-                            sp_status=0;
-                            break;
-                        //已驳回
-                        case 3:
-                            sp_status=2;
-                            break;
-                        //已撤销
-                        case 4:
-                            sp_status=3;
-                            break;
-                        //通过后撤销
-                        case 5:
-                            sp_status=5;
-                            break;
-                        //通过后撤销
-                        case 6:
-                            sp_status=6;
-                            break;
-                        //7-已删除
-                        case 7:
-                            sp_status=7;
-                            break;
-                        default:
-                            sp_status=8;
-                    }
-                    //审批申请提交时间,Unix时间戳
-                    LocalDateTime applyTime = LocalDateTime.ofEpochSecond(Long.parseLong(infoJson.getString("apply_time")), 0, ZoneOffset.ofHours(8));
-                    //申请人姓名
-                    String applyer = infoJson.getString("applyer");
-                    String userId = JSONObject.parseObject(applyer).getString("userid");
-                    User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", userId));
-                    String name = user==null?userId:user.getName();
-                    //审批人姓名
-                    String approverUserId = infoJson.getJSONArray("sp_record").getJSONObject(0)
-                            .getJSONArray("details").getJSONObject(0)
-                            .getJSONObject("approver").getString("userid");
-                    User approverUser = new User();
-                    if (approverUserId!=null&&approverUserId!=""){
-                        approverUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", approverUserId));
-                    }
-                    String approverName = approverUser==null?approverUserId:approverUser.getName();
-                    JSONArray contents = infoJson.getJSONObject("apply_data")
-                            .getJSONArray("contents");
-                    //请假类型
-                    JSONObject vacation = contents.getJSONObject(0)
-                            .getJSONObject("value")
-                            .getJSONObject("vacation");
-                    String text = vacation.getJSONObject("selector")
-                            .getJSONArray("options").getJSONObject(0)
-                            .getJSONArray("value").getJSONObject(0)
-                            .getString("text");
-                    //请假事由
-                    String remark = contents.getJSONObject(1).getJSONObject("value").getString("text");
-                    Integer leave_type = 0;
-                    switch (text){
-                        case "事假":
-                            leave_type = 0;
-                            break;
-                        case "病假":
-                            leave_type = 1;
-                            break;
-                        case "年假":
-                            leave_type = 2;
-                            break;
-                        case "产假":
-                            leave_type = 3;
-                            break;
-                        case "婚假":
-                            leave_type = 4;
-                            break;
-                        case "丧假":
-                            leave_type = 5;
-                            break;
-                        case "调休假":
-                            leave_type = 6;
-                            break;
-                        case "陪产假":
-                            leave_type = 7;
-                            break;
-                        case "其他":
-                            leave_type = 8;
-                            break;
-                    }
-                    //请假开始时间
-                    JSONObject date_range = vacation.getJSONObject("attendance")
-                            .getJSONObject("date_range");
-                    String startDate =date_range.getString("new_begin");
-                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-                    long startDateTemp = Long.valueOf(startDate);
-                    String startDateString = sdf.format(new Date(startDateTemp * 1000L));
-                    DateTimeFormatter startfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                    LocalDate sDate = LocalDate.parse(startDateString, startfmt);
-                    //请假结束时间
-                    String endDate = date_range.getString("new_end");
-                    long endDatetemp = Long.valueOf(endDate);
-                    String endDateString = sdf.format(new Date(endDatetemp * 1000L));
-                    DateTimeFormatter endfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                    LocalDate eDate = LocalDate.parse(endDateString, endfmt);
-                    //请假时长
-                    String timeHours = date_range.getString("new_duration");
-                    String leaveType = date_range.getString("type");
-                    LeaveSheet leaveSheet = new LeaveSheet();
-                    leaveSheet.setProcinstId(sp_no_lists[i].toString());
-                    leaveSheet.setIsFinalAudit(1);
-                    leaveSheet.setIndate(applyTime);
-                    leaveSheet.setOwnerName(name);
-                    leaveSheet.setOwnerId(user==null?"":user.getId());
-                    leaveSheet.setCompanyId(user.getCompanyId());
-                    leaveSheet.setTel(user.getPhone()==null?"":user.getPhone());
-                    //审批人信息
-                    leaveSheet.setAuditorName(approverName);
-                    leaveSheet.setAuditorId(approverUser==null?"":approverUser.getId());
-                    //请假日期
-                    leaveSheet.setStartDate(sDate);
-                    leaveSheet.setEndDate(eDate);
-                    //请假类型
-                    leaveSheet.setLeaveType(leave_type);
-                    leaveSheet.setStatus(sp_status);
-                    //请假说明
-                    leaveSheet.setRemark(remark==null?"":remark);
-                    //请假时长和天数
-                    float time = Float.parseFloat(timeHours);
-                    if("hour".equals(leaveType)){
-                        leaveSheet.setTimeType(1);
-                        leaveSheet.setTimeHours(time/3600);
-                    }else{
-                        leaveSheet.setTimeType(0);
-                        leaveSheet.setTimeHours(time/3600);
-                        leaveSheet.setTimeDays(time/3600/24);
-                    }
-                    result.add(leaveSheet);
-                }
-            }
-        }else{
-            fail.add(wxCorpInfo.getCorpFullName());
-            System.err.println(wxCorpInfo.getCorpFullName()+"审批单查询失败");
-        }
-        return result;
-    }
-
-    //更新审核中的请假单以及查询某时间段的微信请假审批单号
+    //更新审核中的请假单以及查询某时间段的微信请假单
     @Override
     public List<LeaveSheet> wxLeaveNumber(String startTime,String endTime,List<WxCorpInfo> wxCorpInfos,List<LeaveSheet> approvalLeave) throws Exception {
-        String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=ACCESS_TOKEN";
-        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=ACCESS_TOKEN";
-        //存储更新失败的公司名称
-        List<String> fail = new ArrayList<>();
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
         ArrayList<LeaveSheet> result = new ArrayList<>();
@@ -1334,20 +1150,16 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         headers.setContentType(type);
         headers.add("Accept", MediaType.APPLICATION_JSON.toString());
         for (WxCorpInfo wxCorpInfo : wxCorpInfos) {
+            System.err.println("++++++++++++++++++++++++++++++正在同步更新:"+wxCorpInfo.getCorpName());
             //更新Access_token
             String accessToken = getCorpAccessToken(wxCorpInfo);
-//            if (StringUtils.isEmpty(accessToken)){
-//                System.out.println(wxCorpInfo.getCorpName()+"accessToken获取失败");
-//                fail.add(wxCorpInfo.getCorpName());
-//                continue;
-//            }
-            url = url.replace("ACCESS_TOKEN", accessToken);
+            String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=" + accessToken;
             //查询并更新审核中的审批单
             System.out.println("+++++++++++++++++++开始查询并更新审核中的审批单+++++++++++++++++++");
             if (approvalLeave.size()!=0){
                 for (LeaveSheet corpInfo : approvalLeave) {
                     if (corpInfo.getCompanyId().equals(wxCorpInfo.getCompanyId())&& StringUtils.isNotEmpty(corpInfo.getProcinstId())){
-                        detailUrl = detailUrl.replace("ACCESS_TOKEN", accessToken);
+                        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=" + accessToken;
                         JSONObject detailMap = new JSONObject();
                         detailMap.put("sp_no",corpInfo.getProcinstId());
                         HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
@@ -1411,17 +1223,192 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                 }
             }
             System.out.println("+++++++++++++++++++++开始同步昨天请假信息+++++++++++++++++++++");
-
-        }
-        if (fail.size() == 0){
-            System.err.println("全部同步成功");
-        }else{
-            System.err.println("总共"+fail.size()+"个公司同步失败");
-            System.err.print("同步失败的公司有:");
-            for (String s : fail) {
-                System.err.print(s+",");
+            //批量获取审批单号
+            int cursor = 0;
+            while (true){
+                ArrayList<HashMap> list = new ArrayList<>();
+                HashMap<String, String> record_type = new HashMap<>();
+                list.add(record_type);
+                record_type.put("key", "record_type");
+                record_type.put("value", "1");
+                JSONObject requestMap = new JSONObject();
+                requestMap.put("starttime", startTime);
+                requestMap.put("endtime", endTime);
+                requestMap.put("cursor", cursor);
+                requestMap.put("size", 1);
+                requestMap.put("filters", list);
+                HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
+                ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
+                if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
+                    String resp = ResponseEntity.getBody();
+                    System.err.println("++++++++++++" + resp + "++++++++++++");
+                    JSONObject json = JSONObject.parseObject(resp);
+                    Object[] sp_no_lists = json.getJSONArray("sp_no_list").toArray();
+                    //查询每个审批号审批详情
+                    for (int i = 0; i < sp_no_lists.length; i++) {
+                        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=" + accessToken;
+                        JSONObject detailMap = new JSONObject();
+                        detailMap.put("sp_no", sp_no_lists[i]);
+                        HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
+                        ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
+                        if(detailResponseEntity.getStatusCode() == HttpStatus.OK){
+                            //封装请假单数据
+                            String detailResp = detailResponseEntity.getBody();
+                            JSONObject infoJson = JSONObject.parseObject(detailResp).getJSONObject("info");
+                            //审核状态
+                            Integer sp_status = infoJson.getInteger("sp_status");
+                            switch (sp_status){
+                                //审批中
+                                case 1:
+                                    sp_status=1;
+                                    break;
+                                //已通过
+                                case 2:
+                                    sp_status=0;
+                                    break;
+                                //已驳回
+                                case 3:
+                                    sp_status=2;
+                                    break;
+                                //已撤销
+                                case 4:
+                                    sp_status=3;
+                                    break;
+                                //通过后撤销
+                                case 5:
+                                    sp_status=5;
+                                    break;
+                                //通过后撤销
+                                case 6:
+                                    sp_status=6;
+                                    break;
+                                //7-已删除
+                                case 7:
+                                    sp_status=7;
+                                    break;
+                                default:
+                                    sp_status=8;
+                            }
+                            //审批申请提交时间,Unix时间戳
+                            LocalDateTime applyTime = LocalDateTime.ofEpochSecond(Long.parseLong(infoJson.getString("apply_time")), 0, ZoneOffset.ofHours(8));
+                            //申请人姓名
+                            String applyer = infoJson.getString("applyer");
+                            String userId = JSONObject.parseObject(applyer).getString("userid");
+                            User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", userId));
+                            String name = user==null?userId:user.getName();
+                            //审批人姓名
+                            String approverUserId = infoJson.getJSONArray("sp_record").getJSONObject(0)
+                                    .getJSONArray("details").getJSONObject(0)
+                                    .getJSONObject("approver").getString("userid");
+                            User approverUser = new User();
+                            if (approverUserId!=null&&approverUserId!=""){
+                                approverUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", approverUserId));
+                            }
+                            String approverName = approverUser==null?approverUserId:approverUser.getName();
+                            JSONArray contents = infoJson.getJSONObject("apply_data")
+                                    .getJSONArray("contents");
+                            //请假类型
+                            JSONObject vacation = contents.getJSONObject(0)
+                                    .getJSONObject("value")
+                                    .getJSONObject("vacation");
+                            String text = vacation.getJSONObject("selector")
+                                    .getJSONArray("options").getJSONObject(0)
+                                    .getJSONArray("value").getJSONObject(0)
+                                    .getString("text");
+                            //请假事由
+                            String remark = contents.getJSONObject(1).getJSONObject("value").getString("text");
+                            Integer leave_type = 0;
+                            switch (text){
+                                case "事假":
+                                    leave_type = 0;
+                                    break;
+                                case "病假":
+                                    leave_type = 1;
+                                    break;
+                                case "年假":
+                                    leave_type = 2;
+                                    break;
+                                case "产假":
+                                    leave_type = 3;
+                                    break;
+                                case "婚假":
+                                    leave_type = 4;
+                                    break;
+                                case "丧假":
+                                    leave_type = 5;
+                                    break;
+                                case "调休假":
+                                    leave_type = 6;
+                                    break;
+                                case "陪产假":
+                                    leave_type = 7;
+                                    break;
+                                case "其他":
+                                    leave_type = 8;
+                                    break;
+                            }
+                            //请假开始时间
+                            JSONObject date_range = vacation.getJSONObject("attendance")
+                                    .getJSONObject("date_range");
+                            String startDate =date_range.getString("new_begin");
+                            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
+                            long startDateTemp = Long.valueOf(startDate);
+                            String startDateString = sdf.format(new Date(startDateTemp * 1000L));
+                            DateTimeFormatter startfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                            LocalDate sDate = LocalDate.parse(startDateString, startfmt);
+                            //请假结束时间
+                            String endDate = date_range.getString("new_end");
+                            long endDatetemp = Long.valueOf(endDate);
+                            String endDateString = sdf.format(new Date(endDatetemp * 1000L));
+                            DateTimeFormatter endfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                            LocalDate eDate = LocalDate.parse(endDateString, endfmt);
+                            //请假时长
+                            String timeHours = date_range.getString("new_duration");
+                            String leaveType = date_range.getString("type");
+                            LeaveSheet leaveSheet = new LeaveSheet();
+                            leaveSheet.setProcinstId(sp_no_lists[i].toString());
+                            leaveSheet.setIsFinalAudit(1);
+                            leaveSheet.setIndate(applyTime);
+                            leaveSheet.setOwnerName(name);
+                            leaveSheet.setOwnerId(user==null?"":user.getId());
+                            leaveSheet.setCompanyId(user.getCompanyId());
+                            leaveSheet.setTel(user.getPhone()==null?"":user.getPhone());
+                            //审批人信息
+                            leaveSheet.setAuditorName(approverName);
+                            leaveSheet.setAuditorId(approverUser==null?"":approverUser.getId());
+                            //请假日期
+                            leaveSheet.setStartDate(sDate);
+                            leaveSheet.setEndDate(eDate);
+                            //请假类型
+                            leaveSheet.setLeaveType(leave_type);
+                            leaveSheet.setStatus(sp_status);
+                            //请假说明
+                            leaveSheet.setRemark(remark==null?"":remark);
+                            //请假时长和天数
+                            float time = Float.parseFloat(timeHours);
+                            if("hour".equals(leaveType)){
+                                leaveSheet.setTimeType(1);
+                                leaveSheet.setTimeHours(time/3600);
+                            }else{
+                                leaveSheet.setTimeType(0);
+                                leaveSheet.setTimeHours(time/3600);
+                                leaveSheet.setTimeDays(time/3600/24);
+                            }
+                            result.add(leaveSheet);
+                        }
+                    }
+                    //判断是否需要多次拉取
+                    int nextCur = json.getIntValue("next_cursor");
+                    if (nextCur==0){
+                        break;
+                    }else {
+                        cursor = nextCur;
+                    }
+                }else{
+                    System.err.println(wxCorpInfo.getCorpFullName()+"审批单查询失败");
+                    break;
+                }
             }
-            System.out.println();
         }
         return result;
     }

+ 5 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -166,7 +166,7 @@ public class TimingTask {
     //每天2:11 同步钉钉用户前2天到未来30天时间段的打卡,请假,出差数据
     @Scheduled(cron = "0 11 2 ? * *")
     private void synDingDingWorkData() {
-        if (isDev) return;
+        //if (isDev) return;
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_dingding", 1));
         List<Integer> compIds = timeTypeList.stream().map(TimeType::getCompanyId).collect(Collectors.toList());
         //企业内部应用才有权限调用
@@ -261,15 +261,15 @@ public class TimingTask {
                leaveSheet.setOwnerName(user.getName());
                leaveSheet.setStartDate(LocalDate.parse(String.valueOf(map.get("startDate")),dtf));
                leaveSheet.setEndDate(LocalDate.parse(String.valueOf(map.get("endDate")),dtf));
-                int timeType = Integer.parseInt(String.valueOf(map.get("timeType")));
-                leaveSheet.setTimeType(timeType);
+               int timeType = Integer.parseInt(String.valueOf(map.get("timeType")));
+               leaveSheet.setTimeType(timeType);
+               leaveSheet.setTimeDays((Float) map.get("timeDays"));
                if (timeType == 0){
                    TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
-                   leaveSheet.setTimeHours((Float) map.get("timeDays")*allDay.getAllday());
+                   leaveSheet.setTimeHours(leaveSheet.getTimeDays()*allDay.getAllday());
                }else {
                    leaveSheet.setTimeHours((Float) map.get("timeHours"));
                }
-               leaveSheet.setTimeDays((Float) map.get("timeDays"));
                leaveSheet.setLeaveType(Integer.parseInt(String.valueOf(map.get("leaveType"))));
                leaveSheet.setProcinstId(String.valueOf(map.get("procinstId")));
                leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
@@ -317,7 +317,6 @@ public class TimingTask {
 
     //每天1:00 同步昨天的微信请假信息
     @Scheduled(cron = "0 0 1 ? * *")
-//    @Scheduled(cron = "0 59 13 ? * *")
     public void synWxLeave() throws Exception {
         if (isDev) return;
         System.out.println("+++++++++++++++++++微信请假同步开始+++++++++++++++++++");

文件差异内容过多而无法显示
+ 719 - 714
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties


+ 42 - 39
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties

@@ -1,4 +1,4 @@
-# \u7528\u6237\u76F8\u5173\u4FE1\u606F
+# 用户相关信息
 user.notExists=user does not exist
 user.accountNoExist=The account does not exist.
 user.accountDeactivation=The account has been deactivated.
@@ -13,7 +13,7 @@ user.pwdError=password error
 user.NoPermission=You are not authorized to use the system. Please contact the administrator.
 user.roleNameRepeat=The role name cannot be duplicate.
 user.AccountDeactivation=Your account has been deactivated, unable to operate.
-#\u6CE8\u518C\u76F8\u5173
+#注册相关
 register.codeError=Incorrect verification code.
 register.phoneExist=The phone number is already registered.
 register.phoneError=The phone number already exists.
@@ -24,7 +24,7 @@ register.peopleFullAndCallRoot=The number of people has reached the upper limit
 register.peopleNoEnough=Only "{0}" people can be added. Please reduce the number of people imported this time or contact customer service to increase the maximum number of people.
 register.phoneRepeat=Failed to batch create accounts with duplicate mobile phone numbers: {0}.
 register.fullError=Company personnel has reached the upper limit, unable to enable.
-#\u6743\u9650\u76F8\u5173
+#权限相关
 access.operationError=No permission to operate.
 access.viewError=No permission to view.
 access.deleteError=No permission to delete.
@@ -41,13 +41,13 @@ access.otherCompanyProject=No right to view project details of other companies.
 access.otherCompanyPeople=You can only delete the account of a person in the same company.
 access.staffStop={0} has been deactivated. Please enable the employee before transferring.
 access.deactivated=deactivated
-#\u540D\u79F0\u76F8\u5173
+#名称相关
 name.nullNameError=Name cannot be empty.
 name.nameRepeat=The name already exists.
 Company.nameRepeatByParam=The name ['{0}'] already exists.
 name.nameRepeatByParam=Duplicate {0} name.
 name.CategoryNameRepeat=Category name already exists.
-#\u5176\u4ED6
+#其他
 other.error=Other errors occurred.
 other.errorByParameter=Other error {0} occurred.
 other.update=Update failed.
@@ -74,13 +74,13 @@ other.taskGroup=Task grouping
 other.proDailyRep=Project, approved by daily report
 other.modGroupCharge=Modified the group leader, before [{0}, after [{1}]
 other.phoneNull=Mobile number cannot be empty
-# \u8BF7\u6C42\u76F8\u5173
+# 请求相关
 request.countLimit=The number of interface accesses exceeds the limit. Please try again in 1 minute.
 request.illegal=Illegal request
 request.frequently=Too many requests, please try again later.
 request.outTime=Processing timeout...
-# \u90E8\u95E8\u76F8\u5173
-department.duplicateError=save fail\uFF1A department [{0}] already exists
+# 部门相关
+department.duplicateError=save fail department [{0}] already exists
 department.reviewedError=The current department has a report to be approved, unable to operate!
 department.ParentNull=No selected parent department.
 department.modifyOtherError=Departments of other companies cannot be modified.
@@ -94,7 +94,7 @@ department.leaveDate=The current department has been used by leave data.
 department.approvalProcess=The current department has been used by hour approval process data.
 department.leaveAndTravel=The current department has been used by the leave and travel approval process data.
 department.noExistentOrAccess=Department does not exist or has no permission to view.
-# \u65E5\u671F\u76F8\u5173
+# 日期相关
 date.dateNullError=Start date and end date cannot be blank.
 date.startDateError=Start date cannot be earlier than {0}.
 date.endDateError=End date cannot be earlier than {0}.
@@ -103,7 +103,7 @@ date.startThanEnd=The start date cannot be later than the end date.
 date.dateThan365=The date interval shall not exceed 365 days.
 date.formatError=Incorrect date format
 data.NullErrorByRow=Missing date in row '{0}'
-# \u516C\u53F8\u76F8\u5173
+# 公司相关
 Company.nullNameError=Name cannot be empty
 Company.nameRepeat=The name already exists.
 Company.accessError=Operation without permission.
@@ -112,7 +112,7 @@ Company.synError=Synchronization is in progress, please try again later.
 Company.sysDDError=Non DingDing enterprises, unable to synchronize.
 Company.validationError=Validation failed.
 Company.update=Update failed.
-# \u5BA2\u6237\u76F8\u5173
+# 客户相关
 customer.nameRepeat=Customer name already exists.
 customer.noRepeat=Customer number already exists.
 customer.accessError=No permission to delete.
@@ -124,7 +124,7 @@ DD.dateError=The start date cannot be later than the end date.
 DD.keyAndSecretError=The company is not set innerAppkey and innerAppSecrt
 expense.deleteError=Failed to delete. Expense reimbursement data has been bound.
 expense.notExist=The customer ["{0}"] does not exist.
-# \u6587\u4EF6\u76F8\u5173
+# 文件相关
 file.error=File processing error.
 file.generateError=File generation error
 file.dateNull=Please fill in the data before uploading
@@ -138,13 +138,13 @@ file.deleteError=Delete failed.
 file.deleteSuc=Deletion succeeded.
 file.excelScu=System prompt: Excel file exported successfully!
 file.duplicateTemplate=A file with template name [{0}] already exists. Please delete it and download it again.
-# \u914D\u7F6E\u76F8\u5173
+# 配置相关
 config.used=The current configuration ['{0}'] is already in use.
 config.usedNoParam=The current configuration is already in use.
 config.isPrivateDeploy=Please configure isPrivateDeploy: true.
 config.ddCorpId=Please add a core in the company_dingding table: "{0}
 config.companyIdExist=The companyId already exists. If you need to reinitialize, please reset the company first_ The companyId of this piece of data in dingding is null.
-# \u5BA1\u6838\u76F8\u5173
+# 审核相关
 finance.operationStateError=You can only operate in the status of pending approval.
 finance.revokeReport=Only reports in pending approval status can be withdrawn.
 finance.revokeStateError=Only approved status can be revoked.
@@ -155,9 +155,9 @@ finance.skipData=Skipping the following audited data: '{0}'.
 finance.importErrorByAllAdopt=This data has been approved and cannot be imported.
 finance.review=Professional review
 finance.dept=Department review
-# pdf\u76F8\u5173
+# pdf相关
 pdf.previewError=This format does not support online preview.
-# \u65E5\u62A5\u76F8\u5173
+# 日报相关
 profession.existsError=The major already has a daily report and cannot be deleted.
 profession.repairError=The daily report to be filled in cannot be earlier than "{0}". Please contact the system administrator to fill in.
 profession.repeatError=Daily report: "{0}" already exists, please reselect the date range.
@@ -180,7 +180,7 @@ profession.approver=Please set approver
 profession.checker=Please set reviewer
 profession.approved=approved
 profession.batchPass=Batch Pass
-# \u9879\u76EE\u76F8\u5173
+# 项目相关
 project.deleteErrorByProject=Failed to delete, bound item.
 project.deleteErrorByMaster=Failed to delete, the master project has been bound.
 project.DateRelation=The data has been associated with the following items and cannot be deleted: {0}.
@@ -225,12 +225,12 @@ project.processDocuments=Project process documents
 project.deliverable=Project Deliverable
 project.manage = manage
 project.example=Example Project
-# \u4F9B\u8D27\u76F8\u5173
+# 供货相关
 provider.noRepeat=Vendor No. already exists.
 provider.classNameRepeat=The supplier name under this category already exists.
 provider.NameRepeat=The supplier name already exists.
 provider.deleteError=Cannot delete, the following items are already associated with this vendor: {0}.
-# \u4EFB\u52A1\u76F8\u5173
+# 任务相关
 Stages.RepeatInGroup=The task list already exists in the current group and cannot be added repeatedly.
 Stages.deleteError=There are tasks in this task list, which cannot be deleted.
 Stages.SubTasksError=Please complete all subtasks first.
@@ -242,11 +242,11 @@ Stages.ListNull=The task list is empty and cannot be saved.
 Stages.ListNotExist=The task list ["{0}"] does not exist.
 Stages.leastOneGroup=Keep at least one task group.
 Stages.example=Example Task
-#\u5206\u7EC4\u76F8\u5173
+#分组相关
 group.RepeatName=Group has duplicate name.
 group.userNull=The user ["{0}"] does not exist. Please add the member in the organization structure.
 group.userNullById=The user ["{0}", "{1}"] does not exist. Please add the member in the organization structure.
-#\u5FAE\u4FE1\u76F8\u5173
+#微信相关
 wx.TicketError=jsapiTicket Get failed.
 wx.bindError=The user has not been bound to WeChat and needs to log in through the account password.
 wx.dockError=The enterprise has not connected to WeChat.
@@ -256,7 +256,7 @@ wx.noNewMemberUp=No new member updates
 wx.AssCompleted=Processing completed. Currently, no new personnel need WeChat identity of affiliated enterprises.
 wx.AssCompletedByParam=Processing completed. This time: {0} people are automatically associated:{1}.
 wx.noWXUser=Only enterprise WeChat users support this operation.
-#\u8BF7\u5047\u76F8\u5173
+#请假相关
 leave.leave=leave
 leave.leaveOfDay=Leave of the day
 leave.businessRepeat=There is already a travel application in this period, which cannot be submitted repeatedly.
@@ -298,16 +298,16 @@ leave.compensatory=Compensatory leave
 leave.paternity=Paternity leave
 leave.notFill=Not filled in
 leave.clockIn=Clock in
-#\u62A5\u9500\u76F8\u5173
+#报销相关
 Reimbursement.nameNull=The name of the reimbursement applicant cannot be blank.
 Reimbursement.costTypeNull=Expense type cannot be empty
 Reimbursement.dataNull=The filling date cannot be blank
 Reimbursement.PeopleNull=Reimbursement applicant ["{0}"] does not exist.
 Reimbursement.TypeError=The [{1}] type does not exist in the current expense type [{0}].
-#\u85AA\u8D44\u76F8\u5173
+#薪资相关
 salary.uploadErrorByAdopt={0} The monthly salary has been approved and cannot be uploaded.
 salary.lackAndUpAgain=The salary cost of ["{0}"] is missing, please modify the data and upload again.
-#\u62A5\u8868\u76F8\u5173
+#报表相关
 report.report=report form
 report.userNull=User ["{0}"] does not exist in the financial statement, please import again.
 report.warningType=Cost budget with hour alert type has been set, and importing hours is not supported temporarily.
@@ -321,7 +321,9 @@ report.hourAll=You participated in {0} projects last week with a total of {1} ho
 report.dailyReject=The {1} project in the daily report you filled in by {0} was rejected by [{2}]. Reason: {3}
 report.reportApp=Daily report approved
 report.hourReportNoFilled=Your work hour report for {0} has not been completed.
-#\u6A21\u677F\u76F8\u5173
+report.lackCardTime=Lack attendance record: {0}
+report.timeReachLimitError=Report working time cannot be larger than attendance time: {0}
+#模板相关
 Template.subProject=subproject
 Template.AlreadyExists=The template name already exists.
 Template.lackSonProject=The sub item column is missing. Please download the latest template.
@@ -334,13 +336,13 @@ Template.finishProject=completed the project
 Template.revokeProject=cancelled the project
 Template.restart=Restarted the project
 Template.projectSus=suspended the project
-#\u89D2\u8272\u76F8\u5173
+#角色相关
 role.role=role
 role.noExist=The role does not exist
 role.deleteRootError=Cannot delete super administrator
 role.deleteErrorByDefault=This role is the default role when adding new employees. Please set other roles as default before attempting to delete
 role.deleteErrorByHavePeople=There are related persons in this role. Please modify them to other roles before deleting them.
-#\u5458\u5DE5\u76F8\u5173
+#员工相关
 staff.nameNullByRow=Employee name is missing in row "{0}".
 staff.peopleNullAndAdd=The person ["{0}"] does not exist. Please add it in the organization structure first or import it synchronously through Ding Talk.
 staff.proportionError=The personnel ["{0}"] "+" allocation proportion does not meet 100%. The current proportion ["{1}"%], please check.
@@ -349,23 +351,24 @@ staff.deleteErrorByDaily=The employee has daily reports filled in and cannot be
 staff.deleteErrorByTask=The employee has a task and cannot be deleted.
 staff.deleteErrorByProject=The employee has a responsible project and cannot be deleted.
 staff.jobNoNull=The job number cannot be empty
-#\u6570\u636E\u76F8\u5173
+#数据相关
 data.importRepeat=Do not import duplicate data
 data.importSucRow=Successfully imported '{0}' pieces of data.
 data.OversizeError=The data volume is too large, please export in different time periods
+data.skip=Auto Skip '{0}' item code already exists: '{1}'.
 data.upSkip=Auto update '{0}' item code already exists: '{1}'.
 data.exceedMonthError=The data acquisition period shall not exceed one month.
 data.verificationError=Data error,verification failed
-#\u4F9B\u5E94\u5546\u76F8\u5173
+#供应商相关
 supplier.noExist=Supplier ["{0}"] does not exist in supplier category ["{1}"].
 supplier.addSupplier=Please fill in the supplier data
 supplier.lackNameOnRow=The supplier name is missing in row "{0}"
 supplier.nameRepeat=The current imported data has duplicate supplier names ["{0}"].
-#\u7814\u7A76\u4E2D\u5FC3\u76F8\u5173
+#研究中心相关
 research.addData=Please fill in the data of the research center.
 research.nameNull=The center name is missing in row '{0}'.
 research.nameRepeat=The current imported data has duplicate center name ["{0}"].
-#\u6761\u76EE
+#条目
 entry.No=Job No
 entry.name=name
 entry.materialCost=Material cost
@@ -477,7 +480,7 @@ entry.noFill=Not filled
 entry.workingHours=Working hours
 entry.none=nothing
 entry.deviation=deviation
-#\u6587\u4EF6\u540D
+#文件名
 fileName.financialCost={0}_ Financial Staff Cost Template
 fileName.projectImport={0}_ Project import Template
 fileName.resourceDemand=Resource demand statistics report_ {0}
@@ -530,8 +533,8 @@ excel.projectManager=The project manager must exist in the participants
 excel.projectCharge=The person in charge must exist in the participants
 excel.dateFormat=Date Format:yyyy-MM-dd
 excel.forExample=for example: 2021-01-01
-excel.yesPublic=yes\uFF1Apublic project
-excel.noPublic=no\uFF1Aaverage project
+excel.yesPublic=yespublic project
+excel.noPublic=noaverage project
 excel.yes=yes
 excel.no=no
 excel.normal=normal
@@ -668,12 +671,12 @@ excel.standard=Standard working hours
 excel.actual=Actual working time
 excel.leave=Time of leave
 excel.workWeather=Whether the working hours are met
-#\u63A8\u9001
+#推送
 push.fillIn=Your work hour report for today has not been completed.
 push.name=Qu Yue ting
 push.Dep=Marketing Department
 push.ASAP=Please fill in as soon as possible.
-#\u9636\u6BB5
+#阶段
 stages.engineering=engineering design
 stages.research=Software and hardware R&D
 stages.service=Customer service work order processing
@@ -701,13 +704,13 @@ stages.withdrawn=Withdrawn
 stages.passed=Passed
 stages.toBeSub=To be submitted
 stages.upTask=Update task progress to
-#\u7EDF\u8BA1\u8868
+#统计表
 Statistics.tj=Statistics
 Statistics.OvertimeDet=Overtime Details
 Statistics.ByPro=Statistics by project
 Statistics.ByPeople=Statistics by personnel
 Statistics.ProjectCostBase=Project Cost Baseline Table_
-#\u661F\u671F
+#星期
 week.Monday=Monday
 week.Tuesday=Tuesday
 week.Wednesday=Wednesday

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

@@ -45,7 +45,7 @@
     <!-- 查询审核中的请假单信息 -->
     <select id="selectApprovalList" resultType="com.management.platform.entity.LeaveSheet">
        select * from leave_sheet
-       where procinst_id is not NULL AND procinst_id != '' and status = 1 and DATEDIFF(NOW(),indate) &lt; 30
+       where procinst_id is not NULL AND procinst_id is not null and status = 1 and DATEDIFF(NOW(),indate) &lt; 30
    </select>
 
     <!-- 查询某段时间内的请假列表 -->

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

@@ -61,6 +61,7 @@
         a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType,a.start_time as startTime,u.job_number as jobNumber,
         a.end_time  as endTime, d.name as subProjectName,d.code as subProjectCode,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
+        ,c.plate1 as plate1,c.plate2 as plate2,c.plate3 as plate3,c.plate4 as plate4,c.plate5 as plate5
         , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId,a.custom_data as customData
         ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName,department.department_id as departmentId, a.overtime_hours as overtimeHours, a.custom_text as customText,a.project_audit_time  as projectAuditTime,project_main.name as projectMainName
         FROM report AS a
@@ -141,6 +142,7 @@
         , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as
         degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId,
         a.custom_data as customData
+        ,c.plate1 as plate1,c.plate2 as plate2,c.plate3 as plate3,c.plate4 as plate4,c.plate5 as plate5
         ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as
         departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText, a.project_audit_time as
         projectAuditTime,project_main.name as projectMainName
@@ -189,6 +191,7 @@
         a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
         a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState,a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
+        ,c.plate1 as plate1,c.plate2 as plate2,c.plate3 as plate3,c.plate4 as plate4,c.plate5 as plate5
         , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId, a.custom_data as customData
         ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText, a.project_audit_time as projectAuditTime,project_main.name as projectMainName
         FROM report AS a

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -139,7 +139,7 @@
                             <el-col :span="12">
                                 <el-link @click="toggleGroup"><i v-if="selectedGroup != null" :class="groupWidth==0?'el-icon-d-arrow-right':'el-icon-d-arrow-left'" style="margin-top:10px;">{{selectedGroup.name}}</i></el-link>
                             </el-col>
-                            <el-col :span="8" style="float:right;width:380px">
+                            <el-col :span="8" style="float:right;width:420px">
                                 <el-select v-model="order" size="small" style="background:#fff;display:inline-block;" @change="orderChange">
                                     <el-option v-for="item in orderList" :key="item.id" :label="item.name" :value="item.id">
                                         <span>{{item.name}}</span>

+ 19 - 12
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -352,8 +352,11 @@
                     <span v-if="reportTimeType.type == 3">{{$t('time.hour')}}</span>
 
                     <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}{{$t('time.hour')}}</span>
-                    <span v-if="(user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
-                    <el-button type="default" style="margin-left:5px;" size="mini" :loading="syncTimeLoading" v-if="user.timeType.syncCorpwxTime==1 && (workForm.createDate == today || (!workForm.time))" icon="el-icon-refresh" @click="refreshWXCardTime(workForm.createDate)"></el-button>
+                    <!--批量填报和批量代填不显示考勤记录-->
+                    <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
+                    <el-button type="default" style="margin-left:5px;" size="mini" :loading="syncTimeLoading" 
+                    v-if="!isBatch && user.timeType.syncCorpwxTime==1 && (workForm.createDate == today || !workForm.time || workForm.time.workHours == 0)" icon="el-icon-refresh" 
+                            @click="refreshWXCardTime(workForm.createDate)"></el-button>
                 </el-form-item>
                 <!-- 000000 -->
                 <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'margin-top:10px;':''">
@@ -1952,6 +1955,7 @@
                 // console.log('test',this.depData,this.data[0].membCount,this.reportList.length);
             },
             refreshWXCardTime(workdate) {
+                if (!workdate) return;
                 this.syncTimeLoading = true;
                 this.http.post('/user-corpwx-time/getPunchRecordBySelf',{
                     date: workdate,
@@ -5707,24 +5711,27 @@
                         for (var t=0;t<this.workForm.domains.length; t++) {
                             totalTime += parseFloat(this.workForm.domains[t].workingTime);
                         }
-                        
-                        if(this.user.timeType.notAllowedNoAttendance == 1){
-                            if (this.workForm.time){
-                                if (this.workForm.time.workHours == 0){
+                        //批量填报不校验考勤时长,交给后台校验
+                        if (!this.isBatch) {
+                            if(this.user.timeType.notAllowedNoAttendance == 1){
+                                if (this.workForm.time){
+                                    if (this.workForm.time.workHours == 0){
+                                        this.$message({
+                                            message: this.$t('wu-kao-qin-ji-lu-bu-ke-tian-bao'),
+                                            type: 'error'
+                                        })
+                                        return
+                                    }
+                                }else{
                                     this.$message({
                                         message: this.$t('wu-kao-qin-ji-lu-bu-ke-tian-bao'),
                                         type: 'error'
                                     })
                                     return
                                 }
-                            }else{
-                                this.$message({
-                                    message: this.$t('wu-kao-qin-ji-lu-bu-ke-tian-bao'),
-                                    type: 'error'
-                                })
-                                return
                             }
                         }
+                        
 
                         if (this.reportTimeType.type == 1 && this.workForm.time) {
                             if (this.workForm.time.workHours && totalTime > parseFloat(this.workForm.time.workHours)) {