package com.qianwen.smartman.common.utils;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import java.time.temporal.TemporalAccessor;
|
import java.util.Date;
|
import com.qianwen.core.tool.utils.DateUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.tool.utils.SpringUtil;
|
import com.qianwen.smartman.modules.perf.enums.DbTypeEnum;
|
|
public abstract class AbstractSqlAdapter {
|
public static String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type");
|
|
public static <T> QueryWrapper<T> dateGeAdapter(QueryWrapper<T> wrapper, String fieldName, Object value) {
|
return dateGeAdapter((QueryWrapper) wrapper, true, fieldName, value);
|
}
|
|
public static <T> QueryWrapper<T> dateGeAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, Object value) {
|
if (value instanceof Date) {
|
return dateGeAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((Date) value));
|
}
|
if (value instanceof TemporalAccessor) {
|
return dateGeAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) value));
|
}
|
return dateGeAdapter((QueryWrapper) wrapper, condition, fieldName, String.valueOf(value));
|
}
|
|
public static <T> QueryWrapper<T> dateGeAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, String value) {
|
if (DbTypeEnum.MYSQL.getCode().equals(dbType) || DbTypeEnum.DM.getCode().equals(dbType)) {
|
return wrapper.nested(condition, n -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n.ge(fieldName, value);
|
});
|
}
|
return wrapper.nested(condition, n2 -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n2.apply(fieldName + " >= TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[]{value});
|
});
|
}
|
|
public static <T> QueryWrapper<T> dateLeAdapter(QueryWrapper<T> wrapper, String fieldName, Object value) {
|
return dateLeAdapter((QueryWrapper) wrapper, true, fieldName, value);
|
}
|
|
public static <T> QueryWrapper<T> dateLeAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, Object value) {
|
if (value instanceof Date) {
|
return dateLeAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((Date) value));
|
}
|
if (value instanceof TemporalAccessor) {
|
return dateLeAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) value));
|
}
|
return dateLeAdapter((QueryWrapper) wrapper, condition, fieldName, String.valueOf(value));
|
}
|
|
public static <T> QueryWrapper<T> dateLeAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, String value) {
|
if (DbTypeEnum.MYSQL.getCode().equals(dbType) || DbTypeEnum.DM.getCode().equals(dbType)) {
|
return wrapper.nested(condition, n -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n.le(fieldName, value);
|
});
|
}
|
return wrapper.nested(condition, n2 -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n2.apply(fieldName + " <= TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[]{value});
|
});
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(QueryWrapper<T> wrapper, String fieldName, Object value) {
|
return dateEqAdapter((QueryWrapper) wrapper, true, fieldName, value);
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, Object value) {
|
if (value instanceof Date) {
|
return dateEqAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((Date) value));
|
}
|
if (value instanceof TemporalAccessor) {
|
return dateEqAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) value));
|
}
|
return dateEqAdapter((QueryWrapper) wrapper, condition, fieldName, String.valueOf(value));
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, String value) {
|
if (DbTypeEnum.MYSQL.getCode().equals(dbType) || DbTypeEnum.DM.getCode().equals(dbType)) {
|
return wrapper.nested(condition, n -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n.eq(fieldName, value);
|
});
|
}
|
return wrapper.nested(condition, n2 -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n2.apply(fieldName + " = TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[]{value});
|
});
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(String fieldName, Object value) {
|
return dateEqAdapter(true, fieldName, value);
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(boolean condition, String fieldName, Object value) {
|
if (Func.isNull(value)) {
|
return new QueryWrapper<>();
|
}
|
if (value instanceof Date) {
|
return dateEqAdapter(condition, fieldName, DateUtil.formatDateTime((Date) value));
|
}
|
if (value instanceof TemporalAccessor) {
|
return dateEqAdapter(condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) value));
|
}
|
return dateEqAdapter(condition, fieldName, String.valueOf(value));
|
}
|
|
public static <T> QueryWrapper<T> dateEqAdapter(boolean condition, String fieldName, String value) {
|
return dateEqAdapter(new QueryWrapper(), condition, fieldName, value);
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(QueryWrapper<T> wrapper, String fieldName, Object v1, Object v2) {
|
return dateBetweenAdapter((QueryWrapper) wrapper, true, fieldName, v1, v2);
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, Object v1, Object v2) {
|
if (Func.isNull(v1) || Func.isNull(v2)) {
|
return wrapper;
|
}
|
if ((v1 instanceof Date) && (v2 instanceof Date)) {
|
return dateBetweenAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((Date) v1), DateUtil.formatDateTime((Date) v2));
|
}
|
if ((v1 instanceof TemporalAccessor) && (v2 instanceof TemporalAccessor)) {
|
return dateBetweenAdapter((QueryWrapper) wrapper, condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) v1), DateUtil.formatDateTime((TemporalAccessor) v2));
|
}
|
return dateBetweenAdapter((QueryWrapper) wrapper, condition, fieldName, String.valueOf(v1), String.valueOf(v2));
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(QueryWrapper<T> wrapper, boolean condition, String fieldName, String v1, String v2) {
|
if (DbTypeEnum.MYSQL.getCode().equals(dbType) || DbTypeEnum.DM.getCode().equals(dbType)) {
|
return wrapper.nested(condition, n -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n.between(fieldName, v1, v2);
|
});
|
}
|
return wrapper.nested(condition, n2 -> {
|
QueryWrapper queryWrapper = (QueryWrapper) n2.apply(fieldName + " between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss')) and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[]{v1, v2});
|
});
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(String fieldName, Object v1, Object v2) {
|
return dateBetweenAdapter(true, fieldName, v1, v2);
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(boolean condition, String fieldName, Object v1, Object v2) {
|
if ((v1 instanceof Date) && (v2 instanceof Date)) {
|
return dateBetweenAdapter(condition, fieldName, DateUtil.formatDateTime((Date) v1), DateUtil.formatDateTime((Date) v2));
|
}
|
if ((v1 instanceof TemporalAccessor) && (v2 instanceof TemporalAccessor)) {
|
return dateBetweenAdapter(condition, fieldName, DateUtil.formatDateTime((TemporalAccessor) v1), DateUtil.formatDateTime((TemporalAccessor) v2));
|
}
|
return dateBetweenAdapter(condition, fieldName, String.valueOf(v1), String.valueOf(v2));
|
}
|
|
public static <T> QueryWrapper<T> dateBetweenAdapter(boolean condition, String fieldName, String v1, String v2) {
|
return dateBetweenAdapter(new QueryWrapper(), condition, fieldName, v1, v2);
|
}
|
}
|