QuYueTing преди 3 дни
родител
ревизия
024521c2bc
променени са 18 файла, в които са добавени 231 реда и са изтрити 110 реда
  1. 1 1
      fhKeeper/formulahousekeeper/collectdata/src/main/java/com/management/collectdata/controller/DataCollectController.java
  2. 51 39
      fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/controller/UserController.java
  3. 2 0
      fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/UserService.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  5. 16 0
      fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-platform-mld/src/main/resources/application.yml
  7. 4 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  8. 5 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java
  9. 5 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  10. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysRoleServiceImpl.java
  11. 11 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserFvTimeServiceImpl.java
  12. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  13. 6 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/BeiSenUtils.java
  14. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeUtil.java
  15. 87 18
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceServiceImpl.java
  16. 25 23
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceStaffServiceImpl.java
  17. 0 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-privatelew.yml
  18. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ApplyFormMapper.xml

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

@@ -401,7 +401,7 @@ public class DataCollectController {
                 List<LeaveSheet> leaveSheetList = getLeaveSheetInRange(pageBO.getStartDate(), pageBO.getEndDate(), null);
                 if (leaveSheetList != null && leaveSheetList.size() > 0) {
                     for (LeaveSheet leaveSheet : leaveSheetList) {
-                        List<UserFvTime> userFvTimeList = resList.stream().filter(userFvTime -> leaveSheet.getStartDate().isEqual(userFvTime.getWorkDate())).collect(Collectors.toList());
+                        List<UserFvTime> userFvTimeList = resList.stream().filter(userFvTime -> leaveSheet.getStartDate().isEqual(userFvTime.getWorkDate()) && leaveSheet.getOwnerId().equals(userFvTime.getUserId())).collect(Collectors.toList());
                         if (userFvTimeList != null && userFvTimeList.size() > 0) {
                             //有记录的话,更新考勤开始时间
                             UserFvTime userFvTime = userFvTimeList.get(0);

+ 51 - 39
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/controller/UserController.java

@@ -46,48 +46,25 @@ import java.util.stream.Collectors;
 public class UserController {
     @Autowired
     private UserService userService;
-
     @Autowired
     private UserExcludeService excludeService;
 
     @Resource
     private HttpServletRequest request;
 
-    @Resource
-    private LdapTemplate ldapTemplate;
-
     @Resource
     private FeishuInfoService feishuInfoService;
-
     @Resource
-    private UserCustomMapper userCustomMapper;
+    private ProjectMapper projectMapper;
 
     @Resource
-    private CompanyMapper companyMapper;
+    private UserCustomMapper userCustomMapper;
     @Resource
     private TimeTypeMapper timeTypeMapper;
     @Resource
-    private SysRoleService sysRoleService;
-    @Resource
-    private ProjectBasecostSettingMapper projectBasecostSettingMapper;
-    @Resource
-    private CompanyReportMapper companyReportMapper;
-    @Resource
     private DepartmentMapper departmentMapper;
     @Resource
-    private SysRoleMapper sysRoleMapper;
-    @Resource
-    private ExpenseMainTypeService expenseMainTypeService;
-    @Resource
-    private ExpenseTypeService expenseTypeService;
-    @Resource
     private ReportMapper reportMapper;
-    @Value("${spring.ldap.urls}")
-    private String ldapUrl;
-    @Value("${spring.ldap.base.dcFirst}")
-    private String dcFirst;
-    @Value("${spring.ldap.base.dcSecond}")
-    private String dcSecond;
     @Value(value = "${upload.path}")
     private String path;
     @Resource
@@ -106,14 +83,16 @@ public class UserController {
     private UserMapper userMapper;
     @Resource
     private UserCertMapper userCertMapper;
+    @Resource
+    private TaskMapper taskMapper;
 
     @Resource
     private ParticipationMapper participationMapper;
-    @Resource
-    private ProjectMapper projectMapper;
     public static HashMap<String, Integer> corpddJobCenter = new HashMap();
     //用于控制线程锁
     public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
+    @Autowired
+    private ProjectLeaderMapper projectLeaderMapper;
 
 
     /**
@@ -786,18 +765,6 @@ public class UserController {
     public HttpRespMsg deactiveUser(User user, @RequestParam(required = false, defaultValue = "true") Boolean isPermanent) {
         HttpRespMsg msg = new HttpRespMsg();
         Integer companyId = userService.getById(request.getHeader("token")).getCompanyId();
-        TimeType timeType = timeTypeMapper.selectById(companyId);
-        if (isPermanent && timeType.getReportAuditType() == 8) {
-            //项目经理先审核,复核人后审核,校验复核人
-            LambdaQueryWrapper<Project> projectLambdaQueryWrapper = new LambdaQueryWrapper<Project>();
-            projectLambdaQueryWrapper.eq(Project::getReviwerId, user.getId());
-            int cnt = projectMapper.selectCount(projectLambdaQueryWrapper);
-            if (cnt > 0) {
-                msg.setCode("project");
-                msg.setMsg("当前用户担任项目复核人,需要转移给其他人才能停用");
-                return msg;
-            }
-        }
 
         //需要检查待他审核的日报
         LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
@@ -809,6 +776,45 @@ public class UserController {
             msg.setError("当前员工有担任审核人的日报,请确认处理方式?");
             return msg;
         }
+        //检查是否有担任创建人的任务,把任务进行转移
+        LambdaQueryWrapper<Task> taskQueryWrapper = new LambdaQueryWrapper<>();
+        taskQueryWrapper.eq(Task::getCreaterId,user.getId()).isNotNull(Task::getProjectId);
+        Integer taskCount = taskMapper.selectCount(taskQueryWrapper);
+        if(taskCount>0){
+            //查找具体的项目
+            taskQueryWrapper.select(Task::getProjectId);
+            List<Task> taskList = taskMapper.selectList(taskQueryWrapper);
+            List<Integer> projectIdList = taskList.stream().map(Task::getProjectId).distinct().collect(Collectors.toList());
+            LambdaQueryWrapper<Project> projectQueryWrapper = new LambdaQueryWrapper<>();
+            projectQueryWrapper.in(Project::getId,projectIdList).select(Project::getId, Project::getProjectName, Project::getInchargerId);
+            List<Project> projectList = projectMapper.selectList(projectQueryWrapper);
+            if (projectList.size() > 0) {
+                List<ProjectLeader> projectLeaders = projectLeaderMapper.selectList(new QueryWrapper<ProjectLeader>().in("project_id", projectList.stream().map(Project::getId).collect(Collectors.toList())));
+                List<String> leaderList = projectLeaders.stream().map(ProjectLeader::getLeaderId).collect(Collectors.toList());
+                List<User> leaderUsers = userMapper.selectList(new QueryWrapper<User>().in("id", leaderList));
+                for (ProjectLeader projectLeader : projectLeaders) {
+                    projectLeader.setUserName(leaderUsers.stream().filter(u -> u.getId().equals(projectLeader.getLeaderId())).findFirst().get().getName());
+                }
+                //把项目经理也加进去
+                List<User> pmList = userMapper.selectList(new QueryWrapper<User>().in("id", projectList.stream().map(Project::getInchargerId).collect(Collectors.toList())));
+                for (Project project : projectList) {
+                    List<ProjectLeader> collect = projectLeaders.stream().filter(pl -> pl.getProjectId().equals(project.getId())).collect(Collectors.toList());
+                    Optional<User> first = pmList.stream().filter(u -> u.getId().equals(project.getInchargerId())).findFirst();
+                    if (first.isPresent()) {
+                        ProjectLeader projectLeader = new ProjectLeader();
+                        projectLeader.setLeaderId(first.get().getId());
+                        projectLeader.setProjectId(project.getId());
+                        projectLeader.setUserName(first.get().getName());
+                        collect.add(projectLeader);
+                    }
+                    project.setLeaderList(collect);
+                }
+            }
+
+            msg.data = projectList;
+            msg.code = "task";
+            return msg;
+        }
         user.setIsActive(0);
         userService.updateById(user);
         if (isPermanent) {
@@ -817,6 +823,12 @@ public class UserController {
         return msg;
     }
 
+    @RequestMapping("/deactiveAndTransferTask")
+    public HttpRespMsg deactiveAndTransferTask(User user, String json) {
+        return userService.deactiveAndTransferTask(user, json, request);
+    }
+
+
 
     @RequestMapping("/batchUpdateDept")
     public HttpRespMsg batchUpdateDept(String userIds, Integer deptId) {return userService.batchUpdateDept(userIds, deptId, request); }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/UserService.java

@@ -124,4 +124,6 @@ public interface UserService extends IService<User> {
     HttpRespMsg getChargeUserByProjectId(Integer projectId, HttpServletRequest request);
 
     HttpRespMsg getMyDeptSimpleUserList();
+
+    HttpRespMsg deactiveAndTransferTask(User user, String json, HttpServletRequest request);
 }

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

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

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -2862,6 +2862,22 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return msg;
     }
 
+    @Override
+    public HttpRespMsg deactiveAndTransferTask(User user, String json, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        JSONArray array = JSONArray.parseArray(json);
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject jsonObject = array.getJSONObject(i);
+            Integer projectId = jsonObject.getInteger("projectId");
+            String toUserId = jsonObject.getString("toUserId");
+            taskMapper.update(null, new UpdateWrapper<Task>().set("creater_id", toUserId).eq("project_id", projectId).eq("creater_id", user.getId()));
+        }
+        user.setIsActive(0);
+        userMapper.updateById(user);
+
+        return msg;
+    }
+
 
     @Override
     public HttpRespMsg getUserListByRole(HttpServletRequest request,String tableName) {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform-mld/src/main/resources/application.yml

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://1.94.62.58:17089/man_mld_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://1.94.62.58:17089/man_mld?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: P011430@Huoshi*
     hikari:

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

@@ -1668,7 +1668,7 @@ public class ReportController {
                 for (Report report : reportList) {
                     if (!StringUtils.isEmpty(report.getExtraField4())) {
                         String errorMsg = null;
-                        Optional<ErpOrderInfo> first = orderList.stream().filter(order -> order.getOrderId().equals(report.getExtraField4())).findFirst();
+                        Optional<ErpOrderInfo> first = orderList.stream().filter(order -> order.getOrderId().equals(report.getExtraField4()) && order.getLine().toString().equals(report.getExtraField5())).findFirst();
                         if (first.isPresent()) {
                             //如果是清洁打包的分组,需要校验工单的时效性,工单关闭日期的当月或者下月
                             ErpOrderInfo order = first.get();
@@ -1702,12 +1702,11 @@ public class ReportController {
                                                 }
                                             }
                                         }
-
                                     }
                                 }
                             }
                         } else {
-                            errorMsg = "erpOrderInfo表中工单号不存在:"+report.getExtraField4();
+                            errorMsg = "erpOrderInfo表中不存在(工单号:"+report.getExtraField4()+",行号:"+report.getExtraField5()+")";
                         }
                         if (errorMsg != null) {
                             HttpRespMsg httpRespMsg = new HttpRespMsg();
@@ -1991,8 +1990,8 @@ public class ReportController {
             for (Report r : reportList) {
                 UserFvTime fvTime = userFvTimeService.getOne(new QueryWrapper<UserFvTime>().eq("work_date", r.getCreateDate()).eq("company_id", user.getCompanyId()).eq("user_id", r.getCreatorId()));
                 if (fvTime == null) {
-                    //无考勤按八小时填报
-                    r.setWorkingTime(8.0 * r.getProgress()/100);
+                    //无考勤按设定的每日工时填报
+                    r.setWorkingTime((double)comTimeType.getAllday() * r.getProgress()/100);
                 } else {
                     r.setWorkingTime(fvTime.getWorkHours().doubleValue() * r.getProgress()/100);
                 }

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

@@ -329,6 +329,7 @@ public class UserFvTimeController {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         JSONObject reqParam = new JSONObject();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).select("id", "job_number"));
         List<UserFvTime> allList = userFvTimeService.list(new QueryWrapper<UserFvTime>().between("work_date", startDate, endDate).eq("company_id", companyId));
         DateTimeFormatter date=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -371,8 +372,8 @@ public class UserFvTimeController {
                 if(bigDecimal.intValue()>0){
                     bigDecimal=bigDecimal.subtract(new BigDecimal(1.5));
                 }
-                //存在打卡记录 超过8小时或者小于0小时按照8小时算
-                userFvTime.setWorkHours((bigDecimal.floatValue()<=0||bigDecimal.floatValue()>8)?8:bigDecimal.floatValue());
+                //存在打卡记录 超过正常工作时长的进行调整
+                userFvTime.setWorkHours((bigDecimal.floatValue()<=0||bigDecimal.floatValue()>timeType.getAllday())?timeType.getAllday():bigDecimal.floatValue());
                 Optional<UserFvTime> first = allList.stream().filter(al -> al.getUserId().equals(user.get().getId()) && al.getWorkDate().equals(LocalDate.parse(String.valueOf(item.get("signDate")), date))).findFirst();
                 if(!first.isPresent()){
                     userFvTimeList.add(userFvTime);
@@ -395,14 +396,13 @@ public class UserFvTimeController {
             return httpRespMsg;
         }
         User user = userMapper.selectById(request.getHeader("token"));
-        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         //根据配置决定是否过滤掉周末
         List<LocalDate> workDaysListInRange = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate, timeType.getIncludeWeekends());
         List<UserFvTime> timeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().in("work_date", workDaysListInRange).eq("company_id", user.getCompanyId()).eq("user_id", user.getId()));
         double sum = 0;
         for (LocalDate workDay : workDaysListInRange) {
             if (timeList.stream().filter(tl -> tl.getWorkDate().equals(workDay)).count() == 0) {
-                sum += 8.0;
+                sum += timeType.getAllday();
             } else {
                 sum += timeList.stream().filter(tl -> tl.getWorkDate().equals(workDay)).findFirst().get().getWorkHours();
             }
@@ -451,7 +451,7 @@ public class UserFvTimeController {
         double sum = 0;
         for (LocalDate workDay : workDaysListInRange) {
             if (userFvTimeList.stream().filter(tl -> tl.getWorkDate().equals(workDay)).count() == 0) {
-                sum += 8.0;
+                sum += timeType.getAllday();
             } else {
                 sum += userFvTimeList.stream().filter(tl -> tl.getWorkDate().equals(workDay)).findFirst().get().getWorkHours();
             }

+ 5 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -5818,7 +5818,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                             new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", reportCreator.getDepartmentId()).orderByAsc("seq"));
                                     List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", reportCreator.getCompanyId()));
                                     setReportWorkflowAuditor(auditWorkflowList, allDeptList, report,timeType);
-                                } if (company.getId() == 7544){
+                                } else if (company.getId() == 7544){
                                     //加力,按照设置的审核模式审核:普通员工到项目经理,项目经理到指定审核人
                                     report.setState(0);//待审核员审核
                                     String projectAuditorId;
@@ -5917,6 +5917,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //只保存工时不为0的数据
                     List<Report> fReportList = reportList.stream().filter(r->r.getWorkingTime()>0).collect(Collectors.toList());
                     reportService.saveBatch(fReportList);
+                    //生成员工提交日志
+                    saveFillReportLog(reportList);
                     msg.data = dataCount;
                     String originName = fileName;
                     //定义一个独立的文件夹
@@ -5925,8 +5927,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (!dir.exists()) {
                         dir.mkdir();
                     }
-
-                    System.out.println("fileName=="+originName);
                     String[] names = originName.split("\\.");
                     String destFileName = names[0] + "_"+System.currentTimeMillis()+"."+names[1];
                     File destFile = new File(dir, destFileName);
@@ -6324,9 +6324,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 } else {
                     //如果开启了审批流的显示,需要插入日报提交记录表
                     reportService.saveBatch(reportList);
-                    if (timeType.getShowFillauditTime() == 1) {
-                        saveFillReportLog(reportList);
-                    }
+                    saveFillReportLog(reportList);
                     msg.data = dataCount;
                     String originName = fileName;
                     //定义一个独立的文件夹
@@ -6336,7 +6334,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         dir.mkdir();
                     }
 
-                    System.out.println("fileName=="+originName);
                     String[] names = originName.split("\\.");
                     String destFileName = names[0] + "_"+System.currentTimeMillis()+"."+names[1];
                     File destFile = new File(dir, destFileName);
@@ -6399,6 +6396,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             report.setIsDeptAudit(0);
             report.setIsFinalAudit(1);
         } else {
+            System.out.println("有审批流");
             //取第一个审核节点
             AuditWorkflowTimeSetting firstNode = auditWorkflowList.get(0);
             report.setIsFinalAudit(auditWorkflowList.size() > 1?0:1);

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysRoleServiceImpl.java

@@ -241,6 +241,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
         List<SysRoleFunction> rfList = new ArrayList<>();
         for (SysFunction function : functions) {
+            ///默认不要开通隐藏工时数
+            if (function.getName().equals("隐藏工时数")) {
+                continue;
+            }
             SysRoleFunction rf = new SysRoleFunction();
             rf.setFunctionId(function.getId());
             rf.setRoleId(smanager.getId());
@@ -273,6 +277,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
         List<SysRoleFunction> rfList = new ArrayList<>();
         for (SysFunction function : functions) {
+            ///默认不要开通隐藏工时数
+            if (function.getName().equals("隐藏工时数")) {
+                continue;
+            }
             SysRoleFunction rf = new SysRoleFunction();
             rf.setFunctionId(function.getId());
             rf.setRoleId(role.getId());

+ 11 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserFvTimeServiceImpl.java

@@ -1,14 +1,17 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.User;
 import com.management.platform.entity.UserFvTime;
+import com.management.platform.mapper.BusinessTripMapper;
 import com.management.platform.mapper.UserFvTimeMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.UserFvTimeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.task.DataCollectTask;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
@@ -35,6 +38,8 @@ public class UserFvTimeServiceImpl extends ServiceImpl<UserFvTimeMapper, UserFvT
 
     @Resource
     private UserMapper userMapper;
+    @Autowired
+    private BusinessTripMapper businessTripMapper;
 
     @Override
     public void syncUserFvTime(Integer specialCompanyId, String userId, String startDate, String endDate) {
@@ -83,6 +88,7 @@ public class UserFvTimeServiceImpl extends ServiceImpl<UserFvTimeMapper, UserFvT
                 Map<String, User> userMap = users.stream().filter(t -> StringUtils.isNotBlank(t.getJobNumber()))
                         .collect(Collectors.toMap(User::getJobNumber, t -> t));
                 while (offset < totalNum) {
+                    System.out.println("发起请求,offset: " + offset);
                     requestBody.put("pageNo", offset);
                     requestBody.put("pageSize", pageSize);
                     ResponseEntity<List<UserFvTime>> listResponse = restTemplate.exchange(
@@ -116,6 +122,11 @@ public class UserFvTimeServiceImpl extends ServiceImpl<UserFvTimeMapper, UserFvT
                                     } else {
                                         toAddList.add(tmp);
                                     }
+                                    //如果当天有出差生成的考勤记录,要删除
+                                    int existBTrip = userFvTimeMapper.selectCount(new QueryWrapper<UserFvTime>().likeRight("procinst_id", "bustrip_").eq("company_id", specialCompanyId).eq("user_id", tmp.getUserId()).eq("work_date", tmp.getWorkDate()));
+                                    if(existBTrip > 0){
+                                        userFvTimeMapper.delete(new QueryWrapper<UserFvTime>().likeRight("procinst_id", "bustrip_").eq("company_id", specialCompanyId).eq("user_id", tmp.getUserId()).eq("work_date", tmp.getWorkDate()));
+                                    }
                                 }
                                 if(!CollectionUtils.isEmpty(toAddList)){
                                     userFvTimeMapper.batchInsertCollect(toAddList);

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -638,6 +638,7 @@ public class TimingTask {
         if(companyList.size()>0){
             Company company = companyList.get(0);
             Integer companyId = company.getId();
+            TimeType timeType = timeTypeMapper.selectById(companyId);
             String dateString = date.format(LocalDate.now().minusDays(1));
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).select("id", "job_number"));
             List<UserFvTime> allList = userFvTimeService.list(new QueryWrapper<UserFvTime>().between("work_date", dateString, dateString).eq("company_id", companyId));
@@ -674,7 +675,7 @@ public class TimingTask {
                     Duration between = Duration.between(LocalTime.parse(String.valueOf(item.get("clockInTime")), time), LocalTime.parse(String.valueOf(item.get("afterWorkTime")), time));
                     BigDecimal bigDecimal=new BigDecimal(between.toHours());
                     bigDecimal=bigDecimal.subtract(new BigDecimal(1.5));
-                    userFvTime.setWorkHours((bigDecimal.floatValue()<=0||bigDecimal.floatValue()>8)?8:bigDecimal.floatValue());
+                    userFvTime.setWorkHours((bigDecimal.floatValue()<=0||bigDecimal.floatValue()>timeType.getAllday())?timeType.getAllday():bigDecimal.floatValue());
                     Optional<UserFvTime> first = allList.stream().filter(al -> al.getUserId().equals(user.get().getId()) && al.getWorkDate().equals(LocalDate.parse(String.valueOf(item.get("signDate")), date))).findFirst();
                     if(!first.isPresent()){
                         userFvTimeList.add(userFvTime);

+ 6 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/BeiSenUtils.java

@@ -115,12 +115,14 @@ public class BeiSenUtils {
         serviceType.add(1);
         List<String> employType=new ArrayList<>();
         employType.add("0");
+        employType.add("1");
         employType.add("2");
         List<Integer> empStatus=new ArrayList<>();
-        empStatus.add(2);
-        empStatus.add(3);
-        empStatus.add(6);
-        empStatus.add(8);
+        empStatus.add(1);empStatus.add(2);empStatus.add(3);empStatus.add(6);empStatus.add(7);empStatus.add(8);
+//        empStatus.add(2);
+//        empStatus.add(3);
+//        empStatus.add(6);
+//        empStatus.add(8);
         requestMap.put("serviceType",serviceType);
         requestMap.put("employType",employType);
         requestMap.put("empStatus",empStatus);

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

@@ -37,7 +37,9 @@ public class CodeUtil {
 
     public static void main(String[] args) {
         double temp = 1.45;
-        DecimalFormat decimalFormat = new DecimalFormat("0.#");
-        System.out.println(decimalFormat.format(temp));
+        String a = "1";
+        Integer b = new Integer(1);
+        System.out.println(b.toString());
+        System.out.println(b.equals(a));
     }
 }

+ 87 - 18
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceServiceImpl.java

@@ -8,6 +8,7 @@ import com.management.platform.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.WorkDayCalculateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.*;
 
@@ -27,6 +28,7 @@ import java.time.*;
 import java.time.chrono.ChronoLocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -266,6 +268,34 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
         List<Department> departmentList = departmentService.list(new QueryWrapper<Department>());
         List<AttendanceStaff> staffList = attendanceStaffService.list(new QueryWrapper<AttendanceStaff>().between("clock_date", firstDay, lastDay));
         List<ApplyForm> applyFormList = applyFormService.getListByFirstDateAndLastDate(startDate, endDate);
+        //对于请假,按照交叉的部分重新计算时长
+        for (ApplyForm applyForm : applyFormList) {
+            if (applyForm.getType() == 3) {
+                //每天8小时工作日
+//                if (applyForm.getApplyId().equals("LEW1157")) {
+//                    System.out.println(applyForm.getStartTime() + " " + applyForm.getEndTime());
+//                }
+                if (applyForm.getStartTime().toLocalDate().isBefore(startDate)) {
+                    //计算相差天数
+                    long days = ChronoUnit.DAYS.between(applyForm.getStartTime().toLocalDate(), startDate);
+                    applyForm.setStartTime(applyForm.getStartTime().plusDays(days));
+                }
+                if (applyForm.getEndTime().toLocalDate().isAfter(endDate)) {
+                    long days = ChronoUnit.DAYS.between(endDate, applyForm.getEndTime().toLocalDate());
+                    applyForm.setEndTime(applyForm.getEndTime().minusDays(days));
+                }
+//                if (applyForm.getApplyId().equals("LEW1157")) {
+//                    System.out.println("调整后为:"+applyForm.getStartTime() + " " + applyForm.getEndTime());
+//                    System.out.println("原来时长为:"+applyForm.getSumTime());
+//                }
+                //只计算工作日
+                int workDays = WorkDayCalculateUtils.getWorkDaysCountInRange(formatter2.format(applyForm.getStartTime()), formatter2.format(applyForm.getEndTime()), 0);
+                applyForm.setSumTime((BigDecimal.valueOf(workDays).multiply(BigDecimal.valueOf(8))));
+//                if (applyForm.getApplyId().equals("LEW1157")) {
+//                    System.out.println("调整后时长为:"+applyForm.getSumTime());
+//                }
+            }
+        }
 
         for (int i = 0; i < userList.size(); i++) {
             ArrayList<String> strings = new ArrayList<>();
@@ -284,11 +314,16 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
             strings.add("");//备注
 
             List<AttendanceStaff> staffCollect = staffList.stream().filter(s -> s.getJobNumber().equals(u.getJobNumber())).collect(Collectors.toList());
-            strings.add(staffCollect.size()+"");//实际出勤天
+            List<AttendanceStaff> workDaysCollect = staffCollect.stream().filter(s -> s.getAttendanceType() != 12).collect(Collectors.toList());
+            strings.add(workDaysCollect.size()+"");//实际出勤天
 
             BigDecimal total8 = getDecimal(applyFormList,"病假",u.getJobNumber());
             strings.add(total8.toString());
-            BigDecimal total9 = getDecimal(applyFormList,"带薪假",u.getJobNumber());
+            String[] daixinjiaRange = "婚假、产假、护理假、丧假、独生子女护理假、哺乳假、产检假".split("、");
+            BigDecimal total9 = BigDecimal.ZERO;
+            for (String daixinjia : daixinjiaRange) {
+                total9 = total9.add(getDecimal(applyFormList,daixinjia,u.getJobNumber()));
+            }
             strings.add(total9.toString());
             BigDecimal total10 = getDecimal(applyFormList,"育儿假",u.getJobNumber());
             strings.add(total10.toString());
@@ -308,6 +343,9 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
             strings.add(total17.toString());
             int countLess=0;
             int countMore=0;
+            double zhoumoStaffOvertime=0;
+            double fadingStaffOvertime=0;
+            double otherStaffOvertime=0;
             for (AttendanceStaff staff : staffCollect) {
                 Integer type = staff.getAttendanceType();
                 LocalDateTime clockStartTime = staff.getClockStartTime();
@@ -317,8 +355,23 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
                 LocalDateTime clockEndTime = staff.getClockEndTime();
                 LocalTime startTime = clockStartTime.toLocalTime();
                 LocalTime endTime = clockEndTime.toLocalTime();
-
-                if (type == BAI_BAN) {
+                if (type == JIA_BAN) {
+                    //加班处理
+                    BigDecimal workHour = staff.getWorkHour();
+                    if (workHour != null) {
+                        if (staff.getClockDate().getDayOfWeek() == DayOfWeek.SATURDAY || staff.getClockDate().getDayOfWeek() == DayOfWeek.SUNDAY) {
+                            //周末加班
+                            zhoumoStaffOvertime+=workHour.doubleValue();
+                        } else if(holidays.contains(staff.getClockDate().format(formatter2))) {
+                            fadingStaffOvertime+=workHour.doubleValue();
+                        } else {
+                            otherStaffOvertime+=workHour.doubleValue()-8.0f;
+                        }
+                    }
+//                    if (staff.getName().equals("陈寿明")) {
+//                        System.out.println("陈寿明加班:"+zhoumoStaffOvertime+"+"+fadingStaffOvertime+"+"+otherStaffOvertime);
+//                    }
+                } else if (type == BAI_BAN) {
                     if (startTime.isAfter(LocalTime.of(8,0,0))) {
                         Duration duration = Duration.between(LocalTime.of(8,0,0),startTime );
                         long v = duration.toMinutes();
@@ -537,31 +590,47 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
             }
             strings.add(countLess+"");
             strings.add(countMore+"");
-            List<ApplyForm> unDaKacollect = applyFormList.stream().filter(a -> a.getType() == 6&&a.getApplyId().equals(u.getJobNumber())).collect(Collectors.toList());
+            List<ApplyForm> fixDakaCollection = applyFormList.stream().filter(a -> a.getType() == 6&&a.getApplyId().equals(u.getJobNumber())).collect(Collectors.toList());
+            List<AttendanceStaff> unDaKacollect = staffCollect.stream().filter(s -> s.getClockStartTime() == null && s.getClockEndTime() == null).collect(Collectors.toList());
+            unDaKacollect = unDaKacollect.stream().filter(un->!fixDakaCollection.stream().anyMatch(fix->fix.getStartTime().toLocalDate().equals(un.getClockDate()))).collect(Collectors.toList());
             strings.add(unDaKacollect.size()+"");
 
-            int xiaoyeCount = (int) staffCollect.stream().filter(s -> s.getAttendanceTypeName() != null && s.getAttendanceTypeName().equals("小夜班")).count();
-            int dayeCount = (int) staffCollect.stream().filter(s -> s.getAttendanceTypeName() != null && s.getAttendanceTypeName().equals("大夜班")).count();
-            int size = staffCollect.size();
-            int other=size-xiaoyeCount-dayeCount;
-            strings.add(other+"");//其他
+            int xiaoyeCount = (int) staffCollect.stream().filter(s -> s.getAttendanceTypeName() != null && s.getAttendanceTypeName().contains("小夜班")).count();
+            int dayeCount = (int) staffCollect.stream().filter(s -> s.getAttendanceTypeName() != null && s.getAttendanceTypeName().contains("大夜班")).count();
+//            int size = staffCollect.size();
+//            int other=size-xiaoyeCount-dayeCount;
+            strings.add("");//其他
             strings.add(xiaoyeCount+"");//小夜班
             strings.add(dayeCount+"");//大夜班
 
-            BigDecimal zhouMoSum = applyFormList.stream().filter(a -> a.getApplyId().equals(u.getJobNumber())
-                            && (a.getStartTime().toLocalDate().getDayOfWeek() == DayOfWeek.SATURDAY || a.getStartTime().toLocalDate().getDayOfWeek() == DayOfWeek.SUNDAY))
+            List<ApplyForm> jiabanList = applyFormList.stream().filter(a -> a.getType() == 4 && a.getApplyId().equals(u.getJobNumber())).collect(Collectors.toList());
+            BigDecimal zhouMoSum = jiabanList.stream().filter(a -> (a.getStartTime().toLocalDate().getDayOfWeek() == DayOfWeek.SATURDAY || a.getStartTime().toLocalDate().getDayOfWeek() == DayOfWeek.SUNDAY))
                     .map(ApplyForm::getSumTime)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal faDingSum = applyFormList.stream().filter(a -> a.getApplyId().equals(u.getJobNumber())
-                    && holidays.contains(a.getStartTime().toLocalDate().format(formatter2)))
+            BigDecimal faDingSum = jiabanList.stream().filter(a -> holidays.contains(a.getStartTime().toLocalDate().format(formatter2)))
                     .map(ApplyForm::getSumTime)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal total = applyFormList.stream().filter(a -> a.getApplyId().equals(u.getJobNumber())).map(ApplyForm::getSumTime)
+            BigDecimal total = jiabanList.stream().map(ApplyForm::getSumTime)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal qiTaSum=total.subtract(faDingSum).subtract(zhouMoSum);
-            strings.add(zhouMoSum.toString());
-            strings.add(faDingSum.toString());
-            strings.add(qiTaSum.toString());
+            if (zhoumoStaffOvertime > 0) {
+                strings.add(zhoumoStaffOvertime+"");
+            } else {
+                strings.add(zhouMoSum.toString());
+            }
+            if (fadingStaffOvertime > 0) {
+                strings.add(fadingStaffOvertime+"");
+            } else {
+                strings.add(faDingSum.toString());
+            }
+            if (otherStaffOvertime > 0) {
+                strings.add(otherStaffOvertime+"");
+            } else {
+                strings.add(qiTaSum.toString());
+            }
+//            strings.add(zhouMoSum.add(new BigDecimal(zhoumoStaffOvertime)).toString());
+//            strings.add(faDingSum.add(new BigDecimal(fadingStaffOvertime)).toString());
+//            strings.add(qiTaSum.add(new BigDecimal(otherStaffOvertime)).toString());
 
             list.add(strings);
         }

+ 25 - 23
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceStaffServiceImpl.java

@@ -510,32 +510,34 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
             LocalDateTime clockStart = record.getClockStartTime();
             LocalDateTime clockEnd = record.getClockEndTime();
             // 检查是否跨过午休时间
-            if (clockStart.toLocalTime().isBefore(noonBreakStart) &&
-                    clockEnd.toLocalTime().isAfter(isHotDay ? noonBreakEndHotDay : noonBreakEndNormalDay)) {
-
-                // 完整午休时间扣除
-                if (isHotDay) {
-                    record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(1.5))); // 高温日扣1.5小时
-                } else {
-                    record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(1))); // 普通日扣1小时
+            if (clockStart != null && clockEnd != null) {
+                if (clockStart.toLocalTime().isBefore(noonBreakStart) &&
+                        clockEnd.toLocalTime().isAfter(isHotDay ? noonBreakEndHotDay : noonBreakEndNormalDay)) {
+
+                    // 完整午休时间扣除
+                    if (isHotDay) {
+                        record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(1.5))); // 高温日扣1.5小时
+                    } else {
+                        record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(1))); // 普通日扣1小时
+                    }
                 }
-            }
-            // 部分重叠的情况
-            else {
-                // 计算重叠的午休时间(分钟)
-                long overlapMinutes = calculateOverlapMinutes(
-                        clockStart.toLocalTime(),
-                        clockEnd.toLocalTime(),
-                        noonBreakStart,
-                        isHotDay ? noonBreakEndHotDay : noonBreakEndNormalDay
-                );
-
-                if (overlapMinutes > 0) {
-                    double overlapHours = overlapMinutes / 60.0;
-                    record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(overlapHours)));
+                // 部分重叠的情况
+                else {
+                    // 计算重叠的午休时间(分钟)
+                    long overlapMinutes = calculateOverlapMinutes(
+                            clockStart.toLocalTime(),
+                            clockEnd.toLocalTime(),
+                            noonBreakStart,
+                            isHotDay ? noonBreakEndHotDay : noonBreakEndNormalDay
+                    );
+
+                    if (overlapMinutes > 0) {
+                        double overlapHours = overlapMinutes / 60.0;
+                        record.setWorkHour(record.getWorkHour().subtract(BigDecimal.valueOf(overlapHours)));
+                    }
                 }
+                record.setWorkHour(record.getWorkHour().setScale(1, RoundingMode.HALF_UP));
             }
-            record.setWorkHour(record.getWorkHour().setScale(1, RoundingMode.HALF_UP));
         }
         map.put("records",records );
         msg.setData(map);

+ 0 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-privatelew.yml

@@ -104,7 +104,6 @@ referer:
     - localhost
     - 192.168.1.218
     - 101.132.166.205
-    - 180.101.231.202
     - workshop.njlew.com.cn
     - mobworkshop.njlew.com.cn
     - workshop.njlew.com.cn:16080

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ApplyFormMapper.xml

@@ -28,12 +28,12 @@
     </select>
     <select id="getListByFirstDateAndLastDate" resultType="com.management.platform.entity.ApplyForm">
         select a.* from apply_form a
-        WHERE  a.start_time &gt;= #{startDate}  and  a.end_time &lt; #{endDate}
+        WHERE  a.start_time &lt;= #{endDate}  and  a.end_time &gt; #{startDate}
         order by a.type asc
     </select>
     <select id="getAllListByFirstDateAndLastDate" resultType="com.management.platform.entity.ApplyForm">
         select a.* from apply_form a
-        WHERE  a.start_time &lt; #{endDate}  and  a.end_time &gt;= #{startDate}
+        WHERE  a.start_time &lt;= #{endDate}  and  a.end_time &gt; #{startDate}
         order by a.type asc
     </select>
     <select id="getListByTypeDate" resultType="com.management.platform.entity.ApplyForm">