Browse Source

公共接口-修改任务和删除任务

yanyuan
zy_Java 4 years ago
parent
commit
04afbe4d22
  1. 51
      common/src/main/java/com/ccsens/common/bean/dto/CTaskDto.java
  2. 25
      common/src/main/java/com/ccsens/common/bean/vo/CPluginVo.java
  3. 7
      common/src/main/java/com/ccsens/common/persist/dao/LabelDao.java
  4. 7
      common/src/main/java/com/ccsens/common/persist/dao/ProRoleTaskDao.java
  5. 6
      common/src/main/java/com/ccsens/common/persist/dao/ProTaskSubDao.java
  6. 16
      common/src/main/java/com/ccsens/common/service/ITaskService.java
  7. 176
      common/src/main/java/com/ccsens/common/service/TaskService.java
  8. 10
      common/src/main/resources/mapper_dao/LabelDao.xml
  9. 9
      common/src/main/resources/mapper_dao/ProRoleTaskDao.xml
  10. 8
      common/src/main/resources/mapper_dao/ProTaskSubDao.xml
  11. 3
      signin/src/main/java/com/ccsens/signin/bean/vo/ProjectVo.java

51
common/src/main/java/com/ccsens/common/bean/dto/CTaskDto.java

@ -74,7 +74,7 @@ public class CTaskDto {
}
@Data
@ApiModel("查询子任务信息")
@ApiModel("任务详情id")
public static class FindSonTask{
@NotNull(message = "任务id不能为空")
@ApiModelProperty("任务详情id")
@ -91,6 +91,8 @@ public class CTaskDto {
private Long startTime;
@ApiModelProperty("结束时间")
private Long endTime;
@ApiModelProperty("特殊时间格式")
private String specialTime;
@ApiModelProperty("描述")
private String description;
@NotNull(message = "项目id不能为空")
@ -125,4 +127,51 @@ public class CTaskDto {
@ApiModelProperty("项目名称")
private String name;
}
@Data
@ApiModel("新建任务")
public static class UpdateTask{
@NotBlank(message = "任务id不能为空")
@ApiModelProperty("任务id")
private Long id;
@NotNull(message = "项目id不能为空")
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("任务名")
private String name;
@ApiModelProperty("开始时间")
private Long startTime;
@ApiModelProperty("结束时间")
private Long endTime;
@ApiModelProperty("特殊时间格式")
private String specialTime;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("父任务id")
private Long parentTaskId;
@ApiModelProperty("上道工序id(任务id)")
private Long processTaskId;
@ApiModelProperty("上道工序类型(0开始前,1开始时,2开始后,3结束前,4结束时,5结束后)")
private Byte processType = 4;
@ApiModelProperty("关联的绝对时间")
private Long timeDifference = 0L;
@ApiModelProperty("是否日常任务 0否 1是")
private Byte global;
@ApiModelProperty("负责人")
private List<Long> roleIdList;
@ApiModelProperty("检查人")
private List<Long> checkerIdList;
@ApiModelProperty("交付物名")
private List<String> deliverList;
}
@Data
@ApiModel("删除任务")
public static class DeleteTask{
@NotNull(message = "任务id不能为空")
@ApiModelProperty("任务id")
private Long id;
}
}

25
common/src/main/java/com/ccsens/common/bean/vo/CPluginVo.java

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
/**
* @author
@ -30,4 +32,27 @@ public class CPluginVo {
}
@Data
@ApiModel("任务关联的插件信息")
public static class TaskPlugin{
@ApiModelProperty("插件id")
private Long id;
@ApiModelProperty("插件名称")
private String name;
@ApiModelProperty("插件简介")
private String intro;
@ApiModelProperty("插件版本")
private String version;
@ApiModelProperty("参数")
private String param;
@ApiModelProperty("行")
private int row = 1;
@ApiModelProperty("列")
private int col = 1;
@ApiModelProperty("跨行")
private int rowspan = 1;
@ApiModelProperty("跨列")
private int colspan = 1;
}
}

7
common/src/main/java/com/ccsens/common/persist/dao/LabelDao.java

@ -12,4 +12,11 @@ public interface LabelDao extends LabelMapper {
String queryIsPm(Long labelId);
Long getLabelByTypeAndLevel(@Param("type")int type, @Param("level")int level);
/**
* 根据业务id和类型删除关联标签信息
* @param businessId 业务id
* @param type 业务类型
*/
void delByBusinessIdAndType(@Param("businessId") Long businessId, @Param("type") byte type);
}

