Browse Source

完善复制项目接口

recovery
ma 4 years ago
parent
commit
7c420cb16e
  1. 8
      tall/src/main/java/com/ccsens/tall/service/IProjectService.java
  2. 12
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  3. 204
      tall/src/main/java/com/ccsens/tall/service/ProjectService.java
  4. 13
      tall/src/main/java/com/ccsens/tall/web/ProjectController.java
  5. 8
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  6. 4
      tall/src/main/resources/application.yml
  7. 10
      tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

8
tall/src/main/java/com/ccsens/tall/service/IProjectService.java

@ -64,4 +64,12 @@ public interface IProjectService {
* @param userId 当前用户id
*/
void projectToTemplate(ProjectDto.ProjectToTemplate param, Long userId);
/**
* 根据模板复制项目
* @param param 项目id
* @param userId 当前用户id
* @return 复制成功的项目
*/
ProjectVo.ProjectInfo copyProjectNew(ProjectDto.ProjectIdDto param, Long userId);
}

12
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -947,6 +947,18 @@ public class ProTaskDetailService implements IProTaskDetailService {
taskDetail.setParentName(parentTask.getName());
}
}
//查找任务是否有webPath
ProPluginConfigExample pluginConfigExample = new ProPluginConfigExample();
pluginConfigExample.createCriteria().andTaskIdEqualTo(taskDetail.getDetailId());
List<ProPluginConfig> proPluginConfigs = pluginConfigDao.selectByExample(pluginConfigExample);
if(CollectionUtil.isNotEmpty(proPluginConfigs)){
for (ProPluginConfig pluginConfig : proPluginConfigs) {
taskDetail.setWebPath(pluginConfig.getWebPath());
taskDetail.setRoutineLocation(pluginConfig.getRoutineLocation());
taskDetail.setImportParam(pluginConfig.getImportParam());
}
}
}
return taskDetail;

204
tall/src/main/java/com/ccsens/tall/service/ProjectService.java

