From ccf29002ca0c2cad3e0e801bcdddc2450f1253dd Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 02 十一月 2022 17:10:24 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/service/all/BaseQueryService.java | 181 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 169 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/lf/server/service/all/BaseQueryService.java b/src/main/java/com/lf/server/service/all/BaseQueryService.java index b009264..8d22435 100644 --- a/src/main/java/com/lf/server/service/all/BaseQueryService.java +++ b/src/main/java/com/lf/server/service/all/BaseQueryService.java @@ -1,36 +1,53 @@ package com.lf.server.service.all; +import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lf.server.entity.ctrl.IdNameEntity; +import com.lf.server.entity.ctrl.TabEntity; import com.lf.server.helper.AesHelper; import com.lf.server.helper.ClassHelper; import com.lf.server.helper.StringHelper; +import com.lf.server.mapper.all.BaseQueryMapper; +import com.lf.server.mapper.all.BasicMapper; import com.lf.server.mapper.all.GeomBaseMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 鐖舵煡璇㈡湇鍔$被 * @author WWW */ @Service -public class BaseQueryService { +public class BaseQueryService implements BaseQueryMapper { + @Autowired + BaseQueryMapper baseQueryMapper; + + /** + * 琛ㄥ悕Map + */ + private static Map<String, String> tabMap = new HashMap<String, String>(3); + /** * 鑾峰彇鐖禡apper * * @param name Mapper鍚� * @return BaseMapper */ - public BaseMapper getBaseMapper(String name) { + public BasicMapper getBasicMapper(String name) { if (StringHelper.isEmpty(name)) { return null; } Object obj = ClassHelper.getBean(name.trim() + "Mapper"); - if (!(obj instanceof BaseMapper)) { + if (!(obj instanceof BasicMapper)) { return null; } - return (BaseMapper) obj; + return (BasicMapper) obj; } /** @@ -53,18 +70,158 @@ } /** - * 娣诲姞绌洪棿鏌ヨ鏉′欢 + * 娣诲姞杩囨护鏉′欢 * - * @param baseMapper 鐖禡apper - * @param wrapper QueryWrapper - * @param wkt WKT锛堣憲鍚嶆枃鏈級 - * @param srid 绌洪棿寮曠敤鏍囪瘑绗� + * @param wrapper QueryWrapper + * @param filter 鍘熷杩囨护鏉′欢瀛楃涓� + */ + public void addFilterWrapper(QueryWrapper wrapper, String filter) { + if (StringHelper.isEmpty(filter)) { + return; + } + + String[] strs = filter.trim().split(" (?i)and "); + for (String str : strs) { + int start = str.indexOf(" "); + if (start == -1) { + continue; + } + int end = str.indexOf(" ", start + 1); + if (end == -1) { + continue; + } + + String field = str.substring(0, start).trim(); + String express = str.substring(start + 1, end).trim().toLowerCase(); + String value = str.substring(end + 1).trim(); + + addWrapper(wrapper, field, express, getObjectVal(value)); + } + } + + /** + * 鑾峰彇鍊煎璞� + * + * @param value 鍊� + * @return 瀵硅薄 + */ + private Object getObjectVal(String value) { + if (StringHelper.isInteger(value)) { + return Long.parseLong(value); + } + + if (StringHelper.isNumeric(value)) { + return Double.parseDouble(value); + } + + return value.replace("'", ""); + } + + /** + * 娣诲姞鍖呰鍣� + * + * @param wrapper QueryWrapper + * @param field 瀛楁 + * @param express 琛ㄨ揪寮� + * @param value 鍊� + */ + private void addWrapper(QueryWrapper wrapper, String field, String express, Object value) { + switch (express) { + case "like": + wrapper.like(field, value); + break; + case ">": + wrapper.gt(field, value); + break; + case ">=": + wrapper.ge(field, value); + break; + case "<>": + wrapper.ne(field, value); + break; + case "=": + wrapper.eq(field, value); + break; + case "<": + wrapper.lt(field, value); + break; + case "<=": + wrapper.le(field, value); + break; + default: + break; + } + } + + /** + * 娣诲姞绌洪棿杩囨护鏉′欢 + * + * @param basicMapper 鐖禡apper + * @param wrapper QueryWrapper + * @param wkt WKT锛堣憲鍚嶆枃鏈級 + * @param srid 绌洪棿寮曠敤鏍囪瘑绗� * @throws Exception 寮傚父 */ - public void addGeomWrapper(BaseMapper baseMapper, QueryWrapper<Object> wrapper, String wkt, Integer srid) throws Exception { - if (baseMapper instanceof GeomBaseMapper && !StringHelper.isEmpty(wkt) && srid != null) { + public void addGeomWrapper(BasicMapper basicMapper, QueryWrapper wrapper, String wkt, Integer srid) throws Exception { + if (basicMapper instanceof GeomBaseMapper && !StringHelper.isEmpty(wkt) && srid != null) { wkt = AesHelper.decrypt(wkt); wrapper.apply(String.format("ST_Intersects(geom, ST_PolygonFromText('%s', %d))", wkt, srid)); } } + + /** + * 鏍规嵁Mapper鑾峰彇琛ㄥ悕 + * + * @param basicMapper Mapper + * @return 琛ㄥ悕 + */ + public String getTabName(BasicMapper basicMapper) { + String className = ClassHelper.getClassName(basicMapper); + if (tabMap.containsKey(className)) { + return tabMap.get(className); + } + + return getTabName(className); + } + + /** + * 鏍规嵁Mapper鑾峰彇琛ㄥ悕 + * + * @param className Mapper绫诲悕 + * @return 琛ㄥ悕 + */ + private String getTabName(String className) { + Class clazz = ClassHelper.getEntityClass(className); + if (clazz == null) { + return null; + } + + TableName annotation = (TableName) clazz.getAnnotation(TableName.class); + + String tabName = annotation.value(); + if (tabName != null && !tabMap.containsKey(className)) { + tabMap.put(className, tabName); + } + + return tabName; + } + + @Override + public List<IdNameEntity> selectUserFuzzy(String name) { + name = StringHelper.getLikeStr(name); + + return baseQueryMapper.selectUserFuzzy(name); + } + + @Override + public List<IdNameEntity> selectDepFuzzy(String name) { + name = StringHelper.getLikeStr(name); + + return baseQueryMapper.selectDepFuzzy(name); + } + + @Override + public List<TabEntity> selectTabs() { + return baseQueryMapper.selectTabs(); + } } -- Gitblit v1.9.3