From 64decfa5272a6b068c3afb6ea5f071a0fdbb9b21 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 16 六月 2023 17:50:46 +0800
Subject: [PATCH] 修改bug,添加高级查询SQL拼接方法

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java |  132 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 106 insertions(+), 26 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 ca49405..c4d9f6d 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
@@ -18,16 +18,16 @@
 import com.vci.ubcs.code.mapper.CodeWupinMapper;
 import com.vci.ubcs.code.mapper.CommonsMapper;
 import com.vci.ubcs.code.service.*;
+import com.vci.ubcs.code.util.ClientBusinessObject;
 import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
 import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
 import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
 import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
-import com.vci.ubcs.omd.feign.IAttributeClient;
-import com.vci.ubcs.omd.feign.IBtmTypeClient;
-import com.vci.ubcs.omd.feign.IEnumClient;
-import com.vci.ubcs.omd.feign.IRevisionRuleClient;
+import com.vci.ubcs.omd.cache.EnumCache;
+import com.vci.ubcs.omd.feign.*;
+import com.vci.ubcs.omd.utils.VciOmdUtil;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.EnumVO;
@@ -37,6 +37,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.UBCSSqlKeyword;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.constant.RegExpConstant;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -61,6 +62,8 @@
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.Cache;
@@ -101,8 +104,6 @@
 	@Resource
 	private CodeClstemplateServiceImpl templateService;
 
-	@Resource
-	private IAttributeClient attributeClient;
 
 	/**
 	 * 鐢熸垚缂栫爜鐨勬湇鍔�
@@ -120,6 +121,11 @@
 	 */
 	@Resource
 	ISysClient iSysClient;
+	/**
+	 * 绯荤粺鐨勬湇鍔�
+	 */
+	@Resource
+	private IWebSecretClient secretService;
 	/**
 	 * 鐢ㄦ埛鏈嶅姟
 	 */
@@ -324,6 +330,7 @@
 		}
 		return comboboxKVs;
 	}
+
 	/**
 	 * 淇敼鐘舵��
 	 *
@@ -846,9 +853,7 @@
 			}
 
 			int secret = VciBaseUtil.getInt(String.valueOf(cbo.getSecretGrade()));
-			//鍚庣画鐪嬪瘑绾ф湇鍔℃槸鍚﹀彲鐢�
-//			if (secret == 0 || !secretService.checkDataSecret(secret)) {
-			if (secret == 0 ) {
+			if (secret == 0 || !secretService.checkDataSecret(secret).getData()) {
 				Integer userSecret = VciBaseUtil.getCurrentUserSecret();
 //				cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
 				cbo.setSecretGrade(userSecret == null || userSecret == 0 ? UserSecretEnum.NONE.getValue() : userSecret);
@@ -938,7 +943,8 @@
 	 * @param attrName 灞炴�х殑鍚嶅瓧
 	 * @return true 琛ㄧず搴旇蹇界暐
 	 */
-	boolean checkUnAttrUnEdit(String attrName){
+	@Override
+	public boolean checkUnAttrUnEdit(String attrName){
 		return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
 			||"ts".equalsIgnoreCase(attrName)
 			|| "lastmodifier".equalsIgnoreCase(attrName)
@@ -1238,8 +1244,8 @@
 					fieldVO.setComboxKey(fieldVO.getField() + "_data");
 				}
 			} else {
-//				List<KeyValue> osEnumItemVOList= enumService.getEnum(attrVO.getEnumId());
-//				fieldVO.setData(osEnumItemVOList);
+				List<KeyValue> osEnumItemVOList= VciOmdUtil.enumsToListKeyVale(EnumCache.getList(attrVO.getEnumId()));
+				fieldVO.setData(osEnumItemVOList);
 			}
 		}
 		//鐪嬫槸鍚︽湁鍙傜収
