diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java index fd0bce77..9bf5e6a2 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java @@ -335,6 +335,7 @@ public class XmMenuController { try{ if(xmMenus.size()>0) { + this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenus); this.xmMenuService.doBatchInsert(xmMenus); }else { @@ -360,6 +361,7 @@ public class XmMenuController { try{ if(xmMenus.size()>0) { + this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenus.stream().map(i->(XmMenu)i).collect(Collectors.toList())); this.xmMenuService.batchInsertOrUpdate(xmMenus); }else { diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java index bc965237..c320e5c9 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java @@ -231,8 +231,9 @@ public class XmProjectPhaseController { List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); - if(judgetTips.isOk()) { - xmProjectPhaseService.insert(xmProjectPhase); + if(judgetTips.isOk()) { + xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); + xmProjectPhaseService.insert(xmProjectPhase); xmRecordService.addXmPhaseRecord(projectId, xmProjectPhase.getId(), "项目-阶段计划-新增计划", "新增阶段计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null); m.put("data",xmProjectPhase); }else { @@ -496,6 +497,8 @@ public class XmProjectPhaseController { Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,null); if(judgetTips.isOk()) { + + xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases); xmProjectPhaseService.doBatchInsert(xmProjectPhases); for (XmProjectPhase phase : xmProjectPhases) { diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java index 1c9478f4..48f70daf 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java @@ -789,6 +789,7 @@ public class XmTaskController { task.setChildrenCnt( Integer.valueOf(xmTasks.stream().filter(i->task.getId().equals(i.getParentTaskid())).count()+"")); } + xmTaskService.parentIdPathsCalcBeforeSave(xmTasks); xmTaskService.batchImportFromTemplate(xmTasks); for (XmTask t : xmTasks) { diff --git a/xm-core/src/main/java/com/xm/core/service/XmMenuService.java b/xm-core/src/main/java/com/xm/core/service/XmMenuService.java index e072fda5..1adc65f6 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmMenuService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmMenuService.java @@ -3,6 +3,7 @@ package com.xm.core.service; import com.mdp.core.entity.Tips; import com.mdp.core.service.BaseService; import com.xm.core.entity.XmMenu; +import com.xm.core.entity.XmTask; import com.xm.core.vo.XmMenuVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -57,10 +58,9 @@ public class XmMenuService extends BaseService { } } if(addList.size()>0) { - List adds=this.parentIdPathsCalcBeforeSave(addList.stream().map(i->(XmMenu)i).collect(Collectors.toList())); - this.batchInsert(adds); + this.batchInsert(addList); - List list= adds.stream().filter(i->!adds.stream().filter(k->k.getMenuId().equals(i.getPmenuId())).findAny().isPresent()).collect(Collectors.toList()); + List list= addList.stream().filter(i->!addList.stream().filter(k->k.getMenuId().equals(i.getPmenuId())).findAny().isPresent()).collect(Collectors.toList()); list=list.stream().filter(i-> StringUtils.hasText(i.getPmenuId())).collect(Collectors.toList()); if(list.size()>0){ this.updateChildrenCntByIds(list.stream().map(i->i.getPmenuId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); @@ -116,6 +116,11 @@ public class XmMenuService extends BaseService { node.setPidPaths(idPath+node.getMenuId()+","); } } + for (XmMenu node : nodes) { + String idPaths=node.getPidPaths(); + String[] idpss=idPaths.split(","); + node.setLvl(idpss.length-1); + } return nodes; } @@ -131,6 +136,10 @@ public class XmMenuService extends BaseService { idPath=idPath+parentList.get(i).getMenuId()+","; } currNode.setPidPaths(idPath+currNode.getMenuId()+","); + + String idPaths=currNode.getPidPaths(); + String[] idpss=idPaths.split(","); + currNode.setLvl(idpss.length-1); } return tips; } diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java index 58576796..53e663b1 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java @@ -6,6 +6,7 @@ import com.mdp.core.utils.NumberUtil; import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.entity.XmProjectPhase; +import com.xm.core.entity.XmProjectPhase; import com.xm.core.vo.XmProjectGroupVo; import com.xm.core.vo.XmProjectPhaseVo; import org.springframework.beans.factory.annotation.Autowired; @@ -228,5 +229,111 @@ public class XmProjectPhaseService extends BaseService { this.updateChildrenCntByIds(list.stream().map(i->i.getParentPhaseId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); } } + + + public List parentIdPathsCalcBeforeSave(List nodes) { + List noExistsList=nodes.stream().filter(i->!nodes.stream().filter(k->k.getId().equals(i.getParentPhaseId())).findAny().isPresent()).collect(Collectors.toList()); + noExistsList=noExistsList.stream().filter(i->StringUtils.hasText(i.getParentPhaseId())).collect(Collectors.toList()); + Map hadCalcMap=new HashMap<>(); + for (XmProjectPhase node : noExistsList) { + if(hadCalcMap.containsKey(node.getParentPhaseId())){ + String idPaths=hadCalcMap.get(node.getParentPhaseId()); + node.setPidPaths(idPaths+node.getId()+","); + }else{ + this.parentIdPathsCalcBeforeSave(node); + String idPaths=node.getPidPaths(); + idPaths=idPaths.substring(0,idPaths.length()-node.getId().length()-1); + hadCalcMap.put(node.getParentPhaseId(),idPaths); + } + } + for (XmProjectPhase node : nodes) { + if(!StringUtils.hasText(node.getParentPhaseId())){ + node.setPidPaths("0,"); + continue; + } + if(hadCalcMap.containsKey(node.getParentPhaseId())){ + String idPaths=hadCalcMap.get(node.getParentPhaseId()); + node.setPidPaths(idPaths+node.getId()+","); + }else{ + List pnodeList=this.getParentList(node,nodes); + XmProjectPhase topParent=pnodeList.get(pnodeList.size()-1); + String idPath="0,"; + if(hadCalcMap.containsKey(topParent.getParentPhaseId())){ + idPath=hadCalcMap.get(topParent.getParentPhaseId()); + } + for (int i = pnodeList.size() - 1; i >= 0; i--) { + idPath=idPath+pnodeList.get(i).getId()+","; + } + node.setPidPaths(idPath+node.getId()+","); + } + } + for (XmProjectPhase node : nodes) { + String idPaths=node.getPidPaths(); + String[] idpss=idPaths.split(","); + node.setLvl(idpss.length-1); + } + return nodes; + } + + public static void main(String[] args) { + String idpaths="0,1,2,3,"; + String[] idpss=idpaths.split(","); + int lvl=idpss.length; + + } + + public Tips parentIdPathsCalcBeforeSave(XmProjectPhase currNode) { + Tips tips = new Tips("成功"); + if (!StringUtils.hasText(currNode.getParentPhaseId()) || "0".equals(currNode.getParentPhaseId())) { + currNode.setPidPaths("0," + currNode.getId() + ","); + return tips; + } else { + List parentList=this.getParentList(currNode); + String idPath="0,"; + for (int i = parentList.size() - 1; i >= 0; i--) { + idPath=idPath+parentList.get(i).getId()+","; + } + currNode.setPidPaths(idPath+currNode.getId()+","); + + String idPaths=currNode.getPidPaths(); + String[] idpss=idPaths.split(","); + currNode.setLvl(idpss.length-1); + } + return tips; + } + + private List getParentList(XmProjectPhase currNode){ + List parentList=new ArrayList<>(); + XmProjectPhase current=currNode; + while (true){ + if(!StringUtils.hasText(currNode.getParentPhaseId()) || "0".equals(currNode.getParentPhaseId())){ + return parentList; + } + XmProjectPhase query=new XmProjectPhase(); + query.setId(current.getParentPhaseId()); + current=this.selectOneObject(query); + if(current==null){ + return parentList; + } + parentList.add(current); + } + } + + private List getParentList(XmProjectPhase currNode,List nodes){ + List parentList=new ArrayList<>(); + XmProjectPhase current=currNode; + while (true){ + if(!StringUtils.hasText(currNode.getParentPhaseId()) || "0".equals(currNode.getParentPhaseId())){ + return parentList; + } + XmProjectPhase query=new XmProjectPhase(); + query.setId(current.getParentPhaseId()); + current=nodes.stream().filter(i->i.getId().equals(query.getId())).findFirst().get(); + if(current==null){ + return parentList; + } + parentList.add(current); + } + } } 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 95fbab77..c3bb54ff 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 @@ -9,6 +9,7 @@ import com.mdp.core.utils.DateUtils; import com.mdp.core.utils.NumberUtil; import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; +import com.xm.core.entity.XmMenu; import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTaskSkill; import com.xm.core.vo.XmTaskVo; @@ -158,7 +159,7 @@ public class XmTaskService extends BaseService { if(StringUtils.isEmpty(xmTaskVo.getMilestone())){ xmTaskVo.setMilestone("0"); } - + this.parentIdPathsCalcBeforeSave(xmTaskVo); XmTask xmTask = new XmTask(); BeanUtils.copyProperties(xmTaskVo,xmTask); this.insert(xmTask); @@ -364,7 +365,6 @@ public class XmTaskService extends BaseService { } @Transactional public void batchImportFromTemplate(List xmTasks) { - this.batchInsert(xmTasks); List xmTaskSkillList=new ArrayList<>(); xmTasks.forEach(new Consumer() { @@ -439,6 +439,110 @@ public class XmTaskService extends BaseService { super.update("updateChildrenCntByIds",ids); } - /** 请在此类添加自定义函数 */ + + public List parentIdPathsCalcBeforeSave(List nodes) { + List noExistsList=nodes.stream().filter(i->!nodes.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList()); + noExistsList=noExistsList.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList()); + Map hadCalcMap=new HashMap<>(); + for (XmTask node : noExistsList) { + if(hadCalcMap.containsKey(node.getParentTaskid())){ + String idPaths=hadCalcMap.get(node.getParentTaskid()); + node.setPidPaths(idPaths+node.getId()+","); + }else{ + this.parentIdPathsCalcBeforeSave(node); + String idPaths=node.getPidPaths(); + idPaths=idPaths.substring(0,idPaths.length()-node.getId().length()-1); + hadCalcMap.put(node.getParentTaskid(),idPaths); + } + } + for (XmTask node : nodes) { + if(!StringUtils.hasText(node.getParentTaskid())){ + node.setPidPaths("0,"); + continue; + } + if(hadCalcMap.containsKey(node.getParentTaskid())){ + String idPaths=hadCalcMap.get(node.getParentTaskid()); + node.setPidPaths(idPaths+node.getId()+","); + }else{ + List pnodeList=this.getParentList(node,nodes); + XmTask topParent=pnodeList.get(pnodeList.size()-1); + String idPath="0,"; + if(hadCalcMap.containsKey(topParent.getParentTaskid())){ + idPath=hadCalcMap.get(topParent.getParentTaskid()); + } + for (int i = pnodeList.size() - 1; i >= 0; i--) { + idPath=idPath+pnodeList.get(i).getId()+","; + } + node.setPidPaths(idPath+node.getId()+","); + } + } + for (XmTask node : nodes) { + String idPaths=node.getPidPaths(); + String[] idpss=idPaths.split(","); + node.setLvl(idpss.length-1); + } + return nodes; + } + + public static void main(String[] args) { + String idpaths="0,1,2,3,"; + String[] idpss=idpaths.split(","); + int lvl=idpss.length; + + } + + public Tips parentIdPathsCalcBeforeSave(XmTask currNode) { + Tips tips = new Tips("成功"); + if (!StringUtils.hasText(currNode.getParentTaskid()) || "0".equals(currNode.getParentTaskid())) { + currNode.setPidPaths("0," + currNode.getId() + ","); + return tips; + } else { + List parentList=this.getParentList(currNode); + String idPath="0,"; + for (int i = parentList.size() - 1; i >= 0; i--) { + idPath=idPath+parentList.get(i).getId()+","; + } + currNode.setPidPaths(idPath+currNode.getId()+","); + + String idPaths=currNode.getPidPaths(); + String[] idpss=idPaths.split(","); + currNode.setLvl(idpss.length-1); + } + return tips; + } + + private List getParentList(XmTask currNode){ + List parentList=new ArrayList<>(); + XmTask current=currNode; + while (true){ + if(!StringUtils.hasText(currNode.getParentTaskid()) || "0".equals(currNode.getParentTaskid())){ + return parentList; + } + XmTask query=new XmTask(); + query.setId(current.getParentTaskid()); + current=this.selectOneObject(query); + if(current==null){ + return parentList; + } + parentList.add(current); + } + } + + private List getParentList(XmTask currNode,List nodes){ + List parentList=new ArrayList<>(); + XmTask current=currNode; + while (true){ + if(!StringUtils.hasText(currNode.getParentTaskid()) || "0".equals(currNode.getParentTaskid())){ + return parentList; + } + XmTask query=new XmTask(); + query.setId(current.getParentTaskid()); + current=nodes.stream().filter(i->i.getId().equals(query.getId())).findFirst().get(); + if(current==null){ + return parentList; + } + parentList.add(current); + } + } }