From 96f493d717f7238e956c3e870ba5437cb6cf4ae4 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 22 三月 2024 18:12:30 +0800
Subject: [PATCH] 集成相关更改,测试程序完善

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java |  122 ++++++++++++++++++++--------------------
 1 files changed, 60 insertions(+), 62 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 c6708e6..9a6311d 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
@@ -36,6 +36,7 @@
 import com.vci.ubcs.starter.web.util.VciDateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.WebUtil;
@@ -92,13 +93,9 @@
 	@Autowired
 	private FormulaServiceImpl formulaService;
 
-	// 娉ㄥ叆浜嬪姟绠$悊鍣�
-//	@Autowired
-//	private TransactionTemplate transactionTemplate;
-
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception {
+	public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList,BladeUser user) 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;
@@ -114,7 +111,6 @@
 			List<CodeAllCode> allCodeDOList = new CopyOnWriteArrayList<>();
 			Map<String/**娴佹按渚濇嵁**/, HashMap<String/**鐮佹鐨勪富閿�**/,String/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new HashMap<>();
 			// TODO 澶氱嚎绋嬫祦寮曞彂鐨勯棶棰樺凡淇敼
-			final HttpServletRequest request = WebUtil.getRequest();
 			dataCBOList.parallelStream().forEach(cbo->{
 				log.info("code:----->"+cbo.getId());
 				//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -204,7 +200,7 @@
 					});
 				}
 				CodeAllCode allCodeDO = new CodeAllCode();
-				DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE,request);
+				DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE,user);
 				allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
 				allCodeDO.setCodeRuleOid(finalRuleVO.getOid());
 				allCodeDO.setId(cbo.getId());
@@ -215,6 +211,7 @@
 				String unFillSerial =serialUnFileStringList.size()==1?serialUnFileStringList.get(0)+ SERIAL_VALUE_SPACE:serialUnFileStringList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE));
 				allCodeDO.setUnFillSerial(unFillSerial);
 				allCodeDO.setLcStatus(cbo.getLcStatus());
+				allCodeDO.setLctid("codeAllCodeLC");
 				allCodeDO.setCodeDelimit(codeValueList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE)));//娣诲姞閾炬帴绗�
 				allCodeDOList.add(allCodeDO);
 			});
@@ -237,13 +234,13 @@
 						log.info("oldmaxSerial--->"+serialValueDO.getMaxSerial()+"---- newmaxSerial---->"+maxSerial);
 						if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<VciBaseUtil.getDouble(maxSerial)){
 							serialValueDO.setMaxSerial(String.valueOf(maxSerial));
-							DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO,null);
+							DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO,user);
 							editSerialValueList.add(serialValueDO);
 						}
 					}else{
 						//娌℃湁
 						CodeSerialValue serialValueDO = new CodeSerialValue();
-						DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE,request);
+						DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE,user);
 						serialValueDO.setCodeRuleOid(finalRuleVO.getOid());
 						serialValueDO.setSerialUnit(serialUnit);
 						serialValueDO.setCodeSecOid(secOid);
