From 08e85d26f1a995ac13de724ddc683fa241b5ccc2 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 07 十二月 2023 16:53:36 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java |  123 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 111 insertions(+), 12 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index 09ec641..6b4bca3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -13,9 +13,7 @@
 import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
 import com.vci.ubcs.code.dto.*;
 import com.vci.ubcs.code.entity.CodeAllCode;
-import com.vci.ubcs.code.enumpack.CodeDefaultLC;
-import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
-import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
+import com.vci.ubcs.code.enumpack.*;
 import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
 import com.vci.ubcs.code.mapper.CommonsMapper;
 import com.vci.ubcs.code.service.*;
@@ -383,7 +381,7 @@
 		CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
 
 		//鑾峰彇鐮佹瀹藉害
-		//String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
+		String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
 
 		if(isHistory){
 			templateVOList= templateService.childTemplates(codeClassifyOid);
@@ -434,6 +432,8 @@
 				excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞",""));
 				excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害",""));
 				excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜",idAttrVOList.get(0).getId()));
+				// 濉厖鐮佹
+				excelDataList.add(new WriteExcelData(1,1,secWidth));
 			}
 			for (int i = 0; i < templateAttrVOS.size(); i++) {
 				CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
@@ -620,25 +620,124 @@
 	 * @return
 	 */
 	private String getCodeSegmentWidth(String codeClassifyOid){
-		CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
+		CodeClassifyFullInfoBO classifyFullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid);
 		// 瑕佽幏鍙栫爜娈靛搴︼紝鍏堣鑾峰彇瑙勫垯锛屽綋鍓嶆病鏈夊線涓婃壘
 		CodeRuleVO codeRuleByClassifyFullInfo = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid));
 		List<CodeBasicSecVO> secVOList = codeRuleByClassifyFullInfo.getSecVOList();
 		if(secVOList.isEmpty()){
 			return "";
 		}
-
 		StringBuffer secWidth = new StringBuffer("");
