فهرست منبع

修改成本撤销

seyason 3 سال پیش
والد
کامیت
e21320476c
17فایلهای تغییر یافته به همراه432 افزوده شده و 182 حذف شده
  1. 30 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportAuditLogController.java
  2. 39 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 9 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserYearleaveSettingController.java
  4. 12 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java
  5. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectAddcostRecordServiceImpl.java
  6. 141 103
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  7. 29 27
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  8. 26 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  9. 13 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  10. 0 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  11. 5 4
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  12. BIN
      fhKeeper/formulahousekeeper/management-platform/人员导入模板.xlsx
  13. BIN
      fhKeeper/formulahousekeeper/management-platform/南京火石闪信网络科技有限公司_财务人员成本模板.xls
  14. 10 10
      fhKeeper/formulahousekeeper/timesheet/config/index.js
  15. 17 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  16. 96 2
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue
  17. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_import.vue

+ 30 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportAuditLogController.java

@@ -85,5 +85,35 @@ public class ReportAuditLogController {
         }
         return msg;
     }
+
+
+    @RequestMapping("getProjectReportAuditLog")
+    public HttpRespMsg getProjectReportAuditLog(Integer companyId, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        HttpRespMsg msg = new HttpRespMsg();
+        QueryWrapper<ReportAuditLog> queryWrapper = new QueryWrapper<>();
+        //每个人看自己的
+        queryWrapper.eq("company_id", companyId).eq("audit_channel", 1).eq("user_id", user.getId()).orderByDesc("indate");
+        IPage<ReportAuditLog> iPage = reportAuditLogMapper.selectPage(new Page<>(pageIndex, pageSize),
+                queryWrapper);
+        List<ReportAuditLog> list = iPage.getRecords();
+        if (list.size() > 0) {
+            //还有获取各项的人员日期名单
+            List<Integer> ids = list.stream().map(ReportAuditLog::getId).collect(Collectors.toList());
+
+            List<ReportAlogMembdate> membList = reportAlogMembdateMapper.selectList(new QueryWrapper<ReportAlogMembdate>().in("rlog_id", ids));
+            list.forEach(l->{
+                l.setMembdateList(membList.stream().filter(m->m.getRlogId().equals(l.getId())).collect(Collectors.toList()));
+            });
+        }
+
+        Long total = iPage.getTotal();
+        Map<String, Object> map = new HashMap<>();
+        map.put("records", list);
+        map.put("total", total);
+        msg.data = map;
+        return msg;
+    }
 }
 