@@ -302,10 +299,6 @@
 				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 -> {
@@ -330,17 +323,24 @@
 					for (CodeAllCode codeAllCode : takeBack) {
 						codeAllCode.setTs(new Date());
 						codeAllCode.setLastModifyTime(new Date());
-						codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
-						Iterator<CodeAllCode> iterator = addCodeDOs.iterator();
+						codeAllCode.setLastModifier(Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUserAccount());
+						for (int i = 0; i < addCodeDOs.size(); i++) {
+							if(codeAllCode.getId().equals(addCodeDOs.get(i).getId())){
+								codeAllCode.setCreateCodeOid(addCodeDOs.get(i).getCreateCodeOid());
+								codeAllCode.setLcStatus(addCodeDOs.get(i).getLcStatus());
+								addCodeDOs.remove(i);
+							}
+						}
+						/*Iterator<CodeAllCode> iterator = addCodeDOs.iterator();
 						while (iterator.hasNext()){
 							CodeAllCode next = iterator.next();
 							if(codeAllCode.getId().equals(next.getId())){
 								codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
 								codeAllCode.setLcStatus(next.getLcStatus());
 								// TODO: 杩欏効鍏堟殏鏃舵敞閲婃帀锛屾病鐪嬫噦杩欏効涓轰粈涔堣杩欐牱鍋氾紝瀵艰嚧鎶ラ敊
-								//iterator.remove();
+								iterator.remove();
 							}
-						}
+						}*/
 					}
 					if(takeBack.size()>0){
 						codeAllCodeService.updateBatchById(takeBack);
@@ -348,16 +348,7 @@
 
 					codeAllCodeService.saveBatch(addCodeDOs);
 				}
-
-//				try {
 				mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
-					// 鎻愪氦浜嬪姟
-					//transactionTemplate.getTransactionManager().commit(status);
-//				}catch (Exception e){
-//					// 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
-//					transactionTemplate.getTransactionManager().rollback(status);
-//				}
-
 			}
 			return codeList;
 		}else {
@@ -369,7 +360,11 @@
 			List<CodeBasicSecVO> attrSecVOList = new ArrayList<>();
 			for (int i = 0; i < secVOList.size(); i++) {
 				CodeBasicSecVO secVO = secVOList.get(i);
-				switchSecValue(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList);
+				try {
+					switchSecValue(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList);
+				}catch (Exception e){
+					throw new ServiceException("鐮佸�艰浆鎹㈡椂鍑虹幇閿欒锛屽師鍥狅細"+e.getMessage());
+				}
 			}
 			//澶勭悊灞炴�х爜娈靛拰娴佹按鐮佹
 			Map<String/**娴佹按鐮佹鐨勪富閿�**/, Map<String/**娴佹按渚濇嵁**/, String>> lastMaxSerialValueMap = new HashMap<>();
@@ -419,9 +414,8 @@
 			saveSerialValue( finalRuleVO, lastMaxSerialValueMap, maxSerialValueMap);
 
 			allCodeDOList.stream().forEach(
-				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode",null);allCode.setLctid("codeAllCodeLC");}
+				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode",user);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 -> {
@@ -433,7 +427,7 @@
 				.collectingAndThen(
 					Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
 					ArrayList::new));
-			if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){
+			if(distinctCodeAllCOdes.size() != allCodeDOList.size() ){
 				throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒");
 			}
 			QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
@@ -448,34 +442,29 @@
 			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.setLastModifier(Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUserAccount());
+				for (int i = 0; i < allCodeDOList.size(); i++) {
+					if(codeAllCode.getId().equals(allCodeDOList.get(i).getId())){
+						codeAllCode.setCreateCodeOid(allCodeDOList.get(i).getCreateCodeOid());
+						codeAllCode.setLcStatus(allCodeDOList.get(i).getLcStatus());
+						allCodeDOList.remove(i);
+					}
+				}
+				/*while (iterator.hasNext()){
 					CodeAllCode next = iterator.next();
 					if(codeAllCode.getId().equals(next.getId())){
 						codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
 						codeAllCode.setLcStatus(next.getLcStatus());
 						//iterator.remove();
 					}
-				}
+				}*/
 			}
 			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 {
-//					s.setAttributeValue("lcstatus",statusMap.get(s.getOid()));
-//				} catch (VCIError e) {
-//					e.printStackTrace();
-//				}
-//			});
 		}
-		// WebUtil.setPersistence(true);
-		// boService.persistenceBatch(batchCBO);
 		return codeList;
 	}
 
@@ -523,8 +512,6 @@
 			});
 		}
 	}
-
-
 
 	/**
 	 * 杞崲娴佹按鐮佹鐨勫��
@@ -637,8 +624,6 @@
 			}
 		}
 	}
-
-
 
 	/**
 	 * 杞崲娴佹按鐮佹鐨勫��
@@ -903,7 +888,7 @@
 			case CODE_VARIABLE_SEC:
 				//鍙彉鐮佹锛屾槸鍦ㄩ〉闈笂杈撳叆鍐呭
 				if (secValue.length() > VciBaseUtil.getInt(secVO.getCodeSecLength())) {
-					throw new VciBaseException("銆恵0}銆戣繖涓爜娈垫槸鍙彉鐮佹锛屼絾鏄幇鍦ㄨ緭鍏ョ殑鐮佸�肩殑闀垮害({1})瓒呰繃浜嗚瀹氱殑闀垮害{2}", new String[]{secVO.getName(), String.valueOf(secValue.length()), secVO.getCodeSecLength()});
+					throw new ServiceException(String.format("銆恵%s}銆戣繖涓爜娈垫槸鍙彉鐮佹锛屼絾鏄幇鍦ㄨ緭鍏ョ殑鐮佸�肩殑闀垮害({%s})瓒呰繃浜嗚瀹氱殑闀垮害{%s}", secVO.getName(), secValue.length(), secVO.getCodeSecLength()));
 				}
 				OsCodeFillTypeEnum fillTypeEnum = OsCodeFillTypeEnum.forValue(secVO.getCodeFillType());
 				secValue = fillString(VciBaseUtil.getInt(secVO.getCodeSecLength()), fillTypeEnum, secValue, secVO.getCodeFillSeparator());
@@ -928,7 +913,7 @@
 	 * @param secValue 鐮佸��
 	 * @return
 	 */
-	private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
+	public String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
 		StringBuilder joinSecValue = new StringBuilder();
 		// 鎷兼帴鍓嶇紑
 		if (Func.isNotEmpty(secVO.getPrefixCode()) && Func.isNotEmpty(secValue)) {
@@ -982,7 +967,7 @@
                                 BaseModel cbo, CodeClassifyTemplateVO templateVO,
                                 List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString,String codeDelimiter){
 		CodeAllCode allCodeDO = new CodeAllCode();
-		DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE,null);
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE);
 		allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
 		allCodeDO.setCodeRuleOid(ruleVO.getOid());
 		allCodeDO.setId(cbo.getId());
