1.首先需要建立几张视图
由于数据库方言不一样,以及系统的用户角色表也有所差异,根据自己需求改动SQL文件
1.1 V_ACTLIST 任务视图表(用于查询单个审批流程的具体过程以及意见)
SELECT
T.NAME_ AS NAME,
T.END_TIME_ AS BLTIME,
U.USERNAME AS USERNAME,
T.PROC_INST_ID_ AS procInstId,
C.MESSAGE_ AS clyj,
T.START_TIME_,
D.DeptName
FROM
ASSETSMETADATA.ACT_HI_TASKINST T
LEFT OUTER JOIN
(SELECT * FROM IPRIVILAGEMETADATA.USERS)U
ON T.ASSIGNEE_ = U.PKID
LEFT OUTER JOIN
(SELECT * FROM IPRIVILAGEMETADATA.DEPARTMENTS)D
ON D.Pkid = U.DeptId
LEFT OUTER JOIN
(SELECT * FROM ASSETSMETADATA.ACT_HI_COMMENT)C
ON T.ID_ = C.TASK_ID_
1.2 V_TASKLIST_WSB 未上报任务视图表
SELECT
cast('' as nvarchar2(255)) AS PROC_INST_ID_,
cast('' as nvarchar2(255)) AS END_ACT_ID_,
cast('未上报' as nvarchar2(255)) AS actName,
cast('未上报' as nvarchar2(255)) AS actName_T,
cast('' as nvarchar2(255)) AS assignee,
cast('' as nvarchar2(255)) AS candidate,
-1 AS taskstatus,
cast('' as DATE) AS bltime,
cast('' as nvarchar2(255)) AS prdekey,
cast('' as nvarchar2(255)) AS prdename FROM ASSETSMETADATA.ACT_ID_USER
1.3 V_TASKLIST_DB 待办任务视图表
SELECT
cast(A.PROC_INST_ID_ as nvarchar2(255)) PROC_INST_ID_,
cast('' as nvarchar2(255)) END_ACT_ID_,
cast(A.NAME_ as nvarchar2(255)) actName,
cast(A.NAME_ as nvarchar2(255)) actName_T,
cast(A.ASSIGNEE_ as nvarchar2(255)) assignee,
cast(R.UserID as nvarchar2(255)) candidate,
2 AS taskstatus,
cast('' as DATE) bltime,
cast(PRDE.KEY_ as nvarchar2(255)) prdekey,
cast(PRDE.NAME_ as nvarchar2(255)) prdename
FROM
ASSETSMETADATA.ACT_RU_TASK A
LEFT OUTER JOIN ASSETSMETADATA.ACT_RE_PROCDEF PRDE ON A.PROC_DEF_ID_ = PRDE.ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RU_IDENTITYLINK IDEN ON IDEN.TASK_ID_ = A.ID_
LEFT OUTER JOIN IPRIVILAGEMETADATA.ROLEUSERREF R ON IDEN.GROUP_ID_ = R.ROLEID
1.4 V_TASKLIST_YB 已办任务视图表
SELECT DISTINCT
cast(H.PROC_INST_ID_ as nvarchar2(255)) PROC_INST_ID_,
cast(H.END_ACT_ID_ as nvarchar2(255)) END_ACT_ID_,
cast(A.NAME_ as nvarchar2(255)) actName,
cast(T.NAME_ as nvarchar2(255)) actName_T,
cast(T.ASSIGNEE_ as nvarchar2(255)) assignee,
cast('' as nvarchar2(255)) candidate,
2 AS taskstatus,
T.END_TIME_ bltime,
cast(PRDE.KEY_ as nvarchar2(255)) prdekey,
cast(PRDE.NAME_ as nvarchar2(255)) prdename
FROM
ASSETSMETADATA.ACT_HI_PROCINST H
LEFT OUTER JOIN ASSETSMETADATA.ACT_HI_TASKINST T ON H.PROC_INST_ID_ = T.PROC_INST_ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RE_PROCDEF PRDE ON H .PROC_DEF_ID_ = PRDE.ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RU_TASK A ON H.PROC_INST_ID_ = A.PROC_INST_ID_
WHERE
(H.END_TIME_ IS NULL)
AND (T.END_TIME_ IS NOT NULL)
1.5 V_TASKLIST_SYYB 所有已办任务视图表
SELECT DISTINCT
cast(H.PROC_INST_ID_ as nvarchar2(255)) PROC_INST_ID_,
cast(H.END_ACT_ID_ as nvarchar2(255)) END_ACT_ID_,
cast(NVL(A.NAME_,NVL2(H.END_ACT_ID_, '任务完结','撤销完结')) as nvarchar2(255)) AS actName,
cast(T.NAME_ as nvarchar2(255)) AS actName_T,
cast(T.ASSIGNEE_ as nvarchar2(255)) AS assignee,
cast('' as nvarchar2(255)) AS candidate,
2 AS taskstatus,
T.END_TIME_ AS bltime,
cast(PRDE.KEY_ as nvarchar2(255)) AS prdekey,
cast(PRDE.NAME_ as nvarchar2(255)) AS prdename
FROM
ASSETSMETADATA.ACT_HI_PROCINST H
LEFT OUTER JOIN ASSETSMETADATA.ACT_HI_TASKINST T ON H.PROC_INST_ID_ = T.PROC_INST_ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RE_PROCDEF PRDE ON H.PROC_DEF_ID_ = PRDE.ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RU_TASK A ON H.PROC_INST_ID_ = A.PROC_INST_ID_
WHERE
(T.END_TIME_ IS NOT NULL)
AND (
NOT EXISTS (
SELECT
PROC_INST_ID_
FROM
ASSETSMETADATA.V_TASKLIST_DB D
WHERE
(PROC_INST_ID_ = H.PROC_INST_ID_)
AND (candidate = T.ASSIGNEE_)
AND (actName_T = T.NAME_)
OR (
PROC_INST_ID_ = H.PROC_INST_ID_
)
AND (actName_T = T.NAME_)
AND (assignee = T.ASSIGNEE_)
OR (PROC_INST_ID_ = H.PROC_INST_ID_)
AND (candidate = T.ASSIGNEE_)
AND (actName LIKE '%上报%')
AND (T.NAME_ LIKE '%上报%')
OR (PROC_INST_ID_ = H.PROC_INST_ID_)
AND (assignee = T.ASSIGNEE_)
AND (actName LIKE '%上报%')
AND (T.NAME_ LIKE '%上报%')
)
)
ORDER BY
bltime DESC
1.5 V_TASKLIST_BJ 办结任务视图表
SELECT DISTINCT
cast(H.PROC_INST_ID_ as nvarchar2(255)) PROC_INST_ID_,
cast(H.END_ACT_ID_ as nvarchar2(255)) END_ACT_ID_,
cast('结束' as nvarchar2(255)) actName,
cast('结束' as nvarchar2(255)) actName_T,
cast(T.ASSIGNEE_ as nvarchar2(255)) assignee,
cast('' as nvarchar2(255)) candidate,
3 taskstatus,
T.END_TIME_ bltime,
cast(PRDE.KEY_ as nvarchar2(255)) prdekey,
cast(PRDE.NAME_ as nvarchar2(255)) prdename
FROM
ASSETSMETADATA.ACT_HI_PROCINST H
LEFT OUTER JOIN
(SELECT * FROM ASSETSMETADATA.ACT_HI_TASKINST)T
ON H.PROC_INST_ID_ = T.PROC_INST_ID_
LEFT OUTER JOIN
(SELECT * FROM ASSETSMETADATA.ACT_RE_PROCDEF)PRDE
ON H.PROC_DEF_ID_ = PRDE.ID_
WHERE
(H.END_TIME_ IS NOT NULL) AND (H.END_ACT_ID_ IS NOT NULL)
1.6 V_TASKLIST_CX 撤销任务视图表
SELECT DISTINCT
cast(H.PROC_INST_ID_ as nvarchar2(255)) PROC_INST_ID_,
cast(H.END_ACT_ID_ as nvarchar2(255)) END_ACT_ID_,
cast('结束' as nvarchar2(255)) AS actName,
cast('结束' as nvarchar2(255)) AS actName_T,
cast(T.ASSIGNEE_ as nvarchar2(255)) AS assignee,
cast('' as nvarchar2(255)) AS candidate,
5 AS taskstatus,
T.END_TIME_ AS bltime,
cast(PRDE.KEY_ as nvarchar2(255)) AS prdekey,
cast(PRDE.NAME_ as nvarchar2(255)) AS prdename
FROM
ASSETSMETADATA.ACT_HI_PROCINST H
LEFT OUTER JOIN ASSETSMETADATA.ACT_HI_TASKINST T ON H.PROC_INST_ID_ = T.PROC_INST_ID_
LEFT OUTER JOIN ASSETSMETADATA.ACT_RE_PROCDEF PRDE ON H.PROC_DEF_ID_ = PRDE.ID_
WHERE
(H.END_TIME_ IS NOT NULL)
AND (H.END_ACT_ID_ IS NULL)
2.后台代码逻辑
@Override
public ArrayList findActList(Integer rows,Integer page, HashMap paramMap) {
String sql = "";
if(paramMap.get("checkmessage")!=null&&StringUtils.isNotEmpty(paramMap.get("checkmessage").toString())){
// sql = "select * from ASSETSMETADATA.V_ACTLIST V where PROCINSTID= ? and clyj is not null and clyj <> '完成' ORDER BY START_TIME_";
sql = "select * from ASSETSMETADATA.V_ACTLIST V where PROCINSTID= ? and clyj is not null ORDER BY START_TIME_";
}else{
sql = "SELECT V.*" + " FROM ASSETSMETADATA.V_ACTLIST V WHERE procInstId = ? ORDER BY V.START_TIME_";
}
List<Object> paramList = new ArrayList<Object>();
paramList.add(paramMap.get("procInstId").toString());
Session session = sessionFactory.getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
int firstNum = (page - 1) * rows;
int lastNum = firstNum + rows;
query.setFirstResult(firstNum);
query.setMaxResults(lastNum);
for (int i = 0; i < paramList.size(); i++) {
query.setParameter(i, paramList.get(i));
}
return (ArrayList) query.list();
}
@Override
public int findActListCount(HashMap paramMap) {
String sql = "";
if(paramMap.get("checkmessage")!=null&&StringUtils.isNotEmpty(paramMap.get("checkmessage").toString())){
sql = "select count(*) from ASSETSMETADATA.V_ACTLIST V where PROCINSTID= ? and clyj is not null and clyj <> '完成' ORDER BY START_TIME_";
}else{
sql = "SELECT count(*)" + " FROM ASSETSMETADATA.V_ACTLIST V WHERE procInstId = ? ORDER BY V.START_TIME_";
}
List<Object> paramList = new ArrayList<Object>();
paramList.add(paramMap.get("procInstId").toString());
Session session = sessionFactory.getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
for (int i = 0; i < paramList.size(); i++) {
query.setParameter(i, paramList.get(i));
}
List result = query.list();
if (result.size() > 0) {
return Integer.parseInt(result.get(0) == null ? "" : result.get(0).toString());
}
return 0;
}
@Override
public ArrayList findList(HashMap<String, Object> paramMap, String tableName, String userid, String taskstatus,
Integer rows,Integer page) {
// sql 参数
List<Object> paramList = new ArrayList<Object>();
String sql = "";
// 0.查询全部的任务
if ("0".equals(taskstatus)) {
sql = "SELECT * FROM (" + "SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_DB V ON tb.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = '" + userid
+ "' OR v.CANDIDATE = '" + userid + "') ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName;
// sql += " SELECT * FROM( SELECT tb.*,V.* FROM " + tableName
sql += " tb left join ASSETSMETADATA.V_TASKLIST_YB V ON tb.procInstId = v.PROC_INST_ID_ WHERE V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) AND (v.ASSIGNEE = '" + userid + "' OR v.CANDIDATE = '"
+ userid + "') ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_BJ V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "' AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_WSB V ON tb.procInstId = v.PROC_INST_ID_ WHERE tb.reportStatus = 0 and tb.applyuser='"+userid+"'";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_CX V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "'";
sql += ") t WHERE 1=1 ";
}
// 查询代办的任务
if ("1".equals(taskstatus)) {
sql = "SELECT * FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_DB V ON t.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = ? OR v.CANDIDATE = ?) ";
paramList.add(userid);
paramList.add(userid);
}
// 查询已办
if ("2".equals(taskstatus)) {
sql = "SELECT * FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_YB V ON t.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = ? OR v.CANDIDATE = ?) AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) ";
paramList.add(userid);
paramList.add(userid);
}
// 查询办结的
if ("3".equals(taskstatus)) {
sql = "SELECT * FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_BJ V ON t.procInstId = v.PROC_INST_ID_ WHERE V.ASSIGNEE = ? AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) ";
paramList.add(userid);
}
// 查询办结的
if ("4".equals(taskstatus)) {
sql = "SELECT * FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_WSB V ON t.procInstId = v.PROC_INST_ID_ WHERE t.reportStatus = 0 ";
}
// 查询撤销的
if ("5".equals(taskstatus)) {
sql = "SELECT * FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_CX V ON t.procInstId = v.PROC_INST_ID_ WHERE V.ASSIGNEE = ? ";
paramList.add(userid);
}
// 购置查询
if ("6".equals(taskstatus)) {
sql = "SELECT * FROM (";
sql += " SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_YB V ON tb.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = '" + userid
+ "' OR v.CANDIDATE = '" + userid + "') AND "
+ " v.PROC_INST_ID_ Not IN(SELECT V.PROC_INST_ID_ FROM ASSETSMETADATA.V_TASKLIST_DB V WHERE (V.ASSIGNEE = '"
+ userid + "' OR V.CANDIDATE = '" + userid
+ "') ) AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_BJ V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "' AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += ") t WHERE 1=1 ";
}
// 便利前台查询条件的paramMap
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
if (entry!=null&&entry.getValue() != null && !entry.getValue().equals("")&& !entry.getValue().equals("null")&& !entry.getKey().equals("null")) {
sql += " AND t." + entry.getKey() + " like ? ";
paramList.add(entry.getValue());
}
}
sql += " ORDER BY t.createTime DESC";
Session session = sessionFactory.getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
int firstNum = (page - 1) * rows;
int lastNum = firstNum + rows;
query.setFirstResult(firstNum);
query.setMaxResults(lastNum);
for (int i = 0; i < paramList.size(); i++) {
query.setParameter(i, paramList.get(i));
}
return (ArrayList) query.list();
}
@Override
public int findListCount(HashMap<String, Object> paramMap, String tableName, String userid, String taskstatus) {
// sql 参数
List<Object> paramList = new ArrayList<Object>();
String sql = "";
// 0.查询全部的任务
if ("0".equals(taskstatus)) {
sql = "SELECT count(*) FROM (" + "SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_DB V ON tb.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = '" + userid
+ "' OR v.CANDIDATE = '" + userid + "') ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_YB V ON tb.procInstId = v.PROC_INST_ID_ WHERE V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) AND (v.ASSIGNEE = '" + userid + "' OR v.CANDIDATE = '"
+ userid + "') ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_BJ V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "' AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_WSB V ON tb.procInstId = v.PROC_INST_ID_ WHERE tb.reportStatus = 0";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_CX V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "'";
sql += ") t WHERE 1=1 ";
}
// 查询代办的任务
if ("1".equals(taskstatus)) {
sql = "SELECT count(*) FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_DB V ON t.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = ? OR v.CANDIDATE = ?) ";
paramList.add(userid);
paramList.add(userid);
}
// 查询已办
if ("2".equals(taskstatus)) {
sql = "SELECT count(*) FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_YB V ON t.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = ? OR v.CANDIDATE = ?) AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) ";
paramList.add(userid);
paramList.add(userid);
}
// 查询办结的
if ("3".equals(taskstatus)) {
sql = "SELECT count(*) FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_BJ V ON t.procInstId = v.PROC_INST_ID_ WHERE V.ASSIGNEE = ? AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '"
+ userid + "' group by b.PROC_INST_ID_ ) ";
paramList.add(userid);
}
// 查询办结的
if ("4".equals(taskstatus)) {
sql = "SELECT count(*) FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_WSB V ON t.procInstId = v.PROC_INST_ID_ WHERE t.reportStatus = 0 ";
}
// 查询撤销的
if ("5".equals(taskstatus)) {
sql = "SELECT count(*) FROM " + tableName
+ " t left join ASSETSMETADATA.V_TASKLIST_CX V ON t.procInstId = v.PROC_INST_ID_ WHERE V.ASSIGNEE = ? ";
paramList.add(userid);
}
// 购置查询
if ("6".equals(taskstatus)) {
sql = "SELECT count(*) FROM (";
sql += " SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_YB V ON tb.procInstId = v.PROC_INST_ID_ WHERE (v.ASSIGNEE = '" + userid
+ "' OR v.CANDIDATE = '" + userid + "') AND "
+ " v.PROC_INST_ID_ Not IN(SELECT V.PROC_INST_ID_ FROM ASSETSMETADATA.V_TASKLIST_DB V WHERE (V.ASSIGNEE = '"
+ userid + "' OR V.CANDIDATE = '" + userid
+ "') ) AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_YB B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += " UNION SELECT tb.*,V.* FROM " + tableName
+ " tb left join ASSETSMETADATA.V_TASKLIST_BJ V ON tb.procInstId = v.PROC_INST_ID_ WHERE v.ASSIGNEE = '" + userid
+ "' AND V.BLTIME in ( SELECT max(bltime) from ASSETSMETADATA.V_TASKLIST_BJ B where B.ASSIGNEE = '" + userid
+ "' group by b.PROC_INST_ID_ ) ";
sql += ") t WHERE 1=1 ";
}
// 便利前台查询条件的paramMap
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
if (entry!=null&&entry.getValue() != null && !entry.getValue().equals("")&& !entry.getValue().equals("null")&& !entry.getKey().equals("null")) {
sql += " AND t." + entry.getKey() + " like ? ";
paramList.add(entry.getValue());
}
}
Session session = sessionFactory.getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
for (int i = 0; i < paramList.size(); i++) {
query.setParameter(i, paramList.get(i));
}
Object obj = query.uniqueResult();
return Integer.parseInt(obj.toString());
}