From 4208d7f9407ab7c9d6b756f5f8a7616b7686fc74 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期五, 17 十一月 2023 12:40:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java |  126 +++++++++++++++++++++--------------------
 1 files changed, 65 insertions(+), 61 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 c4010bf..3e1bc24 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
@@ -1,10 +1,10 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.vci.ubcs.code.algorithm.CustomSerialEnum;
+import com.vci.ubcs.code.dto.CodeCustomSerialDTO;
 import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.vci.ubcs.code.algorithm.CustomSerialEnum;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
-import com.vci.ubcs.code.dto.CodeCustomSerialDTO;
 import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.entity.CodeAllCode;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
@@ -114,7 +114,7 @@
 				log.info("code:----->"+cbo.getId());
 				//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闄ゅ幓
@@ -171,13 +171,11 @@
 						if(OsCodeFillTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getCodeFillType())){
 							//涓嶈ˉ鐮�
 							//鎶婃墍鏈変笉鏄暟瀛楃殑鍘绘帀锛屽洜涓哄彲鑳戒細鏄�佹暟鎹紝鏂拌鍒�
-						//	serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue));
+							//	serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue));
 							//serialDb = killUnNumberChar(subSecValue);
 							serialDb=subSecValue;
 						}else {
 							//宸﹀彸濉厖鐨勶紝鎴戜滑闇�瑕�
-							/*serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(subSecValue,secVO.getCodeFillSeparator(),
-								OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));*/
 							serialDb = killFillChar(subSecValue,secVO.getCodeFillSeparator(),
 								OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()));
 						}
@@ -261,8 +259,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<>();
@@ -311,7 +309,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<>();
@@ -320,7 +318,7 @@
 					List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper);
 					List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList());
 					if(codeAllCodes.size()>takeBack.size()){
-						throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ codeAllCodes.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
+						throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
 					}
 					for (CodeAllCode codeAllCode : takeBack) {
 						codeAllCode.setTs(new Date());
@@ -332,7 +330,8 @@
 							if(codeAllCode.getId().equals(next.getId())){
 								codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
 								codeAllCode.setLcStatus(next.getLcStatus());
-								iterator.remove();
+								// TODO: 杩欏効鍏堟殏鏃舵敞閲婃帀锛屾病鐪嬫噦杩欏効涓轰粈涔堣杩欐牱鍋氾紝瀵艰嚧鎶ラ敊
+								//iterator.remove();
 							}
 						}
 					}
@@ -345,6 +344,13 @@
 
 //				try {
 				mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
+					// 鎻愪氦浜嬪姟
+					//transactionTemplate.getTransactionManager().commit(status);
+//				}catch (Exception e){
+//					// 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
+//					transactionTemplate.getTransactionManager().rollback(status);
+//				}
+
 			}
 			return codeList;
 		}else {
@@ -404,57 +410,54 @@
 			//澶勭悊鏈�澶ф祦姘�
 			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
-					.collectingAndThen(
-						Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
-						ArrayList::new));
-				if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){
-					throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒");
-				}
-				QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
-				wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm());
-				wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
-				List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper);
-				List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList());
-				if(codeAllCodes.size()>takeBack.size()){
-					throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ codeAllCodes.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
-				}
+			allCodeDOList.stream().forEach(
+				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
+			);
 
-				for (CodeAllCode codeAllCode : takeBack) {
-					codeAllCode.setTs(new Date());
-					codeAllCode.setLastModifyTime(new Date());
-					codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
-					Iterator<CodeAllCode> iterator = allCodeDOList.iterator();
-					while (iterator.hasNext()){
-						CodeAllCode next = iterator.next();
-						if(codeAllCode.getId().equals(next.getId())){
-							codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
-							codeAllCode.setLcStatus(next.getLcStatus());
-							iterator.remove();
-						}
+
+			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
+				.collectingAndThen(
+					Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
+					ArrayList::new));
+			if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){
+				throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒");
+			}
+			QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
+			wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm());
+			wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
+			List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper);
+			List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList());
+			if(codeAllCodes.size()>takeBack.size()){
+				throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList()));
+			}
+
+			for (CodeAllCode codeAllCode : takeBack) {
+				codeAllCode.setTs(new Date());
+				codeAllCode.setLastModifyTime(new Date());
+				codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
+				Iterator<CodeAllCode> iterator = allCodeDOList.iterator();
+				while (iterator.hasNext()){
+					CodeAllCode next = iterator.next();
+					if(codeAllCode.getId().equals(next.getId())){
+						codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
+						codeAllCode.setLcStatus(next.getLcStatus());
+						//iterator.remove();
 					}
 				}
-				mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(), dataCBOList);
-				if(takeBack.size()>0){
-					codeAllCodeService.updateBatchById(takeBack);
-				}
-				codeAllCodeService.saveBatch(allCodeDOList);
-//				iCodeWupinService.saveBatch(dataCBOList);
-				// 鎻愪氦浜嬪姟
-			//	transactionTemplate.getTransactionManager().commit(status);
-			//}catch (Exception e){
-				// 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
-			//	transactionTemplate.getTransactionManager().rollback(status);
-			//	throw e;
-			//}
+			}
+			if(takeBack.size()>0){
+				codeAllCodeService.updateBatchById(takeBack);
+			}
+			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 {
@@ -529,7 +532,6 @@
 									  CodeRuleVO ruleVO,String serialUnitString,
 									  Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/,CodeSerialValue>> maxSerialValueMap,List<String> thisSecValueList,
 									  Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/, String>> lastMaxSerialValueMap,boolean firstData){
-
 		if (!CollectionUtils.isEmpty(serialSecVOList)) {
 			Map<String,String> secIdserialValueMap=new LinkedHashMap<>();
 			for (int j = 0; j < serialSecVOList.size(); j++) {
@@ -625,7 +627,8 @@
 			}
 		}
 	}
- 	private String customCodeSerial(String className, CodeCustomSerialDTO codeCustomSerialDTO){
+
+	private String customCodeSerial(String className, CodeCustomSerialDTO codeCustomSerialDTO){
 		String result = "";
 		try {
 			Class classInstance=Class.forName(className);
@@ -648,6 +651,7 @@
 		}
 		return result;
 	}
+
 	/**
 	 * 杞崲鐮佸�肩殑鍐呭
 	 * @param secVO 鐮佹鐨勫唴瀹�

--
Gitblit v1.9.3