if ("sqlserver".equalsIgnoreCase(rs.getDBType())) { // sqlserver 排序提到这里
sqlsb.append(" select top ").append(pageSize).append(" a.id,a.nodeid, ");
} else {
sqlsb.append(" select a.id,a.nodeid, ");
}
sqlsb.append("(CASE WHEN a.nodeid < -1 THEN (SELECT nodename FROM workflow_freenode t WHERE t.id = a.nodeid) ELSE (SELECT nodename FROM workflow_nodebase t1 WHERE t1.id = a.nodeid) END) AS nodename,");
sqlsb.append(" from (SELECT distinct top ").append(pageSize); // sqlserver排序提到外层查询
}*/
sqlsb.append(" from (SELECT distinct ");
// }else{
// sqlsb.append(" from (SELECT distinct ");
// }
sqlsb.append(" o.id, ");
sqlsb.append(" o.requestid, ");
sqlsb.append(" o.userid, ");
sqlsb.append(" o.workflowid, ");
sqlsb.append(" o.workflowtype, ");
//workflow_otheroperator表中isremark为字符型,这里转下字符
if (rs.getDBType().toLowerCase().equals("oracle") || rs.getDBType().toLowerCase().equals("postgresql")) {
sqlsb.append(" to_char(o.isremark) as isremark, ");
sqlsb.append(" to_char(o.preisremark) AS preisremark, ");
sqlsb.append(" to_char(o.lastisremark) AS lastisremark, ");
} else if (rs.getDBType().toLowerCase().equals("mysql")) {
sqlsb.append(" o.isremark, ");
sqlsb.append(" o.preisremark, ");
sqlsb.append(" o.lastisremark, ");
} else {
sqlsb.append(" cast(o.isremark as varchar) as isremark, ");
sqlsb.append(" cast(o.preisremark as varchar) as preisremark, ");
sqlsb.append(" cast(o.lastisremark as varchar) as lastisremark, ");
}
sqlsb.append(" o.usertype, ");
sqlsb.append(" o.nodeid, ");
sqlsb.append(" o.agentorbyagentid, ");
sqlsb.append(" o.agenttype, ");
sqlsb.append(" o.receivedate, ");
sqlsb.append(" o.receivetime, ");
sqlsb.append(" o.viewtype, ");
sqlsb.append(" o.iscomplete, ");
sqlsb.append(" o.operatedate, ");
sqlsb.append(" o.operatetime, ");
sqlsb.append(" o.processuser, ");
sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype ");
sqlsb.append(" ,wr.operator ");
sqlsb.append(" ,1 as tab ");
sqlsb.append(" FROM workflow_currentoperator o ");
sqlsb.append(" and o.operatedate = wr.operatedate");
sqlsb.append(" and o.operatetime = wr.operatetime");//再通过时间关联一下,防止流程状态操作状态显示错误
sqlsb.append(" where o.id > ").append(currentId);
if ("submit".equals(desremark)) {//1:已提交----isremark等于4,preisremark=11实际对应已提交数据
sqlsb.append(" AND (o.isremark='2' or (o.isremark=4 and o.preisremark=11)) AND (wr.operator IS NOT null or o.userid = o.processuser)");
} else if ("nosubmit".equals(desremark)) {//2:未提交
sqlsb.append(" AND( (o.isremark != '2' AND o.isremark != '4') OR (o.isremark = '4' AND o.viewtype = 0 and o.preisremark != 11) ) ");
} else if ("view".equals(desremark)) {//3:已查看
sqlsb.append(" and ((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','5','7','8','9','11') or (o.isremark=4 and o.preisremark!=11)) AND o.viewtype IN (-1,-2) ");
} else if ("noview".equals(desremark)) {//4:未查看
sqlsb.append(" AND o.viewtype=0 AND (o.isremark IN ('0','1','5','7','8','9','11') or (o.isremark = '2' AND wr.operator IS NULL) or (o.isremark=4 and o.preisremark!=11)) ");
}
sqlsb.append(" and o.requestid = " + requestid);
sqlsb.append(" union ");
sqlsb.append(" SELECT DISTINCT ");
sqlsb.append(" o.id, ");
sqlsb.append(" o.requestid, ");
sqlsb.append(" o.userid, ");
sqlsb.append(" o.workflowid, ");
sqlsb.append(" 0 as workflowtype, ");
sqlsb.append(" o.isremark, ");
sqlsb.append(" o.isremark as preisremark, ");
sqlsb.append(" o.isremark as lastisremark, ");
sqlsb.append(" o.usertype, ");
sqlsb.append(" o.nodeid, ");
sqlsb.append(" 0 as agentorbyagentid, ");
sqlsb.append(" '0' as agenttype, ");
sqlsb.append(" o.receivedate, ");
sqlsb.append(" o.receivetime, ");
sqlsb.append(" o.viewtype, ");
sqlsb.append(" 1 as iscomplete, ");
sqlsb.append(" o.operatedate, ");
sqlsb.append(" o.operatetime, ");
sqlsb.append(" wr.operator as processuser, ");
sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype, ");
sqlsb.append(" wr.operator ");
sqlsb.append(" ,2 as tab ");
sqlsb.append(" FROM workflow_otheroperator o LEFT JOIN workflow_requestlog wr ON wr.requestid = o.requestid ");
sqlsb.append(" AND wr.nodeid = o.nodeid ");
sqlsb.append(" AND wr.operator = o.userid ");
sqlsb.append(" AND wr.logtype <> '1' ");
sqlsb.append(" WHERE o.requestid = " + requestid + " ");
sqlsb.append(" and o.id > ").append(currentId2);
sqlsb.append(" ) a ");
sqlsb.append(" where a.requestid = " + requestid + " ");
sqlsb.append(" and a.agenttype <> 1 ");
if (!"".equals(viewlogids)) {
sqlsb.append(" and a.nodeid in (" + viewlogids + ") ");
}
if (selectedNode != -1) {
sqlsb.append(" AND a.nodeid = " + selectedNode + " ");
}
if (!"".equals(selectedOperator)) {
sqlsb.append(" AND a.userid = " + selectedOperator + " ");
}
WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo();
sqlsb.append(" and (a.nodeid > -1 or (a.nodeid < -1 and exists (select id from workflow_freenode where id = a.nodeid and requestid = " + requestid + (showdelFreeNodeInfo ? "" : " and groupid > 0 ") + " ))) ");
//搜索时返回状态
if (isAdSearch && "true".equals(isfirst)) {
rs.executeQuery("select count(id) as count from (" + sqlsb.toString().replace("top " + pageSize, "") + ") t");
result.put("countTime", new Date().getTime() - date1);
int tnodeid = Util.getIntValue(temmap.get("nodeid"), 0);
if (tnodeid == tmpnodeid) {
nodekv = temmap;
} else {
currentMinId = currentId;
nodekv = new HashMap<String, String>();
statuslist.add(nodekv);
}
}
nodekv.put("nodeid", tmpnodeid + "");
nodekv.put("nodename", tmpnodename + "");
}
int nextlistcount = 0;
int nextsubmitCount = 0;
int nextviewCount = 0;
int nextnoviewCount = 0;
if ("all".equals(desremark) && !isAdSearch) {
currentMaxId = currentId;
String maxsql = " select a.id,a.nodeid from workflow_currentoperator a where a.id > " + currentId + " and a.requestid=" + requestid + " order by a.id ,a.receivedate, a.receivetime";
rs1.executeSql(maxsql);
while (rs1.next()) {
int currentid = rs1.getInt("id");
int currentnodeid = rs1.getInt("nodeid");
if (currentnodeid == tmpnodeid) {
currentMaxId = currentid;
} else {
break;
}
}
String listcountsql = " select count(id) num from workflow_currentoperator where id > " + currentId + " and id <= " + currentMaxId + " and requestid=" + requestid + " and nodeid=" + tmpnodeid + " and agenttype <> 1 and usertype <> 1 ";
//String submitCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid +" and agenttype <> 1 and usertype <> 1 and isremark = 2 and exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and workflow_requestlog.operator=workflow_currentoperator.userid )";
//String viewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 and (viewtype = -1 or viewtype=-2) and ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) ";
//String noviewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 AND viewtype=0 AND (isremark IN ('0','1','4','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) ";
String submitCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.isremark = 2 and wr.operator is NOT null ";
String viewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype IN (-1,-2) and ((wc.isremark = '2' AND wr.operator IS NULL) or wc.isremark in ('0','1','4','5','7','8','9')) ";
String noviewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype=0 AND (wc.isremark IN ('0','1','4','5','7','8','9','11') or (wc.isremark = '2' and wr.operator is null )) ";
rs1.executeSql(listcountsql);
while (rs1.next()) {
nextlistcount = rs1.getInt("num");
}
rs1.executeSql(submitCountsql);
while (rs1.next()) {
nextsubmitCount = rs1.getInt("num");
}
rs1.executeSql(viewCountsql);
while (rs1.next()) {
nextviewCount = rs1.getInt("num");
}
rs1.executeSql(noviewCountsql);
while (rs1.next()) {
nextnoviewCount = rs1.getInt("num");
}
}
Map<String, Object> allstatusmap = new HashMap<String, Object>();
Map<String, Object> submitstatusmap = new HashMap<String, Object>();
Map<String, Object> nosubmitstatusmap = new HashMap<String, Object>();
Map<String, Object> viewstatusmap = new HashMap<String, Object>();
Map<String, Object> noviewstatusmap = new HashMap<String, Object>();
//提交节点信息--滚动加载到当前currentoperator对应最大id
//数字统计转到新接口count中
ResourceComInfo resourceComInfo = new ResourceComInfo();
CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo();
Map<String, Object> all_nodemap = new HashMap<String, Object>();
Map<String, Object> submit_nodemap = new HashMap<String, Object>();
Map<String, Object> nosubmit_nodemap = new HashMap<String, Object>();
Map<String, Object> view_nodemap = new HashMap<String, Object>();
Map<String, Object> noview_nodemap = new HashMap<String, Object>();
rs.beforFirst();
int currentnum = 0;
for (Iterator<Map<String, String>> it = statuslist.iterator(); it.hasNext(); index++) {
Map<String, String> nodekv = it.next();
int fnodeid = Util.getIntValue(nodekv.get("nodeid"));