package com.cabletech.business.base.condition;
import org.apache.commons.lang.StringUtils;
/**
* sql查询条件生成器工具类
*
* @author 杨隽 2012-01-04 创建
* @author 杨隽 2012-01-05 添加getConditionEqualByNoLogicOperator方法
* @author 杨隽 2012-02-09 添加getWaitHandledCondition()方法和getHandledCondition()方法
* @author 杨隽 2012-02-14 添加getRegionCondition()方法
* @author 杨隽 2012-04-21 添加getOrgCondition()方法
* @author 杨隽 2012-04-28 进行方法的参数个数重构
* @author 杨隽 2012-05-09 添加IN运算符常量和getConditionInByAndLogicOperator()方法
*
*/
public class ConditionGenerateUtils {
// 左小括号常量
public static final String LEFT_PARENTHESIS = " ( ";
// 右小括号常量
public static final String RIGHT_PARENTHESIS = " ) ";
// 逻辑运算符“AND”常量
public static final String AND_LOGIC_OPERATOR = " AND ";
// 逻辑运算符“OR”常量
public static final String OR_LOGIC_OPERATOR = " OR ";
// LIKE的默认值常量
public static final String LIKE_DEFAULT_VALUE = "'%'";
// 比较运算符“=”常量
public static final String EQU_OPERATOR = "=";
// 比较运算符“<>”常量
public static final String NOT_EQU_OPERATOR = "<>";
// 比较运算符“like”常量
public static final String LIKE_OPERATOR = "like";
// 比较运算符“>=”常量
public static final String GE_OPERATOR = ">=";
// 比较运算符“<=”常量
public static final String LE_OPERATOR = "<=";
// 比较运算符“>”常量
public static final String GT_OPERATOR = ">";
// 比较运算符“<”常量
public static final String LT_OPERATOR = "<";
// IN运算符常量
public static final String IN_OPERATOR = "IN";
// 空串前缀
public static final String EMPTY_PREFIX = "";
// 比较运算符LIKE值的前缀
public static final String LIKE_PREFIX = "'%";
// 比较运算符LIKE值的后缀
public static final String LIKE_SUFFIX = "%'";
// 比较运算符=的前缀和后缀
public static final String EQU_PREFIX = "'";
// 开始时间的时分秒值
public static final String FIRST_DATE_HOUR = "00:00:00";
// 结束时间的时分秒值
public static final String LAST_DATE_HOUR = "23:59:59";
// 日期模板
public static final String DATE_TEMPLATE = "to_date('#input_date#','#date_pattern#')";
// 日期的下一日模板
public static final String NEXT_DATE_TEMPLATE = "to_date('#input_date#','#date_pattern#')+1";
/**
* 根据输入获取sql查询条件
*
* @param logicOperator
* String 逻辑运算符
* @param parameter
* QueryParameter 查询条件参数
* @return String 查询条件sql字符串
*/
public static String getCondition(String logicOperator,
QueryParameter parameter) {
StringBuffer buf = new StringBuffer("");
if (StringUtils.isBlank(parameter.getValue())) {
return buf.toString();
}
buf.append(" ");
buf.append(logicOperator);
buf.append(" ");
if (StringUtils.isNotBlank(parameter.getAlias())) {
buf.append(parameter.getAlias());
buf.append(".");
}
buf.append(parameter.getColumnName());
buf.append(" ");
buf.append(parameter.getOperator());
buf.append(" ");
buf.append(parameter.getPrefix());
buf.append(parameter.getValue());
buf.append(parameter.getSuffix());
buf.append(" ");
return buf.toString();
}
/**
* 获取“逻辑与”条件下的“日期”查询条件
*
* @param parameter
* QueryParameter 查询条件参数
* @param dateTemplate
* String 日期模板
* @param pattern
* String 日期匹配格式字符串
* @return String 查询条件sql字符串
*/
public static String getConditionDateByAndLogicOperator(
QueryParameter parameter, String dateTemplate, String pattern) {
parameter.setPrefix("");
parameter.setSuffix("");
if (StringUtils.isBlank(parameter.getValue())) {
parameter.setOperator(EQU_OPERATOR);
parameter.setValue("");
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
String time = dateTemplate.replaceAll("#input_date#",
parameter.getValue());
time = time.replaceAll("#date_pattern#", pattern);
parameter.setValue(time);
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑或”条件下的“日期”查询条件
*
* @param parameter
* QueryParameter 查询条件参数
* @param dateTemplate
* String 日期模板
* @param pattern
* String 日期匹配格式字符串
* @return String 查询条件sql字符串
*/
public static String getConditionDateByOrLogicOperator(
QueryParameter parameter, String dateTemplate, String pattern) {
parameter.setPrefix("");
parameter.setSuffix("");
if (StringUtils.isBlank(parameter.getValue())) {
parameter.setOperator(EQU_OPERATOR);
parameter.setValue("");
return getCondition(OR_LOGIC_OPERATOR, parameter);
}
String time = dateTemplate.replaceAll("#input_date#",
parameter.getValue());
time = time.replaceAll("#date_pattern#", pattern);
parameter.setValue(time);
return getCondition(OR_LOGIC_OPERATOR, parameter);
}
/**
* 获取“列名等于判断”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionEqualByNoLogicOperator(
QueryParameter parameter) {
parameter.setOperator(EQU_OPERATOR);
parameter.setPrefix(EQU_PREFIX);
parameter.setSuffix(EQU_PREFIX);
return getCondition("", parameter);
}
/**
* 获取“逻辑与”条件下的“列名等于判断”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionEqualByAndLogicOperator(
QueryParameter parameter) {
parameter.setOperator(EQU_OPERATOR);
parameter.setPrefix(EQU_PREFIX);
parameter.setSuffix(EQU_PREFIX);
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑与”条件下的“列名不等于判断”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionNotEqualByAndLogicOperator(
QueryParameter parameter) {
parameter.setOperator(NOT_EQU_OPERATOR);
parameter.setPrefix(EQU_PREFIX);
parameter.setSuffix(EQU_PREFIX);
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑与”条件下的“列名模糊查询”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionLikeByAndLogicOperator(
QueryParameter parameter) {
parameter.setOperator(LIKE_OPERATOR);
parameter.setPrefix(LIKE_PREFIX);
parameter.setSuffix(LIKE_SUFFIX);
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑与”条件下的“日期”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionDateByAndLogicOperator(
QueryParameter parameter) {
return getConditionDateByAndLogicOperator(parameter, DATE_TEMPLATE,
"yyyy-mm-dd");
}
/**
* 获取“逻辑与”条件下的“日期(带时分秒)”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionDateTimeByAndLogicOperator(
QueryParameter parameter) {
return getConditionDateByAndLogicOperator(parameter, DATE_TEMPLATE,
"yyyy-mm-dd hh24:mi:ss");
}
/**
* 获取“逻辑与”条件下的“日期的下一天”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionNextDateByAndLogicOperator(
QueryParameter parameter) {
return getConditionDateByAndLogicOperator(parameter,
NEXT_DATE_TEMPLATE, "yyyy-mm-dd");
}
/**
* 获取“逻辑与”条件下的“日期的下一天(带时分秒)”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionNextDateTimeByAndLogicOperator(
QueryParameter parameter) {
return getConditionDateByAndLogicOperator(parameter,
NEXT_DATE_TEMPLATE, "yyyy-mm-dd hh24:mi:ss");
}
/**
* 获取“逻辑或”条件下的“列名等于判断”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionEqualByOrLogicOperator(
QueryParameter parameter) {
parameter.setOperator(EQU_OPERATOR);
parameter.setPrefix(EQU_PREFIX);
parameter.setSuffix(EQU_PREFIX);
return getCondition(OR_LOGIC_OPERATOR, parameter);
}
/**
* 获取“IN”条件下的“列名查询”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionInByAndLogicOperator(
QueryParameter parameter) {
parameter.setOperator(IN_OPERATOR);
parameter.setPrefix(LEFT_PARENTHESIS);
parameter.setSuffix(RIGHT_PARENTHESIS);
return getCondition(AND_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑或”条件下的“列名模糊查询”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionLikeByOrLogicOperator(
QueryParameter parameter) {
parameter.setOperator(LIKE_OPERATOR);
parameter.setPrefix(LIKE_PREFIX);
parameter.setSuffix(LIKE_SUFFIX);
return getCondition(OR_LOGIC_OPERATOR, parameter);
}
/**
* 获取“逻辑或”条件下的“日期”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionDateByOrLogicOperator(
QueryParameter parameter) {
return getConditionDateByOrLogicOperator(parameter, DATE_TEMPLATE,
"yyyy-mm-dd");
}
/**
* 获取“逻辑或”条件下的“日期(带时分秒)”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionDateTimeByOrLogicOperator(
QueryParameter parameter) {
return getConditionDateByOrLogicOperator(parameter, DATE_TEMPLATE,
"yyyy-mm-dd hh24:mi:ss");
}
/**
* 获取“逻辑或”条件下的“日期的下一天”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionNextDateByOrLogicOperator(
QueryParameter parameter) {
return getConditionDateByOrLogicOperator(parameter, NEXT_DATE_TEMPLATE,
"yyyy-mm-dd");
}
/**
* 获取“逻辑或”条件下的“日期的下一天(带时分秒)”查询条件
*
* @param parameter
* QueryParameter 查询参数
* @return String 查询条件sql字符串
*/
public static String getConditionNextDateTimeByOrLogicOperator(
QueryParameter parameter) {
return getConditionDateByOrLogicOperator(parameter, NEXT_DATE_TEMPLATE,
"yyyy-mm-dd hh24:mi:ss");
}
}