Pārlūkot izejas kodu

任务调度 功能

785834757 2 gadi atpakaļ
vecāks
revīzija
0e5289b9e8

+ 23 - 7
src/main/java/com/ydtech/modules/task/controller/TaskController.java

@@ -51,9 +51,9 @@ public class TaskController extends BaseController {
     @Autowired
     SysUserLinkDeptInternalAgentService sysUserLinkDeptInternalAgentService;
 
-    @GetMapping("/getBackLineUser")
+    @GetMapping("/getBehindUser")
     @ApiOperation("获取后线用户")
-    public HttpResult<Object> getBackLineUser(){
+    public HttpResult<Object> getBehindUser(){
         //获取用户信息
         SysUserLinkDeptInternalAgent sysUserLinkDeptInternalAgent = sysUserLinkDeptInternalAgentService.getByUserId(getUserId());
         if(Objects.isNull(sysUserLinkDeptInternalAgent)){
@@ -82,11 +82,20 @@ public class TaskController extends BaseController {
     @PostMapping("/getTaskPage")
     @ApiOperation("获取任务列表")
     public HttpResult<Object> getTaskList(@RequestBody TaskListQueryVo taskListQueryVo){
+        taskListQueryVo.setUserId(getUserId());
         Page<T> page = buildPageRequest(taskListQueryVo.getPageDto());
-        Page<TaskTask> taskList = taskTaskService.getTaskPage(page, getUserId());
+        Page<TaskListVo> taskList = taskTaskService.getTaskPage(page, taskListQueryVo);
         return HttpResult.ok(taskList);
     }
 
+    @PostMapping("/getTaskChildren")
+    @ApiOperation("获取子任务列表")
+    public HttpResult<Object> getTaskChildren(@RequestBody TaskListQueryVo taskListQueryVo){
+        taskListQueryVo.setUserId(getUserId());
+        List<TaskListVo> taskChildren = taskTaskService.getTaskChildren(taskListQueryVo);
+        return HttpResult.ok(taskChildren);
+    }
+
     @PostMapping("/addTask")
     @ApiOperation("添加任务")
     public HttpResult<Object> addTask(@RequestBody AddTaskVo addTaskVo){
@@ -102,15 +111,21 @@ public class TaskController extends BaseController {
 
     @PostMapping("/delTask")
     @ApiOperation("删除任务")
-    public HttpResult<Object> delTask(String taskId){
-        if(taskId == null){
+    public HttpResult<Object> delTask(@RequestBody JSONObject params){
+        if(!params.containsKey("id")){
             throw new SystemException("任务id错误");
         }
+        String taskId = params.getString("id");
         TaskTask task = taskTaskService.getById(taskId);
         if(task == null){
             throw new SystemException("任务不存在");
         }
-        return taskTaskService.removeById(taskId) ? HttpResult.ok("任务删除成功") : HttpResult.error("任务删除失败");
+        //判断是否有子订单
+        List<TaskTask> byParentId = taskTaskService.getByParentId(taskId);
+        if(!byParentId.isEmpty()){
+            throw new SystemException("该任务已经存在子任务,请先删除子任务!");
+        }
+        return taskTaskService.removeById(params.getString("id")) ? HttpResult.ok("任务删除成功") : HttpResult.error("任务删除失败");
     }
 
     @PostMapping("/editTask")
@@ -141,7 +156,8 @@ public class TaskController extends BaseController {
 
     @PostMapping("/changeTaskStatus")
     @ApiOperation("更改任务状态")
-    public HttpResult<Object> changeTaskStatus(){
+    public HttpResult<Object> changeTaskStatus(@RequestBody TaskStatusChangeVo taskStatusChangeVo){
+
         return null;
     }
 

+ 42 - 0
src/main/java/com/ydtech/modules/task/controller/TaskFileController.java

@@ -5,6 +5,7 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.task.entity.po.TaskFile;
 import com.ydtech.modules.task.service.TaskFileService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -17,6 +18,8 @@ import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 
 @Api(tags = "任务文件controller")
 @RestController
@@ -26,6 +29,9 @@ public class TaskFileController {
     @Value("${upload.file.path}")
     private String uploadPath;
 
+    @Value("${upload.file.url}")
+    private String uploadUrl;
+
     private String taskPath = "/task/";
 
     @Autowired
@@ -33,6 +39,42 @@ public class TaskFileController {
 
 
     @PostMapping("/upload")
+    @ApiOperation("上传文件")
+    public HttpResult<Object> upload(@RequestParam("file") MultipartFile file){
+        if(file.isEmpty()){
+            return HttpResult.error("文件为空,请重新上传");
+        }
+
+        try{
+            String fileName = file.getOriginalFilename();
+            String[] split = file.getOriginalFilename().split("\\.");
+            String fileType = split[split.length-1];
+            // 获取文件的字节
+            byte[] bytes = file.getBytes();
+            // 指定文件保存路径,这里假设保存在项目的uploads目录下
+            String destinationFilePath = uploadPath + taskPath + String.valueOf(System.currentTimeMillis()) + "." + fileType;
+
+            // 保存文件到服务器的逻辑,例如使用java.nio.file包的Files类
+            File dir = new File(uploadPath + taskPath);
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+            file.transferTo(new File(destinationFilePath));
+            TaskFile taskFile = new TaskFile();
+            taskFile.setFileName(fileName);
+            taskFile.setFileType(fileType);
+            taskFile.setFileUrl(uploadUrl + taskPath + String.valueOf(System.currentTimeMillis()) + "." + fileType);
+            taskFile.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            return HttpResult.ok(taskFile);
+        }catch (Exception e){
+            e.printStackTrace();
+            return HttpResult.error("文件上传失败");
+        }
+
+    }
+
+    @PostMapping("/uploadAnnex")
+    @ApiOperation("上传文件附件")
     public HttpResult<Object> upload(@RequestParam("file") MultipartFile file,@RequestParam("taskId") String taskId){
         if(file.isEmpty()){
             return HttpResult.error("文件为空,请重新上传");

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

@@ -1,9 +1,13 @@
 package com.ydtech.modules.task.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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 com.ydtech.modules.task.entity.vo.TaskListQueryVo;
+import com.ydtech.modules.task.entity.vo.TaskListVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,4 +20,8 @@ import java.util.List;
 public interface TaskTaskMapper extends BaseMapper<TaskTask> {
 
     public List<BackLineUserVo> getBackLineUser(String deptId);
+
+    List<TaskListVo> getTaskChildren(@Param("params") TaskListQueryVo taskListQueryVo);
+
+    public Page<TaskListVo> getTaskPage(Page page,@Param("params") TaskListQueryVo taskListQueryVo);
 }

+ 3 - 0
src/main/java/com/ydtech/modules/task/entity/po/TaskTask.java

@@ -24,6 +24,9 @@ public class TaskTask {
     @TableField(value = "parent_id")
     private String parentId;
 
+    @TableField(value = "level")
+    private Integer level;
+
     @NotNull(message = "项目id不能为空")
     @TableField(value = "project_id")
     @ApiModelProperty("项目id")

+ 5 - 0
src/main/java/com/ydtech/modules/task/entity/vo/TaskListQueryVo.java

@@ -10,4 +10,9 @@ public class TaskListQueryVo extends PageRequest {
     @ApiModelProperty("用户id")
     private String userId;
 
+    @ApiModelProperty("是否指派")
+    private boolean isAssign;
+
+    @ApiModelProperty("parentId")
+    private String parentId;
 }

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

@@ -0,0 +1,26 @@
+package com.ydtech.modules.task.entity.vo;
+
+import com.ydtech.modules.task.entity.po.TaskTask;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+@Data
+public class TaskListVo extends TaskTask {
+
+    @ApiModelProperty("指派人员Id")
+    private String personChargeId;
+
+    @ApiModelProperty("指派人员")
+    private String personCharge;
+
+    @ApiModelProperty("用户机构类型")
+    private Integer comtype;
+
+    @ApiModelProperty("是否创建者")
+    private boolean isCreate;
+
+    @ApiModelProperty("是否指派")
+    private boolean isAssign;
+}

+ 14 - 0
src/main/java/com/ydtech/modules/task/entity/vo/TaskStatusChangeVo.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.task.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class TaskStatusChangeVo {
+
+    @ApiModelProperty("任务")
+    private String taskId;
+
+    @ApiModelProperty("状态")
+    private Integer status;
+}

+ 18 - 2
src/main/java/com/ydtech/modules/task/service/TaskTaskService.java

@@ -5,6 +5,8 @@ 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 com.ydtech.modules.task.entity.vo.TaskListQueryVo;
+import com.ydtech.modules.task.entity.vo.TaskListVo;
 
 import java.util.List;
 
@@ -28,10 +30,17 @@ public interface TaskTaskService extends IService<TaskTask> {
     /**
      * 获取任务列表 分页
      * @param page
-     * @param userId
+     * @param taskListQueryVo
      * @return
      */
-    public Page<TaskTask> getTaskPage(Page page, String userId);
+    public Page<TaskListVo> getTaskPage(Page page, TaskListQueryVo taskListQueryVo);
+
+    /**
+     * 获取子任务列表
+     * @param taskListQueryVo
+     * @return
+     */
+    public List<TaskListVo> getTaskChildren(TaskListQueryVo taskListQueryVo);
 
     /**
      * 获取后线人员列表
@@ -39,4 +48,11 @@ public interface TaskTaskService extends IService<TaskTask> {
      * @return
      */
     public List<BackLineUserVo> getBackLineUser(String deptId);
+
+    /**
+     * 获取子任务
+     * @param id
+     * @return
+     */
+    public List<TaskTask> getByParentId(String id);
 }

+ 38 - 11
src/main/java/com/ydtech/modules/task/service/impl/TaskTaskServiceImpl.java

@@ -8,9 +8,7 @@ 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.AddTaskInfoVo;
-import com.ydtech.modules.task.entity.vo.AddTaskVo;
-import com.ydtech.modules.task.entity.vo.BackLineUserVo;
+import com.ydtech.modules.task.entity.vo.*;
 import com.ydtech.modules.task.service.TaskFileService;
 import com.ydtech.modules.task.service.TaskTaskService;
 import com.ydtech.modules.task.service.TaskTrajectoryService;
@@ -36,6 +34,9 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
     @Autowired
     private TaskTrajectoryService taskTrajectoryService;
 
+    @Autowired
+    private TaskTaskService taskTaskService;
+
     /**
      * 添加任务
      * @param addTaskVo     添加任务Vo
@@ -45,6 +46,13 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
     @Override
     @Transactional
     public boolean addTask(AddTaskVo addTaskVo,String creator) {
+        Integer level;
+        TaskTask taskTask = taskTaskService.getById(addTaskVo.getTaskId());
+        if(!Objects.isNull(taskTask)){
+            level = taskTask.getLevel() + 1;
+        } else {
+            level = 1;
+        }
         List<TaskTask> tasks = new ArrayList<>();
         List<AddTaskInfoVo> addTaskVoList = addTaskVo.getAddTaskVoList();
         addTaskVoList.forEach(item->{
@@ -52,15 +60,14 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
             BeanUtils.copyProperties(item,task);
             task.setProjectId(addTaskVo.getProjectId());
             task.setParentId(addTaskVo.getTaskId());
+            task.setLevel(level);
             tasks.add(task);
         });
 
-        addTaskVoList.forEach(item->{
-
-        });
         if(this.saveBatch(tasks)){
             return true;
         }
+
         return false;
     }
 
@@ -82,17 +89,30 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
     /**
      * 获取任务列表 分页
      * @param page
-     * @param userId
+     * @param taskListQueryVo
      * @return
      */
     @Override
-    public Page<TaskTask> getTaskPage(Page page, String userId) {
-        LambdaQueryWrapper<TaskTask> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(TaskTask::getCreator,userId);
-        Page<TaskTask> list = this.page(page,queryWrapper);
+    public Page<TaskListVo> getTaskPage(Page page, TaskListQueryVo taskListQueryVo) {
+        Page<TaskListVo> list = baseMapper.getTaskPage(page,taskListQueryVo);
+        //添加标志 是否是创建者  是否是指派人员
+        List<TaskListVo> records = list.getRecords();
+        records.forEach(item->{
+            if(!Objects.isNull(item.getCreator()) && item.getCreator().equals(taskListQueryVo.getUserId()))
+                item.setCreate(true);
+            if(!Objects.isNull(item.getPersonChargeId()) && item.getPersonChargeId().equals(taskListQueryVo.getUserId()))
+                item.setAssign(true);
+            if(!Objects.isNull(item.getComtype()) && item.getComtype() != 3)
+                item.setCreate(true);
+        });
         return list;
     }
 
+    @Override
+    public List<TaskListVo> getTaskChildren(TaskListQueryVo taskListQueryVo) {
+        return baseMapper.getTaskChildren(taskListQueryVo);
+    }
+
     /**
      * 获取后线人员列表
      * @param deptId    部门id
@@ -103,6 +123,13 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask>
         return baseMapper.getBackLineUser(deptId);
     }
 
+    @Override
+    public List<TaskTask> getByParentId(String id) {
+        LambdaQueryWrapper<TaskTask> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(TaskTask::getParentId,id);
+        return baseMapper.selectList(lambdaQueryWrapper);
+    }
+
     List<TaskTask> buildTree(List<TaskTask> taskList, String parentId) {
         List<TaskTask> tree = new ArrayList<>();
         for (TaskTask task : taskList) {

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

@@ -24,4 +24,57 @@
             su.status = 1
     </select>
 
+    <select id="getTaskPage" resultType="com.ydtech.modules.task.entity.vo.TaskListVo">
+        SELECT
+            *
+        FROM task_task tt
+                 left join
+             task_person_charge tpc on tpc.task_id = tt.id
+                 left JOIN
+             sys_user_link_dept_internal_agent tuldi on tuldi.user_id = #{params.userId}
+                 left JOIN
+             sys_dept_internal_agent sdia on sdia.id = tuldi.sys_dept_internal_agent_id
+        where
+            1=1
+
+        AND
+          (
+              person_charge_id = #{params.userId}
+          OR
+              creator = #{params.userId}
+          )
+            AND tt.level = (
+                SELECT MIN(tt2.level)
+                FROM task_task tt2
+                LEFT JOIN task_person_charge tpc2 ON tpc2.task_id = tt2.id
+                LEFT JOIN sys_user_link_dept_internal_agent tuldi2 ON tuldi2.user_id = #{params.userId}
+                LEFT JOIN sys_dept_internal_agent sdia2 ON sdia2.id = tuldi2.sys_dept_internal_agent_id
+                WHERE
+                tpc2.person_charge_id = #{params.userId}
+                OR tt2.creator = #{params.userId}
+            )
+    </select>
+
+    <select id="getTaskChildren" resultType="com.ydtech.modules.task.entity.vo.TaskListVo">
+        SELECT
+            *
+        FROM task_task tt
+                 left join
+             task_person_charge tpc on tpc.task_id = tt.id
+                 left JOIN
+             sys_user_link_dept_internal_agent tuldi on tuldi.user_id = #{params.userId}
+                 left JOIN
+             sys_dept_internal_agent sdia on sdia.id = tuldi.sys_dept_internal_agent_id
+        where
+            1=1
+
+          AND
+            (
+                person_charge_id = #{params.userId}
+            OR
+                creator = #{params.userId}
+            )
+        AND
+            tt.parent_id = #{params.parentId}
+    </select>
 </mapper>