Procházet zdrojové kódy

任务调度调整

785834757 před 2 roky
rodič
revize
1a3b151c86
22 změnil soubory, kde provedl 678 přidání a 14 odebrání
  1. 2 0
      src/main/java/com/ydtech/modules/admin/service/SysUserLinkDeptInternalAgentService.java
  2. 7 0
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  3. 12 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  4. 18 0
      src/main/java/com/ydtech/modules/task/constants/TaskOperator.java
  5. 103 9
      src/main/java/com/ydtech/modules/task/controller/TaskController.java
  6. 65 0
      src/main/java/com/ydtech/modules/task/controller/TaskProjectController.java
  7. 3 0
      src/main/java/com/ydtech/modules/task/dao/TaskPersonChargeMapper.java
  8. 4 0
      src/main/java/com/ydtech/modules/task/dao/TaskTaskMapper.java
  9. 2 0
      src/main/java/com/ydtech/modules/task/dao/TaskTrajectoryMapper.java
  10. 9 0
      src/main/java/com/ydtech/modules/task/entity/po/TaskPersonCharge.java
  11. 39 2
      src/main/java/com/ydtech/modules/task/entity/po/TaskTask.java
  12. 14 2
      src/main/java/com/ydtech/modules/task/entity/po/TaskTrajectory.java
  13. 26 0
      src/main/java/com/ydtech/modules/task/entity/vo/AddTaskInfoVo.java
  14. 26 0
      src/main/java/com/ydtech/modules/task/entity/vo/AddTaskVo.java
  15. 19 0
      src/main/java/com/ydtech/modules/task/entity/vo/AssignTaskVo.java
  16. 27 0
      src/main/java/com/ydtech/modules/task/entity/vo/BackLineUserVo.java
  17. 45 0
      src/main/java/com/ydtech/modules/task/service/TaskPersonChargeService.java
  18. 5 1
      src/main/java/com/ydtech/modules/task/service/TaskProjectService.java
  19. 26 0
      src/main/java/com/ydtech/modules/task/service/TaskTaskService.java
  20. 132 0
      src/main/java/com/ydtech/modules/task/service/impl/TaskPersonChargeServiceImpl.java
  21. 67 0
      src/main/java/com/ydtech/modules/task/service/impl/TaskTaskServiceImpl.java
  22. 27 0
      src/main/resources/mapper/modules/task/TaskTaskMapper.xml

+ 2 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserLinkDeptInternalAgentService.java

@@ -60,4 +60,6 @@ public interface SysUserLinkDeptInternalAgentService extends IService<SysUserLin
      *  @Description: 查询后线人员以及回显数据
      */
     BasePageResult<SysUserBaseVO> findUserListByPage(SysUserDto sysUserDto);
+
+
 }

+ 7 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -178,6 +178,13 @@ public interface SysUserService extends IService<SysUser> {
      *  @Description:  通过部门id查询团队长用户的id
      */
     String findTDZUserIdByDeptId(String deptId);
+
+    /**
+     * 获取多条用户数据
+     * @param userIds   用户idList
+     * @return
+     */
+    List<SysUser> getByIds(List<String> userIds);
 }
 
 

+ 12 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -1408,6 +1408,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public String findTDZUserIdByDeptId(String deptId) {
         return sysUserMapper.findTDZUserIdByDeptId(deptId);
     }
+
+    /**
+     * 获取多条用户数据
+     * @param userIds   用户idList
+     * @return
+     */
+    @Override
+    public List<SysUser> getByIds(List<String> userIds) {
+        LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        sysUserLambdaQueryWrapper.in(SysUser::getId,userIds);
+        return sysUserMapper.selectList(sysUserLambdaQueryWrapper);
+    }
 }
 
 

+ 18 - 0
src/main/java/com/ydtech/modules/task/constants/TaskOperator.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.task.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 任务操作
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskOperator {
+
+    OPERATOR_1(1, "指派"),
+    OPERATOR_2(2, "移除指派");
+
+    private Integer code;
+    private String desc;
+}

