From 91560799c8088421983a6168c95b84a5d617df05 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 17 十一月 2023 02:00:44 +0800
Subject: [PATCH] 历史数据导入、批量申请、申请编码接口代码逻辑中关键属性校验增加过滤条件

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java |  136 +++++++++++++++++++++++++++++++-------------
 1 files changed, 95 insertions(+), 41 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
index f4dbaa3..ea0a767 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -32,14 +32,19 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
+import org.springframework.transaction.support.TransactionTemplate;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
@@ -79,38 +84,40 @@
 	@Autowired
 	private FormulaServiceImpl formulaService;
 
+	// 娉ㄥ叆浜嬪姟绠$悊鍣�
+//	@Autowired
+//	private TransactionTemplate transactionTemplate;
+
 	@Override
-	@Transactional(rollbackFor = VciBaseException.class)
+	@Transactional(rollbackFor = Exception.class)
 	public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception {
 		dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList());
 		List<String> codeList = new ArrayList<>();
-
+		final CodeRuleVO finalRuleVO = ruleVO;
 		/*****
 		 * 淇濊瘉骞跺彂鐨勬椂鍊欙紝鏈�澶ф祦姘村彿閮藉鐨勶紝浣嗘槸杩欑鍔犻攣鏈夊紛绔�
-		 *
 		 */
-
 		if(dataCBOList.stream().anyMatch(cbo-> StringUtils.isNotBlank(cbo.getId()))
-//			&& StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD))
-			){
+			// && StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD))
+		){
 			//鏄巻鍙叉暟鎹鍏�
 			//鍘嗗彶鏁版嵁鎵ц鐨勬椂鍊欙紝杩欎釜绯荤粺浼氬緢鍗�
 			//涓昏鏄负浜嗗綍鍏ユ渶澶ф祦姘村彿鍜宎llcode
-//			SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-			List<CodeAllCode> allCodeDOList = new ArrayList<>();
+			//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+			List<CodeAllCode> allCodeDOList = new CopyOnWriteArrayList<>();
 			Map<String/**娴佹按渚濇嵁**/, Map<String/**鐮佹鐨勪富閿�**/,Double/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new HashMap<>();
 			// TODO 澶氱嚎绋嬫祦寮曞彂鐨勯棶棰樺凡淇敼
 			dataCBOList.parallelStream().forEach(cbo->{
 				log.info("code:----->"+cbo.getId());
-//				VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+				//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
 				String code = cbo.getId();
-				List<String> serialUnitList = new ArrayList<>();
+				List<String> serialUnitList = new CopyOnWriteArrayList<>();
 				String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD);
 				String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
 				cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//灏嗘key闄ゅ幓
 				cbo.getData().remove(IMPORT_ROW_INDEX);//灏嗘key闄ゅ幓
 				cbo.getData().remove("codeclassifyid");//灏嗘key闄ゅ幓
-				List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
+				List<CodeBasicSecVO> secVOList = finalRuleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
 				Map<String/**鐮佹鐨勪富閿�**/,String/**鐮佹鐨勫��**/> serialValueMap = new HashMap<>();
 				Map<String, CodeBasicSecVO> secVOMap = secVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
 				for (int i = 0; i < secLengths.length; i++) {
@@ -127,7 +134,7 @@
 							start += VciBaseUtil.getInt(secLengths[j]);
 						}
 						thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[i]));
-				//	}
+					//	}
 					if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){
 						serialUnitList.add(thisSecValue);
 					}
@@ -142,13 +149,15 @@
 						//瑕佺湅鏄笉鏄ˉ浣嶇殑
 						CodeBasicSecVO secVO = secVOMap.get(secOid);
 						Double serialDb = null;
