|
@@ -47,6 +47,9 @@ import java.time.format.DateTimeFormatter;
|
|
|
import java.time.format.DateTimeParseException;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CountDownLatch;
|
|
|
+import java.util.concurrent.Executor;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -62,7 +65,7 @@ import java.util.stream.Collectors;
|
|
|
public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
|
|
|
// @Resource
|
|
|
// AsyncTaskExecutor asyncTaskExecutor;//注入线程池对象
|
|
|
-
|
|
|
+ private final static Executor executor = Executors.newFixedThreadPool(3);//启用多线程
|
|
|
@Value("${wx.template_report_pass}")
|
|
|
public String TEMPLATE_REPORT_PASS;
|
|
|
@Value("${wx.template_report_reject}")
|
|
@@ -3993,7 +3996,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return msg;
|
|
|
}
|
|
|
ThirdPartyInterface thirdPartyInterface = thirdPartyInterfaceList.get(0);
|
|
|
- List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getCompanyId()).orderByAsc("operate_date"));
|
|
|
+ List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getCompanyId()).ge("operate_date",openDate.atTime(LocalTime.now())).orderByAsc("operate_date"));
|
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", thirdPartyInterface.getCompanyId()));
|
|
|
if(LocalDateTime.now().isAfter(thirdPartyInterface.getExpireTime())){
|
|
|
msg.setError("token过期失效");
|
|
@@ -4001,37 +4004,44 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
if(token.equals(thirdPartyInterface.getToken())){
|
|
|
List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDate(startDate,thirdPartyInterface.getCompanyId(), null, endDate, null, 1, null);
|
|
|
+ final CountDownLatch latch=new CountDownLatch(allReportByDate.size());
|
|
|
for (HashMap<String, Object> map : allReportByDate) {
|
|
|
- java.sql.Date sqlCreateDate= (java.sql.Date) map.get("createDate");
|
|
|
- java.sql.Timestamp sqlProjectAuditTime= (Timestamp) map.get("projectAuditTime");
|
|
|
- java.sql.Timestamp sqlTime= (Timestamp) map.get("time");
|
|
|
- if(sqlCreateDate!=null){
|
|
|
- LocalDate createDate = sqlCreateDate.toLocalDate();
|
|
|
- map.put("createDate",df.format(createDate));
|
|
|
- }
|
|
|
- if(sqlProjectAuditTime!=null){
|
|
|
- LocalDateTime projectAuditTime = sqlProjectAuditTime.toLocalDateTime();
|
|
|
- map.put("projectAuditTime",projectAuditTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
- }
|
|
|
- if(sqlTime!=null){
|
|
|
- LocalDateTime time = sqlTime.toLocalDateTime();
|
|
|
- map.put("time",time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
- }
|
|
|
- List<ReportLog> item=new ArrayList<>();
|
|
|
- Integer reportId = (Integer) map.get("id");
|
|
|
- for (ReportLog reportLog : reportLogList) {
|
|
|
- List<String> list = Arrays.asList(reportLog.getReportIds().split(","));
|
|
|
- reportLog.setCreatorName(!userList.stream().filter(
|
|
|
- ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().isPresent()?"":userList.stream().filter(
|
|
|
- ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().get().getName());
|
|
|
- reportLog.setOperateName(!userList.stream().filter(
|
|
|
- ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().isPresent()?"":userList.stream().filter(
|
|
|
- ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().get().getName());
|
|
|
- if(list.contains(String.valueOf(reportId))&&!reportLog.getMsg().contains("提交")){
|
|
|
- item.add(reportLog);
|
|
|
+ executor.execute(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ java.sql.Date sqlCreateDate= (java.sql.Date) map.get("createDate");
|
|
|
+ java.sql.Timestamp sqlProjectAuditTime= (Timestamp) map.get("projectAuditTime");
|
|
|
+ java.sql.Timestamp sqlTime= (Timestamp) map.get("time");
|
|
|
+ if(sqlCreateDate!=null){
|
|
|
+ LocalDate createDate = sqlCreateDate.toLocalDate();
|
|
|
+ map.put("createDate",df.format(createDate));
|
|
|
+ }
|
|
|
+ if(sqlProjectAuditTime!=null){
|
|
|
+ LocalDateTime projectAuditTime = sqlProjectAuditTime.toLocalDateTime();
|
|
|
+ map.put("projectAuditTime",projectAuditTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ }
|
|
|
+ if(sqlTime!=null){
|
|
|
+ LocalDateTime time = sqlTime.toLocalDateTime();
|
|
|
+ map.put("time",time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ }
|
|
|
+ List<ReportLog> item=new ArrayList<>();
|
|
|
+ Integer reportId = (Integer) map.get("id");
|
|
|
+ for (ReportLog reportLog : reportLogList) {
|
|
|
+ List<String> list = Arrays.asList(reportLog.getReportIds().split(","));
|
|
|
+ reportLog.setCreatorName(!userList.stream().filter(
|
|
|
+ ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().isPresent()?"":userList.stream().filter(
|
|
|
+ ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().get().getName());
|
|
|
+ reportLog.setOperateName(!userList.stream().filter(
|
|
|
+ ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().isPresent()?"":userList.stream().filter(
|
|
|
+ ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().get().getName());
|
|
|
+ if(list.contains(String.valueOf(reportId))&&!reportLog.getMsg().contains("提交")){
|
|
|
+ item.add(reportLog);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put("checkLog",item);
|
|
|
+ latch.countDown();
|
|
|
}
|
|
|
- }
|
|
|
- map.put("checkLog",item);
|
|
|
+ });
|
|
|
}
|
|
|
msg.data=allReportByDate;
|
|
|
}
|
|
@@ -4040,46 +4050,93 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
|
|
|
@Override
|
|
|
public HttpRespMsg fixIssue() {
|
|
|
- Integer companyId = 862;
|
|
|
- Company company = companyMapper.selectById(companyId);
|
|
|
- System.out.println("========处理公司======="+company.getCompanyName());
|
|
|
- //查找某日某天的日报,项目上已经都审核通过,但是state = 0,并且没有走到下一个阶段的
|
|
|
- List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId));
|
|
|
- List<String> creatorIds = reportList.stream().map(Report::getCreatorId).distinct().collect(Collectors.toList());
|
|
|
- List<LocalDate> dateList = reportList.stream().map(Report::getCreateDate).distinct().collect(Collectors.toList());
|
|
|
- List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
- List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ //处理被误操作为自动审核的数据,
|
|
|
+ List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(new QueryWrapper<AuditWorkflowTimeSetting>().select("distinct company_id"));
|
|
|
+ System.out.println("有审批流的公司size="+settings.size());
|
|
|
+
|
|
|
+ List<Report> reportList = reportMapper.selectList(
|
|
|
+ new QueryWrapper<Report>().select("company_id, id, state, project_auditor_id, creator_id, create_date")
|
|
|
+ .eq("report_auto_approve", 1));
|
|
|
+ reportList = reportList.stream().filter(r->r.getCompanyId() != 767).collect(Collectors.toList());
|
|
|
+ System.out.println("查询到数据=="+reportList.size());
|
|
|
+ int dealCnt = 0;
|
|
|
+ List<Report> auditWorkflowReportList = new ArrayList<>();
|
|
|
+ List<Report> noWorkflowReportList = new ArrayList<>();
|
|
|
+ for (Report report : reportList) {
|
|
|
+ if (!settings.stream().anyMatch(s->s.getCompanyId().equals(report.getCompanyId()))) {
|
|
|
+ //无审批流的公司,直接通过
|
|
|
+ Report r = new Report();
|
|
|
+ r.setId(report.getId());
|
|
|
+ r.setReportAutoApprove(0);
|
|
|
+ r.setProjectAuditState(0);
|
|
|
+ r.setState(0);
|
|
|
+ noWorkflowReportList.add(r);
|
|
|
+ dealCnt++;
|
|
|
+ } else {
|
|
|
+ auditWorkflowReportList.add(report);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (noWorkflowReportList.size() > 0) {
|
|
|
+ updateBatchById(noWorkflowReportList);
|
|
|
+ }
|
|
|
|
|
|
- for (String creator : creatorIds) {
|
|
|
- User user = userList.stream().filter(u -> u.getId().equals(creator)).findFirst().get();
|
|
|
- String creatorName = user.getName();
|
|
|
- String dateStr = "";
|
|
|
- for (LocalDate date : dateList) {
|
|
|
- //某人某天的全部日报
|
|
|
- List<Report> userDayReport = reportList.stream().filter(r -> r.getCreatorId().equals(creator) && r.getCreateDate().isEqual(date)).collect(Collectors.toList());
|
|
|
- if (userDayReport.size() > 0) {
|
|
|
- //有当前的日报
|
|
|
- boolean isAllProjectAuditPass = !userDayReport.stream().anyMatch(r->r.getProjectAuditState() != 1);
|
|
|
- boolean isAllState0 = !userDayReport.stream().anyMatch(r->r.getState() != 0);
|
|
|
-
|
|
|
- if (isAllProjectAuditPass && isAllState0) {
|
|
|
- //当前的日报项目全部通过,但是日报本身还是待审核状态的,需要更新
|
|
|
- dateStr +=dtf.format(date) + ", ";
|
|
|
- List<Integer> rids = userDayReport.stream().map(Report::getId).collect(Collectors.toList());
|
|
|
- //测试: 翁浩勃
|
|
|
-// if ("翁浩勃".equals(creatorName)) {
|
|
|
-//
|
|
|
-// }
|
|
|
- selfUpdateToNextWorkFlow(companyId, user, rids, allDepts);
|
|
|
+ System.out.println("已处理无审批流的日报size="+dealCnt);
|
|
|
+ System.out.println("有审批流的日报size="+auditWorkflowReportList.size());
|
|
|
+ //检查哪些是项目没审核的
|
|
|
+ int projectAuditManulPassCnt = 0;
|
|
|
+ int blurFind = 0;
|
|
|
+ List<Report> updateList = new ArrayList<>();
|
|
|
+ for (Report report : auditWorkflowReportList) {
|
|
|
+ int count = reportLogMapper.selectCount(new QueryWrapper<ReportLog>()
|
|
|
+ .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
|
|
|
+ .eq("report_ids", report.getId()));
|
|
|
+ boolean findLog = false;
|
|
|
+
|
|
|
+ if (count == 0) {
|
|
|
+ //模糊匹配一下
|
|
|
+ List<ReportLog> reportLogs = reportLogMapper.selectList(new QueryWrapper<ReportLog>().select("id, report_ids")
|
|
|
+ .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
|
|
|
+ .eq("company_id", report.getCompanyId())
|
|
|
+ .eq("creator_id", report.getCreatorId())
|
|
|
+ .eq("create_date", report.getCreateDate()));
|
|
|
+ if (reportLogs.size() > 0) {
|
|
|
+ //找到匹配的记录
|
|
|
+ System.out.println("开始匹配模糊===reportLog Size=="+reportLogs.size());
|
|
|
+ for (ReportLog log : reportLogs) {
|
|
|
+ String[] arr = log.getReportIds().split(",");
|
|
|
+ for (String s : arr) {
|
|
|
+ System.out.println("比对=logId="+log.getId()+", "+s+" , "+report.getId());
|
|
|
+ if (s.equals(report.getId().toString())) {
|
|
|
+ findLog = true;
|
|
|
+ blurFind++;
|
|
|
+ System.out.println("模糊匹配到了====="+blurFind);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ findLog = true;
|
|
|
}
|
|
|
- if (!StringUtils.isEmpty(dateStr)) {
|
|
|
- System.out.println(creatorName+" " + dateStr);
|
|
|
+ Report r = new Report();
|
|
|
+ r.setId(report.getId());
|
|
|
+ r.setReportAutoApprove(0);
|
|
|
+ r.setState(0);
|
|
|
+ if (findLog) {
|
|
|
+ projectAuditManulPassCnt++;
|
|
|
+ //已经是手动审核通过的,不需要撤回projectAuditState了
|
|
|
+ } else {
|
|
|
+ //没有项目审核通过的,需要撤回为0状态
|
|
|
+ r.setProjectAuditState(0);
|
|
|
}
|
|
|
+ updateList.add(r);
|
|
|
}
|
|
|
|
|
|
+ System.out.println("手动审核过的日报size="+projectAuditManulPassCnt+", 其中模糊匹配到的size=" +blurFind);
|
|
|
+ if (updateList.size() > 0) {
|
|
|
+ updateBatchById(updateList);
|
|
|
+ }
|
|
|
+ System.out.println("===无审批流的日报size="+noWorkflowReportList.size()+", 有审批流的日报size="+updateList.size());
|
|
|
return new HttpRespMsg();
|
|
|
}
|
|
|
|