@ -3,7 +3,6 @@ package com.ccsens.tall.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.tall.bean.dto.MemberRoleDto;
@ -12,7 +11,6 @@ import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.LabelVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.persist.mapper.ProMemberRoleMapper;
import com.ccsens.tall.persist.mapper.SysImitationMapper;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.DateUtil;
@ -58,8 +56,12 @@ public class ProjectService implements IProjectService {
@Resource
private TaskPluginDao pluginDao;
@Resource
private ProPluginConfigDao pluginConfigDao;
@Resource
private TaskDeliverDao taskDeliverDao;
@Resource
private ProTaskInputDocDao taskInputDocDao;
@Resource
private IProRoleService proRoleService;
@Resource
private Snowflake snowflake;
@ -85,6 +87,8 @@ public class ProjectService implements IProjectService {
private SysProjectLabelDao sysProjectLabelDao;
@Resource
private RobotService robotService;
@Resource
private ProRemindDao remindDao;
@Override
@ -635,6 +639,7 @@ public class ProjectService implements IProjectService {
newProject.setName(oldProject.getName() + "-副本");
newProject.setTemplate((byte) 0);
saveProject(newProject);
//该用户关注新项目
UserAttention userAttention = new UserAttention();
userAttention.setId(snowflake.nextId());
@ -716,7 +721,7 @@ public class ProjectService implements IProjectService {
}
//添加对谁不可见
copyRoleExclude(oldRoleList, oldRoleMap, newRoleMap);
//复制任务
//复制任务(包括分解任务)
copyTask(oldProjectId, newProjectId, oldRoleMap, newRoleMap);
}
}
@ -741,9 +746,15 @@ public class ProjectService implements IProjectService {
}
/**
* 复制任务
* 复制任务插件插件配置和交付物任务配置
*/
private void copyTask(Long oldProjectId, Long newProjectId, Map<Long, String> oldRoleMap, Map<String, Long> newRoleMap) {
Map<Long,Long> oldIdAndNewId = new HashMap<>();
SysProject oldProject = sysProjectDao.selectByPrimaryKey(oldProjectId);
SysProject newProject = sysProjectDao.selectByPrimaryKey(newProjectId);
//两个项目的时间差
long timeDifference = newProject.getBeginTime() - oldProject.getBeginTime();
ProTaskDetailExample detailExample = new ProTaskDetailExample();
detailExample.createCriteria().andProjectIdEqualTo(oldProjectId).andLevelEqualTo((byte) 1);
List<ProTaskDetail> detailList = taskDetailDao.selectByExample(detailExample);
@ -753,11 +764,19 @@ public class ProjectService implements IProjectService {
BeanUtil.copyProperties(oldDetail, newDetail);
newDetail.setId(snowflake.nextId());
newDetail.setProjectId(newProjectId);
//设置任务的时间
newDetail.setBeginTime(newDetail.getBeginTime()+timeDifference);
newDetail.setEndTime(newDetail.getEndTime()+timeDifference);
newDetail.setCreatedAt(null);
newDetail.setUpdatedAt(null);
newDetail.setExecutorRole(newRoleMap.get(oldRoleMap.get(newDetail.getExecutorRole())));
if (newDetail.getCheckerRole() != 0) {
newDetail.setCheckerRole(newRoleMap.get(oldRoleMap.get(newDetail.getCheckerRole())));
}
taskDetailDao.insertSelective(newDetail);
oldIdAndNewId.put(oldDetail.getId(),newDetail.getId());
//复制分解任务
copyTaskSubTime(timeDifference,newDetail.getId(),oldDetail.getId());
//查找一级任务下的二级任务
ProTaskDetailExample oldSecondTask = new ProTaskDetailExample();
oldSecondTask.createCriteria().andParentIdEqualTo(oldDetail.getId()).andLevelEqualTo((byte) 2);
@ -773,9 +792,17 @@ public class ProjectService implements IProjectService {
if (newSecondDetail.getCheckerRole() != 0) {
newSecondDetail.setCheckerRole(newRoleMap.get(oldRoleMap.get(newSecondDetail.getCheckerRole())));
}
//设置任务的时间
newSecondDetail.setBeginTime(newDetail.getBeginTime()+timeDifference);
newSecondDetail.setEndTime(newDetail.getEndTime()+timeDifference);
newSecondDetail.setCreatedAt(null);
newSecondDetail.setUpdatedAt(null);
taskDetailDao.insertSelective(newSecondDetail);
oldIdAndNewId.put(oldSecondDetail.getId(),newSecondDetail.getId());
//复制分解任务
copyTaskSubTime(timeDifference,newSecondDetail.getId(),oldSecondDetail.getId());
//分解时间
taskToSubTime(newSecondDetail);
//taskToSubTime(newSecondDetail);
//查找二级任务的子任务
ProTaskDetailExample oldSubTask = new ProTaskDetailExample();
oldSubTask.createCriteria().andParentIdEqualTo(oldSecondDetail.getId()).andLevelEqualTo((byte) 3);
@ -791,18 +818,74 @@ public class ProjectService implements IProjectService {
if (newSubDetail.getCheckerRole() != 0) {
newSubDetail.setCheckerRole(newRoleMap.get(oldRoleMap.get(newSubDetail.getCheckerRole())));
}
//设置任务的时间
newSubDetail.setBeginTime(newDetail.getBeginTime()+timeDifference);
newSubDetail.setEndTime(newDetail.getEndTime()+timeDifference);
newSubDetail.setCreatedAt(null);
newSubDetail.setUpdatedAt(null);
taskDetailDao.insertSelective(newSubDetail);
oldIdAndNewId.put(oldSubDetail.getId(),newSubDetail.getId());
//复制分解任务
copyTaskSubTime(timeDifference,newSubDetail.getId(),oldSubDetail.getId());
//分解时间
taskToSubTime(newSubDetail);
copyPluginAndDeliver(oldDetail.getId(), newDetail.getId(), oldRoleMap, newRoleMap);
//taskToSubTime(newSubDetail);
//复制插件、插件配置和交付物
copyPluginAndDeliver(oldSubDetail.getId(), newSubDetail.getId(), oldRoleMap, newRoleMap,oldIdAndNewId,newProjectId);
copyTaskConfig(oldSubDetail.getId(),newSubDetail.getId(),oldProjectId,newProjectId);
}
}
copyPluginAndDeliver(oldDetail.getId(), newDetail.getId(), oldRoleMap, newRoleMap);
copyTaskConfig(oldDetail.getId(),newDetail.getId(),oldProjectId,newProjectId);
copyPluginAndDeliver(oldSecondDetail.getId(), newSecondDetail.getId(), oldRoleMap, newRoleMap,oldIdAndNewId,newProjectId);
copyTaskConfig(oldSecondDetail.getId(),newSecondDetail.getId(),oldProjectId,newProjectId);
}
}
copyPluginAndDeliver(oldDetail.getId(), newDetail.getId(), oldRoleMap, newRoleMap);
copyPluginAndDeliver(oldDetail.getId(), newDetail.getId(), oldRoleMap, newRoleMap,oldIdAndNewId,newProjectId);
copyTaskConfig(oldDetail.getId(),newDetail.getId(),oldProjectId,newProjectId);
}
}
}
/**
* 复制分解任务和任务提示信息
* @param newTaskDetailId 新的详情任务
* @param timeDifference 时间差
*/
public void copyTaskSubTime(Long timeDifference,Long newTaskDetailId,Long oldTaskDetailId){
Map<Long,Long> oldTaskSubIdAndNewId = new HashMap<>();
//复制分解任务
ProTaskSubTimeExample proTaskSubTimeExample = new ProTaskSubTimeExample();
proTaskSubTimeExample.createCriteria().andTaskDetailIdEqualTo(oldTaskDetailId);
List<ProTaskSubTime> oldTaskSubTimes = taskSubTimeDao.selectByExample(proTaskSubTimeExample);
if (CollectionUtil.isNotEmpty(oldTaskSubTimes)){
for (ProTaskSubTime oldTaskSubTime : oldTaskSubTimes) {
ProTaskSubTime newTaskSubTime = new ProTaskSubTime();
BeanUtil.copyProperties(oldTaskSubTime,newTaskSubTime);
newTaskSubTime.setId(snowflake.nextId());
newTaskSubTime.setTaskDetailId(newTaskDetailId);
newTaskSubTime.setBeginTime(oldTaskSubTime.getBeginTime()+timeDifference);
newTaskSubTime.setEndTime(oldTaskSubTime.getEndTime()+timeDifference);
newTaskSubTime.setRealBeginTime(oldTaskSubTime.getRealBeginTime()+timeDifference);
newTaskSubTime.setRealEndTime(oldTaskSubTime.getRealEndTime()+timeDifference);
newTaskSubTime.setCreatedAt(null);
newTaskSubTime.setUpdatedAt(null);
taskSubTimeDao.insertSelective(newTaskSubTime);
oldTaskSubIdAndNewId.put(oldTaskSubTime.getId(),newTaskSubTime.getId());
//复制任务提示信息
ProRemindExample remindExample = new ProRemindExample();
remindExample.createCriteria().andSubTaskIdEqualTo(oldTaskSubTime.getId());
List<ProRemind> proReminds = remindDao.selectByExample(remindExample);
if (CollectionUtil.isNotEmpty(proReminds)){
for (ProRemind oldRemind : proReminds) {
ProRemind newRemind = new ProRemind();
BeanUtil.copyProperties(oldRemind,newRemind);
newRemind.setId(snowflake.nextId());
newRemind.setSubTaskId(oldTaskSubIdAndNewId.get(oldTaskSubTime.getId()));
newRemind.setCreatedAt(null);
newRemind.setUpdatedAt(null);
remindDao.insertSelective(newRemind);
}
}
}
}
}
@ -863,9 +946,10 @@ public class ProjectService implements IProjectService {
}
/**
* 复制插件和交付物
* 复制插件·插件配置和交付物
*/
private void copyPluginAndDeliver(Long oldTaskId, Long newTaskId, Map<Long, String> oldRoleMap, Map<String, Long> newRoleMap) {
private void copyPluginAndDeliver(Long oldTaskId, Long newTaskId, Map<Long, String> oldRoleMap, Map<String, Long> newRoleMap,Map<Long,Long> oldTaskIdAndNewId,Long projectId) {
Map<Long,Long> oldPluginIdAndNewId = new HashMap<>();
//插件
ProTaskPluginExample pluginExample = new ProTaskPluginExample();
pluginExample.createCriteria().andTaskDetailIdEqualTo(oldTaskId);
@ -877,10 +961,34 @@ public class ProjectService implements IProjectService {
newPlugin.setId(snowflake.nextId());
newPlugin.setTaskDetailId(newTaskId);
newPlugin.setMemberRoleId(newRoleMap.get(oldRoleMap.get(newPlugin.getMemberRoleId())));
newPlugin.setCreatedAt(null);
newPlugin.setUpdatedAt(null);
pluginDao.insertSelective(newPlugin);
oldPluginIdAndNewId.put(plugin.getId(),newPlugin.getId());
}
}
//插件配置表
ProPluginConfigExample pluginConfigExample = new ProPluginConfigExample();
pluginConfigExample.createCriteria().andTaskIdEqualTo(oldTaskId);
List<ProPluginConfig> oldPluginConfigs = pluginConfigDao.selectByExample(pluginConfigExample);
if (CollectionUtil.isNotEmpty(oldPluginConfigs)){
for (ProPluginConfig oldPluginConfig : oldPluginConfigs) {
ProPluginConfig newPluginConfig = new ProPluginConfig();
BeanUtil.copyProperties(oldPluginConfig,newPluginConfig);
newPluginConfig.setId(snowflake.nextId());
if (0 != newPluginConfig.getTaskId()){
newPluginConfig.setTaskId(oldTaskIdAndNewId.get(oldTaskId));
}
newPluginConfig.setPluginId(oldPluginIdAndNewId.get(oldPluginConfig.getPluginId()));
newPluginConfig.setCreatedAt(null);
newPluginConfig.setUpdatedAt(null);
pluginConfigDao.insertSelective(newPluginConfig);
}
}
//交付物
//输出文档
ProTaskDeliverExample deliverExample = new ProTaskDeliverExample();
deliverExample.createCriteria().andTaskDetailIdEqualTo(oldTaskId);
List<ProTaskDeliver> proTaskDeliverList = taskDeliverDao.selectByExample(deliverExample);
@ -892,9 +1000,26 @@ public class ProjectService implements IProjectService {
newTaskDeliver.setTaskDetailId(newTaskId);
newTaskDeliver.setCheckStatus(0);
newTaskDeliver.setIsUpload(0);
newTaskDeliver.setCreatedAt(null);
newTaskDeliver.setUpdatedAt(null);
taskDeliverDao.insertSelective(newTaskDeliver);
}
}
//输入文档
ProTaskInputDocExample taskInputDocExample = new ProTaskInputDocExample();
taskInputDocExample.createCriteria().andTaskDetailIdEqualTo(oldTaskId);
List<ProTaskInputDoc> oldTaskInputDocs = taskInputDocDao.selectByExample(taskInputDocExample);
if (CollectionUtil.isNotEmpty(oldTaskInputDocs)){
for (ProTaskInputDoc oldTaskInputDoc : oldTaskInputDocs) {
ProTaskInputDoc newTaskInputDoc = new ProTaskInputDoc();
BeanUtil.copyProperties(oldTaskInputDoc,newTaskInputDoc);
newTaskInputDoc.setId(snowflake.nextId());
newTaskInputDoc.setIsUpload(0);
newTaskInputDoc.setCreatedAt(null);
newTaskInputDoc.setUpdatedAt(null);
taskInputDocDao.insertSelective(newTaskInputDoc);
}
}
}
/**
@ -1313,4 +1438,59 @@ public class ProjectService implements IProjectService {
}
/**
* 根据模板复制项目
* @param param 项目id
* @param userId 当前用户id
* @return 复制后的项目
*/
@Override
public ProjectVo.ProjectInfo copyProjectNew(ProjectDto.ProjectIdDto param, Long userId) {
//当前时间
long currentTime = System.currentTimeMillis();
SysProject oldProject = sysProjectDao.selectByPrimaryKey(param.getProjectId());
//项目开始时间和结束时间的时间差
Long timeDifference = oldProject.getEndTime() - oldProject.getBeginTime();
//复制项目
SysProject newProject = new SysProject();
BeanUtil.copyProperties(oldProject,newProject);
newProject.setId(snowflake.nextId());
newProject.setCreatorId(userId);
newProject.setName(oldProject.getName()+"-副本");
newProject.setTemplate((byte)0);
newProject.setBeginTime(currentTime);
newProject.setEndTime(currentTime+timeDifference);
newProject.setCreatedAt(null);
newProject.setUpdatedAt(null);
sysProjectDao.insertSelective(newProject);
//复制项目配置表
ProShowExample showExample = new ProShowExample();
showExample.createCriteria().andProjectIdEqualTo(oldProject.getId());
List<ProShow> oldShows = proShowDao.selectByExample(showExample);
if (CollectionUtil.isNotEmpty(oldShows)){
for (ProShow oldShow : oldShows) {
ProShow newShow = new ProShow();
BeanUtil.copyProperties(oldShow,newShow);
newShow.setId(snowflake.nextId());
newShow.setProjectId(newProject.getId());
newShow.setCreatedAt(null);
newShow.setUpdatedAt(null);
}
}
//该用户关注新项目
UserAttention userAttention = new UserAttention();
userAttention.setId(snowflake.nextId());
userAttention.setUserId(userId);
userAttention.setProjectId(newProject.getId());
attentionDao.insertSelective(userAttention);
//添加角色
copyRole(oldProject.getId(), newProject.getId());
//复制项目配置信息
copyProjectConfig(oldProject.getId(), newProject.getId());
//复制项目下的角色
return null;
}
}

