|
@@ -149,6 +149,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
@Resource
|
|
|
private ProjectMapper projectMapper;
|
|
|
@Resource
|
|
|
+ private SapProjectServiceMapper sapProjectServiceMapper;
|
|
|
+ @Resource
|
|
|
private CompanyDingdingService companyDingdingService;
|
|
|
@Resource
|
|
|
private InformationMapper informationMapper;
|
|
@@ -194,12 +196,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
private DepartmentOtherManagerMapper departmentOtherManagerMapper;
|
|
|
@Resource
|
|
|
private ExcelExportService excelExportService;
|
|
|
+ @Resource
|
|
|
+ private ProjectMainMapper projectMainMapper;
|
|
|
@Autowired
|
|
|
RestTemplate restTemplate;
|
|
|
|
|
|
@Resource
|
|
|
private ReportAuditLogService reportAuditLogService;
|
|
|
@Resource
|
|
|
+ private TaskExecutorMapper taskExecutorMapper;
|
|
|
+ @Resource
|
|
|
private TimeTypeService timeTypeService;
|
|
|
@Resource
|
|
|
private HttpServletRequest request;
|
|
@@ -573,6 +579,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //为依斯贝增加日报的服务名称显示
|
|
|
+ if (user.getCompanyId() == 3092) {
|
|
|
+ List<SapProjectService> alLServiceList = sapProjectServiceMapper.selectList(new QueryWrapper<SapProjectService>().eq("company_id", user.getCompanyId()));
|
|
|
+ for (Map map : nameList) {
|
|
|
+ List<Map<String, Object>> reportList = (List<Map<String, Object>>)map.get("data");
|
|
|
+ for (Map<String, Object> report : reportList) {
|
|
|
+ Integer sapServiceId = (Integer)report.get("sapServiceId");
|
|
|
+ Optional<SapProjectService> first = alLServiceList.stream().filter(d->d.getId().equals(sapServiceId)).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ SapProjectService divItem = first.get();
|
|
|
+ report.put("sapServiceName", divItem.getServiceName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
httpRespMsg.data = nameList;
|
|
|
} catch (NullPointerException e) {
|
|
|
e.printStackTrace();
|
|
@@ -626,7 +647,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//获取当前项目的子项目列表,任务分组,任务列表,项目相关维度列表
|
|
|
reports.forEach(r->{
|
|
|
r.setSubProjectList(subProjectList.stream().filter(s->s.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
|
|
|
- r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId));
|
|
|
+ r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId, r.getStage(), r.getGroupId()));
|
|
|
//获取当前项目的工程专业进度
|
|
|
List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
|
|
|
//去掉当前项目上已经不存在的专业
|
|
@@ -773,6 +794,30 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
List<ProFunWorkContext> workContentList = ((List<ProFunWorkContext>)funWorkContextList.data);
|
|
|
r.setWorkContentList(workContentList);
|
|
|
}
|
|
|
+ //依斯贝要返回服务
|
|
|
+ if (companyId == 3092) {
|
|
|
+ Integer taskId = r.getTaskId();
|
|
|
+ if (taskId != null) {
|
|
|
+ List<TaskExecutor> taskExecutors = taskExecutorMapper.selectList(new QueryWrapper<TaskExecutor>().eq("task_id", taskId).eq("executor_id", r.getCreatorId()));
|
|
|
+ List<Integer> serviceIds = new ArrayList<>();
|
|
|
+ for (TaskExecutor executor : taskExecutors) {
|
|
|
+ Integer serviceId = executor.getServiceId();
|
|
|
+ if (!StringUtils.isEmpty(serviceId)) {
|
|
|
+ serviceIds.add(serviceId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (serviceIds.size() > 0) {
|
|
|
+ List<SapProjectService> sapSList = sapProjectServiceMapper.selectList(new QueryWrapper<SapProjectService>().in("id", serviceIds));
|
|
|
+ r.setServiceList(sapSList);
|
|
|
+ Optional<SapProjectService> first = sapSList.stream().filter(s -> s.getId().equals(r.getSapServiceId())).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ r.setSapServiceName(first.get().getServiceName());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ r.setServiceList(new ArrayList<>());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
resultMap.put("report", reports);
|
|
|
TimeType timeType = timeTypeMapper.selectById(companyId);
|
|
@@ -853,7 +898,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//获取当前项目的子项目列表,任务分组,任务列表,项目相关维度列表
|
|
|
Report r = report;
|
|
|
r.setSubProjectList(subProjectList.stream().filter(s->s.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
|
|
|
- r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId));
|
|
|
+ r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId, r.getStage(), r.getGroupId()));
|
|
|
//获取当前项目的工程专业进度
|
|
|
List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
|
|
|
//去掉当前项目上已经不存在的专业
|
|
@@ -1571,6 +1616,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
targetUids = ListUtil.convertLongIdsArrayToList(userId);
|
|
|
}
|
|
|
List<Map<String, Object>> auditReportList = reportMapper.getAuditReportList(date, companyId, departmentId, projectId, leaderId, isEngeering, startDate, endDate, targetUids);
|
|
|
+ //针对依斯贝增加服务名称显示
|
|
|
+ if (companyId == 3092) {
|
|
|
+ List<SapProjectService> serviceList = sapProjectServiceMapper.selectList(new QueryWrapper<SapProjectService>().eq("company_id", companyId));
|
|
|
+ for (Map<String, Object> mapItem : auditReportList) {
|
|
|
+ Integer sapServiceId = (Integer)mapItem.get("sapServiceId");
|
|
|
+ if (sapServiceId != null) {
|
|
|
+ Optional<SapProjectService> first = serviceList.stream().filter(s -> s.getId().equals(sapServiceId)).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ mapItem.put("sapServiceName", first.get().getServiceName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
//抽取姓名,进行分组
|
|
|
List<Map<String, Object>> nameList = new ArrayList<Map<String, Object>>();
|
|
|
Map<String, Object> lastName = null;
|
|
@@ -2847,9 +2905,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
ArrayList<DepartmentVO> realMDeptList = new ArrayList<>();
|
|
|
- for (Department d : allMDeptList) {
|
|
|
- realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
|
|
|
+ //存在负责的部门,需要查询所有子部门
|
|
|
+ if (allMDeptList.size() > 0) {
|
|
|
+ HttpRespMsg departmentList = departmentService.getDepartmentList(request);
|
|
|
+ list = (List<DepartmentVO>) departmentList.data;
|
|
|
+ for (Department d : allMDeptList) {
|
|
|
+ realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
//去掉第一层的部门是其他第一层部门的子部门的数据
|
|
|
|
|
|
for (int i=0;i<realMDeptList.size(); i++) {
|
|
@@ -2862,7 +2926,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
list = realMDeptList;
|
|
|
- System.out.println("负责部门的数量:"+list.size());
|
|
|
}
|
|
|
|
|
|
if (list.size() > 0) {
|
|
@@ -4705,6 +4768,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
if (ExcelUtil.isRowEmpty(row)) {
|
|
|
continue;
|
|
|
}
|
|
|
+ //设置字符格式,防止纯数字工号读取时报错
|
|
|
+ row.getCell(1).setCellType(CellType.STRING);
|
|
|
String username = row.getCell(1).getStringCellValue().trim();
|
|
|
|
|
|
if (rowIndex == 0) {
|
|
@@ -4826,8 +4891,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return msg;
|
|
|
}
|
|
|
}
|
|
|
- String workContent = row.getCell(7)==null?null:row.getCell(7).getStringCellValue();
|
|
|
- String stringCellValue = row.getCell(8)==null?null:row.getCell(8).getStringCellValue();
|
|
|
+ String stringCellValue = row.getCell(7)==null?null:row.getCell(7).getStringCellValue();
|
|
|
+ String workContent = row.getCell(8)==null?null:row.getCell(8).getStringCellValue();
|
|
|
double time = 0;
|
|
|
if (!StringUtils.isEmpty(stringCellValue)) {
|
|
|
time = Double.parseDouble(stringCellValue);
|
|
@@ -5011,6 +5076,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
titles.add(MessageUtils.message("entry.department"));
|
|
|
titles.add(MessageUtils.message("entry.projectId"));
|
|
|
titles.add(MessageUtils.message("entry.projectName"));
|
|
|
+ if(companyId==936){
|
|
|
+ titles.add("项目状态");
|
|
|
+ titles.add("自主项目类别");
|
|
|
+ }
|
|
|
titles.add(MessageUtils.message("entry.projectType"));
|
|
|
if(timeType.getMainProjectState()==1){
|
|
|
//titles.add("主项目名称");
|
|
@@ -5264,6 +5333,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
|
|
|
item.add((String) map.get("projectCode"));
|
|
|
item.add((String) map.get("project"));
|
|
|
+ if(companyId==936){
|
|
|
+ String projectStatus="";
|
|
|
+ switch (Integer.valueOf(String.valueOf(map.get("projectStatus")))){
|
|
|
+ case 1:projectStatus="进行中";
|
|
|
+ break;
|
|
|
+ case 2:projectStatus="已完成";
|
|
|
+ break;
|
|
|
+ case 3:projectStatus="已撤销";
|
|
|
+ break;
|
|
|
+ case 4:projectStatus="暂停";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ item.add(projectStatus.equals("已完成")?projectStatus+"("+map.get("finishDate")+")":projectStatus);
|
|
|
+ item.add((String)map.get("projectCategorySub"));
|
|
|
+ }
|
|
|
item.add((String) map.get("categoryName"));
|
|
|
if(timeType.getMainProjectState()==1){
|
|
|
item.add((String) map.get("projectMainName"));
|
|
@@ -5615,12 +5699,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate) {
|
|
|
+ public HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate,Integer noReportDeptId) {
|
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
|
User user = userMapper.selectById(request.getHeader("TOKEN"));
|
|
|
List<User> allRangeUserList = new ArrayList<>();
|
|
|
Integer companyId = user.getCompanyId();
|
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
|
+ //获取部门的所有子部门
|
|
|
+ List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
|
|
|
+ List<Integer> branchDepartment = null;
|
|
|
+ if(noReportDeptId != null){
|
|
|
+ branchDepartment = departmentService.getBranchDepartment(Integer.valueOf(noReportDeptId),departments);
|
|
|
+ }
|
|
|
List<Map<String, Object>> list = null;
|
|
|
//分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
|
|
|
List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
|
|
@@ -5687,6 +5777,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
List<Report> deniedReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId).eq("state", 2).between("create_date", startDate, endDate));
|
|
|
List<Report> waitingSubmitReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId).eq("state", 3).between("create_date", startDate, endDate));
|
|
|
//按人员过滤
|
|
|
+ if(branchDepartment!=null&&branchDepartment.size()>0){
|
|
|
+ List<Integer> finalBranchDepartment = branchDepartment;
|
|
|
+ allRangeUserList=allRangeUserList.stream().filter(at-> finalBranchDepartment.contains(at.getDepartmentId())).collect(Collectors.toList());
|
|
|
+ }
|
|
|
for (User curUser: allRangeUserList){
|
|
|
for (int i=0;i<=cnt; i++) {
|
|
|
LocalDate date = localStart.plusDays(i);
|
|
@@ -5848,8 +5942,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);
|
|
|
+ public HttpRespMsg exportNoReportUserList(HttpServletRequest request, String startDate, String endDate,Integer noReportDeptId) {
|
|
|
+ HttpRespMsg msg = getNoReportUserList(request, startDate, endDate,noReportDeptId);
|
|
|
String token = request.getHeader("TOKEN");
|
|
|
TimeType timeType = timeTypeMapper.selectById(userMapper.selectById(token).getCompanyId());
|
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", userMapper.selectById(token).getCompanyId()));
|
|
@@ -6858,7 +6952,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
reports.forEach(r->{
|
|
|
r.setContent(null);
|
|
|
r.setSubProjectList(subProjectList.stream().filter(s->s.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
|
|
|
- r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId));
|
|
|
+ r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId, r.getStage(), r.getGroupId()));
|
|
|
//获取当前项目的工程专业进度
|
|
|
List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
|
|
|
//去掉当前项目上已经不存在的专业
|
|
@@ -7493,4 +7587,380 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg geProjectTimeCostByThird(String json) {
|
|
|
+ HttpRespMsg msg=new HttpRespMsg();
|
|
|
+ JSONObject requestData = JSONObject.parseObject(json);
|
|
|
+ if(requestData.get("header")==null){
|
|
|
+ msg.setError("Request Parameter Parsing Error,Unable to find 'header'");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ JSONObject requestHeader = JSONObject.parseObject(String.valueOf(requestData.get("header")));
|
|
|
+ if(requestData.get("projectQuery")==null){
|
|
|
+ msg.setError("Request Parameter Parsing Error,Unable to find 'projectQuery'");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ JSONObject requestProjectQuery = JSONObject.parseObject(String.valueOf(requestData.get("projectQuery")));
|
|
|
+ if(requestHeader.get("token")==null){
|
|
|
+ msg.setError("Request Parameter Parsing Error,Unable to find 'token'");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ String requestToken = String.valueOf(requestHeader.get("token"));
|
|
|
+ List<ThirdPartyInterface> thirdPartyInterfaces = thirdPartyInterfaceMapper.selectList(new QueryWrapper<ThirdPartyInterface>().eq("token", requestToken));
|
|
|
+ if(thirdPartyInterfaces.size()<=0){
|
|
|
+ msg.setError("Validation failed,'token' is Error");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if(LocalDateTime.now().isAfter(thirdPartyInterfaces.get(0).getExpireTime())){
|
|
|
+ msg.setError("'token' is Expire");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if(requestProjectQuery.get("projectMainCode")==null){
|
|
|
+ msg.setError("Request Parameter Parsing Error,Unable to find 'projectMainCode'");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ String requestProjectCode = String.valueOf(requestProjectQuery.get("projectMainCode"));
|
|
|
+ Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectCode, requestProjectCode).eq(Project::getCompanyId,thirdPartyInterfaces.get(0).getCompanyId()));
|
|
|
+ if(project==null){
|
|
|
+ msg.setError("'projectMainCode'["+requestProjectCode+"] is Not Exist");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ Map<String,Object> responseData=new HashMap<>();
|
|
|
+ ProjectMain projectMain = projectMainMapper.selectOne(new LambdaQueryWrapper<ProjectMain>().eq(ProjectMain::getId, project.getProjectMainId()));
|
|
|
+// List<Integer> projectMainIds = projectMainTimeCostList.stream().map(p -> Integer.valueOf(String.valueOf(p.get("pmId")))).distinct().collect(Collectors.toList());
|
|
|
+// projectMainIds.add(-1);
|
|
|
+ List<Map<String,Object>> projectTimeCostList=reportMapper.getProjectTimeCost(thirdPartyInterfaces.get(0).getCompanyId(),project.getId());
|
|
|
+ List<Integer> projectIds = projectTimeCostList.stream().map(p -> Integer.valueOf(String.valueOf(p.get("projectId")))).distinct().collect(Collectors.toList());
|
|
|
+ projectIds.add(-1);
|
|
|
+ List<Map<String,Object>> taskGroupPlanTimeList=reportMapper.getTaskGroupPlanTime(projectIds);
|
|
|
+ List<Integer> groupIds = taskGroupPlanTimeList.stream().map(t -> Integer.valueOf(String.valueOf(t.get("groupId")))).distinct().collect(Collectors.toList());
|
|
|
+ groupIds.add(-1);
|
|
|
+ List<Report> reportList = reportMapper.selectList(new LambdaQueryWrapper<Report>().in(Report::getGroupId, groupIds).and(wrapper -> wrapper.eq(Report::getState, 0).or().eq(Report::getState, 1)));
|
|
|
+ for (Map<String, Object> map : taskGroupPlanTimeList) {
|
|
|
+ BigDecimal workingTime = reportList.stream().filter(r -> r.getGroupId().equals(map.get("groupId"))).map(r -> new BigDecimal(r.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal bigDecimal=new BigDecimal(String.valueOf(map.get("planTime")));
|
|
|
+ bigDecimal=bigDecimal.subtract(workingTime);
|
|
|
+ map.put("realityTime",workingTime.doubleValue());
|
|
|
+ map.put("isOver",bigDecimal.doubleValue()<0?"是":"否");
|
|
|
+ map.put("remaining",bigDecimal.doubleValue()>0?bigDecimal.doubleValue():0);
|
|
|
+ }
|
|
|
+ projectTimeCostList.forEach(pt->{
|
|
|
+ List<Map<String, Object>> mapList = taskGroupPlanTimeList.stream().filter(t -> t.get("projectId").equals(pt.get("projectId"))).collect(Collectors.toList());
|
|
|
+ switch (Integer.valueOf(pt.get("status").toString())){
|
|
|
+ case 1:pt.put("status","进行中");
|
|
|
+ break;
|
|
|
+ case 2:pt.put("status","已完成");
|
|
|
+ break;
|
|
|
+ case 3:pt.put("status","已撤销");
|
|
|
+ break;
|
|
|
+ case 4:pt.put("status","暂停");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pt.put("projectGroupData",mapList);
|
|
|
+ });
|
|
|
+ responseData.put("projectArrays",projectTimeCostList);
|
|
|
+ msg.setData(responseData);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getUserTimeCostByThird(String json) {
|
|
|
+ HttpRespMsg httpRespMsg=new HttpRespMsg();
|
|
|
+ DateFormat timeDf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ JSONObject requestData = JSONObject.parseObject(json);
|
|
|
+ if(requestData.get("header")==null){
|
|
|
+ httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'header'");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ JSONObject requestHeader = JSONObject.parseObject(String.valueOf(requestData.get("header")));
|
|
|
+ if(requestData.get("memberQuery")==null){
|
|
|
+ httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'memberQuery'");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ JSONObject memberQueryQuery = JSONObject.parseObject(String.valueOf(requestData.get("memberQuery")));
|
|
|
+ if(requestHeader.get("token")==null){
|
|
|
+ httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'token'");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ String requestToken = String.valueOf(requestHeader.get("token"));
|
|
|
+ List<ThirdPartyInterface> thirdPartyInterfaces = thirdPartyInterfaceMapper.selectList(new QueryWrapper<ThirdPartyInterface>().eq("token", requestToken));
|
|
|
+ if(thirdPartyInterfaces.size()<=0){
|
|
|
+ httpRespMsg.setError("Validation failed,'token' is Error");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ Integer companyId = thirdPartyInterfaces.get(0).getCompanyId();
|
|
|
+ Company company = companyMapper.selectById(companyId);
|
|
|
+ if(LocalDateTime.now().isAfter(thirdPartyInterfaces.get(0).getExpireTime())){
|
|
|
+ httpRespMsg.setError("'token' is Expire");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ if(memberQueryQuery.get("personnelId")==null&&memberQueryQuery.get("organizationId")==null){
|
|
|
+ httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'personnelId' or 'organizationId',There must be a non empty parameter");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ if(memberQueryQuery.get("startDate")==null||memberQueryQuery.get("endDate")==null){
|
|
|
+ httpRespMsg.setError("The date range cannot be empty");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ String startDate = String.valueOf(memberQueryQuery.get("startDate"));
|
|
|
+ String endDate = String.valueOf(memberQueryQuery.get("endDate"));
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
|
|
|
+ LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);
|
|
|
+ if (start.until(end, ChronoUnit.DAYS) > 365) {
|
|
|
+ httpRespMsg.setError("The time interval shall not exceed one year");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ String userId =null;
|
|
|
+ String departmentId =null;
|
|
|
+ Integer stateKey =0;
|
|
|
+ if(memberQueryQuery.get("personnelId")!=null){
|
|
|
+ userId = String.valueOf(memberQueryQuery.get("personnelId"));
|
|
|
+ User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getJobNumber, userId));
|
|
|
+ if(user!=null){
|
|
|
+ userId=user.getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(memberQueryQuery.get("organizationId")!=null){
|
|
|
+ departmentId = String.valueOf(memberQueryQuery.get("organizationId"));
|
|
|
+ Department department = departmentMapper.selectOne(new LambdaQueryWrapper<Department>().eq(Department::getCorpwxDeptid, departmentId));
|
|
|
+ if(department!=null){
|
|
|
+ departmentId = String.valueOf(department.getDepartmentId());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(memberQueryQuery.get("stateKey")!=null){
|
|
|
+ stateKey = Integer.valueOf(String.valueOf(memberQueryQuery.get("stateKey")));
|
|
|
+ }
|
|
|
+ Map<String,Object> responseData=new HashMap<>();
|
|
|
+ //检查模式,是否是一个项目多个工作事项的情况
|
|
|
+ TimeType timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id",companyId));
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
|
|
+ List<Map<String,Object>> dataList=new ArrayList<>();
|
|
|
+
|
|
|
+ List<HashMap<String, Object>> allReportByDate = null;
|
|
|
+
|
|
|
+ //获取部门的所有子部门
|
|
|
+ List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
|
|
|
+ List<Integer> branchDepartment = null;
|
|
|
+ if(departmentId != null){
|
|
|
+ branchDepartment = departmentService.getBranchDepartment(Integer.valueOf(departmentId),departments);
|
|
|
+ }
|
|
|
+ //看公司所有人的
|
|
|
+ if (timeType.getShowFillauditTime() == 1) {
|
|
|
+ allReportByDate = reportMapper.getAllReportByDateWithReportLog(startDate, companyId, userId, endDate, null,stateKey,branchDepartment);
|
|
|
+ } else {
|
|
|
+ allReportByDate = reportMapper.getAllReportByDate(startDate,companyId, userId, endDate, null,stateKey,branchDepartment);
|
|
|
+ }
|
|
|
+ if (timeType.getMultiWorktime() == 1) {
|
|
|
+ java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
|
|
|
+ //重新处理一下数据,把工作时间和工作事项移出来
|
|
|
+ List<HashMap<String, Object>> dealDataList = new ArrayList<HashMap<String, Object>>();
|
|
|
+ for (HashMap<String, Object> map : allReportByDate) {
|
|
|
+ if ((Integer)map.get("multiWorktime") == 1) {
|
|
|
+ String data = (String)map.get("content");
|
|
|
+ Integer isOvertime = (Integer) map.get("isOvertime");
|
|
|
+ JSONArray array = JSONArray.parseArray(data);
|
|
|
+ if (array != null) {
|
|
|
+ for (int i=0;i<array.size(); i++) {
|
|
|
+ JSONObject obj = array.getJSONObject(i);
|
|
|
+ WorktimeItem worktimeItem = JSONObject.toJavaObject(obj, WorktimeItem.class);
|
|
|
+ HashMap<String, Object> newMap = new HashMap<>();
|
|
|
+ newMap.putAll(map);
|
|
|
+ newMap.put("startTime", worktimeItem.getStartTime());
|
|
|
+ newMap.put("endTime", worktimeItem.getEndTime());
|
|
|
+ newMap.put("content", worktimeItem.getContent());
|
|
|
+ newMap.put("duration", df.format(worktimeItem.getTime()));
|
|
|
+ //第一条填充加班
|
|
|
+ if (isOvertime == 1 && i == 0) {
|
|
|
+ newMap.put("isOvertime", 1);
|
|
|
+ newMap.put("overtimeHours", map.get("overtimeHours"));
|
|
|
+ } else {
|
|
|
+ newMap.put("isOvertime", 0);
|
|
|
+ }
|
|
|
+ dealDataList.add(newMap);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> newMap = new HashMap<>();
|
|
|
+ newMap.putAll(map);
|
|
|
+ newMap.put("startTime", "");
|
|
|
+ newMap.put("endTime", "");
|
|
|
+ newMap.put("content", "");
|
|
|
+ dealDataList.add(newMap);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ dealDataList.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ allReportByDate = dealDataList;
|
|
|
+ }
|
|
|
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ DecimalFormat df = new DecimalFormat("#0.0");
|
|
|
+ int offsetSeconds = 0;
|
|
|
+ if (company.getIsInternational() == 1) {
|
|
|
+ //国际化版本
|
|
|
+ LocaleInformation locale = localeInformationMapper.selectById(companyId);
|
|
|
+ TimeZone curZone = TimeZone.getTimeZone(locale.getTimezone());
|
|
|
+ offsetSeconds = (curZone.getRawOffset() - TimeZone.getTimeZone("GMT+8").getRawOffset())/1000;
|
|
|
+ //时区转换,默认数据库存的是GMT+8
|
|
|
+ for (Map<String, Object> map : allReportByDate) {
|
|
|
+ String createTime = sdf.format((Date)map.get("time"));
|
|
|
+ LocalDateTime time = LocalDateTime.parse(createTime, dtf);
|
|
|
+ time = time.plusSeconds(offsetSeconds);
|
|
|
+ map.put("time", DateTimeUtil.localDateTimeToDate(time));
|
|
|
+
|
|
|
+ //审核时间
|
|
|
+ if(map.get("projectAuditTime") != null){
|
|
|
+ String projectAuditTime = sdf.format((Date)map.get("projectAuditTime"));
|
|
|
+ LocalDateTime auditTime = LocalDateTime.parse(projectAuditTime, dtf);
|
|
|
+ auditTime = auditTime.plusSeconds(offsetSeconds);
|
|
|
+ map.put("projectAuditTime", DateTimeUtil.localDateTimeToDate(auditTime));
|
|
|
+ }else map.put("projectAuditTime","");
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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");
|
|
|
+ for (Map<String, Object> map : allReportByDate) {
|
|
|
+ Map<String,Object> item=new HashMap<>();
|
|
|
+ item.put("jobNumber",(String) map.get("jobNumber"));
|
|
|
+ Department dept = null;
|
|
|
+ for (Department department : departments) {
|
|
|
+ if (map.containsKey("departmentId") && department.getDepartmentId().toString().equals(map.get("departmentId").toString())){
|
|
|
+ dept = department;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.put("userName",(String) map.get("name"));
|
|
|
+ item.put("departmentName",departmentService.getSupDepartment(dept,departments));
|
|
|
+ item.put("departmentId",dept.getCorpwxDeptid());
|
|
|
+ item.put("projectCode",(String) map.get("projectCode"));
|
|
|
+ item.put("projectName",(String) map.get("project"));
|
|
|
+ item.put("categoryName",(String) map.get("categoryName"));
|
|
|
+ if(timeType.getMainProjectState()==1){
|
|
|
+ item.put("projectMainName",(String) map.get("projectMainName"));
|
|
|
+ }else {
|
|
|
+ item.put("subProjectName",(String) map.get("subProjectName"));
|
|
|
+ item.put("subProjectCode",(String) map.get("subProjectCode"));
|
|
|
+ }
|
|
|
+ if (company.getPackageProject() == 1) {
|
|
|
+ item.put("taskName",(String) map.get("taskName"));
|
|
|
+ }
|
|
|
+ item.put("createDate",new SimpleDateFormat("yyyy-MM-dd")
|
|
|
+ .format((java.sql.Date) map.get("createDate")));
|
|
|
+ item.put("duration",map.get("duration").toString());
|
|
|
+ if (timeType.getMultiWorktime() == 1) {
|
|
|
+ if ((Integer)map.get("multiWorktime") == 1) {
|
|
|
+ item.put("multiWorktime",map.get("startTime").toString()+"-"+map.get("endTime").toString());
|
|
|
+ } else {
|
|
|
+ item.put("multiWorktime","");
|
|
|
+ }
|
|
|
+ //加班情况
|
|
|
+ int isOverTime = (Integer) map.get("isOvertime");
|
|
|
+ item.put("overtimeHours",isOverTime==1?(df.format((double)map.get("overtimeHours"))):"-");
|
|
|
+ }
|
|
|
+ if (timeType.getMultiWorktime() == 0) {
|
|
|
+ int isOverTime = (Integer) map.get("isOvertime");
|
|
|
+ item.put("overtimeHours",isOverTime==1?(df.format((double)map.get("overtimeHours"))):"-");
|
|
|
+ }
|
|
|
+ //项目管理专业版,需要显示任务分组和投入阶段
|
|
|
+ if (company.getPackageProject() == 1) {
|
|
|
+ item.put("groupName",map.get("groupName") != null? map.get("groupName").toString():"");
|
|
|
+ item.put("stage",map.get("stage") != null?map.get("stage").toString():"");
|
|
|
+ }
|
|
|
+ if (timeType.getShowFillauditTime() == 1) {
|
|
|
+ item.put("time",sdf.format((Date)map.get("time")));
|
|
|
+ item.put("projectAuditorName",(String)map.get("projectAuditorName"));
|
|
|
+ //分组审核通过或者项目审核通过都显示
|
|
|
+ if (map.get("projectAuditTime") != null && ((Integer)map.get("projectAuditState") == 1 || (Integer)map.get("groupAuditState") == 1)) {
|
|
|
+ item.put("projectAuditTime",sdf.format((Date)map.get("projectAuditTime")));
|
|
|
+ } else {
|
|
|
+ item.put("projectAuditTime","");
|
|
|
+ }
|
|
|
+ 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) {
|
|
|
+ operateDate = operateDate.plusSeconds(offsetSeconds);
|
|
|
+ }
|
|
|
+ String time = dtf.format(operateDate);
|
|
|
+ String msg= "";
|
|
|
+ msg = time+" " + audit.getMsg();
|
|
|
+ if (!isFirst) {
|
|
|
+ sb.append("->");
|
|
|
+ } else {
|
|
|
+ isFirst = false;
|
|
|
+ }
|
|
|
+ sb.append(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.put("reviewProcess",sb.toString());
|
|
|
+ }
|
|
|
+ item.put("content",(String) map.get("content"));
|
|
|
+ if(stateKey==1){
|
|
|
+ Integer state = (Integer) map.get("state");
|
|
|
+ switch (state){
|
|
|
+ //case 0:row.createCell(index).setCellValue("待审核");
|
|
|
+ case 0:item.put("state",MessageUtils.message("stages.reviewed"));
|
|
|
+ break;
|
|
|
+ //case 1:row.createCell(index).setCellValue("已通过");
|
|
|
+ case 1:item.put("state",MessageUtils.message("stages.passed"));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //审核流程状态
|
|
|
+ Integer packageEngineering = company.getPackageEngineering();
|
|
|
+ if (packageEngineering.equals(0)){
|
|
|
+ if(String.valueOf(map.get("state")).equals("1")){
|
|
|
+ item.put("reviewProcessState","——");
|
|
|
+ }else if (String.valueOf(map.get("state")).equals("-1")){
|
|
|
+ item.put("reviewProcessState","导入待审核");
|
|
|
+ } else {
|
|
|
+ //部门审核
|
|
|
+ if(String.valueOf(map.get("isDeptAudit")).equals("1")){
|
|
|
+ String deptAuditorId = map.get("deptAuditorName")+"";
|
|
|
+ String departmentName = map.get("departmentName") + "";
|
|
|
+ for (User userItem : userList) {
|
|
|
+ if (userItem.getId().equals(deptAuditorId)){
|
|
|
+ if(timeType.getReportAuditType()==4){
|
|
|
+ departmentName = map.get("buDepartmentName") + "";
|
|
|
+ item.put("reviewProcessState","待项目所属BU[" + departmentName + "](" + userItem.getName() + ")审核");
|
|
|
+ }else {
|
|
|
+ item.put("reviewProcessState","待" + departmentName + "(" + userItem.getName() + ")审核");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //项目审核或分组审核
|
|
|
+ if (String.valueOf(map.get("projectAuditState")).equals("0") || String.valueOf(map.get("groupAuditState")).equals("0")){
|
|
|
+ String projectAuditorName = map.get("projectAuditorName")+"";
|
|
|
+ String projectAuditorId = map.get("projectAuditorId")+"";
|
|
|
+ item.put("reviewProcessState","待项目审核人" + "(" + projectAuditorName + ")审核");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataList.add(item);
|
|
|
+ }
|
|
|
+ responseData.put("userTimeCostArray",dataList);
|
|
|
+ httpRespMsg.setData(responseData);
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
}
|