package com.cabletech.business.base.condition;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import com.cabletech.baseinfo.business.entity.UserInfo;
/**
* 业务查询条件生成工具类
*
* @author 杨隽 2012-07-12 创建
*
*/
public class BusinessConditionUtils {
/**
* 根据当前用户获取已办查询条件的sql查询语句
*
* @param parameter
* QueryParameter 当前用户信息存放参数
* @param joinDataCondition
* StringBuffer 待办查询条件的sql查询语句存放区
*/
public static void getWaitHandledCondition(QueryParameter parameter,
StringBuffer joinDataCondition) {
// 当前用户待办查询条件
UserInfo user = parameter.getUser();
joinDataCondition.append(" ");
joinDataCondition.append(ConditionGenerateUtils.AND_LOGIC_OPERATOR);
joinDataCondition.append(ConditionGenerateUtils.LEFT_PARENTHESIS);
parameter.setColumnName("assignee_");
parameter.setValue(user.getPersonId());
joinDataCondition.append(ConditionGenerateUtils
.getConditionEqualByNoLogicOperator(parameter));
parameter.setColumnName("userid_");
parameter.setValue(user.getPersonId());
joinDataCondition.append(ConditionGenerateUtils
.getConditionEqualByOrLogicOperator(parameter));
parameter.setColumnName("groupid_");
parameter.setValue(user.getOrgId());
joinDataCondition.append(ConditionGenerateUtils
.getConditionEqualByOrLogicOperator(parameter));
joinDataCondition.append(ConditionGenerateUtils.RIGHT_PARENTHESIS);
joinDataCondition.append(" ");
}
/**
* 根据当前用户获取已办查询条件的sql查询语句
*
* @param parameter
* QueryParameter 当前用户信息存放参数
* @param joinDataCondition
* StringBuffer 已办查询条件的sql查询语句存放区
*/
public static void getHandledCondition(QueryParameter parameter,
StringBuffer joinDataCondition) {
// 当前用户已办查询条件
UserInfo user = parameter.getUser();
parameter.setColumnName("assignee");
parameter.setValue(user.getPersonId());
joinDataCondition.append(ConditionGenerateUtils
.getConditionEqualByAndLogicOperator(parameter));
}
/**
* 根据区域编号获取区域级联查询条件的sql查询语句
*
* @param parameter
* QueryParameter 当前用户信息存放参数
* @return StringBuffer 区域级联查询条件的sql查询语句
*/
public static StringBuffer getRegionCondition(QueryParameter parameter) {
StringBuffer queryCondition = new StringBuffer("");
if (StringUtils.isNotBlank(parameter.getValue())) {
queryCondition.append(" AND EXISTS ( ");
queryCondition.append(" SELECT r.REGIONID FROM REGION r ");
queryCondition.append(" WHERE 1=1 ");
if (StringUtils.isNotBlank(parameter.getColumnName())) {
queryCondition
.append(ConditionGenerateUtils.AND_LOGIC_OPERATOR);
queryCondition.append(" ");
if (StringUtils.isNotBlank(parameter.getAlias())) {
queryCondition.append(parameter.getAlias());
queryCondition.append(".");
}
queryCondition.append(parameter.getColumnName());
queryCondition.append(" = r.REGIONID ");
queryCondition.append(" START WITH r.REGIONID='");
queryCondition.append(parameter.getValue());
queryCondition.append("' ");
queryCondition
.append(" CONNECT BY PRIOR r.REGIONID=r.PARENTREGIONID ");
}
queryCondition.append(" ) ");
}
return queryCondition;
}
/**
* 根据组织编号获取组织级联查询条件的sql查询语句
*
* @param parameter
* QueryParameter 当前用户信息存放参数
* @return StringBuffer 组织级联查询条件的sql查询语句
*/
public static StringBuffer getOrgCondition(QueryParameter parameter) {
StringBuffer queryCondition = new StringBuffer("");
if (StringUtils.isNotBlank(parameter.getValue())) {
queryCondition.append(" AND EXISTS ( ");
queryCondition.append(" SELECT vo.ID FROM VIEW_ORG vo ");
queryCondition.append(" WHERE 1=1 ");
if (StringUtils.isNotBlank(parameter.getColumnName())) {
queryCondition
.append(ConditionGenerateUtils.AND_LOGIC_OPERATOR);
queryCondition.append(" ");
if (StringUtils.isNotBlank(parameter.getAlias())) {
queryCondition.append(parameter.getAlias());
queryCondition.append(".");
}
queryCondition.append(parameter.getColumnName());
queryCondition.append(" = vo.ID ");
queryCondition.append(" START WITH vo.ID='");
queryCondition.append(parameter.getValue());
queryCondition.append("' ");
queryCondition.append(" CONNECT BY PRIOR vo.ID=vo.PARENTID ");
}
queryCondition.append(" ) ");
}
return queryCondition;
}
/**
* 根据当前用户获取专业类型查询条件的sql查询语句
*
* @param parameter
* QueryParameter 当前用户信息存放参数
* @return StringBuffer 用户专业类型查询条件
*/
public static StringBuffer getBusinessTypeCondition(QueryParameter parameter) {
StringBuffer queryCondition = new StringBuffer("");
if (QueryParameter.isNull(parameter.getUser())) {
return queryCondition;
}
List<Map<String, Object>> businessTypeList = parameter.getUser()
.getBusinessTypes();
String businessTypeStr = "";
if (CollectionUtils.isEmpty(businessTypeList)) {
return queryCondition;
}
for (int i = 0; i < businessTypeList.size(); i++) {
Map<String, Object> map = businessTypeList.get(i);
businessTypeStr += "'";
businessTypeStr += map.get("CODEVALUE");
businessTypeStr += "'";
if (i < businessTypeList.size() - 1) {
businessTypeStr += ",";
}
}
parameter.setValue(businessTypeStr);
queryCondition.append(ConditionGenerateUtils
.getConditionInByAndLogicOperator(parameter));
return queryCondition;
}
}