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