Procházet zdrojové kódy

解决跨天计算工时的bug;补考勤改成员工申请考勤

QuYueTing před 6 dny
rodič
revize
22a7dc1562

+ 76 - 26
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/OvertimeAllowanceController.java

@@ -5,9 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
+import com.management.platform.mapper.CompanyMapper;
+import com.management.platform.mapper.OvertimeMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.*;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -65,6 +68,10 @@ public class OvertimeAllowanceController {
 
     @Resource
     private UserMapper userMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private OvertimeMapper overtimeMapper;
 
     /**
      * 获取餐补列表
@@ -147,7 +154,7 @@ public class OvertimeAllowanceController {
         
         List<OvertimeAllowance> list = iPage.getRecords();
         Long total = iPage.getTotal();
-        
+        Company company = companyMapper.selectById(companyId);
 
         // 查询整个公司的用户列表和部门列表
         if (companyId != null && !list.isEmpty()) {
@@ -170,8 +177,13 @@ public class OvertimeAllowanceController {
             Map<Integer, Department> departmentMap = departmentList.stream()
                     .collect(Collectors.toMap(Department::getDepartmentId, d -> d, (d1, d2) -> d1));
             List<UserCorpwxTime> userCorpwxTimes = null;
+            List<Overtime> overtimeList = null;
             if (!isAllowance) {
-                userCorpwxTimes = userCorpwxTimeService.list(new QueryWrapper<UserCorpwxTime>().eq("company_id", companyId).between("create_date", startDate, endDate));
+                if (company.getPackageOvertime() == 1) {
+                    overtimeList = overtimeMapper.selectList(new QueryWrapper<Overtime>().eq("company_id", companyId).eq("status", 2).between("date", startDate, endDate));
+                } else {
+                    userCorpwxTimes = userCorpwxTimeService.list(new QueryWrapper<UserCorpwxTime>().eq("company_id", companyId).between("create_date", startDate, endDate));
+                }
             }
             // 遍历餐补列表,设置userName、jobNumber和departmentName
             for (OvertimeAllowance allowance : list) {
@@ -191,13 +203,23 @@ public class OvertimeAllowanceController {
                                 allowance.setDepartmentName(department.getDepartmentName());
                             }
                         }
-                    }
-                    //设置加班时长
-                    if (!isAllowance) {
-                        if (userCorpwxTimes != null) {
-                            for (UserCorpwxTime userCorpwxTime : userCorpwxTimes) {
-                                if (userCorpwxTime.getCorpwxUserid().equals(allowance.getCorpwxUserid()) && userCorpwxTime.getCreateDate().isEqual(allowance.getDate())) {
-                                    allowance.setApplyOvertimeDuration(userCorpwxTime.getOtTime());
+                        //设置加班时长
+                        if (!isAllowance) {
+                            if (company.getPackageOvertime() == 1) {
+                                if (overtimeList != null) {
+                                    for (Overtime overtime : overtimeList) {
+                                        if (overtime.getUserId().equals(user.getId()) && overtime.getDate().isEqual(allowance.getDate())) {
+                                            allowance.setApplyOvertimeDuration(overtime.getDuration()/3600.0);
+                                        }
+                                    }
+                                }
+                            } else {
+                                if (userCorpwxTimes != null) {
+                                    for (UserCorpwxTime userCorpwxTime : userCorpwxTimes) {
+                                        if (userCorpwxTime.getCorpwxUserid().equals(allowance.getCorpwxUserid()) && userCorpwxTime.getCreateDate().isEqual(allowance.getDate())) {
+                                            allowance.setApplyOvertimeDuration(userCorpwxTime.getOtTime());
+                                        }
+                                    }
                                 }
                             }
                         }
@@ -223,8 +245,6 @@ public class OvertimeAllowanceController {
      * @param startDate 开始日期
      * @param endDate 结束日期
      * @param isAllowance 是否餐补模式
-     * @param pageIndex 页码
-     * @param pageSize 每页大小
      * @return 按人员合计的分页查询结果
      */
     @RequestMapping("/getSummaryList")
@@ -239,7 +259,7 @@ public class OvertimeAllowanceController {
         String token = request.getHeader("TOKEN");
         User currentUser = userService.getById(token);
         Integer companyId = currentUser != null ? currentUser.getCompanyId() : null;
-
+        Company company = companyMapper.selectById(companyId);
         // 解析 userId 对应的 corpwxUserid
         String corpwxUserid = null;
         if (!StringUtils.isEmpty(userId)) {
@@ -285,10 +305,18 @@ public class OvertimeAllowanceController {
 
             // 非餐补模式:按人员汇总申请加班时长
             List<UserCorpwxTime> userCorpwxTimes = null;
+            List<Overtime> overtimes = null;
             if (!isAllowance) {
-                userCorpwxTimes = userCorpwxTimeService.list(new QueryWrapper<UserCorpwxTime>()
-                        .eq("company_id", companyId)
-                        .between("create_date", startDate, endDate));
+                if (company.getPackageOvertime() == 1) {
+                    //走系统内部的加班管理逻辑
+                    overtimes = overtimeMapper.selectList(new QueryWrapper<Overtime>()
+                            .eq("company_id", companyId).eq("status", 2)
+                            .between("date", startDate, endDate));
+                } else {
+                    userCorpwxTimes = userCorpwxTimeService.list(new QueryWrapper<UserCorpwxTime>()
+                            .eq("company_id", companyId)
+                            .between("create_date", startDate, endDate));
+                }
             }
 
             for (OvertimeAllowance allowance : list) {
@@ -303,16 +331,31 @@ public class OvertimeAllowanceController {
                                 allowance.setDepartmentName(department.getDepartmentName());
                             }
                         }
+                        // 合计该人员在日期范围内的申请加班时长
+                        if (!isAllowance) {
+                            if (company.getPackageOvertime() == 1) {
+                                //走系统内部的加班管理逻辑
+                                if (overtimes != null) {
+                                    final int totalApply = overtimes.stream()
+                                            .filter(t -> user.getId().equals(t.getUserId()))
+                                            .mapToInt(t -> t.getDuration() != null ? t.getDuration() : 0)
+                                            .sum();
+                                    allowance.setApplyOvertimeDuration(totalApply/3600.0);
+                                }
+                            } else {
+                                //走企业微信的加班管理逻辑
+                                if (userCorpwxTimes != null) {
+                                    final String cuid = allowance.getCorpwxUserid();
+                                    double totalApply = userCorpwxTimes.stream()
+                                            .filter(t -> cuid.equals(t.getCorpwxUserid()))
+                                            .mapToDouble(t -> t.getOtTime() != null ? t.getOtTime() : 0.0)
+                                            .sum();
+                                    allowance.setApplyOvertimeDuration(totalApply);
+                                }
+                            }
+                        }
                     }
-                    // 合计该人员在日期范围内的申请加班时长
-                    if (!isAllowance && userCorpwxTimes != null) {
-                        final String cuid = allowance.getCorpwxUserid();
-                        double totalApply = userCorpwxTimes.stream()
-                                .filter(t -> cuid.equals(t.getCorpwxUserid()))
-                                .mapToDouble(t -> t.getOtTime() != null ? t.getOtTime() : 0.0)
-                                .sum();
-                        allowance.setApplyOvertimeDuration(totalApply);
-                    }
+
                 }
             }
         }