+ 39 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -51,6 +51,8 @@ public class ReportController {
     @Resource
     private ProjectBasecostSettingMapper projectBasecostSettingMapper;
     @Resource
+    private TimeAutoExcludeMapper timeAutoExcludeMapper;
+    @Resource
     private HttpServletRequest request;
     @Resource
     private AuditWorkflowTimeSettingMapper auditWorkflowTimeSettingMapper;
@@ -426,6 +428,13 @@ public class ReportController {
                     new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", user.getDepartmentId()).orderByAsc("seq"));
             List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
 
+            //准备全局的校验数据
+            List<TimeAutoExclude> excludeTimeList = new ArrayList<>();
+            //按照时间段填报的模式下,检查是否设置了休息时间段,要自动剔除
+            if (comTimeType.getType() == 2) {
+                excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", company.getId()));
+            }
+
             for (int i = 0; i < id.length; i++) {
                 if (createDate[i].contains("@")) {
                     DateTimeFormatter mdFormatter = DateTimeFormatter.ofPattern("MM-dd");
@@ -506,9 +515,9 @@ public class ReportController {
                             }
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
                             }
 
                             //项目专业的进展
@@ -564,9 +573,9 @@ public class ReportController {
                                 }
                                 //计算工时和成本
                                 if (report.getMultiWorktime() == 0) {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
                                 } else {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
                                 }
 
                                 fillReportProgress(report, professionProgress[i]);
@@ -622,9 +631,9 @@ public class ReportController {
                         }
                         //计算工时和成本
                         if (report.getMultiWorktime() == 0) {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf, comTimeType);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf, comTimeType, excludeTimeList);
                         } else {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
                         }
 
                         fillReportProgress(report, professionProgress[i]);
@@ -703,9 +712,9 @@ public class ReportController {
                             hourCost = subsUser.getCost();
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
                             }
 
                             fillReportProgress(report, professionProgress[i]);
@@ -819,7 +828,7 @@ public class ReportController {
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
 
-    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf, TimeType comTimeType) {
+    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf, TimeType comTimeType, List<TimeAutoExclude> excludeTimeList) {
         if (report.getMultiWorktime() == 0) {
             //普通工时成本计算
             if (report.getReportTimeType() == 0) {
@@ -833,7 +842,17 @@ public class ReportController {
                 //时间范围填报, 计算一下时长
                 try {
                     report.setStartTime(startTime).setEndTime(endTime);
+                    int excludeTime = 0;
+                    if (excludeTimeList.size() > 0) {
+                        for (TimeAutoExclude exclude : excludeTimeList) {
+                            if (exclude.getStartTime().compareTo(startTime) >= 0 && exclude.getEndTime().compareTo(endTime) <= 0) {
+                                //落在休息时间范围内,需要计算去掉的时间
+                                excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                            }
+                        }
+                    }
                     long time = sdf.parse(report.getEndTime()).getTime() - sdf.parse(report.getStartTime()).getTime();
+                    time -= excludeTime;//去掉休息时间
                     int minutes = (int)time/1000/60;
                     double hours = minutes*1.0f/60;
                     report.setWorkingTime(hours);
@@ -851,7 +870,18 @@ public class ReportController {
                 for (int t=0;t<array.size(); t++) {
                     JSONObject jsonObject = array.getJSONObject(t);
                     WorktimeItem item = JSONObject.toJavaObject(jsonObject, WorktimeItem.class);
+                    int excludeTime = 0;
+                    if (excludeTimeList.size() > 0) {
+                        for (TimeAutoExclude exclude : excludeTimeList) {
+                            if (exclude.getStartTime().compareTo(item.getStartTime()) >= 0 && exclude.getEndTime().compareTo(item.getEndTime()) <= 0) {
+                                //落在休息时间范围内,需要计算去掉的时间
+                                excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                            }
+                        }
+                    }
+
                     long time = sdf.parse(item.getEndTime()).getTime() - sdf.parse(item.getStartTime()).getTime();
+                    time -= excludeTime;
                     int minutes = (int)time/1000/60;
                     double hours = minutes*1.0f/60;
                     item.setTime(hours);

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserYearleaveSettingController.java

@@ -94,6 +94,15 @@ public class UserYearleaveSettingController {
 //        return dingDingService.getLeaveTypeList(companyId);
 //    }
 
+    /**
+     *
+     * @param leaveCode 请假类型代码
+     * @param companyId 公司id (必传
+     * @param departmentId 部门id
+     * @param userId 员工id
+     * @param pageIndex 页码
+     * @return
+     */
     @RequestMapping("/getDingDingLeaveQt")
     public HttpRespMsg getDingDingLeaveQt(String leaveCode, Integer companyId, Integer departmentId, String userId,@RequestParam(required = false, defaultValue = "1") Integer pageIndex) {
         return dingDingService.getLeaveTypeList(leaveCode, companyId, departmentId, userId, pageIndex);

+ 12 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java

@@ -24,7 +24,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-05-09
+ * @since 2022-05-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -81,6 +81,8 @@ public class Report extends Model<Report> {
      * 创建时间
      */
     @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
     private LocalDateTime createTime;
 
     /**
@@ -321,6 +323,15 @@ public class Report extends Model<Report> {
     private Integer basecostId;
 
 
+    /**
+     * 项目日报审核时间
+     */
+    @TableField("project_audit_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    private LocalDateTime projectAuditTime;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectAddcostRecordServiceImpl.java

@@ -136,10 +136,10 @@ public class ProjectAddcostRecordServiceImpl extends ServiceImpl<ProjectAddcostR
                         System.out.println("添加记录的明细里匹配不上cur baseId=="+cur.getBaseId()+", curBaseName=="+cur.getBaseName());
                     }
                 });
-//                projectCurrentcostService.updateBatchById(curList);
-//                //删除添加的这条记录
-//                projectAddcostItemMapper.delete(new QueryWrapper<ProjectAddcostItem>().eq("record_id", id));
-//                projectAddcostRecordMapper.deleteById(id);
+                projectCurrentcostService.updateBatchById(curList);
+                //删除添加的这条记录
+                projectAddcostItemMapper.delete(new QueryWrapper<ProjectAddcostItem>().eq("record_id", id));
+                projectAddcostRecordMapper.deleteById(id);
             } else {
                 msg.setError("只有最新的一次下拨可以撤销");
             }

+ 141 - 103
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -77,6 +77,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Resource
     private UserDingdingTimeMapper userDingdingTimeMapper;
     @Resource
+    private ProjectPercentageMapper projectPercentageMapper;
+    @Resource
     private ReportService reportService;
     @Resource
     ReportExtraDegreeMapper reportExtraDegreeMapper;
@@ -1015,7 +1017,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         } else {
                             //最终进行项目经理审核
-                            reportMapper.update(new Report().setState(1),
+                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()),
                                     new QueryWrapper<Report>().in("id", ids));
                             List<Report> finalReportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
                             List<ReportProfessionProgress> professionProgressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids));
@@ -1044,7 +1046,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 .orderByAsc("seq"));
                 if (settings.size() == 0) {
                     //直接进行项目经理审核
-                    reportMapper.update(new Report().setState(1).setProjectAuditState(1),
+                    reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
                             new QueryWrapper<Report>().in("id", ids));
                 } else {
                     //按流程走
@@ -1055,12 +1057,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         //最终审核了,审核通过
                         if (item.getIsDeptAudit() == 1) {
                             //如果最终是部门审核,直接通过
-                            //如果最终是项目审核
-                            reportMapper.update(new Report().setState(1),
+                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()),
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                             //如果最终是项目审核,流程中的项目审核字段也要更新: state为最终审核状态,projectAuditState为阶段性的项目审核状态
-                            reportMapper.update(new Report().setState(1).setProjectAuditState(1),
+                            reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
                                     new QueryWrapper<Report>().in("id", ids));
                         }
                     } else {
@@ -1120,22 +1121,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
 
                 //对导入审核,添加记录
-                if (oldState == -1) {
-                    ReportAuditLog log = new ReportAuditLog();
-                    log.setAuditChannel(0);//导入审核
-                    log.setCompanyId(company.getId());
-                    log.setResult("通过");
-                    log.setUserId(user.getId());
-                    log.setUserName(user.getName());
-                    reportAuditLogMapper.insert(log);
-                    //员工的日期
-                    ReportAlogMembdate membdate = new ReportAlogMembdate();
-                    membdate.setRlogId(log.getId());
-                    membdate.setCreateDate(oneReport.getCreateDate());
-                    membdate.setUserId(oneReport.getCreatorId());
-                    membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
-                    reportAlogMembdateMapper.insert(membdate);
-                }
+                int channel = oldState == -1?0:1; //0-导入审核, 项目报告审核
+                ReportAuditLog log = new ReportAuditLog();
+                log.setAuditChannel(channel);
+                log.setCompanyId(company.getId());
+                log.setResult("通过");
+                log.setUserId(user.getId());
+                log.setUserName(user.getName());
+                reportAuditLogMapper.insert(log);
+                //员工的日期
+                ReportAlogMembdate membdate = new ReportAlogMembdate();
+                membdate.setRlogId(log.getId());
+                membdate.setCreateDate(oneReport.getCreateDate());
+                membdate.setUserId(oneReport.getCreatorId());
+                membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
+                reportAlogMembdateMapper.insert(membdate);
             }
         } catch (NullPointerException e) {
             httpRespMsg.setError("验证失败");
@@ -1336,22 +1336,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             informationMapper.insert(new Information().setType(0).setContent(date).setUserId(fillUserId).setMsg(str));
 
             //对导入审核,添加记录
-            if (oldState == -1) {
-                ReportAuditLog log = new ReportAuditLog();
-                log.setAuditChannel(0);//导入审核
-                log.setCompanyId(company.getId());
-                log.setResult("驳回"+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
-                log.setUserId(user.getId());
-                log.setUserName(user.getName());
-                reportAuditLogMapper.insert(log);
-                //员工的日期
-                ReportAlogMembdate membdate = new ReportAlogMembdate();
-                membdate.setRlogId(log.getId());
-                membdate.setCreateDate(oneReport.getCreateDate());
-                membdate.setUserId(oneReport.getCreatorId());
-                membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
-                reportAlogMembdateMapper.insert(membdate);
-            }
+            int channel = oldState == -1?0:1; //0-导入审核, 项目报告审核
+            ReportAuditLog log = new ReportAuditLog();
+            log.setAuditChannel(channel);//导入审核
+            log.setCompanyId(company.getId());
+            log.setResult("驳回"+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
+            log.setUserId(user.getId());
+            log.setUserName(user.getName());
+            reportAuditLogMapper.insert(log);
+            //员工的日期
+            ReportAlogMembdate membdate = new ReportAlogMembdate();
+            membdate.setRlogId(log.getId());
+            membdate.setCreateDate(oneReport.getCreateDate());
+            membdate.setUserId(oneReport.getCreatorId());
+            membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
+            reportAlogMembdateMapper.insert(membdate);
 
             //发送企业微信通知消息
             User reporter = userMapper.selectById(fillUserId);
@@ -1539,7 +1538,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     } else {
                         //直接进行项目经理审核
-                        reportMapper.update(new Report().setState(1),
+                        reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()),
                                 new QueryWrapper<Report>().in("id", ids));
                         List<Report> finalReportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
                         notifyLeaders(finalReportList);
@@ -1548,6 +1547,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
 
         } else {
+            LocalDateTime now = LocalDateTime.now();
             List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                     new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())
                             .orderByAsc("seq"));
@@ -1557,7 +1557,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             List<Report> allReports = null;
             if (settings.size() == 0) {
                 //公司没有自定义流程,直接进行项目经理审核
-                reportMapper.update(new Report().setState(1),
+                reportMapper.update(new Report().setState(1).setProjectAuditTime(now),
                         new QueryWrapper<Report>().in("id", ids));
                 if (oldState == -1) {
                     allUsers = userMapper.selectList(new QueryWrapper<User>().eq("company_id", company.getId()));
@@ -1576,7 +1576,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     Report curReport = new Report().setId(rid);
                     if (deptSettings.size() == 0) {
                         //直接进行项目经理审核
-                        curReport.setState(1);
+                        curReport.setState(1).setProjectAuditTime(now);
                     } else {
                         //按流程走, 取到当前报告的数据
                         Report item = allReports.stream().filter(a->a.getId().equals(rid)).findFirst().get();
@@ -1585,10 +1585,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             if (item.getIsDeptAudit() == 1) {
                                 //如果最终是部门审核,直接通过
                                 //如果最终是项目审核
-                                curReport.setState(1);
+                                curReport.setState(1).setProjectAuditTime(now);
                             } else {
                                 //如果最终是项目审核,流程中的项目审核字段也要更新: state为最终审核状态,projectAuditState为阶段性的项目审核状态
-                                curReport.setState(1).setProjectAuditState(1);
+                                curReport.setState(1).setProjectAuditState(1).setProjectAuditTime(now);
                             }
                         } else {
                             if (item.getIsDeptAudit() == 1) {
@@ -1671,38 +1671,36 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
             }
 
-            if (oldState == -1) {
-                //需要进行审核记录保存
-                ReportAuditLog log = new ReportAuditLog();
-                log.setAuditChannel(0);//导入审核
-                log.setCompanyId(company.getId());
-                log.setResult("批量通过");
-                log.setUserId(user.getId());
-                log.setUserName(user.getName());
-                reportAuditLogMapper.insert(log);
-                //当前所有员工的日期
-                List<ReportAlogMembdate> membList = new ArrayList<>();
-                for (Report r : allReports) {
-                    LocalDate date = r.getCreateDate();
-                    String creatorId = r.getCreatorId();
-                    if (!membList.stream().anyMatch(m->m.getCreateDate().isEqual(date) && m.getUserId().equals(creatorId))) {
-                        //没有的话,存进去
-                        ReportAlogMembdate membdate = new ReportAlogMembdate();
-                        membdate.setRlogId(log.getId());
-                        membdate.setCreateDate(date);
-                        membdate.setUserId(creatorId);
-                        Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
-                        if (oneUser.isPresent()) {
-                            membdate.setUserName(oneUser.get().getName());
-                        }
-                        membList.add(membdate);
-
+            int channel = oldState == -1?0:1; //0-导入审核, 项目报告审核
+            //需要进行审核记录保存
+            ReportAuditLog log = new ReportAuditLog();
+            log.setAuditChannel(channel);
+            log.setCompanyId(company.getId());
+            log.setResult("批量通过");
+            log.setUserId(user.getId());
+            log.setUserName(user.getName());
+            reportAuditLogMapper.insert(log);
+            //当前所有员工的日期
+            List<ReportAlogMembdate> membList = new ArrayList<>();
+            for (Report r : allReports) {
+                LocalDate date = r.getCreateDate();
+                String creatorId = r.getCreatorId();
+                if (!membList.stream().anyMatch(m->m.getCreateDate().isEqual(date) && m.getUserId().equals(creatorId))) {
+                    //没有的话,存进去
+                    ReportAlogMembdate membdate = new ReportAlogMembdate();
+                    membdate.setRlogId(log.getId());
+                    membdate.setCreateDate(date);
+                    membdate.setUserId(creatorId);
+                    Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
+                    if (oneUser.isPresent()) {
+                        membdate.setUserName(oneUser.get().getName());
                     }
-                }
-                if (membList.size() > 0) {
-                    reportAlogMembdateService.saveBatch(membList);
+                    membList.add(membdate);
                 }
             }
+            if (membList.size() > 0) {
+                reportAlogMembdateService.saveBatch(membList);
+            }
 //            //直接进行项目经理审核
 //            reportMapper.update(new Report().setState(1),
 //                    new QueryWrapper<Report>().in("id", ids));
@@ -1763,38 +1761,37 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         Report oneReport = reportMapper.selectById(ids.get(0));
         int oldState = oneReport.getState();
-        if (oldState == -1) {
-            //需要进行审核记录保存
-            ReportAuditLog log = new ReportAuditLog();
-            log.setAuditChannel(0);//导入审核
-            log.setCompanyId(company.getId());
-            log.setResult("批量驳回");
-            log.setUserId(user.getId());
-            log.setUserName(user.getName());
-            reportAuditLogMapper.insert(log);
-            List<Report> allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
-            List<User> allUsers = userMapper.selectList(new QueryWrapper<User>().eq("company_id", company.getId()));
-            //当前所有员工的日期
-            List<ReportAlogMembdate> membList = new ArrayList<>();
-            for (Report r : allReports) {
-                LocalDate date = r.getCreateDate();
-                String creatorId = r.getCreatorId();
-                if (!membList.stream().anyMatch(m->m.getCreateDate().isEqual(date) && m.getUserId().equals(creatorId))) {
-                    //没有的话,存进去
-                    ReportAlogMembdate membdate = new ReportAlogMembdate();
-                    membdate.setRlogId(log.getId());
-                    membdate.setCreateDate(date);
-                    membdate.setUserId(creatorId);
-                    Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
-                    if (oneUser.isPresent()) {
-                        membdate.setUserName(oneUser.get().getName());
-                    }
-                    membList.add(membdate);
+        int channel = oldState == -1?0:1; //0-导入审核, 项目报告审核
+        //需要进行审核记录保存
+        ReportAuditLog log = new ReportAuditLog();
+        log.setAuditChannel(channel);//导入审核
+        log.setCompanyId(company.getId());
+        log.setResult("批量驳回");
+        log.setUserId(user.getId());
+        log.setUserName(user.getName());
+        reportAuditLogMapper.insert(log);
+        List<Report> allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
+        List<User> allUsers = userMapper.selectList(new QueryWrapper<User>().eq("company_id", company.getId()));
+        //当前所有员工的日期
+        List<ReportAlogMembdate> membList = new ArrayList<>();
+        for (Report r : allReports) {
+            LocalDate date = r.getCreateDate();
+            String creatorId = r.getCreatorId();
+            if (!membList.stream().anyMatch(m->m.getCreateDate().isEqual(date) && m.getUserId().equals(creatorId))) {
+                //没有的话,存进去
+                ReportAlogMembdate membdate = new ReportAlogMembdate();
+                membdate.setRlogId(log.getId());
+                membdate.setCreateDate(date);
+                membdate.setUserId(creatorId);
+                Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
+                if (oneUser.isPresent()) {
+                    membdate.setUserName(oneUser.get().getName());
                 }
+                membList.add(membdate);
             }
-            if (membList.size() > 0) {
-                reportAlogMembdateService.saveBatch(membList);
-            }
+        }
+        if (membList.size() > 0) {
+            reportAlogMembdateService.saveBatch(membList);
         }
         //直接进行项目经理审核驳回
         reportMapper.update(new Report().setState(2),
@@ -2504,6 +2501,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());
 
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
             HSSFSheet sheet = workbook.createSheet("工作日报");
@@ -2527,7 +2525,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (timeType.getCustomDegreeActive() == 1) {
                 titles.add(timeType.getCustomDegreeName());
             }
-
+            if (timeType.getShowFillauditTime() == 1) {
+                titles.add("填写时间");
+                titles.add("审核人");
+                titles.add("审核时间");
+            }
             titles.add("工作事项");
 
             //创建表头
@@ -2707,8 +2709,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     row.createCell(index).setCellValue(map.get("degreeName") != null?map.get("degreeName").toString():"");
                     index++;
                 }
+                //
+                if (timeType.getShowFillauditTime() == 1) {
+                    row.createCell(index).setCellValue(sdf.format((Date)map.get("time")));
+                    index++;
+                    row.createCell(index).setCellValue((String)map.get("projectAuditorName"));
+                    index++;
+                    if (map.get("projectAuditTime") == null) {
+                        row.createCell(index).setCellValue("");
+                    } else {
+                        row.createCell(index).setCellValue(sdf.format((Date)map.get("projectAuditTime")));
+                    }
+
+                    index++;
+//                    titles.add("填写时间");
+//                    titles.add("审核人");
+//                    titles.add("审核时间");
+                }
                 row.createCell(index).setCellValue((String) map.get("content"));
-                index++;
                 rowNum++;
             }
             //生成Excel文件
@@ -2938,12 +2956,28 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
         //获取企业微信同步数据
         List<Map> userCorpwxTimeMapList = userCorpwxTimeMapper.selectByAsk(companyId,startDate,endDate);
+
         String lastUserId = null;
         UserMonthWork lastUserData = null;
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         LocalDate localStart = LocalDate.parse(startDate, dtf);
         LocalDate localEnd = LocalDate.parse(endDate, dtf);
+
+        //按比例分摊的人员不需要出现在未填人员名单中
+        String[] split = startDate.split("-");
+        String ymonth = split[0]+"-"+split[1];
+        List<String> setPercentUserIdList = new ArrayList<>();
+        ProjectPercentage percentage = projectPercentageMapper.selectOne(new QueryWrapper<ProjectPercentage>().eq("company_id", companyId).eq("ymonth", ymonth));
+        if (percentage != null) {
+            String data = percentage.getData();
+            JSONArray array = JSONArray.parseArray(data);
+            for (int i=0;i<array.size(); i++) {
+                String userId = array.getJSONObject(i).getString("id");
+                setPercentUserIdList.add(userId);
+            }
+        }
+
         long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
         //按人员过滤
         for (User curUser: allRangeUserList){
@@ -2961,6 +2995,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (!WorkDayCalculateUtils.isWorkDay(date)) {
                         continue;
                     }
+                    //去掉设置了分摊比例的人员
+                    if (setPercentUserIdList.contains(curUser.getId())) {
+                        continue;
+                    }
                     final String dateStr = dtf.format(date);
                     if (!list.stream().anyMatch(item->item.get("id").equals(curUser.getId())&&sdf.format((java.sql.Date)item.get("createDate")).equals(dateStr))) {
                         UserDailyWorkItem noRecord = new UserDailyWorkItem();

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

@@ -801,12 +801,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         //查询工作时长设置
         TimeType time = timeTypeMapper.selectById(companyId);
         //默认角色
-        int roleId = 0;
+        SysRole defaultRole = null;
         List<SysRole> droleList = sysRoleMapper.selectList(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
         if (droleList.size() > 0) {
-            roleId = droleList.get(0).getId();
+            defaultRole = droleList.get(0);
         }
-        BigDecimal monthHours = time.getMonthDays().multiply(new BigDecimal(time.getAllday()));
+//        BigDecimal monthHours = time.getMonthDays().multiply(new BigDecimal(time.getAllday()));
         //然后处理文件
         String fileName = multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);
@@ -843,8 +843,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 XSSFCell nameCell = row.getCell(0);
                 XSSFCell phoneCell = row.getCell(1);
                 XSSFCell deptCell = row.getCell(2);
-                XSSFCell monthCostCell = row.getCell(3);
-                XSSFCell costCell = row.getCell(4);
+//                XSSFCell monthCostCell = row.getCell(3);
+//                XSSFCell costCell = row.getCell(4);
                 nameCell.setCellType(CellType.STRING);
                 phoneCell.setCellType(CellType.STRING);
 
@@ -883,30 +883,31 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     }
                 }
 
+                //改成导入时没有成本的方式,默认都是0
                 int salaryType = 0;
                 BigDecimal monthCost = new BigDecimal(0);
                 BigDecimal cost = new BigDecimal(0);
-                if (monthCostCell != null) {
-                    monthCostCell.setCellType(CellType.STRING);
-                    String monthCostString = monthCostCell.getStringCellValue();
-
-                    monthCost = MathUtil.isIntegerOrDigital(monthCostString)? new BigDecimal(monthCostString) : BigDecimal.valueOf(0);
-                    //计算时薪
-                    cost = monthCost.divide(monthHours, 2, RoundingMode.HALF_UP);
-                    if (MathUtil.isIntegerOrDigital(monthCostString)) {
-                        salaryType = 0;
-                    } else {
-                        salaryType = 1;
-                    }
-                } else {
-                    salaryType = 1;
-                }
-                if (costCell != null) {
-                    costCell.setCellType(CellType.STRING);
-                    String costString = costCell.getStringCellValue();
-                    cost = MathUtil.isIntegerOrDigital(costString) ? new BigDecimal(costString) : BigDecimal.valueOf(0);
-                }
-
+//                if (monthCostCell != null) {
+//                    monthCostCell.setCellType(CellType.STRING);
+//                    String monthCostString = monthCostCell.getStringCellValue();
+//
+//                    monthCost = MathUtil.isIntegerOrDigital(monthCostString)? new BigDecimal(monthCostString) : BigDecimal.valueOf(0);
+//                    //计算时薪
+//                    cost = monthCost.divide(monthHours, 2, RoundingMode.HALF_UP);
+//                    if (MathUtil.isIntegerOrDigital(monthCostString)) {
+//                        salaryType = 0;
+//                    } else {
+//                        salaryType = 1;
+//                    }
+//                } else {
+//                    salaryType = 1;
+//                }
+//                if (costCell != null) {
+//                    costCell.setCellType(CellType.STRING);
+//                    String costString = costCell.getStringCellValue();
+//                    cost = MathUtil.isIntegerOrDigital(costString) ? new BigDecimal(costString) : BigDecimal.valueOf(0);
+//                }
+//                salaryType = 1;
                 if (!StringUtils.isEmpty(phone)) {
                     phoneList.add(phone);
                 }
@@ -916,7 +917,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setName(name)
                         .setPassword(MD5Util.getPassword("000000"))
                         .setPhone(phone)
-                        .setRoleId(roleId)
+                        .setRoleId(defaultRole.getId())
+                        .setRoleName(defaultRole.getRolename())
                         .setDepartmentId(deptId)
                         .setDepartmentCascade(deptCascade)
                         .setColor(ColorUtil.randomColor())

+ 26 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -349,11 +349,32 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     Long time = base_info.getLong("date");
                     JSONArray workRules = base_info.getJSONObject("rule_info").getJSONArray("checkintime");
                     //获取上下午的考勤打卡规则
-                    String baseMorningStart = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("work_sec"));
-                    String baseMorningEnd = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("off_work_sec"));
-                    String baseAfternoonStart = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("work_sec"));
-                    String baseAfternoonEnd = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("off_work_sec"));
-                    int restTime = workRules.getJSONObject(1).getIntValue("work_sec") - workRules.getJSONObject(0).getIntValue("off_work_sec");
+                    String baseMorningStart = workRules.size()<=1?"09:00":DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("work_sec"));
+                    String baseMorningEnd = workRules.size()<=1?"12:00":DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("off_work_sec"));
+                    String baseAfternoonStart = workRules.size()<=1?"13:00":DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("work_sec"));
+                    String baseAfternoonEnd = workRules.size()<=1?"18:00":DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("off_work_sec"));
+                    if (workRules.size() == 0) {
+                        baseMorningStart = "09:00";
+                        baseMorningEnd = "12:00";
+                        baseAfternoonStart = "13:00";
+                        baseAfternoonEnd = "18:00";
+                    } else if (workRules.size() == 1) {
+                        baseMorningStart = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("work_sec"));
+                        baseMorningEnd = "12:00";
+                        baseAfternoonStart = "13:00";
+                        baseAfternoonEnd = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("off_work_sec"));
+                    } else {
+                        baseMorningStart = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("work_sec"));
+                        baseMorningEnd = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(0).getIntValue("off_work_sec"));
+                        baseAfternoonStart = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("work_sec"));
+                        baseAfternoonEnd = DateTimeUtil.getTimeFromSeconds(workRules.getJSONObject(1).getIntValue("off_work_sec"));
+                    }
+                    int restTime = 0;
+                    if (workRules.size() <= 1) {
+                        restTime = 3600;//一个小时午休
+                    } else {
+                        restTime = workRules.getJSONObject(1).getIntValue("work_sec") - workRules.getJSONObject(0).getIntValue("off_work_sec");
+                    }
 
                     LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).toLocalDate();
                     UserCorpwxTime ct = new UserCorpwxTime();