+						// 鎴彇鎺夊墠鍚庣紑涔嬪悗鐨勭爜娈�
+						String subSecValue = killPriffixSuffix(secValue, secVO.getPrefixCode(), secVO.getSuffixCode());
 						if(OsCodeFillTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getCodeFillType())){
 							//涓嶈ˉ鐮�
 							//鎶婃墍鏈変笉鏄暟瀛楃殑鍘绘帀锛屽洜涓哄彲鑳戒細鏄�佹暟鎹紝鏂拌鍒�
-							serialDb = VciBaseUtil.getDouble(killUnNumberChar(secValue));
+							serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue));
 						}else {
 							//宸﹀彸濉厖鐨勶紝鎴戜滑闇�瑕�
-							serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(secValue,secVO.getCodeFillSeparator(),
+							serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(subSecValue,secVO.getCodeFillSeparator(),
 								OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));
 						}
 						Map<String, Double> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>());
@@ -167,7 +176,7 @@
 				CodeAllCode allCodeDO = new CodeAllCode();
 				DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE);
 				allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
-				allCodeDO.setCodeRuleOid(ruleVO.getOid());
+				allCodeDO.setCodeRuleOid(finalRuleVO.getOid());
 				allCodeDO.setId(cbo.getId());
 				allCodeDO.setCodeClassifyTemplateOid(templateVO.getOid());
 				allCodeDO.setCreateCodeBtm(cbo.getBtmname());
@@ -185,7 +194,7 @@
 			maxSerialMap.forEach((serialUnit,secOidMaxMap)->{
 				secOidMaxMap.forEach((secOid,maxSerial)->{
 					QueryWrapper<CodeSerialValue> queryWrapper = new QueryWrapper<>();
-					queryWrapper.eq("codeRuleOid", ruleVO.getOid());
+					queryWrapper.eq("codeRuleOid", finalRuleVO.getOid());
 					queryWrapper.eq("serialUnit", serialUnit);
 					//杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂
 					queryWrapper.eq("codeSecOid", secOid);
@@ -204,7 +213,7 @@
 						//娌℃湁
 						CodeSerialValue serialValueDO = new CodeSerialValue();
 						DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
-						serialValueDO.setCodeRuleOid(ruleVO.getOid());
+						serialValueDO.setCodeRuleOid(finalRuleVO.getOid());
 						serialValueDO.setSerialUnit(serialUnit);
 						serialValueDO.setCodeSecOid(secOid);
 						serialValueDO.setMaxSerial(maxSerial.toString());
@@ -227,8 +236,8 @@
 				// TODO 鍘嗗彶鏁版嵁瀵煎叆鐨勬椂鍊欒繖鍎垮伓灏斾細瑙﹀彂绌烘寚閽堝紓甯�
 				Map<String,List<CodeAllCode>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid()));
 				Map<String, CodeAllCode> codeDOMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getCodeRuleOid() + "${SEP}" + s.getId(), t -> t));
