|
@@ -3018,6 +3018,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
|
|
|
+ List<String> cpwxIds = new ArrayList<>();
|
|
|
//按人员过滤
|
|
|
for (User curUser: allRangeUserList){
|
|
|
for (int i=0;i<=cnt; i++) {
|
|
@@ -3042,6 +3043,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
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();
|
|
|
noRecord.userId = curUser.getId();
|
|
|
+ cpwxIds.add(curUser.getCorpwxUserid());
|
|
|
List<Map> userCorpwxListOn = userCorpwxTimeMapList.stream().filter(mapList -> mapList.get("create_date").toString().equals(dateStr)
|
|
|
&& mapList.get("corpwx_userid").equals(curUser.getCorpwxUserid())).collect(Collectors.toList());
|
|
|
if(!userCorpwxListOn.isEmpty()){
|
|
@@ -3060,6 +3062,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //考勤打卡时间
|
|
|
+ if (cpwxIds.size() > 0) {
|
|
|
+ List<UserCorpwxTime> cardTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().in("corpwx_userid", cpwxIds).between("create_date", startDate, endDate));
|
|
|
+ for (UserDailyWorkItem item : noReportDataList) {
|
|
|
+ String corpwxUserid = allRangeUserList.stream().filter(all -> all.getId().equals(item.userId)).findFirst().get().getCorpwxUserid();
|
|
|
+ Optional<UserCorpwxTime> first = cardTimeList.stream().filter(card -> card.getCorpwxUserid().equals(corpwxUserid) && item.createDate.startsWith(dtf.format(card.getCreateDate()))).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ UserCorpwxTime userCorpwxTime = first.get();
|
|
|
+ item.cardTime = userCorpwxTime.getStartTime()+"~"+userCorpwxTime.getEndTime()+", "+userCorpwxTime.getWorkHours()+"h";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//排序
|
|
|
noReportDataList.sort(new Comparator<UserDailyWorkItem>() {
|
|
|
@Override
|
|
@@ -3083,6 +3098,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
msg.data = noReportDataList;
|
|
|
return msg;
|
|
|
}
|
|
@@ -3090,6 +3106,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
@Override
|
|
|
public HttpRespMsg exportNoReportUserList(HttpServletRequest request, String startDate, String endDate) {
|
|
|
HttpRespMsg msg = getNoReportUserList(request, startDate, endDate);
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
+ TimeType timeType = timeTypeMapper.selectById(userMapper.selectById(token).getCompanyId());
|
|
|
String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
|
|
|
List<UserDailyWorkItem> dailyWorkItems = (List<UserDailyWorkItem>) msg.data;
|
|
|
List<List<String>> dataList = new ArrayList<>();
|
|
@@ -3097,6 +3115,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
titleList.add("部门");
|
|
|
titleList.add("姓名");
|
|
|
titleList.add("未填日期");
|
|
|
+ if (timeType.getSyncCorpwxTime() == 1) {
|
|
|
+ //企业微信同步考勤打卡的,需要加上这一列
|
|
|
+ titleList.add("考勤打卡");
|
|
|
+ }
|
|
|
dataList.add(titleList);
|
|
|
|
|
|
for (int i=0;i<dailyWorkItems.size(); i++) {
|
|
@@ -3105,10 +3127,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
line.add(dataItem.department);
|
|
|
line.add(dataItem.name);
|
|
|
line.add(dataItem.createDate);
|
|
|
+ if (timeType.getSyncCorpwxTime() == 1) {
|
|
|
+ line.add(dataItem.cardTime);
|
|
|
+ }
|
|
|
+
|
|
|
dataList.add(line);
|
|
|
}
|
|
|
//生成excel文件导出
|
|
|
- String fileName = "人员每日工时统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
|
|
|
+ String fileName = "未填人员统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
|
|
|
String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
httpRespMsg.data = resp;
|
|
@@ -3131,4 +3157,60 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return new HttpRespMsg();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg denyHisReport(String userId, String createDate, String reason, HttpServletRequest request) {
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ try {
|
|
|
+ User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Company company = companyMapper.selectById(user.getCompanyId());
|
|
|
+ if (reason == null) {
|
|
|
+ reason = "-";
|
|
|
+ }
|
|
|
+ QueryWrapper<Report> eq = new QueryWrapper<Report>().eq("create_date", createDate).eq("creator_id", userId);
|
|
|
+ List<Report> list = reportMapper.selectList(eq);
|
|
|
+ Report oneReport = null;
|
|
|
+ if (list.size() == 0) {
|
|
|
+ httpRespMsg.setError("日报已不存在");
|
|
|
+ return httpRespMsg;
|
|
|
+ } else if (list.get(0).getState() != 1) {
|
|
|
+ //只有已通过的历史记录才能撤销
|
|
|
+ httpRespMsg.setError("只有已通过的才可撤回审核");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ oneReport = list.get(0);
|
|
|
+ //直接进行项目经理审核驳回
|
|
|
+ reportMapper.update(new Report().setState(2)
|
|
|
+ .setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName()),
|
|
|
+ eq);
|
|
|
+ List<Integer> collect = list.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+ List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect));
|
|
|
+ String pNames = projectList.stream().map(Project::getProjectName).collect(Collectors.joining(", ", "[", "]"));
|
|
|
+ String str = "您"+createDate+"填写的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason;;
|
|
|
+ String fillUserId = oneReport.getCreatorId();
|
|
|
+
|
|
|
+ informationMapper.insert(new Information().setType(0).setContent(createDate).setUserId(fillUserId).setMsg(str));
|
|
|
+
|
|
|
+ //发送企业微信通知消息
|
|
|
+ User reporter = userMapper.selectById(fillUserId);
|
|
|
+ String corpwxUserid = reporter.getCorpwxUserid();
|
|
|
+ //先判断钉钉
|
|
|
+ if (reporter.getDingdingUserid() != null) {
|
|
|
+ projectMapper.selectById(oneReport.getProjectId()).getProjectName();
|
|
|
+ companyDingdingService.sendRejectReportMsg(reporter.getCompanyId(), createDate, pNames, reason, user.getName(), reporter.getDingdingUserid());
|
|
|
+ }
|
|
|
+ if (corpwxUserid != null) {
|
|
|
+ WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
|
|
|
+ wxCorpInfoService.sendWXCorpMsg(info, corpwxUserid, str);
|
|
|
+ } else if (reporter.getWxOpenid() != null){
|
|
|
+ //发送个人微信通知
|
|
|
+ pushReject(str, reporter, user.getName(), reason);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (NullPointerException e) {
|
|
|
+ httpRespMsg.setError("验证失败");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+
|
|
|
}
|