+ 13 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -242,18 +242,19 @@ public class TimingTask {
                 LocalDate monday = lastWeek.minusDays(weekDay-1);
                 LocalDate sunday = monday.plusDays(6);
                 List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("creator_id", u.getId()).between("create_date", monday, sunday));
-                List<Integer> pids = reportList.stream().map(Report::getProjectId).distinct().collect(Collectors.toList());
-                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", pids));
-                String collect = projectList.stream().map(Project::getProjectName).collect(Collectors.joining(","));
-                //计算总工时
-                double sum = reportList.stream().mapToDouble(Report::getWorkingTime).sum();
-                double waiting = reportList.stream().filter(r -> r.getState() == 0).mapToDouble(Report::getWorkingTime).sum();
-                double reject = reportList.stream().filter(r -> r.getState() == 2).mapToDouble(Report::getWorkingTime).sum();
-                double pass = reportList.stream().filter(r -> r.getState() == 1).mapToDouble(Report::getWorkingTime).sum();
-                DecimalFormat df = new DecimalFormat("#0.0");
-                String str = "您上周共参与了" + projectList.size()+"个项目,总工时为" + df.format(sum)+"小时。其中审核通过"+df.format(pass)
-                        +"小时, 待审核"+df.format(waiting)+"小时,驳回"+df.format(reject)+"小时。";
-                pushLastWeekReportFill(u, str);
+                if (reportList.size() > 0) {
+                    List<Integer> pids = reportList.stream().map(Report::getProjectId).distinct().collect(Collectors.toList());
+                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", pids));
+                    //计算总工时
+                    double sum = reportList.stream().mapToDouble(Report::getWorkingTime).sum();
+                    double waiting = reportList.stream().filter(r -> r.getState() == 0).mapToDouble(Report::getWorkingTime).sum();
+                    double reject = reportList.stream().filter(r -> r.getState() == 2).mapToDouble(Report::getWorkingTime).sum();
+                    double pass = reportList.stream().filter(r -> r.getState() == 1).mapToDouble(Report::getWorkingTime).sum();
+                    DecimalFormat df = new DecimalFormat("#0.0");
+                    String str = "您上周共参与了" + projectList.size()+"个项目,总工时为" + df.format(sum)+"小时。其中审核通过"+df.format(pass)
+                            +"小时, 待审核"+df.format(waiting)+"小时,驳回"+df.format(reject)+"小时。";
+                    pushLastWeekReportFill(u, str);
+                }
             }
         }
     }

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

