|
@@ -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();
|