From 27cddefb0cb28da699954ba1a1756d6bcabafbbe Mon Sep 17 00:00:00 2001
From: ludc <ludc@vci-tech.com>
Date: 星期三, 05 三月 2025 17:41:29 +0800
Subject: [PATCH] 集成申码接口调整:当码值按照约定传表名为空的业务场景下传null校验问题和码值组装问题。

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java |  126 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 110 insertions(+), 16 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
index 1123541..cf3caef 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -230,7 +230,7 @@
 	 * @return 鎵ц缁撴灉
 	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
 	 */
-	@Override
+	 @Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
 		VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeBasicSecDTO.getPkCodeRule(),"缂栫爜瑙勫垯鐨勪富閿�");
@@ -272,7 +272,7 @@
 		//寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
 		if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
 			if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
-				throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆鐨勫唴瀹�");
+				throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐欏弬鐓ч厤缃殑鍐呭");
 			}
 			try{
 				//JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
@@ -283,7 +283,7 @@
 			}
 			// 鍒ゆ柇鏄惁涓哄紩鐢ㄧ爜娈碉紝濡傛灉鏄簲鐢ㄧ爜娈电殑璇濓紝涓轰簡閫傞厤鍓嶇缁勪欢锛岃繖閲岃瀵硅〃杩涜澶勭悊涓�涓嬶紝鎸夌収浠ュ墠鐨勫弬鐓ф牸寮忚繘琛岃浆鎹�
 			codeBasicSecDO.setReferValueInfo(referConfigToUIUiTable(codeReferConfigVO));
-			if(codeReferConfigVO.getIsPersistence()=="true"){
+			if(Func.toBoolean(codeReferConfigVO.getIsPersistence())){
 				codeReferConfigService.insert(codeReferConfigVO);
 			}
 		}
@@ -324,8 +324,11 @@
 				BeanUtil.copy(showField,tableColVO);
 				tableColVO.setSortField(showField.getAttrSortField());
 				uiTableFieldVOs.add(tableColVO);
-				if(showField.getIsQuery().equals("true")){
-					queryColumns.add(tableColVO);
+				if(Func.toBoolean(showField.getIsQuery())){
+					TableColVO tableQueryColumns = new TableColVO();
+					BeanUtil.copy(showField,tableQueryColumns);
+					tableColVO.setSortField(showField.getAttrSortField());
+					queryColumns.add(tableQueryColumns);
 				}
 			});
 		}
@@ -335,6 +338,9 @@
 		uiTableConfigVO.setQueryColumns(queryColumns);
 		//set缁欒〃鏍奸厤缃睘鎬�
 		uiFormReferVO.setTableConfig(uiTableConfigVO);
+		//瀛楁鍚嶄笉涓�鑷达紝闇�瑕佹墜鍔╯et
+		uiFormReferVO.setMuti(Func.toBoolean(codeReferConfig.getIsMuti()));
+		uiFormReferVO.setInitSort(new UIFieldSortVO(codeReferConfig.getSortField(),codeReferConfig.getSortType()));
 		// 绛涢�夋潯浠�
 		HashMap<String, String> whereMap = new HashMap<>();
 		if(!codeReferConfig.getCodeSrchCondConfigVOS().isEmpty()){
@@ -355,10 +361,10 @@
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public boolean editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+	public boolean editSave(CodeBasicSecDTO codeBasicSecDTO) throws ServerException {
 		VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
 		KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
-		if (! "success".equals(attrKv.getKey())){
+		if (!"success".equals(attrKv.getKey())){
 			throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
 		}
 		//灏咲TO杞崲涓篋O
@@ -394,8 +400,7 @@
 					codeReferConfigService.insert(codeReferConfigVO);
 				}
 			}
-
-//			revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//姝ゅ鐨勬嫹璐濅細鎶妑eferValueInfo鐨勫�肩粰瑕嗙洊鎺夛紝闇�瑕侀噸鏂拌祴鍊�
+			// revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//姝ゅ鐨勬嫹璐濅細鎶妑eferValueInfo鐨勫�肩粰瑕嗙洊鎺夛紝闇�瑕侀噸鏂拌祴鍊�
 			BaseModel tempModel = new BaseModel();
 			BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel);
 			BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo");