@@ -17,7 +17,6 @@ spring:
     url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
     username: root
     password: HuoshiDB@2022
-
     hikari:
       maximum-pool-size: 10
       minimum-idle: 3

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 5 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


BIN
fhKeeper/formulahousekeeper/management-platform/人员导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/南京火石闪信网络科技有限公司_财务人员成本模板.xls


+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -2,18 +2,18 @@ var path = require('path')
 
 //  var ip = '127.0.0.1'
 // var ip = '192.168.2.36'
-var ip = '192.168.2.39'
+// var ip = '192.168.2.39'
 // var ip = '192.168.2.12'// var ip = '47.100.37.243' 
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
   build: {

+ 17 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -3419,7 +3419,17 @@
                     });
                 });
             },
-
+            getBasecostItemList() {
+                this.http.post('/project-basecost-setting/getReportBasecostList', {
+                    companyId: this.user.companyId
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.timeBasecostList = res.data;
+                    }
+                    });
+                
+            },
             // 获取个人某天的日报
             getReport() {
                 this.http.post( this.port.report.getPort, {
@@ -3439,7 +3449,7 @@
                         this.jsTime = quanbu
                         var list = res.data;
                         this.report = list;
-                        this.timeBasecostList = res.data.timeBasecostList;
+                        
                         if(list.report.length != 0) {
                             var arr = [];
                             this.canEdit = false;
@@ -3588,6 +3598,9 @@
                                     worktimeList:[{}],
                                 }],
                             }
+                    if (this.timeBasecostList&&this.timeBasecostList.length>0) {
+                        this.workForm.domains[0].basecostId = this.timeBasecostList[0].id;
+                    }        
                     this.canEdit = true;
                 }
                 
