diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectController.java
index 7f9aec45..c51351f6 100644
--- a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectController.java
+++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectController.java
@@ -5,25 +5,30 @@ import com.mdp.audit.log.client.annotation.OperType;
import com.mdp.core.entity.Tips;
import com.mdp.core.err.BizException;
import com.mdp.core.utils.RequestUtils;
+import com.mdp.core.utils.ResponseHelper;
import com.mdp.mybatis.PageUtils;
import com.mdp.qx.HasQx;
import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.entity.XmProject;
+import com.xm.core.entity.XmProjectPhase;
+import com.xm.core.entity.XmTask;
import com.xm.core.service.XmProjectGroupService;
+import com.xm.core.service.XmProjectPhaseService;
import com.xm.core.service.XmProjectService;
+import com.xm.core.service.XmTaskService;
import com.xm.core.vo.XmProjectGroupVo;
import com.xm.core.vo.XmProjectVo;
import io.swagger.annotations.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* url编制采用rest风格,如对XM.xm_project xm_project的操作有增删改查,对应的url分别为:
@@ -47,6 +52,12 @@ public class XmProjectController {
private XmProjectService xmProjectService;
@Autowired
private XmProjectGroupService groupService;
+ @Autowired
+ private XmProjectPhaseService xmProjectPhaseService;
+
+
+ @Autowired
+ private XmTaskService xmTaskService;
@ApiOperation( value = "查询xm_project信息列表",notes="listXmProject,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ApiImplicitParams({
@@ -351,7 +362,50 @@ public class XmProjectController {
m.put("tips", tips);
return m;
}
-
+
+ @ApiOperation( value = "存为模板",notes="editXmProject")
+ @ApiResponses({
+ @ApiResponse(code = 200,response=XmProject.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
+ })
+ @HasQx(value = "xm_core_xmProject_copy_to",name = "存为新项目",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
+ @RequestMapping(value="/copyTo",method=RequestMethod.POST)
+ public Map copyTo(@RequestBody XmProject xmProject) {
+ Map m = new HashMap<>();
+ Tips tips=new Tips("成功更新一条数据");
+ try{
+ User user= LoginUtils.getCurrentUserInfo();
+ if( !StringUtils.hasText(xmProject.getId())){
+ return ResponseHelper.failed("id-0","请上送原项目编号参数id");
+ }
+ if( !StringUtils.hasText(xmProject.getName())){
+ return ResponseHelper.failed("name-0","请上送新项目名称");
+ }
+ if(StringUtils.hasText(xmProject.getCode())){
+ XmProject pq=new XmProject();
+ pq.setBranchId(user.getBranchId());
+ pq.setCode(xmProject.getCode());
+ List xmProjectList=this.xmProjectService.selectListByWhere(pq);
+ if(xmProjectList!=null && xmProjectList.size()>0){
+ return ResponseHelper.failed("code-exists","项目编码【"+xmProject.getCode()+"】已存在,,请重新输入新的项目编码,如果为空,后台自动生成");
+ }
+ }
+ XmProject xmProjectDb=this.xmProjectService.getProjectFromCache(xmProject.getId());
+ if(xmProjectDb==null){
+ tips.setFailureMsg("项目不存在");
+ m.put("tips", tips);
+ return m;
+ }
+ this.xmProjectService.copyProject(user,xmProject);
+ }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;
+ }
/**
diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectService.java
index 12e2e4c3..c0d834d1 100644
--- a/xm-core/src/main/java/com/xm/core/service/XmProjectService.java
+++ b/xm-core/src/main/java/com/xm/core/service/XmProjectService.java
@@ -10,6 +10,8 @@ import com.mdp.core.utils.DateUtils;
import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.entity.XmProject;
+import com.xm.core.entity.XmProjectPhase;
+import com.xm.core.entity.XmTask;
import com.xm.core.service.cache.XmProjectCacheService;
import com.xm.core.vo.XmProjectVo;
import org.springframework.beans.BeanUtils;
@@ -32,8 +34,6 @@ import java.util.Map;
@Service("xm.core.xmProjectService")
public class XmProjectService extends BaseService {
- @Autowired
- XmProjectService xmProjectService;
@@ -57,6 +57,8 @@ public class XmProjectService extends BaseService {
@Autowired
XmProjectCacheService xmProjectCacheService;
+ @Autowired
+ XmProjectPhaseService xmProjectPhaseService;
public XmProject getProjectFromCache(String projectId) {
@@ -68,6 +70,77 @@ public class XmProjectService extends BaseService {
}
return projectCahce;
}
+ @Transactional
+ public XmProject copyProject(User user,XmProject xmProject){
+ XmProject xmProjectDb=this.getProjectFromCache(xmProject.getId());
+ if(xmProjectDb==null){
+ return null;
+ }
+ String isTpl=xmProject.getIsTpl();
+ XmProjectVo xmProjectTo=new XmProjectVo();
+ BeanUtils.copyProperties(xmProjectDb,xmProjectTo);
+ xmProjectTo.setId(null);
+ xmProjectTo.setCode(xmProject.getCode());
+ xmProjectTo.setName(xmProject.getName());
+ if(StringUtils.hasText(xmProject.getName()) && xmProject.getName().equals(xmProjectDb.getName())){
+ xmProjectTo.setName(xmProject.getName()+"(复制)");
+ }
+ xmProjectTo.setGroups(null);
+ xmProjectTo.setIsTpl(isTpl);
+ xmProjectTo.setFromTplId(xmProjectDb.getId());
+ this.saveProject(xmProjectTo);
+
+ XmProjectPhase phaseQuery=new XmProjectPhase();
+ phaseQuery.setProjectId(xmProjectDb.getId());
+ List xmProjectPhases=this.xmProjectPhaseService.selectListByWhere(phaseQuery);
+ Map newIdMap=new HashMap<>();
+ if(xmProjectPhases!=null && xmProjectPhases.size()>0){
+ for (XmProjectPhase node : xmProjectPhases) {
+ String id=this.xmProjectPhaseService.createKey("id");
+ newIdMap.put(node.getId(),id);
+ }
+ for (XmProjectPhase node : xmProjectPhases) {
+ String oldId=node.getId();
+ String newId=newIdMap.get(oldId);
+ node.setProjectId(xmProjectTo.getId());
+ node.setId(newId);
+ node.setParentPhaseId(newIdMap.get(node.getParentPhaseId()));
+ node.setCtime(new Date());
+ node.setMngUserid(user.getUserid());
+ node.setMngUsername(user.getUsername());
+ node.setIsTpl(isTpl);
+ node.setBranchId(user.getBranchId());
+ }
+ this.xmProjectPhaseService.doBatchInsert(xmProjectPhases);
+ }
+
+ XmTask taskQ=new XmTask();
+ taskQ.setProjectId(xmProjectDb.getId());
+ List xmTasks=this.xmTaskService.selectListByWhere(taskQ);
+ Map newTaskIdMap=new HashMap<>();
+ if(xmTasks!=null && xmTasks.size()>0){
+ for (XmTask node : xmTasks) {
+ newTaskIdMap.put(node.getId(),this.xmTaskService.createKey("id"));
+ }
+ for (XmTask node : xmTasks) {
+ String oldId=node.getId();
+ String newId=newTaskIdMap.get(oldId);
+ node.setProjectId(xmProjectTo.getId());
+ node.setId(newId);
+ node.setParentTaskid(newIdMap.get(node.getParentTaskid()));
+ node.setCbranchId(user.getBranchId());
+ node.setCdeptid(user.getDeptid());
+ node.setCreateUsername(user.getUsername());
+ node.setCreateUserid(user.getUserid());
+ node.setCreateTime(new Date());
+ node.setProjectPhaseId(newIdMap.get(node.getProjectPhaseId()));
+ node.setIsTpl(isTpl);
+ }
+ this.xmTaskService.parentIdPathsCalcBeforeSave(xmTasks);
+ this.xmTaskService.batchImportFromTemplate(xmTasks);
+ }
+ return xmProjectTo;
+ }
public void clearProject(String projectId) {
xmProjectCacheService.putProject(projectId, null);
@@ -110,17 +183,18 @@ public class XmProjectService extends BaseService {
tips.setFailureMsg("id不能事先预设,如果必须事先预设,请保持与code相同");
throw new BizException(tips);
}
- if(!StringUtils.isEmpty(xmProjectVo.getCode())) {
+ if(StringUtils.hasText(xmProjectVo.getCode())) {
XmProject xmProjectQuery = new XmProject();
xmProjectQuery.setCode(xmProjectVo.getCode());
- if(xmProjectService.countByWhere(xmProjectQuery)>0){
+ xmProjectQuery.setBranchId(user.getBranchId());
+ if(this.countByWhere(xmProjectQuery)>0){
tips.setFailureMsg("编号重复,请修改编号再提交");
throw new BizException(tips);
}
- xmProjectVo.setId(xmProjectVo.getCode());
+ xmProjectVo.setId(this.createKey("id"));
}else {
- xmProjectVo.setCode(sequenceService.getCommonNo("prj-"+xmProjectVo.getBranchId()+"-{date:yyymmddd}-{rand:4}"));
- xmProjectVo.setId(xmProjectVo.getCode());
+ xmProjectVo.setCode(this.createProjectCode(user.getBranchId()));
+ xmProjectVo.setId(this.createKey("id"));
}
//获取当前登录用户信息
@@ -135,6 +209,22 @@ public class XmProjectService extends BaseService {
xmRecordService.addXmProjectRecord(xmProjectVo.getId(), "项目-新增项目", "新建项目"+xmProjectVo.getName(), JSONObject.toJSONString(xmProjectVo),null);
return xmProjectVo;
}
+ public String createProjectCode(String branchId){
+ XmProject projectQ=new XmProject();
+ projectQ.setBranchId(branchId);
+ long count=this.countByWhere(projectQ);
+ String seq=(count+1)+"";
+ int preLength=6-seq.length();
+
+ if(preLength>0){
+ for (int i = 0; i < preLength; i++) {
+ seq="0"+seq;
+ }
+ }
+ String code=sequenceService.getCommonNo("prj-{date:yyyyMMdd}-"+seq+"-{rand:2}");
+ return code;
+
+ }
/**
diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java
index b0c1909e..2695fc68 100644
--- a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java
+++ b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java
@@ -366,36 +366,6 @@ public class XmTaskService extends BaseService {
@Transactional
public void batchImportFromTemplate(List xmTasks) {
this.batchInsert(xmTasks);
- List xmTaskSkillList=new ArrayList<>();
- xmTasks.forEach(new Consumer() {
-
- @Override
- public void accept(XmTask t) {
- String names=t.getTaskSkillNames();
- String ids=t.getTaskSkillIds();
- if(StringUtils.isEmpty(names)) {
- return;
- }
- String[] nameList=names.split(",");
- String[] idList=ids.split(",");
- if(nameList.length != idList.length ) {
- return;
- }
- for (int i=0;i0){
-
- xmTaskSkillService.batchInsert(xmTaskSkillList);
- }
-
List list= xmTasks.stream().filter(i->!xmTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList());
list=list.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList());
if(list.size()>0){