@@ -405,6 +410,16 @@
 			codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO)));
 
 			resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
+			// 浠庡垎绫荤爜娈垫垨鍥哄畾鐮佹鏀逛负鍏朵粬鐮佹鏃讹紝鍒ゆ柇鐢ㄦ埛鏄惁閫夋嫨浜嗘竻绌虹爜鍊�
+			if(codeBasicSecDTO.getIsClearValue()){
+				// 鍒嗙被鐮佸�兼竻绌�
+				if(codeBasicSecDTO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
+					codeClassifyValueService.deleteClassifyValueBySecOid(codeBasicSecDTO.getOid());
+				}else {
+					//鍥哄畾鐮佸�兼竻绌�
+					fixedValueService.deleteFixedValueBySecOid(codeBasicSecDTO.getOid());
+				}
+			}
 			//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
 			if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
 				DictBiz dictBiz = new DictBiz();
@@ -582,6 +597,15 @@
 		}
 		List<CodeBasicSec> createList = new ArrayList<>();
 		List<CodeBasicSec> basicSecDOS = codeBasicSecMapper.selectBatchIds(oidList);
+		/* 闇�瑕佹敞鎰忕殑鏄厠闅嗚繃鏉ョ殑鐮佹闇�瑕佸orderNum杩涜鎺掑簭锛屽惁鍒欎細鍑虹幇鎺掑簭涔辫烦鐨勬儏鍐�
+		瀹炵幇鏂瑰紡鏄煡璇㈠嚭璇ヨ鍒欎笅鏍规嵁orderNum鎺掑簭鍚庣殑鏈�鍚庝竴涓爜娈�	*/
+		LambdaQueryWrapper<CodeBasicSec> lastBasicWrapper = Wrappers.<CodeBasicSec>query()
+			.lambda().orderByDesc(CodeBasicSec::getOrderNum)
+			.eq(CodeBasicSec::getPkCodeRule,pkCodeRule)
+			.last("limit 1");
+		CodeBasicSec lastCodeBasicSec = codeBasicSecMapper.selectOne(lastBasicWrapper);
+		// 鎺掑簭鍙蜂粠杩欏効寮�濮嬫帓
+		int orderNum = Func.isEmpty(lastCodeBasicSec) || Func.isEmpty(lastCodeBasicSec.getOrderNum()) ? -1 : lastCodeBasicSec.getOrderNum();
 		if(basicSecDOS.isEmpty()){
 			return R.fail("鍏嬮殕鐨勭爜娈典俊鎭笉瀛樺湪锛�");
 		}
@@ -593,6 +617,8 @@
 			String oldBasicOid = newSecDO.getOid();
 			newSecDO.setId(newSecDO.getId());
 			newSecDO.setName(newSecDO.getName());
+			orderNum++;
+			newSecDO.setOrderNum(orderNum);
 			newSecDO.setPkCodeRule(pkCodeRule);
 			// 鍒ゆ柇鏄惁鏄垎绫荤爜娈�,涓氬姟閫昏緫绋嶅井澶嶆潅涓�鐐规墍浠ラ渶瑕佸厛鎻愬嚭鏉ュ崟鐙鐞�
 			if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
@@ -612,10 +638,13 @@
 			createList.add(newSecDO);
 		}
 		// 澶勭悊鍒嗙被鐮佹鐨刼id锛屽洜涓簅id鍏宠仈parentClassifyOid锛屼笌鐮佸�糲odeClassifyOid锛岀爜鍊煎張闇�瑕侀�氳繃鏃х殑鐮佹oid鏉ユ煡璇紝鎵�浠ヤ笉鑳界洿鎺ユ敼鍙榦id
