From 711c0021a8c178c5ef00967711b0d3d6fa50637f Mon Sep 17 00:00:00 2001
From: yuxc <653031404@qq.com>
Date: 星期三, 29 十一月 2023 17:34:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java |  299 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 297 insertions(+), 2 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index c596095..c012248 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -9,8 +9,10 @@
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
 import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
+import com.vci.ubcs.code.dto.CodeBZApplyDTO;
 import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
 import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.*;
@@ -22,6 +24,7 @@
 import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
 import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.code.wrapper.BaseMdodelWrapper;
+import com.vci.ubcs.code.wrapper.CodeAllcodeWrapper;
 import com.vci.ubcs.flow.core.dto.FlowStatusDTO;
 import com.vci.ubcs.flow.core.feign.IMDMIFlowAttrClient;
 import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO;
@@ -115,6 +118,49 @@
 	 */
 	@Value("${batchadd.is_thread_import:false}")
 	private boolean IS_THREAD_IMPORT;
+
+	/***
+	 * 鎿嶄綔绫诲瀷
+	 */
+	@Value("${bzApply.operationType:operationType}")
+	private String operationType;
+	/***
+	 * 鏄惁绯诲垪
+	 */
+	@Value("${bzApply.isSeries:isSeries}")
+	private String isSeries;
+	/***
+	 *鍙戝竷鏃堕棿
+	 */
+	@Value("${bzApply.releaseTime:releaseTime}")
+	private String releaseTime;
+	/***
+	 * 婧愭爣鍑嗗彿
+	 */
+	@Value("${bzApply.oldCode:oldCode}")
+	private String oldCode;
+
+	/***
+	 * 绯诲垪娴佹按
+	 */
+	@Value("${bzApply.seriesFlow:seriesFlow}")
+	private String seriesFlow;
+	/***
+	 * 鏄惁鍙樻洿绯诲垪
+	 */
+	@Value("${bzApply.isEditSeries:isEditSeries}")
+	private String isEditSeries;
+	/***
+	 * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О
+	 */
+	@Value("${bzApply.secName:绯诲垪鍙穧")
+	private String secName;
+
+	/***
+	 * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О
+	 */
+	@Value("${bzApply.yearSecName:骞翠唬鍙穧")
+	private String yearSecName;
 
     /**
      * 妯℃澘鐨勬湇鍔�
@@ -822,6 +868,254 @@
 		return R.data("false");
 	}
 
+	/***
+	 *
+	 * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭�
+	 * @return
+	 * @throws Exception
+	 */
+	@Override
+	public String addSaveBZ(CodeBZApplyDTO codeBZApplyDTO) throws Exception {
+		return addSaveBZCode(codeBZApplyDTO,true);
+	}
+
+	/**
+	 * 鏍囧噯鐢宠鍜屼慨璁㈢敤
+	 *
+	 * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭�
+	 * @param authUser
+	 * @return
+	 */
+	private String addSaveBZCode(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		String code="";
+		VciBaseUtil.alertNotNull(codeBZApplyDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			codeBZApplyDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", codeBZApplyDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		//鎿嶄綔绫诲瀷
+		if(StringUtils.isBlank(codeBZApplyDTO.getOperationType())){
+			String operationTypeValue=codeBZApplyDTO.getData().get(operationType);
+			codeBZApplyDTO.setOperationType(operationTypeValue);
+		}
+		//鏄惁绯诲垪
+		if(!codeBZApplyDTO.isSeries()){
+			boolean isSeriesValue=codeBZApplyDTO.getData().get(isSeries).equals("true")?true:false;
+			codeBZApplyDTO.setSeries(isSeriesValue);
+		}
+		//鍘熸爣鍑嗗彿
+		if(StringUtils.isBlank(codeBZApplyDTO.getOldCode())){
+			String oldCodeValue=codeBZApplyDTO.getData().get(oldCode);
+			codeBZApplyDTO.setOldCode(oldCodeValue);
+		}
+		//绯诲垪娴佹按
+		if(StringUtils.isBlank(codeBZApplyDTO.getSeriesFlow())){
+			String seriesFlowValue=codeBZApplyDTO.getData().get(seriesFlow);
+			codeBZApplyDTO.setSeriesFlow(seriesFlowValue);
+		}
+		//鍙戝竷鏃堕棿
+		if(StringUtils.isBlank(codeBZApplyDTO.getReleaseTime())){
+			String releaseTimeValue=codeBZApplyDTO.getData().get(releaseTime);
+			codeBZApplyDTO.setReleaseTime(releaseTimeValue);
+		}
+		//鏄惁鍙樻洿绯诲垪
+		if(!codeBZApplyDTO.isEditSeries()){
+			boolean isEditSeriesValue=codeBZApplyDTO.getData().get(isEditSeries).equals("true")?true:false;
+			codeBZApplyDTO.setEditSeries(isEditSeriesValue);
+		}
+		VciBaseUtil.alertNotNull(codeBZApplyDTO.getOperationType(), "鎿嶄綔绫诲瀷",
+			codeBZApplyDTO.isSeries(), "鏄惁绯诲垪", codeBZApplyDTO.getReleaseTime(), "鍙戝竷鏃堕棿");
+
+		if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_FORMULATE.getValue())){//鍒跺畾
+			code=	addsaveDataBZ(codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())){//淇
+			VciBaseUtil.alertNotNull(codeBZApplyDTO.getOldCode(), "婧愭爣鍑嗗彿");
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_EDIT.getValue())){//鏇存敼
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_DISABLE.getValue())) {//浣滃簾
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())) {//澶囨煡
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}
+		return code;
+	}
+
+	/***
+	 * 淇
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String amendmentDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		CodeOrderDTO orderDTO=new CodeOrderDTO();
+		BeanUtil.convert(codeBZApplyDTO,orderDTO);
+		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid());
+		Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid().toLowerCase(Locale.ROOT), t -> t));
+		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		String oldCode=codeBZApplyDTO.getOldCode();//婧愭爣鍑嗙紪鐮�
+		String releaseTime=codeBZApplyDTO.getReleaseTime();
+		List<CodeOrderSecDTO> secDTOS=	orderDTO.getSecDTOList();
+		LinkedList<CodeOrderSecDTO> newSecDTOList=new LinkedList<>();
+		changeCodeOrderSecDTO(ruleVO,secDTOS,oldCode,newSecDTOList);//鏍规嵁瑕佹眰閲嶆柊绠楃爜娈电爜鍊�
+		if(!codeBZApplyDTO.isEditSeries()){//鍙樻洿涓烘爣鍑�
+			//if(!codeBZApplyDTO.isSeries()){//濡傛灉鏄〃鍑嗭紝鍒欓渶瑕佸皢绯诲垪濂芥祦姘寸疆涓簄ull
+				//鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌�
+				newSecDTOList.stream().forEach(codeOrderSecDTO -> {
+					if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){
+						codeOrderSecDTO.setSecValue("");
+					}
+				});
+			//}
+			orderDTO.setSecDTOList(newSecDTOList);
+			return createDataBZ(orderDTO,ruleVO,authUser);
+		}else{//鍙樻洿涓虹郴鍒�.鍒欐寜鐓ч�昏緫鍘诲鐞�
+			orderDTO.setSecDTOList(newSecDTOList);
+			return createDataBZ(orderDTO,ruleVO,authUser);
+		}
+	}
+	private String createDataBZ(CodeOrderDTO orderDTO,	CodeRuleVO ruleVO,boolean authUser) throws Exception {
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+		//1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+		checkSecValueOnOrder(ruleVO, orderDTO);
+		//2.鍒ゆ柇蹇呰緭椤�
+		checkRequiredAttrOnOrder(templateVO, orderDTO);
+		//3.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+		//4.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+		switchComponentAttrOnOrder(templateVO, orderDTO);
+		//5.鏍¢獙瑙勫垯
+		checkVerifyOnOrder(templateVO, orderDTO);
+		//6.鍏抽敭灞炴��
+		checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+		//7.鏋氫妇杞崲
+		checkEnumOnOrder(templateVO, orderDTO);
+		//8.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+		switchDateAttrOnOrder(templateVO, orderDTO);
+		//9.鐢熸垚缂栫爜鐨勪俊鎭� 锛屽垵濮嬪寲涓氬姟绫诲瀷锛氱紦瀛樺厛鍙栨秷锛屽洜涓虹増鏈鍒欎細鍑虹幇鍙樺姩鐨勬儏鍐垫墍浠ユ棤娉曚娇鐢ㄧ紦瀛�
+		// BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId());
+		BaseModel cbo = createBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId().trim().toLowerCase());
+		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
+		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
+		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
+		cbo.setOid(VciBaseUtil.getPk());
+		cbo.setRevisionOid(VciBaseUtil.getPk());
+		cbo.setNameOid(VciBaseUtil.getPk());
+		cbo.setCreateTime(new Date());
+		cbo.setLastModifyTime(new Date());
+		//cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));銆�
+		if(authUser) {
+			// 瑕佹眰鏄剧ず璐﹀彿锛屾墍浠ュ仛浜嗘洿鏀�
+			cbo.setCreator(String.valueOf(AuthUtil.getUser().getAccount()));
+			cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
+		}else{
+			cbo.setCreator(orderDTO.getCreator());
+			cbo.setLastModifier(orderDTO.getLastModifier());
+		}
+		cbo.setTenantId(AuthUtil.getTenantId());
+		if(StringUtils.isNotBlank(orderDTO.getLcStatus())||StringUtils.isNotBlank(orderDTO.getData().get("lcStatus"))){
+			cbo.setLcStatus(StringUtils.isNotBlank(orderDTO.getLcStatus())?orderDTO.getLcStatus():orderDTO.getData().get("lcStatus"));
+		}
+		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
+		cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
+		//end -- modify by lihang @20220407
+		List<BaseModel> cboList = new ArrayList<>();
+		//澶囨敞
+		cbo.setDescription(orderDTO.getDescription());
+		cboList.add(cbo);
+		List<String> codeList = productCodeService.productCodeAndSaveDataBZ(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList);
+		batchSaveSelectChar(templateVO, cboList);
+		return codeList.size() > 0 ? codeList.get(0) : "";
+
+	}
+	/***
+	 * 鏍规嵁缂栧彿鑾峰彇鐮佹鐮佸��
+	 * @param secDTOList
+	 */
+	private void changeCodeOrderSecDTO(CodeRuleVO ruleVO,List<CodeOrderSecDTO> secDTOList,String oldCode,LinkedList<CodeOrderSecDTO> newSecDTOList) throws Exception {
+
+		//杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
+		QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
+		allCodeWrapper.in("id", VciBaseUtil.str2List(oldCode));
+		Map<String,String> secDTOMap=secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t.getSecValue(),(o1, o2)->o2));
+		List<CodeAllCode>codeAllcodeList=codeAllCodeService.selectByWrapper(allCodeWrapper);
+		if(!CollectionUtils.isEmpty(codeAllcodeList)){
+			String codeDelimit=codeAllcodeList.get(0).getCodeDelimit();
+			String[] secValues=StringUtils.splitByWholeSeparatorPreserveAllTokens(codeDelimit,SERIAL_VALUE_SPACE);
+			//VciBaseUtil.str2List()
+			for (int i=0; i<ruleVO.getSecVOList().size();i++){
+				CodeBasicSecVO codeBasicSecVO=ruleVO.getSecVOList().get(i);
+				CodeOrderSecDTO codeOrderSecDTO=new CodeOrderSecDTO();
+				String secValue=secValues[i];
+				boolean isRoman=VciBaseUtil.isRoman(secValue);
+				if(isRoman){
+					continue;
+				}
+				if(secDTOMap.containsKey(codeBasicSecVO.getOid())){
+					secValue=	secDTOMap.get(codeBasicSecVO.getOid())	;
+				}
+				if(StringUtils.isNotBlank(secValue)) {
+					codeOrderSecDTO.setSecOid(codeBasicSecVO.getOid());
+					codeOrderSecDTO.setSecValue(secValue);
+					newSecDTOList.add(codeOrderSecDTO);
+				}
+			}
+		}else{
+			throw new Exception("鏍规嵁鍘熸爣鍑嗙紪鍙凤紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勪俊鎭�");
+		}
+	}
+	/***
+	 * 鍒跺畾锛屽垯涓嶉渶瑕佷骇鐢熸洿鏀瑰崟鐩存帴鐢熸垚缂栫爜
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String addsaveDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		String code="";
+		CodeOrderDTO orderDTO=new CodeOrderDTO();
+		BeanUtil.convert(codeBZApplyDTO,orderDTO);
+		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid());
+		Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid(), t -> t));
+		//鏄惁鏄爣鍑�,涓嶆槸鏍囧噯鐨勪笉浼氬幓绠�
+		if(!codeBZApplyDTO.isSeries()){
+			//鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌�
+			orderDTO.getSecDTOList().stream().forEach(codeOrderSecDTO -> {
+				if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){
+					codeOrderSecDTO.setSecValue("");
+				}
+			});
+		}
+		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		return createDataBZ(orderDTO,ruleVO,authUser);
+	}
+
+	/***
+	 * 鏇存敼鍗曠殑鍒涘缓
+	 * @param code
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String createChangeOder(String code,CodeBZApplyDTO codeBZApplyDTO, boolean authUser){
+
+		return "";
+
+	}
+	/***
+	 * 闆嗘垚鍙彉鐮佹鐢宠鎺ュ彛
+	 * @param codeBZApplyDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
+	 * @param    authUser 鏄惁鐢ㄧ櫥褰曠敤鎴疯褰�
+	 * @return
+	 * @throws Exception
+	 */
+	public String addSaveBZCodeNotauthUser(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		return	addSaveBZCode(codeBZApplyDTO,authUser);
+	}
+
 	/**
      * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
      *
@@ -873,7 +1167,7 @@
                     //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
                     temp = "%s";
                 }
-				queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')");
+                queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')");
                 queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
                 conditionMap.put(queryKey, queryValue);
             } else {
@@ -4225,7 +4519,8 @@
         toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString()));
         toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString());
         toBo.setLctid(fromBo.getLctid());
-        toBo.setLcStatus("Editing");
+        //toBo.setLcStatus("Editing");
+		toBo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
         toBo.setId(fromBo.getId());
         toBo.setName(fromBo.getName());
         toBo.setDescription(fromBo.getDescription());

--
Gitblit v1.9.3