801 lines
33 KiB
Java
801 lines
33 KiB
Java
package com.api.doc.search.util;
|
||
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.ArrayList;
|
||
import java.util.Calendar;
|
||
import java.util.Date;
|
||
import java.util.Enumeration;
|
||
import java.util.HashMap;
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
|
||
import javax.servlet.http.HttpServletRequest;
|
||
|
||
import com.api.browser.bean.SearchConditionOption;
|
||
import com.api.browser.util.ConditionType;
|
||
import com.engine.doc.util.CheckPermission;
|
||
import com.engine.doc.util.TimeZoneUtil;
|
||
import com.engine.hrm.biz.HrmClassifiedProtectionBiz;
|
||
|
||
import weaver.docs.docs.DocManager;
|
||
import weaver.general.BaseBean;
|
||
import weaver.general.TimeUtil;
|
||
import weaver.general.Util;
|
||
import weaver.hrm.User;
|
||
import weaver.systeminfo.setting.HrmUserSettingComInfo;
|
||
|
||
/**
|
||
* sqlwhere条件拼装
|
||
*
|
||
* @author wangqs
|
||
*/
|
||
public class DocListUtil {
|
||
|
||
private String sqlWhere = " t1.id=t2.sourceid ";
|
||
private boolean needRight = true;
|
||
|
||
public DocListUtil(HttpServletRequest request, User user, DocTableType docTableType) {
|
||
this.packageCondition(request, user, docTableType);
|
||
}
|
||
|
||
public DocListUtil(
|
||
HttpServletRequest request, User user, DocTableType docTableType, boolean needRight) {
|
||
if (!needRight || user == null) { // user为null,登录前门户元素more页面
|
||
sqlWhere = "";
|
||
this.needRight = false;
|
||
}
|
||
this.packageCondition(request, user, docTableType);
|
||
}
|
||
|
||
/** 封装查询条件 */
|
||
private void packageCondition(HttpServletRequest request, User user, DocTableType docTableType) {
|
||
|
||
String belongtoids = "";
|
||
if (needRight) {
|
||
HrmUserSettingComInfo userSetting = new HrmUserSettingComInfo();
|
||
String belongtoshow = userSetting.getBelongtoshowByUserId(user.getUID() + "");
|
||
belongtoids = user.getBelongtoids();
|
||
if ("1".equals(belongtoshow) && "0".equals(user.getAccount_type()) && !"".equals(belongtoids))
|
||
belongtoids += "," + user.getUID();
|
||
else belongtoids = "";
|
||
}
|
||
|
||
Enumeration paramNames = request.getParameterNames();
|
||
|
||
String docstatus = "";
|
||
String customSql = "";
|
||
if (docTableType == DocTableType.DOC_COPYMOVE) {
|
||
sqlWhere = " t1.seccategory = " + request.getParameter("sourceId");
|
||
}
|
||
while (paramNames.hasMoreElements()) {
|
||
String paramName = (String) paramNames.nextElement();
|
||
String paramValue = Util.null2String(request.getParameter(paramName));
|
||
|
||
boolean isCustom = true; // 是否是自定义字段
|
||
|
||
for (DocCondition condition : DocCondition.values()) {
|
||
if (paramValue.isEmpty()) continue;
|
||
|
||
if (condition.getConditionType() == ConditionType.DATE) {
|
||
if (paramName.equals(condition.getName() + ConditionUtil.DATE_SELECT)
|
||
&& !"6".equals(paramValue)) { // 只有6-时间范围,页面才传开始到结束时间,这里需要自己处理
|
||
sqlWhere += packDateType(condition.getName(), paramValue, condition);
|
||
} else if (paramName.equals(condition.getName() + ConditionUtil.DATE_FROM)) {
|
||
// if(paramValue.equals(request.getParameter(condition.getName() +
|
||
// ConditionUtil.DATE_TO))){ //开始日期==结束日期
|
||
// paramValue = TimeZoneUtil.getServerDate1(paramValue,"begin");
|
||
// sqlWhere += " and " + condition.getName() + "='" + paramValue + "'";
|
||
// }else{
|
||
String time_paramValue = TimeZoneUtil.getServerDate1(paramValue, "begin");
|
||
// if(!paramValue.equals(time_paramValue)){
|
||
// time_paramValue = paramValue;
|
||
// }
|
||
if ("doclastmoddate".equals(condition.getName())
|
||
|| "doccreatedate".equals(condition.getName())) {
|
||
String doclastmodtime = TimeZoneUtil.getServertime1(paramValue, "begin");
|
||
sqlWhere +=
|
||
TimeZoneUtil.handDateCondition(
|
||
"6", paramValue, "", condition.getName(), "", false);
|
||
} else {
|
||
sqlWhere +=
|
||
" and "
|
||
+ condition.getName()
|
||
+ ">='"
|
||
+ time_paramValue
|
||
+ "'"; // + " and " + condition.getName() + "=" + paramValue;
|
||
}
|
||
|
||
// }
|
||
} else if (paramName.equals(condition.getName() + ConditionUtil.DATE_TO)) {
|
||
// if(!paramValue.equals(request.getParameter(condition.getName() +
|
||
// ConditionUtil.DATE_FROM))){ //开始日期!=结束日期
|
||
// paramValue = TimeZoneUtil.getServerDate1(paramValue,"end");
|
||
String time_paramValue = TimeZoneUtil.getServerDate1(paramValue, "end");
|
||
// if(!paramValue.equals(time_paramValue)){
|
||
// time_paramValue = paramValue;
|
||
// }
|
||
if ("doclastmoddate".equals(condition.getName())
|
||
|| "doccreatedate".equals(condition.getName())) {
|
||
String doclastmodtime = TimeZoneUtil.getServertime1(paramValue, "end");
|
||
sqlWhere +=
|
||
TimeZoneUtil.handDateCondition(
|
||
"6", "", paramValue, condition.getName(), "", false);
|
||
// sqlWhere += " and (" + condition.getName() + "<='" + time_paramValue + "'"
|
||
// + " and " + "doclastmodtime<='"+ doclastmodtime +"')";
|
||
} else {
|
||
sqlWhere +=
|
||
" and "
|
||
+ condition.getName()
|
||
+ "<='"
|
||
+ time_paramValue
|
||
+ "'"; // + " and " + condition.getName() + "=" + paramValue;
|
||
}
|
||
// sqlWhere += " and " + condition.getName() + "<='" + time_paramValue + "'";
|
||
// }
|
||
}
|
||
continue;
|
||
}
|
||
|
||
if (condition.getConditionType() == ConditionType.SCOPE) {
|
||
if (paramName.equals(DocCondition.REPLAY_DOC_COUNT + ConditionUtil.INTERVAL_FROM)) {
|
||
String _val = Util.getIntValue(paramValue, 0) + "";
|
||
if (condition.getDbType() != DbType.INT) {
|
||
_val = "'" + _val.replace("'", "'") + "'";
|
||
}
|
||
sqlWhere += " and " + condition.getName() + " >= " + _val;
|
||
} else if (paramName.equals(DocCondition.REPLAY_DOC_COUNT + ConditionUtil.INTERVAL_TO)) {
|
||
String _val = Util.getIntValue(paramValue, 0) + "";
|
||
if (condition.getDbType() != DbType.INT) {
|
||
_val = "'" + _val.replace("'", "'") + "'";
|
||
}
|
||
sqlWhere += " and " + condition.getName() + " <= " + _val;
|
||
}
|
||
}
|
||
|
||
if (condition.getName().equals(paramName)) {
|
||
isCustom = false;
|
||
if (condition.getLogic() == LogicOperation.CUSTOM) {
|
||
if (paramName.equals(DocCondition.DOC_SUBJECT.getName())) { // 标题
|
||
sqlWhere += " and " + getDocSubjectSql(paramValue);
|
||
} else if (paramName.equals(DocCondition.KEYWORD.getName())) { // 关键字
|
||
sqlWhere += " and " + getKeyWordSql(paramValue);
|
||
} else if (paramName.equals(DocCondition.DEPARTMENT_ID.getName())) { // 创建部门
|
||
sqlWhere +=
|
||
" and exists(select 1 from HrmResource where departmentid="
|
||
+ paramValue
|
||
+ " and id=t1.doccreaterid)";
|
||
} else if (paramName.equals(DocCondition.CREATER_SUBCOMPANY_ID.getName())) { // 创建人分部
|
||
sqlWhere +=
|
||
" and exists(select 1 from HrmResource where subcompanyid1="
|
||
+ paramValue
|
||
+ " and id=t1.doccreaterid)";
|
||
} else if (paramName.equals(DocCondition.OWNER_DEPARTMENT_ID.getName())) { // 所有者部门
|
||
sqlWhere +=
|
||
" and exists(select 1 from HrmResource where departmentid="
|
||
+ paramValue
|
||
+ " and id=t1.ownerid)";
|
||
} else if (paramName.equals(DocCondition.OWNER_SUBCOMPANY_ID.getName())) { // 所有者分部
|
||
sqlWhere +=
|
||
" and exists(select 1 from HrmResource where subcompanyid1="
|
||
+ paramValue
|
||
+ " and id=t1.ownerid)";
|
||
} else if (paramName.equals(DocCondition.DATE2DURING.getName())) { // 修改期间
|
||
if (Util.getIntValue(paramValue, 0) > 36
|
||
|| Util.getIntValue(paramValue, 0) < 1) { // 表示全部
|
||
continue;
|
||
}
|
||
sqlWhere +=
|
||
" and t1.doclastmoddate>='"
|
||
+ getDate2During(Util.getIntValue(paramValue, 0))
|
||
+ "'";
|
||
} else if (paramName.equals(DocCondition.DOC_STATUS.getName())) { // 文档状态
|
||
docstatus = paramValue;
|
||
} else if (paramName.equals(DocCondition.TREE_DOC_FIELD_ID.getName())) { // 虚拟目录
|
||
paramValue = paramValue.startsWith(",") ? paramValue.substring(1) : paramValue;
|
||
paramValue =
|
||
paramValue.endsWith(",")
|
||
? paramValue.substring(0, paramValue.length() - 1)
|
||
: paramValue;
|
||
|
||
paramValue =
|
||
paramValue.indexOf(",") == -1
|
||
? (" = " + paramValue)
|
||
: (" in (" + paramValue + ")");
|
||
|
||
sqlWhere +=
|
||
" and exists(select 1 from DocDummyDetail where docid=t1.id and catelogid "
|
||
+ paramValue
|
||
+ ")";
|
||
}
|
||
|
||
} else if (condition.getLogic() == LogicOperation.EQ_OR_IN) {
|
||
paramValue = paramValue.startsWith(",") ? paramValue.substring(1) : paramValue;
|
||
paramValue =
|
||
paramValue.endsWith(",")
|
||
? paramValue.substring(0, paramValue.length() - 1)
|
||
: paramValue;
|
||
// 分为文档订阅部分的高级搜索条件拼接
|
||
if (paramValue.indexOf(",") == -1) {
|
||
if (condition.getDbType() == DbType.VARCHAR)
|
||
paramValue = "'" + paramValue.replace("'", "''") + "'";
|
||
paramValue = " = " + paramValue;
|
||
} else {
|
||
if (condition.getDbType() == DbType.VARCHAR)
|
||
paramValue = "'" + paramValue.replace("'", "''").replace(",", "','") + "'";
|
||
paramValue = " in (" + paramValue + ")";
|
||
}
|
||
|
||
if (condition == DocCondition.SUBSCRIPTION_APPROVE_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_STATE) {
|
||
sqlWhere += " and ds." + paramName + paramValue;
|
||
} else {
|
||
|
||
sqlWhere += " and t1." + paramName + paramValue;
|
||
}
|
||
|
||
} else if (condition.getLogic() != null) { // 分为文档订阅部分的高级搜索条件拼接
|
||
String _code = condition.getLogic().getCode();
|
||
if (_code == null) continue;
|
||
|
||
if (condition.getDbType() == DbType.VARCHAR) {
|
||
if (_code.indexOf("{#}") > -1) {
|
||
paramValue = paramValue.replace("'", "''");
|
||
} else {
|
||
paramValue = "'" + paramValue.replace("'", "''") + "'";
|
||
}
|
||
}
|
||
if (condition == DocCondition.SUBSCRIPTION_APPROVE_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_STATE) {
|
||
sqlWhere +=
|
||
" and ds."
|
||
+ paramName
|
||
+ (_code.indexOf("{#}") > -1
|
||
? _code.replace("{#}", paramValue)
|
||
: (_code + paramValue));
|
||
} else {
|
||
sqlWhere +=
|
||
" and t1."
|
||
+ paramName
|
||
+ (_code.indexOf("{#}") > -1
|
||
? _code.replace("{#}", paramValue)
|
||
: (_code + paramValue));
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 处理自定义字段
|
||
// 如果开启了自定义查询,当前的条件是自定义字段中的值,则进行检查
|
||
if (isCustom
|
||
&& ConditionUtil.isCustomParamNameNew(paramName)
|
||
&& ConditionUtil.isCustomParamValue(paramName)) {
|
||
String id = ConditionUtil.getCustomIdNew(paramName);
|
||
|
||
int secid = Util.getIntValue(Util.null2String(request.getParameter("seccategory")));
|
||
if (docTableType == DocTableType.DOC_COPYMOVE) {
|
||
sqlWhere = " t1.seccategory = " + request.getParameter("sourceId");
|
||
}
|
||
|
||
String fieldValue = paramValue;
|
||
String fieldOpt =
|
||
Util.null2String(
|
||
request.getParameter(
|
||
ConditionUtil.CUSTOM_KEY_PREV + id + ConditionUtil.CUSTOM_KEY_OPT),
|
||
"-1");
|
||
|
||
String customSqlWhere = ConditionUtil.getCustomSql(id, secid, user, fieldValue, fieldOpt);
|
||
if (!customSqlWhere.isEmpty()) {
|
||
customSql += " and " + customSqlWhere;
|
||
}
|
||
}
|
||
}
|
||
|
||
String eqOrInBelongtoidsForSql =
|
||
needRight
|
||
? (belongtoids.isEmpty() ? (" = " + user.getUID()) : (" in (" + belongtoids + ")"))
|
||
: "";
|
||
|
||
// 处理特殊字段
|
||
docstatus = docstatus.startsWith(",") ? docstatus.substring(1) : docstatus;
|
||
docstatus =
|
||
docstatus.endsWith(",") ? docstatus.substring(0, docstatus.length() - 1) : docstatus;
|
||
if (docTableType == DocTableType.MY_DOC_TABLE) { // 我的文档
|
||
if (docstatus.isEmpty()) {
|
||
sqlWhere += " and t1.docstatus != 8 and t1.docstatus != 9 and t1.docstatus <=9";
|
||
} else {
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
|
||
sqlWhere +=
|
||
" and (t1.doccreaterid "
|
||
+ eqOrInBelongtoidsForSql
|
||
+ " or t1.ownerid "
|
||
+ eqOrInBelongtoidsForSql
|
||
+ ")";
|
||
} else if (docTableType == DocTableType.DOC_BATCHSHARE) { // 批量共享
|
||
if (needRight) {
|
||
// sqlWhere += " and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (sharelevel>1 or
|
||
// (t1.doccreaterid="+user.getUID()+" or t1.ownerid="+user.getUID()+"))))";
|
||
sqlWhere +=
|
||
" and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (t1.doccreaterid="
|
||
+ user.getUID()
|
||
+ " or t1.ownerid="
|
||
+ user.getUID()
|
||
+ ")))";
|
||
} else {
|
||
sqlWhere += " and t1.docstatus in(1,2,5,7) ";
|
||
}
|
||
} else if (docTableType == DocTableType.DOC_COPYMOVE
|
||
|| docTableType == DocTableType.ENGINE_DOC_BATCHSHARE) { // 复制、移动 后台批量调整共享
|
||
if (docstatus.isEmpty()) {
|
||
sqlWhere += " and t1.docstatus in(1,2,5,7)";
|
||
} else {
|
||
docstatus = docstatus.equals("1") ? "1,2" : docstatus; // 页面查询条件1表示 同时查询 正常、生效两种状态
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
} else if (docTableType == DocTableType.DOC_RECYCLE) { // 文档回收站
|
||
if (!docstatus.isEmpty()) {
|
||
docstatus = docstatus.equals("1") ? "1,2" : docstatus; // 页面查询条件1表示 同时查询 正常、生效两种状态
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
} else if (docTableType == DocTableType.ENGINE_DOC_RECYCLE) { // 文档回收(后台)
|
||
if (!docstatus.isEmpty()) {
|
||
docstatus = docstatus.equals("1") ? "1,2" : docstatus; // 页面查询条件1表示 同时查询 正常、生效两种状态
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
} else if (docTableType == DocTableType.DOC_SUBSCRIPTION_HISTORY) { // 文档订阅历史
|
||
if (docstatus.isEmpty()) {
|
||
// sqlWhere += " and t1.docstatus in(1,2,5) ";
|
||
if (needRight) {
|
||
// sqlWhere += " and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (sharelevel>1 or
|
||
// (t1.doccreaterid="+user.getUID()+" or t1.ownerid="+user.getUID()+"))))";
|
||
// ayh 默认可以查看全部文档,包括非正常状态的文档
|
||
|
||
/* sqlWhere +=
|
||
" and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (t1.doccreaterid="
|
||
+ user.getUID()
|
||
+ " or t1.ownerid="
|
||
+ user.getUID()
|
||
+ ")))";*/
|
||
sqlWhere +=
|
||
" and (t1.docstatus in(1,2,3,4,5,6,7,8,9) or (t1.docstatus=7 and (t1.doccreaterid="
|
||
+ user.getUID()
|
||
+ " or t1.ownerid="
|
||
+ user.getUID()
|
||
+ ")))";
|
||
} else {
|
||
// ayh 默认可以参看全部文档,包括处于非正常状态的文档
|
||
// sqlWhere += " and t1.docstatus in(1,2,5) ";
|
||
sqlWhere += " and t1.docstatus in(1,2,3,4,5,6,7,8,9) ";
|
||
}
|
||
} else {
|
||
docstatus = docstatus.equals("1") ? "1,2" : docstatus; // 页面查询条件1表示 同时查询 正常、生效两种状态
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
|
||
if (docTableType == DocTableType.NEWEST_DOC
|
||
|| docTableType == DocTableType.NO_READ_DOC) { // 最新文档(未读文档)
|
||
sqlWhere +=
|
||
" and t1.doccreaterid "
|
||
+ (belongtoids.isEmpty()
|
||
? ("<> " + user.getUID())
|
||
: ("not in (" + belongtoids + ")"));
|
||
}
|
||
} else if (docTableType == DocTableType.ENGINE_DOC_PROP_SET) { // 文档弹出窗口设置
|
||
sqlWhere += " and t1.docstatus in(1,2,5) and t1.docextendname = 'html'";
|
||
} else {
|
||
if (docstatus.isEmpty()) {
|
||
// sqlWhere += " and t1.docstatus in(1,2,5) ";
|
||
if (needRight) {
|
||
// sqlWhere += " and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (sharelevel>1 or
|
||
// (t1.doccreaterid="+user.getUID()+" or t1.ownerid="+user.getUID()+"))))";
|
||
// ayh
|
||
// sqlWhere +=
|
||
// " and (t1.docstatus in(1,2,5) or (t1.docstatus=7 and (t1.doccreaterid="
|
||
// + user.getUID()
|
||
// + " or t1.ownerid="
|
||
// + user.getUID()
|
||
// + ")))";
|
||
sqlWhere +=
|
||
" and (t1.docstatus in(1,2,3,4,5,6,7,8,9) or (t1.docstatus=7 and (t1.doccreaterid="
|
||
+ user.getUID()
|
||
+ " or t1.ownerid="
|
||
+ user.getUID()
|
||
+ ")))";
|
||
} else {
|
||
// ayh
|
||
// sqlWhere += " and t1.docstatus in(1,2,5) ";
|
||
sqlWhere += " and t1.docstatus in(1,2,3,4,5,6,7,8,9) ";
|
||
}
|
||
} else {
|
||
docstatus = docstatus.equals("1") ? "1,2" : docstatus; // 页面查询条件1表示 同时查询 正常、生效两种状态
|
||
sqlWhere +=
|
||
" and t1.docstatus "
|
||
+ (docstatus.indexOf(",") > -1 ? ("in (" + docstatus + ")") : ("=" + docstatus));
|
||
}
|
||
|
||
if (docTableType == DocTableType.NEWEST_DOC
|
||
|| docTableType == DocTableType.NO_READ_DOC) { // 最新文档(未读文档)
|
||
sqlWhere +=
|
||
" and t1.doccreaterid "
|
||
+ (belongtoids.isEmpty()
|
||
? ("<> " + user.getUID())
|
||
: ("not in (" + belongtoids + ")"));
|
||
}
|
||
}
|
||
|
||
String isNew = Util.null2String(request.getParameter("isNew"));
|
||
if ("yes".equals(isNew)
|
||
|| docTableType == DocTableType.NEWEST_DOC
|
||
|| docTableType == DocTableType.NO_READ_DOC) {
|
||
sqlWhere +=
|
||
" and not exists(select 1 from docReadTag where t1.id=docid and userid "
|
||
+ eqOrInBelongtoidsForSql
|
||
+ " and usertype=1)";
|
||
}
|
||
|
||
if (!customSql.isEmpty()) {
|
||
sqlWhere +=
|
||
" and exists(select 1 from cus_fielddata tcm where scope='"
|
||
+ ConditionUtil.CUSTOM_SCOPE
|
||
+ "' and id=t1.id "
|
||
+ customSql
|
||
+ ")";
|
||
}
|
||
|
||
if (docTableType == DocTableType.DOC_BATCHSHARE && needRight) { // 批量共享(不需要权限的是后台批量共享)
|
||
// sqlWhere += " and sharelevel=3 and exists(select 1 from DocSecCategory where
|
||
// DocSecCategory.id=t1.secCategory and DocSecCategory.shareable='1')";
|
||
sqlWhere +=
|
||
" and exists(select 1 from DocSecCategory where DocSecCategory.id=t1.secCategory and DocSecCategory.shareable='1')";
|
||
}
|
||
|
||
// if(needRight){
|
||
if (docTableType == DocTableType.DOC_OUT_TABLE) { // 登录前门户more(只取内部)
|
||
boolean secretFlag = CheckPermission.isOpenSecret();
|
||
if (secretFlag) sqlWhere += " and t1.secretLevel=" + DocManager.DEFAILT_SECRET_LEVEL;
|
||
} else {
|
||
sqlWhere += DocListUtil.getSecretSql(user, " and t1.secretLevel");
|
||
}
|
||
// }
|
||
|
||
// 统一过滤字段
|
||
if (docTableType != DocTableType.DOC_SUBSCRIPTION_HISTORY
|
||
&& docTableType != DocTableType.DOC_SUBSCRIPTION_APPROVE
|
||
&& docTableType != DocTableType.DOC_SUBSCRIPTION_BACK
|
||
&& docTableType != DocTableType.DOC_RECYCLE) { // 非文档订阅过虑历史文件 、 非回收站
|
||
sqlWhere += " and (t1.ishistory is null or t1.ishistory = 0)";
|
||
}
|
||
|
||
if (docTableType == DocTableType.DOC_RECYCLE) { // 文档回收站
|
||
sqlWhere += " and t1.ishistory != 1 ";
|
||
sqlWhere += " and t1.docdeleteuserid=" + user.getUID();
|
||
} else if (docTableType == DocTableType.ENGINE_DOC_RECYCLE) { // 文档回收站(后台)
|
||
sqlWhere += " and t1.ishistory != 1 ";
|
||
} else {
|
||
sqlWhere += " and (t1.isreply is null or t1.isreply='' or t1.isreply='0')";
|
||
}
|
||
|
||
sqlWhere = sqlWhere.trim().startsWith("and") ? sqlWhere.substring(4) : sqlWhere;
|
||
|
||
// 初次进入列表,代入默认值条件
|
||
packDefaultValue(request, user, docTableType);
|
||
}
|
||
|
||
public static String getSecretSql(User user, String column) {
|
||
boolean secretFlag = CheckPermission.isOpenSecret();
|
||
if (secretFlag) {
|
||
HrmClassifiedProtectionBiz hcpb = new HrmClassifiedProtectionBiz();
|
||
String userSecretLevel = user == null ? "" : hcpb.getMaxResourceSecLevel(user);
|
||
return column + ">=" + Util.getIntValue(userSecretLevel, DocManager.DEFAILT_SECRET_LEVEL); //
|
||
}
|
||
return "";
|
||
}
|
||
|
||
public static Map<String, String> getCreateDate(HttpServletRequest request) {
|
||
String select =
|
||
request.getParameter(DocCondition.DOC_CREATEDATE_SELECT + ConditionUtil.DATE_SELECT);
|
||
String from =
|
||
request.getParameter(DocCondition.DOC_CREATEDATE_SELECT + ConditionUtil.DATE_FROM);
|
||
String to = request.getParameter(DocCondition.DOC_CREATEDATE_SELECT + ConditionUtil.DATE_TO);
|
||
|
||
Map<String, String> dateMap = new HashMap<String, String>();
|
||
if ("0".equals(select)) {
|
||
return dateMap;
|
||
}
|
||
dateMap = packDate(select, from, to);
|
||
|
||
from = dateMap.get("from");
|
||
to = dateMap.get("to");
|
||
|
||
if (from != null && !from.isEmpty()) {
|
||
from = new TimeZoneUtil().getServerDate(from + " 00:00:00");
|
||
}
|
||
if (to != null && !to.isEmpty()) {
|
||
to = new TimeZoneUtil().getServerDate(to + " 23:59:59");
|
||
}
|
||
|
||
dateMap.put(DocCondition.DOC_CREATEDATE_SELECT.getName() + ConditionUtil.DATE_FROM, from);
|
||
dateMap.put(DocCondition.DOC_CREATEDATE_SELECT.getName() + ConditionUtil.DATE_TO, to);
|
||
|
||
return dateMap;
|
||
}
|
||
|
||
/**
|
||
* 初始进入列表,代入默认值条件
|
||
*
|
||
* @author wangqs
|
||
*/
|
||
public void packDefaultValue(HttpServletRequest request, User user, DocTableType docTableType) {
|
||
|
||
//
|
||
/***
|
||
* String during = request.getParameter(DocCondition.DATE2DURING.getName());
|
||
* if(during == null){
|
||
* List<SearchConditionOption> options = ConditionUtil.getDateSelectDuring(user.getLanguage());
|
||
* int date = 0;
|
||
* for(SearchConditionOption option : options){
|
||
* if(option.isSelected()){
|
||
* date = Util.getIntValue(option.getKey(),0);
|
||
* }
|
||
* }
|
||
* if(date >= 1 && date <= 36){
|
||
*
|
||
* sqlWhere += " and t1.doclastmoddate>='" + getDate2During(date) + "'";
|
||
* }
|
||
* }
|
||
*
|
||
***/
|
||
|
||
// 最新文档有tab页,未读文档没有tab页
|
||
if (docTableType == DocTableType.NEWEST_DOC) { // 最新文档
|
||
try {
|
||
sqlWhere += this.packSearchTabDate(request.getParameter(ConditionUtil.TAB_REQ_NAME));
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
} else if (docTableType == DocTableType.MY_DOC_TABLE
|
||
|| docTableType == DocTableType.SEARCH_DOC_TABLE
|
||
|| docTableType == DocTableType.CATEGORY_DOC_TABLE) { // 我的文档、查询文档、文档目录
|
||
try {
|
||
// 0-全部,1-今天,2-本周,3-本月,4-本季,5-本年
|
||
|
||
int tab =
|
||
Util.getIntValue(
|
||
request.getParameter(ConditionUtil.TAB_REQ_NAME), ConditionUtil.TAB_DATE_DEFAULT);
|
||
|
||
String updateDate =
|
||
Util.null2String(
|
||
request.getParameter(
|
||
DocCondition.DOC_LAST_MODDATE.getName() + ConditionUtil.DATE_SELECT));
|
||
|
||
if (updateDate.isEmpty()) { // 没有修改日期,取默认时间
|
||
// sqlWhere += packDateType(DocCondition.DOC_LAST_MODDATE.getName(),tab + "");
|
||
}
|
||
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
sqlWhere = sqlWhere.trim().startsWith("and") ? sqlWhere.substring(4) : sqlWhere;
|
||
}
|
||
|
||
/** 处理修改期间(最近n月)条件的查询 */
|
||
public static String getDate2During(int month) {
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.add(Calendar.DATE, -30 * month);
|
||
Date cDate = new Date(calendar.getTimeInMillis());
|
||
return new SimpleDateFormat("yyyy-MM-dd").format(cDate);
|
||
}
|
||
|
||
/** 处理特殊时间类型(今天、本周、本月....)条件查询 0-全部,1-今天,2-本周,3-本月,7-上个月,4-本季,5-本年,8-上一年,6-指定日期范围 */
|
||
public static String packDateType(String column, String value, DocCondition condition) {
|
||
Map<String, String> dateMap = packDate(value, "", "");
|
||
String sdate = Util.null2String(dateMap.get("from"));
|
||
String edate = Util.null2String(dateMap.get("to"));
|
||
|
||
if ("0".equals(value)) {
|
||
return "";
|
||
}
|
||
|
||
if (condition == DocCondition.SUBSCRIPTION_APPROVE_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_DATE
|
||
|| condition == DocCondition.SUBSCRIPTION_STATE) {
|
||
if (!sdate.isEmpty()) {
|
||
if ("8".equals(value)) {
|
||
return TimeZoneUtil.handDateCondition(value, sdate, edate, column, "ds", false, true);
|
||
} else {
|
||
return TimeZoneUtil.handDateCondition(value, sdate, edate, column, "ds", false, true);
|
||
}
|
||
// if(sdate.equals(edate)){
|
||
//// return TimeZoneUtil.handDateCondition(value,sdate,"",column,"ds",false,true);
|
||
// return " and ds." + column + "='" + sdate + "'";
|
||
// }else{
|
||
//// return TimeZoneUtil.handDateCondition(value,sdate,"",column,"ds",false,true);
|
||
// String test = " and ds." + column + ">='" + sdate + "' and ds." + column + "<='" +
|
||
// edate + "'";
|
||
// return test;
|
||
// }
|
||
}
|
||
} else {
|
||
if (!sdate.isEmpty()) {
|
||
if ("8".equals(value)) {
|
||
return TimeZoneUtil.handDateCondition(value, sdate, edate, column, "t1", false, true);
|
||
} else {
|
||
return TimeZoneUtil.handDateCondition(value, sdate, edate, column, "t1", false, true);
|
||
}
|
||
// if(sdate.equals(edate)){
|
||
// return " and t1." + column + "='" + sdate + "'";
|
||
// }else{
|
||
// String test = " and t1." + column + ">='" + sdate + "' and t1." + column + "<='" +
|
||
// edate + "'";
|
||
// return test;
|
||
// }
|
||
}
|
||
}
|
||
|
||
return "";
|
||
}
|
||
|
||
/**
|
||
* 处理特殊时间类型(今天、本周、本月....)条件查询 0-全部,1-今天,2-本周,3-本月,7-上个月,4-本季,5-本年,8-上一年,6-指定日期范围
|
||
*
|
||
* @author wangqs
|
||
* @params select-类型值,from-指定类型的开始日期,to-指定日期的结束日期
|
||
*/
|
||
public static Map<String, String> packDate(String select, String from, String to) {
|
||
Map<String, String> dateMap = new HashMap<String, String>();
|
||
|
||
String sdate = "";
|
||
String edate = TimeUtil.getCurrentDateString();
|
||
switch (Util.getIntValue(select, 0)) {
|
||
case 1:
|
||
sdate = TimeUtil.getCurrentDateString();
|
||
break;
|
||
case 2:
|
||
sdate = TimeUtil.getFirstDayOfWeek();
|
||
break;
|
||
case 3:
|
||
sdate = TimeUtil.getFirstDayOfMonth();
|
||
break;
|
||
case 4:
|
||
sdate = TimeUtil.getFirstDayOfSeason();
|
||
break;
|
||
case 5:
|
||
sdate = TimeUtil.getFirstDayOfTheYear();
|
||
break;
|
||
case 6:
|
||
sdate = from;
|
||
edate = to;
|
||
case 7:
|
||
sdate = TimeUtil.getLastMonthBeginDay();
|
||
edate = TimeUtil.getLastMonthEndDay();
|
||
break;
|
||
case 8:
|
||
sdate = TimeUtil.getFirstDayOfLastYear();
|
||
edate = TimeUtil.getEndDayOfLastYear();
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// TimeZoneUtil timeZoneUtil = new TimeZoneUtil();
|
||
// //多时区转换
|
||
// sdate = timeZoneUtil.getServerDate(sdate,"begin");
|
||
// edate = timeZoneUtil.getServerDate(edate,"end");
|
||
|
||
dateMap.put("from", sdate);
|
||
dateMap.put("to", edate);
|
||
|
||
return dateMap;
|
||
}
|
||
|
||
/** 根据规则 处理有主题条件的查询 */
|
||
private String getDocSubjectSql(String docsubject) {
|
||
String tmpString = "";
|
||
docsubject = docsubject.replaceAll("'", "''").replaceAll("\"", """);
|
||
if ((docsubject.indexOf(" ") == -1 && docsubject.indexOf("+") == -1)
|
||
|| (docsubject.indexOf(" ") != -1 && docsubject.indexOf("+") != -1)) {
|
||
tmpString += " t1.docsubject like '%" + docsubject + "%'";
|
||
} else if (docsubject.indexOf(" ") != -1 && docsubject.indexOf("+") == -1) {
|
||
String orArray[] = Util.TokenizerString2(docsubject, " ");
|
||
if (orArray.length > 0) {
|
||
tmpString += " ( ";
|
||
}
|
||
for (int i = 0; i < orArray.length; i++) {
|
||
tmpString += " t1.docsubject like '%" + orArray[i] + "%'";
|
||
if (i + 1 < orArray.length) {
|
||
tmpString += " or ";
|
||
}
|
||
}
|
||
if (orArray.length > 0) {
|
||
tmpString += " ) ";
|
||
}
|
||
} else if (docsubject.indexOf(" ") == -1 && docsubject.indexOf("+") != -1) {
|
||
String andArray[] = Util.TokenizerString2(docsubject, "+");
|
||
for (int i = 0; i < andArray.length; i++) {
|
||
tmpString += " t1.docsubject like '%" + andArray[i] + "%'";
|
||
if (i + 1 < andArray.length) {
|
||
tmpString += " and ";
|
||
}
|
||
}
|
||
}
|
||
return tmpString;
|
||
}
|
||
|
||
/** 根据规则 处理有关键字条件的查询 */
|
||
private String getKeyWordSql(String keyword) {
|
||
String keywordSql = "";
|
||
keyword = keyword.trim().replaceAll("'", "''");
|
||
ArrayList keywordList = Util.TokenizerString(keyword, " ");
|
||
if (keywordList != null && keywordList.size() > 0) {
|
||
for (int i = 0; i < keywordList.size(); i++) {
|
||
String tempkeyword = (String) keywordList.get(i);
|
||
keywordSql +=
|
||
keywordSql.equals("")
|
||
? " t1.keyword like '%" + tempkeyword + "%' "
|
||
: " or t1.keyword like '%" + tempkeyword + "%' ";
|
||
}
|
||
if (!keywordSql.equals("")) {
|
||
keywordSql = " (" + keywordSql + ") ";
|
||
}
|
||
}
|
||
return keywordSql;
|
||
}
|
||
|
||
/**
|
||
* 最新文档tab页转换成 sql条件
|
||
*
|
||
* @author wangqs
|
||
*/
|
||
private String packSearchTabDate(String tabValue) throws Exception {
|
||
String sql = "";
|
||
|
||
switch (Util.getIntValue(tabValue, ConditionUtil.TAB_DEFAULT_VALUE)) {
|
||
case ConditionUtil.TAB_TODAY_VALUE:
|
||
sql = " and t1.doccreatedate='" + TimeUtil.getCurrentDateString() + "'";
|
||
break;
|
||
case ConditionUtil.TAB_WEEK_VALUE:
|
||
sql = " and t1.doccreatedate>='" + TimeUtil.getFirstDayOfWeek() + "'";
|
||
sql += " and t1.doccreatedate<='" + TimeUtil.getLastDayOfWeek() + "'";
|
||
break;
|
||
case ConditionUtil.TAB_MONTH_VALUE:
|
||
sql = " and t1.doccreatedate>='" + TimeUtil.getFirstDayOfMonth() + "'";
|
||
sql += " and t1.doccreatedate<='" + TimeUtil.getLastDayOfMonth() + "'";
|
||
break;
|
||
case ConditionUtil.TAB_SESSION_VALUE:
|
||
sql = " and t1.doccreatedate>='" + TimeUtil.getFirstDayOfSeason() + "'";
|
||
sql += " and t1.doccreatedate<='" + TimeUtil.getLastDayDayOfSeason() + "'";
|
||
break;
|
||
case ConditionUtil.TAB_YEAR_VALUE:
|
||
sql = " and t1.doccreatedate>='" + TimeUtil.getFirstDayOfTheYear() + "'";
|
||
sql += " and t1.doccreatedate<='" + TimeUtil.getLastDayOfYear() + "'";
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return sql;
|
||
}
|
||
|
||
public String getSqlWhere() {
|
||
// ayh
|
||
new BaseBean().writeLog("create sql string from docListUtil, sqlWhere is :" + this.sqlWhere);
|
||
return this.sqlWhere;
|
||
}
|
||
}
|