From 58f9bf25834feaeb23c8ea3509392bc6a12ff0f8 Mon Sep 17 00:00:00 2001 From: wang0018 <1007152140@qq.com> Date: Thu, 25 Mar 2021 14:46:36 +0800 Subject: [PATCH] lwbs --- .../com/ccsens/tall/bean/dto/LwbsDto.java | 4 + .../java/com/ccsens/tall/bean/vo/LwbsVo.java | 3 +- .../java/com/ccsens/tall/bean/vo/TaskVo.java | 7 +- .../ccsens/tall/persist/dao/IInputDocDao.java | 3 +- .../ccsens/tall/service/IInputDocService.java | 3 +- .../ccsens/tall/service/InputDocService.java | 142 +++++++++++++++++- .../com/ccsens/tall/web/LwbsController.java | 7 +- tall/src/main/resources/application-dev.yml | 4 +- tall/src/main/resources/application.yml | 4 +- .../resources/mapper_dao/IInputDocDao.xml | 101 +++++++++---- 10 files changed, 235 insertions(+), 43 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/LwbsDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/LwbsDto.java index e060f9fc..168a2198 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/LwbsDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/LwbsDto.java @@ -31,6 +31,10 @@ public class LwbsDto { @NotNull @ApiModelProperty("结束时间") private Long endTime; + @ApiModelProperty("完成状态 0全部,1完成,2未完成") + private Integer process = 0; + @ApiModelProperty("优先级排序 0无 1倒叙(优先级高的在前) 2正序") + private Integer priority = 0; @ApiModelProperty("任务等级") private Byte level=(byte)2; } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/LwbsVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/LwbsVo.java index 2bcd1bca..0f3f8baf 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/LwbsVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/LwbsVo.java @@ -44,9 +44,8 @@ public class LwbsVo { private Long id; @ApiModelProperty("项目名称") private String name; - @ApiModelProperty("所有的任务") + @ApiModelProperty("普通任务") private List list; - } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java index 08f3672b..829dcc21 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java @@ -61,7 +61,12 @@ public class TaskVo { private int delay; @ApiModelProperty("状态:0-未开始,1-进行中,2-已完成") private int process; - + @ApiModelProperty("所属项目id") + private Long projectId; + @ApiModelProperty("所属项目名称") + private String projectName; + @ApiModelProperty("项目下得全局任务") + private List normalTaskList; @ApiModelProperty("页面/接口路径") private String webPath; @ApiModelProperty("程序位置 0:tall内部,1外部") diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/IInputDocDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/IInputDocDao.java index 62f22a41..f09de704 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/IInputDocDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/IInputDocDao.java @@ -2,6 +2,7 @@ package com.ccsens.tall.persist.dao; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.vo.LwbsVo; +import com.ccsens.tall.bean.vo.TaskVo; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -10,5 +11,5 @@ import java.util.List; @Repository public interface IInputDocDao { - List selectById(@Param("param") LwbsDto.SelByProjectIdToTaskDto param, @Param("userId") Long userId); + List selectByCompany(@Param("param") LwbsDto.SelByProjectIdToTaskDto param, @Param("userId") Long userId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java b/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java index 53c651d2..657bbd93 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java @@ -2,11 +2,12 @@ package com.ccsens.tall.service; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.vo.LwbsVo; +import com.ccsens.tall.bean.vo.TaskVo; import java.util.List; public interface IInputDocService { List selBylwbs(LwbsDto.SelByUserIdToComProject param, Long userId); - List selByProjectIdToTask(LwbsDto.SelByProjectIdToTaskDto param, Long userId); + TaskVo.ProTaskInfo selByProjectIdToTask(LwbsDto.SelByProjectIdToTaskDto param, Long userId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/InputDocService.java b/tall/src/main/java/com/ccsens/tall/service/InputDocService.java index 4ad032ed..02bf6da3 100644 --- a/tall/src/main/java/com/ccsens/tall/service/InputDocService.java +++ b/tall/src/main/java/com/ccsens/tall/service/InputDocService.java @@ -1,14 +1,18 @@ package com.ccsens.tall.service; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.po.ProMember; import com.ccsens.tall.bean.po.ProMemberExample; import com.ccsens.tall.bean.po.SysProject; import com.ccsens.tall.bean.po.SysProjectExample; import com.ccsens.tall.bean.vo.LwbsVo; +import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.tall.persist.dao.IInputDocDao; import com.ccsens.tall.persist.mapper.ProMemberMapper; import com.ccsens.tall.persist.mapper.SysProjectMapper; +import com.ccsens.tall.util.TaskUtil; import com.rabbitmq.client.TopologyRecoveryException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -57,9 +61,141 @@ public class InputDocService implements IInputDocService { } @Override - public List selByProjectIdToTask(LwbsDto.SelByProjectIdToTaskDto param, Long userId) { - List se= iInputDocDao.selectById(param,userId); + public TaskVo.ProTaskInfo selByProjectIdToTask(LwbsDto.SelByProjectIdToTaskDto param, Long userId) { + TaskVo.ProTaskInfo taskInfo=new TaskVo.ProTaskInfo(); + //普通的任务和全局的 + List normalTaskList1= iInputDocDao.selectByCompany(param,userId); + //拆分后得全局任务和普通任务 + List globalTaskList = new ArrayList<>(); + List normalTaskList = new ArrayList<>(); + for (int i = 0; i < normalTaskList1.size(); i++) { + //拆分项目下得普通任务和全局任务 + List list= normalTaskList1.get(i).getSecondTasks(); + TaskUtil.Task task = TaskUtil.splitTask(list, param.getStartTime(), param.getEndTime(), param.getProcess()); + if(CollectionUtil.isNotEmpty(task.getGlobalTask())){ + //给全局任务下先存项目名称 + TaskVo.GlobalTask globalTask=new TaskVo.GlobalTask(); + BeanUtil.copyProperties(normalTaskList1.get(i),globalTask); + globalTask.setNormalTaskList(task.getGlobalTask()); + globalTaskList.add(globalTask); + } + if(CollectionUtil.isNotEmpty(task.getCommonTask())){ + //给普通任务下先存项目 + TaskVo.NormalTask normalTask =new TaskVo.NormalTask(); + BeanUtil.copyProperties(normalTaskList1.get(i),normalTask); + normalTask.setSecondTasks(task.getCommonTask()); + normalTaskList.add(normalTask); + } + } + taskInfo.setGlobalTaskList(globalTaskList); + taskInfo.setNormalTaskList(normalTaskList); - return se; +// List globalTaskList = new ArrayList<>(); +// List normalTaskList = new ArrayList<>(); +// TaskVo.GlobalTask globalTask; +// //从普通和全局任务中拆分开是普通和全局任务 +// TaskUtil.Task task = TaskUtil.splitTask(normalTaskList1, param.getStartTime(), param.getEndTime(), param.getProcess()); +// if (CollectionUtil.isNotEmpty(task.getGlobalTask())) { +// for (TaskVo.NormalTask global : task.getGlobalTask()) { +// globalTask = new TaskVo.GlobalTask(); +// BeanUtil.copyProperties(global, globalTask); +// globalTaskList.add(globalTask); +// } +// } +// if (CollectionUtil.isNotEmpty(task.getCommonTask())) { +// if (param.getPriority() == 0) { +// normalTaskList = sortTaskTime(task.getCommonTask()); +// } else { +// normalTaskList = task.getCommonTask(); +// } +// } +// taskInfo.setGlobalTaskList(globalTaskList); +// taskInfo.setNormalTaskList(normalTaskList); + return taskInfo; + } + private List sortTaskTime(List commonTask) { + + List normalTaskList = new ArrayList<>(); + List secondTaskVoList; + Set longSet = new HashSet<>(); + if (CollectionUtil.isNotEmpty(commonTask)) { + for (TaskVo.NormalTask secondTaskVo : commonTask) { + longSet.add(secondTaskVo.getBeginTime()); + longSet.add(secondTaskVo.getEndTime()); + } + List timeList = new ArrayList<>(longSet); + for (int i = 0; i < timeList.size(); i++) { + for (int j = 0; j < timeList.size() - i - 1; j++) { + if (timeList.get(j) > timeList.get(j + 1)) { + Long r = timeList.get(j); + timeList.set(j, timeList.get(j + 1)); + timeList.set(j + 1, r); + } + } + } + int sequence = 1; + for (int i = 0; i < timeList.size() - 1; i++) { + TaskVo.NormalTask normalTask; + secondTaskVoList = new ArrayList<>(); + Long startTime = timeList.get(i); + Long endTime = timeList.get(i + 1); + + for (TaskVo.NormalTask secondTaskVo : commonTask) { + if (secondTaskVo.getTimeStatus() == 1) { + if (secondTaskVo.getBeginTime().longValue() == startTime.longValue()) { + normalTask = new TaskVo.NormalTask(); + BeanUtil.copyProperties(secondTaskVo, normalTask); + normalTask.setEndTime(null); + normalTask.setSequence(sequence); + sequence++; + normalTaskList.add(normalTask); + } + continue; + } + if (secondTaskVo.getTimeStatus() == 2) { + if (secondTaskVo.getEndTime().longValue() == endTime.longValue()) { + normalTask = new TaskVo.NormalTask(); + BeanUtil.copyProperties(secondTaskVo, normalTask); + normalTask.setBeginTime(null); + normalTask.setSequence(sequence); + sequence++; + normalTaskList.add(normalTask); + } + continue; + } + if (secondTaskVo.getBeginTime() < startTime && secondTaskVo.getEndTime() <= endTime && secondTaskVo.getEndTime() > startTime) { + secondTaskVo.setBeginTime(startTime); + secondTaskVoList.add(secondTaskVo); + } else if (secondTaskVo.getBeginTime() >= startTime && secondTaskVo.getEndTime() <= endTime) { + secondTaskVoList.add(secondTaskVo); + } else if (secondTaskVo.getBeginTime() >= startTime && secondTaskVo.getBeginTime() < endTime && secondTaskVo.getEndTime() > endTime) { + secondTaskVo.setEndTime(endTime); + secondTaskVoList.add(secondTaskVo); + } else if (secondTaskVo.getBeginTime() < startTime && secondTaskVo.getEndTime() > endTime) { + secondTaskVo.setBeginTime(startTime); + secondTaskVo.setEndTime(endTime); + secondTaskVoList.add(secondTaskVo); + } + } + if (CollectionUtil.isNotEmpty(secondTaskVoList)) { + if (secondTaskVoList.size() == 1) { + normalTask = new TaskVo.NormalTask(); + BeanUtil.copyProperties(secondTaskVoList.get(0), normalTask); + normalTask.setSequence(sequence); + sequence++; + normalTaskList.add(normalTask); + } else { + normalTask = new TaskVo.NormalTask(); + normalTask.setBeginTime(startTime); + normalTask.setEndTime(endTime); + normalTask.setSecondTasks(secondTaskVoList); + normalTask.setSequence(sequence); + sequence++; + normalTaskList.add(normalTask); + } + } + } + } + return normalTaskList; } } diff --git a/tall/src/main/java/com/ccsens/tall/web/LwbsController.java b/tall/src/main/java/com/ccsens/tall/web/LwbsController.java index 5d6f3a58..57c45bf1 100644 --- a/tall/src/main/java/com/ccsens/tall/web/LwbsController.java +++ b/tall/src/main/java/com/ccsens/tall/web/LwbsController.java @@ -5,6 +5,7 @@ import com.ccsens.tall.annotation.MustLoginTall; import com.ccsens.tall.bean.dto.InputDocDto; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.vo.LwbsVo; +import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.tall.service.IInputDocService; import com.ccsens.util.JsonResponse; import com.ccsens.util.bean.dto.QueryDto; @@ -38,12 +39,12 @@ public class LwbsController { log.info("输出某人下的所有的项目成功"); return JsonResponse.newInstance().ok(selBylwbs); } - @MustLogin + @MustLoginTall @ApiOperation(value = "查询某人下参加的项目的所有的任务", notes = "1007:输出") @RequestMapping(value = "/selByProjectIdToTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> selByProjectIdToTask(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse selByProjectIdToTask(@ApiParam @Validated @RequestBody QueryDto params) { log.info("查询某人下参加的项目的所有的任务:{}",params); - List selBylwbs= iInputDocService.selByProjectIdToTask(params.getParam(),params.getUserId()); + TaskVo.ProTaskInfo selBylwbs= iInputDocService.selByProjectIdToTask(params.getParam(),params.getUserId()); log.info("查询某人下参加的项目的所有的任务"); return JsonResponse.newInstance().ok(selBylwbs); } diff --git a/tall/src/main/resources/application-dev.yml b/tall/src/main/resources/application-dev.yml index 58302ba7..a9224030 100644 --- a/tall/src/main/resources/application-dev.yml +++ b/tall/src/main/resources/application-dev.yml @@ -11,8 +11,8 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource rabbitmq: - host: 192.168.0.99 -# host: 127.0.0.1 +# host: 192.168.0.99 + host: 127.0.0.1 password: guest port: 5672 username: guest diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index ebc544af..b5408a3a 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common diff --git a/tall/src/main/resources/mapper_dao/IInputDocDao.xml b/tall/src/main/resources/mapper_dao/IInputDocDao.xml index 4bee4226..db94d2d2 100644 --- a/tall/src/main/resources/mapper_dao/IInputDocDao.xml +++ b/tall/src/main/resources/mapper_dao/IInputDocDao.xml @@ -1,45 +1,90 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + - SELECT - tptd.project_id AS id, - tptd.`name`, - tptd.description, - tptst.begin_time as beginTime, - tptst.end_time as endTime, - ( tptst.end_time - tptst.begin_time ) / 1000 / 3600 AS cha, - tptd.milestone + tsp.id AS pId, + tsp.`name` AS pName, + tsp.description AS pDescription, + tsp.begin_time as pBeginTime, + tsp.end_time as pEndTime, + (tsp.end_time-tsp.begin_time)/1000/3600 as pDuration, + tptdt.id as task_id, + tptdt.name, + tptdt.description, + tptdt.begin_time_sub_time, + tptdt.end_time_sub_time, + (tptdt.end_time_sub_time-tptdt.begin_time_sub_time)/1000/3600 as duration, + tptdt.cycle, + tptdt.priority, + tptdt.milestone, + tptdt.has_group, + tptdt.times_id FROM - t_pro_task_detail tptd, - t_pro_task_sub_time tptst + t_sys_project tsp + INNER JOIN t_pro_member tpm ON tpm.project_id = tsp.id AND tpm.user_id = #{userId} and tpm.rec_status=0 + + and tpm.project_id=#{param.id} + + LEFT JOIN ( + SELECT + tptd.*, + tptst.begin_time AS begin_time_sub_time, + tptst.end_time AS end_time_sub_time, + tptst.id as times_id + FROM + t_pro_task_detail tptd + LEFT JOIN t_pro_task_sub_time tptst ON tptd.id = tptst.task_detail_id + AND tptst.rec_status = 0 WHERE - tptd.`level` = 2 - AND tptd.rec_status = 0 + tptd.rec_status = 0 + AND tptd.`level` = 2 + AND tptst.begin_time <= #{param.endTime} AND tptst.end_time >= #{param.startTime} AND tptd.executor_role IN ( SELECT tpmr.role_id FROM - t_pro_member_role tpmr + t_pro_member_role tpmr, + t_pro_member tpm WHERE - tpmr.rec_status = 0 - AND tpmr.member_id IN ( SELECT id FROM t_pro_member tpm WHERE tpm.user_id = #{userId} AND tpm.rec_status = 0 ) + tpm.rec_status = 0 + AND tpmr.rec_status = 0 + AND tpm.user_id = #{userId} UNION + SELECT + tpr.id + FROM + t_pro_role tpr + WHERE + tpr.rec_status = 0 + AND tpr.NAME = '全体成员' ) - AND tptst.task_detail_id = tptd.id - and tptst.begin_time<= #{param.startTime} - and tptst.end_time >= #{param.endTime} - - and tptd.project_id=#{param.id} + ) tptdt ON tptdt.project_id = tsp.id + WHERE + tsp.rec_status = 0 + AND tsp.begin_time <= #{param.endTime} AND tsp.end_time >= #{param.startTime} + + and tsp.id =#{param.id} \ No newline at end of file