13
tall/src/main/java/com/ccsens/tall/web/ProjectController.java

@ -1,5 +1,7 @@
package com.ccsens.tall.web;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.tall.annotation.MustLoginTall;
import com.ccsens.tall.bean.dto.ProjectDto;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.vo.ProjectVo;
@ -321,7 +323,7 @@ public class ProjectController {
return JsonResponse.newInstance().ok();
}
@MustLoginTall
@ApiOperation(value = "将项目转化为模板", notes = "")
@RequestMapping(value = "/projectToTemplate", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse projectToTemplate(@ApiParam @Validated @RequestBody QueryDto<ProjectDto.ProjectToTemplate> params) throws Exception {
@ -331,4 +333,13 @@ public class ProjectController {
return JsonResponse.newInstance().ok();
}
@MustLogin
@ApiOperation(value = "根据模板复制项目新", notes = "")
@RequestMapping(value = "/copyProject", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<ProjectVo.ProjectInfo> copyProjectNew(@ApiParam @Validated @RequestBody QueryDto<ProjectDto.ProjectIdDto> params) throws Exception {
log.info("根据模板复制项目新:{}",params);
ProjectVo.ProjectInfo projectInfo = projectService.copyProjectNew(params.getParam(),params.getUserId());
log.info("根据模板复制项目新结束");
return JsonResponse.newInstance().ok(projectInfo);
}
}

8
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -322,4 +322,12 @@ public class TaskController {
List<TaskVo.AboutWeekTask> aboutWeekTask = taskDetailService.selectAboutWeekTask(params.getParam(),params.getUserId());
return JsonResponse.newInstance().ok(aboutWeekTask);
}
@MustLoginTall
@ApiOperation(value = "给任务增加分解任务",notes = "")
@RequestMapping(value = "/addSubTaskForDetailTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.AboutWeekTask>> addSubTaskForDetailTask(@ApiParam @Validated @RequestBody QueryDto<TaskDto.AboutWeekTask> params) throws Exception {
List<TaskVo.AboutWeekTask> aboutWeekTask = taskDetailService.selectAboutWeekTask(params.getParam(),params.getUserId());
return JsonResponse.newInstance().ok(aboutWeekTask);
}
}

4
tall/src/main/resources/application.yml

@ -1,5 +1,5 @@
spring:
profiles:
active: dev
include: util-dev,common
active: test
include: util-test,common

10
tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

@ -77,10 +77,12 @@
t_pro_sub_time_member m LEFT JOIN t_pro_task_sub_time s on m.task_sub_time_id = s.id
WHERE
m.rec_status = 0
and m.member_id in
<foreach collection="memberIdList" item="id" separator="," open="(" close=")">
#{id}
</foreach>
<if test="memberIdList != null and memberIdList.size() > 0">
and m.member_id in
<foreach collection="memberIdList" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</if>
)t on t.sId = s.id
LEFT JOIN
(

Loading…
Cancel
Save