Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
837b06965d
  1. 235
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  2. 12
      xm-core/src/main/java/com/xm/core/service/XmTaskService.java
  3. 26
      xm-core/src/main/java/com/xm/core/vo/BatchRelTasksWithMenu.java
  4. 26
      xm-core/src/main/java/com/xm/core/vo/BatchRelTasksWithPhase.java
  5. 9
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

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

@ -14,13 +14,12 @@ import com.mdp.qx.HasQx;
import com.mdp.safe.client.entity.User; import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils; import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.PubTool; import com.xm.core.PubTool;
import com.xm.core.entity.XmTask;
import com.xm.core.service.XmProjectGroupService;
import com.xm.core.service.XmProjectService;
import com.xm.core.service.XmRecordService;
import com.xm.core.service.XmTaskService;
import com.xm.core.entity.*;
import com.xm.core.service.*;
import com.xm.core.service.cache.XmTaskCacheService; import com.xm.core.service.cache.XmTaskCacheService;
import com.xm.core.service.push.XmPushMsgService; import com.xm.core.service.push.XmPushMsgService;
import com.xm.core.vo.BatchRelTasksWithMenu;
import com.xm.core.vo.BatchRelTasksWithPhase;
import com.xm.core.vo.XmProjectGroupVo; import com.xm.core.vo.XmProjectGroupVo;
import com.xm.core.vo.XmTaskVo; import com.xm.core.vo.XmTaskVo;
import io.swagger.annotations.*; import io.swagger.annotations.*;
@ -70,7 +69,14 @@ public class XmTaskController {
private XmPushMsgService xmPushMsgService; private XmPushMsgService xmPushMsgService;
private XmProjectService xmProjectService; private XmProjectService xmProjectService;
@Autowired
XmProjectPhaseService xmProjectPhaseService;
@Autowired
XmMenuService xmMenusService;
@Autowired
XmProductService xmProductService;
@ApiOperation( value = "查询xm_task信息列表",notes="listXmTask,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiOperation( value = "查询xm_task信息列表",notes="listXmTask,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ApiImplicitParams({ @ApiImplicitParams({
@ -882,46 +888,60 @@ public class XmTaskController {
} }
m.put("tips", tips); m.put("tips", tips);
return m; return m;
}
@ApiOperation( value = "批量将多个任务与一个用户需求关联",notes="")
}
@ApiOperation( value = "批量将任务与一个项目计划关联",notes="")
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
}) })
@HasQx(value = "xm_core_xmTask_batchRelTasksWithMenu",name = "批量将任务与一个用户需求关联",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchRelTasksWithMenu",method=RequestMethod.POST)
public Map<String,Object> batchRelTasksWithMenu(@RequestBody List<XmTask> xmTasks) {
@HasQx(value = "xm_core_xmTask_batchRelTasksWithPhase",name = "批量将任务与一个项目计划关联",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchRelTasksWithPhase",method=RequestMethod.POST)
public Map<String,Object> batchRelTasksWithPhase(@RequestBody BatchRelTasksWithPhase tasksPhase) {
Map<String,Object> m = new HashMap<>(); Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功"+xmTasks.size()+"条任务数据与用户需求关联");
Tips tips=new Tips("成功将任务数据与项目计划关联");
try{ try{
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
if(xmTasks==null || xmTasks.size()==0){
tips.setFailureMsg("任务列表不能为空");
m.put("tips", tips);
return m;
if(tasksPhase==null){
return ResponseHelper.failed("params-0","参数不能为空");
} }
XmTask xmTask=xmTasks.get(0);
String projectId=xmTask.getProjectId();
if( !StringUtils.hasText(projectId) ){
tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips);
return m;
String projectPhaseId=tasksPhase.getProjectPhaseId();
if( !StringUtils.hasText(projectPhaseId) ){
return ResponseHelper.failed("projectPhaseId-0","项目计划编号不能为空");
} }
XmProjectPhase xmProjectPhaseDb=this.xmProjectPhaseService.selectOneObject(new XmProjectPhase(projectPhaseId));
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
if(xmProjectPhaseDb==null){
return ResponseHelper.failed("phase-0","计划【"+xmProjectPhaseDb.getPhaseName()+"】已不存在");
}
if("1".equals(xmProjectPhaseDb.getNtype())){
return ResponseHelper.failed("phase-ntype-1","【"+xmProjectPhaseDb.getPhaseName()+"】属于计划集,无需关联任务。");
}
XmProject xmProjectDb=this.xmProjectService.getProjectFromCache(xmProjectPhaseDb.getProjectId());
if(xmProjectDb==null){
return ResponseHelper.failed("project-0","项目已不存在");
}
if("8".equals(xmProjectDb.getStatus())){
return ResponseHelper.failed("project-status-8","项目已完成,不能再修改");
}
if( "9".equals(xmProjectDb.getStatus())){
return ResponseHelper.failed("project-status-9","项目关闭,不能再修改");
}
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmProjectDb.getId());
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips);
return m;
return ResponseHelper.failed("group-0","该项目还未建立项目团队,请先进行团队成员维护");
} }
List<XmTask> allowTasks=new ArrayList<>(); List<XmTask> allowTasks=new ArrayList<>();
List<XmTask> noAllowTasks=new ArrayList<>(); List<XmTask> noAllowTasks=new ArrayList<>();
Map<String,XmTask> xmTaskDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks);
for (XmTask task : xmTaskDbMap.values()) {
if( !projectId.equals(task.getProjectId()) ){
tips.setFailureMsg("所有任务必须同属于一个项目");
m.put("tips", tips);
return m;
List<XmTask> ntype1Tasks=new ArrayList<>();
List<XmTask> tasksDb=this.xmTaskService.selectTaskListByIds(tasksPhase.getTaskIds());
for (XmTask task : tasksDb) {
if("1".equals(task.getNtype())){
ntype1Tasks.add(task);
continue;
} }
boolean isMyCreate=user.getUserid().equals(task.getCreateUserid()); boolean isMyCreate=user.getUserid().equals(task.getCreateUserid());
if(isMyCreate){ if(isMyCreate){
@ -936,22 +956,157 @@ public class XmTaskController {
} }
} }
List<String> msgs=new ArrayList<>();
if(allowTasks.size()>0){
BatchRelTasksWithPhase tasksWithPhase=new BatchRelTasksWithPhase();
tasksWithPhase.setProjectPhaseId(projectPhaseId);
tasksWithPhase.setTaskIds(allowTasks.stream().map(i->i.getId()).collect(Collectors.toList()));
xmTaskService.batchRelTasksWithPhase(tasksWithPhase);
}
msgs.add("成功将"+allowTasks.size()+"个任务与计划关联。");
for (XmTask t : allowTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量更新任务", "将任务"+t.getName()+"与计划【"+xmProjectPhaseDb.getId()+"-"+xmProjectPhaseDb.getPhaseName()+"】关联",null,null);
}
if(ntype1Tasks.size()>0){
msgs.add("以下"+ntype1Tasks.size()+"个任务属于任务集,无需关联计划。【"+ntype1Tasks.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
if(noAllowTasks.size()>0){
msgs.add("以下"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长可以批量将任务与项目计划进行关联,【"+noAllowTasks.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
if(allowTasks.size()>0){ if(allowTasks.size()>0){
xmTaskService.batchRelTasksWithMenu(allowTasks);
for (XmTask t : allowTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量更新任务", "将任务"+t.getName()+"与需求【"+t.getMenuId()+"-"+t.getMenuName()+"】关联",JSON.toJSONString(t),null);
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;
}
@ApiOperation( value = "批量将多个任务与一个用户需求关联",notes="")
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmTask_batchRelTasksWithMenu",name = "批量将任务与一个用户需求关联",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchRelTasksWithMenu",method=RequestMethod.POST)
public Map<String,Object> batchRelTasksWithMenu(@RequestBody BatchRelTasksWithMenu tasksMenu) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功将任务与用户需求关联");
try{
User user=LoginUtils.getCurrentUserInfo();
if(tasksMenu==null||tasksMenu.getTaskIds()==null||tasksMenu.getTaskIds().size()==0 ){
return ResponseHelper.failed("tasks-0","任务列表不能为空");
};
if(!StringUtils.hasText(tasksMenu.getMenuId()) ){
return ResponseHelper.failed("menuId-0","需求编号不能为空");
};
XmMenu xmMenuDb=this.xmMenusService.selectOneObject(new XmMenu(tasksMenu.getMenuId()));
if(xmMenuDb==null){
return ResponseHelper.failed("menu-0","需求已不存在");
}
if("8".equals(xmMenuDb.getStatus())){
return ResponseHelper.failed("menu-status-8","需求已下线");
}
if("9".equals(xmMenuDb.getStatus())){
return ResponseHelper.failed("menu-status-8","需求已删除");
}
XmProduct xmProductDb=xmProductService.getProductFromCache(xmMenuDb.getProductId());
boolean hasMenuQx=true;
boolean isPm=groupService.checkUserIsProductAdm(xmProductDb,user.getUserid());
if(!isPm){
List<XmProjectGroupVo> pgroups=groupService.getProductGroupVoList(xmMenuDb.getProductId());
if(StringUtils.hasText(xmMenuDb.getMmUserid()) ){
if(!user.getUserid().equals(xmMenuDb.getMmUserid())){
if(pgroups==null || pgroups.size()==0){
hasMenuQx=false;
} else if(!groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmMenuDb.getMmUserid(),user.getUserid())){
hasMenuQx=false;
}
}
}else{
if(!groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),user.getUserid())){
hasMenuQx=false;
}
} }
if(noAllowTasks.size()>0){
tips.setOkMsg(allowTasks.size()+"个任务成功关联用户需求,另外有"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长可以批量将任务与用户需求进行关联");
}
List<XmTask> allowTasks=new ArrayList<>();
List<XmTask> ntype1Tasks=new ArrayList<>();
List<XmTask> noAllowTasks=new ArrayList<>();
List<XmTask> tasksDb=this.xmTaskService.selectTaskListByIds(tasksMenu.getTaskIds());
if(hasMenuQx==false){
Map<String,List<XmTask>> projectTasksMap=new HashMap<>();
for (XmTask xmTask : tasksDb) {
if("1".equals(xmTask.getNtype())){
ntype1Tasks.add(xmTask);
continue;
}
List<XmTask> projectTasks=projectTasksMap.get(xmTask.getProjectId());
if(projectTasks==null){
projectTasks=new ArrayList<>();
projectTasksMap.put(xmTask.getProjectId(),projectTasks);
}
projectTasks.add(xmTask);
} }
}else{
if(noAllowTasks.size()>0){
tips.setFailureMsg(allowTasks.size()+"个任务成功关联用户需求,另外有"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长可以批量将任务与用户需求进行关联");
for (Map.Entry<String, List<XmTask>> pt : projectTasksMap.entrySet()) {
XmProject xmProjectDb=this.xmProjectService.getProjectFromCache(pt.getKey());
boolean isProjectAdm=groupService.checkUserIsProjectAdm(xmProjectDb,user.getUserid());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectDb.getId());
if(isProjectAdm==false){
if(groupVoList==null){
noAllowTasks.addAll(pt.getValue());
}else{
for (XmTask xmTask : pt.getValue()) {
if(!user.getUserid().equals(xmTask.getCreateUserid()) && !user.getUserid().equals(xmTask.getExecutorUserid())){
if(!groupService.checkUserIsOtherUserTeamHeadOrAss(groupVoList,xmTask.getCreateUserid(),user.getUserid())){
if(!groupService.checkUserIsOtherUserTeamHeadOrAss(groupVoList,xmTask.getExecutorUserid(),user.getUserid())){
noAllowTasks.add(xmTask);
}
}
}
}
}
}
} }
} }
allowTasks=tasksDb.stream().filter(i->!noAllowTasks.stream().filter(k->k.getId().equals(i.getId())).findAny().isPresent()).collect(Collectors.toList());
List<String> msgs=new ArrayList<>();
if(allowTasks.size()>0){
BatchRelTasksWithMenu tasksWithMenu=new BatchRelTasksWithMenu();
tasksWithMenu.setMenuId(xmMenuDb.getMenuId());
tasksWithMenu.setTaskIds(allowTasks.stream().map(i->i.getId()).collect(Collectors.toList()));
xmTaskService.batchRelTasksWithMenu(tasksWithMenu);
}
msgs.add("成功将"+allowTasks.size()+"个任务与需求关联。");
for (XmTask t : allowTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量更新任务", "将任务"+t.getName()+"与需求【"+xmMenuDb.getMenuId()+"-"+xmMenuDb.getMenuName()+"】关联",null,null);
}
if(ntype1Tasks.size()>0){
msgs.add("以下"+ntype1Tasks.size()+"个任务属于任务集,无需关联需求。【"+ntype1Tasks.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
if(noAllowTasks.size()>0){
msgs.add("以下"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长、产品组组长、需求管理组人员可以批量将任务与需求进行关联,【"+noAllowTasks.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
if(allowTasks.size()>0){
tips.setOkMsg(msgs.stream().collect(Collectors.joining(" ")));
}else{
tips.setFailureMsg(msgs.stream().collect(Collectors.joining(" ")));
}
}catch (BizException e) { }catch (BizException e) {
tips=e.getTips(); tips=e.getTips();

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

@ -12,6 +12,8 @@ import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.entity.XmMenu; import com.xm.core.entity.XmMenu;
import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTask;
import com.xm.core.entity.XmTaskSkill; import com.xm.core.entity.XmTaskSkill;
import com.xm.core.vo.BatchRelTasksWithMenu;
import com.xm.core.vo.BatchRelTasksWithPhase;
import com.xm.core.vo.XmTaskVo; import com.xm.core.vo.XmTaskVo;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -392,10 +394,8 @@ public class XmTaskService extends BaseService {
* @param xmTasks * @param xmTasks
*/ */
@Transactional @Transactional
public void batchRelTasksWithMenu(List<XmTask> xmTasks) {
for (XmTask xmTask : xmTasks) {
this.update("relTaskWithMenu", xmTask);
}
public void batchRelTasksWithMenu(BatchRelTasksWithMenu tasksWithMenu) {
super.update("batchRelTasksWithMenu",tasksWithMenu);
} }
@Transactional @Transactional
@ -659,5 +659,9 @@ public class XmTaskService extends BaseService {
return true; return true;
} }
public void batchRelTasksWithPhase(BatchRelTasksWithPhase tasksPhase) {
super.update("batchRelTasksWithPhase",tasksPhase);
}
} }

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

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

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

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

9
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

@ -232,6 +232,15 @@
#{item} #{item}
</foreach> </foreach>
</select> </select>
<select id="batchRelTasksWithPhase" parameterType="com.xm.core.vo.BatchRelTasksWithPhase">
update xm_task res set res.project_phase_id = #{projectPhaseId} where res.id in
<foreach collection="taskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
and res.ntype='0'
</select>
<!--结束 自定义sql函数区域--> <!--结束 自定义sql函数区域-->

Loading…
Cancel
Save