7
common/src/main/java/com/ccsens/common/persist/dao/ProRoleTaskDao.java

@ -41,4 +41,11 @@ public interface ProRoleTaskDao extends ProRoleTaskMapper {
* @return 检查人列表
*/
List<CTaskVo.CheckerOfTask> queryCheckerOfTask(@Param("detailId") Long detailId);
/**
* 删除任务和角色的关联关系
* @param detailId 任务id
* @param roleDuty 类型0负责人 1检查人
*/
void delByTaskDetailIdAndType(@Param("detailId")Long detailId, @Param("roleDuty")byte roleDuty);
}

6
common/src/main/java/com/ccsens/common/persist/dao/ProTaskSubDao.java

@ -33,4 +33,10 @@ public interface ProTaskSubDao extends ProTaskSubMapper {
* @return 分解任务
*/
ProTaskSub findNextTaskSub(@Param("nextTaskDetailId") Long nextTaskDetailId,@Param("planTime") Long planTime);
/**
* 删除分解的任务
* @param taskDetailId 任务详情id
*/
void deleteOldSubTask(@Param("taskDetailId")Long taskDetailId);
}

16
common/src/main/java/com/ccsens/common/service/ITaskService.java

@ -1,6 +1,7 @@
package com.ccsens.common.service;
import com.ccsens.common.bean.dto.CTaskDto;
import com.ccsens.common.bean.vo.CPluginVo;
import com.ccsens.common.bean.vo.CTaskVo;
import java.util.List;
@ -72,4 +73,19 @@ public interface ITaskService {
* @return 项目下的所有任务
*/
List<CTaskVo.TaskOfProject> queryTaskOfProject(CTaskDto.QueryTaskOfProject param,Long userId);
/**
* 修改任务信息
*/
void updateTaskDetail(CTaskDto.UpdateTask param,Long userId);
/**
* 删除任务
*/
void deleteTaskDetail(CTaskDto.FindSonTask param,Long userId);
/**
* 查看任务下的插件信息
*/
List<CPluginVo.TaskPlugin> queryPluginByTaskId(CTaskDto.FindSonTask param, Long userId);
}

176
common/src/main/java/com/ccsens/common/service/TaskService.java