+ 103 - 9
src/main/java/com/ydtech/modules/task/controller/TaskController.java

@@ -1,27 +1,55 @@
 package com.ydtech.modules.task.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.SysDeptInternalAgent;
+import com.ydtech.modules.admin.model.po.SysUserLinkDeptInternalAgent;
+import com.ydtech.modules.admin.service.SysDeptInternalAgentService;
+import com.ydtech.modules.admin.service.SysUserLinkDeptInternalAgentService;
+import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.base.controller.BaseController;
-import com.ydtech.modules.ser.model.SerAnnualAuditOrder;
+import com.ydtech.modules.task.entity.po.TaskPersonCharge;
 import com.ydtech.modules.task.entity.po.TaskProject;
+import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.vo.AddTaskVo;
+import com.ydtech.modules.task.entity.vo.AssignTaskVo;
+import com.ydtech.modules.task.entity.vo.BackLineUserVo;
 import com.ydtech.modules.task.entity.vo.TaskProjectVo;
+import com.ydtech.modules.task.service.TaskPersonChargeService;
 import com.ydtech.modules.task.service.TaskProjectService;
+import com.ydtech.modules.task.service.TaskTaskService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 @Api(tags = "任务controller")
 @RestController
 @RequestMapping("/task/task")
 public class TaskController extends BaseController {
 
-    @Resource
-    private TaskProjectService taskProjectService;
+    @Autowired
+    TaskTaskService taskTaskService;
+
+    @Autowired
+    TaskPersonChargeService taskPersonChargeService;
+
+    @Autowired
+    TaskProjectService taskProjectService;
+
+    @Autowired
+    SysUserService sysUserService;
+
+    @Autowired
+    SysDeptInternalAgentService sysDeptInternalAgentService;
+
+    @Autowired
+    SysUserLinkDeptInternalAgentService sysUserLinkDeptInternalAgentService;
 
     @ApiOperation("新增任务项目")
     @PostMapping("/addProject")
@@ -46,4 +74,70 @@ public class TaskController extends BaseController {
     public HttpResult selectProject(@RequestBody TaskProjectVo taskProjectVo){
         return HttpResult.ok("",taskProjectService.selectProject(taskProjectVo));
     }
-}
+
+
+    @GetMapping("/getBackLineUser")
+    @ApiOperation("获取后线用户")
+    public HttpResult<Object> getBackLineUser(){
+        //获取用户信息
+        SysUserLinkDeptInternalAgent sysUserLinkDeptInternalAgent = sysUserLinkDeptInternalAgentService.getByUserId(getUserId());
+        //获取部门
+        SysDeptInternalAgent sysDeptInternalAgent = sysDeptInternalAgentService.getById(sysUserLinkDeptInternalAgent.getSysDeptInternalAgentId());
+        List<BackLineUserVo> backLineUser = taskTaskService.getBackLineUser(sysDeptInternalAgent.getId());
+//        List<SysDeptInternalAgent> tree = sysDeptInternalAgentService.findTree(null, null);
+        return HttpResult.ok(backLineUser);
+    }
+
+    @GetMapping("/getTaskInfo")
+    @ApiOperation("获取任务详情")
+    public HttpResult<Object> getTaskInfo(){
+        return null;
+    }
+
+    @GetMapping("/getTaskTree")
+    @ApiOperation("获取任务树结构")
+    public HttpResult<Object> getTaskTree(String projectId,String userId){
+        List<TaskTask> taskTree = taskTaskService.getTaskTree(projectId,userId);
+        return HttpResult.ok(taskTree);
+    }
+
+    @PostMapping("/addTask")
+    @ApiOperation("添加任务")
+    public HttpResult<Object> addTask(@RequestBody AddTaskVo addTaskVo){
+        if(taskProjectService.getById(addTaskVo.getProjectId()) == null){
+            throw new SystemException("项目id填写错误");
+        }
+        TaskTask task = taskTaskService.getById(addTaskVo.getTaskId());
+        if(!addTaskVo.getTaskId().equals("0") && task == null){
+            throw new SystemException("任务id填写错误");
+        }
+        return taskTaskService.addTask(addTaskVo,getUserName()) ? HttpResult.ok("添加任务成功") : HttpResult.error("添加任务失败");
+    }
+
+    @PostMapping("/assignTask")
+    @ApiOperation("分配任务")
+    public HttpResult<Object> assignTask(@RequestBody AssignTaskVo  assignTaskVo){
+        List<TaskPersonCharge> taskPersonChargeList = taskPersonChargeService.getTaskPersonChargeList(assignTaskVo.getTaskId());
+        JSONObject diffTaskPersonCharge = taskPersonChargeService.getDiffTaskPersonCharge(assignTaskVo, taskPersonChargeList);
+        List<String> addUserArr = (List<String>) diffTaskPersonCharge.get("userIdsToAdd");
+        List<String> delUserArr = (List<String>) diffTaskPersonCharge.get("userIdsToDelete");
+        List<SysUser> addUsers = new ArrayList<>();
+        List<SysUser> delUsers = new ArrayList<>();
+        if(!addUserArr.isEmpty()) {
+            addUsers = sysUserService.getByIds(addUserArr);
+        }
+        if(!delUserArr.isEmpty()) {
+            delUsers = sysUserService.getByIds(delUserArr);
+        }
+        return taskPersonChargeService.dealPersonCharge(assignTaskVo.getTaskId(), addUsers, delUsers) ?
+                HttpResult.ok("分配任务成功") :
+                HttpResult.error("分配任务失败");
+    }
+
+    @PostMapping("/changeTaskStatus")
+    @ApiOperation("更改任务状态")
+    public HttpResult<Object> changeTaskStatus(){
+        return null;
+    }
+
+ }

