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 QueryWrapper dateGeAdapter(QueryWrapper wrapper, String fieldName, Object value) { return dateGeAdapter((QueryWrapper) wrapper, true, fieldName, value); } public static QueryWrapper dateGeAdapter(QueryWrapper 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 QueryWrapper dateGeAdapter(QueryWrapper 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 QueryWrapper dateLeAdapter(QueryWrapper wrapper, String fieldName, Object value) { return dateLeAdapter((QueryWrapper) wrapper, true, fieldName, value); } public static QueryWrapper dateLeAdapter(QueryWrapper 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 QueryWrapper dateLeAdapter(QueryWrapper 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 QueryWrapper dateEqAdapter(QueryWrapper wrapper, String fieldName, Object value) { return dateEqAdapter((QueryWrapper) wrapper, true, fieldName, value); } public static QueryWrapper dateEqAdapter(QueryWrapper 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 QueryWrapper dateEqAdapter(QueryWrapper 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 QueryWrapper dateEqAdapter(String fieldName, Object value) { return dateEqAdapter(true, fieldName, value); } public static QueryWrapper 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 QueryWrapper dateEqAdapter(boolean condition, String fieldName, String value) { return dateEqAdapter(new QueryWrapper(), condition, fieldName, value); } public static QueryWrapper dateBetweenAdapter(QueryWrapper wrapper, String fieldName, Object v1, Object v2) { return dateBetweenAdapter((QueryWrapper) wrapper, true, fieldName, v1, v2); } public static QueryWrapper dateBetweenAdapter(QueryWrapper 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 QueryWrapper dateBetweenAdapter(QueryWrapper 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 QueryWrapper dateBetweenAdapter(String fieldName, Object v1, Object v2) { return dateBetweenAdapter(true, fieldName, v1, v2); } public static QueryWrapper 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 QueryWrapper dateBetweenAdapter(boolean condition, String fieldName, String v1, String v2) { return dateBetweenAdapter(new QueryWrapper(), condition, fieldName, v1, v2); } }