@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.common.bean.dto.CTaskDto;
import com.ccsens.common.bean.message.TaskMessageWithStatus;
import com.ccsens.common.bean.po.*;
import com.ccsens.common.bean.vo.CPluginVo;
import com.ccsens.common.bean.vo.CProjectVo;
import com.ccsens.common.bean.vo.CTaskVo;
import com.ccsens.common.persist.dao.*;
import com.ccsens.common.persist.mapper.ProTaskStatusRecordMapper;
@ -16,6 +19,8 @@ import com.ccsens.util.JacksonUtil;
import com.ccsens.util.bean.message.common.InMessage;
import com.ccsens.util.bean.message.common.MessageConstant;
import com.ccsens.util.config.RabbitMQConfig;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
@ -66,6 +71,8 @@ public class TaskService implements ITaskService {
private ProParentTaskDao parentTaskDao;
@Resource
private ProRoleTaskDao roleTaskDao;
@Resource
private ProProjectDao proProjectDao;
/**
* 判断当前用户的角色是否被设置不可见(是否有权限查看任务)
@ -629,6 +636,12 @@ public class TaskService implements ITaskService {
@Override
public List<CTaskVo.QueryTask> saveTask(CTaskDto.SaveTask param, Long userId) {
//根据项目id查找项目基本信息(id 名称 开始结束时间)
CProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(param.getProjectId());
if (ObjectUtil.isNull(projectById)){
throw new BaseException(CommonCodeError.PROJECT_NOT_FOUND);
}
//任务详情
ProTaskDetail proTaskDetail = new ProTaskDetail();
proTaskDetail.setId(snowflake.nextId());
@ -636,15 +649,7 @@ public class TaskService implements ITaskService {
proTaskDetail.setDescription(param.getDescription());
taskDetailDao.insertSelective(proTaskDetail);
//任务分解信息
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(proTaskDetail.getId());
if (ObjectUtil.isNotNull(param.getStartTime()) && ObjectUtil.isNotNull(param.getEndTime())) {
taskSub.setPlanStartTime(param.getStartTime());
taskSub.setPlanEndTime(param.getEndTime());
taskSub.setPlanDuration(param.getEndTime() - param.getStartTime());
}
taskSubDao.insertSelective(taskSub);
saveSubTask(param.getSpecialTime(), proTaskDetail.getId(), param.getStartTime(), param.getEndTime(), projectById);
//任务添加标签(天,普通/日常任务)
//天
Long labelOfDay = labelDao.getLabelByTypeAndLevel(0, 4);
@ -673,28 +678,13 @@ public class TaskService implements ITaskService {
proParentTask.setTaskDetailId(proTaskDetail.getId());
parentTaskDao.insertSelective(proParentTask);
}
//角色任务关联表(负责人)
//添加负责人
if (CollectionUtil.isNotEmpty(param.getRoleIdList())) {
for (Long roleId : param.getRoleIdList()) {
ProRoleTask roleTask = new ProRoleTask();
roleTask.setId(snowflake.nextId());
roleTask.setRoleId(roleId);
roleTask.setTaskId(proTaskDetail.getId());
roleTask.setOperator(userId);
roleTaskDao.insertSelective(roleTask);
}
saveTaskRole(param.getRoleIdList(), userId, proTaskDetail.getId(), (byte) 0);
}
//TODO 检查人(待定)
//检查人
if (CollectionUtil.isNotEmpty(param.getCheckerIdList())) {
for (Long checkId : param.getCheckerIdList()) {
ProRoleTask roleTask = new ProRoleTask();
roleTask.setId(snowflake.nextId());
roleTask.setRoleId(checkId);
roleTask.setTaskId(proTaskDetail.getId());
roleTask.setRoleDuty((byte)1);
roleTask.setOperator(userId);
roleTaskDao.insertSelective(roleTask);
}
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 1);
}
//上下道工序
if (ObjectUtil.isNotNull(param.getProcessTaskId())) {
@ -725,9 +715,139 @@ public class TaskService implements ITaskService {
return taskList;
}
private void saveTaskRole(List<Long> roleIdList, Long userId, Long taskDetailId, byte roleDuty) {
//角色任务关联表
for (Long roleId : roleIdList) {
ProRoleTask roleTask = new ProRoleTask();
roleTask.setId(snowflake.nextId());
roleTask.setRoleId(roleId);
roleTask.setTaskId(taskDetailId);
roleTask.setRoleDuty(roleDuty);
roleTask.setOperator(userId);
roleTaskDao.insertSelective(roleTask);
}
}
private void saveSubTask(String specialTime, Long taskDetailId, Long startTime, Long endTime, CProjectVo.ProjectInfo projectById) {
if(StrUtil.isBlank(specialTime)) {
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
if (ObjectUtil.isNotNull(startTime) && ObjectUtil.isNotNull(endTime)) {
taskSub.setPlanStartTime(startTime);
taskSub.setPlanEndTime(endTime);
taskSub.setPlanDuration(endTime - startTime);
}
taskSubDao.insertSelective(taskSub);
}else {
Date startDate = new Date(projectById.getPlanStartTime());
Date endDate = new Date(projectById.getPlanEndTime());
try {
List<CronConstant.TaskDate> taskDateList =
NatureToDate.generateDates(specialTime, startDate, endDate);
if (CollectionUtil.isNotEmpty(taskDateList)) {
List<ProTaskSub> proTaskSubList = new ArrayList<>();
for (CronConstant.TaskDate taskDate : taskDateList) {
ProTaskSub proTaskSub = new ProTaskSub();
proTaskSub.setId(snowflake.nextId());
proTaskSub.setTaskDetailId(taskDetailId);
proTaskSub.setPlanStartTime(taskDate.getStartDate().getTime());
proTaskSub.setPlanEndTime(taskDate.getEndDate().getTime());
proTaskSub.setPlanDuration(proTaskSub.getPlanEndTime() - proTaskSub.getPlanStartTime());
proTaskSubList.add(proTaskSub);
}
if(CollectionUtil.isNotEmpty(proTaskSubList)){
taskSubDao.insertAllTaskSub(proTaskSubList);
}
}
}catch (Exception e1){
throw new BaseException(String.valueOf(e1));
}
}
}
@Override
public List<CTaskVo.TaskOfProject> queryTaskOfProject(CTaskDto.QueryTaskOfProject param, Long userId) {
return taskDetailDao.queryTaskOfProject(param);
}
@Override
public void updateTaskDetail(CTaskDto.UpdateTask param, Long userId) {
//查找分解任务信息
ProTaskSub taskSub = taskSubDao.selectByPrimaryKey(param.getId());
if (ObjectUtil.isNull(taskSub)) {
throw new BaseException(CommonCodeError.NOT_TASK);
}
//查找任务详情信息
ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(taskSub.getTaskDetailId());
if (ObjectUtil.isNull(proTaskDetail)) {
throw new BaseException(CommonCodeError.NOT_TASK);
}
//查找项目信息
CProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(param.getProjectId());
if (ObjectUtil.isNull(projectById)){
throw new BaseException(CommonCodeError.PROJECT_NOT_FOUND);
}
//修改任务信息
if(StrUtil.isNotBlank(param.getName())){
proTaskDetail.setName(param.getName());
}
if(StrUtil.isNotBlank(param.getDescription())){
proTaskDetail.setDescription(param.getDescription());
}
if(StrUtil.isNotBlank(param.getSpecialTime())){
proTaskDetail.setCycle(param.getSpecialTime());
}
taskDetailDao.updateByPrimaryKeySelective(proTaskDetail);
//如果时间发生了改变。将之前的分解任务全部删除,重新添加
if(StrUtil.isNotBlank(param.getSpecialTime()) || (ObjectUtil.isNotNull(param.getStartTime()) && ObjectUtil.isNotNull(param.getEndTime()))){
//删除以前的分解任务
taskSubDao.deleteOldSubTask(taskSub.getTaskDetailId());
//添加新的分解任务
saveSubTask(param.getSpecialTime(),proTaskDetail.getId(),param.getStartTime(),param.getEndTime(),projectById);
}
//TODO 删除任务之前的任务类型的标签,重新添加
if(CollectionUtil.isNotEmpty(param.getRoleIdList())){
//删除旧的负责人
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)0);
//添加新的负责人
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 0);
}
if(CollectionUtil.isNotEmpty(param.getRoleIdList())){
//删除旧的检查人
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)1);
//添加新的检查人
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 1);
}
}
@Override
public void deleteTaskDetail(CTaskDto.FindSonTask param, Long userId) {
//查找任务详情信息
ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(param.getDetailId());
if (ObjectUtil.isNull(proTaskDetail)) {
throw new BaseException(CommonCodeError.NOT_TASK);
}
//删除任务详情
proTaskDetail.setRecStatus((byte) 2);
taskDetailDao.updateByPrimaryKeySelective(proTaskDetail);
//删除任务分解信息
taskSubDao.deleteOldSubTask(proTaskDetail.getId());
//删除任务角色关联信息
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)0);
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)1);
//删除任务标签信息
labelDao.delByBusinessIdAndType(proTaskDetail.getId(),(byte)0);
//TODO 删除任务上下级关系
//TODO 删除任务流转信息
}
@Override
public List<CPluginVo.TaskPlugin> queryPluginByTaskId(CTaskDto.FindSonTask param, Long userId) {
return null;
}
}

10
common/src/main/resources/mapper_dao/LabelDao.xml

@ -2,6 +2,16 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.common.persist.dao.LabelDao">
<update id="delByBusinessIdAndType">
UPDATE
t_label_business
SET
rec_status = 2
WHERE
business_id = #{businessId}
and business_type = #{type}
</update>
<select id="queryIsPm" resultType="String">
select t_label.description
from t_label,t_label_type

9
common/src/main/resources/mapper_dao/ProRoleTaskDao.xml

@ -14,6 +14,15 @@
(#{item.id},#{item.roleId},#{item.taskId},#{item.operator})
</foreach>
</insert>
<update id="delByTaskDetailIdAndType">
update
t_pro_role_task
set
rec_status = 2
where
task_id = #{detailId}
and role_duty = #{roleDuty}
</update>
<select id="findRoleTaskByRoleId" resultType="com.ccsens.common.bean.po.ProRoleTask">
SELECT

8
common/src/main/resources/mapper_dao/ProTaskSubDao.xml

@ -15,6 +15,14 @@
(#{item.id},#{item.planStartTime},#{item.planDuration},#{item.planEndTime},#{item.taskDetailId})
</foreach>
</insert>
<update id="deleteOldSubTask">
update
t_pro_task_sub
set
rec_status = 2
where
task_detail_id = #{taskDetailId}
</update>
<select id="findSubTaskByDetail" resultType="com.ccsens.common.bean.po.ProTaskSub">
SELECT

3
signin/src/main/java/com/ccsens/signin/bean/vo/ProjectVo.java

@ -36,7 +36,8 @@ public class ProjectVo {
@JsonIgnore
@ApiModelProperty("父级id")
private Long parentId;
// @ApiModelProperty("用户对项目的权限 0无限制,1只读无法点击,2其他")
// private byte authorization;
public Byte getStatus() {
long current = System.currentTimeMillis();

Loading…
Cancel
Save