+ 65 - 0
src/main/java/com/ydtech/modules/task/controller/TaskProjectController.java

@@ -0,0 +1,65 @@
+package com.ydtech.modules.task.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.SysDeptInternalAgent;
+import com.ydtech.modules.admin.model.po.SysUserLinkDeptInternalAgent;
+import com.ydtech.modules.admin.service.SysDeptInternalAgentService;
+import com.ydtech.modules.admin.service.SysUserLinkDeptInternalAgentService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.task.entity.po.TaskPersonCharge;
+import com.ydtech.modules.task.entity.po.TaskProject;
+import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.vo.AddTaskVo;
+import com.ydtech.modules.task.entity.vo.AssignTaskVo;
+import com.ydtech.modules.task.entity.vo.BackLineUserVo;
+import com.ydtech.modules.task.entity.vo.TaskProjectVo;
+import com.ydtech.modules.task.service.TaskPersonChargeService;
+import com.ydtech.modules.task.service.TaskProjectService;
+import com.ydtech.modules.task.service.TaskTaskService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Api(tags = "任务项目controller")
+@RestController
+@RequestMapping("/task/project")
+public class TaskProjectController extends BaseController {
+
+    @Autowired
+    TaskProjectService taskProjectService;
+
+
+    @ApiOperation("新增任务项目")
+    @PostMapping("/addProject")
+    public HttpResult addProject(@RequestBody TaskProject taskProject){
+        return taskProjectService.addProject(taskProject);
+    }
+
+    @ApiOperation("修改任务项目")
+    @PostMapping("/updateProject")
+    public HttpResult updateProject(@RequestBody TaskProject taskProject){
+        return taskProjectService.updateProject(taskProject);
+    }
+
+    @ApiOperation("删除任务项目")
+    @PostMapping("/removeProject")
+    public HttpResult removeProject(@RequestBody TaskProject taskProject){
+        return taskProjectService.removeProject(taskProject);
+    }
+
+    @ApiOperation("查询任务项目列表")
+    @PostMapping("/selectProject")
+    public HttpResult selectProject(@RequestBody TaskProjectVo taskProjectVo){
+        return HttpResult.ok("",taskProjectService.selectProject(taskProjectVo));
+    }
+
+
+ }