-				List<CodeAllCode> addCodeDOs = new ArrayList<>();
-				List<CodeAllCode> editCodeDOs = new ArrayList<>();
+				List<CodeAllCode> addCodeDOs = new CopyOnWriteArrayList<>();
+				List<CodeAllCode> editCodeDOs = new CopyOnWriteArrayList<>();
 				ruleGroup.forEach((ruleOid,allCodeDOS)->{
 					VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{
 						QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -263,6 +272,10 @@
 				if(!CollectionUtils.isEmpty(editCodeDOs)){
 					codeAllCodeService.updateBatchById(editCodeDOs);
 				}
+				// 鑾峰彇浜嬪姟瀹氫箟
+				//DefaultTransactionDefinition def = new DefaultTransactionDefinition();
+				// 寮�濮嬩簨鍔�
+				//TransactionStatus status = transactionTemplate.getTransactionManager().getTransaction(def);
 				if(!CollectionUtils.isEmpty(addCodeDOs)){
 					Map<String, String> statusMap = addCodeDOs.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
 					addCodeDOs.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
@@ -273,7 +286,7 @@
 						.collectingAndThen(
 							Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
 							ArrayList::new));
-					if( distinctCodeAllCOdes.size() != addCodeDOs.size() ){
+					if(distinctCodeAllCOdes.size() != addCodeDOs.size() ){
 						throw new VciBaseException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒");
 					}
 					QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
@@ -285,7 +298,6 @@
 						throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
 					}
 					for (CodeAllCode codeAllCode : takeBack) {
-						codeAllCode.setLcStatus("Released");
 						codeAllCode.setTs(new Date());
 						codeAllCode.setLastModifyTime(new Date());
 						codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
@@ -294,20 +306,23 @@
 							CodeAllCode next = iterator.next();
 							if(codeAllCode.getId().equals(next.getId())){
 								codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
-								iterator.remove();
+								codeAllCode.setLcStatus(next.getLcStatus());
+								// TODO: 杩欏効鍏堟殏鏃舵敞閲婃帀锛屾病鐪嬫噦杩欏効涓轰粈涔堣杩欐牱鍋氾紝瀵艰嚧鎶ラ敊
+								//iterator.remove();
 							}
 						}
 					}
 					if(takeBack.size()>0){
 						codeAllCodeService.updateBatchById(takeBack);
 					}
+
 					codeAllCodeService.saveBatch(addCodeDOs);
 				}
 				mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
 			}
 			return codeList;
 		}else {
-			List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
+			List<CodeBasicSecVO> secVOList = finalRuleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
 			List<String> serialUnitList = new LinkedList<>();
 			List<String> secValueList = new ArrayList<>();
 			Map<String, String> secValueMap = secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), s -> s.getSecValue()==null?"":s.getSecValue()));
@@ -343,7 +358,7 @@
 				switchAttrSecValue(attrSecVOList, cbo, thisSecValueList, attrSevIsSerialDepend, thisSerialUnitList);
 
 				String serialUnitString = thisSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : thisSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
-				switchSerialSecValue(serialSecVOList, attrSevIsSerialDepend, ruleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0);
+				switchSerialSecValue(serialSecVOList, attrSevIsSerialDepend, finalRuleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0);
 
 				//缁勮缂栫爜鐨勫��
 				cbo.setId(thisSecValueList.stream().collect(Collectors.joining()));
@@ -358,21 +373,19 @@
 					}
 				}
 				//瑕佸瓨鍌ㄦ渶鍚庣殑鍏ㄩ儴allcode
-				wrapperAllCode(classifyFullInfoBO, ruleVO, cbo, templateVO, allCodeDOList, serialUnitString, sb.toString());
+				wrapperAllCode(classifyFullInfoBO, finalRuleVO, cbo, templateVO, allCodeDOList, serialUnitString, sb.toString());
 			}
 			//澶勭悊鏈�澶ф祦姘�
-			saveSerialValue( ruleVO, lastMaxSerialValueMap, maxSerialValueMap);
+			saveSerialValue( finalRuleVO, lastMaxSerialValueMap, maxSerialValueMap);
 
 			allCodeDOList.stream().forEach(
 				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
 			);
 
-
 			Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
 			allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
 				s.setLcStatus(statusMap.get(s.getOid()));
 			});
-
 
 			//閫氳繃ID鏉ヨ繘琛屽幓閲�
 			List<CodeAllCode> distinctCodeAllCOdes = allCodeDOList.stream().collect(Collectors
@@ -392,7 +405,6 @@
 			}
 
 			for (CodeAllCode codeAllCode : takeBack) {
-				codeAllCode.setLcStatus("Released");
 				codeAllCode.setTs(new Date());
 				codeAllCode.setLastModifyTime(new Date());
 				codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
@@ -401,6 +413,7 @@
 					CodeAllCode next = iterator.next();
 					if(codeAllCode.getId().equals(next.getId())){
 						codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
+						codeAllCode.setLcStatus(next.getLcStatus());
 						iterator.remove();
 					}
 				}
@@ -411,7 +424,6 @@
 			codeAllCodeService.saveBatch(allCodeDOList);
 //			iCodeWupinService.saveBatch(dataCBOList);
 			mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
-
 //			batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> {
 //				s.setLcStatus(statusMap.get(s.getOid()));
 //				try {
@@ -421,10 +433,11 @@
 //				}
 //			});
 		}
