|
@@ -11369,8 +11369,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
XmlResponseData xmlResponseData = SyncSapUtils.syncProjectFromSap(startDate, endDate);
|
|
|
List<ProjectQueryResponse> projectQueryResponses = xmlResponseData.getProjectQueryResponses();
|
|
|
List<Map<String,Object>> idsMapList=new ArrayList<>();
|
|
|
+ LocalDate localDate=LocalDate.now();
|
|
|
+// projectQueryResponses=projectQueryResponses.stream().filter(p->p.getProjectID().equals("CPSP2250001")).collect(Collectors.toList());
|
|
|
if(projectQueryResponses!=null&&projectQueryResponses.size()>0){
|
|
|
- List<Stages> stagesList=new ArrayList<>();
|
|
|
for (ProjectQueryResponse item : projectQueryResponses) {
|
|
|
Project project=new Project();
|
|
|
//处理项目分类
|
|
@@ -11434,61 +11435,105 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
//处理项目下任务 ----> 工时管家生成任务分组
|
|
|
List<ProjectTask> projectTasks = item.getProjectTasks();
|
|
|
if(projectTasks!=null&&projectTasks.size()>0){
|
|
|
- projectTasks.forEach(ps->{
|
|
|
- boolean match = idsMapList.stream().anyMatch(i -> i.get("taskGroupUUID").equals(ps.getUUID()));
|
|
|
- if(!match){
|
|
|
- if(StringUtils.isEmpty(ps.getParentTaskUUID())){
|
|
|
- TaskGroup taskGroup=new TaskGroup();
|
|
|
- taskGroup.setProjectId(project.getId());
|
|
|
- taskGroup.setTaskGroupCode(ps.getProjectElementID());
|
|
|
- taskGroup.setName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
|
|
|
- TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", ps.getProjectElementID()));
|
|
|
+ //找到任务列表中 作为项目出现的第一级列表
|
|
|
+ Optional<ProjectTask> targetProject = projectTasks.stream().filter(p -> p.getProjectElementID().equals(project.getProjectCode())).findFirst();
|
|
|
+ String targetUUID = targetProject.get().getUUID();
|
|
|
+ //todo:按照层级抽取数据
|
|
|
+ //项目下第一层 作为任务分组数据
|
|
|
+ List<ProjectTask> taskGroupList = projectTasks.stream().filter(p -> p.getParentTaskUUID() != null && p.getParentTaskUUID().equals(targetUUID)).collect(Collectors.toList());
|
|
|
+ //抽调任务分组下级数据 作为阶段数据(是没有下级数据的情况下 作为最末级--->工时管家任务)
|
|
|
+ List<String> taskGroupUUIDList = taskGroupList.stream().map(ProjectTask::getUUID).collect(Collectors.toList());
|
|
|
+ List<ProjectTask> stagesList = projectTasks.stream().filter(p -> p.getParentTaskUUID() != null && taskGroupUUIDList.contains(p.getParentTaskUUID())).collect(Collectors.toList());
|
|
|
+ List<String> stagesUUIDList = stagesList.stream().map(ProjectTask::getUUID).collect(Collectors.toList());
|
|
|
+ //抽调出最末级
|
|
|
+ List<ProjectTask> taskList = projectTasks.stream().filter(p ->p.getParentTaskUUID() != null &&stagesUUIDList.contains(p.getParentTaskUUID())&&(p.getSummaryTaskIndicator()==null||(p.getSummaryTaskIndicator()!=null && !p.getSummaryTaskIndicator().equals("true")))).collect(Collectors.toList());
|
|
|
+ if(taskGroupList!=null && taskGroupList.size()>0){
|
|
|
+ for (ProjectTask group : taskGroupList) {
|
|
|
+ TaskGroup taskGroup=new TaskGroup();
|
|
|
+ taskGroup.setProjectId(project.getId());
|
|
|
+ taskGroup.setTaskGroupCode(group.getProjectElementID());
|
|
|
+ taskGroup.setName(group.getTaskGroupName()==null?"":group.getTaskGroupName().getName());
|
|
|
+ TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", group.getProjectElementID()));
|
|
|
+ if(one!=null){
|
|
|
+ taskGroup.setId(one.getId());
|
|
|
+ }
|
|
|
+ taskGroupService.saveOrUpdate(taskGroup);
|
|
|
+ Map<String,Object> map=new HashMap<>();
|
|
|
+ map.put("groupId",taskGroup.getId());
|
|
|
+ map.put("UUID",group.getUUID());
|
|
|
+ map.put("projectId",project.getId());
|
|
|
+ idsMapList.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(stagesList!=null&&stagesList.size()>0){
|
|
|
+ for (ProjectTask targetStage : stagesList) {
|
|
|
+ Optional<Map<String, Object>> targetGroup = idsMapList.stream().filter(i -> i.get("UUID").equals(targetStage.getParentTaskUUID())).findFirst();
|
|
|
+ if(!targetGroup.isPresent()){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //如果作为第三层数据是不存在下级数据的 把当前数据作为第四层数据 手动添加阶段数据 作为该数据的上级数据
|
|
|
+ if(targetStage.getSummaryTaskIndicator()==null){
|
|
|
+ Stages stage = new Stages();
|
|
|
+ stage.setSequence(1);
|
|
|
+ stage.setProjectId(project.getId());
|
|
|
+ stage.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
|
|
|
+ stage.setStagesName("工作开展");
|
|
|
+ Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name","工作开展").eq("group_id",stage.getGroupId()));
|
|
|
+ if(one!=null){
|
|
|
+ stage.setId(one.getId());
|
|
|
+ }
|
|
|
+ stagesService.saveOrUpdate(stage);
|
|
|
+ Task task=new Task();
|
|
|
+ task.setProjectId(project.getId());
|
|
|
+ task.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
|
|
|
+ task.setStagesId(stage.getId());
|
|
|
+ task.setCreateDate(localDate);
|
|
|
+ task.setCompanyId(companyId);
|
|
|
+ task.setName(targetStage.getTaskGroupName()==null?"空的任务名称":targetStage.getTaskGroupName().getName());
|
|
|
+ Task two = taskMapper.selectOne(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, task.getProjectId()).eq(Task::getGroupId, task.getGroupId()).eq(Task::getStagesId, task.getStagesId()));
|
|
|
+ if(two!=null){
|
|
|
+ task.setId(two.getId());
|
|
|
+ }
|
|
|
+ taskService.saveOrUpdate(task);
|
|
|
+ }else {
|
|
|
+ Stages stage = new Stages();
|
|
|
+ stage.setSequence(1);
|
|
|
+ stage.setProjectId(project.getId());
|
|
|
+ stage.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
|
|
|
+ stage.setStagesCode(targetStage.getProjectElementID());
|
|
|
+ stage.setStagesName(targetStage.getTaskGroupName()==null?"":targetStage.getTaskGroupName().getName());
|
|
|
+ Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name", targetStage.getProjectElementID()).eq("group_id",stage.getGroupId()));
|
|
|
if(one!=null){
|
|
|
- taskGroup.setId(one.getId());
|
|
|
+ stage.setId(one.getId());
|
|
|
}
|
|
|
- taskGroupService.saveOrUpdate(taskGroup);
|
|
|
+ stagesService.saveOrUpdate(stage);
|
|
|
Map<String,Object> map=new HashMap<>();
|
|
|
- map.put("groupId",taskGroup.getId());
|
|
|
- map.put("taskGroupUUID",ps.getUUID());
|
|
|
+ map.put("groupId",targetGroup.get().get("groupId"));
|
|
|
+ map.put("stageId",stage.getId());
|
|
|
+ map.put("UUID",targetStage.getUUID());
|
|
|
map.put("projectId",project.getId());
|
|
|
idsMapList.add(map);
|
|
|
- }else {
|
|
|
- Optional<ProjectTask> task = projectTasks.stream().filter(p -> p.getUUID().equals(ps.getParentTaskUUID())).findFirst();
|
|
|
- if(task.isPresent()){
|
|
|
- Stages stage = new Stages();
|
|
|
- Optional<Map<String, Object>> exist = idsMapList.stream().filter(i -> i.get("taskGroupUUID").equals(task.get().getUUID())).findFirst();
|
|
|
- if(exist.isPresent()){
|
|
|
- stage.setGroupId(Integer.valueOf(String.valueOf(exist.get().get("groupId"))));
|
|
|
- }else {
|
|
|
- //避免排序问题导致 上级数据未添加 漏掉子数据
|
|
|
- TaskGroup taskGroup=new TaskGroup();
|
|
|
- taskGroup.setProjectId(project.getId());
|
|
|
- taskGroup.setTaskGroupCode(ps.getProjectElementID());
|
|
|
- taskGroup.setName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
|
|
|
- TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", ps.getProjectElementID()));
|
|
|
- if(one!=null){
|
|
|
- taskGroup.setId(one.getId());
|
|
|
- }
|
|
|
- taskGroupService.saveOrUpdate(taskGroup);
|
|
|
- Map<String,Object> map=new HashMap<>();
|
|
|
- map.put("groupId",taskGroup.getId());
|
|
|
- map.put("taskGroupUUID",ps.getUUID());
|
|
|
- map.put("projectId",project.getId());
|
|
|
- idsMapList.add(map);
|
|
|
- stage.setGroupId(taskGroup.getId());
|
|
|
- }
|
|
|
- stage.setSequence(1);
|
|
|
- stage.setProjectId(project.getId());
|
|
|
- stage.setStagesName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
|
|
|
- Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name", ps.getProjectElementID()).eq("group_id",stage.getGroupId()));
|
|
|
- if(one!=null){
|
|
|
- stage.setId(one.getId());
|
|
|
- }
|
|
|
- stagesService.saveOrUpdate(stage);
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+ for (ProjectTask targetTask : taskList) {
|
|
|
+ Optional<Map<String, Object>> targetMapOp = idsMapList.stream().filter(i -> String.valueOf(i.get("UUID")).equals(targetTask.getParentTaskUUID())&&i.get("stageId")!=null).findFirst();
|
|
|
+ if(targetMapOp.isPresent()){
|
|
|
+ Map<String, Object> targetMap = targetMapOp.get();
|
|
|
+ Task task=new Task();
|
|
|
+ task.setProjectId(project.getId());
|
|
|
+ task.setGroupId(Integer.valueOf(String.valueOf(targetMap.get("groupId"))));
|
|
|
+ task.setStagesId(Integer.valueOf(String.valueOf(targetMap.get("stageId"))));
|
|
|
+ task.setCreateDate(localDate);
|
|
|
+ task.setCompanyId(companyId);
|
|
|
+ task.setName(targetTask.getTaskGroupName()==null?"空的任务名称":targetTask.getTaskGroupName().getName());
|
|
|
+ Task one = taskMapper.selectOne(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, task.getProjectId()).eq(Task::getGroupId, task.getGroupId()).eq(Task::getStagesId, task.getStagesId()));
|
|
|
+ if(one!=null){
|
|
|
+ task.setId(one.getId());
|
|
|
+ }
|
|
|
+ taskService.saveOrUpdate(task);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -11542,6 +11587,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
laborHourRateVo.setChild_ids(deptIds);
|
|
|
//查询该公司下某头部部门及子部门在四种项目下的工时之和,某个时间段内
|
|
|
List<Report> reportList= reportMapper.getSumWorkingTime(deptIds,startDate,endDate);
|
|
|
+ List<String> userIds= reportMapper.getUserIds(deptIds,startDate,endDate);
|
|
|
+
|
|
|
|
|
|
ArrayList<Report> reports = new ArrayList<>();//按时填报的report
|
|
|
for (Report report : reportList) {
|
|
@@ -11570,6 +11617,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
//-- 查询 有多少个 入职时间早于起始时间 并且是在职的员工
|
|
|
int isActiveCount=userMapper.getIsActiveCount(deptIds,startDate,endDate);
|
|
|
|
|
|
+ List<User> isActiveList = userMapper.getIsActiveList(deptIds, startDate, endDate);
|
|
|
+ List<String> collect = isActiveList.stream().map(User::getId).collect(Collectors.toList());
|
|
|
+ HashSet<String> idStrings = new HashSet<>();
|
|
|
+ idStrings.addAll(userIds);
|
|
|
+ idStrings.addAll(collect);
|
|
|
+
|
|
|
//-- 查询 有多少个 入职时间晚于起始时间 并且在这段时间离职的员工
|
|
|
List<User> inActiveBewttenStartAndEndList=userMapper.getInActiveBewttenStartAndEndList(deptIds,startDate,endDate);
|
|
|
//获取入职时间晚于起始时间 并且在这段时间离职的员工在此期间工作多少天
|
|
@@ -11582,14 +11635,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
|
|
|
laborHourRateVo.setWorking_time(timeSum);
|
|
|
laborHourRateVo.setDate_count(dayCount);
|
|
|
- laborHourRateVo.setCount(isActiveCount);
|
|
|
- if (inActiveDays == 0) {
|
|
|
+ laborHourRateVo.setCount(idStrings.size());
|
|
|
+ int v = 8 * inActiveDays + idStrings.size() * 8 * dayCount;
|
|
|
+ if (v== 0) {
|
|
|
laborHourRateVo.setTotal_time(0L);
|
|
|
laborHourRateVo.setRate(0.0);
|
|
|
laborHourRateVos.add(laborHourRateVo);
|
|
|
} else {
|
|
|
- laborHourRateVo.setTotal_time((long) (8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
|
|
|
- BigDecimal bd = new BigDecimal(timeSum/(8*inActiveDays+isActiveCount*8*dayCount)*100);
|
|
|
+ laborHourRateVo.setTotal_time((long) (v));//应报工时还少了在职的加上可能辞职的
|
|
|
+ BigDecimal bd = new BigDecimal(timeSum/(v)*100);
|
|
|
bd = bd.setScale(2, RoundingMode.HALF_UP);
|
|
|
laborHourRateVo.setRate(bd.doubleValue());
|
|
|
laborHourRateVos.add(laborHourRateVo);
|