From 2c6c24281d4c261b172d02a98df9524cffc0c276 Mon Sep 17 00:00:00 2001 From: fujunling <2984387807@qq.com> Date: 星期二, 18 七月 2023 11:04:39 +0800 Subject: [PATCH] fjl --- Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java | 378 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 344 insertions(+), 34 deletions(-) diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java index 62db19e..ace2a89 100644 --- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java @@ -9,21 +9,14 @@ import com.vci.ubcs.omd.dto.LifeCycleEdgeDTO; import com.vci.ubcs.omd.dto.LifeCycleLineEventDTO; import com.vci.ubcs.omd.dto.LifeCycleNodeDTO; -import com.vci.ubcs.omd.entity.LifeCycleEdge; -import com.vci.ubcs.omd.entity.LifeCycleLineEvent; -import com.vci.ubcs.omd.entity.LifeCycleNode; -import com.vci.ubcs.omd.entity.LifeCycleRule; -import com.vci.ubcs.omd.mapper.LifeCycleEdgeMapper; -import com.vci.ubcs.omd.mapper.LifeCycleLineEventMapper; -import com.vci.ubcs.omd.mapper.LifeCycleMapper; -import com.vci.ubcs.omd.mapper.LifeCycleNodeMapper; +import com.vci.ubcs.omd.entity.*; +import com.vci.ubcs.omd.mapper.*; import com.vci.ubcs.omd.repeater.DomainRepeater; import com.vci.ubcs.omd.service.IBtmTypeService; import com.vci.ubcs.omd.service.ILifeCycleService; import com.vci.ubcs.omd.service.IStatusService; -import com.vci.ubcs.omd.vo.BtmTypeVO; -import com.vci.ubcs.omd.vo.LifeCycleVO; -import com.vci.ubcs.omd.vo.StatusVO; +import com.vci.ubcs.omd.vo.*; +import com.vci.ubcs.omd.wrapper.LifeCycleEventWrapper; import com.vci.ubcs.omd.wrapper.LifeCycleRuleWrapper; import com.vci.ubcs.starter.enumpack.NewAppConstantEnum; import com.vci.ubcs.starter.exception.VciBaseException; @@ -85,6 +78,9 @@ @Lazy private IBtmTypeService btmTypeService; + @Resource + private LifeCycleEventMapper eventMapper; + /** * 鑾峰彇鐢熷懡鍛ㄦ湡鍒楄〃 @@ -99,6 +95,30 @@ } /** + * 鑾峰彇鍏ㄩ儴鐨勪簨浠� + * + * @param conditionMap 鏌ヨ鏉′欢 + * @param query 鍒嗛〉 + * @return 浜嬩欢鐨勬樉绀哄璞� + */ + @Override + public IPage<LifeCycleEventVO> listEvent(Map<String, Object> conditionMap, Query query) { + return LifeCycleEventWrapper.build().pageVO(eventMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(conditionMap, LifeCycleEvent.class).lambda().orderByAsc(LifeCycleEvent::getEventFullName))); + } + + public List<LifeCycleEventVO> listEventNoPage(){ + QueryWrapper<LifeCycleEvent> queryWrapper = new QueryWrapper(); + List<LifeCycleEvent> lifeCycleEvents = eventMapper.selectList(queryWrapper); + List<LifeCycleEventVO> vos = new ArrayList<>(); + lifeCycleEvents.stream().forEach(lifeCycleEvent -> { + LifeCycleEventVO vo = new LifeCycleEventVO(); + BeanUtil.convert(lifeCycleEvent,vo); + vos.add(vo); + }); + return vos; + } + + /** * 娣诲姞淇濆瓨 * * @param lifeCycleDTO 鏁版嵁浼犺緭瀵硅薄 @@ -109,8 +129,8 @@ public LifeCycleVO addSave(LifeCycleDTO lifeCycleDTO) { VciBaseUtil.alertNotNull(lifeCycleDTO,"鐢熷懡鍛ㄦ湡淇℃伅",lifeCycleDTO.getId(),"鐢熷懡鍛ㄦ湡鐨勭紪鍙�",lifeCycleDTO.getName(),"鐢熷懡鍛ㄦ湡鍚嶇О",lifeCycleDTO.getNodes(),"鐢熷懡鍛ㄦ湡鐨勮妭鐐�",lifeCycleDTO.getStartStatus(),"璧峰鐘舵��"); //鍏堟煡璇㈡槸鍚﹀瓨鍦� - QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class); - wrapper.eq("lower(id)",lifeCycleDTO.getId().toLowerCase(Locale.ROOT)); + QueryWrapper<LifeCycleRule> wrapper = new QueryWrapper<>(); + wrapper.eq("id",lifeCycleDTO.getId().toLowerCase(Locale.ROOT)); if(baseMapper.selectCount(wrapper)>0){ throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙蜂笉鑳介噸澶�"); } @@ -132,8 +152,6 @@ life.setOid(VciBaseUtil.getPk()); String creator = AuthUtil.getUserAccount(); Date now = new Date(); - life.setBtmname(BtmTypeConstant.LIFE_CYCLE); - life.setOwner(creator); life.setCreator(creator); life.setCreateTime(now); life.setLastModifier(creator); @@ -197,8 +215,6 @@ LifeCycleLineEvent event = org.springblade.core.tool.utils.BeanUtil.copy(eventDTO, LifeCycleLineEvent.class); event.setOid(VciBaseUtil.getPk()); event.setPkLifeCycleEdge(edgeOid); - event.setBtmname(BtmTypeConstant.LIFE_CYCLE_LINE_EVENT); - event.setOwner(creator); event.setCreator(creator); event.setCreateTime(now); event.setLastModifier(creator); @@ -219,8 +235,6 @@ LifeCycleNode node = org.springblade.core.tool.utils.BeanUtil.copy(nodeDTO, LifeCycleNode.class); node.setOid(VciBaseUtil.getPk()); node.setLifeCycleOid(lifeOid); - node.setBtmname(BtmTypeConstant.LIFE_CYCLE_NODE); - node.setOwner(creator); node.setCreator(creator); node.setCreateTime(now); node.setLastModifier(creator); @@ -239,7 +253,7 @@ * @return 杩炴帴绾跨殑涓婚敭 */ private String addLifeCycleEdge(LifeCycleEdgeDTO edgeDTO,List<String> statusList,String lifeOid,String creator,Date now){ - VciBaseUtil.alertNotNull(edgeDTO.getSource(),"鏉ユ簮鐘舵��",edgeDTO.getTarget(),"鐩爣鐘舵��",edgeDTO.getName(),"杩炴帴绾垮悕绉�"); + VciBaseUtil.alertNotNull(edgeDTO.getSource(),"鏉ユ簮鐘舵��",edgeDTO.getTarget(),"鐩爣鐘舵��"); if(!statusList.contains(edgeDTO.getSource()) ||!statusList.contains(edgeDTO.getTarget())){ throw new VciBaseException("鏁版嵁閿欒锛孾" + edgeDTO.getName() + "]杩炴帴绾夸笂涓娇鐢ㄧ殑鐘舵�佹病鏈夋壘鍒�"); @@ -247,8 +261,6 @@ LifeCycleEdge edge = org.springblade.core.tool.utils.BeanUtil.copy(edgeDTO, LifeCycleEdge.class); edge.setOid(VciBaseUtil.getPk()); edge.setLifeCycleOid(lifeOid); - edge.setBtmname(BtmTypeConstant.LIFE_CYCLE_EDGE); - edge.setOwner(creator); edge.setCreator(creator); edge.setCreateTime(now); edge.setLastModifier(creator); @@ -268,7 +280,7 @@ */ @Override @Transactional - public List<LifeCycleVO> batchAddSave(List<LifeCycleDTO> lifeCycleDTOs) { + public List<LifeCycleVO> batchAddSave(Collection<LifeCycleDTO> lifeCycleDTOs) { VciBaseUtil.alertNotNull(lifeCycleDTOs,"鐢熷懡鍛ㄦ湡鐨勪俊鎭�"); //鍏堥泦浣撴牎楠屼竴涓� if(lifeCycleDTOs.stream().anyMatch(s->!StringUtils.hasLength(s.getId()) || !StringUtils.hasLength(s.getName()) @@ -276,7 +288,7 @@ throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙凤紝鍚嶇О锛岃捣濮嬬姸鎬侊紝鍖呭惈鐨勮妭鐐逛笉鑳戒负绌�"); } //缁熶竴鏍¢獙閲嶅 - Map<String, List<LifeCycleDTO>> dtoMap = lifeCycleDTOs.stream().collect(Collectors.groupingBy(LifeCycleDTO::getId)); + Map<String, List<LifeCycleDTO>> dtoMap = lifeCycleDTOs.stream().collect(Collectors.groupingBy(s->s.getId().toLowerCase(Locale.ROOT))); dtoMap.forEach((id,dtos)->{ if(dtos.size()>1){ throw new VciBaseException("缂栧彿涓恒��" + id + "銆戠殑鐢熷懡鍛ㄦ湡閲嶅"); @@ -286,7 +298,7 @@ ids->{ QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class); ids.stream().forEach(id->{ - wrapper.eq("lower(id)",id.toLowerCase(Locale.ROOT)); + wrapper.eq("lower(id)",id); wrapper.or(); }); wrapper.eq("1","2"); @@ -304,6 +316,184 @@ } /** + * 淇敼淇濆瓨 + * + * @param lifeCycleDTO 鏁版嵁浼犺緭瀵硅薄 + * @return + */ + @Override + public LifeCycleVO editSave(LifeCycleDTO lifeCycleDTO) { + VciBaseUtil.alertNotNull(lifeCycleDTO,"鐢熷懡鍛ㄦ湡淇℃伅",lifeCycleDTO.getId(),"鐢熷懡鍛ㄦ湡鐨勭紪鍙�",lifeCycleDTO.getName(),"鐢熷懡鍛ㄦ湡鍚嶇О" + ,lifeCycleDTO.getNodes(),"鐢熷懡鍛ㄦ湡鐨勮妭鐐�",lifeCycleDTO.getStartStatus(),"璧峰鐘舵��", + lifeCycleDTO.getOid(),"涓婚敭"); + LifeCycleRule rule = selectByOid(lifeCycleDTO.getOid()); + //鏌ヨ閲嶅 + QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class); + + wrapper.eq("lower(id)",lifeCycleDTO.getId().toLowerCase(Locale.ROOT)); + wrapper.ne("oid",lifeCycleDTO.getOid()); + if(baseMapper.selectCount(wrapper)>0){ + throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙蜂笉鑳介噸澶�"); + } + editLifeCycle(lifeCycleDTO,rule); + return LifeCycleRuleWrapper.build().entityVO(getById(rule.getOid())); + } + + public LifeCycleVO detail(LifeCycleDTO lifeCycleDTO){ + QueryWrapper wrapper = Condition.getQueryWrapper(org.springblade.core.tool.utils.BeanUtil.copy(lifeCycleDTO, LifeCycleRule.class)); + LifeCycleRule lifeCycleRule = baseMapper.selectOne(wrapper); + LifeCycleVO vo = LifeCycleRuleWrapper.build().entityVO(lifeCycleRule); + String lifeOid = lifeCycleRule.getOid(); + + QueryWrapper<LifeCycleNode> nodeWrapper = new QueryWrapper<>(); + nodeWrapper.eq("life_cycle_oid",lifeOid.toLowerCase(Locale.ROOT)); + List<LifeCycleNode> nodes = nodeMapper.selectList(nodeWrapper); + List<LifeCycleNodeVO> nodeVos = new ArrayList<>(); + nodes.stream().forEach(doo->{ + LifeCycleNodeVO vo1 = new LifeCycleNodeVO(); + BeanUtil.convert(doo,vo1); + nodeVos.add(vo1); + }); + vo.setNodes(nodeVos); + + QueryWrapper<LifeCycleEdge> edgeWrapper = new QueryWrapper<>(); + edgeWrapper.eq("life_cycle_oid",lifeOid.toLowerCase(Locale.ROOT)); + List<LifeCycleEdge> edges = edgeMapper.selectList(edgeWrapper); + List<LifeCycleEdgeVO> edgeVos = new ArrayList<>(); + edges.stream().forEach(doo->{ + LifeCycleEdgeVO vo2 = new LifeCycleEdgeVO(); + BeanUtil.convert(doo,vo2); + edgeVos.add(vo2); + }); + vo.setEdges(edgeVos); + + return vo; + } + /** + * 淇敼鐢熷懡鍛ㄦ湡 + * @param lifeCycleDTO + * @param life + */ + private void editLifeCycle(LifeCycleDTO lifeCycleDTO,LifeCycleRule life){ + if(!lifeCycleDTO.getId().matches(RegExpConstant.LETTER)){ + throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙峰彧鑳芥槸瀛楁瘝"); + } + BeanUtil.convert(lifeCycleDTO,life); + String creator = AuthUtil.getUserAccount(); + Date now = new Date(); + life.setLastModifier(creator); + life.setLastModifyTime(now); + life.setTs(now); + + //鍒犻櫎鐜板湪鍏ㄩ儴鐨勬暟鎹紝鐒跺悗閲嶆柊娣诲姞= + List<LifeCycleNode> nodeList = selectNodeByLifeOid(life.getOid()); + List<LifeCycleEdge> edges = selectEdgeByLifeOid(life.getOid()); + List<LifeCycleLineEvent> eventList = selectEventByEdgeOids(Optional.ofNullable(edges).orElseGet(ArrayList::new).stream().map(LifeCycleEdge::getOid).collect(Collectors.toList())); + if(!CollectionUtils.isEmpty(nodeList)){ + nodeMapper.deleteBatchIds(nodeList.stream().map(LifeCycleNode::getOid).collect(Collectors.toList())); + } + if(!CollectionUtils.isEmpty(edges)){ + edgeMapper.deleteBatchIds(edges.stream().map(LifeCycleEdge::getOid).collect(Collectors.toList())); + } + if(!CollectionUtils.isEmpty(eventList)){ + lineEventMapper.deleteBatchIds(eventList.stream().map(LifeCycleLineEvent::getOid).collect(Collectors.toList())); + } + + List<String> statusList = new ArrayList<>(); + //澶勭悊鑺傜偣 + if(!CollectionUtils.isEmpty(lifeCycleDTO.getNodes())){ + lifeCycleDTO.getNodes().stream().forEach(nodeDTO->{ + addLifeCycleNode(nodeDTO,life.getOid(),creator,now); + statusList.add(nodeDTO.getId()); + }); + } + if(!statusList.contains(life.getStartStatus())){ + throw new VciBaseException("璧峰鐘舵�佷笉鍦ㄧ敓鍛藉懆鏈熺殑鐢诲竷涓�"); + } + //鍒ゆ柇鎵�鏈夌殑鑺傜偣鍦ㄧ郴缁熼噷閮藉瓨鍦� + List<String> existStatusIdList = statusService.listStatusByIdCollection(statusList).stream().map(StatusVO::getId).collect(Collectors.toList()); + String unExistStatus = statusList.stream().filter(s -> !existStatusIdList.contains(s)).collect(Collectors.joining(",")); + if(StringUtils.hasLength(unExistStatus)){ + throw new VciBaseException(unExistStatus + "杩欎簺鐘舵�佸湪鐘舵�佹睜閲屼笉瀛樺湪锛屼笉鑳芥坊鍔犲埌鐢熷懡鍛ㄦ湡涓�"); + } + //澶勭悊杈圭晫鍜岃繛鎺ョ嚎 + if(!CollectionUtils.isEmpty(lifeCycleDTO.getEdges())){ + lifeCycleDTO.getEdges().stream().forEach(edgeDTO->{ + String edgeOid = addLifeCycleEdge(edgeDTO,statusList,life.getOid(),creator,now); + if(!CollectionUtils.isEmpty(edgeDTO.getEvents())){ + //鏈変簨浠� + edgeDTO.getEvents().stream().forEach(eventDTO->{ + addLifeCycleLineEvent(eventDTO,edgeOid,creator,now); + }); + } + }); + } + baseMapper.updateById(life); + + } + + /** + * 浣跨敤涓婚敭鏌ヨ + * @param oid + * @return + */ + private LifeCycleRule selectByOid(String oid){ + LifeCycleRule rule = null; + try { + rule = getById(oid); + }catch (Throwable e){ + throw new VciBaseException("浣跨敤涓婚敭鑾峰彇瀵硅薄鍑洪敊锛岃繖涓暟鎹彲鑳戒笉瀛樺湪锛屾垨鑰呮暟鎹噸澶嶄簡"); + } + return rule; + } + + /** + * 鎵归噺淇敼淇濆瓨 + * + * @param lifeCycleDTOs + * @return + */ + @Override + public List<LifeCycleVO> batchEditSave(Collection<LifeCycleDTO> lifeCycleDTOs) { + if(CollectionUtils.isEmpty(lifeCycleDTOs)){ + return new ArrayList<>(); + } + if(lifeCycleDTOs.stream().anyMatch(s->!StringUtils.hasLength(s.getId()) || !StringUtils.hasLength(s.getName()) + || CollectionUtils.isEmpty(s.getNodes()) || !StringUtils.hasLength(s.getStartStatus()))){ + throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙凤紝鍚嶇О锛岃捣濮嬬姸鎬侊紝鍖呭惈鐨勮妭鐐逛笉鑳戒负绌�"); + } + //缁熶竴鏍¢獙閲嶅 + Map<String, List<LifeCycleDTO>> dtoMap = lifeCycleDTOs.stream().collect(Collectors.groupingBy(s->s.getId().toLowerCase(Locale.ROOT))); + dtoMap.forEach((id,dtos)->{ + if(dtos.size()>1){ + throw new VciBaseException("缂栧彿涓恒��" + id + "銆戠殑鐢熷懡鍛ㄦ湡閲嶅"); + } + }); + VciBaseUtil.switchCollectionForOracleIn(dtoMap.keySet()).stream().forEach( + ids->{ + QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class); + ids.stream().forEach(id->{ + wrapper.eq("lower(id)",id); + wrapper.ne("oid",dtoMap.get(id).get(0).getOid()); + wrapper.or(); + }); + wrapper.eq("1","2"); + if(baseMapper.selectCount(wrapper)>0){ + throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙蜂笉鑳介噸澶�"); + } + } + ); + List<String> oidList = lifeCycleDTOs.stream().map(LifeCycleDTO::getOid).collect(Collectors.toList()); + List<LifeCycleRule> rules = listByIds(oidList); + if(!CollectionUtils.isEmpty(rules)){ + rules.stream().forEach(life->{ + editLifeCycle(dtoMap.get(life.getId().toLowerCase(Locale.ROOT)).get(0),life); + }); + } + return LifeCycleRuleWrapper.build().listEntityVO(listByIds(oidList)); + } + + /** * 鍒犻櫎鐢熷懡鍛ㄦ湡 * * @param lifeCycleDTO 鏁版嵁浼犺緭瀵硅薄 @@ -312,22 +502,93 @@ @Transactional public void delete(LifeCycleDTO lifeCycleDTO) { VciBaseUtil.alertNotNull(lifeCycleDTO,"鏁版嵁浼犺緭瀵硅薄",lifeCycleDTO.getOid(),"涓婚敭"); - LifeCycleRule rule = null; - try { - rule = getById(lifeCycleDTO.getOid()); - }catch (Throwable e){ - throw new VciBaseException("浣跨敤涓婚敭鑾峰彇瀵硅薄鍑洪敊锛岃繖涓暟鎹彲鑳戒笉瀛樺湪锛屾垨鑰呮暟鎹噸澶嶄簡"); - } + LifeCycleRule rule = selectByOid(lifeCycleDTO.getOid()); //妫�鏌ヨ寮曠敤涓嶈兘鍒犻櫎 - Integer count = btmTypeService.countByLifeId(lifeCycleDTO.getOid()); + Integer count = btmTypeService.countByLifeId(lifeCycleDTO.getId()); if(count !=null && count>0){ throw new VciBaseException("鐢熷懡鍛ㄦ湡琚娇鐢紝涓嶈兘琚垹闄�"); } //鎴戜滑鏌ヨ鍏ㄩ儴node鍜宔dge锛岀劧鍚庝竴璧峰垹闄� + List<LifeCycleNode> nodeList = selectNodeByLifeOid(rule.getOid()); + List<LifeCycleEdge> edges = selectEdgeByLifeOid(rule.getOid()); + List<LifeCycleLineEvent> eventList = selectEventByEdgeOids(Optional.ofNullable(edges).orElseGet(ArrayList::new).stream().map(LifeCycleEdge::getOid).collect(Collectors.toList())); + if(!CollectionUtils.isEmpty(nodeList)){ + nodeMapper.deleteBatchIds(nodeList.stream().map(LifeCycleNode::getOid).collect(Collectors.toList())); + } + if(!CollectionUtils.isEmpty(edges)){ + edgeMapper.deleteBatchIds(edges.stream().map(LifeCycleEdge::getOid).collect(Collectors.toList())); + } + if(!CollectionUtils.isEmpty(eventList)){ + lineEventMapper.deleteBatchIds(eventList.stream().map(LifeCycleLineEvent::getOid).collect(Collectors.toList())); + } + baseMapper.deleteById(rule); + } + /** + * 鏌ヨ閾炬帴绾� + * @param lifeOid + * @return + */ + private List<LifeCycleEdge> selectEdgeByLifeOid(String lifeOid){ + if(!StringUtils.hasLength(lifeOid)){ + return new ArrayList<>(); + } + LambdaQueryWrapper<LifeCycleEdge> query = new LambdaQueryWrapper<LifeCycleEdge>(); + query.eq(LifeCycleEdge::getLifeCycleOid,lifeOid); + return edgeMapper.selectList(query); } + /** + * 鑾峰彇鑺傜偣鐨勪俊鎭� + * @param lifeOids 鐢熷懡鍛ㄦ湡鐨勪富閿泦鍚� + * @return + */ + private List<LifeCycleEdge> selectEdgeByLifeOids(Collection<String> lifeOids){ + if(!CollectionUtils.isEmpty(lifeOids)){ + return new ArrayList<>(); + } + List<LifeCycleEdge> edgeList = new ArrayList<>(); + VciBaseUtil.switchCollectionForOracleIn(lifeOids).stream().forEach(lOids->{ + LambdaQueryWrapper<LifeCycleEdge> query = new LambdaQueryWrapper<LifeCycleEdge>(); + lOids.stream().forEach(lOid->{ + query.eq(LifeCycleEdge::getLifeCycleOid,lOid); + query.or(); + }); + query.eq(LifeCycleEdge::getLifeCycleOid,"-1"); + edgeList.addAll(edgeMapper.selectList(query)); + }); + return edgeList; + } + + /** + * 鏌ヨ閾炬帴绾夸笂鐨勪簨浠� + * @param edgeOids + * @return + */ + private List<LifeCycleLineEvent> selectEventByEdgeOids(Collection<String> edgeOids){ + if(CollectionUtils.isEmpty(edgeOids)){ + return new ArrayList<>(); + } + List<LifeCycleLineEvent> eventList = new ArrayList<>(); + VciBaseUtil.switchCollectionForOracleIn(edgeOids).stream().forEach(edgeOidList->{ + LambdaQueryWrapper<LifeCycleLineEvent> query = new LambdaQueryWrapper<LifeCycleLineEvent>(); + edgeOidList.stream().forEach(edgeOid->{ + query.eq(LifeCycleLineEvent::getPkLifeCycleEdge,edgeOid); + query.or(); + }); + query.eq(LifeCycleLineEvent::getPkLifeCycleEdge,"-1"); + eventList.addAll(lineEventMapper.selectList(query)); + }); + return eventList; + } + + + /** + * 鑾峰彇鑺傜偣鐨勪俊鎭� + * @param lifeOid + * @return + */ private List<LifeCycleNode> selectNodeByLifeOid(String lifeOid){ if(!StringUtils.hasLength(lifeOid)){ return new ArrayList<>(); @@ -338,13 +599,60 @@ } /** + * 鑾峰彇鑺傜偣鐨勪俊鎭� + * @param lifeOids 鐢熷懡鍛ㄦ湡鐨勪富閿泦鍚� + * @return + */ + private List<LifeCycleNode> selectNodeByLifeOids(Collection<String> lifeOids){ + if(!CollectionUtils.isEmpty(lifeOids)){ + return new ArrayList<>(); + } + List<LifeCycleNode> nodeList = new ArrayList<>(); + VciBaseUtil.switchCollectionForOracleIn(lifeOids).stream().forEach(lOids->{ + LambdaQueryWrapper<LifeCycleNode> query = new LambdaQueryWrapper<LifeCycleNode>(); + lOids.stream().forEach(lOid->{ + query.eq(LifeCycleNode::getLifeCycleOid,lOid); + query.or(); + }); + query.eq(LifeCycleNode::getLifeCycleOid,"-1"); + nodeList.addAll(nodeMapper.selectList(query)); + }); + return nodeList; + } + + /** * 鎵归噺鍒犻櫎鐢熷懡鍛ㄦ湡 * * @param lifeCycleDTOs 鏁版嵁浼犺緭瀵硅薄鍒楄〃 */ @Override + @Transactional public void batchDelete(List<LifeCycleDTO> lifeCycleDTOs) { - + VciBaseUtil.alertNotNull(lifeCycleDTOs,"鐢熷懡鍛ㄦ湡鐨勪俊鎭�"); + if(lifeCycleDTOs.stream().anyMatch(s->!StringUtils.hasLength(s.getOid()))){ + throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勪富閿笉鑳戒负绌�"); + } + List<String> oidList = lifeCycleDTOs.stream().map(LifeCycleDTO::getOid).collect(Collectors.toList()); + List<LifeCycleRule> lifeList = baseMapper.selectBatchIds(oidList); + //鎵归噺鏌ヨ + String usedBtmTypeId = Optional.ofNullable(btmTypeService.selectByLifeIds(lifeList.stream().map(LifeCycleRule::getId).collect(Collectors.toList()))).orElseGet(ArrayList::new).stream().map(BtmTypeVO::getId).collect(Collectors.joining(",")); + if(StringUtils.hasLength(usedBtmTypeId)){ + throw new VciBaseException(usedBtmTypeId + "杩欎簺涓氬姟绫诲瀷寮曠敤浜嗙敓鍛藉懆鏈燂紝涓嶈兘鍒犻櫎"); + } + List<LifeCycleNode> nodeList = selectNodeByLifeOids(oidList); + List<LifeCycleEdge> edgeList = selectEdgeByLifeOids(oidList); + if(!CollectionUtils.isEmpty(nodeList)){ + nodeMapper.deleteBatchIds(nodeList.stream().map(LifeCycleNode::getOid).collect(Collectors.toList())); + } + if(!CollectionUtils.isEmpty(edgeList)){ + List<String> edgeOids = edgeList.stream().map(LifeCycleEdge::getOid).collect(Collectors.toList()); + edgeMapper.deleteBatchIds(edgeOids); + List<LifeCycleLineEvent> eventList = selectEventByEdgeOids(edgeOids); + if(!CollectionUtils.isEmpty(eventList)){ + lineEventMapper.deleteBatchIds(eventList.stream().map(LifeCycleLineEvent::getOid).collect(Collectors.toList())); + } + } + baseMapper.deleteBatchIds(oidList); } /** @@ -355,6 +663,8 @@ */ @Override public List<BtmTypeVO> listUses(LifeCycleDTO lifeCycleDTO) { - return null; + VciBaseUtil.alertNotNull(lifeCycleDTO,"鏁版嵁浼犺緭瀵硅薄",lifeCycleDTO.getOid(),"涓婚敭"); + LifeCycleRule rule = selectByOid(lifeCycleDTO.getOid()); + return btmTypeService.selectByLifeId(rule.getId()); } } -- Gitblit v1.9.3