package com.lf.server.service.all; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lf.server.helper.AesHelper; import com.lf.server.helper.ClassHelper; import com.lf.server.helper.StringHelper; import com.lf.server.mapper.all.GeomBaseMapper; import org.springframework.stereotype.Service; /** * 父查询服务类 * @author WWW */ @Service public class BaseQueryService { /** * 获取父Mapper * * @param name Mapper名 * @return BaseMapper */ public BaseMapper getBaseMapper(String name) { if (StringHelper.isEmpty(name)) { return null; } Object obj = ClassHelper.getBean(name.trim() + "Mapper"); if (!(obj instanceof BaseMapper)) { return null; } return (BaseMapper) obj; } /** * 获取空间父Mapper * * @param name Mapper名 * @return GeomBaseMapper */ public GeomBaseMapper getGeoBaseMapper(String name) { if (StringHelper.isEmpty(name)) { return null; } Object obj = ClassHelper.getBean(name.trim() + "Mapper"); if (!(obj instanceof GeomBaseMapper)) { return null; } return (GeomBaseMapper) obj; } /** * @param wrapper * @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, value); } } private void addWrapper(QueryWrapper wrapper, String field, String express, String 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 baseMapper 父Mapper * @param wrapper QueryWrapper * @param wkt WKT(著名文本) * @param srid 空间引用标识符 * @throws Exception 异常 */ public void addGeomWrapper(BaseMapper baseMapper, QueryWrapper wrapper, String wkt, Integer srid) throws Exception { if (baseMapper instanceof GeomBaseMapper && !StringHelper.isEmpty(wkt) && srid != null) { wkt = AesHelper.decrypt(wkt); wrapper.apply(String.format("ST_Intersects(geom, ST_PolygonFromText('%s', %d))", wkt, srid)); } } }