@@ -435,6 +478,7 @@ public class OvertimeAllowanceController {
                 headers.add("有效工作时长合计(小时)");
                 headers.add("考勤加班时长合计(小时)");
                 headers.add("申请加班时长合计(小时)");
+                headers.add("实际加班时长合计(小时)");
             }
             allData.add(headers);
 
@@ -451,6 +495,7 @@ public class OvertimeAllowanceController {
                     row.add(allowance.getAllowance() != null ? String.valueOf(allowance.getAllowance()) : "0");
                 } else {
                     row.add(allowance.getApplyOvertimeDuration() != null ? String.valueOf(allowance.getApplyOvertimeDuration()) : "0");
+                    row.add(allowance.getOvertimeDuration() != null ? String.valueOf(allowance.getOvertimeDuration()) : "0");
                 }
                 allData.add(row);
             }
@@ -623,12 +668,14 @@ public class OvertimeAllowanceController {
                 headers.add("实际加班时长(小时)");
                 headers.add("班次");
                 headers.add("是否跨凌晨");
-                headers.add("补贴(元)");
+                headers.add("夜班补贴(元)");
+                headers.add("餐补(元)");
                 headers.add("补贴说明");
             } else {
                 headers.add("考勤加班时长(小时)");
                 headers.add("班次");
                 headers.add("申请加班时长");
+                headers.add("实际加班时长");
                 headers.add("有效加班时长");
             }
             allData.add(headers);
