|
@@ -22,6 +22,7 @@ import org.apache.commons.io.FileUtils;
|
|
import org.apache.poi.EncryptedDocumentException;
|
|
import org.apache.poi.EncryptedDocumentException;
|
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
|
import org.apache.poi.ss.usermodel.*;
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.http.*;
|
|
import org.springframework.http.*;
|
|
@@ -36,6 +37,7 @@ import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import javax.print.DocFlavor;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.io.*;
|
|
import java.io.*;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
@@ -52,6 +54,7 @@ import java.time.temporal.TemporalAdjusters;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.CountDownLatch;
|
|
import java.util.concurrent.CountDownLatch;
|
|
import java.util.concurrent.Executor;
|
|
import java.util.concurrent.Executor;
|
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -1859,16 +1862,25 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
|
|
|
List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
- if (myProfessionList.size() == 0) {
|
|
|
|
|
|
+ if (myProfessionList.size() == 0 && !user.getRoleName().equals("超级管理员")) {
|
|
//httpRespMsg.setError("只有专业负责人才能进行专业审核");
|
|
//httpRespMsg.setError("只有专业负责人才能进行专业审核");
|
|
httpRespMsg.setError(MessageUtils.message("finance.masterProfessional"));
|
|
httpRespMsg.setError(MessageUtils.message("finance.masterProfessional"));
|
|
|
|
+ return httpRespMsg;
|
|
} else {
|
|
} else {
|
|
List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
oneReport = reportList.get(0);
|
|
oneReport = reportList.get(0);
|
|
ReportProfessionProgress item = new ReportProfessionProgress();
|
|
ReportProfessionProgress item = new ReportProfessionProgress();
|
|
item.setAuditState(1);
|
|
item.setAuditState(1);
|
|
- reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
|
-
|
|
|
|
|
|
+ boolean passAll = false;
|
|
|
|
+ if (user.getRoleName().equals("超级管理员")) {
|
|
|
|
+ //超级管理员,可以审核非自己担任专业负责人的
|
|
|
|
+ passAll = true;
|
|
|
|
+ }
|
|
|
|
+ if (passAll) {
|
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids));
|
|
|
|
+ } else {
|
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
|
+ }
|
|
//全部的专业都审核通过的情况下,更新部门待审核状态
|
|
//全部的专业都审核通过的情况下,更新部门待审核状态
|
|
int count = reportProfessionProgressService.count(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).ne("audit_state", 1));
|
|
int count = reportProfessionProgressService.count(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).ne("audit_state", 1));
|
|
if (count == 0) {
|
|
if (count == 0) {
|
|
@@ -5050,6 +5062,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
public HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate, Integer projectId,Integer stateKey,Integer departmentId, HttpServletRequest request) {
|
|
public HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate, Integer projectId,Integer stateKey,Integer departmentId, HttpServletRequest request) {
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
DateFormat timeDf = new SimpleDateFormat("yyyy-MM-dd");
|
|
DateFormat timeDf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
+ long t0 = System.currentTimeMillis();
|
|
|
|
+ long fetchDataTime = 0;
|
|
try {
|
|
try {
|
|
String userId = request.getHeader("Token");
|
|
String userId = request.getHeader("Token");
|
|
User user = userMapper.selectById(userId);
|
|
User user = userMapper.selectById(userId);
|
|
@@ -5059,6 +5073,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
Integer companyId = company.getId();
|
|
Integer companyId = company.getId();
|
|
List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", companyId));
|
|
List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", companyId));
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
|
|
+ boolean needCorpWxTranslate = (wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1);
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
|
List<List<String>> dataList=new ArrayList<>();
|
|
List<List<String>> dataList=new ArrayList<>();
|
|
List<String> titles = new ArrayList<String>();
|
|
List<String> titles = new ArrayList<String>();
|
|
@@ -5134,6 +5149,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
// titles.add("审核流程");
|
|
// titles.add("审核流程");
|
|
titles.add(MessageUtils.message("excel.fillTime"));
|
|
titles.add(MessageUtils.message("excel.fillTime"));
|
|
titles.add(MessageUtils.message("excel.proReviewer"));
|
|
titles.add(MessageUtils.message("excel.proReviewer"));
|
|
|
|
+ titles.add("项目经理");
|
|
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>().select("report_id, msg, operator_id, operate_date").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));
|
|
@@ -5159,6 +5175,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
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));
|
|
|
|
+ Department[] deptArray = departments.toArray(new Department[0]);
|
|
List<Integer> branchDepartment = null;
|
|
List<Integer> branchDepartment = null;
|
|
if(departmentId != null){
|
|
if(departmentId != null){
|
|
branchDepartment = departmentService.getBranchDepartment(departmentId,departments);
|
|
branchDepartment = departmentService.getBranchDepartment(departmentId,departments);
|
|
@@ -5210,11 +5227,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
//看公司所有人的
|
|
//看公司所有人的
|
|
|
|
+ long t1 = System.currentTimeMillis();
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
allReportByDate = reportMapper.getAllReportByDateWithReportLog(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
allReportByDate = reportMapper.getAllReportByDateWithReportLog(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
} else {
|
|
} else {
|
|
allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,branchDepartment);
|
|
}
|
|
}
|
|
|
|
+ long t2 = System.currentTimeMillis();
|
|
|
|
+ fetchDataTime = (t2-t1);
|
|
|
|
+ System.out.println("查数据库耗时:"+(t2-t1)/1000+"s");
|
|
}
|
|
}
|
|
//获取企业微信考勤数据
|
|
//获取企业微信考勤数据
|
|
List<UserCorpwxTime> userCorpwxTimeList = new ArrayList<>();
|
|
List<UserCorpwxTime> userCorpwxTimeList = new ArrayList<>();
|
|
@@ -5296,9 +5317,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));
|
|
- long t1 = System.currentTimeMillis();
|
|
|
|
DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
for (Map<String, Object> map : allReportByDate) {
|
|
for (Map<String, Object> map : allReportByDate) {
|
|
|
|
+ long p1 = System.currentTimeMillis();
|
|
List<String> item=new ArrayList<>();
|
|
List<String> item=new ArrayList<>();
|
|
item.add(String.valueOf(rowNum));
|
|
item.add(String.valueOf(rowNum));
|
|
item.add((String) map.get("jobNumber"));
|
|
item.add((String) map.get("jobNumber"));
|
|
@@ -5319,20 +5340,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
item.add(value);
|
|
item.add(value);
|
|
}
|
|
}
|
|
Department dept = null;
|
|
Department dept = null;
|
|
- for (Department department : departments) {
|
|
|
|
- if (map.containsKey("departmentId") && department.getDepartmentId().toString().equals(map.get("departmentId").toString())){
|
|
|
|
- dept = department;
|
|
|
|
- break;
|
|
|
|
|
|
+ Department targetDept = new Department();
|
|
|
|
+ if (map.get("departmentId") != null) {
|
|
|
|
+ targetDept.setDepartmentId(Integer.valueOf(map.get("departmentId").toString()));
|
|
|
|
+ int index = Arrays.binarySearch(deptArray, targetDept, Comparator.comparing(Department::getDepartmentId));
|
|
|
|
+ if (index >= 0) {
|
|
|
|
+ dept = deptArray[index];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
|
|
+
|
|
|
|
+ if(needCorpWxTranslate){
|
|
item.add("$userName="+(map.get("corpwxUserId")==null?"":map.get("corpwxUserId"))+"$");
|
|
item.add("$userName="+(map.get("corpwxUserId")==null?"":map.get("corpwxUserId"))+"$");
|
|
item.add(departmentService.exportWxDepartment(dept,departments));
|
|
item.add(departmentService.exportWxDepartment(dept,departments));
|
|
}else {
|
|
}else {
|
|
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"));
|
|
if(companyId==936){
|
|
if(companyId==936){
|
|
@@ -5395,12 +5418,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
if (timeType.getShowFillauditTime() == 1) {
|
|
item.add(sdf.format((Date)map.get("time")));
|
|
item.add(sdf.format((Date)map.get("time")));
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
|
|
+ if(needCorpWxTranslate){
|
|
String projectAuditorName ="$userName="+String.valueOf(map.get("projectAuditorCorpwxUserId"))+"$";
|
|
String projectAuditorName ="$userName="+String.valueOf(map.get("projectAuditorCorpwxUserId"))+"$";
|
|
item.add(projectAuditorName);
|
|
item.add(projectAuditorName);
|
|
}else {
|
|
}else {
|
|
item.add((String)map.get("projectAuditorName"));
|
|
item.add((String)map.get("projectAuditorName"));
|
|
}
|
|
}
|
|
|
|
+ if(needCorpWxTranslate){
|
|
|
|
+ String projectManagerName ="$userName="+String.valueOf(map.get("projectManagerCorpwxUserId"))+"$";
|
|
|
|
+ item.add(projectManagerName);
|
|
|
|
+ }else {
|
|
|
|
+ item.add((String)map.get("projectManagerName"));
|
|
|
|
+ }
|
|
//分组审核通过或者项目审核通过都显示
|
|
//分组审核通过或者项目审核通过都显示
|
|
if (map.get("projectAuditTime") != null && ((Integer)map.get("projectAuditState") == 1 || (Integer)map.get("groupAuditState") == 1)) {
|
|
if (map.get("projectAuditTime") != null && ((Integer)map.get("projectAuditState") == 1 || (Integer)map.get("groupAuditState") == 1)) {
|
|
item.add(sdf.format((Date)map.get("projectAuditTime")));
|
|
item.add(sdf.format((Date)map.get("projectAuditTime")));
|
|
@@ -5427,7 +5456,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
String time = dtf.format(operateDate);
|
|
String time = dtf.format(operateDate);
|
|
String msg= "";
|
|
String msg= "";
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
|
|
+ if(needCorpWxTranslate){
|
|
Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(audit.getOperatorId())).findFirst();
|
|
Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(audit.getOperatorId())).findFirst();
|
|
if(first.isPresent()){
|
|
if(first.isPresent()){
|
|
if(audit.getMsg().contains("提交了")){
|
|
if(audit.getMsg().contains("提交了")){
|
|
@@ -5457,7 +5486,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
item.add(sb.toString());
|
|
item.add(sb.toString());
|
|
}
|
|
}
|
|
- item.add((String) map.get("content"));
|
|
|
|
if(stateKey==1){
|
|
if(stateKey==1){
|
|
Integer state = (Integer) map.get("state");
|
|
Integer state = (Integer) map.get("state");
|
|
switch (state){
|
|
switch (state){
|
|
@@ -5498,7 +5526,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
String departmentName = map.get("departmentName") + "";
|
|
String departmentName = map.get("departmentName") + "";
|
|
for (User userItem : userList) {
|
|
for (User userItem : userList) {
|
|
if (userItem.getId().equals(deptAuditorId)){
|
|
if (userItem.getId().equals(deptAuditorId)){
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
|
|
+ if(needCorpWxTranslate){
|
|
String deptAuditorName ="$userName="+ userItem.getCorpwxRealUserid() +"$";
|
|
String deptAuditorName ="$userName="+ userItem.getCorpwxRealUserid() +"$";
|
|
departmentName = "$departmentName=" + departmentName + "$";
|
|
departmentName = "$departmentName=" + departmentName + "$";
|
|
if(timeType.getReportAuditType()==4){
|
|
if(timeType.getReportAuditType()==4){
|
|
@@ -5515,18 +5543,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}else {
|
|
}else {
|
|
item.add("待" + departmentName + "(" + userItem.getName() + ")审核");
|
|
item.add("待" + departmentName + "(" + userItem.getName() + ")审核");
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}else {
|
|
}else {
|
|
//项目审核或分组审核
|
|
//项目审核或分组审核
|
|
if (String.valueOf(map.get("projectAuditState")).equals("0") || String.valueOf(map.get("groupAuditState")).equals("0")){
|
|
if (String.valueOf(map.get("projectAuditState")).equals("0") || String.valueOf(map.get("groupAuditState")).equals("0")){
|
|
String projectAuditorName = map.get("projectAuditorName")+"";
|
|
String projectAuditorName = map.get("projectAuditorName")+"";
|
|
String projectAuditorId = map.get("projectAuditorId")+"";
|
|
String projectAuditorId = map.get("projectAuditorId")+"";
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
|
|
+ if(needCorpWxTranslate){
|
|
for (User userItem : userList) {
|
|
for (User userItem : userList) {
|
|
if (userItem.getId().equals(projectAuditorId)){
|
|
if (userItem.getId().equals(projectAuditorId)){
|
|
projectAuditorName ="$userName="+ userItem.getCorpwxUserid() +"$";
|
|
projectAuditorName ="$userName="+ userItem.getCorpwxUserid() +"$";
|
|
@@ -7448,21 +7474,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public HttpRespMsg pushProjectReportToSap(String yearMonth) {
|
|
|
|
|
|
+ public HttpRespMsg pushProjectReportToSap(String pushDate) {
|
|
HttpRespMsg httpRespMsg =new HttpRespMsg();
|
|
HttpRespMsg httpRespMsg =new HttpRespMsg();
|
|
- String dateStr = yearMonth+"-01";
|
|
|
|
- DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
- LocalDate start = LocalDate.parse(dateStr,df);
|
|
|
|
- LocalDate end =start.plusMonths(1).minusDays(1);
|
|
|
|
- List<SapSyncLog> sapSyncLogs=new ArrayList<>();
|
|
|
|
LocalDateTime localDateTime=LocalDateTime.now();
|
|
LocalDateTime localDateTime=LocalDateTime.now();
|
|
User user = userMapper.selectById(request.getHeader("token"));
|
|
User user = userMapper.selectById(request.getHeader("token"));
|
|
Integer companyId = user.getCompanyId();
|
|
Integer companyId = user.getCompanyId();
|
|
- List<Map<String,Object>> resultList=reportMapper.getPushProjectReportToSap(companyId,df.format(start),df.format(end),null);
|
|
|
|
|
|
+ List<Map<String,Object>> resultList=reportMapper.getPushProjectReportToSap(companyId,pushDate,pushDate,null);
|
|
|
|
+ //过滤服务code为空的数据
|
|
|
|
+ resultList=resultList.stream().filter(r->r.get("ProjectElementID")!=null && !StringUtils.isEmpty(String.valueOf(r.get("ProjectElementID")))).collect(Collectors.toList());
|
|
|
|
+ List<Integer> projectIds = resultList.stream().map(r -> Integer.valueOf(String.valueOf(r.get("ProjectId")))).distinct().collect(Collectors.toList());
|
|
|
|
+ projectIds.add(-1);
|
|
//提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
|
|
//提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
|
|
- List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,null,null);
|
|
|
|
- List<SapSyncLog> projectPlanSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, user.getCompanyId(), user.getJobNumber());
|
|
|
|
- sapSyncLogs.addAll(projectPlanSyncLogs);
|
|
|
|
|
|
+ //只推送需要推送日报参与的部分就可以了
|
|
|
|
+ List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,projectIds,null,null);
|
|
//配置xml请求参数
|
|
//配置xml请求参数
|
|
XmlRequestData xmlRequestData=new XmlRequestData();
|
|
XmlRequestData xmlRequestData=new XmlRequestData();
|
|
xmlRequestData.setBasicMessageHeader("");
|
|
xmlRequestData.setBasicMessageHeader("");
|
|
@@ -7471,97 +7495,123 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
workDescriptionText.setLanguageCode("ZH");
|
|
workDescriptionText.setLanguageCode("ZH");
|
|
SapPeriod datePeriod=new SapPeriod();
|
|
SapPeriod datePeriod=new SapPeriod();
|
|
SapPeriod timePeriod=new SapPeriod();
|
|
SapPeriod timePeriod=new SapPeriod();
|
|
- List<ReportPushLog> addList=new ArrayList<>();
|
|
|
|
- long sTime = System.currentTimeMillis();
|
|
|
|
- for (Map<String, Object> map : resultList) {
|
|
|
|
- ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
|
|
|
|
- if(one!=null){
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- employeeTime.setEmployeeID(String.valueOf(map.get("EmployeeID")));
|
|
|
|
- employeeTime.setActionCode("01");
|
|
|
|
- if(map.get("StartDate")!=null){
|
|
|
|
- datePeriod.setStartDate(String.valueOf(map.get("StartDate")));
|
|
|
|
- }
|
|
|
|
- if(map.get("EndDate")!=null){
|
|
|
|
- datePeriod.setEndDate(String.valueOf(map.get("EndDate")));
|
|
|
|
- }
|
|
|
|
- if(map.get("StartTime")!=null){
|
|
|
|
- timePeriod.setStartTime(String.valueOf(map.get("StartTime"))+":00");
|
|
|
|
- }
|
|
|
|
- if(map.get("EndTime")!=null){
|
|
|
|
- timePeriod.setEndTime(String.valueOf(map.get("EndTime"))+":00");
|
|
|
|
- }
|
|
|
|
- employeeTime.setDatePeriod(datePeriod);
|
|
|
|
- employeeTime.setTimePeriod(timePeriod);
|
|
|
|
- employeeTime.setItemTypeCode("CN0001");
|
|
|
|
- employeeTime.setDuration(map.get("Duration")==null?"0":String.valueOf(map.get("Duration")));
|
|
|
|
- if(map.get("ProjectElementID")==null||map.get("ServiceProductInternalID")==null){
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- employeeTime.setProjectElementID(String.valueOf(map.get("ProjectElementID")));
|
|
|
|
- employeeTime.setServiceProductInternalID(String.valueOf(map.get("ServiceProductInternalID")));
|
|
|
|
- if(map.get("WorkDescriptionText")!=null){
|
|
|
|
- workDescriptionText.setWorkDescriptionText(String.valueOf(map.get("WorkDescriptionText")));
|
|
|
|
- employeeTime.setWorkDescriptionText(workDescriptionText);
|
|
|
|
- }
|
|
|
|
- xmlRequestData.setEmployeeTime(employeeTime);
|
|
|
|
- String xml = CommonUtils.convertToXml(xmlRequestData);
|
|
|
|
- System.out.println(xml);
|
|
|
|
- xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
|
|
|
|
- StringBuffer sb = new StringBuffer();
|
|
|
|
- sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
|
|
|
|
- " <soapenv:Header/>\n" +
|
|
|
|
- " <soapenv:Body>\n" +
|
|
|
|
- " <glob:EmployeeTimeAsBundleMaintainRequest_sync>\n");
|
|
|
|
- sb.append(xml);
|
|
|
|
- sb.append(" </glob:EmployeeTimeAsBundleMaintainRequest_sync>\n" +
|
|
|
|
- " </soapenv:Body>\n" +
|
|
|
|
- "</soapenv:Envelope>");
|
|
|
|
- System.out.println(sb.toString());
|
|
|
|
- String result = "";
|
|
|
|
- try {
|
|
|
|
- result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- if(!StringUtils.isEmpty(result)) {
|
|
|
|
- result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
|
|
|
|
- result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
|
|
|
|
- result="<XMLDATA>"+result+"</XMLDATA>";
|
|
|
|
- }
|
|
|
|
- System.out.println(result);
|
|
|
|
- XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
|
|
|
|
- SapSyncLog sapSyncLog=new SapSyncLog();
|
|
|
|
- sapSyncLog.setOperator(user.getJobNumber());
|
|
|
|
- sapSyncLog.setCompanyId(companyId);
|
|
|
|
- sapSyncLog.setRemark("日报数据推送");
|
|
|
|
- sapSyncLog.setSyncType("手动推送");
|
|
|
|
- sapSyncLog.setSyncTime(localDateTime);
|
|
|
|
- if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
|
|
|
|
- log.error("推送失败===》工号:"+employeeTime.getEmployeeID());
|
|
|
|
- sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送失败");
|
|
|
|
- sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
|
|
|
|
- }else {
|
|
|
|
- sapSyncLog.setResult("工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送成功");
|
|
|
|
- //推送成功 日报数据打上标记
|
|
|
|
- ReportPushLog reportPushLog=new ReportPushLog();
|
|
|
|
- reportPushLog.setCompanyId(companyId);
|
|
|
|
- reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
|
|
|
|
- reportPushLog.setTargetSystem("SAP");
|
|
|
|
- reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
|
|
|
|
- addList.add(reportPushLog);
|
|
|
|
|
|
+ Map<String, List<Map<String, Object>>> listGroupEmployeeID = resultList.stream().collect(Collectors.groupingBy(r -> String.valueOf(r.get("EmployeeID"))));
|
|
|
|
+ List<String> employeeIDList = resultList.stream().map(r -> String.valueOf(r.get("EmployeeID"))).distinct().collect(Collectors.toList());
|
|
|
|
+ //按照人员集合长度来创建多个个线程来处理
|
|
|
|
+ int threadNum = employeeIDList.size();
|
|
|
|
+ //多加一个作为预算工时推送
|
|
|
|
+ ExecutorService executor = Executors.newFixedThreadPool(threadNum+1);
|
|
|
|
+ /*execute()让线程池中的线程来执行业务,每次调用都会将一个线程加入到就绪队列*/
|
|
|
|
+ executor.execute(new Runnable() {
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ List<SapSyncLog> projectPlanSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, user.getCompanyId(), user.getJobNumber(),isDev);
|
|
|
|
+ if(projectPlanSyncLogs.size()>0){
|
|
|
|
+ sapSyncLogService.saveBatch(projectPlanSyncLogs);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- sapSyncLogs.add(sapSyncLog);
|
|
|
|
- }
|
|
|
|
- if(addList.size()>0){
|
|
|
|
- reportPushLogService.saveBatch(addList);
|
|
|
|
- }
|
|
|
|
- if(sapSyncLogs.size()>0){
|
|
|
|
- sapSyncLogService.saveBatch(sapSyncLogs);
|
|
|
|
|
|
+ });
|
|
|
|
+ for (int i = 0; i <employeeIDList.size() ; i++) {
|
|
|
|
+ List<Map<String, Object>> mapList = listGroupEmployeeID.get(employeeIDList.get(i));
|
|
|
|
+ executor.execute(new Runnable() {
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ for (Map<String, Object> map : mapList) {
|
|
|
|
+ ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
|
|
|
|
+ if(one!=null){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ employeeTime.setEmployeeID(String.valueOf(map.get("EmployeeID")));
|
|
|
|
+ employeeTime.setActionCode("01");
|
|
|
|
+ if(map.get("StartDate")!=null){
|
|
|
|
+ datePeriod.setStartDate(String.valueOf(map.get("StartDate")));
|
|
|
|
+ }
|
|
|
|
+ if(map.get("EndDate")!=null){
|
|
|
|
+ datePeriod.setEndDate(String.valueOf(map.get("EndDate")));
|
|
|
|
+ }
|
|
|
|
+ if(map.get("StartTime")!=null){
|
|
|
|
+ timePeriod.setStartTime(String.valueOf(map.get("StartTime"))+":00");
|
|
|
|
+ }
|
|
|
|
+ if(map.get("EndTime")!=null){
|
|
|
|
+ timePeriod.setEndTime(String.valueOf(map.get("EndTime"))+":00");
|
|
|
|
+ }
|
|
|
|
+ employeeTime.setDatePeriod(datePeriod);
|
|
|
|
+ if(map.get("StartTime")!=null&&map.get("EndTime")!=null){
|
|
|
|
+ employeeTime.setTimePeriod(timePeriod);
|
|
|
|
+ }
|
|
|
|
+ employeeTime.setItemTypeCode("CN0001");
|
|
|
|
+ String duration=map.get("Duration")==null?"0":String.valueOf(map.get("Duration"))+"";
|
|
|
|
+ String hour = duration.substring(0, duration.indexOf("."));
|
|
|
|
+ String min = "0"+duration.substring(duration.indexOf("."));
|
|
|
|
+ BigDecimal minBigDecimal = new BigDecimal(min);
|
|
|
|
+ minBigDecimal=minBigDecimal.multiply(new BigDecimal(60)).setScale(0,BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ employeeTime.setDuration("PT"+hour+"H"+minBigDecimal.intValue()+"M");
|
|
|
|
+ if(map.get("ProjectElementID")==null||map.get("ServiceProductInternalID")==null){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ employeeTime.setProjectElementID(String.valueOf(map.get("ProjectElementID")));
|
|
|
|
+ employeeTime.setServiceProductInternalID(String.valueOf(map.get("ServiceProductInternalID")));
|
|
|
|
+ if(map.get("WorkDescriptionText")!=null){
|
|
|
|
+ workDescriptionText.setWorkDescriptionText(String.valueOf(map.get("WorkDescriptionText")));
|
|
|
|
+ employeeTime.setWorkDescriptionText(workDescriptionText);
|
|
|
|
+ }
|
|
|
|
+ xmlRequestData.setEmployeeTime(employeeTime);
|
|
|
|
+ String xml = CommonUtils.convertToXml(xmlRequestData);
|
|
|
|
+ xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+ sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
|
|
|
|
+ " <soapenv:Header/>\n" +
|
|
|
|
+ " <soapenv:Body>\n" +
|
|
|
|
+ " <glob:EmployeeTimeAsBundleMaintainRequest_sync>\n");
|
|
|
|
+ sb.append(xml);
|
|
|
|
+ sb.append(" </glob:EmployeeTimeAsBundleMaintainRequest_sync>\n" +
|
|
|
|
+ " </soapenv:Body>\n" +
|
|
|
|
+ "</soapenv:Envelope>");
|
|
|
|
+ String result = "";
|
|
|
|
+ try {
|
|
|
|
+ if(isDev){
|
|
|
|
+ result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
|
|
|
|
+ }else {
|
|
|
|
+ result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(result)) {
|
|
|
|
+ result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
|
|
|
|
+ result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
|
|
|
|
+ result="<XMLDATA>"+result+"</XMLDATA>";
|
|
|
|
+ }
|
|
|
|
+ System.out.println(result);
|
|
|
|
+ XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
|
|
|
|
+ SapSyncLog sapSyncLog=new SapSyncLog();
|
|
|
|
+ sapSyncLog.setOperator(user.getJobNumber());
|
|
|
|
+ sapSyncLog.setCompanyId(companyId);
|
|
|
|
+ sapSyncLog.setRemark("日报数据推送");
|
|
|
|
+ sapSyncLog.setSyncType("手动推送");
|
|
|
|
+ sapSyncLog.setSyncTime(localDateTime);
|
|
|
|
+ if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
|
|
|
|
+ log.error("推送失败===》员工工号:"+employeeTime.getEmployeeID());
|
|
|
|
+ sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送失败");
|
|
|
|
+ sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
|
|
|
|
+ }else {
|
|
|
|
+ sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送成功");
|
|
|
|
+ //推送成功 日报数据打上标记
|
|
|
|
+ ReportPushLog reportPushLog=new ReportPushLog();
|
|
|
|
+ reportPushLog.setCompanyId(companyId);
|
|
|
|
+ reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
|
|
|
|
+ reportPushLog.setTargetSystem("SAP");
|
|
|
|
+ reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
|
|
|
|
+ reportPushLogService.save(reportPushLog);
|
|
|
|
+ }
|
|
|
|
+ sapSyncLogService.save(sapSyncLog);
|
|
|
|
+ System.out.println("线程:"+Thread.currentThread().getName()+"正在操作"+map.get("ReportId"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- long eTime = System.currentTimeMillis();
|
|
|
|
- httpRespMsg.setData("推送完成 耗时:"+(eTime-sTime)+"ms");
|
|
|
|
|
|
+ httpRespMsg.setData("推送正在进行...待推送完成可查看工时日志");
|
|
|
|
+ executor.shutdown();
|
|
return httpRespMsg;
|
|
return httpRespMsg;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -7593,7 +7643,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
System.out.println(sb.toString());
|
|
System.out.println(sb.toString());
|
|
String result = "";
|
|
String result = "";
|
|
try {
|
|
try {
|
|
- result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_deleteemployeetime?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
|
|
|
|
|
|
+ result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_deleteemployeetime?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
@@ -7683,6 +7733,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
map.put("realityTime",workingTime.doubleValue());
|
|
map.put("realityTime",workingTime.doubleValue());
|
|
map.put("isOver",bigDecimal.doubleValue()<0?"是":"否");
|
|
map.put("isOver",bigDecimal.doubleValue()<0?"是":"否");
|
|
map.put("remaining",bigDecimal.doubleValue()>0?bigDecimal.doubleValue():0);
|
|
map.put("remaining",bigDecimal.doubleValue()>0?bigDecimal.doubleValue():0);
|
|
|
|
+ String participations = String.valueOf(map.get("participations"));
|
|
|
|
+ String[] split = participations.split(",");
|
|
|
|
+ map.put("participations",split);
|
|
}
|
|
}
|
|
projectTimeCostList.forEach(pt->{
|
|
projectTimeCostList.forEach(pt->{
|
|
List<Map<String, Object>> mapList = taskGroupPlanTimeList.stream().filter(t -> t.get("projectId").equals(pt.get("projectId"))).collect(Collectors.toList());
|
|
List<Map<String, Object>> mapList = taskGroupPlanTimeList.stream().filter(t -> t.get("projectId").equals(pt.get("projectId"))).collect(Collectors.toList());
|
|
@@ -7697,6 +7750,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
pt.put("projectGroupData",mapList);
|
|
pt.put("projectGroupData",mapList);
|
|
|
|
+ String participations = String.valueOf(pt.get("participations"));
|
|
|
|
+ String[] split = participations.split(",");
|
|
|
|
+ pt.put("participations",split);
|
|
});
|
|
});
|
|
responseData.put("projectArrays",projectTimeCostList);
|
|
responseData.put("projectArrays",projectTimeCostList);
|
|
msg.setData(responseData);
|
|
msg.setData(responseData);
|
|
@@ -8002,4 +8058,258 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
httpRespMsg.setData(responseData);
|
|
httpRespMsg.setData(responseData);
|
|
return httpRespMsg;
|
|
return httpRespMsg;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg getUserWorkTimeByCategory(Integer categoryId, Integer deptId, String userId, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
|
|
|
|
+ HttpRespMsg httpRespMsg=new HttpRespMsg();
|
|
|
|
+ if(categoryId==0){
|
|
|
|
+ categoryId=null;
|
|
|
|
+ }
|
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
|
+ List<UserCustom> userCustomList = userCustomMapper.selectList(new LambdaQueryWrapper<UserCustom>().eq(UserCustom::getCompanyId, user.getCompanyId()));
|
|
|
|
+ DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
+ List<LocalDate> dates = getDays(LocalDate.parse(startDate, dtf), LocalDate.parse(endDate, dtf));
|
|
|
|
+ List<Map<String,Object>> headerStringList=new ArrayList<>();
|
|
|
|
+ List<Map<String,Object>> customStringList=new ArrayList<>();
|
|
|
|
+// Map<String,Object> map1=new HashMap();
|
|
|
|
+// Map<String,Object> map2=new HashMap();
|
|
|
|
+// Map<String,Object> map3=new HashMap();
|
|
|
|
+// Map<String,Object> map4=new HashMap();
|
|
|
|
+// Map<String,Object> map5=new HashMap();
|
|
|
|
+// map1.put("titleIndex","");
|
|
|
|
+// map1.put("titleName","生产项目号");
|
|
|
|
+// map2.put("titleIndex","");
|
|
|
|
+// map2.put("titleName","姓名");
|
|
|
|
+// map3.put("titleIndex","");
|
|
|
|
+// map3.put("titleName","部门");
|
|
|
|
+// headerStringList.add(map1);
|
|
|
|
+// headerStringList.add(map2);
|
|
|
|
+// headerStringList.add(map3);
|
|
|
|
+ for (int i = 0; i < userCustomList.size(); i++) {
|
|
|
|
+ Map<String,Object> map=new HashMap();
|
|
|
|
+ switch (i){
|
|
|
|
+ case 0: map.put("titleIndex","plate1");
|
|
|
|
+ break;
|
|
|
|
+ case 1: map.put("titleIndex","plate2");
|
|
|
|
+ break;
|
|
|
|
+ case 2: map.put("titleIndex","plate3");
|
|
|
|
+ break;
|
|
|
|
+ case 3: map.put("titleIndex","plate4");
|
|
|
|
+ break;
|
|
|
|
+ case 4: map.put("titleIndex","plate5");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ map.put("titleName", userCustomList.get(i).getName());
|
|
|
|
+ customStringList.add(map);
|
|
|
|
+ }
|
|
|
|
+// map4.put("titleIndex","allWorkingTime");
|
|
|
|
+// map4.put("titleName","总工时");
|
|
|
|
+// map5.put("titleIndex","targetWorkingTime");
|
|
|
|
+// map5.put("titleName","生产工时");
|
|
|
|
+// headerStringList.add(map4);
|
|
|
|
+// headerStringList.add(map5);
|
|
|
|
+ for (LocalDate localDate : dates) {
|
|
|
|
+ Map<String,Object> map=new HashMap();
|
|
|
|
+ map.put("titleIndex",localDate.format(dtf));
|
|
|
|
+ map.put("titleName",localDate.format(dtf));
|
|
|
|
+ headerStringList.add(map);
|
|
|
|
+ }
|
|
|
|
+ List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, user.getCompanyId()));
|
|
|
|
+ Integer size=null;
|
|
|
|
+ Integer start=null;
|
|
|
|
+ if(pageIndex!=null&&pageSize!=null){
|
|
|
|
+ size=pageSize;
|
|
|
|
+ start=(pageIndex-1)*size;
|
|
|
|
+ }
|
|
|
|
+ boolean viewAll = sysFunctionService.hasPriviledge(user.getRoleId(), "分类全部工时明细表");
|
|
|
|
+ boolean viewIncharge = sysFunctionService.hasPriviledge(user.getRoleId(), "分类负责部门工时明细表");
|
|
|
|
+ //判断是否有查看全部的权限
|
|
|
|
+ List<Map<String,Object>> resultList;
|
|
|
|
+ if(!viewAll){
|
|
|
|
+ //判断是否有查看负责部门的权限
|
|
|
|
+ if(!viewIncharge){
|
|
|
|
+ //只能查看与本人有关的数据
|
|
|
|
+ resultList=reportMapper.getUserWorkTimeByCategory(categoryId,user.getId(),user.getCompanyId(),null,deptId,startDate,endDate);
|
|
|
|
+ }else {
|
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().select(Department::getDepartmentId).eq(Department::getManagerId, user.getId()));
|
|
|
|
+ List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
|
|
|
|
+ List<Integer> deptIds=new ArrayList<>();
|
|
|
|
+ List<Integer> theCollect = departmentList.stream().map(dm -> dm.getDepartmentId()).distinct().collect(Collectors.toList());
|
|
|
|
+ theCollect.add(-1);
|
|
|
|
+ List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
|
|
|
|
+ otherCollect.add(-1);
|
|
|
|
+ theCollect.addAll(otherCollect);
|
|
|
|
+ for (Integer integer : theCollect) {
|
|
|
|
+ List<Integer> branchDepartment = getBranchDepartment(integer, allDeptList);
|
|
|
|
+ deptIds.addAll(branchDepartment);
|
|
|
|
+ }
|
|
|
|
+ resultList=reportMapper.getUserWorkTimeByCategory(categoryId,userId,user.getCompanyId(),deptIds,deptId,startDate,endDate);
|
|
|
|
+ }
|
|
|
|
+ }else {
|
|
|
|
+ //查看全部
|
|
|
|
+ resultList=reportMapper.getUserWorkTimeByCategory(categoryId,userId,user.getCompanyId(),null,deptId,startDate,endDate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<String> projectIdList = resultList.stream().map(m -> String.valueOf(m.get("projectId"))).distinct().collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ Map<String, List<Map<String, Object>>> listMapGroupByProject = resultList.stream().collect(Collectors.groupingBy(r -> String.valueOf(r.get("projectId"))));
|
|
|
|
+ List<Map<String,Object>> lastList=new ArrayList<>();
|
|
|
|
+ for (String targetProjectId : projectIdList) {
|
|
|
|
+ List<Map<String, Object>> maps = listMapGroupByProject.get(targetProjectId);
|
|
|
|
+ Optional<Map<String, Object>> first = resultList.stream().filter(r -> String.valueOf(r.get("projectId")).equals(targetProjectId)).findFirst();
|
|
|
|
+ Map<String, List<Map<String, Object>>> listMapGroupByUser = maps.stream().collect(Collectors.groupingBy(r -> String.valueOf(r.get("userId"))));
|
|
|
|
+ List<String> userIdList = maps.stream().map(m -> String.valueOf(m.get("userId"))).distinct().collect(Collectors.toList());
|
|
|
|
+ for (String targetUserId : userIdList) {
|
|
|
|
+ if(first.isPresent()){
|
|
|
|
+ Map<String, Object> map = first.get();
|
|
|
|
+ Map<String,Object> item=new HashMap<>();
|
|
|
|
+ item.put("userId",String.valueOf(map.get("userId")));
|
|
|
|
+ item.put("projectCode",String.valueOf(map.get("projectCode")));
|
|
|
|
+ item.put("deptName",String.valueOf(map.get("deptName")));
|
|
|
|
+ item.put("userName",String.valueOf(map.get("userName")));
|
|
|
|
+ item.put("deptId",String.valueOf(map.get("deptId")));
|
|
|
|
+ item.put("targetWorkingTime",String.valueOf(map.get("targetWorkingTime")));
|
|
|
|
+ item.put("allWorkingTime",String.valueOf(map.get("allWorkingTime")));
|
|
|
|
+ item.put("plate1",map.get("plate1")==null?"":String.valueOf(map.get("plate1")));
|
|
|
|
+ item.put("plate2",map.get("plate2")==null?"":String.valueOf(map.get("plate2")));
|
|
|
|
+ item.put("plate3",map.get("plate3")==null?"":String.valueOf(map.get("plate3")));
|
|
|
|
+ item.put("plate4",map.get("plate4")==null?"":String.valueOf(map.get("plate4")));
|
|
|
|
+ item.put("plate5",map.get("plate5")==null?"":String.valueOf(map.get("plate5")));
|
|
|
|
+ if(map.get("corpWxUserId")!=null){
|
|
|
|
+ item.put("corpWxUserId",String.valueOf(map.get("corpWxUserId")));
|
|
|
|
+ }
|
|
|
|
+ if(map.get("corpWxDeptId")!=null){
|
|
|
|
+ item.put("corpWxDeptId",String.valueOf(map.get("corpWxDeptId")));
|
|
|
|
+ }
|
|
|
|
+ List<Map<String, Object>> mapList = listMapGroupByUser.get(targetUserId);
|
|
|
|
+ item.put("dataList",mapList);
|
|
|
|
+ lastList.add(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if(start!=null&&size!=null){
|
|
|
|
+ if(lastList.size()<size){
|
|
|
|
+ size=lastList.size();
|
|
|
|
+ }
|
|
|
|
+ if(lastList.size()<start){
|
|
|
|
+ start=0;
|
|
|
|
+ }
|
|
|
|
+ lastList=lastList.subList(start,size);
|
|
|
|
+ }
|
|
|
|
+ Map<String,Object> resultMap=new HashMap<>();
|
|
|
|
+ resultMap.put("record",lastList);
|
|
|
|
+ resultMap.put("total",lastList.size());
|
|
|
|
+ resultMap.put("header",headerStringList);
|
|
|
|
+ resultMap.put("custom",customStringList);
|
|
|
|
+ httpRespMsg.setData(resultMap);
|
|
|
|
+ return httpRespMsg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg exportUserWorkTimeByCategory(Integer categoryId, Integer deptId, String userId, String startDate, String endDate) {
|
|
|
|
+ HttpRespMsg msg = getUserWorkTimeByCategory(categoryId, deptId, userId, startDate, endDate, null, null);
|
|
|
|
+ Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
|
|
|
|
+
|
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
|
|
+ DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
+ List<LocalDate> dates = getDays(LocalDate.parse(startDate, dtf), LocalDate.parse(endDate, dtf));
|
|
|
|
+ List<UserCustom> userCustomList = userCustomMapper.selectList(new LambdaQueryWrapper<UserCustom>().eq(UserCustom::getCompanyId, companyId));
|
|
|
|
+ Map<String,Object> data = (Map<String, Object>) msg.getData();
|
|
|
|
+ List<List<String>> dataList=new ArrayList<>();
|
|
|
|
+ List<String> titleList=new ArrayList<>();
|
|
|
|
+ if(categoryId!=null){
|
|
|
|
+ ProjectCategory projectCategory = projectCategoryMapper.selectById(categoryId);
|
|
|
|
+ titleList.add(projectCategory.getName()+"项目号");
|
|
|
|
+ }else {
|
|
|
|
+ titleList.add("未分配");
|
|
|
|
+ }
|
|
|
|
+ titleList.add("姓名");
|
|
|
|
+ titleList.add("部门");
|
|
|
|
+ List<Map<String,Object>> headerList= (List<Map<String, Object>>) data.get("header");
|
|
|
|
+ List<Map<String,Object>> customList= (List<Map<String, Object>>) data.get("custom");
|
|
|
|
+ for (Map<String, Object> custom : customList) {
|
|
|
|
+ titleList.add(String.valueOf(custom.get("titleName")));
|
|
|
|
+ }
|
|
|
|
+ titleList.add("总工时");
|
|
|
|
+ if(categoryId!=null){
|
|
|
|
+ ProjectCategory projectCategory = projectCategoryMapper.selectById(categoryId);
|
|
|
|
+ titleList.add(projectCategory.getName()+"工时");
|
|
|
|
+ }else {
|
|
|
|
+ titleList.add("未分配工时");
|
|
|
|
+ }
|
|
|
|
+ for (Map<String, Object> header : headerList) {
|
|
|
|
+ titleList.add(String.valueOf(header.get("titleName")));
|
|
|
|
+ }
|
|
|
|
+ dataList.add(titleList);
|
|
|
|
+ List<Map<String,Object>> records = (List<Map<String, Object>>) data.get("record");
|
|
|
|
+ for (Map<String, Object> record : records) {
|
|
|
|
+ List<String> item=new ArrayList<>();
|
|
|
|
+ item.add(String.valueOf(record.get("projectCode")));
|
|
|
|
+ if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
+ item.add("$userName="+String.valueOf(record.get("corpWxUserId"))+"$");
|
|
|
|
+ item.add("$departmentName="+String.valueOf(record.get("corpWxDeptId"))+"$");
|
|
|
|
+ }else {
|
|
|
|
+ item.add(String.valueOf(record.get("userName")));
|
|
|
|
+ item.add(String.valueOf(record.get("deptName")));
|
|
|
|
+ }
|
|
|
|
+ for (int i = 0; i < userCustomList.size(); i++) {
|
|
|
|
+ switch (i){
|
|
|
|
+ case 0:item.add(record.get("plate1")==null?"":String.valueOf(record.get("plate1")));
|
|
|
|
+ break;
|
|
|
|
+ case 1:item.add(record.get("plate2")==null?"":String.valueOf(record.get("plate2")));
|
|
|
|
+ break;
|
|
|
|
+ case 2:item.add(record.get("plate3")==null?"":String.valueOf(record.get("plate3")));
|
|
|
|
+ break;
|
|
|
|
+ case 3:item.add(record.get("plate4")==null?"":String.valueOf(record.get("plate4")));
|
|
|
|
+ break;
|
|
|
|
+ case 4:item.add(record.get("plate5")==null?"":String.valueOf(record.get("plate5")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ item.add(String.valueOf(record.get("allWorkingTime")));
|
|
|
|
+ item.add(String.valueOf(record.get("targetWorkingTime")));
|
|
|
|
+ List<Map<String,Object>> details = (List<Map<String, Object>>) record.get("dataList");
|
|
|
|
+ for (LocalDate localDate : dates) {
|
|
|
|
+ String date = dtf.format(localDate);
|
|
|
|
+ Optional<Map<String, Object>> first = details.stream().filter(d -> String.valueOf(d.get("createDate")).equals(date)).findFirst();
|
|
|
|
+ if(first.isPresent()){
|
|
|
|
+ item.add(String.valueOf(first.get().get("workingTime")));
|
|
|
|
+ }else {
|
|
|
|
+ item.add("");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ dataList.add(item);
|
|
|
|
+ }
|
|
|
|
+ String fileName = "分类工时明细表"+"_"+System.currentTimeMillis();
|
|
|
|
+ try {
|
|
|
|
+ return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo, fileName, dataList, path);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<Integer> getBranchDepartment(Integer departmentId, List<Department> departmentList) {
|
|
|
|
+ List<Integer> list = new ArrayList<>();
|
|
|
|
+ list.add(departmentId);
|
|
|
|
+ //搜到子部门进行添加
|
|
|
|
+ for (Department department : departmentList) {
|
|
|
|
+ if (departmentId.equals(department.getSuperiorId())) {
|
|
|
|
+ list.addAll(getBranchDepartment(department.getDepartmentId(), departmentList));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<LocalDate> getDays(LocalDate start, LocalDate end) {
|
|
|
|
+ List<LocalDate> result = new ArrayList();
|
|
|
|
+ while (start.isBefore(end)) {
|
|
|
|
+ result.add(start);
|
|
|
|
+ start=start.plusDays(1);
|
|
|
|
+ }
|
|
|
|
+ result.add(start);
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
}
|
|
}
|