@@ -1015,11 +1000,11 @@
 					//璇存槑鏈�
 					serialValueDO = maxSerialValueMap.get(secOid).get(unit);
 					serialValueDO.setMaxSerial(maxSerial.toString());
-					DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO,null);
+					DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
 					editSerialValueDOList.add(serialValueDO);
 				}else{
 					serialValueDO = new CodeSerialValue();
-					DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE,null);
+					DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
 					serialValueDO.setCodeRuleOid(ruleVO.getOid());
 					serialValueDO.setSerialUnit(unit);
 					serialValueDO.setCodeSecOid(secOid);
@@ -1191,10 +1176,12 @@
 			switchSecValueBZ(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList);
 			//鍒嗘瀛樺偍娴佹按渚濊禆
 			if(secVO.getSecType().equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())){
+				int finalI = i;
+				final int[] index = {0};
 				List<String> newSerialUnitList= serialUnitList.stream().filter(secValueStr -> {
-					return  !secValueStr.equals("${"+secVO.getOid()+"}");
+					return index[0]++< finalI;//闄ゅ幓娴佹按鐨�
 				}).collect(Collectors.toList());
-				String serialUnitString = serialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : newSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
+				String serialUnitString = newSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : newSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
 				secOdserialUnitMap.put(secVO.getOid(),serialUnitString);
 			}
 		}
@@ -1231,14 +1218,19 @@
 			AtomicReference<String> serialUnitString= new AtomicReference<>("");
 			for (int j = 0; j < serialSecVOList.size(); j++) {
 				CodeBasicSecVO secVO = serialSecVOList.get(j);
-				if(lastMaxSerialValueMap.containsKey(secVO.getOid())){
-					Map<String/**娴佹按渚濇嵁**/, String> serialValueMap=	lastMaxSerialValueMap.get(secVO.getOid());
+				if(lastMaxSerialValueMap.containsKey(secVO.getOid())){//姝や负鏈�鍚庨渶瑕佸瓨鍏ユ祦姘翠緷璧栫殑鏈�澶ф祦姘�
+					Map<String/**娴佹按渚濇嵁**/, String> serialValueMap = lastMaxSerialValueMap.get(secVO.getOid());
 					serialValueMap.forEach((maxSerialUnitString,serialValue)->{
 						if(StringUtils.isNotBlank(serialValue)){
 							serialUnitString.set(maxSerialUnitString);
 							sb.append(serialValue).append(SERIAL_VALUE_SPACE);
 						}
 					});
+				}else{
+					if(secValueMap.containsKey(secVO.getOid())) {//浼佷笟鏍囧噯澶勭悊淇椤哄簭鍙峰凡缁忓瓨鍦ㄧ殑鏁版嵁鍒欎笉闇�瑕佸姩娴佹按渚濊禆琛ㄧ殑鏁版嵁
+						serialUnitString.set(secOdserialUnitMap.get(secVO.getOid()));
+						sb.append(secValueMap.get(secVO.getOid())).append(SERIAL_VALUE_SPACE);
+					}
 				}
 			}
 			String codeDelimiter=thisSecValueList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE));
@@ -1249,7 +1241,7 @@
 		saveSerialValue( finalRuleVO, lastMaxSerialValueMap, maxSerialValueMap);
 
 		allCodeDOList.stream().forEach(
-			allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode",null);allCode.setLctid("codeAllCodeLC");}
+			allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
 		);
 
 		Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
@@ -1277,14 +1269,21 @@
 			codeAllCode.setLastModifyTime(new Date());
 			codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
 			Iterator<CodeAllCode> iterator = allCodeDOList.iterator();
-			while (iterator.hasNext()){
+			for (int i = 0; i < allCodeDOList.size(); i++) {
+				if(codeAllCode.getId().equals(allCodeDOList.get(i).getId())){
+					codeAllCode.setCreateCodeOid(allCodeDOList.get(i).getCreateCodeOid());
+					codeAllCode.setLcStatus(allCodeDOList.get(i).getLcStatus());
+					allCodeDOList.remove(i);
+				}
+			}
+			/*while (iterator.hasNext()){
 				CodeAllCode next = iterator.next();
 				if(codeAllCode.getId().equals(next.getId())){
 					codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
 					codeAllCode.setLcStatus(next.getLcStatus());
 					//iterator.remove();
 				}
-			}
+			}*/
 		}
 		if(takeBack.size()>0){
 			codeAllCodeService.updateBatchById(takeBack);
@@ -1293,7 +1292,6 @@
 		mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
 		return codeList;
 	}
-
 
 	/**
 	 * 杞崲鐮佸�肩殑鍐呭

--
Gitblit v1.9.3