@@ -1710,10 +1716,10 @@
 			});
 
 			andCondtionMap.forEach((k, v) -> {
-				andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+				andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap,btmType));
 			});
 			orConditionMap.forEach((k, v) -> {
-				orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+				orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap,btmType));
 			});
 		}
 		//缁勫悎璧锋潵
@@ -1741,7 +1747,7 @@
 		if (attrVOMap.keySet().contains("secretgrade")) {
 			Integer userSecret = VciBaseUtil.getCurrentUserSecret();
 			if (userSecret == null || userSecret == 0) {
-//				userSecret = secretService.getMinUserSecret();
+				userSecret = secretService.getMinUserSecret().getData();
 			}
 			whereSql += " and ( t.secretGrade <= " + userSecret + ") ";
 		}
@@ -1785,7 +1791,65 @@
 	 * @param attrVOMap     灞炴�х殑鏄犲皠
 	 * @return Sql璇彞
 	 */
-	private String getConditionSql(String key, String value, Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫睘鎬�**/> referFieldMap, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+	private String getConditionSql(String key, String value, Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫睘鎬�**/> referFieldMap, Map<String, CodeClassifyTemplateAttrVO> attrVOMap,String btmType) {
+		/*if (!Func.hasEmpty(new Object[]{key,value}) && !key.endsWith("_ignore")) {
+			if (key.endsWith("_like")) {
+				String field = UBCSSqlKeyword.getColumn(key, "_like");
+				if (referFieldMap.containsKey(field)) {
+					//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+					return referFieldMap.get(field) + SPACE + "LIKE" + SPACE + "concat(%,"+"concat('" + value + "'" + SPACE+",%)";
+				} else {
+					return (field.contains(".") ? "" : "t.") + field + SPACE + " <= " + getStringValueInWhere(field, value, attrVOMap);
+				}
+			} else if (key.endsWith("_notequal")) {
+				qw.ne(UBCSSqlKeyword.getColumn(key, "_notequal"), v);
+			} else if (key.endsWith("_likeleft")) {
+				qw.likeLeft(UBCSSqlKeyword.getColumn(key, "_likeleft"), v);
+			} else if (key.endsWith("_likeright")) {
+				qw.likeRight(UBCSSqlKeyword.getColumn(key, "_likeright"), v);
+			} else if (key.endsWith("_notlike")) {
+				qw.notLike(UBCSSqlKeyword.getColumn(key, "_notlike"), v);
+			} else if (key.endsWith("_ge")) {
+				String field = UBCSSqlKeyword.getColumn(key, "_ge");
+				if (referFieldMap.containsKey(field)) {
+					//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+					return referFieldMap.get(field) + SPACE + " >= '" + value + "'" + SPACE;
+				} else {
+					return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap);
+				}
+			} else if (key.endsWith("_le")) {
+				//璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
+				String field = UBCSSqlKeyword.getColumn(key, "_le");
+				if (referFieldMap.containsKey(field)) {
+					//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+					return referFieldMap.get(field) + SPACE + " <= '" + value + "'" + SPACE;
+				} else {
+					return (field.contains(".") ? "" : "t.") + field + SPACE + " <= " + getStringValueInWhere(field, value, attrVOMap);
+				}
+			} else if (key.endsWith("_gt")) {
+				qw.gt(UBCSSqlKeyword.getColumn(key, "_gt"), v);
+			} else if (key.endsWith("_lt")) {
+				qw.lt(UBCSSqlKeyword.getColumn(key, "_lt"), v);
+			} else if (key.endsWith("_datege")) {
+				qw.ge(UBCSSqlKeyword.getColumn(key, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+			} else if (key.endsWith("_dategt")) {
+				qw.gt(UBCSSqlKeyword.getColumn(key, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+			} else if (key.endsWith("_dateequal")) {
+				qw.eq(UBCSSqlKeyword.getColumn(key, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+			} else if (key.endsWith("_datele")) {
+				qw.le(UBCSSqlKeyword.getColumn(key, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+			} else if (key.endsWith("_datelt")) {
+				qw.lt(UBCSSqlKeyword.getColumn(key, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+			} else if (key.endsWith("_null")) {
+				qw.isNull(UBCSSqlKeyword.getColumn(key, "_null"));
+			} else if (key.endsWith("_notnull")) {
+				qw.isNotNull(UBCSSqlKeyword.getColumn(key, "_notnull"));
+			} else {
+				qw.eq(UBCSSqlKeyword.getColumn(key, "_equal"), v);
+			}
+
+		}*/
+
 		if (key.endsWith("_begin")) {
 			//璇存槑鏄�>=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
 			String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
@@ -1808,12 +1872,11 @@
 			if (referFieldMap.containsKey(key)) {
 				//璇存槑鏄弬鐓х殑锛屾垜浠弬鐓х殑鏌ヨ閮借涓烘槸瀛楃涓诧紝濡傛灉鏄椂闂存牸寮忕殑鏌ヨ鑲畾鏈夐棶棰橈紝
 				String selectKey = referFieldMap.get(key);
-				return getSqlByValue(selectKey, value, null);
+				return getSqlByValue(selectKey, value, null,btmType);
 			} else {
-				return getSqlByValue(key, value, attrVOMap);
+				return getSqlByValue(key, value, attrVOMap,btmType);
 			}
 		}
-
 	}
 
 	/**
@@ -1872,6 +1935,24 @@
 	}
 
 	/**
+	 * 鏌ョ湅鏄惁榛樿灞炴��
+	 * @param selectKey
+	 * @param btmType
+	 * @return
+	 */
+	private boolean isDefaultAttr(String selectKey, String btmType){
+		if(StringUtils.isBlank(btmType)){
+			return false;
+		}
+		R<BtmTypeVO> r = btmTypeClient.getDefaultAttrByBtmId(btmType);
+		List<BtmTypeAttributeVO> attributes = r.getData().getAttributes();
+		if(r.getCode() != 200 || attributes.isEmpty()){
+			return false;
+		}
+		return  attributes.stream().anyMatch(item->item.getId().equals(selectKey));
+	}
+
+	/**
 	 * 灏佽鏈�缁堢殑sql璇彞涓殑鍊奸儴鍒�
 	 *
 	 * @param selectKey 鏌ヨ鐨勫瓧娈�
@@ -1879,12 +1960,12 @@
 	 * @param attrVOMap 灞炴�х殑鏄剧ず瀵硅薄鏄犲皠
 	 * @return sql閲岀殑鍊�
 	 */
-	private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+	private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap,String btmType) {
 		StringBuilder sql = new StringBuilder();
-		// TODO 寰呭畬鍠�
-		//	if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
-		//		sql.append("t.");
-		//	}
+		// TODO 宸插畬鍠�
+		if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || isDefaultAttr(selectKey,btmType) || selectKey.matches(RegExpConstant.LETTER))) {
+			sql.append("t.");
+		}
 		if (value.startsWith(QueryOptionConstant.IN)) {
 			sql.append(selectKey)
 				.append(SPACE)
@@ -2963,12 +3044,11 @@
 	@Override
 	public MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid, String functionId) {
 		VciBaseUtil.alertNotNull(codeClassifyOid, "涓婚搴撳垎绫讳富閿�");
+
 		MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid));
 		uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0);
 		if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) {
 			List<Menu> buttonVOS = iSysClient.getMenuButtonByType(uiInfoVO.getTemplateVO().getBtmTypeId()).getData();
-
-			//鍔熻兘鎸夐挳鏈嶅姟杩樻湭瀹炵幇锛岀瓑瀹炵幇浜嗭紝鍦ㄨ繘琛岃皟鐢�
 //			List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
 //			if (operationVOS == null) {
 //				operationVOS = new ArrayList<>();

--
Gitblit v1.9.3