parent
459dafef79
commit
6432e6e31b
@ -0,0 +1,71 @@
|
||||
package org.opsli.common.utils;
|
||||
|
||||
/**
|
||||
* @BelongsProject: opsli-boot
|
||||
* @BelongsPackage: org.opsli.common.utils
|
||||
* @Author: Parker
|
||||
* @CreateTime: 2020-09-19 23:21
|
||||
* @Description: 驼峰转换
|
||||
*/
|
||||
public final class HumpUtil {
|
||||
|
||||
private final static String UNDERLINE = "_";
|
||||
|
||||
|
||||
private HumpUtil(){}
|
||||
|
||||
|
||||
/***
|
||||
* 下划线命名转为驼峰命名
|
||||
*
|
||||
* @param para
|
||||
* 下划线命名的字符串
|
||||
*/
|
||||
|
||||
public static String underlineToHump(String para) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
String a[] = para.split(UNDERLINE);
|
||||
for (String s : a) {
|
||||
if (!para.contains(UNDERLINE)) {
|
||||
result.append(s);
|
||||
continue;
|
||||
}
|
||||
if (result.length() == 0) {
|
||||
result.append(s.toLowerCase());
|
||||
} else {
|
||||
result.append(s.substring(0, 1).toUpperCase());
|
||||
result.append(s.substring(1).toLowerCase());
|
||||
}
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
/***
|
||||
* 驼峰命名转为下划线命名
|
||||
*
|
||||
* @param para
|
||||
* 驼峰命名的字符串
|
||||
*/
|
||||
|
||||
public static String humpToUnderline(String para) {
|
||||
StringBuilder sb = new StringBuilder(para);
|
||||
int temp = 0;//定位
|
||||
if (!para.contains(UNDERLINE)) {
|
||||
for (int i = 0; i < para.length(); i++) {
|
||||
if (Character.isUpperCase(para.charAt(i))) {
|
||||
sb.insert(i + temp, UNDERLINE);
|
||||
temp += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.toString().toLowerCase();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String aa = HumpUtil.humpToUnderline("tenantId");
|
||||
String bb = HumpUtil.underlineToHump(aa);
|
||||
System.out.println(aa);
|
||||
System.out.println(bb);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,123 @@
|
||||
package org.opsli.core.persistence;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.github.pagehelper.PageSerializable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Page<E,T> extends PageSerializable<E>{
|
||||
|
||||
|
||||
private int pageNo = 1;
|
||||
private int pageSize = 10;
|
||||
/** 查询条件构造器 */
|
||||
private QueryWrapper<T> queryWrapper;
|
||||
|
||||
public Page(){
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页 构造函数
|
||||
* @param pageNo 页
|
||||
* @param pageSize 分页大小
|
||||
*/
|
||||
public Page(int pageNo, int pageSize) {
|
||||
super();
|
||||
this.pageNo = pageNo;
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页 构造函数
|
||||
* @param pageNo 页
|
||||
* @param pageSize 分页大小
|
||||
* @param queryWrapper 查询条件
|
||||
*/
|
||||
public Page(int pageNo, int pageSize, QueryWrapper<T> queryWrapper) {
|
||||
super();
|
||||
this.pageNo = pageNo;
|
||||
this.pageSize = pageSize;
|
||||
this.queryWrapper = queryWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页 构造函数
|
||||
* @param pageNo 页
|
||||
* @param pageSize 分页大小
|
||||
*/
|
||||
public Page(int pageNo, int pageSize, String orderBy) {
|
||||
super();
|
||||
this.pageNo = pageNo;
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 分页函数
|
||||
*/
|
||||
public void pageHelperBegin(){
|
||||
PageHelper.startPage(this.pageNo,this.pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页函数
|
||||
*/
|
||||
public void pageHelperEnd(){
|
||||
PageHelper.clearPage();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置数据
|
||||
* @param pageInfo
|
||||
*/
|
||||
public void instance(PageInfo<E> pageInfo) {
|
||||
super.setList(pageInfo.getList());
|
||||
super.setTotal(pageInfo.getTotal());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取bootstrap data分页数据
|
||||
* @return map对象
|
||||
*/
|
||||
public Map<String, Object> getBootstrapData(){
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("rows", this.getList());
|
||||
map.put("total", this.getTotal());
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
// =======================================================
|
||||
|
||||
public int getPageNo() {
|
||||
return pageNo;
|
||||
}
|
||||
|
||||
public void setPageNo(int pageNo) {
|
||||
this.pageNo = pageNo;
|
||||
}
|
||||
|
||||
public int getPageSize() {
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(int pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public QueryWrapper<T> getQueryWrapper() {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public void setQueryWrapper(QueryWrapper<T> queryWrapper) {
|
||||
this.queryWrapper = queryWrapper;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,198 @@
|
||||
package org.opsli.core.persistence;
|
||||
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.opsli.api.base.warpper.ApiWrapper;
|
||||
import org.opsli.common.utils.HumpUtil;
|
||||
import org.opsli.core.base.entity.BaseEntity;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @BelongsProject: opsli-boot
|
||||
* @BelongsPackage: org.opsli.core.persistence
|
||||
* @Author: Parker
|
||||
* @CreateTime: 2020-09-19 21:15
|
||||
* @Description: 查询构建器
|
||||
*
|
||||
* 针对分页查询 无非也就是
|
||||
* 全值匹配 eq
|
||||
* 模糊匹配 like
|
||||
* 日期 begin end 匹配
|
||||
*
|
||||
*/
|
||||
@Slf4j
|
||||
public class PageQueryBuilder<E extends ApiWrapper,T extends BaseEntity>{
|
||||
|
||||
|
||||
// == 匹配条件 ==
|
||||
/** 全值匹配 */
|
||||
private static final String EQ = "EQ";
|
||||
/** 模糊匹配 */
|
||||
private static final String LIKE = "LIKE";
|
||||
/** 日期匹配 */
|
||||
private static final String BEGIN = "BEGIN";
|
||||
private static final String END = "END";
|
||||
/** 排序方式 */
|
||||
private static final String ORDER = "ORDER";
|
||||
private static final String ORDER_ASC = "ASC";
|
||||
private static final String ORDER_DESC = "DESC";
|
||||
|
||||
|
||||
/** 当前页 */
|
||||
private Integer pageNo;
|
||||
/** 每页数量 */
|
||||
private Integer pageSize;
|
||||
/** 参数 */
|
||||
private Map<String, String[]> parameterMap;
|
||||
/** Entity Clazz */
|
||||
private Class<T> entityClazz;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param entityClazz Entity 的 clazz
|
||||
* @param pageNo 当前页
|
||||
* @param pageSize 每页显示条数
|
||||
* @param parameterMap request 参数
|
||||
*/
|
||||
public PageQueryBuilder(Class<T> entityClazz, Integer pageNo, Integer pageSize, Map<String, String[]> parameterMap){
|
||||
this.pageNo = pageNo;
|
||||
this.pageSize = pageSize;
|
||||
this.parameterMap = parameterMap;
|
||||
this.entityClazz = entityClazz;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建builderPage
|
||||
* @return
|
||||
*/
|
||||
public Page<E,T> builderPage(){
|
||||
Page<E,T> page = new Page<>(this.pageNo,this.pageSize);
|
||||
QueryWrapper<T> queryWrapper = this.createQueryWrapper();
|
||||
page.setQueryWrapper(queryWrapper);
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 查询条件构造器
|
||||
* @return
|
||||
*/
|
||||
private QueryWrapper<T> createQueryWrapper(){
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
if(this.parameterMap == null){
|
||||
return queryWrapper;
|
||||
}
|
||||
for (Map.Entry<String, String[]> stringEntry : this.parameterMap.entrySet()) {
|
||||
String keys = stringEntry.getKey();
|
||||
String[] values = stringEntry.getValue();
|
||||
// 非空检测
|
||||
if(StringUtils.isEmpty(keys) || values == null || StringUtils.isEmpty(values[0])){
|
||||
continue;
|
||||
}
|
||||
|
||||
// 键 和 操作
|
||||
String[] key_handle = keys.split("_");
|
||||
if(key_handle.length < 2){
|
||||
continue;
|
||||
}
|
||||
// 判断 字段是否合法
|
||||
boolean hasField = this.validationField(key_handle);
|
||||
if(hasField){
|
||||
// 验证操作是否合法
|
||||
boolean hasHandle = this.validationHandle(key_handle);
|
||||
if(hasHandle){
|
||||
// 操作
|
||||
String handle = key_handle[1];
|
||||
// 键
|
||||
String key = key_handle[0];
|
||||
// 处理值
|
||||
String value = values[0];
|
||||
// 赋值
|
||||
this.handlerValue(queryWrapper, handle, key ,value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理值
|
||||
* @param queryWrapper 查询构造器
|
||||
* @param handle 操作
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return
|
||||
*/
|
||||
private void handlerValue(QueryWrapper<T> queryWrapper, String handle, String key, String value){
|
||||
if(queryWrapper == null || StringUtils.isEmpty(handle)
|
||||
|| StringUtils.isEmpty(key) || StringUtils.isEmpty(value)
|
||||
){
|
||||
return;
|
||||
}
|
||||
// 转换驼峰 为 数据库下划线字段
|
||||
key = HumpUtil.humpToUnderline(key);
|
||||
if (EQ.equals(handle)) {
|
||||
// 全值匹配
|
||||
queryWrapper.eq(key,value);
|
||||
} else if (LIKE.equals(handle)) {
|
||||
// 模糊匹配
|
||||
queryWrapper.like(key,value);
|
||||
} else if (BEGIN.equals(handle)) {
|
||||
// 大于等于
|
||||
queryWrapper.ge(key,value);
|
||||
} else if (END.equals(handle)) {
|
||||
// 小于等于
|
||||
queryWrapper.le(key,value);
|
||||
} else if (ORDER.equals(handle)) {
|
||||
// 排序
|
||||
if(ORDER_ASC.equals(value)){
|
||||
queryWrapper.orderByAsc(key);
|
||||
} else if(ORDER_DESC.equals(value)){
|
||||
queryWrapper.orderByDesc(key);
|
||||
} else{
|
||||
queryWrapper.orderByAsc(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测 字段是否合法
|
||||
* @param key_handle
|
||||
* @return
|
||||
*/
|
||||
private boolean validationField(String[] key_handle){
|
||||
if(entityClazz == null || key_handle == null || StringUtils.isEmpty(key_handle[0])){
|
||||
return false;
|
||||
}
|
||||
// 判断当前传入参数 是否是Entity的字段
|
||||
return ReflectUtil.hasField(entityClazz, key_handle[0]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检测 操作是否合法
|
||||
* @param key_handle
|
||||
* @return
|
||||
*/
|
||||
private boolean validationHandle(String[] key_handle){
|
||||
if(key_handle == null || StringUtils.isEmpty(key_handle[1])){
|
||||
return false;
|
||||
}
|
||||
String handle = key_handle[1];
|
||||
if (EQ.equals(handle)) {
|
||||
return true;
|
||||
} else if (LIKE.equals(handle)) {
|
||||
return true;
|
||||
} else if (BEGIN.equals(handle)) {
|
||||
return true;
|
||||
} else if (END.equals(handle)) {
|
||||
return true;
|
||||
} else if (ORDER.equals(handle)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package org.opsli.core.utils;
|
||||
|
||||
/**
|
||||
* @BelongsProject: opsli-boot
|
||||
* @BelongsPackage: org.opsli.core.utils
|
||||
* @Author: Parker
|
||||
* @CreateTime: 2020-09-19 20:03
|
||||
* @Description: 用户工具类
|
||||
*/
|
||||
public final class UserUtil {
|
||||
|
||||
private UserUtil(){}
|
||||
|
||||
/**
|
||||
* 获得 租户ID
|
||||
* @return
|
||||
*/
|
||||
public static String getTenantId(){
|
||||
// TODO 如果 没取到多租户ID 也按照默认值赋值 且不可删除默认多租户数据
|
||||
// TODO 判断权限 如果是 admin 超级管理员 则租户ID清空 且findList 不做处理 否则默认都会做处理
|
||||
// TODO 如果表中 没有 tenant_id 字段 则不进行多租户处理
|
||||
|
||||
return "a121321255";
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue