diff --git a/xm-core/src/main/java/com/xm/core/service/XmProductService.java b/xm-core/src/main/java/com/xm/core/service/XmProductService.java index c4b100e3..7ade8f61 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProductService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProductService.java @@ -249,6 +249,101 @@ public class XmProductService extends BaseService { return xmProductTo; } + @Transactional + public Map copyTo(User user, List xmTasks) { + + Set products = xmTasks.stream().map(i->i.getProductId()).collect(Collectors.toSet()); + products.remove(null); + Map productsMap=new HashMap<>(); + if(products==null || products.size()==0){ + return productsMap; + } + for (String productId : products) { + XmProductCopyVo xmProduct=new XmProductCopyVo(); + xmProduct.setId(productId); + xmProduct.setCode(this.createProductCode(user.getBranchId())); + xmProduct.setCopyMenu("1"); + XmProduct pq=new XmProduct(); + pq.setId(xmProduct.getId()); + XmProduct xmProductDb=this.selectOneObject(pq); + if(xmProductDb==null){ + throw new BizException("产品不存在"); + } + xmProduct.setProductName(xmProductDb.getProductName()+"(复制)"); + + String isTpl=xmProduct.getIsTpl(); + XmProduct xmProductTo=new XmProduct(); + BeanUtils.copyProperties(xmProductDb,xmProductTo); + xmProductTo.setProductName(xmProduct.getProductName()); + xmProductTo.setCode(xmProduct.getCode()); + if(!StringUtils.hasText(xmProduct.getCode())){ + xmProductTo.setCode(createProductCode(user.getBranchId())); + } + xmProductTo.setId(this.createProductId(xmProductTo.getCode())); + xmProductTo.setBranchId(user.getBranchId()); + xmProductTo.setDeptid(user.getDeptid()); + xmProductTo.setDeptName(user.getDeptName()); + xmProductTo.setAdmUserid(user.getUserid()); + xmProductTo.setAdmUsername(user.getUsername()); + xmProductTo.setPmUserid(user.getUserid()); + xmProductTo.setPmUsername(user.getUsername()); + xmProductTo.setCtime(new Date()); + xmProductTo.setPstatus("0"); + xmProductTo.setIsTpl(isTpl); + xmProductTo.setAssUserid(user.getUserid()); + xmProductTo.setAssUsername(user.getUsername()); + xmProductTo.setBizProcInstId(null); + xmProductTo.setBizFlowState("0"); + xmProductTo.setLtime(new Date()); + xmProductTo.setDel("0"); + xmProductTo.setLocked("0"); + if(xmProduct.getProductName().equals(xmProductDb.getProductName())){ + xmProductTo.setProductName(xmProduct.getProductName()+"(复制)"); + } + this.insert(xmProductTo); + productsMap.put(productId,xmProductTo); + Map newMenuIdMap=new HashMap<>(); + Map menusMap=new HashMap<>(); + if("1".equals(xmProduct.getCopyMenu())){ + XmMenu mq=new XmMenu(); + mq.setProductId(xmProduct.getId()); + List xmMenus=this.xmMenuService.selectListByWhere(mq); + + if(xmMenus!=null && xmMenus.size()>0){ + for (XmMenu node : xmMenus) { + newMenuIdMap.put(node.getMenuId(),this.xmMenuService.createKey("id")); + } + for (XmMenu node : xmMenus) { + String oldId=node.getMenuId(); + String newId=newMenuIdMap.get(oldId); + node.setMenuId(newId); + node.setProductId(xmProductTo.getId()); + node.setPmenuId(newMenuIdMap.get(node.getPmenuId())); + node.setCtime(new Date()); + node.setMmUserid(user.getUserid()); + node.setMmUsername(user.getUsername()); + node.setIterationId(null); + menusMap.put(node.getMenuId(),node); + } + this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenus); + this.xmMenuService.doBatchInsert(xmMenus); + } + } + + if(xmTasks!=null && xmTasks.size()>0){ + for (XmTask node : xmTasks) { + if(StringUtils.hasText(node.getMenuId()) && newMenuIdMap.containsKey(node.getMenuId())){ + node.setProductId(xmProductTo.getId()); + node.setMenuId(newMenuIdMap.get(node.getMenuId())); + XmMenu xmMenu=menusMap.get(node.getMenuId()); + node.setMenuName(xmMenu.getMenuName()); + } + } + } + } + + return productsMap; + } public String createProductCode(String branchId){ XmProduct product=new XmProduct(); product.setBranchId(branchId); 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 24f132e0..21dedd8b 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 @@ -64,6 +64,9 @@ public class XmProjectService extends BaseService { @Autowired XmGroupUserService groupUserService; + + @Autowired + XmProductService xmProductService; public XmProject getProjectFromCache(String projectId) { @@ -88,7 +91,7 @@ public class XmProjectService extends BaseService { } }else{ if(!user.getBranchId().equals(xmProjectDb.getBranchId())){ - if(!platformBranchId.equals(xmProjectDb.getBranchId())){ + if(!platformBranchId.equals(xmProjectDb.getBranchId()) && !"1".equals(xmProjectDb.getTplType())){ throw new BizException("您无权复制其它组织的项目"); } } @@ -113,8 +116,9 @@ public class XmProjectService extends BaseService { xmProjectTo.setAssUsername(user.getUsername()); xmProjectTo.setPmUserid(user.getUserid()); xmProjectTo.setPmUsername(user.getUsername()); + xmProjectTo.setTplType(xmProject.getTplType()); this.saveProject(xmProjectTo); - + Map productsMap=new HashMap<>(); if("1".equals(xmProject.getCopyTask())){ XmTask taskQ=new XmTask(); taskQ.setProjectId(xmProjectDb.getId()); @@ -137,9 +141,12 @@ public class XmProjectService extends BaseService { node.setCreateTime(new Date()); node.setPreTaskid(newTaskIdMap.get(node.getPreTaskid())); node.setIsTpl(isTpl); - node.setMenuId(null); - node.setMenuName(null); - node.setProductId(null); + if(!"1".equals(xmProject.getCopyProduct())){ + node.setMenuId(null); + node.setMenuName(null); + node.setProductId(null); + } + node.setExeUsernames(null); node.setExeUserids(null); node.setRate(0); @@ -148,11 +155,30 @@ public class XmProjectService extends BaseService { node.setExecutorUserid(null); node.setExecutorUsername(null); } + if("1".equals(xmProject.getCopyProduct())){ + productsMap=this.xmProductService.copyTo(user,xmTasks); + } + this.xmTaskService.parentIdPathsCalcBeforeSave(xmTasks); this.xmTaskService.batchImportFromTemplate(xmTasks); } } - + if(productsMap!=null && productsMap.size()>0){ + //构建项目与产品的关联关系 + List links=new ArrayList<>(); + for (XmProduct product : productsMap.values()) { + XmProductProjectLink link=new XmProductProjectLink(); + link.setSeq(999); + link.setProductId(product.getId()); + link.setProjectId(xmProjectTo.getId()); + link.setLinkStatus("1"); + link.setCtime(new Date()); + link.setCusername(user.getUsername()); + link.setCuserid(user.getUserid()); + links.add(link); + } + this.linkService.batchInsert(links); + } List groupsDb=new ArrayList<>(); Map newGroupIdMap = new HashMap<>(); if( "1".equals(xmProject.getCopyGroup())||"1".equals(xmProject.getCopyGroupUser())) { @@ -199,6 +225,8 @@ public class XmProjectService extends BaseService { this.groupUserService.batchInsert(usersDb); } } + + return xmProjectTo; } diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml index aedb29fe..07378bc3 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml @@ -11,6 +11,9 @@ ( #{item}) + + and ( res.branch_id=#{linkBranchId}) + and ( date_format(start_time,'%Y') = #{startYear} or date_format(end_time,'%Y') = #{startYear} @@ -57,6 +60,7 @@ and (res.branch_id =#{linkBranchId} and res.is_tpl='1' and res.tpl_type='2') + and ( res.is_tpl='1' and res.tpl_type='1')