@@ -685,11 +732,14 @@ public class OvertimeAllowanceController {
                 row.add(typeStr);
                 if (isAllowance) {
                     row.add(crossMidnightStr);
-                    row.add(allowance.getAllowance() != null ? String.valueOf(allowance.getAllowance()) : "0");
+                    String finalAllowance = allowance.getAllowance() != null ? String.valueOf(allowance.getAllowance()) : "0";
+                    row.add(crossMidnightStr.equals("是")?finalAllowance:"0");
+                    row.add(crossMidnightStr.equals("是")?"0":finalAllowance);
                     row.add(comment);
                 } else {
                     //申请加班时长
                     row.add(allowance.getApplyOvertimeDuration() != null ? String.valueOf(allowance.getApplyOvertimeDuration()) : "0");
+                    row.add(allowance.getOvertimeDuration() != null ? String.valueOf(allowance.getOvertimeDuration()) : "0");
                     //实际加班时长,以考勤加班时长为准,不足时,提示补交加班申请
                     if (allowance.getOvertimeDuration() != null) {
                         if (allowance.getOvertimeDuration() > allowance.getApplyOvertimeDuration()) {

+ 47 - 42
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -8210,7 +8210,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         if (leaveSheet.getOwnerId().equals(curUser.getId()) &&
                                 (leaveSheet.getStartDate().isEqual(date) || leaveSheet.getEndDate().isEqual(date)
                                     || (leaveSheet.getStartDate().isBefore(date) && leaveSheet.getEndDate().isAfter(date)))) {
-                            noRecord.status = MessageUtils.message("leave.leave");
+                            if (leaveSheet.getStartDate().isEqual(leaveSheet.getEndDate())) {
+                                //请假单为一天内的
+                                noRecord.status = "请假" + leaveSheet.getTimeHours() + "h";
+                            } else {
+                                noRecord.status = dtf.format(leaveSheet.getStartDate())+"~"+dtf.format(leaveSheet.getEndDate()) +" 请假" + leaveSheet.getTimeHours() + "h";
+                            }
                         }
                     }
                     noReportDataList.add(noRecord);
@@ -14334,6 +14339,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<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             
             // 获取部门的所有子部门
             List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
@@ -14390,13 +14396,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 pagedData = new ArrayList<>(allReportByDate.subList(startIndex, endIndex));
                 //处理日期显示
                 for (int i = 0; i < pagedData.size(); i++) {
+                    HashMap mapItem = pagedData.get(i);
                     String createDate = new SimpleDateFormat("yyyy-MM-dd")
-                            .format((java.sql.Date) pagedData.get(i).get("createDate"));
-                    pagedData.get(i).put("createDate", createDate);
+                            .format((java.sql.Date) mapItem.get("createDate"));
+                    mapItem.put("createDate", createDate);
                     //计算非加班工时
-                    double workingTime = (Double) pagedData.get(i).get("duration");
-                    double overtime = (Double) pagedData.get(i).get("overtimeHours");
-                    pagedData.get(i).put("normalWorkingTime", workingTime - overtime);
+                    double workingTime = (Double) mapItem.get("duration");
+                    double overtime = (Double) mapItem.get("overtimeHours");
+                    mapItem.put("normalWorkingTime", workingTime - overtime);
+                    //处理部门审核人
+                    String deptAuditorId = (String)mapItem.get("deptAuditorName");
+                    if (deptAuditorId != null) {
+                        User targetUser = allUserList.stream().filter(us->us.getId().equals(deptAuditorId)).findFirst().orElse(null);
+                        if (targetUser != null) {
+                            mapItem.put("deptAuditorName", targetUser.getName());
+                        }
+                    }
                 }
             }
             
@@ -14453,6 +14468,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             titles.add("正常工作时长(h)");
             titles.add("加班时长(h)");
             titles.add("工作内容");
+            titles.add("当前审核人");
             titles.add("审核状态");
             
             dataList.add(titles);
@@ -14528,14 +14544,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 
                 // 工作内容
                 item.add(map.get("content") != null ? (String) map.get("content") : "");
-                
+
                 // 审核状态
                 Integer state = (Integer) map.get("state");
                 String auditStatus = "";
                 if (state != null) {
                     switch (state) {
                         case 0:
-                            auditStatus = "待审";
+                            auditStatus = "待审";
                             break;
                         case 1:
                             auditStatus = "已通过";
@@ -14550,6 +14566,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             auditStatus = "-";
                     }
                 }
+                if ("待审核".equals(auditStatus)) {
+                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                        item.add("$userName=" + (map.get("deptAuditorName") == null ? "" : map.get("deptAuditorName")) + "$");
+                    } else {
+                        item.add((String) map.get("deptAuditorName"));
+                    }
+                } else {
+                    item.add("-");
+                }
                 item.add(auditStatus);
                 
                 dataList.add(item);
@@ -14726,12 +14751,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 // 4. 当日考勤记录 - 格式化为:日期&姓名&时长H
                 if (map.get("cardTime") != null) {
                     String cardRecord = map.get("cardStartTime") + "~" + map.get("cardEndTime");
-                    //判断如果结束时间小于开始时间,说明是次日,需要加上次日
-                    if (map.get("cardStartTime") != null && map.get("cardEndTime") != null) {
-                        if (LocalTime.parse(map.get("cardEndTime").toString()).isBefore(LocalTime.parse(map.get("cardStartTime").toString()))) {
-                            cardRecord += " (+1)";
-                        }
-                    }
                     cardRecord += " " +
                         String.format("%.2f", map.get("cardTime")) + "H";
                     map.put("cardRecord", cardRecord);
@@ -14951,12 +14970,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 // 4. 当日考勤记录 - 格式化为:日期&姓名&时长H
                 if (map.get("cardTime") != null) {
                     String cardRecord = map.get("cardStartTime") + "~" + map.get("cardEndTime");
-                    //判断如果结束时间小于开始时间,说明是次日,需要加上次日
-                    if (map.get("cardStartTime") != null && map.get("cardEndTime") != null) {
-                        if (LocalTime.parse(map.get("cardEndTime").toString()).isBefore(LocalTime.parse(map.get("cardStartTime").toString()))) {
-                            cardRecord += " (+1)";
-                        }
-                    }
                     cardRecord += " " +
                             String.format("%.2f", map.get("cardTime")) + "H";
                     map.put("cardRecord", cardRecord);
@@ -15021,6 +15034,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             titles.add("[正常工时]明细条数");
             titles.add("[加班工时]明细条数");
             titles.add("审核流程");
+            titles.add("当前审核人");
             titles.add("审核状态");
 
             dataList.add(titles);
@@ -15046,8 +15060,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 // 员工
                 if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
                     item.add("$userName=" + (map.get("userName") == null ? "" : map.get("userName")) + "$");
-                } else if (dingding != null && dingding.getContactNeedTranslate() == 1) {
-                    item.add("$userName=" + (map.get("userName") == null ? "" : map.get("userName")) + "$");
                 } else {
                     item.add((String) map.get("userName"));
                 }
@@ -15111,6 +15123,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 } else {
                     item.add("-");
                 }
+                if (map.get("auditStatusText") != null && "待审核".equals(map.get("auditStatusText"))) {
+                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                        item.add("$userName=" + (map.get("auditorName") == null ? "" : map.get("auditorName")) + "$");
+                    } else {
+                        item.add((String) map.get("auditorName"));
+                    }
+                } else {
+                    item.add("-");
+                }
                 // 审核状态
                 item.add(map.get("auditStatusText") != null ? (String) map.get("auditStatusText") : "");
 