-
-		for (int j = 0; j < secVOList.size(); j++) {
-			CodeBasicSecVO secVO = secVOList.get(j);
-			int width = VciBaseUtil.getInt(secVO.getCodeSecLength()) + ((secVO.getPrefixCode() + secVO.getSuffixCode()).length());
-			secWidth.append(width).append("#");
-		}
+		secVOList.stream().forEach(item->{
+			switch (item.getSecType().toLowerCase(Locale.ROOT)){
+				case "codeclassifysec":
+				case "codevariablesec":
+				case "coderefersec":
+				case "codefixedsec":
+				case "codeattrsec":
+				case "codeserialsec":
+					countSecWith(item,secWidth);
+					break;
+				case "codelevelsec":
+					//灞傜骇鐮佹锛岄渶瑕佷粠鍒嗙被涓婅幏鍙栫浉搴旂殑淇℃伅
+					String secValue = "";
+					if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(item.getCodeLevelType())) {
+						//鏈�灏忓眰锛屽洜涓烘垜浠彧鑳藉湪鍙跺瓙鑺傜偣涓婄敵璇风紪鐮侊紝鎵�浠ヨ繖涓氨鏄綋鍓嶅垎绫荤殑
+						if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
+							//灏辨槸褰撳墠鍒嗙被鐨�
+							secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+						} else {
+							//鎴戜滑闇�瑕佷粠椤跺眰寮�濮嬫壘鍒板綋鍓嶅垎绫讳负姝�
+							secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
+						}
+					} else {
+						//鎸囧畾灞傦紝鎴戜滑闇�瑕侀�氳繃涓婄骇鐨勬潵鑾峰彇
+						if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
+							//璇存槑褰撳墠宸茬粡鏄渶楂樼殑浜�
+							secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+						} else {
+							//杩欎釜鎴戜滑闇�瑕佺湅鐪�,灞傜骇鏄笉鏄ぇ浜庝簡鏈�澶у眰绾х殑鏁�
+							List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
+							if (item.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) {
+								//鎸囧畾鐨勫眰绾ф瘮褰撳墠鐨勫眰绾ц繕澶т簡锛屾墍浠ュ彧鑳借幏鍙栧綋鍓嶅眰绾т簡
+								if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) {
+									secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+								} else {
+									secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
+								}
+							} else {
+								//鎴戜滑鑾峰彇鍏朵腑鎸囧畾灞傜殑鍐呭
+								if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) {
+									CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == item.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null);
+									if (classifyVO != null) {
+										secValue = classifyVO.getId();
+									}
+								} else {
+									//灏忎簬绛変簬鐨勫叏閮ㄦ嬁鍑烘潵
+									secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= item.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining());
+								}
+							}
+						}
+					}
+					//鐪嬬湅闀垮害鏄惁闇�瑕佹埅鏂�
+					if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(item.getValueCutType()) &&
+						item.getValueCutLength() != null && item.getValueCutLength() > 0 && secValue.length() > item.getValueCutLength()) {
+						if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(item.getValueCutType())) {
+							//宸︽埅鍙栨槸浠庡乏杈瑰壀鎺夛紝鍙虫埅鍙栨槸浠庡彸杈瑰壀鎺�--淇濈暀宸﹁竟
+							secValue = secValue.substring(0, item.getValueCutLength());
+						} else {
+							secValue = secValue.substring(secValue.length() - item.getValueCutLength());
+						}
+					}
+					secValue = productCodeService.joinPreffixAndSuffix(item,secValue);
+					secWidth.append(secValue.length()).append("#");
+					break;
+				case "codedatesec":
+					String dateFormatStr = item.getCodeDateFormatStr();
+					if(Func.isNotEmpty(dateFormatStr)) {
+						// 鑾峰彇褰撳墠鏃堕棿
+						Date currentDate = new Date();
+						// 鎸囧畾鏃ユ湡鏍煎紡
+						SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr);
+						// 灏嗗綋鍓嶆椂闂磋浆鎹负鎸囧畾鏃ユ湡鏍煎紡
+						// 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺夐櫎鏁板瓧浠ュ鐨勬墍鏈夊瓧绗︿覆
+						String cleanedDate = dateFormat.format(currentDate).replaceAll("[^0-9]", "");
+						int width = cleanedDate.length();
+						if (Func.isNotEmpty(item.getPrefixCode())) {
+							width += item.getPrefixCode().length();
+						}
+						if (Func.isNotEmpty(item.getSuffixCode())) {
+							width += item.getSuffixCode().length();
+						}
+						secWidth.append(width).append("#");
+					}
+					break;
+			}
+		});
 		return secWidth.toString().substring(0, secWidth.length() - 1);
 	}
 
 	/**
+	 * 璁$畻鐮佹闀垮害鍔犲墠鍚庣紑鐨勯暱搴�
+	 * @param codeBasicSecVO
+	 * @param secWidth
+	 */
+	private void countSecWith(CodeBasicSecVO codeBasicSecVO,StringBuffer secWidth){
+		if(Func.isNotEmpty(codeBasicSecVO.getCodeSecLength())){
+			int width = VciBaseUtil.getInt(codeBasicSecVO.getCodeSecLength());
+			if(Func.isNotEmpty(codeBasicSecVO.getPrefixCode())){
+				width += codeBasicSecVO.getPrefixCode().length();
+			}
+			if(Func.isNotEmpty(codeBasicSecVO.getSuffixCode())){
+				width += codeBasicSecVO.getSuffixCode().length();
+			}
+			secWidth.append(width).append("#");
+		}else {
+			secWidth.append(0).append("#");
+		}
+	}
+
+	/**
 	 * 瀵煎嚭鐨勬椂鍊欏皝瑁呭繀杈撳拰鍏抽敭灞炴��
 	 * @param attrVO 灞炴�х殑鏄剧ず瀵硅薄
 	 * @param text 鍗曞厓鏍肩殑鍊�

--
Gitblit v1.9.3