-		boolean resChangeAssn = changeParentOidAssnOid(codeClassifySec);
+		changeParentOidAssnOid(codeClassifySec);
 		// 灏嗗鐞嗚繃鐨勫垎绫荤爜娈典篃娣诲姞杩涜鍋氭柊澧炲鐞嗙殑鐮佹闆嗗悎涓�
 		createList.addAll(codeClassifySec);
-		boolean resBoolean = saveBatch(createList);
+		boolean resBoolean = true;
+		if(!createList.isEmpty()){
+			resBoolean = saveBatch(createList);
+		}
 		// 鏈�缁堣瀛樺叆鐮佸�艰〃涓殑锛岀爜鍊煎璞�
 		List<CodeFixedValue> codeFixedDOValues = new ArrayList<>();
 		// 鏋勯�犵爜鍊煎璞★紝涓庣爜娈典富閿叧鑱斿叧绯伙紝浠ュ強鏀瑰彉鍥哄畾鐮佸�肩殑oid
@@ -627,9 +656,12 @@
 				codeFixedDOValues.add(item);
 			});
 		});
-		// 鍏嬮殕鍥哄畾鐮佸��
-		boolean resFixed = fixedValueService.saveBatch(codeFixedDOValues);
-		return (resBoolean&&resFixed&&resChangeAssn) ? R.data(resBoolean,"鍏嬮殕鐮佹淇℃伅鎴愬姛"):R.fail("鍏嬮殕鐮佹淇℃伅澶辫触锛�");
+		boolean resFixed = true;
+		if(!codeFixedValueMaps.isEmpty()){
+			// 鍏嬮殕鍥哄畾鐮佸��
+			resFixed = fixedValueService.saveBatch(codeFixedDOValues);
+		}
+		return (resBoolean&&resFixed) ? R.data(resBoolean,"鍏嬮殕鐮佹淇℃伅鎴愬姛"):R.fail("鍏嬮殕鐮佹淇℃伅澶辫触锛�");
 	}
 
 	/**
@@ -992,7 +1024,8 @@
 				wrapper = Wrappers.<CodeBasicSec>query().lambda()
 					.eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid())
 					.eq(CodeBasicSec::getSerialDependFlag,"true")
-					.orderByAsc(CodeBasicSec::getSerialDependOrder);
+					.orderByAsc(CodeBasicSec::getOrderNum);
+					//.orderByAsc(CodeBasicSec::getSerialDependOrder);
 				List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
 				if(!CollectionUtils.isEmpty(codeBasicSecList)){
 					List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList);
@@ -1036,7 +1069,8 @@
 			.eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
 			.in(CodeBasicSec::getOid,codeBasicSecOidList)
 			.eq(CodeBasicSec::getSerialDependFlag,"true")
-			.orderByAsc(CodeBasicSec::getSerialDependOrder);
+			//TODO: SerialDependOrder鏈潵鏄敤鏉ユ祦姘存帓搴忕殑锛屼絾鏄幇鍦ㄧ殑閫昏緫鏄寜鐓rderuNum鎺掑簭鐨�
+			.orderByAsc(CodeBasicSec::getOrderNum); //.orderByAsc(CodeBasicSec::getSerialDependOrder);
 		List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
 
 		//鎸夋祦姘翠緷璧栭『搴忥紝澶勭悊娴佹按渚濊禆鐮佹鐨勫��
@@ -1094,4 +1128,64 @@
 		}
 		return String.valueOf(maxSecNum);
 	}
+
+	/***
+	 * 鏍规嵁娴佹按渚濊禆鑾峰彇鏈�澶ф祦姘村彿
+	 * @param codeOrderDTO 缂栫爜鐢宠浼犺緭瀵硅薄
+	 * @return
+	 */
+	@Override
+	public Double getMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) {
+		Double maxSerialNumber=0.0;
+		VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"缂栫爜瑙勫垯涓婚敭");
+		List<CodeOrderSecDTO>  codeOrderSecDTOList=codeOrderDTO.getSecDTOList();
+		if(CollectionUtils.isEmpty(codeOrderSecDTOList)){
+			throw new VciBaseException("鏈�澶ф祦姘村彿鐨勬祦姘翠緷璧栦笉鑳戒负绌猴紒");
+		}
+		String codeRuleOid = codeOrderDTO.getCodeRuleOid();
+		Map<String/**鐮佹涓婚敭*/,CodeOrderSecDTO/**鐮佹鐩稿叧淇℃伅*/> codeOrderSecDTOMap = codeOrderSecDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t));
+		List<String> codeBasicSecOidList = codeOrderSecDTOList.stream().map(s->s.getSecOid()).collect(Collectors.toList());//娴佹按渚濊禆鐮佹鐨勪富閿泦鍚�
+		//鑾峰彇娴佹按渚濊禆鐮佹
+		LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
+			.eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
+			.in(CodeBasicSec::getOid,codeBasicSecOidList)
+			.eq(CodeBasicSec::getSerialDependFlag,"true")
+			.orderByAsc(CodeBasicSec::getOrderNum); //.orderByAsc(CodeBasicSec::getSerialDependOrder);
+
+		List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
+		//鎸夋祦姘翠緷璧栭『搴忥紝澶勭悊娴佹按渚濊禆鐮佹鐨勫��
+		List<String> serialDependValueList = new ArrayList<>();
+		codeBasicSecList.stream().forEach(s->{
+			CodeOrderSecDTO codeOrderSecDTO = codeOrderSecDTOMap.get(s.getOid());
+			String serialDependValue = codeOrderSecDTO.getSecValue();
+			if(s.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())){
+				try {
+					Date date = VciDateUtil.str2Date(codeOrderSecDTO.getSecValue(),s.getCodeDateFormatStr());
+					serialDependValue = VciDateUtil.date2Str(date,s.getCodeDateFormatStr());
+				} catch (Exception e) {
+					throw new RuntimeException(e);
+				}
+			}
+			serialDependValueList.add(serialDependValue);
+		});
+
+		//鑾峰彇娴佹按鐮佹
+		wrapper = Wrappers.<CodeBasicSec>query().lambda()
+			.eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
+			.eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())
+			.orderByAsc(CodeBasicSec::getSerialDependOrder);
+		CodeBasicSec codeBasicSec = this.getOne(wrapper);
+		//鏍规嵁缂栫爜瑙勫垯鍜屾祦姘翠緷璧栵紝鑾峰彇鏈�澶ф祦姘村彿
+		String serialUnitString = serialDependValueList.size() == 0 ? EMPTY_SERIAL_UNIT : serialDependValueList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
+		LambdaQueryWrapper<CodeSerialValue> codeSerialWrapper = new LambdaQueryWrapper<>();
+		codeSerialWrapper.eq(CodeSerialValue::getCodeRuleOid, codeRuleOid);
+		codeSerialWrapper.eq(CodeSerialValue::getSerialUnit, serialUnitString);
+		codeSerialWrapper.eq(CodeSerialValue::getCodeSecOid,codeBasicSec.getOid());
+		codeSerialWrapper.orderByDesc(CodeSerialValue::getCreateTime);
+		List<CodeSerialValue> codeSerialValueList = serialValueMapper.selectList(codeSerialWrapper);
+		if(!CollectionUtils.isEmpty(codeSerialValueList)){
+			maxSerialNumber=StringUtils.isBlank(codeSerialValueList.get(0).getMaxSerial())?0:Double.parseDouble(codeSerialValueList.get(0).getMaxSerial());
+		}
+		return maxSerialNumber;
+	}
 }

--
Gitblit v1.9.3