@@ -15161,6 +15182,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             DateTimeFormatter createTimeFormatterLocal = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             //获取公司全部成员
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+            System.out.println("allUserList.size==="+allUserList.size() + ", companyId=" + companyId);
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
             Sheet sheet = workbook.getSheetAt(0);
             //由于第一行需要指明列对应的标题
@@ -15241,28 +15263,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         return msg;
                     }
                     String jobNumber = row.getCell(8) != null?row.getCell(8).getStringCellValue().trim():null;
-//                    if (StringUtils.isEmpty(jobNumber)) {
-//                        msg.setError("员工工号不能为空");
-//                        return msg;
-//                    }
-//                    //检查人员是否存在
-//                    Optional<User> any = allUserList.stream().filter(u -> (u.getJobNumber()!=null&&u.getJobNumber().equals(jobNumber))).sorted(new Comparator<User>() {
-//                        @Override
-//                        public int compare(User o1, User o2) {
-//                            return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
-//                        }
-//                    }).findAny();
-//                    if (!any.isPresent()) {
-//                        //msg.setError("人员["+username+"]不存在,请先在组织结构中添加或者通过钉钉同步导入");
-//                        msg.setError("工号:" + jobNumber + "不存在,请在系统组织架构中完善");
-//                        return msg;
-//                    }
-//                    User reportCreator = any.get();
                     String username = row.getCell(7).getStringCellValue().trim();
                     //检查人员是否存在
                     Optional<User> any;
                     Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(username)).findFirst();