+ 3 - 0
src/main/java/com/ydtech/modules/task/dao/TaskPersonChargeMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.task.entity.po.TaskFile;
 import com.ydtech.modules.task.entity.po.TaskPersonCharge;
 
+import java.util.List;
+
 /**
  * @author Administrator
  * @description 针对表【task_person_charge】的数据库操作Mapper
@@ -12,4 +14,5 @@ import com.ydtech.modules.task.entity.po.TaskPersonCharge;
  */
 public interface TaskPersonChargeMapper extends BaseMapper<TaskPersonCharge> {
 
+
 }

+ 4 - 0
src/main/java/com/ydtech/modules/task/dao/TaskTaskMapper.java

@@ -3,6 +3,9 @@ package com.ydtech.modules.task.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.task.entity.po.TaskProject;
 import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.vo.BackLineUserVo;
+
+import java.util.List;
 
 /**
  * @author Administrator
@@ -12,4 +15,5 @@ import com.ydtech.modules.task.entity.po.TaskTask;
  */
 public interface TaskTaskMapper extends BaseMapper<TaskTask> {
 
+    public List<BackLineUserVo> getBackLineUser(String deptId);
 }

+ 2 - 0
src/main/java/com/ydtech/modules/task/dao/TaskTrajectoryMapper.java

@@ -12,4 +12,6 @@ import com.ydtech.modules.task.entity.po.TaskTrajectory;
  */
 public interface TaskTrajectoryMapper extends BaseMapper<TaskTrajectory> {
 
+
+
 }

+ 9 - 0
src/main/java/com/ydtech/modules/task/entity/po/TaskPersonCharge.java

@@ -3,9 +3,13 @@ package com.ydtech.modules.task.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
 @TableName(value = "task_person_charge")
 @Data
 @ApiModel("任务指派表")
