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

---
 Source/UBCS-WEB/.gitignore                                                                                               |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java                   |    7 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java                |  102 ++++++++++++++++++++++++++++++---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java |   21 +-----
 4 files changed, 101 insertions(+), 31 deletions(-)

diff --git a/Source/UBCS-WEB/.gitignore b/Source/UBCS-WEB/.gitignore
index 07c8fe4..fdd7d45 100644
--- a/Source/UBCS-WEB/.gitignore
+++ b/Source/UBCS-WEB/.gitignore
@@ -1,6 +1,6 @@
 .DS_Store
 node_modules
-/dist
+# /dist
 
 /tests/e2e/videos/
 /tests/e2e/screenshots/
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java
index e9e9392..71ae42e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
@@ -35,6 +36,7 @@
 	private static final String IS_NULL = "_null";
 	private static final String NOT_NULL = "_notnull";
 	private static final String IGNORE = "_ignore";
+
 
 	public UBCSSqlKeyword() {
 	}
@@ -234,13 +236,14 @@
 	 * @param keyword
 	 * @return
 	 */
-	private static String getColumn(String column, String keyword) {
+	public static String getColumn(String column, String keyword) {
 		//娌℃湁杞笅鍒掔嚎鏄犲皠
-		return StringUtil.removeSuffix(column, keyword).toLowerCase(Locale.ROOT);
+		return StringUtil.removeSuffix(column, keyword).toLowerCase(Locale.ROOT).trim();
 	}
 
 	public static String filter(String param) {
 		return param == null ? null : param.replaceAll("(?i)'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql", "");
 	}
 
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
index fe590ad..68256fb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -69,11 +69,6 @@
 	@Resource
 	private CodeClassifyTemplateAttrMapper codeClassifyTemplateAttrMapper;
 
-	//	@Resource
-	//	CodeClstempattrMapper codeClstempattrMapper;
-		//	@Resource
-	//	ICodeTempphaseService codeTempphaseService;
-
 	@Resource
 	IDictBizClient iDictBizClient;
 
@@ -723,8 +718,8 @@
 		}
 
 		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
-//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+		// VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+		// queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
 		Map<String,Object> condition = new HashMap<>(1);
 		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
 		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList = baseMapper.selectByMap(condition);
@@ -779,21 +774,13 @@
 		CodeClassifyTemplate codeClassifyTemplateDO = codeClassifyTemplateMapper.selectById(templateAttrOid);
 
 		//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
-		// TODO 寰呭畬鍠�
-		List<BtmTypeAttributeVO> boAttrs =  null; // (List<BtmTypeAttributeVO>) attributeClient.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
-//		codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
-//		BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
+		// TODO 宸插畬鍠�
+		List<BtmTypeAttributeVO> boAttrs =  (List<BtmTypeAttributeVO>) btmTypeClient.getAllAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
 		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
 		//鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
 		if(boAttrs == null){
 			boAttrs = new ArrayList<>();
 		}
-//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
-
-//		Map<String,Object> condition = new HashMap<>(1);
-//		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
-
 		QueryWrapper<CodeClassifyTemplateAttr> wrapper=new QueryWrapper<>();
 		wrapper.eq("CLASSIFYTEMPLATEOID",templateAttrOid);
 
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 fc99a8c..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,6 +18,7 @@
 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;
@@ -36,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;
@@ -60,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;
@@ -326,6 +330,7 @@
 		}
 		return comboboxKVs;
 	}
+
 	/**
 	 * 淇敼鐘舵��
 	 *
@@ -1711,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));
 			});
 		}
 		//缁勫悎璧锋潵
@@ -1786,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());
@@ -1809,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);
 			}
 		}
-
 	}
 
 	/**
@@ -1873,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 鏌ヨ鐨勫瓧娈�
@@ -1880,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)

--
Gitblit v1.9.3