| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- package jnpf.util;
- import cn.hutool.json.JSONUtil;
- import com.alibaba.fastjson.JSONArray;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import jnpf.util.visiual.JnpfKeyConsts;
- 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 jnpfKey;
- /**
- * 字段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(jnpfKey);
- if ("||".equals(logic)) {
- wrapper.or();
- }
- if (fieldValue == null) {
- fieldValue = "";
- }
- try {
- ArrayList splitKey = new ArrayList<String>() {{
- add(JnpfKeyConsts.DATE);
- add(JnpfKeyConsts.DATE_CALCULATE);
- add(JnpfKeyConsts.TIME);
- add(JnpfKeyConsts.NUM_INPUT);
- add(JnpfKeyConsts.CREATETIME);
- add(JnpfKeyConsts.MODIFYTIME);
- }};
- if (splitKey.contains(jnpfKey) && "between".equals(operator)) {
- List<String> data = JsonUtil.getJsonToList(fieldValue, String.class);
- fieldValue = data.get(0);
- fieldValue2 = data.get(1);
- }
- selectIgnore = new ArrayList<String>() {{
- add(JnpfKeyConsts.ADDRESS);
- add(JnpfKeyConsts.CASCADER);
- add(JnpfKeyConsts.CHECKBOX);
- }};
- myType.judge(wrapper, fieldDb);
- return wrapper;
- } catch (Exception e) {
- return wrapper;
- }
- }
- /**
- * 判断控件的所属类型
- *
- * @param jnpfKey 控件标识
- * @return 控件类型
- */
- public MyType myControl(String jnpfKey) {
- MyType myType = null;
- switch (jnpfKey) {
- /** 基础 */
- case JnpfKeyConsts.COM_INPUT:
- case JnpfKeyConsts.TEXTAREA:
- case JnpfKeyConsts.BILLRULE:
- case JnpfKeyConsts.POPUPTABLESELECT:
- case JnpfKeyConsts.RELATIONFORM:
- case JnpfKeyConsts.RELATIONFORM_ATTR:
- case JnpfKeyConsts.POPUPSELECT:
- case JnpfKeyConsts.POPUPSELECT_ATTR:
- myType = new BasicControl();
- break;
- // 数字类型
- case JnpfKeyConsts.CALCULATE:
- case JnpfKeyConsts.NUM_INPUT:
- myType = new NumControl();
- break;
- // 日期类型
- case JnpfKeyConsts.DATE:
- case JnpfKeyConsts.DATE_CALCULATE:
- case JnpfKeyConsts.CREATETIME:
- case JnpfKeyConsts.MODIFYTIME:
- myType = new DateControl();
- break;
- // 时间类型
- case JnpfKeyConsts.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 zeroNum = "0." + StringUtils.repeat("0", Integer.parseInt(precision));
- DecimalFormat numFormat = new DecimalFormat(zeroNum);
- 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 (JnpfKeyConsts.DATE.equals(jnpfKey) || JnpfKeyConsts.DATE_CALCULATE.equals(jnpfKey)) {
- 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 (JnpfKeyConsts.DATE.equals(jnpfKey) || JnpfKeyConsts.DATE_CALCULATE.equals(jnpfKey)) {
- 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(jnpfKey)) {
- list = JSONUtil.toList(fieldValue, String.class);
- }
- if (selectIgnore.contains(jnpfKey) && 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(JnpfKeyConsts.CASCADER.equals(jnpfKey) || JnpfKeyConsts.ADDRESS.equals(jnpfKey)){
- 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(JnpfKeyConsts.CASCADER.equals(jnpfKey) || JnpfKeyConsts.ADDRESS.equals(jnpfKey)){
- getNotNullWrapper(wrapper,fieldDb);
- }
- }
- break;
- }
- }
- }
- abstract class MyType {
- abstract void judge(QueryWrapper<?> wrapper, String fieldDb);
- }
- }
|