From 633d328380d7788740d3eba54b33aa69dc9afb02 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 25 一月 2024 22:14:38 +0800
Subject: [PATCH] 点击分类不显示按钮(模板创建时绑定的业务类型id有问题):改成用functionid进行查询,也就是菜单上配置的id

---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java |  179 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 139 insertions(+), 40 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
index b790554..a01d7d4 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -4,12 +4,13 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.api.exception.NacosException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.omd.constant.BtmTypeConstant;
 import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
 import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
-import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.entity.*;
 import com.vci.ubcs.omd.repeater.DomainRepeater;
 import com.vci.ubcs.omd.service.*;
 import com.vci.ubcs.omd.vo.*;
@@ -18,9 +19,6 @@
 import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
 import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
-import com.vci.ubcs.omd.entity.BtmType;
-import com.vci.ubcs.omd.entity.BtmTypeAttribute;
-import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
 import com.vci.ubcs.omd.mapper.BtmTypeMapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -84,6 +82,12 @@
 	 */
 	@Autowired
 	private IAttributeService attributeService;
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	 */
+	@Autowired
+	private ILifeCycleService lifeCycleService;
 
 	/**
 	 * 琛ㄥ悕鍓嶇紑
@@ -203,7 +207,7 @@
 	 */
 	@Override
 	public List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
-		return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection));
+		return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectByIdCollection(idCollection);
 	}
 
 	/**
@@ -387,7 +391,7 @@
 		ddlDTO.setBtmTypeList(btmTypeVOList);
 		try {
 			// 灏嗕互鍓嶇殑checkDifferent鍜宺eflexDifferent缁撳悎浜�
-			R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getDomain());
+			R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getBizDomain());
 			if (result.isSuccess()){
 				List<ModifyAttributeInfo> infoList = new ArrayList<>();
 				Object data = result.getData();
@@ -465,7 +469,7 @@
 	 * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public String getTableName(String id,String domain) throws ServiceException {
+	public String getTableName(String id,String domain) throws VciBaseException {
 		VciBaseUtil.alertNotNull(id,"涓氬姟绫诲瀷鑻辨枃鍚嶇О",domain,"棰嗗煙鍚嶇О");
 		if (domain.contains("ubcs-")){
 			domain = domain.split("ubcs-")[1];
@@ -482,8 +486,9 @@
 	 * @return 鎵ц缁撴灉
 	 */
 	@Override
-	public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) {
-		TransactionStatus transaction = null;
+	@Transactional(rollbackFor = Exception.class)
+	public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException {
+		/*TransactionStatus transaction = null;
 		DefaultTransactionDefinition def = null;
 		if (autoCreateTable) {
 			def = new DefaultTransactionDefinition();
@@ -491,15 +496,16 @@
 			// 浜嬬墿闅旂绾у埆锛屽紑鍚柊浜嬪姟锛岃繖鏍蜂細姣旇緝瀹夊叏浜涖��
 			transaction = dataSourceTransactionManager.getTransaction(def);
 			// 鑾峰緱浜嬪姟鐘舵��
-		}
-		checkBtmTypeBeforeSave(btmTypeDTO);
+		}*/
+		//checkBtmTypeBeforeSave(btmTypeDTO);
 		BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
+		btmTypeDO.setBizDomain(btmTypeDTO.getBizDomain());
 		List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
 		List<BtmTypeAttributeVO> afterAttributes;
 		if (StringUtils.isBlank(btmTypeDO.getOid())){
 			btmTypeDO = BtmTypeWrapper.build().entityBeforeInsert(btmTypeDO);
 			if (StringUtils.isBlank(btmTypeDO.getTableName())) {
-				btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getDomain()));
+				btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getBizDomain()));
 			}
 			// 娣诲姞灞炴��
 			btmTypeDTO.setOid(btmTypeDO.getOid());
@@ -510,6 +516,7 @@
 			List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
 			// 澶勭悊灞炴�э紝澶氫綑鐨勫垹闄わ紝涓嶅瓨鍦ㄧ殑娣诲姞
 			afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
+			baseMapper.updateByPrimaryKey(btmTypeDO);
 		}
 		BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
 		//鍦ㄥ垱寤鸿〃鐨勬椂鍊欒繕闇�瑕佹妸榛樿鐨勫瓧娈靛甫涓娿��
@@ -518,8 +525,8 @@
 		btmTypeVO.setAttributes(afterAttributes);
 		try {
 			if (autoCreateTable) {
-//				checkTableSame(btmTypeVO);
-				R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
+				// checkTableSame(btmTypeVO);
+				R result = DomainRepeater.submitBtmType(btmTypeDTO.getBizDomain(), btmTypeVO);
 				if (result.isSuccess()){
 					List<ModifyAttributeInfo> infoList = new ArrayList<>();
 					Object data = result.getData();
@@ -533,15 +540,17 @@
 						});
 						modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
 					}
-					dataSourceTransactionManager.commit(transaction);
+					// dataSourceTransactionManager.commit(transaction);
 				}else {
-					dataSourceTransactionManager.rollback(transaction);
-					return R.fail(result.getMsg());
+					// dataSourceTransactionManager.rollback(transaction);
+					// 鍒涘缓琛ㄦ姤閿欙紝鎶涘嚭寮傚父璁╄鏂规硶鍥炴粴
+					throw new VciBaseException(result.getMsg());
+					// return R.fail(result.getMsg());
 				}
 			}
 		} catch (Throwable e) {
 			if (autoCreateTable) {
-				dataSourceTransactionManager.rollback(transaction);
+//				dataSourceTransactionManager.rollback(transaction);
 				throw new VciBaseException(e.getMessage());
 			}
 		}
@@ -569,8 +578,12 @@
 		List<BtmTypeAttributeVO> voListAdd = btmTypeAttributeService.checkAndInsert(oid, addList, AuthUtil.getUserAccount(), new Date());
 		List<BtmTypeAttributeVO> voListUpdate = btmTypeAttributeService.checkAndUpdate(oid, modifyList, AuthUtil.getUserAccount(), new Date());
 		List<BtmTypeAttributeVO> returnList = new ArrayList<>();
-		returnList.addAll(Objects.requireNonNull(voListAdd));
-		returnList.addAll(Objects.requireNonNull(voListUpdate));
+		if(!CollectionUtils.isEmpty(voListAdd)) {
+			returnList.addAll(Objects.requireNonNull(voListAdd));
+		}
+		if(!CollectionUtils.isEmpty(voListUpdate)) {
+			returnList.addAll(Objects.requireNonNull(voListUpdate));
+		}
 		return returnList;
 	}
 
@@ -593,44 +606,45 @@
 		if (btmTypeDTO.getId().length() > 24) {
 			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О涓嶈兘瓒呰繃18锛岀洰鍓嶉暱搴︿负{0}", new Object[]{btmTypeDTO.getId().length()});
 		}
-		List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
+		List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId().toLowerCase(Locale.ROOT)));
 		if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
+			boolean exist = btmTypeDOList.stream().filter(btm -> StringUtils.isNotBlank(btm.getOid())).anyMatch(btm -> !StringUtils.equals(btmTypeDTO.getOid(), btm.getOid()));
 			BtmType existBtmType = btmTypeDOList.get(0);
-			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
-				, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
+			if (exist) {
+				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
+					, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
+			}
 		}
 		if (btmTypeDTO.isRevisionFlag()){
 			// 闇�瑕佹帶鍒剁増鏈�
 			// 妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
-				if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
-					if (!revisionRuleService.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
-						throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-							new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
-					}
+			if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
+				if (!revisionRuleService.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
+					throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+						new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
 				}
-			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
+			}
 		}
 		if (btmTypeDTO.isLifeCycleFlag()){
 			// 闇�瑕佹帶鍒剁敓鍛藉懆鏈�
 			//妫�鏌ヤ娇鐢ㄧ殑鐢熷懡鍛ㄦ湡鏄惁瀛樺湪
-//				if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
-//					&& !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
-//					if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
-//						throw new VciBaseException("鐢熷懡鍛ㄦ湡{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-//							new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
-//					}
-//				}
+				if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
+//					&& !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())
+				) {
+					if (lifeCycleService.getOne(Wrappers.<LifeCycleRule>query().lambda().eq(LifeCycleRule::getId,btmTypeDTO.getLifeCycleId())) == null) {
+						throw new VciBaseException("鐢熷懡鍛ㄦ湡{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+							new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
+					}
+				}
 //				if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
 //					if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
 //						throw new VciBaseException("澶囩敤鐢熷懡鍛ㄦ湡{0}[{1}]涓叾涓湁鏌愪簺鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
 //							new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
 //					}
 //				}
-//			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
 		}
 		if (btmTypeDTO.isSecretFlag()){
 			// 闇�瑕佹帶鍒跺瘑绾�
-//			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
 		}
 	}
 	@Override
@@ -653,7 +667,10 @@
 		try {
 			Map<String, String> domain = Optional.ofNullable(DomainRepeater.getDomain()).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel));
 			List<BtmTypeVO> vos = BtmTypeWrapper.build().listEntityVO(baseMapper.selectAll());
