285 lines
12 KiB
Java
285 lines
12 KiB
Java
package wenrgise.workflow.utility;
|
|
|
|
import java.sql.Timestamp;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.logging.Logger;
|
|
import wenrgise.common.exception.EnrgiseApplicationException;
|
|
import wenrgise.common.exception.EnrgiseSystemException;
|
|
import wenrgise.common.utility.UserInfo;
|
|
import wenrgise.common.vo.BaseHeaderVO;
|
|
import wenrgise.ejb.common.helper.DBObject;
|
|
import wenrgise.ejb.common.helper.QueryRow;
|
|
import wenrgise.ejb.common.utility.DBUtilitiesBean;
|
|
import wenrgise.workflow.bean.WflDocMstAttrDtlBean;
|
|
import wenrgise.workflow.core.WflDepartment;
|
|
import wenrgise.workflow.core.WflDocumentInfo;
|
|
import wenrgise.workflow.core.impl.WflDepartmentImpl;
|
|
import wenrgise.workflow.core.impl.WflResourceImpl;
|
|
import wenrgise.workflow.ejb.business.WflDocMstBO;
|
|
|
|
public class RouteHandler {
|
|
public static final Logger log = Logger.getLogger("wenrgise.workflow.utility.RouteHandler");
|
|
|
|
private Node nodeInfo;
|
|
|
|
private String routeDtlId;
|
|
|
|
private String activityId;
|
|
|
|
private String dtlDocId;
|
|
|
|
private String notifFlag;
|
|
|
|
public Node getNodeInfo() {
|
|
return this.nodeInfo;
|
|
}
|
|
|
|
public void setNodeInfo(Node newNodeInfo) {
|
|
this.nodeInfo = newNodeInfo;
|
|
}
|
|
|
|
public String getRouteDtlId() {
|
|
return this.routeDtlId;
|
|
}
|
|
|
|
public void setRouteDtlId(String newRouteDtlId) {
|
|
this.routeDtlId = newRouteDtlId;
|
|
}
|
|
|
|
public String getActivityId() {
|
|
return this.activityId;
|
|
}
|
|
|
|
public void setActivityId(String newActivityId) {
|
|
this.activityId = newActivityId;
|
|
}
|
|
|
|
public String getDtlDocId() {
|
|
return this.dtlDocId;
|
|
}
|
|
|
|
public void setDtlDocId(String newDtlDocId) {
|
|
this.dtlDocId = newDtlDocId;
|
|
}
|
|
|
|
public String getNotifFlag() {
|
|
return this.notifFlag;
|
|
}
|
|
|
|
public void setNotifFlag(String newNotifFlag) {
|
|
this.notifFlag = newNotifFlag;
|
|
}
|
|
|
|
public ArrayList findNextApprover(WflDocumentInfo wflDocInfo) throws EnrgiseSystemException, EnrgiseApplicationException {
|
|
ArrayList oParameters = new ArrayList();
|
|
DBUtilitiesBean oBean = new DBUtilitiesBean();
|
|
Timestamp oWhenPicked = null;
|
|
int count = 0;
|
|
BaseHeaderVO oBaseHeaderVO = new BaseHeaderVO();
|
|
oParameters = new ArrayList();
|
|
log.severe(String.valueOf("Route Id ").concat(String.valueOf(getRouteDtlId())));
|
|
oParameters.add(new DBObject(1, 1, 12, getRouteDtlId()));
|
|
oParameters.add(new DBObject(2, 2, -10));
|
|
oParameters.add(new DBObject(3, 2, 12));
|
|
oParameters.add(new DBObject(4, 2, 12));
|
|
oParameters.add(new DBObject(5, 2, 4));
|
|
ArrayList oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_GetNextLevelConditions(?,?,?,?,?)");
|
|
DBObject oOutObject = oOutArray.get(0);
|
|
ArrayList oList = (ArrayList)oOutObject.getObject();
|
|
String condtitionExpr = null;
|
|
String conditionValue = null;
|
|
String condtitionId = null;
|
|
QueryRow oRow = null;
|
|
Iterator oIt = oList.iterator();
|
|
if (oIt.hasNext()) {
|
|
WflDocMstBO oWflDocMstBO = new WflDocMstBO();
|
|
UserInfo oUserInfo = new UserInfo();
|
|
oUserInfo.setUserId(wflDocInfo.getRequester().getUserId());
|
|
oUserInfo.setSiteId(wflDocInfo.getRequester().getLoginSite().getSiteId());
|
|
oUserInfo.setUserSystemId(wflDocInfo.getRequester().getEmployeeId());
|
|
oUserInfo.setSiteName(wflDocInfo.getRequester().getLoginSite().getSiteName());
|
|
oWflDocMstBO.setOUserInfo(oUserInfo);
|
|
long oDocAttrCount = oWflDocMstBO.getWflDocTypeAttrDtlMetaInfo(wflDocInfo.getDocumentId()).getRecordCount();
|
|
ArrayList arylstDocType = oWflDocMstBO.getWflDocTypeAttrDtlInfo(wflDocInfo.getDocumentId(), 1L, oDocAttrCount);
|
|
Iterator oIt1 = arylstDocType.iterator();
|
|
HashMap oDocAttrTypeMap = new HashMap();
|
|
while (oIt1.hasNext()) {
|
|
WflDocMstAttrDtlBean oWflDocMstAttrDtlBean = oIt1.next();
|
|
oDocAttrTypeMap.put(oWflDocMstAttrDtlBean.getTxtAttrName(), oWflDocMstAttrDtlBean.getTxtType());
|
|
}
|
|
oRow = oIt.next();
|
|
condtitionId = oRow.get("conditionId").getString();
|
|
condtitionExpr = oRow.get("conditionExpr").getString();
|
|
ConditionChecker cc = new ConditionChecker();
|
|
conditionValue = String.valueOf(cc.checkCondition(condtitionExpr, wflDocInfo.getDocumentAttributes(), oDocAttrTypeMap));
|
|
}
|
|
ArrayList oResourceList = new ArrayList();
|
|
String activityCode = WorkFlowUtil.getActivityCode(wflDocInfo.getRequesterAction());
|
|
if (!activityCode.equalsIgnoreCase("Reject")) {
|
|
log.severe(String.valueOf("Approve ").concat(String.valueOf(getRouteDtlId())));
|
|
log.severe(String.valueOf("Approve Cond ").concat(String.valueOf(condtitionId)));
|
|
log.severe(String.valueOf("Approve Cond value ").concat(String.valueOf(conditionValue)));
|
|
oOutArray = new ArrayList();
|
|
oParameters = new ArrayList();
|
|
oParameters.add(new DBObject(1, 1, 12, getRouteDtlId()));
|
|
oParameters.add(new DBObject(2, 1, 12, condtitionId));
|
|
oParameters.add(new DBObject(3, 1, 12, conditionValue));
|
|
oParameters.add(new DBObject(4, 2, -10));
|
|
oParameters.add(new DBObject(5, 2, 12));
|
|
oParameters.add(new DBObject(6, 2, 12));
|
|
oParameters.add(new DBObject(7, 2, 4));
|
|
oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_GetNextLevelRouteDtls(?,?,?,?,?,?,?)");
|
|
oList = new ArrayList();
|
|
oOutObject = new DBObject();
|
|
oOutObject = oOutArray.get(0);
|
|
oList = (ArrayList)oOutObject.getObject();
|
|
oRow = null;
|
|
Iterator oIt1 = oList.iterator();
|
|
while (oIt1.hasNext()) {
|
|
oRow = oIt1.next();
|
|
String sToRouteDtlId = oRow.get("routeDtlId").getString();
|
|
String splitJoinFlag = oRow.get("splitJoinFlag").getString();
|
|
getNextLevelApprovers(wflDocInfo, splitJoinFlag, sToRouteDtlId, oResourceList);
|
|
}
|
|
} else {
|
|
oOutArray = new ArrayList();
|
|
oParameters = new ArrayList();
|
|
log.severe(String.valueOf("Reject ").concat(String.valueOf(getRouteDtlId())));
|
|
log.severe(String.valueOf("Reject Cond ").concat(String.valueOf(condtitionId)));
|
|
log.severe(String.valueOf("Reject Cond value ").concat(String.valueOf(conditionValue)));
|
|
oParameters.add(new DBObject(1, 1, 12, getRouteDtlId()));
|
|
oParameters.add(new DBObject(2, 1, 12, condtitionId));
|
|
oParameters.add(new DBObject(3, 1, 12, conditionValue));
|
|
oParameters.add(new DBObject(4, 2, -10));
|
|
oParameters.add(new DBObject(5, 2, 12));
|
|
oParameters.add(new DBObject(6, 2, 12));
|
|
oParameters.add(new DBObject(7, 2, 4));
|
|
oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_NextLevelRouteDtlsReject(?,?,?,?,?,?,?)");
|
|
oList = new ArrayList();
|
|
oOutObject = new DBObject();
|
|
oOutObject = oOutArray.get(0);
|
|
oList = (ArrayList)oOutObject.getObject();
|
|
oRow = null;
|
|
Iterator oIt1 = oList.iterator();
|
|
while (oIt1.hasNext()) {
|
|
oRow = oIt1.next();
|
|
String sToRouteDtlId = oRow.get("routeDtlId").getString();
|
|
String splitJoinFlag = oRow.get("splitJoinFlag").getString();
|
|
getNextLevelApproversForReject(wflDocInfo, splitJoinFlag, sToRouteDtlId, oResourceList);
|
|
}
|
|
}
|
|
return oResourceList;
|
|
}
|
|
|
|
public ArrayList getNextLevelApproversForReject(WflDocumentInfo wflDocInfo, String splitJoinFlag, String sToRouteDtlId, ArrayList oResourceList) throws EnrgiseSystemException, EnrgiseApplicationException {
|
|
ArrayList oOutArray = new ArrayList();
|
|
ArrayList oParameters = new ArrayList();
|
|
DBUtilitiesBean oBean = new DBUtilitiesBean();
|
|
oParameters.add(new DBObject(1, 1, 12, sToRouteDtlId));
|
|
oParameters.add(new DBObject(2, 1, 12, splitJoinFlag));
|
|
oParameters.add(new DBObject(3, 1, 12, wflDocInfo.getWorkListId()));
|
|
oParameters.add(new DBObject(4, 2, -10));
|
|
oParameters.add(new DBObject(5, 2, 12));
|
|
oParameters.add(new DBObject(6, 2, 12));
|
|
oParameters.add(new DBObject(7, 2, 4));
|
|
oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_NextLevelApproversReject(?,?,?,?,?,?,?)");
|
|
DBObject oOutObject = oOutArray.get(0);
|
|
ArrayList oList = (ArrayList)oOutObject.getObject();
|
|
if (oList != null) {
|
|
QueryRow oRow = null;
|
|
Iterator oIt = oList.iterator();
|
|
while (oIt.hasNext()) {
|
|
oRow = oIt.next();
|
|
WflResourceImpl wflResourceImpl = new WflResourceImpl();
|
|
WflDepartmentImpl wflDepartmentImpl = new WflDepartmentImpl();
|
|
wflDepartmentImpl.setDepartmentId(oRow.get("departmentId").getString());
|
|
wflDepartmentImpl.setDepartmentName(oRow.get("departmentName").getString());
|
|
wflResourceImpl.setDepartment((WflDepartment)wflDepartmentImpl);
|
|
wflResourceImpl.setEmployeeId(oRow.get("empId").getString());
|
|
wflResourceImpl.setEmpNo(oRow.get("empNo").getString());
|
|
wflResourceImpl.setRouteDtlId(sToRouteDtlId);
|
|
oResourceList.add(wflResourceImpl);
|
|
}
|
|
}
|
|
return oResourceList;
|
|
}
|
|
|
|
public ArrayList getNextLevelApprovers(WflDocumentInfo wflDocInfo, String splitJoinFlag, String sToRouteDtlId, ArrayList oResourceList) throws EnrgiseSystemException, EnrgiseApplicationException {
|
|
ArrayList oOutArray = new ArrayList();
|
|
ArrayList oParameters = new ArrayList();
|
|
DBUtilitiesBean oBean = new DBUtilitiesBean();
|
|
log.severe(String.valueOf("Route Id ").concat(String.valueOf(sToRouteDtlId)));
|
|
log.severe(String.valueOf("Split Join Flag ").concat(String.valueOf(splitJoinFlag)));
|
|
log.severe(String.valueOf("Requester Emp Id ").concat(String.valueOf(wflDocInfo.getRequester().getEmployeeId())));
|
|
oParameters.add(new DBObject(1, 1, 12, sToRouteDtlId));
|
|
oParameters.add(new DBObject(2, 1, 12, splitJoinFlag));
|
|
oParameters.add(new DBObject(3, 1, 12, wflDocInfo.getRequester().getEmployeeId()));
|
|
oParameters.add(new DBObject(4, 2, -10));
|
|
oParameters.add(new DBObject(5, 2, 12));
|
|
oParameters.add(new DBObject(6, 2, 12));
|
|
oParameters.add(new DBObject(7, 2, 4));
|
|
oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_GetNextLevelApprovers(?,?,?,?,?,?,?)");
|
|
DBObject oOutObject = oOutArray.get(0);
|
|
ArrayList oList = (ArrayList)oOutObject.getObject();
|
|
if (oList != null) {
|
|
QueryRow oRow = null;
|
|
Iterator oIt = oList.iterator();
|
|
while (oIt.hasNext()) {
|
|
oRow = oIt.next();
|
|
WflResourceImpl wflResourceImpl = new WflResourceImpl();
|
|
WflDepartmentImpl wflDepartmentImpl = new WflDepartmentImpl();
|
|
wflDepartmentImpl.setDepartmentId(oRow.get("departmentId").getString());
|
|
wflDepartmentImpl.setDepartmentName(oRow.get("departmentName").getString());
|
|
wflResourceImpl.setDepartment((WflDepartment)wflDepartmentImpl);
|
|
wflResourceImpl.setEmployeeId(oRow.get("empId").getString());
|
|
wflResourceImpl.setEmpNo(oRow.get("empNo").getString());
|
|
wflResourceImpl.setDelegatedBy(oRow.get("delegatedBy").getString());
|
|
wflResourceImpl.setRouteDtlId(sToRouteDtlId);
|
|
oResourceList.add(wflResourceImpl);
|
|
}
|
|
}
|
|
return oResourceList;
|
|
}
|
|
|
|
public void populateData() throws EnrgiseSystemException, EnrgiseApplicationException {
|
|
ArrayList oParameters = new ArrayList();
|
|
DBUtilitiesBean oBean = new DBUtilitiesBean();
|
|
Timestamp oWhenPicked = null;
|
|
int count = 0;
|
|
BaseHeaderVO oBaseHeaderVO = new BaseHeaderVO();
|
|
oParameters = new ArrayList();
|
|
oParameters.add(new DBObject(1, 1, 12, getRouteDtlId()));
|
|
oParameters.add(new DBObject(2, 1, 12, getDtlDocId()));
|
|
oParameters.add(new DBObject(3, 1, 12, getActivityId()));
|
|
Node nodeInfo = getNodeInfo();
|
|
if (nodeInfo != null) {
|
|
oParameters.add(new DBObject(4, 1, 12, nodeInfo.getLane()));
|
|
oParameters.add(new DBObject(5, 1, 12, nodeInfo.getLevel()));
|
|
} else {
|
|
oParameters.add(new DBObject(4, 1, 12, null));
|
|
oParameters.add(new DBObject(5, 1, 12, null));
|
|
}
|
|
oParameters.add(new DBObject(6, 2, -10));
|
|
oParameters.add(new DBObject(7, 2, 12));
|
|
oParameters.add(new DBObject(8, 2, 12));
|
|
oParameters.add(new DBObject(9, 2, 4));
|
|
ArrayList oOutArray = oBean.callProc(oParameters, "WFLWORKLIST.proc_GetRouteDtlInfo(?,?,?,?,?,?,?,?,?)");
|
|
DBObject oOutObject = oOutArray.get(0);
|
|
ArrayList oList = (ArrayList)oOutObject.getObject();
|
|
if (oList.size() <= 0)
|
|
throw new EnrgiseApplicationException("wenrgise.workflow.norecordfound", "M");
|
|
QueryRow oRow = null;
|
|
Iterator oIt = oList.iterator();
|
|
if (oIt.hasNext()) {
|
|
oRow = oIt.next();
|
|
setRouteDtlId(oRow.get("routeDtlId").getString());
|
|
setDtlDocId(oRow.get("dtlDocId").getString());
|
|
setActivityId(oRow.get("activityId").getString());
|
|
setNodeInfo(new Node(oRow.get("lane").getString(), oRow.get("level_number").getString()));
|
|
setNotifFlag(oRow.get("notification_flag").getString());
|
|
}
|
|
}
|
|
}
|