@@ -4248,7 +4261,7 @@
                         worktimeList:[{}],
                         // degreeId: '',
                 };
-                if (this.timeBasecostList.length > 0) {
+                if (this.timeBasecostList && this.timeBasecostList.length > 0) {
                     //默认给第一个,必填字段
                     addItem.basecostId = this.timeBasecostList[0].id;
                 }
@@ -4839,6 +4852,7 @@
             this.getDepartment();
             this.scrollFunction()
             this.userssHu();
+            this.getBasecostItemList();
             if(this.user.timeType.lockWorktime){
                 this.timeRange = this.timeRange.filter(item => {return item <= this.user.timeType.allday})
             }

+ 96 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -41,6 +41,9 @@
                         <el-button @click="batchApprove(true)" style="margin-left:10px;" :loading="batchApproveLoading" :disabled="multipleSelection.length==0" size="mini">批量通过</el-button>
                         <el-button @click="batchApprove(false)"  :loading="batchDenyLoading"  :disabled="multipleSelection.length==0" size="mini">批量驳回</el-button>
                     </el-form-item>
+                    <el-form-item style="margin-left:20px;" v-if="permissions.importAudit">
+                    <el-link type="primary" @click="recordList(),recordDialogVisible = true,pageIndexList = 1,pageSizeList = 20">审核记录</el-link>
+                    </el-form-item>
                 <!-- </div> -->
             </el-form>
         </el-col>
@@ -175,6 +178,55 @@
                 style="float:right;"
             ></el-pagination>
         </el-col> -->
+
+        
+        <!-- 审核记录弹窗 -->
+        <el-dialog title="审核记录" :visible.sync="recordDialogVisible" width="800px" :before-close="handleClose">
+            <div style="height: 430px">
+                <el-table :data="recordLists" style="width: 100%" height="400">
+                    <el-table-column prop="userName" label="操作人" width="150"></el-table-column>
+                    <el-table-column prop="indate" label="审核时间"></el-table-column>
+                    <el-table-column prop="result" label="审核结果"></el-table-column>
+                    <el-table-column prop="date" label="员工/日期" width="200">
+                        <template slot-scope="scope">
+                            <div>
+                                <div v-if="scope.row.membdateList.length > 3">
+                                    <el-popover placement="top" width="400" trigger="hover">
+                                    <div>
+                                        <span v-for="(item, index) in scope.row.membdateList" :key="index">
+                                            {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                        </span>
+                                    </div>
+                                    <div slot="reference" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width: 180px;">
+                                        <span v-for="(item, index) in scope.row.membdateList" :key="index">
+                                            {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                        </span>
+                                    </div>
+                                    </el-popover>
+                                </div>
+                                <div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width: 180px;" v-else>
+                                    <span v-for="(item, index) in scope.row.membdateList" :key="index">
+                                        {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                    </span>
+                                </div>
+                            </div>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-col v-if="search.value != -1" :span="24" class="toolbar">
+                    <el-pagination
+                        @size-change="handleSizeChangeList"
+                        @current-change="handleCurrentChangeList"
+                        :page-sizes="[20 , 50 , 80 , 100]"
+                        :page-size="20"
+                        layout="total, sizes, prev, pager, next"
+                        :total="totals"
+                        style="float:right;"
+                    ></el-pagination>
+                </el-col> 
+            </div>
+        </el-dialog>
+
     </section>
 </template>
 
@@ -213,7 +265,12 @@
                 logining: false,
                 multipleSelection: [],
                 usersList: [],
-                dataTime: []
+                dataTime: [],
+                recordDialogVisible: false,
+                recordLists: [],
+                totals: 0,
+                pageIndexList: 1,
+                pageSizeList: 20
             };
         },
         filters: {
@@ -224,7 +281,33 @@
             }
         },
         methods: {
-            
+            // 获取审核记录
+            recordList() {
+                // this.recordDialogVisible = true
+                // return
+                this.http.post( '/report-audit-log/getProjectReportAuditLog', {
+                    companyId: this.user.companyId,
+                    pageIndex: this.pageIndexList,
+                    pageSize: this.pageSizeList
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.recordLists = res.data.records
+                        this.totals = res.data.total
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             // 获取部门列表
             getDepartment() {
                 this.http.post( this.port.manage.depList, {},
@@ -298,6 +381,17 @@
                 this.getList();
             },
 
+            //分页
+            handleCurrentChangeList(val) {
+                this.pageIndexList = val;
+                this.recordList();
+            },
+
+            handleSizeChangeList(val) {
+                this.pageSizeList = val;
+                this.recordList();
+            },
+
             //获取待审核的数据列表
             getList() {
                 this.listLoading = true;

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_import.vue

@@ -151,7 +151,7 @@
             ></el-pagination>
         </el-col>
 
-        <!-- 审核记录痰喘 -->
+        <!-- 审核记录弹窗 -->
         <el-dialog title="审核记录" :visible.sync="recordDialogVisible" width="800px" :before-close="handleClose">
             <div style="height: 430px">
                 <el-table :data="recordLists" style="width: 100%" height="400">