-//		WebUtil.setPersistence(true);
-//		boService.persistenceBatch(batchCBO);
+		// WebUtil.setPersistence(true);
+		// boService.persistenceBatch(batchCBO);
 		return codeList;
 	}
+
 	/**
 	 * 杞崲灞炴�х爜娈电殑鍊�
 	 * @param attrSecVOList 灞炴�х爜娈电殑鏄剧ず瀵硅薄
@@ -453,7 +466,8 @@
 				for (int j = 0; j < thisSecValueList.size(); j++) {
 					String secValue = thisSecValueList.get(j);
 					if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) {
-						thisSecValueList.set(j, value);
+						// TODO: 灞炴�х爜娈电敓鎴愮爜鍊煎悗锛屾嫾鎺ュ墠鍚庣紑
+						thisSecValueList.set(j, joinPreffixAndSuffix(attrSevVO,value));
 					}
 				}
 				if (attrSevIsSerialDepend) {
@@ -461,14 +475,13 @@
 					for (int j = 0; j < serialUnitList.size(); j++) {
 						String secValue = serialUnitList.get(j);
 						if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) {
-							serialUnitList.set(j, value);
+							serialUnitList.set(j, joinPreffixAndSuffix(attrSevVO,value));
 						}
 					}
 				}
 			});
 		}
 	}
-
 
 	/**
 	 * 杞崲娴佹按鐮佹鐨勫��
@@ -538,7 +551,8 @@
 				for (int z = 0; z < thisSecValueList.size(); z++) {
 					String secValue = thisSecValueList.get(z);
 					if (secValue.equalsIgnoreCase("${" + secVO.getOid() + "}")) {
-						thisSecValueList.set(z, serialString);
+						// TODO: 娴佹按鐢熸垚鐮佸�煎悗鎷兼帴鍓嶅悗缂�
+						thisSecValueList.set(z, joinPreffixAndSuffix(secVO, serialString));
 					}
 				}
 				Map<String, Double> unitSerialMap = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>());
@@ -566,18 +580,19 @@
 		String secValue = secValueMap.getOrDefault(secVO.getOid(), "");
 		switch (secType) {
 			case CODE_FIXED_SEC:
+				secValue = joinPreffixAndSuffix(secVO, secValue);
 				//鍥哄畾鐮佹鐨勶紝鐩存帴鐢ㄧ爜鍊�,涓嶈鐮佸�肩殑闀垮害鏄灏戯紝鍥犱负鍙彉闀垮害鍜屽浐瀹氶暱搴︽槸鎺у埗鍦ㄧ爜娈电鐞嗛噷闈㈢殑鐮佸�煎畾涔夌殑
 				break;
 			case CODE_DATE_SEC:
 				//鏃堕棿鐮佹锛岄渶瑕佸皢褰撳墠鏃堕棿渚濇嵁鏃堕棿鏍煎紡杩涜杞崲.
 				//鏃堕棿鐮佹涓嶆秹鍙婂埌鏄惁琛ヤ綅
-				secValue = VciDateUtil.date2Str(new Date(), secVO.getCodeDateFormatStr());
+				secValue =joinPreffixAndSuffix(secVO, VciDateUtil.date2Str(new Date(), secVO.getCodeDateFormatStr()));
 				break;
 			case CODE_CLASSIFY_SEC:
 				//鍒嗙被鐮佹鐨勶紝涔熸槸浠庡墠绔�夋嫨浜嗙爜鍊煎嵆鍙紝涓嶈鐮佸�肩殑闀垮害鏄灏�
 				CodeClassifyValue codeClassifyValueDO= codeClassifyValueMapper.selectById(secValue);
 				if(codeClassifyValueDO!=null) {
-					secValue = codeClassifyValueDO.getId();
+					secValue = joinPreffixAndSuffix(secVO, codeClassifyValueDO.getId());
 				}
 				break;
 			case CODE_LEVEL_SEC:
@@ -630,10 +645,12 @@
 						secValue = secValue.substring(secValue.length() - secVO.getValueCutLength());
 					}
 				}
+				secValue = joinPreffixAndSuffix(secVO,secValue);
 				break;
 			case CODE_REFER_SEC:
 				//寮曠敤鐨勫湪椤甸潰涓婂凡缁忛�夋嫨浜嗭紝鎵�浠ョ洿鎺ヤ娇鐢ㄥ墠绔笂浼犻�掔殑鍊�
 				//寮曠敤灏辨槸鍙傜収锛屽彲鑳芥槸鍏朵粬鐨勫垎绫伙紙涓氬姟绫诲瀷锛変笅鐨勬暟鎹紝鎵�浠ュ彧鍦ㄩ〉闈笂閫夋嫨
+				secValue = joinPreffixAndSuffix(secVO,secValue);
 				break;
 			case CODE_ATTR_SEC:
 				//灞炴�т笌寮曠敤鐨勫尯鍒槸锛屽睘鎬ф槸褰撳墠鏁版嵁閲岀殑灞炴�э紝鑰屽紩鐢ㄥ彲鑳芥槸寮曠敤鍏朵粬鐨勫垎绫荤殑锛堜笟鍔$被鍨嬶級
@@ -648,6 +665,7 @@
 				}
 				OsCodeFillTypeEnum fillTypeEnum = OsCodeFillTypeEnum.forValue(secVO.getCodeFillType());
 				secValue = fillString(VciBaseUtil.getInt(secVO.getCodeSecLength()), fillTypeEnum, secValue, secVO.getCodeFillSeparator());
+				secValue = joinPreffixAndSuffix(secVO,secValue);
 				break;
 			case CODE_SERIAL_SEC:
 				//娴佹按鐮佹
@@ -660,6 +678,27 @@
 			serialUnitList.add(secValue);
 		}
 		secValueList.add(secValue);
+	}
+
+	/**
+	 * 鎷兼帴鍓嶅悗缂�
+	 * @param secVO
+	 * @param secValue
+	 * @return
+	 */
+	private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
+		StringBuilder joinSecValue = new StringBuilder();
+		// 鎷兼帴鍓嶇紑
+		if (Func.isNotEmpty(secVO.getPrefixCode())) {
+			joinSecValue = joinSecValue.append(secVO.getPrefixCode());
+		}
+		// 鍦ㄤ腑闂存嫾鎺ュ��
+		joinSecValue.append(secValue);
+		// 鎷兼帴鍚庣紑
+		if(Func.isNotEmpty(secVO.getSuffixCode())){
+			joinSecValue = joinSecValue.append(secVO.getSuffixCode());
+		}
+		return joinSecValue.toString();
 	}
 
 	/**
@@ -712,9 +751,6 @@
 		allCodeDO.setLcStatus(cbo.getLcStatus());
 		allCodeDOList.add(allCodeDO);
 	}
-
-
-
 
 	/**
 	 * 淇濆瓨娴佹按鐨勪俊鎭�
@@ -780,6 +816,23 @@
 			value = value.substring(lastUnNumberIndex);
 		}
 		return value;
+	}
+
+	/**
+	 * 鍘绘帀鍓嶅悗缂�
+	 * @param secValue 瀛楃
+	 * @param priffix 鍓嶇紑
+	 * @param suffix 鍚庣紑
+	 * @return 鏇挎崲鍚庣殑鍊�
+	 */
+	private String killPriffixSuffix(String secValue, String priffix,String suffix){
+		if (priffix != null && secValue.startsWith(priffix)) {
+			secValue = secValue.substring(priffix.length());
+		}
+		if (suffix != null && secValue.endsWith(suffix)) {
+			secValue = secValue.substring(0, secValue.length() - suffix.length());
+		}
+		return secValue;
 	}
 
 	/**
@@ -879,4 +932,5 @@
 //		WebUtil.copyValueToMapFromCbos(cbo,dataMap);
 		return formulaService.getValueByFormula(map,rule);
 	}
+
 }

--
Gitblit v1.9.3