From 01e690854cfd45322b07f3eafb91ff875dc7af7b Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期五, 08 九月 2023 15:45:02 +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 | 191 ++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 178 insertions(+), 13 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 e3cfd10..eaca080 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 @@ -36,6 +36,7 @@ import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.revision.model.TreeWrapperOptions; import com.vci.ubcs.starter.revision.service.RevisionModelUtil; +import com.vci.ubcs.starter.util.MdmBtmTypeConstant; import com.vci.ubcs.starter.util.UBCSSqlKeyword; import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.constant.RegExpConstant; @@ -559,7 +560,9 @@ } else { //璇存槑鏄嚜琛岄厤缃殑 //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴�� - value = orderDTO.getData().getOrDefault(attrId, ""); + String orDefault = orderDTO.getData().getOrDefault(attrId, ""); + value = Func.isBlank(orDefault) ? orderDTO.getData() + .getOrDefault(attrId.toUpperCase(Locale.ROOT), ""):orDefault; } return value; } @@ -665,7 +668,11 @@ } final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "}; conditionMap.forEach((key, value) -> { - sql[0] += " and " + key + " = " + value; + if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) { + sql[0] += " and " + key + " is null"; + }else{ + sql[0] += " and " + key + " = " + value; + } }); if (StringUtils.isNotBlank(orderDTO.getOid())) { //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� @@ -682,6 +689,67 @@ } } } + + /** + * 鏍¢獙鍏抽敭灞炴�� + * + * @param orderDTO 缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅 + */ + @Override + public List<Map> checkKeyAttrOnOrderFordatas(CodeOrderDTO orderDTO) { + List<Map>dataList=new ArrayList<>(); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); + //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮� + CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo); + //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗 + //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴�� + Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + Map<String, String> conditionMap = new HashMap<>(); + boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); + //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖ + boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); + boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); + boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); + ketAttrMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (value == null) { + value = ""; + } + wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); + }); + + //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� + if (!CollectionUtils.isEmpty(conditionMap)) { + conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'"); +// final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "}; + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); +// String referTable = VciBaseUtil.getTableName(referVO.getReferType()); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + final String[] sql = {"select * from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "}; + conditionMap.forEach((key, value) -> { + sql[0] += " and " + key + " = " + value; + }); + if (StringUtils.isNotBlank(orderDTO.getOid())) { + //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� + sql[0] += " and oid != '" + orderDTO.getOid() + "'"; + } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { + sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'"; + } + sql[0] += " and lastR = '1' and lastV = '1' "; +// if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) { + dataList=commonsMapper.selectBySql(sql[0]); + if (!CollectionUtils.isEmpty(dataList)) { +// String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; +// String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; +// throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs); + return dataList; + } + } + return dataList; + } /** * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞 @@ -702,7 +770,7 @@ boolean ignoreSpace = trim || trimAll; if (StringUtils.isBlank(value)) { //涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜� - conditionMap.put("t." + attrId, "null"); + conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); } else { if (keyRuleVO != null) { String queryKey = ""; @@ -738,8 +806,12 @@ queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'"); conditionMap.put(queryKey, queryValue); } else { - //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅 - conditionMap.put("t." + attrId, "'" +value+ "'"); + if(StringUtils.isNotBlank(value)) { + //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅 + conditionMap.put("t." + attrId, "'" + value + "'"); + }else{ + conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); + } } } } @@ -879,7 +951,7 @@ return (BaseModel) valueWrapper.get(); } catch (Exception e) { logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄", e); - throw new VciBaseException("initBtmError", new String[]{btmName}); + throw new ServiceException("initBtmError:"+"涓氬姟绫诲瀷锛�"+btmName+":"+e.getMessage()); } } @@ -1257,6 +1329,7 @@ } fieldVO.setOptionJsMap(eventJsMap); fieldVO.setStyle(attrVO.getTableDisplayStyle()); + fieldVO.setTableDisplayFlag(attrVO.getTableDisplayFlag()); //鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫 fieldVO.setDateFormate(attrVO.getCodeDateFormat()); return fieldVO; @@ -2398,10 +2471,12 @@ conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, codeClassifyOid); } else { // conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) - + List<BtmTypeVO> classifyData = btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY)).getData(); + if(Func.isEmpty(classifyData)){ + throw new ServiceException("涓氬姟绫诲瀷涓嫳鏂囧悕绉板拰鏌ヨ鏉′欢閰嶇疆涓嶄竴鑷达紝璇蜂慨鏀逛笟鍔$被鍨嬩腑鍒嗙被琛ㄨ嫳鏂囧悕绉颁负"+MdmBtmTypeConstant.CODE_CLASSIFY); + } conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + - btmTypeClient.selectByIdCollection(Collections.singletonList("classify")) - .getData().get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant + classifyData.get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )"); } @@ -2664,13 +2739,103 @@ String codeRuleOid = classifyVO.getCodeRuleOid(); if (StringUtils.isBlank(codeRuleOid)) { //寰�涓婃壘 - CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); - return getCodeRuleByClassifyFullInfo(fullInfo); + CodeRuleVO classifyFullInfoCodeRule = getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid)); + return toCodeValueApplyStatus(classifyFullInfoCodeRule); } - //鎴戜滑鏌ヨ缂栫爜瑙勫垯 - return ruleService.getObjectHasSecByOid(codeRuleOid); + //鏌ヨ缂栫爜瑙勫垯 + CodeRuleVO objectHasSecByOid = ruleService.getObjectHasSecByOid(codeRuleOid); + return toCodeValueApplyStatus(objectHasSecByOid); } + /** + * 缂栫爜鐢宠琛ㄥ崟锛岄殣钘忋�佸彲杈撱�佸彧璇昏浆鎹� + * @param codeRuleVO + * @return + */ + private CodeRuleVO toCodeValueApplyStatus(CodeRuleVO codeRuleVO){ + if(codeRuleVO.getSecVOList().isEmpty()){ + return codeRuleVO; + } + // 鍙緭鐮佹绫诲瀷 + List<String> inputTypes = Arrays.asList( + CodeSecTypeEnum.CODE_FIXED_SEC.getValue(), + CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue(), + CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue(), + CodeSecTypeEnum.CODE_REFER_SEC.getValue() + ); + // 鍙鐮佹绫诲瀷 + List<String> readOnlyTypes = Arrays.asList( + CodeSecTypeEnum.CODE_LEVEL_SEC.getValue(), + CodeSecTypeEnum.CODE_ATTR_SEC.getValue(), + CodeSecTypeEnum.CODE_DATE_SEC.getValue() + ); + // 闅愯棌鐮佹绫诲瀷 + /*List<String> hideType = Arrays.asList( + CodeSecTypeEnum.CODE_SERIAL_SEC.getValue() + );*/ + // 褰撳墠瑙勫垯鐨勬墍鏈夌被鍨嬬爜娈� + List<String> secTypeList = codeRuleVO.getSecVOList().stream().map(CodeBasicSecVO::getSecType).collect(Collectors.toList()); + // 鎯呭喌涓� 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷 + boolean hasAllReadOnlyType =secTypeList.stream().allMatch(item -> readOnlyTypes.stream().anyMatch(item1-> item.equals(item1))); + // 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷 + if(hasAllReadOnlyType){ + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + secVO.setCodeValueApplyStatus(3); + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateFormatStr(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + return codeRuleVO; + } + // 鎯呭喌浜� 鍏ㄩ儴閮芥槸鍙緭鍏ョ被鍨嬬殑 + boolean hasAllInputType = secTypeList.stream().allMatch(item -> inputTypes.stream().anyMatch(item1-> item.equals(item1))); + if(hasAllInputType){ + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + secVO.setCodeValueApplyStatus(1); + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateFormatStr(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + return codeRuleVO; + } + // 鎯呭喌涓夊寘鍚汉涓洪�夋嫨鐨勭爜娈碉紝鍙堟湁鍙绫诲瀷鐮佹鐨勶紝鎵�鏈夌爜娈甸兘瑕佹樉绀哄嚭鏉ワ紝鍙緭璁剧疆涓�1锛屽彧璇昏缃负2锛岄殣钘忚缃负3 + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + if(inputTypes.contains(secVO.getSecType())){ + secVO.setCodeValueApplyStatus(1); + }else if(readOnlyTypes.contains(secVO.getSecType())){ + secVO.setCodeValueApplyStatus(2); + }else{ + secVO.setCodeValueApplyStatus(3); + } + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateFormatStr(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + codeRuleVO.setIsShowHideStatus(hasAllReadOnlyType ? "readOnly":(hasAllInputType ? "input":"readAndInput")); + return codeRuleVO; + } + /** * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭幏鍙栫紪鐮佽鍒� * -- Gitblit v1.9.3