|
@@ -4209,7 +4209,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
titles.add(MessageUtils.message("excel.inputStage"));
|
|
titles.add(MessageUtils.message("excel.inputStage"));
|
|
}
|
|
}
|
|
//每个日报的审批流程记录
|
|
//每个日报的审批流程记录
|
|
- List<ReportLogDetail> logDetails = new ArrayList<>();
|
|
|
|
|
|
+// List<ReportLogDetail> logDetails = new ArrayList<>();
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
// titles.add("填写时间");
|
|
// titles.add("填写时间");
|
|
// titles.add("项目审核人");
|
|
// titles.add("项目审核人");
|
|
@@ -4219,7 +4219,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
titles.add(MessageUtils.message("excel.proReviewer"));
|
|
titles.add(MessageUtils.message("excel.proReviewer"));
|
|
titles.add(MessageUtils.message("excel.auditTime"));
|
|
titles.add(MessageUtils.message("excel.auditTime"));
|
|
titles.add(MessageUtils.message("excel.auditProcess"));
|
|
titles.add(MessageUtils.message("excel.auditProcess"));
|
|
- logDetails = reportLogDetailMapper.selectList(new QueryWrapper<ReportLogDetail>().eq("company_id", company.getId()).between("work_date", startDate, endDate));
|
|
|
|
|
|
+// logDetails = reportLogDetailMapper.selectList(new QueryWrapper<ReportLogDetail>().select("report_id, msg, operator_id, operate_date").eq("company_id", company.getId()).between("work_date", startDate, endDate));
|
|
}
|
|
}
|
|
|
|
|
|
//titles.add("工作事项");
|
|
//titles.add("工作事项");
|
|
@@ -4238,6 +4238,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
//新增数据行 并且装填数据
|
|
//新增数据行 并且装填数据
|
|
int rowNum = 1;
|
|
int rowNum = 1;
|
|
List<HashMap<String, Object>> allReportByDate = null;
|
|
List<HashMap<String, Object>> allReportByDate = null;
|
|
|
|
+
|
|
|
|
+ System.out.println("开始查询"+LocalDateTime.now().toString());
|
|
List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
|
|
List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
|
|
//获取部门的所有子部门
|
|
//获取部门的所有子部门
|
|
List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
|
|
List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
|
|
@@ -4256,10 +4258,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
//检查是否是项目负责人
|
|
//检查是否是项目负责人
|
|
int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
|
|
int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
|
|
if (cnt > 0) {
|
|
if (cnt > 0) {
|
|
- reportsFromProjects = reportMapper.getProjectMembReportByDate(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
|
|
+ if (timeType.getShowFillauditTime() == 1) {
|
|
|
|
+ reportsFromProjects = reportMapper.getProjectMembReportByDateWithReportLog(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ } else{
|
|
|
|
+ reportsFromProjects = reportMapper.getProjectMembReportByDate(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ }
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
//普通员工只能看自己的
|
|
//普通员工只能看自己的
|
|
- reportsFromProjects = reportMapper.getAllReportByDate(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
|
|
+ if (timeType.getShowFillauditTime() == 1) {
|
|
|
|
+ reportsFromProjects = reportMapper.getAllReportByDateWithReportLog(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ } else {
|
|
|
|
+ reportsFromProjects = reportMapper.getAllReportByDate(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
if (allReportByDate == null) {
|
|
if (allReportByDate == null) {
|
|
allReportByDate = reportsFromProjects;
|
|
allReportByDate = reportsFromProjects;
|
|
@@ -4279,10 +4291,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
// }
|
|
// }
|
|
else {
|
|
else {
|
|
//看公司所有人的
|
|
//看公司所有人的
|
|
- allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
|
|
|
|
+ allReportByDate = null;
|
|
|
|
+ if (timeType.getShowFillauditTime() == 1) {
|
|
|
|
+ allReportByDate = reportMapper.getAllReportByDateWithReportLog(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ } else {
|
|
|
|
+ allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ System.out.println("进度1"+LocalDateTime.now().toString());
|
|
//获取企业微信考勤数据
|
|
//获取企业微信考勤数据
|
|
- List<UserCorpwxTime> userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", user.getCompanyId()).between("create_date", startDate, endDate));
|
|
|
|
|
|
+ List<UserCorpwxTime> userCorpwxTimeList = new ArrayList<>();
|
|
|
|
+ if(timeType.getSyncCorpwxTime()==1) {
|
|
|
|
+ userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", user.getCompanyId()).between("create_date", startDate, endDate));
|
|
|
|
+ }
|
|
|
|
+ System.out.println("进度2"+LocalDateTime.now().toString());
|
|
if (timeType.getMultiWorktime() == 1) {
|
|
if (timeType.getMultiWorktime() == 1) {
|
|
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
|
|
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
|
|
//重新处理一下数据,把工作时间和工作事项移出来
|
|
//重新处理一下数据,把工作时间和工作事项移出来
|
|
@@ -4325,14 +4347,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
allReportByDate = dealDataList;
|
|
allReportByDate = dealDataList;
|
|
}
|
|
}
|
|
- //HSSFRow条数范围限制0..65535
|
|
|
|
- if (allReportByDate.size() > 60000) {
|
|
|
|
|
|
+ //07Excel HSSFRow条数范围限制0..1048576
|
|
|
|
+ if (allReportByDate.size() > 1048576) {
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
//msg.setError("数据量过大,请分时间段导出");
|
|
//msg.setError("数据量过大,请分时间段导出");
|
|
msg.setError(MessageUtils.message("data.OversizeError"));
|
|
msg.setError(MessageUtils.message("data.OversizeError"));
|
|
return msg;
|
|
return msg;
|
|
}
|
|
}
|
|
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
|
|
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
DecimalFormat df = new DecimalFormat("#0.0");
|
|
DecimalFormat df = new DecimalFormat("#0.0");
|
|
int offsetSeconds = 0;
|
|
int offsetSeconds = 0;
|
|
if (company.getIsInternational() == 1) {
|
|
if (company.getIsInternational() == 1) {
|
|
@@ -4358,6 +4380,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
|
+ System.out.println("进度3"+LocalDateTime.now().toString());
|
|
|
|
+ long t1 = System.currentTimeMillis();
|
|
|
|
+ DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
for (Map<String, Object> map : allReportByDate) {
|
|
for (Map<String, Object> map : allReportByDate) {
|
|
List<String> item=new ArrayList<>();
|
|
List<String> item=new ArrayList<>();
|
|
item.add(String.valueOf(rowNum));
|
|
item.add(String.valueOf(rowNum));
|
|
@@ -4392,6 +4417,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
item.add((String) map.get("name"));
|
|
item.add((String) map.get("name"));
|
|
item.add(departmentService.getSupDepartment(dept,departments));
|
|
item.add(departmentService.getSupDepartment(dept,departments));
|
|
}
|
|
}
|
|
|
|
+
|
|
item.add((String) map.get("projectCode"));
|
|
item.add((String) map.get("projectCode"));
|
|
item.add((String) map.get("project"));
|
|
item.add((String) map.get("project"));
|
|
item.add((String) map.get("categoryName"));
|
|
item.add((String) map.get("categoryName"));
|
|
@@ -4449,13 +4475,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
} else {
|
|
} else {
|
|
item.add(sdf.format((Date)map.get("projectAuditTime")));
|
|
item.add(sdf.format((Date)map.get("projectAuditTime")));
|
|
}
|
|
}
|
|
- //审核流程显示
|
|
|
|
- List<ReportLogDetail> detailList = logDetails.stream().filter(log -> log.getReportId().equals((Integer) map.get("id"))).collect(Collectors.toList());
|
|
|
|
- if (detailList.size() > 0) {
|
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
|
- boolean isFirst = true;
|
|
|
|
- for (ReportLogDetail audit:detailList) {
|
|
|
|
- LocalDateTime operateDate = audit.getOperateDate();
|
|
|
|
|
|
+
|
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
|
+ boolean isFirst = true;
|
|
|
|
+ String logMsg = (String)map.get("logMsg");
|
|
|
|
+ if (logMsg != null) {
|
|
|
|
+ String[] logMsgs = logMsg.split("❤");
|
|
|
|
+ for (String msgItem : logMsgs) {
|
|
|
|
+ String[] splitItems = msgItem.split("@");
|
|
|
|
+ //operator_id@operate_date@msg
|
|
|
|
+ String operateDateStr = splitItems[1];
|
|
|
|
+ LocalDateTime operateDate = LocalDateTime.parse(operateDateStr, dtf);
|
|
|
|
+ ReportLogDetail audit = new ReportLogDetail();
|
|
|
|
+ audit.setOperatorId(splitItems[0]);
|
|
|
|
+ audit.setOperateDate(operateDate);
|
|
|
|
+ audit.setMsg(splitItems[2]);
|
|
|
|
+
|
|
if (company.getIsInternational() == 1) {
|
|
if (company.getIsInternational() == 1) {
|
|
operateDate = operateDate.plusSeconds(offsetSeconds);
|
|
operateDate = operateDate.plusSeconds(offsetSeconds);
|
|
}
|
|
}
|
|
@@ -4488,10 +4523,90 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
sb.append(msg);
|
|
sb.append(msg);
|
|
}
|
|
}
|
|
- item.add(sb.toString());
|
|
|
|
- } else {
|
|
|
|
- item.add("");
|
|
|
|
}
|
|
}
|
|
|
|
+ //审核流程显示;//stream性能较差,换成for循环
|
|
|
|
+// for (int m=0; m <logDetails.size(); m++) {
|
|
|
|
+// ReportLogDetail audit = logDetails.get(m);
|
|
|
|
+// //仅处理当前日报的审核流程
|
|
|
|
+// if (audit.getReportId().intValue() == ((Integer)map.get("id")).intValue()) {
|
|
|
|
+// LocalDateTime operateDate = audit.getOperateDate();
|
|
|
|
+// if (company.getIsInternational() == 1) {
|
|
|
|
+// operateDate = operateDate.plusSeconds(offsetSeconds);
|
|
|
|
+// }
|
|
|
|
+// String time = dtf.format(operateDate);
|
|
|
|
+// String msg= "";
|
|
|
|
+// if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
+// Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(audit.getOperatorId())).findFirst();
|
|
|
|
+// if(first.isPresent()){
|
|
|
|
+// if(audit.getMsg().contains("提交了")){
|
|
|
|
+// int i = audit.getMsg().indexOf("提");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }else if(audit.getMsg().contains("审核通过了")){
|
|
|
|
+// int i = audit.getMsg().indexOf("审");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }else if(audit.getMsg().contains("驳回了")) {
|
|
|
|
+// int i = audit.getMsg().indexOf("驳");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }else {
|
|
|
|
+// msg = time+" " + audit.getMsg();
|
|
|
|
+// }
|
|
|
|
+// if (!isFirst) {
|
|
|
|
+// sb.append("->");
|
|
|
|
+// } else {
|
|
|
|
+// isFirst = false;
|
|
|
|
+// }
|
|
|
|
+// sb.append(msg);
|
|
|
|
+// //去掉这条记录,减少下次循环的次数
|
|
|
|
+// logDetails.remove(m);
|
|
|
|
+// m--;//因为删除了一条记录,所以要减少一次循环
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+ item.add(sb.toString());
|
|
|
|
+// List<ReportLogDetail> detailList = logDetails.parallelStream().filter(log -> log.getReportId().equals((Integer) map.get("id"))).collect(Collectors.toList());
|
|
|
|
+// if (detailList.size() > 0) {
|
|
|
|
+// for (ReportLogDetail audit:detailList) {
|
|
|
|
+// LocalDateTime operateDate = audit.getOperateDate();
|
|
|
|
+// if (company.getIsInternational() == 1) {
|
|
|
|
+// operateDate = operateDate.plusSeconds(offsetSeconds);
|
|
|
|
+// }
|
|
|
|
+// String time = dtf.format(operateDate);
|
|
|
|
+// String msg= "";
|
|
|
|
+// if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
+// Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(audit.getOperatorId())).findFirst();
|
|
|
|
+// if(first.isPresent()){
|
|
|
|
+// if(audit.getMsg().contains("提交了")){
|
|
|
|
+// int i = audit.getMsg().indexOf("提");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }else if(audit.getMsg().contains("审核通过了")){
|
|
|
|
+// int i = audit.getMsg().indexOf("审");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }else if(audit.getMsg().contains("驳回了")) {
|
|
|
|
+// int i = audit.getMsg().indexOf("驳");
|
|
|
|
+// String substring = audit.getMsg().substring(0, i);
|
|
|
|
+// msg = time+" " + audit.getMsg().replaceAll(substring,"\\$userName="+first.get().getCorpwxUserid()+"\\$");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }else {
|
|
|
|
+// msg = time+" " + audit.getMsg();
|
|
|
|
+// }
|
|
|
|
+// if (!isFirst) {
|
|
|
|
+// sb.append("->");
|
|
|
|
+// } else {
|
|
|
|
+// isFirst = false;
|
|
|
|
+// }
|
|
|
|
+// sb.append(msg);
|
|
|
|
+// }
|
|
|
|
+// item.add(sb.toString());
|
|
|
|
+// } else {
|
|
|
|
+// item.add("");
|
|
|
|
+// }
|
|
}
|
|
}
|
|
item.add((String) map.get("content"));
|
|
item.add((String) map.get("content"));
|
|
if(stateKey==1){
|
|
if(stateKey==1){
|
|
@@ -4580,10 +4695,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
dataList.add(item);
|
|
dataList.add(item);
|
|
rowNum++;
|
|
rowNum++;
|
|
}
|
|
}
|
|
|
|
+ System.out.println("进度4"+LocalDateTime.now().toString());
|
|
|
|
+ long t2 = System.currentTimeMillis();
|
|
|
|
+ System.out.println("计算耗时:"+(t2-t1)+", 共"+rowNum+"条数据");
|
|
//生成Excel文件
|
|
//生成Excel文件
|
|
//String fileUrlSuffix = (startDate==null?"":(startDate+"至"+endDate))+"工作日报" + System.currentTimeMillis() + ".xls";
|
|
//String fileUrlSuffix = (startDate==null?"":(startDate+"至"+endDate))+"工作日报" + System.currentTimeMillis() + ".xls";
|
|
- String fileUrlSuffix = (startDate==null?"":(startDate+MessageUtils.message("leave.to")+endDate))+MessageUtils.message("excel.workReport") + System.currentTimeMillis() + ".xls";
|
|
|
|
|
|
+ String fileUrlSuffix = (startDate==null?"":(startDate+MessageUtils.message("leave.to")+endDate))+MessageUtils.message("excel.workReport") + System.currentTimeMillis();
|
|
httpRespMsg = excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileUrlSuffix,dataList,path);
|
|
httpRespMsg = excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileUrlSuffix,dataList,path);
|
|
|
|
+ System.out.println("进度5, 导出结束"+LocalDateTime.now().toString());
|
|
} catch (NullPointerException e) {
|
|
} catch (NullPointerException e) {
|
|
//httpRespMsg.setError("验证失败或缺少数据");
|
|
//httpRespMsg.setError("验证失败或缺少数据");
|
|
httpRespMsg.setError(MessageUtils.message("access.verErrorOrDataLack"));
|
|
httpRespMsg.setError(MessageUtils.message("access.verErrorOrDataLack"));
|