-                    any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(jobNumber))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).sorted(new Comparator<User>() {
+                    any = allUserList.stream().filter(u -> (u.getJobNumber()!=null&&u.getJobNumber().equals(jobNumber))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).sorted(new Comparator<User>() {
                         @Override
                         public int compare(User o1, User o2) {
                             return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
@@ -15310,8 +15315,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     String overtimeCell = row.getCell(4) == null?null:row.getCell(4).getStringCellValue();
                     Integer isOvertime = 0;
                     if (!StringUtils.isEmpty(overtimeCell)) {
-                        overtimeCell = overtimeCell.replace("H", "");
-                        isOvertime = overtimeCell.equals("正常工时")?1:0;
+                        overtimeCell = overtimeCell.trim();
+                        isOvertime = overtimeCell.equals("正常工时")?0:1;
                     }
                     String isAbnormal = row.getCell(5) == null?null:row.getCell(5).getStringCellValue();
                     Integer extraField1 = "正常".equals(isAbnormal)? 0 : 1;

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

@@ -654,6 +654,11 @@ public class TimingTask {
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("wait_check_alert_time", df.format(now.toLocalTime())).eq("alert_audit_mode", 0));
         List<Integer> companyIds = timeTypeList.stream().map(TimeType::getCompanyId).distinct().collect(Collectors.toList());
         companyIds.add(-1);
+        if (df.format(now.toLocalTime()).equals("17:00")) {
+            //下午五点,固定提醒一次羲合超导
+            companyIds.add(Constant.XI_HE_CHAO_DAO_COMPANY_ID);
+            companyIds.add(Constant.XI_HE_CHAO_DAO_JIA_XING_COMPANY_ID);
+        }
         List<CompanyDingding> list = companyDingdingMapper.getDingdingCompanyList(companyIds);
         for (CompanyDingding companyDingding : list) {
             //发送推送提醒

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DateTimeUtil.java

@@ -125,7 +125,7 @@ public class DateTimeUtil {
         if (startHour <= 12 && endHour >= 13) {
             hours -= 1;
         }
-        if (isEndNextDay && endHour >= 13) {
+        if (isEndNextDay && (endHour - 24) >= 13) {
             hours -= 1;//跨天,再减去第二天的午休时间
         }
 
@@ -145,8 +145,8 @@ public class DateTimeUtil {
     }
 
     public static void main(String[] args) {
-        String startTime = "07:54";
-        String endTime = "次日17:00";
+        String startTime = "20:00";
+        String endTime = "次日08:00";
         double d = calculateWorkHours(startTime, endTime);
         System.out.println(d);
     }

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

@@ -1869,10 +1869,12 @@
             CASE WHEN r.extra_field1 = '1' THEN 1 ELSE 0 END as isAbnormal,
             r.state as auditState,
         (select GROUP_CONCAT(DATE_FORMAT(rlog.operate_date, '%Y-%m-%d %H:%i') , ' ', rlog.msg SEPARATOR '->')
-        from report_log rlog where rlog.creator_id = r.creator_id AND rlog.create_date = r.create_date group by rlog.creator_id, rlog.create_date order by rlog.operate_date)  AS auditWorkflow
+        from report_log rlog where rlog.creator_id = r.creator_id AND rlog.create_date = r.create_date group by rlog.creator_id, rlog.create_date order by rlog.operate_date)  AS auditWorkflow,
+        user_d.name as auditorName
         FROM report r
         INNER JOIN user u ON r.creator_id = u.id
         LEFT JOIN department d ON u.department_id = d.department_id
+        left join user user_d on user_d.id = r.audit_dept_managerid
         WHERE r.company_id = #{companyId}
         <if test="startDate != null and startDate != ''">
             AND r.create_date &gt;= #{startDate}

+ 40 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -5322,7 +5322,7 @@
                     >
                       {{
                         scope.row.state == 0
-                          ? "待审"
+                          ? "待审"
                           : scope.row.state == 1
                           ? "已通过"
                           : scope.row.state == 2
@@ -5709,6 +5709,24 @@
                     <span v-else>{{ scope.row.auditWorkflow }}</span>
                   </template>
                 </el-table-column>
+                <el-table-column
+                  prop="auditorName"
+                  align="center"
+                  label="当前审核人"
+                  width="120"
+                >
+                <template slot-scope="scope">
+                  <span v-if="scope.row.auditStatusText == '待审核'">
+                    <TranslationOpenDataText
+                        v-if="user.userNameNeedTranslate == '1'"
+                        type="userName"
+                        :openid="scope.row.auditorName"
+                      ></TranslationOpenDataText>
+                      <span v-else>{{ scope.row.auditorName }}</span>
+                  </span>
+                  <span v-else>-</span>
+                </template>
+               </el-table-column>
                 <el-table-column
                   prop="auditStatusText"
                   align="center"
@@ -5848,6 +5866,24 @@
                   label="工作内容"
                   min-width="200"
                 ></el-table-column>
+                <el-table-column
+                  prop="auditorName"
+                  align="center"
+                  label="当前审核人"
+                  width="120"
+                >
+                <template slot-scope="scope">
+                  <span v-if="scope.row.state == 0">
+                    <TranslationOpenDataText
+                        v-if="user.userNameNeedTranslate == '1'"
+                        type="userName"
+                        :openid="scope.row.deptAuditorName"
+                      ></TranslationOpenDataText>
+                      <span v-else>{{ scope.row.deptAuditorName }}</span>
+                  </span>
+                  <span v-else>-</span>
+                </template>
+               </el-table-column>
                 <el-table-column
                   prop="auditStatus"
                   align="center"
@@ -5867,7 +5903,7 @@
                     >
                       {{
                         scope.row.state == 0
-                          ? "待审"
+                          ? "待审"
                           : scope.row.state == 1
                           ? "已通过"
                           : scope.row.state == 2
@@ -9067,6 +9103,7 @@ export default {
         url = `/report/exportReportListForExport`;
         sl.startDate = this.rangeDatas[0];
         sl.endDate = this.rangeDatas[1];
+        sl.stateKey = 1;
         if (this.userId) {
           sl.userId = this.userId;
         }
@@ -10601,6 +10638,7 @@ export default {
       let parameter = {
         pageIndex: this.page,
         pageSize: this.size,
+        stateKey: 1,
         startDate: this.rangeDatas[0],
         endDate: this.rangeDatas[1],
       };

+ 3 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -4,19 +4,15 @@
       <!--工具条-->
       <el-col :span="24" class="toolbar" style="padding-bottom: 0px">
         <el-form :inline="true">
-          <el-form-item class="toolbar_formitem_n1" style="margin-bottom: 10px">
+          <el-form-item v-if="user.timeType.isProjectClosure == 0" :label="$t('listofitems')" class="toolbar_formitem_n1"></el-form-item>
+          <el-form-item v-else class="toolbar_formitem_n1" style="margin-bottom: 10px">
             <el-radio-group
               v-model="projectTab"
               @change="onTabChange"
               size="small"
             >
               <el-radio-button label="0">项目列表</el-radio-button>
-              <el-radio-button
-                v-if="
-                  user && user.timeType && user.timeType.isProjectClosure == 1
-                "
-                label="1"
-                >结项审批</el-radio-button
+              <el-radio-button label="1">结项审批</el-radio-button
               >
             </el-radio-group>
           </el-form-item>

+ 3 - 3
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -38,7 +38,7 @@
                                         }}h</span>
                                         <span v-if="report.time.otTime" style="color:#DAA520;">|&nbsp;加班{{ report.time.otTime
                                         }}h</span>
-                                        <span v-if="report.time.modifiedByAdmin == 2" style="color:#DAA520;">()</span>
+                                        <span v-if="report.time.modifiedByAdmin == 2" style="color:#DAA520;">(员工申请)</span>
                                     </span>
                                 </template>
                             </template>
@@ -93,8 +93,8 @@
                     @confirm="onAbnormalItemConfirm"
                     @cancel="showAbnormalItemPicker = false" />
             </van-popup>
-            <!-- 考勤时间选择 -->
-            <van-cell-group v-if="(user.companyId == 8555 || user.companyId == 5792) && form.abnormalTime && selectedAbnormalItem && selectedAbnormalItem.requireCardtime == 1 && !form.time && canEdit" title="考勤">
+            <!-- 申请考勤时间选择 -->
+            <van-cell-group v-if="(user.companyId == 8555 || user.companyId == 5792) && form.abnormalTime && selectedAbnormalItem && selectedAbnormalItem.requireCardtime == 1 && !form.time && canEdit" title="申请考勤">
                 <van-field readonly clickable label="上班时间" :value="form.abnormalStartTime" placeholder="请选择上班时间"
                     @click="showAbnormalStartTimePicker = true" />
                 <van-popup v-model="showAbnormalStartTimePicker" position="bottom">