@@ -24,4 +28,9 @@ public class TaskPersonCharge {
 
     @TableField(value = "create_time")
     private String createTime;
+
+    public TaskPersonCharge() {
+        this.id = IdGenerate.nextId();
+        this.createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
 }

+ 39 - 2
src/main/java/com/ydtech/modules/task/entity/po/TaskTask.java

@@ -3,9 +3,16 @@ package com.ydtech.modules.task.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
 @TableName(value = "task_task")
 @Data
 @ApiModel("任务")
@@ -14,28 +21,41 @@ public class TaskTask {
     @TableId(value = "id")
     private String id;
 
-    @TableField(value = "parentId")
+    @TableField(value = "parent_id")
     private String parentId;
 
+    @NotNull(message = "项目id不能为空")
     @TableField(value = "project_id")
+    @ApiModelProperty("项目id")
     private String projectId;
 
+    @NotNull(message = "任务名称不能为空")
     @TableField(value = "task_name")
+    @ApiModelProperty("任务名称")
     private String taskName;
 
     @TableField(value = "task_desc")
+    @ApiModelProperty("任务描述")
     private String taskDesc;
 
+    @NotNull(message = "任务开始时间不能为空")
     @TableField(value = "task_start_time")
+    @ApiModelProperty("任务开始时间")
     private String taskStartTime;
 
+    @NotNull(message = "任务结束时间不能为空")
     @TableField(value = "task_end_time")
-    private String taskEmdTo;
+    @ApiModelProperty("任务结束时间")
+    private String taskEndTime;
 
+    @NotNull(message = "任务状态不能为空")
     @TableField(value = "task_status")
+    @ApiModelProperty("任务状态")
     private String taskStatus;
 
+    @NotNull(message = "任务优先级不能为空")
     @TableField(value = "task_first")
+    @ApiModelProperty("任务优先级")
     private String taskFirst;
 
     @TableField(value = "create_time")
@@ -43,4 +63,21 @@ public class TaskTask {
 
     @TableField(value = "creator")
     private String creator;
+
+    @TableField(exist = false)
+    private List<TaskTask> childrenList;
+
+    @ApiModelProperty("指派人对象")
+    @TableField(exist = false)
+    private List<TaskPersonCharge>  personCharges;
+
+    public TaskTask(){
+
+    }
+
+    public TaskTask(String creator){
+        this.id = IdGenerate.nextId();
+        this.createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        this.creator = creator;
+    }
 }

+ 14 - 2
src/main/java/com/ydtech/modules/task/entity/po/TaskTrajectory.java

@@ -3,9 +3,13 @@ package com.ydtech.modules.task.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
 @TableName(value = "task_trajectory")
 @Data
 @ApiModel("任务轨迹表")
@@ -14,15 +18,23 @@ public class TaskTrajectory {
     @TableId(value = "id")
     private String id;
 
-    @TableField(value = "taks_id")
+    @TableField(value = "task_id")
     private String taskId;
 
     @TableField(value = "task_operator")
-    private String taskOperator;
+    private Integer taskOperator;
+
+    @TableField(value = "readme")
+    private String readme;
 
     @TableField(value = "task_status")
     private Integer taskStatus;
 
     @TableField(value = "create_time")
     private String createTime;
+
+    public TaskTrajectory() {
+        this.id = IdGenerate.nextId();
+        this.createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
 }

+ 26 - 0
src/main/java/com/ydtech/modules/task/entity/vo/AddTaskInfoVo.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.task.entity.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 添加任务详情Vo
+ */
+@Data
+public class AddTaskInfoVo {
+    @ApiModelProperty("任务名称")
+    private String taskName;
+
+    @ApiModelProperty("任务描述")
+    private String taskDesc;
+
+    @ApiModelProperty("任务开始时间")
+    private String taskStartTime;
+
+    @ApiModelProperty("任务结束时间")
+    private String taskEndTime;
+
+    @ApiModelProperty("任务优先级")
+    private String taskFirst;
+}

+ 26 - 0
src/main/java/com/ydtech/modules/task/entity/vo/AddTaskVo.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.task.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 添加任务vo
+ */
+@Data
+public class AddTaskVo {
+
+    @ApiModelProperty("任务id")
+    private String taskId;
+
+    @ApiModelProperty("项目id")
+    private String projectId;
+
+    @ApiModelProperty("任务详情")
+    private List<AddTaskInfoVo> addTaskVoList;
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/task/entity/vo/AssignTaskVo.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.task.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 分配任务Vo
+ */
+@Data
+public class AssignTaskVo {
+
+    @ApiModelProperty("任务id")
+    private String taskId;
+
+    @ApiModelProperty("用户id")
+    private List<String> userId;
+}

+ 27 - 0
src/main/java/com/ydtech/modules/task/entity/vo/BackLineUserVo.java

@@ -0,0 +1,27 @@
+package com.ydtech.modules.task.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+/**
+ * 后线人员vo
+ */
+@Data
+public class BackLineUserVo {
+
+    @ApiModelProperty("用户Id")
+    private String userId;
+
+    @ApiModelProperty("内部部门id")
+    private String sysDeptInternalAgentId;
+
+    @ApiModelProperty("机构名称")
+    private String deptName;
+
+    @ApiModelProperty("机构类型")
+    private String comLevel;
+
+    @ApiModelProperty("用户名称")
+    private String userName;
+}

+ 45 - 0
src/main/java/com/ydtech/modules/task/service/TaskPersonChargeService.java

@@ -1,7 +1,52 @@
 package com.ydtech.modules.task.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.task.entity.po.TaskPersonCharge;
+import com.ydtech.modules.task.entity.vo.AssignTaskVo;
+
+import java.util.List;
 
 public interface TaskPersonChargeService extends IService<TaskPersonCharge> {
+
+    /**
+     * 获取任务指派表
+     * @param taskId
+     * @return
+     */
+    List<TaskPersonCharge> getTaskPersonChargeList(String taskId);
+
+    /**
+     * 获取差异数据 任务指派表 需要删除的  需要添加的人员
+     * @return
+     */
+    JSONObject getDiffTaskPersonCharge(AssignTaskVo assignTaskVo, List<TaskPersonCharge> taskPersonChargeList);
+
+    /**
+     * 处置指派的人员
+     * @param taskId        任务id
+     * @param addUsers      需要添加的人员list
+     * @param delUsers      需要删除的人员list
+     * @return
+     */
+    boolean dealPersonCharge(String taskId,List<SysUser> addUsers,List<SysUser>  delUsers);
+
+    /**
+     * 添加指派人员
+     * @param taskId            任务id
+     * @param personChargeId    指派人员id
+     * @param personCharge      指派人员
+     * @return
+     */
+    boolean addPersonCharge(String taskId,String personChargeId,String personCharge,Integer taskStatus);
+
+    /**
+     * 删除指派人员
+     * @param taskId            任务id
+     * @param personChargeId    指派人员id
+     * @return
+     */
+    boolean deletePersonCharge(String taskId,String personChargeId,String personCharge,Integer taskStatus);
 }

+ 5 - 1
src/main/java/com/ydtech/modules/task/service/TaskProjectService.java

@@ -5,7 +5,11 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.task.entity.po.TaskProject;
 import com.ydtech.modules.task.entity.vo.TaskProjectVo;
 
-public interface TaskProjectService {
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.task.entity.po.TaskProject;
+import com.ydtech.modules.task.entity.po.TaskTask;
+
+public interface TaskProjectService extends IService<TaskProject> {
     HttpResult addProject(TaskProject taskProject);
 
     HttpResult updateProject(TaskProject taskProject);

+ 26 - 0
src/main/java/com/ydtech/modules/task/service/TaskTaskService.java

@@ -2,6 +2,32 @@ package com.ydtech.modules.task.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.vo.AddTaskVo;
+import com.ydtech.modules.task.entity.vo.BackLineUserVo;
+
+import java.util.List;
 
 public interface TaskTaskService extends IService<TaskTask> {
+
+    /**
+     * 添加任务
+     * @param addTaskVo     添加任务Vo
+     * @param creator       创建人
+     * @return
+     */
+    public boolean addTask(AddTaskVo addTaskVo,String creator);
+
+    /**
+     * 获取任务树
+     * @param projectId     项目id
+     * @return
+     */
+    public List<TaskTask> getTaskTree(String projectId,String creator);
+
+    /**
+     * 获取后线人员列表
+     * @param deptId    部门id
+     * @return
+     */
+    public List<BackLineUserVo> getBackLineUser(String deptId);
 }

+ 132 - 0
src/main/java/com/ydtech/modules/task/service/impl/TaskPersonChargeServiceImpl.java

@@ -1,10 +1,27 @@
 package com.ydtech.modules.task.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.task.constants.TaskOperator;
+import com.ydtech.modules.task.constants.TaskStatus;
 import com.ydtech.modules.task.dao.TaskPersonChargeMapper;
 import com.ydtech.modules.task.entity.po.TaskPersonCharge;
+import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.po.TaskTrajectory;
+import com.ydtech.modules.task.entity.vo.AssignTaskVo;
 import com.ydtech.modules.task.service.TaskPersonChargeService;
+import com.ydtech.modules.task.service.TaskTaskService;
+import com.ydtech.modules.task.service.TaskTrajectoryService;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -15,6 +32,121 @@ import org.springframework.stereotype.Service;
 public class TaskPersonChargeServiceImpl extends ServiceImpl<TaskPersonChargeMapper, TaskPersonCharge>
         implements TaskPersonChargeService {
 
+    @Autowired
+    private TaskTrajectoryService taskTrajectoryService;
+
+    @Autowired
+    private TaskTaskService taskTaskService;
+
+    /**
+     * 获取任务指派表
+     * @param taskId
+     * @return
+     */
+    @Override
+    public List<TaskPersonCharge> getTaskPersonChargeList(String taskId) {
+        LambdaQueryWrapper<TaskPersonCharge> taskPersonChargeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        taskPersonChargeLambdaQueryWrapper.eq(TaskPersonCharge::getTaskId, taskId);
+        return this.list(taskPersonChargeLambdaQueryWrapper);
+    }
+
+    /**
+     * 对比差异数据
+     * @param assignTaskVo
+     * @param taskPersonChargeList
+     * @return
+     */
+    @Override
+    public JSONObject getDiffTaskPersonCharge(AssignTaskVo assignTaskVo, List<TaskPersonCharge> taskPersonChargeList) {
+        List<String> assignTaskVoUserId = assignTaskVo.getUserId();
+        List<String> taskPersonChargeListUserId = taskPersonChargeList.stream()
+                .map(TaskPersonCharge::getPersonChargeId)
+                .collect(Collectors.toList());
+
+        List<String> userIdsToDelete = taskPersonChargeListUserId.stream()
+                .filter(userId -> !assignTaskVoUserId.contains(userId))
+                .collect(Collectors.toList());
+
+        List<String> userIdsToAdd = assignTaskVoUserId.stream()
+                .filter(userId -> !taskPersonChargeListUserId.contains(userId))
+                .collect(Collectors.toList());
+
+        JSONObject diffObject = new JSONObject();
+        diffObject.put("userIdsToDelete", userIdsToDelete);
+        diffObject.put("userIdsToAdd", userIdsToAdd);
+        return diffObject;
+    }
+
+    /**
+     * 处置指派的人员
+     * @param taskId        任务id
+     * @param addUsers      需要添加的人员list
+     * @param delUsers      需要删除的人员list
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean dealPersonCharge(String taskId, List<SysUser> addUsers, List<SysUser> delUsers) {
+        TaskTask taskTask = taskTaskService.getById(taskId);
+
+        addUsers.forEach(item->{
+            this.addPersonCharge(taskId,item.getId(),item.getName(),Integer.parseInt(taskTask.getTaskStatus()));
+        });
+        delUsers.forEach(item->{
+            this.deletePersonCharge(taskId,item.getId(),item.getName(),Integer.parseInt(taskTask.getTaskStatus()));
+        });
+        return true;
+    }
+
+    /**
+     * 添加指派人员
+     * @param taskId            任务id
+     * @param personChargeId    指派人员id
+     * @param personCharge      指派人员
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean addPersonCharge(String taskId,String personChargeId,String personCharge,Integer taskStatus){
+        TaskPersonCharge taskPersonCharge = new TaskPersonCharge();
+        taskPersonCharge.setTaskId(taskId);
+        taskPersonCharge.setPersonChargeId(personChargeId);
+        taskPersonCharge.setPersonCharge(personCharge);
+        //添加指派人员
+        baseMapper.insert(taskPersonCharge);
+        //添加轨迹
+        TaskTrajectory taskTrajectory = new TaskTrajectory();
+        taskTrajectory.setTaskId(taskId);
+        taskTrajectory.setTaskOperator(TaskOperator.OPERATOR_1.getCode());
+        taskTrajectory.setReadme(personChargeId+"(" + personCharge+")");
+        taskTrajectory.setTaskStatus(taskStatus);
+        taskTrajectoryService.save(taskTrajectory);
+        return true;
+    }
+
+    /**
+     * 删除指派人员
+     * @param taskId            任务id
+     * @param personChargeId    指派人员id
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean deletePersonCharge(String taskId, String personChargeId,String personCharge,Integer taskStatus) {
+        LambdaQueryWrapper<TaskPersonCharge> taskPersonChargeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        taskPersonChargeLambdaQueryWrapper.eq(TaskPersonCharge::getTaskId, taskId);
+        taskPersonChargeLambdaQueryWrapper.eq(TaskPersonCharge::getPersonChargeId, personChargeId);
+        //删除指派人员
+        baseMapper.delete(taskPersonChargeLambdaQueryWrapper);
+        //添加轨迹
+        TaskTrajectory taskTrajectory = new TaskTrajectory();
+        taskTrajectory.setTaskId(taskId);
+        taskTrajectory.setTaskOperator(TaskOperator.OPERATOR_2.getCode());
+        taskTrajectory.setReadme(personChargeId+"(" + personCharge+")");
+        taskTrajectory.setTaskStatus(taskStatus);
+        taskTrajectoryService.save(taskTrajectory);
+        return true;
+    }
 }
 
 

+ 67 - 0
src/main/java/com/ydtech/modules/task/service/impl/TaskTaskServiceImpl.java

@@ -1,14 +1,24 @@
 package com.ydtech.modules.task.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.task.dao.TaskFileMapper;
 import com.ydtech.modules.task.dao.TaskTaskMapper;
 import com.ydtech.modules.task.entity.po.TaskFile;
 import com.ydtech.modules.task.entity.po.TaskTask;
+import com.ydtech.modules.task.entity.vo.AddTaskVo;
+import com.ydtech.modules.task.entity.vo.BackLineUserVo;
 import com.ydtech.modules.task.service.TaskFileService;
 import com.ydtech.modules.task.service.TaskTaskService;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * @author Administrator
  * @description 针对表【task_file】的数据库操作Service实现
@@ -18,6 +28,63 @@ import org.springframework.stereotype.Service;
 public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
         implements TaskTaskService {
 
+    /**
+     * 添加任务
+     * @param addTaskVo     添加任务Vo
+     * @param creator       创建人
+     * @return
+     */
+    @Override
+    public boolean addTask(AddTaskVo addTaskVo,String creator) {
+        List<TaskTask> tasks = new ArrayList<>();
+        addTaskVo.getAddTaskVoList().forEach(item->{
+            TaskTask task = new TaskTask(creator);
+            BeanUtils.copyProperties(item,task);
+            task.setProjectId(addTaskVo.getProjectId());
+            task.setParentId(addTaskVo.getTaskId());
+            tasks.add(task);
+        });
+        if(this.saveBatch(tasks)){
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 获取任务树
+     * @param projectId     项目id
+     * @return
+     */
+    @Override
+    public List<TaskTask> getTaskTree(String projectId,String creator) {
+        LambdaQueryWrapper<TaskTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TaskTask::getProjectId, projectId);
+        queryWrapper.eq(TaskTask::getCreator,creator);
+        List<TaskTask> list = this.list(queryWrapper);
+        list = buildTree(list,"0");
+        return list;
+    }
+
+    /**
+     * 获取后线人员列表
+     * @param deptId    部门id
+     * @return
+     */
+    @Override
+    public List<BackLineUserVo> getBackLineUser(String deptId) {
+        return baseMapper.getBackLineUser(deptId);
+    }
+
+    List<TaskTask> buildTree(List<TaskTask> taskList, String parentId) {
+        List<TaskTask> tree = new ArrayList<>();
+        for (TaskTask task : taskList) {
+            if (Objects.equals(task.getParentId(), parentId)) {
+                task.setChildrenList(buildTree(taskList, task.getId()));
+                tree.add(task);
+            }
+        }
+        return tree;
+    }
 }
 
 

+ 27 - 0
src/main/resources/mapper/modules/task/TaskTaskMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.task.dao.TaskTaskMapper">
+
+    <select id="getBackLineUser" resultType="com.ydtech.modules.task.entity.vo.BackLineUserVo">
+        SELECT
+            suldi.* ,
+            sdia.name as dept_name,
+            sdia.comlevel,
+            su.name as user_name
+        FROM
+            sys_user_link_dept_internal_agent suldi
+                LEFT JOIN sys_dept_internal_agent sdia ON suldi.sys_dept_internal_agent_id = sdia.id
+                left join sys_user su on  suldi.user_id = su.id
+        WHERE
+                sys_dept_internal_agent_id IN (
+                SELECT
+                    id
+                FROM
+                    sys_dept_internal_agent
+                WHERE
+                    parent_ids LIKE '%${deptId}%')
+          AND
+            su.status = 1
+    </select>
+
+</mapper>