-			Map<String, List<BtmTypeVO>> domainMap = vos.stream().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getDomain));
+			if (CollectionUtils.isEmpty(vos)){
+				return new ArrayList<>();
+			}
+			Map<String, List<BtmTypeVO>> domainMap = Optional.ofNullable(vos).orElseGet(ArrayList::new).stream().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getBizDomain));
 			List<BtmTreeVO> treeList = new ArrayList<>();
 			domainMap.forEach((k,v)-> {
 				if (domain.containsKey(k)){
@@ -662,11 +679,13 @@
 					parent.setName(label);
 					parent.setLabel(label);
 					parent.setId(k);
+					parent.setLevel(1);
 					parent.setChildList(v.stream().map(s -> {
 						BtmTreeVO child = new BtmTreeVO();
 						child.setOid(s.getOid());
 						child.setName(s.getName());
 						child.setId(s.getId());
+						child.setLevel(2);
 						child.setLabel(s.getId() +  (s.getName() == null ? "" : "(" + s.getName() + ")"));
 						return child;
 					}).collect(Collectors.toList()));
@@ -736,7 +755,7 @@
 			btmType.setCreator(user);
 			btmType.setBtmName(BtmTypeConstant.BTMTYPE);
 			btmType.setCreateTime(now);
-			btmType.setDomain(domain);
+			btmType.setBizDomain(domain);
 			btmType.setLastModifyTime(now);
 			btmType.setLastModifier(user);
 			btmType.setName(dto.getDescription());
@@ -870,4 +889,84 @@
 		btmType.setAttributes(btmTypeAttributeService.getAllAttribute(btmType));
 		return btmType;
 	}
+
+	/**
+	 * 鑾峰彇寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeId 鐢熷懡鍛ㄦ湡鐨勭紪鍙�
+	 * @return 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<BtmTypeVO> selectByLifeId(String lifeId) {
+		if(StringUtils.isBlank(lifeId)){
+			return new ArrayList<>();
+		}
+		LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+		query.eq(BtmType::getLifeCycleId,lifeId);
+		return BtmTypeWrapper.build().listEntityVO(getBaseMapper().selectList(query));
+	}
+
+	/**
+	 * 鑾峰彇寮曠敤鏌愪簺鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeIds 鐢熷懡鍛ㄦ湡鐨勭紪鍙烽泦鍚�
+	 * @return 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<BtmTypeVO> selectByLifeIds(Collection<String> lifeIds) {
+		if(CollectionUtils.isEmpty(lifeIds)){
+			return new ArrayList<>();
+		}
+		List<BtmType> btmTypeList = new ArrayList<>();
+		VciBaseUtil.switchCollectionForOracleIn(lifeIds).stream().forEach(ids->{
+			LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+			ids.stream().forEach(id->{
+				query.eq(BtmType::getLifeCycleId,id);
+				query.or();
+			});
+			query.eq(BtmType::getLifeCycleId,"-1");
+			btmTypeList.addAll(baseMapper.selectList(query));
+		});
+		return BtmTypeWrapper.build().listEntityVO(btmTypeList);
+	}
+
+	/**
+	 * 缁熻寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeId 鐢熷懡鍛ㄦ湡鐨勭紪鍙�
+	 * @return 涓暟
+	 */
+	@Override
+	public Integer countByLifeId(String lifeId) {
+		if(StringUtils.isBlank(lifeId)){
+			return 0;
+		}
+		LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+		query.eq(BtmType::getLifeCycleId,lifeId);
+		return baseMapper.selectCount(query).intValue();
+	}
+
+	/**
+	 * 缁熻寮曠敤鏌愪簺鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeIds 鐢熷懡鍛ㄦ湡鐨勭紪鍙烽泦鍚�
+	 * @return 涓暟
+	 */
+	@Override
+	public Integer countByLifeIds(Collection<String> lifeIds) {
+		if(CollectionUtils.isEmpty(lifeIds)){
+			return 0;
+		}
+		final Integer[] total = {0};
+		VciBaseUtil.switchCollectionForOracleIn(lifeIds).stream().forEach(ids->{
+			LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+			ids.stream().forEach(id->{
+				query.eq(BtmType::getLifeCycleId,id);
+				query.or();
+			});
+			query.eq(BtmType::getLifeCycleId,"-1");
+			total[0] += baseMapper.selectCount(query).intValue();
+		});
+		return total[0];
+	}
 }

--
Gitblit v1.9.3