Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
7976c3e0b4
  1. 104
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  2. 6
      xm-core/src/main/java/com/xm/core/service/XmTaskService.java
  3. 26
      xm-core/src/main/java/com/xm/core/vo/BatchChangeParentTaskVo.java
  4. 14
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml

104
xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java

@ -18,6 +18,7 @@ import com.xm.core.entity.*;
import com.xm.core.service.*;
import com.xm.core.service.cache.XmTaskCacheService;
import com.xm.core.service.push.XmPushMsgService;
import com.xm.core.vo.BatchChangeParentTaskVo;
import com.xm.core.vo.BatchRelTasksWithMenu;
import com.xm.core.vo.XmGroupVo;
import com.xm.core.vo.XmTaskVo;
@ -1373,7 +1374,110 @@ public class XmTaskController {
m.put("tips", tips);
return m;
}
/***/
@ApiOperation( value = "批量修改任务的上级",notes="batchChangeParentTask,仅需要上传主键字段")
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmTask_batchChangeParentTask",name = "批量修改任务的上级",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchChangeParentTask",method=RequestMethod.POST)
public Map<String,Object> batchChangeParentTask(@RequestBody BatchChangeParentTaskVo xmTasksVo) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功修改");
try{
User user=LoginUtils.getCurrentUserInfo();
if(xmTasksVo.getTaskIds()==null || xmTasksVo.getTaskIds().size()==0){
tips.setFailureMsg("任务列表不能为空");
m.put("tips", tips);
return m;
}
if(!StringUtils.hasText(xmTasksVo.getParentTaskid())){
return ResponseHelper.failed("parentTaskid-0", "上级编号不能为空");
}
List<String> ids=xmTasksVo.getTaskIds().stream().map(i->i).collect(Collectors.toList());
ids.add(xmTasksVo.getParentTaskid());
ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList());
List<XmTask> xmTasks=this.xmTaskService.selectTaskListByIds(ids);
Optional<XmTask> optional=xmTasks.stream().filter(i->i.getId().equals(xmTasksVo.getParentTaskid())).findAny();
if(!optional.isPresent()){
return ResponseHelper.failed("parentTask-0", "上级不存在");
}
XmTask parentTask=optional.get();
xmTasks=xmTasks.stream().filter(i->!i.getId().equals(parentTask.getId())).collect(Collectors.toList());
xmTasks=xmTasks.stream().filter(i->!parentTask.getId().equals(i.getParentTaskid())).collect(Collectors.toList());
if(xmTasks.stream().filter(i->!i.getProjectId().equals(parentTask.getProjectId())).findAny().isPresent()){
return ResponseHelper.failed("projectId-not-same", "所有任务或计划必须都是同一个项目之下");
}
String projectId=parentTask.getProjectId();
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips);
return m;
}
Map<String,XmTask> allowTasksDbMap=new HashMap<>();
Map<String,XmTask> noAllowTasksDbMap=new HashMap<>();
if(!groupService.checkUserIsProjectAdm(projectId,user.getUserid())){
for (XmTask task : xmTasks) {
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,task.getCreateUserid(),user.getUserid());
if(!isHead){
noAllowTasksDbMap.put(task.getId(),task);
}else {
allowTasksDbMap.put(task.getId(),task);
}
}
}else{
for (XmTask task : xmTasks) {
allowTasksDbMap.put(task.getId(),task);
}
}
Map<String,XmTask> allowTasksDbMap2=new HashMap<>();
for (XmTask t : allowTasksDbMap.values()) {
if(!allowTasksDbMap.containsKey(t.getParentTaskid())){
allowTasksDbMap2.put(t.getId(),t);
}
}
Map<String,XmTask> allowTasksDbMap3=new HashMap<>();
for (XmTask t : allowTasksDbMap2.values()) {
boolean hasChildren=false;
for (XmTask t2 : allowTasksDbMap2.values()) {
if(!t2.getId().equals(t.getId()) && t2.getPidPaths().indexOf(t.getPidPaths())>=0 ){
hasChildren=true;
break;
}
}
if(hasChildren==false){
allowTasksDbMap3.put(t.getId(),t);
}
}
if(allowTasksDbMap3.size()>0){
this.xmTaskService.batchChangeParent(allowTasksDbMap3.values().stream().collect(Collectors.toList()),parentTask);
}
this.xmRecordService.addXmTaskRecord(projectId,parentTask.getId(),"批量挂接子节点","成功将以下"+allowTasksDbMap3.size()+"个计划或任务及其所有子项挂接到【"+parentTask.getName()+"】上,【"+allowTasksDbMap3.values().stream().map(i->i.getName()).collect(Collectors.joining(","))+"】;");
List<String> msgs=new ArrayList<>();
msgs.add("成功将以下"+allowTasksDbMap3.size()+"个计划或任务及其所有子项挂接到【"+parentTask.getName()+"】上,【"+allowTasksDbMap3.values().stream().map(i->i.getName()).collect(Collectors.joining(","))+"】;");
if(noAllowTasksDbMap.size()>0){
msgs.add("以下"+noAllowTasksDbMap.size()+"个计划任务无权限操作,【"+noAllowTasksDbMap.values().stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
if(allowTasksDbMap3.size()>0){
tips.setOkMsg(msgs.stream().collect(Collectors.joining(" ")));
}else{
tips.setFailureMsg(msgs.stream().collect(Collectors.joining(" ")));
}
}catch (BizException e) {
tips=e.getTips();
logger.error("",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("",e);
}
m.put("tips", tips);
return m;
}
/**
* 流程审批过程中回调该接口更新业务数据
* 如果发起流程时上送了restUrl则无论流程中是否配置了监听器都会在流程发生以下事件时推送数据过来

6
xm-core/src/main/java/com/xm/core/service/XmTaskService.java

@ -707,5 +707,11 @@ public class XmTaskService extends BaseService {
return super.selectList("listTenTaskByProjectIdAndIterationId", map("projectId", projectId, "iterationId", iterationId));
}
@Transactional
public void batchChangeParent(List<XmTask> xmTasks,XmTask parentTask) {
super.update("batchChangeParent",map("taskIds",xmTasks.stream().map(i->i.getId()).collect(Collectors.toList()),"parentTaskid",parentTask.getId(),"parentPidPaths",parentTask.getPidPaths()));
this.sumParents(parentTask);
}
}

26
xm-core/src/main/java/com/xm/core/vo/BatchChangeParentTaskVo.java

@ -0,0 +1,26 @@
package com.xm.core.vo;
import java.util.List;
public class BatchChangeParentTaskVo {
List<String> taskIds;
String parentTaskid;
public List<String> getTaskIds() {
return taskIds;
}
public void setTaskIds(List<String> taskIds) {
this.taskIds = taskIds;
}
public String getParentTaskid() {
return parentTaskid;
}
public void setParentTaskid(String parentTaskid) {
this.parentTaskid = parentTaskid;
}
}

14
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml

@ -327,6 +327,20 @@
and res.ntype='0'
limit 10
</select>
<update id="batchChangeParent" parameterType="HashMap">
update xm_task res inner join (
select t.id,pid_paths,parent_taskid from xm_task t where t.id in
<foreach collection="taskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
) as t1 on res.pid_paths like concat(t1.pid_paths,'%')
set res.pid_paths = replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')),
res.parent_taskid=if(res.id=t1.id,#{parentTaskid},res.parent_taskid),
res.lvl= LENGTH(replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')))-LENGTH(REPLACE(replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')),',',''))-1
</update>
<!--结束 自定义sql函数区域-->

Loading…
Cancel
Save