初始代码
This commit is contained in:
28
yunzhupaas-public/yunzhupaas-generater-base/pom.xml
Normal file
28
yunzhupaas-public/yunzhupaas-generater-base/pom.xml
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.yunzhupaas</groupId>
|
||||
<artifactId>yunzhupaas-java-boot</artifactId>
|
||||
<version>5.2.0-RELEASE</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>yunzhupaas-generater-base</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.yunzhupaas</groupId>
|
||||
<artifactId>yunzhupaas-provider</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yunzhupaas</groupId>
|
||||
<artifactId>yunzhupaas-visualdev-onlinedev-biz</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.yunzhupaas.model;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Documented
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface FieLdsModelExcel {
|
||||
|
||||
String fieLdsModel() default "{}";
|
||||
|
||||
String type() default "mast";
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.yunzhupaas.model;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(description="子表条件组合模型")
|
||||
public class GeneraterSwapModel {
|
||||
@Schema(description = "表单json")
|
||||
private String formDataStr;
|
||||
@Schema(description = "表列表")
|
||||
private String tableList;
|
||||
@Schema(description = "子表名称")
|
||||
private String childTable;
|
||||
@Schema(description = "菜单id")
|
||||
private String menuId;
|
||||
@Schema(description = "查询条件json")
|
||||
private String queryJson;
|
||||
@Schema(description = "高级查询条件json")
|
||||
private String superQueryJson;
|
||||
@Schema(description = "pc列表")
|
||||
private String columnData;
|
||||
@Schema(description = "app列表")
|
||||
private String appColumnData;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.yunzhupaas.model;
|
||||
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.yunzhupaas.database.model.superQuery.SuperJsonModel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class QueryAllModel {
|
||||
private MPJLambdaWrapper wrapper;
|
||||
private Map<String,Class> classMap;
|
||||
/**
|
||||
* 数据过滤
|
||||
*/
|
||||
private String ruleJson;
|
||||
/**
|
||||
* 高级查询
|
||||
*/
|
||||
private String superJson;
|
||||
/**
|
||||
* 数据权限-通过菜单id查询
|
||||
*/
|
||||
private String moduleId;
|
||||
private String dbLink;
|
||||
private String dbType;
|
||||
/**
|
||||
* 所有分组都放进来统一处理
|
||||
*/
|
||||
private List<List<SuperJsonModel>> queryList;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.yunzhupaas.model;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class QueryModel<T> {
|
||||
private QueryWrapper<T> obj;
|
||||
private Class<T> entity;
|
||||
private String queryJson;
|
||||
private String moduleId;
|
||||
private String dbLink;
|
||||
private String dbType;
|
||||
|
||||
public QueryModel(QueryWrapper<T> obj, Class<T> entity, String queryJsonOrModuleId, String dbLink) {
|
||||
this.obj = obj;
|
||||
this.entity = entity;
|
||||
this.queryJson = queryJsonOrModuleId;
|
||||
this.moduleId = queryJsonOrModuleId;
|
||||
this.dbLink = dbLink;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,502 @@
|
||||
package com.yunzhupaas.util;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.yunzhupaas.util.visiual.YunzhupaasKeyConsts;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class GenUtil {
|
||||
/**
|
||||
* 字段说明
|
||||
*/
|
||||
private String fieldName;
|
||||
/**
|
||||
* 运算符
|
||||
*/
|
||||
private String operator;
|
||||
/**
|
||||
* 逻辑拼接符号
|
||||
*/
|
||||
private String logic;
|
||||
/**
|
||||
* 组件标识
|
||||
*/
|
||||
private String yunzhupaasKey;
|
||||
/**
|
||||
* 字段key
|
||||
*/
|
||||
private String field;
|
||||
/**
|
||||
* 自定义的值
|
||||
*/
|
||||
private String fieldValue;
|
||||
/**
|
||||
* 自定义的值2
|
||||
*/
|
||||
private String fieldValue2;
|
||||
|
||||
private List<String> selectIgnore;
|
||||
|
||||
/**
|
||||
* 数据库类型
|
||||
*/
|
||||
private String dbType;
|
||||
/**
|
||||
* 日期格式
|
||||
*/
|
||||
private String format;
|
||||
/**
|
||||
* 数字精度
|
||||
*/
|
||||
private String precision;
|
||||
|
||||
|
||||
/**
|
||||
* @param wrapper wrapper对象
|
||||
* @param fieldDb 数据库字段名实际包括前缀
|
||||
* @return
|
||||
*/
|
||||
public QueryWrapper<?> solveValue(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
MyType myType = myControl(yunzhupaasKey);
|
||||
if ("||".equals(logic)) {
|
||||
wrapper.or();
|
||||
}
|
||||
if (fieldValue == null) {
|
||||
fieldValue = "";
|
||||
}
|
||||
try {
|
||||
ArrayList splitKey = new ArrayList<String>() {{
|
||||
add(YunzhupaasKeyConsts.DATE);
|
||||
add(YunzhupaasKeyConsts.TIME);
|
||||
add(YunzhupaasKeyConsts.NUM_INPUT);
|
||||
add(YunzhupaasKeyConsts.CREATETIME);
|
||||
add(YunzhupaasKeyConsts.MODIFYTIME);
|
||||
}};
|
||||
if (splitKey.contains(yunzhupaasKey) && "between".equals(operator)) {
|
||||
List<String> data = JsonUtil.getJsonToList(fieldValue, String.class);
|
||||
fieldValue = data.get(0);
|
||||
fieldValue2 = data.get(1);
|
||||
}
|
||||
|
||||
|
||||
selectIgnore = new ArrayList<String>() {{
|
||||
add(YunzhupaasKeyConsts.COMSELECT);
|
||||
add(YunzhupaasKeyConsts.ADDRESS);
|
||||
add(YunzhupaasKeyConsts.CASCADER);
|
||||
add(YunzhupaasKeyConsts.CHECKBOX);
|
||||
add(YunzhupaasKeyConsts.DEPSELECT);
|
||||
}};
|
||||
|
||||
myType.judge(wrapper, fieldDb);
|
||||
return wrapper;
|
||||
} catch (Exception e) {
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断控件的所属类型
|
||||
*
|
||||
* @param yunzhupaasKey 控件标识
|
||||
* @return 控件类型
|
||||
*/
|
||||
public MyType myControl(String yunzhupaasKey) {
|
||||
MyType myType = null;
|
||||
switch (yunzhupaasKey) {
|
||||
/** 基础 */
|
||||
case YunzhupaasKeyConsts.COM_INPUT:
|
||||
case YunzhupaasKeyConsts.TEXTAREA:
|
||||
case YunzhupaasKeyConsts.BILLRULE:
|
||||
case YunzhupaasKeyConsts.POPUPTABLESELECT:
|
||||
case YunzhupaasKeyConsts.RELATIONFORM:
|
||||
case YunzhupaasKeyConsts.RELATIONFORM_ATTR:
|
||||
case YunzhupaasKeyConsts.POPUPSELECT:
|
||||
case YunzhupaasKeyConsts.POPUPSELECT_ATTR:
|
||||
myType = new BasicControl();
|
||||
break;
|
||||
// 数字类型
|
||||
case YunzhupaasKeyConsts.CALCULATE:
|
||||
case YunzhupaasKeyConsts.NUM_INPUT:
|
||||
myType = new NumControl();
|
||||
break;
|
||||
// 日期类型
|
||||
case YunzhupaasKeyConsts.DATE:
|
||||
case YunzhupaasKeyConsts.CREATETIME:
|
||||
case YunzhupaasKeyConsts.MODIFYTIME:
|
||||
myType = new DateControl();
|
||||
break;
|
||||
// 时间类型
|
||||
case YunzhupaasKeyConsts.TIME:
|
||||
myType = new TimeControl();
|
||||
break;
|
||||
// 下拉类型
|
||||
default:
|
||||
myType = new SelectControl();
|
||||
}
|
||||
return myType;
|
||||
}
|
||||
|
||||
public void getNullWrapper(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
if ("||".equals(logic)) {
|
||||
wrapper.or(t -> {
|
||||
t.isNull(fieldDb);
|
||||
t.or().eq(fieldDb, "");
|
||||
t.or().eq(fieldDb, "[]");
|
||||
});
|
||||
} else {
|
||||
wrapper.and(t -> {
|
||||
t.isNull(fieldDb);
|
||||
t.or().eq(fieldDb, "");
|
||||
t.or().eq(fieldDb, "[]");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void getNotNullWrapper(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
if ("||".equals(logic)) {
|
||||
wrapper.or(t -> {
|
||||
t.isNotNull(fieldDb);
|
||||
t.ne(fieldDb, "");
|
||||
t.ne(fieldDb, "[]");
|
||||
});
|
||||
} else {
|
||||
wrapper.and(t -> {
|
||||
t.isNotNull(fieldDb);
|
||||
t.ne(fieldDb, "");
|
||||
t.ne(fieldDb, "[]");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 基础类型
|
||||
*/
|
||||
class BasicControl extends MyType {
|
||||
|
||||
@Override
|
||||
void judge(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
switch (operator) {
|
||||
case "null":
|
||||
getNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "notNull":
|
||||
getNotNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "==":
|
||||
wrapper.eq(fieldDb, fieldValue);
|
||||
break;
|
||||
case "<>":
|
||||
wrapper.ne(fieldDb, fieldValue);
|
||||
break;
|
||||
case "like":
|
||||
wrapper.like(fieldDb, fieldValue);
|
||||
break;
|
||||
case "notLike":
|
||||
wrapper.notLike(fieldDb, fieldValue);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NumControl extends MyType {
|
||||
|
||||
|
||||
@Override
|
||||
void judge(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
BigDecimal num1 = new BigDecimal(fieldValue);
|
||||
BigDecimal num2 = null;
|
||||
if (fieldValue2 != null) {
|
||||
num2 = new BigDecimal(fieldValue2);
|
||||
}
|
||||
// 精度处理
|
||||
String fieldPrecisionValue;
|
||||
String fieldPrecisionValue2;
|
||||
if (StringUtils.isNotBlank(precision)) {
|
||||
String yunzhupaasNum = "0." + StringUtils.repeat("0", Integer.parseInt(precision));
|
||||
DecimalFormat numFormat = new DecimalFormat(yunzhupaasNum);
|
||||
fieldPrecisionValue = numFormat.format(new BigDecimal(fieldValue));
|
||||
num1 = new BigDecimal(fieldPrecisionValue);
|
||||
if (fieldValue2 != null) {
|
||||
fieldPrecisionValue2 = numFormat.format(new BigDecimal(fieldValue2));
|
||||
num2 = new BigDecimal(fieldPrecisionValue2);
|
||||
}
|
||||
}
|
||||
|
||||
switch (operator) {
|
||||
case "null":
|
||||
getNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "notNull":
|
||||
getNotNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "==":
|
||||
wrapper.eq(fieldDb, num1);
|
||||
break;
|
||||
case "<>":
|
||||
wrapper.ne(fieldDb, num1);
|
||||
break;
|
||||
case ">":
|
||||
wrapper.gt(fieldDb, num1);
|
||||
|
||||
break;
|
||||
case "<":
|
||||
wrapper.lt(fieldDb, num1);
|
||||
break;
|
||||
case ">=":
|
||||
wrapper.ge(fieldDb, num1);
|
||||
break;
|
||||
case "<=":
|
||||
wrapper.le(fieldDb, num1);
|
||||
break;
|
||||
case "between":
|
||||
wrapper.between(fieldDb, num1, num2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DateControl extends MyType {
|
||||
@Override
|
||||
void judge(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
|
||||
Long time = null;
|
||||
Long time2 = null;
|
||||
Date date = new Date();
|
||||
Date date2 = new Date();
|
||||
if (StringUtils.isNoneBlank(fieldValue)) {
|
||||
time = Long.valueOf(fieldValue);
|
||||
date = new Date(time);
|
||||
}
|
||||
if (StringUtils.isNoneBlank(fieldValue2)) {
|
||||
time2 = Long.valueOf(fieldValue2);
|
||||
// 日期类型的要加上当天的23:59:59
|
||||
if (YunzhupaasKeyConsts.DATE.equals(yunzhupaasKey)) {
|
||||
date2 = new Date(time2 + 60 * 60 * 24 * 1000 - 1000);
|
||||
} else {
|
||||
date2 = new Date(time2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
switch (operator) {
|
||||
case "null":
|
||||
getNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "notNull":
|
||||
getNotNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "==":
|
||||
if (YunzhupaasKeyConsts.DATE.equals(yunzhupaasKey)) {
|
||||
wrapper.between(fieldDb, date, new Date(time + 60 * 60 * 24 * 1000));
|
||||
} else {
|
||||
wrapper.eq(fieldDb, date);
|
||||
}
|
||||
|
||||
break;
|
||||
case "<>":
|
||||
wrapper.ne(fieldDb, date);
|
||||
break;
|
||||
case ">":
|
||||
wrapper.gt(fieldDb, date);
|
||||
break;
|
||||
case "<":
|
||||
wrapper.lt(fieldDb, date);
|
||||
break;
|
||||
case ">=":
|
||||
wrapper.ge(fieldDb, date);
|
||||
break;
|
||||
case "<=":
|
||||
wrapper.le(fieldDb, date);
|
||||
break;
|
||||
case "between":
|
||||
wrapper.between(fieldDb, date, date2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
class TimeControl extends MyType {
|
||||
@Override
|
||||
void judge(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
switch (operator) {
|
||||
case "null":
|
||||
getNullWrapper(wrapper, fieldDb);
|
||||
|
||||
break;
|
||||
case "notNull":
|
||||
getNotNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "==":
|
||||
wrapper.eq(fieldDb, fieldValue);
|
||||
break;
|
||||
case "<>":
|
||||
wrapper.ne(fieldDb, fieldValue);
|
||||
break;
|
||||
case ">":
|
||||
wrapper.gt(fieldDb, fieldValue);
|
||||
break;
|
||||
case "<":
|
||||
wrapper.lt(fieldDb, fieldValue);
|
||||
break;
|
||||
case ">=":
|
||||
wrapper.ge(fieldDb, fieldValue);
|
||||
break;
|
||||
case "<=":
|
||||
wrapper.le(fieldDb, fieldValue);
|
||||
break;
|
||||
case "between":
|
||||
wrapper.between(fieldDb, fieldValue, fieldValue2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private ArrayList<String> solveListValue(String fieldValue) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
try {
|
||||
List<List> list = JsonUtil.getJsonToList(fieldValue, List.class);
|
||||
for (List listSub : list) {
|
||||
result.add(JSONArray.toJSONString(listSub));
|
||||
// 组织选择需要取最后每个数组最后一个
|
||||
String value = (String)listSub.get(listSub.size() - 1);
|
||||
result.add(value);
|
||||
}
|
||||
|
||||
}catch (Exception e){
|
||||
List<String> list = JsonUtil.getJsonToList(fieldValue, String.class);
|
||||
result.add(JSONArray.toJSONString(list));
|
||||
String value = list.get(list.size() - 1);
|
||||
result.add(value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* 下拉控件类型
|
||||
*/
|
||||
class SelectControl extends MyType {
|
||||
|
||||
@Override
|
||||
void judge(QueryWrapper<?> wrapper, String fieldDb) {
|
||||
List<String> list = solveListValue(fieldValue);
|
||||
if (StringUtils.isNoneBlank(fieldValue) && fieldValue.charAt(0) == '[' && !selectIgnore.contains(yunzhupaasKey)) {
|
||||
list = JSONUtil.toList(fieldValue, String.class);
|
||||
}
|
||||
if (selectIgnore.contains(yunzhupaasKey) && StringUtils.isBlank(fieldValue)) {
|
||||
fieldValue = "[]";
|
||||
}
|
||||
|
||||
switch (operator) {
|
||||
case "null":
|
||||
getNullWrapper(wrapper, fieldDb);
|
||||
|
||||
break;
|
||||
case "notNull":
|
||||
getNotNullWrapper(wrapper, fieldDb);
|
||||
break;
|
||||
case "==":
|
||||
wrapper.eq(fieldDb, fieldValue);
|
||||
break;
|
||||
case "<>":
|
||||
wrapper.ne(fieldDb, fieldValue);
|
||||
break;
|
||||
case "like":
|
||||
wrapper.like(fieldDb, fieldValue);
|
||||
break;
|
||||
case "notLike":
|
||||
wrapper.notLike(fieldDb, fieldValue);
|
||||
break;
|
||||
case "in":
|
||||
if (list.size() > 0) {
|
||||
List<String> finalList = list;
|
||||
if ("||".equals(logic)) {
|
||||
wrapper.or(t -> {
|
||||
if (finalList.size() > 0) {
|
||||
for (int i = 0; i < finalList.size(); i++) {
|
||||
String value = finalList.get(i);
|
||||
if (i == 0) {
|
||||
t.like(fieldDb, value);
|
||||
} else {
|
||||
t.or().like(fieldDb, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wrapper.and(t -> {
|
||||
if (finalList.size() > 0) {
|
||||
for (int i = 0; i < finalList.size(); i++) {
|
||||
String value = finalList.get(i);
|
||||
if (i == 0) {
|
||||
t.like(fieldDb, value);
|
||||
} else {
|
||||
t.or().like(fieldDb, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if(YunzhupaasKeyConsts.CASCADER.equals(yunzhupaasKey) || YunzhupaasKeyConsts.COMSELECT.equals(yunzhupaasKey) || YunzhupaasKeyConsts.ADDRESS.equals(yunzhupaasKey)){
|
||||
getNotNullWrapper(wrapper,fieldDb);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case "notIn":
|
||||
if (list.size() > 0) {
|
||||
List<String> finalList1 = list;
|
||||
if ("||".equals(logic)) {
|
||||
wrapper.or(t -> {
|
||||
if (finalList1.size() > 0) {
|
||||
for (int i = 0; i < finalList1.size(); i++) {
|
||||
String value = finalList1.get(i);
|
||||
if (i == 0) {
|
||||
t.notLike(fieldDb, value);
|
||||
} else {
|
||||
t.notLike(fieldDb, value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wrapper.and(t -> {
|
||||
if (finalList1.size() > 0) {
|
||||
for (int i = 0; i < finalList1.size(); i++) {
|
||||
String value = finalList1.get(i);
|
||||
if (i == 0) {
|
||||
t.notLike(fieldDb, value);
|
||||
} else {
|
||||
t.notLike(fieldDb, value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if(YunzhupaasKeyConsts.CASCADER.equals(yunzhupaasKey) || YunzhupaasKeyConsts.COMSELECT.equals(yunzhupaasKey) || YunzhupaasKeyConsts.ADDRESS.equals(yunzhupaasKey)){
|
||||
getNotNullWrapper(wrapper,fieldDb);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyType {
|
||||
abstract void judge(QueryWrapper<?> wrapper, String fieldDb);
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,284 @@
|
||||
package com.yunzhupaas.util;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.yunzhupaas.database.model.superQuery.SuperJsonModel;
|
||||
import com.yunzhupaas.database.model.superQuery.SuperQueryJsonModel;
|
||||
import com.yunzhupaas.emnus.SearchMethodEnum;
|
||||
import com.yunzhupaas.model.QueryAllModel;
|
||||
import com.yunzhupaas.model.visualJson.FieLdsModel;
|
||||
import com.yunzhupaas.model.visualJson.config.ConfigModel;
|
||||
import com.yunzhupaas.onlinedev.util.onlineDevUtil.OnlineProductSqlUtils;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class QueryUtil {
|
||||
|
||||
/**
|
||||
* 运算符
|
||||
*/
|
||||
private SearchMethodEnum symbol;
|
||||
/**
|
||||
* 逻辑拼接符号
|
||||
*/
|
||||
private boolean and;
|
||||
/**
|
||||
* 组件标识
|
||||
*/
|
||||
private String yunzhupaasKey;
|
||||
/**
|
||||
* 字段key
|
||||
*/
|
||||
private String vModel;
|
||||
/**
|
||||
* 自定义的值
|
||||
*/
|
||||
private Object fieldValue;
|
||||
/**
|
||||
* 自定义的值2
|
||||
*/
|
||||
private Object fieldValueTwo;
|
||||
/**
|
||||
* 实体对象
|
||||
*/
|
||||
private Map<String, Class> classMap;
|
||||
/**
|
||||
* 数据库类型
|
||||
*/
|
||||
private String dbType;
|
||||
|
||||
private Boolean isSqlServer = false;
|
||||
|
||||
private List<String> dataList = new ArrayList<>();
|
||||
|
||||
public <T> MPJLambdaWrapper<T> queryList(QueryAllModel queryAllModel) {
|
||||
MPJLambdaWrapper<T> wrapper = queryAllModel.getWrapper();
|
||||
classMap = queryAllModel.getClassMap();
|
||||
dbType = queryAllModel.getDbType();
|
||||
isSqlServer = "Microsoft SQL Server".equalsIgnoreCase(dbType);
|
||||
List<List<SuperJsonModel>> superJsonModelList = queryAllModel.getQueryList();
|
||||
for (List<SuperJsonModel> list : superJsonModelList) {
|
||||
boolean flag = false;
|
||||
for (SuperJsonModel superJsonModel : list) {
|
||||
if (superJsonModel.getConditionList().size() > 0) {
|
||||
for (SuperQueryJsonModel item : superJsonModel.getConditionList()) {
|
||||
if (item.getGroups().size() > 0) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (list.size() > 0 && flag) {
|
||||
wrapper.and(gw -> {
|
||||
for (SuperJsonModel superJsonModel : list) {
|
||||
String matchLogic = superJsonModel.getMatchLogic();
|
||||
Boolean authorizeLogic = superJsonModel.getAuthorizeLogic();
|
||||
boolean isAddMatchLogic = SearchMethodEnum.And.getSymbol().equalsIgnoreCase(matchLogic);
|
||||
List<SuperQueryJsonModel> conditionList = superJsonModel.getConditionList();
|
||||
if (conditionList.size() == 0)
|
||||
continue;
|
||||
// 参数值转换
|
||||
OnlineProductSqlUtils.superList(conditionList, true);
|
||||
if (authorizeLogic) {
|
||||
gw.and(tw -> {
|
||||
queryWrapperList(tw, conditionList, isAddMatchLogic);
|
||||
});
|
||||
} else {
|
||||
gw.or(tw -> {
|
||||
queryWrapperList(tw, conditionList, isAddMatchLogic);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
private <T> void queryWrapperList(MPJLambdaWrapper<T> tw, List<SuperQueryJsonModel> conditionList,
|
||||
boolean isAddMatchLogic) {
|
||||
for (SuperQueryJsonModel superQueryJsonModel : conditionList) {
|
||||
String logic = superQueryJsonModel.getLogic();
|
||||
and = SearchMethodEnum.And.getSymbol().equalsIgnoreCase(logic);
|
||||
List<FieLdsModel> queryList = superQueryJsonModel.getGroups();
|
||||
if (queryList.size() > 0) {
|
||||
queryWrapper(tw, queryList, isAddMatchLogic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private <T> void queryWrapper(MPJLambdaWrapper<T> tw, List<FieLdsModel> queryListAll, boolean isAnd) {
|
||||
if (isAnd) {
|
||||
tw.and(qw -> {
|
||||
query(qw, queryListAll);
|
||||
});
|
||||
} else {
|
||||
tw.or(qw -> {
|
||||
query(qw, queryListAll);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private <T> void query(MPJLambdaWrapper<T> qw, List<FieLdsModel> queryListAll) {
|
||||
for (FieLdsModel fieLdsModel : queryListAll) {
|
||||
List<FieLdsModel> queryList = new ArrayList() {
|
||||
{
|
||||
add(fieLdsModel);
|
||||
}
|
||||
};
|
||||
if (and) {
|
||||
qw.and(ew -> {
|
||||
fieldsModel(ew, queryList);
|
||||
});
|
||||
} else {
|
||||
qw.or(ew -> {
|
||||
fieldsModel(ew, queryList);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fieldsModel(MPJLambdaWrapper wrapper, List<FieLdsModel> queryList) {
|
||||
for (FieLdsModel fieLdsModel : queryList) {
|
||||
ConfigModel config = fieLdsModel.getConfig();
|
||||
yunzhupaasKey = config.getYunzhupaasKey();
|
||||
symbol = SearchMethodEnum.getSearchMethod(fieLdsModel.getSymbol());
|
||||
vModel = fieLdsModel.getVModel();
|
||||
if (!and) {
|
||||
wrapper.or();
|
||||
}
|
||||
String table = ObjectUtil.isNotEmpty(config.getRelationTable()) ? config.getRelationTable()
|
||||
: config.getTableName();
|
||||
Class<T> tClass = classMap.get(table);
|
||||
try {
|
||||
Field declaredField = null;
|
||||
Field[] declaredFields = tClass.getDeclaredFields();
|
||||
for (Field item : declaredFields) {
|
||||
String tableFieldName = item.getAnnotation(TableField.class) == null ? ""
|
||||
: item.getAnnotation(TableField.class).value();
|
||||
if (vModel.equalsIgnoreCase(tableFieldName) || item.getName().equals(vModel)) {
|
||||
declaredField = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
declaredField.setAccessible(true);
|
||||
vModel = table + "." + declaredField.getAnnotation(TableField.class).value();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
fieldValue = fieLdsModel.getFieldValueOne();
|
||||
fieldValueTwo = fieLdsModel.getFieldValueTwo();
|
||||
dataList = fieLdsModel.getDataList();
|
||||
getSymbolWrapper(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void getNullWrapper(MPJLambdaWrapper<?> wrapper) {
|
||||
if (!and) {
|
||||
wrapper.or(t -> t.isNull(vModel));
|
||||
} else {
|
||||
wrapper.and(t -> t.isNull(vModel));
|
||||
}
|
||||
}
|
||||
|
||||
private void getNotNullWrapper(MPJLambdaWrapper<?> wrapper) {
|
||||
if (!and) {
|
||||
wrapper.or(t -> t.isNotNull(vModel));
|
||||
} else {
|
||||
wrapper.and(t -> t.isNotNull(vModel));
|
||||
}
|
||||
}
|
||||
|
||||
private void getInWrapper(MPJLambdaWrapper<?> wrapper) {
|
||||
if (!and) {
|
||||
wrapper.or(qw -> {
|
||||
for (String id : dataList) {
|
||||
if (isSqlServer) {
|
||||
id = String.valueOf(id).replaceAll("\\[", "[[]");
|
||||
}
|
||||
switch (symbol) {
|
||||
case Included:
|
||||
qw.or().like(vModel, id);
|
||||
break;
|
||||
default:
|
||||
qw.notLike(vModel, id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wrapper.and(qw -> {
|
||||
for (String id : dataList) {
|
||||
if (isSqlServer) {
|
||||
id = String.valueOf(id).replaceAll("\\[", "[[]");
|
||||
}
|
||||
switch (symbol) {
|
||||
case Included:
|
||||
qw.or().like(vModel, id);
|
||||
break;
|
||||
default:
|
||||
qw.notLike(vModel, id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void getSymbolWrapper(MPJLambdaWrapper<?> wrapper) {
|
||||
switch (symbol) {
|
||||
case IsNull:
|
||||
getNullWrapper(wrapper);
|
||||
break;
|
||||
case IsNotNull:
|
||||
getNotNullWrapper(wrapper);
|
||||
break;
|
||||
case Equal:
|
||||
wrapper.eq(vModel, fieldValue);
|
||||
break;
|
||||
case NotEqual:
|
||||
wrapper.ne(vModel, fieldValue);
|
||||
break;
|
||||
case GreaterThan:
|
||||
wrapper.gt(vModel, fieldValue);
|
||||
break;
|
||||
case LessThan:
|
||||
wrapper.lt(vModel, fieldValue);
|
||||
break;
|
||||
case GreaterThanOrEqual:
|
||||
wrapper.ge(vModel, fieldValue);
|
||||
break;
|
||||
case LessThanOrEqual:
|
||||
wrapper.le(vModel, fieldValue);
|
||||
break;
|
||||
case Like:
|
||||
if (isSqlServer) {
|
||||
fieldValue = String.valueOf(fieldValue).replaceAll("\\[", "[[]");
|
||||
}
|
||||
wrapper.like(vModel, fieldValue);
|
||||
break;
|
||||
case NotLike:
|
||||
if (isSqlServer) {
|
||||
fieldValue = String.valueOf(fieldValue).replaceAll("\\[", "[[]");
|
||||
}
|
||||
wrapper.notLike(vModel, fieldValue);
|
||||
break;
|
||||
case Included:
|
||||
case NotIncluded:
|
||||
getInWrapper(wrapper);
|
||||
break;
|
||||
case Between:
|
||||
wrapper.between(vModel, fieldValue, fieldValueTwo);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user