#EC_HJ100# 流程超时流转提交流程对接门户系统

main
shilei 2 years ago
parent 3a13c5840b
commit 8c9eec15db

@ -0,0 +1,141 @@
package com.engine.workflow.cmd.workflowOvertime;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.workflow.biz.requestForm.RequestRemindBiz;
import com.engine.workflow.entity.node.OperatorInfoEntity;
import com.engine.workflow.entity.workflowOvertime.HandleEntity;
import com.engine.workflow.entity.workflowOvertime.OvertimeEntity;
import com.engine.workflow.util.RequestFlowUtil;
import com.engine.workflow.util.WorkflowOvertimeSettingsUtil;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.cpt.util.CptWfUtil;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.workflow.msg.MsgPushUtil;
import weaver.workflow.msg.entity.MsgEntity;
import weaver.workflow.request.RequestOperationMsgManager;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
public class DoHandle_CommonProcessCmd extends AbstractCommonCommand<Boolean> {
protected OvertimeEntity entity;//超时实体
protected boolean handleResult;//超时处理结果
public DoHandle_CommonProcessCmd(OvertimeEntity entity, boolean handleResult) {
this.entity = entity;
this.handleResult = handleResult;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Boolean execute(CommandContext commandContext) {
BaseBean bb = new BaseBean();
int isprocessed = 0;
HandleEntity handleEntity = entity.getHandleEntity();
int flownextoperator = handleEntity.getHandleType();
int workflowid = entity.getWorkflowId();
int requestid = entity.getRequestId();
List<Integer> idlist = entity.getCurrentIdList();
List<OperatorInfoEntity> operators = handleEntity.getOperators();
List userlist = new ArrayList<>();
for (int i = 0; i < operators.size(); i++) {
userlist.add(operators.get(i).getUserId() + "");
}
bb.writeLog("DoHandle_CommonProcessCmd--requestid:"+requestid);
bb.writeLog("DoHandle_CommonProcessCmd--userlist:"+userlist.size());
int isautoflow = handleEntity.getIsautoflow();
bb.writeLog("DoHandle_CommonProcessCmd--isautoflow:"+isautoflow);
if (isautoflow == 0){//没开启超时则更新isprocessed等数据
RequestFlowUtil.updateCurrentoperator(3, entity ,entity.needHandleList);
List<Integer> needHandleidList = WorkflowOvertimeSettingsUtil.selectNeedHandleId(entity);
if (needHandleidList.size() == 0) {
WorkflowOvertimeSettingsUtil.setLastHandleTask(entity);//查询下一次超时时间,并且添加一个超时处理任务
}else {
entity.setNeedHandleList(needHandleidList);
}
}
//开启超时处理,发送处理消息提醒
if (isautoflow == 1) {
//消息提醒
if (flownextoperator == 0) {
//若是指定流程干预人,则提醒人为流程干预者
String flowobjectids = handleEntity.getHandleObjectIds();
userlist = Util.TokenizerString(flowobjectids, ",");
}
if (flownextoperator != 1) {//自动流转到下一操作者,单独处理
sendMsg(requestid, workflowid, userlist, flownextoperator);
}
if(handleResult){
try{
String userid = StringUtils.join(userlist);
Class<?> clazz = Class.forName("weaver.interfaces.dito.overtime.SendPortalOverTimeSubmitUtil");
if(clazz.getMethod("sendOverTimeSubmit") != null) {
Method method = clazz.getMethod("sendOverTimeSubmit", String.class);
Object newInstance = clazz.newInstance();
method.invoke(newInstance,userid);
}
}catch (ClassNotFoundException | NoSuchMethodException e){
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
//资产解冻
assetUnfreeze(requestid, workflowid);
return true;
}
public void assetUnfreeze(int requestid, int workflowid) {
//资产超时后解冻处理
CptWfUtil cptWfUtil = new CptWfUtil();
String cptwftype = cptWfUtil.getWftype("" + workflowid);
String sql = "select wb.formid from workflow_requestbase wr,workflow_base wb where wr.workflowid=wb.id and wr.requestid=" + requestid;
RecordSet rs = new RecordSet();
rs.execute(sql);
rs.next();
int formid = Util.getIntValue(rs.getString("formid"));
if (!"".equals(cptwftype) && !"apply".equalsIgnoreCase(cptwftype) && !"applyuse".equalsIgnoreCase(cptwftype)) {
rs.executeUpdate("update CptCapital set frozennum = 0 where isdata='2' and frozennum > 0 ");
CptWfUtil cwu = new CptWfUtil();
cwu.DoFrozenCpt_new();
} else if (formid == 18 || formid == 19 || formid == 201 || formid == 220 || formid == 221 || formid == 222 || formid == 224) {
rs.executeUpdate("update CptCapital set frozennum = 0 where isdata='2' and frozennum > 0 ");
CptWfUtil cwu = new CptWfUtil();
cwu.DoFrozenCpt_new();
}
}
public void sendMsg(int requestid,int workflowid, List msgUserIds, int flownextoperator) {
RequestOperationMsgManager romm = new RequestOperationMsgManager();
List<MsgEntity> requestMsgEntity = romm.workflowOverTimeMsg(requestid, msgUserIds, flownextoperator);
new MsgPushUtil().pushMsg(requestMsgEntity);
RequestRemindBiz remindBiz = new RequestRemindBiz(user);
remindBiz.autoFlowRemind(requestid,workflowid,flownextoperator);
}
}

@ -0,0 +1,340 @@
package weaver.interfaces.dito.overtime;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.constant.Constants;
import com.customization.dito.sendtodo.HttpRequestUtil;
import com.customization.dito.sendtodo.SendPortalErrorUtil;
import com.time.util.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.dito.comInfo.PropBean;
import java.net.URLEncoder;
/***
*
*/
public class SendPortalOverTimeSubmitUtil {
public void sendOverTimeSubmit(String requestid,String userids){
BaseBean bb = new BaseBean();
bb.writeLog("SendPortalOverTimeSubmitUtil");
sendOverTimeSubmitByTodo(requestid,userids);
sendOverTimeSubmitByToRead(requestid,userids);
}
/**
*
* @param requestid
* @param userids
*/
public void sendOverTimeSubmitByTodo(String requestid,String userids){
String portal_todourl = Constants.portal_todourl;
String bpm_app_workflowurl = Constants.bpm_app_workflowurl;
String username = Constants.username;
String passwd = Constants.passwd;
String bpm_workflowurl = Constants.bpm_workflowurl;
String center = Constants.center;
String bpm_app_requesturl = Constants.bpm_app_requesturl;
BaseBean bb = new BaseBean();
bb.writeLog("sendOverTimeSubmitBytoDo");
RecordSet rs = new RecordSet();
String zhjkbs = "weaver.interfaces.dito.overtime.SendPortalOverTimeSubmitUtil.sendOverTimeSubmitByTodo" ;
SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil();
HttpRequestUtil httpRequestUtil = new HttpRequestUtil();
String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl");
JSONObject requestObject = new JSONObject();
bb.writeLog("SendPortalOverTimeSubmitUtil--sendOverTimeSubmitBytoDo");
String terminal = "1" ;
String taskType = "0";
String actionType = "2" ;
String objectAction = "0";
String objectType = "0";
try {
String cus_staff = PropBean.getUfPropValue("cus_staff") ;
String scopeid = "-1";
String scope = "HrmCustomFieldByInfoType" ;
String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss");
String urlPc = "[newtab]"+ bpm_workflowurl+"/workflow/request/ViewRequestForwardSPA.jsp?requestid="+requestid ;
String replace = bpm_app_workflowurl.replace("/bpm", "");
String urlDing = replace+bpm_app_requesturl+requestid;
String urlApp = replace+bpm_app_requesturl+requestid;
if(org.apache.commons.lang.StringUtils.isNotEmpty(mobileJumpUrl)){
urlDing += "&returnUrl="+ URLEncoder.encode(mobileJumpUrl,"UTF-8");
urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8");
}
bb.writeLog("monitorArchived-urlDing", urlDing);
int count = 0 ;
String countSql=" select t2.userid \n" +
" from workflow_requestbase t1\n" +
" inner join workflow_currentoperator t2 on t1.requestid = t2.requestid\n" +
" where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" +
" and ((t2.isremark = '0' and (t2.takisremark is null or t2.takisremark = 0)) or t2.isremark in ('1','5','7','11')) \n" +
" and t2.islasttimes = 1\n" +
" and (t2.isprocessing = '' or t2.isprocessing is null)\n" +
" and t2.requestid = "+requestid ;
bb.writeLog("sendOverTimeSubmitBytoDo--countSql:"+countSql);
rs.executeQuery(countSql);
while (rs.next()){
count++;
}
bb.writeLog("sendOverTimeSubmitBytoDo--count:"+count);
if(count >0){
String requestname = "" ;
String workflowname = "" ;
String nodeId = "" ;
String nodeName = "" ;
String sql =" select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname\n" +
" from workflow_requestbase t1\n" +
" inner join workflow_base t3 on t1.workflowid = t3.id\n" +
" left join workflow_nodebase d1 on d1.id = t1.currentnodeid "+
" where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" +
" and t1.requestid = "+requestid ;
bb.writeLog("sendOverTimeSubmitBytoDo--sql2:"+sql);
rs.executeQuery(sql);
if (rs.next()){
requestname = Util.null2String(rs.getString("requestname")) ;
workflowname = Util.null2String(rs.getString("workflowname")) ;
nodeId = Util.null2String(rs.getString("nodeid")) ;
nodeName = Util.null2String(rs.getString("nodeName")) ;
}
requestObject.put("center",center);
requestObject.put("title",requestname);
requestObject.put("taskCode","weaver"+requestid);
requestObject.put("nodeId",nodeId);
requestObject.put("taskType",taskType);
requestObject.put("actionType",actionType);
requestObject.put("createDate",processTime);
requestObject.put("messageTitle",getShortMessageTitle(requestname));
requestObject.put("messageContent",requestname);
requestObject.put("terminal",terminal);
requestObject.put("urlPc",urlPc);
requestObject.put("urlApp",urlApp);
requestObject.put("urlDing",urlDing);
requestObject.put("nodeName",nodeName);
requestObject.put("ticketType",workflowname);
JSONArray taskObjectList = new JSONArray();
sql = " select t2.userid,h1.loginid,h1.lastname,h1.email,t2.isremark,t1.requestid,t2.nodeid,d1.nodename,c1."+cus_staff+" as staffid "+
" from workflow_requestbase t1\n" +
" inner join workflow_currentoperator t2 on t1.requestid = t2.requestid\n" +
" left join cus_fielddata c1 on c1.id = t2.userid and c1.scopeid= "+scopeid+" and c1.scope = '"+scope+"' "+
" left join (select id, lastname,loginid,email from hrmresource where STATUS = 1 union all select id,lastname,loginid,'' as email from hrmresourcemanager ) h1 on h1.id = t2.userid\n" +
" left join workflow_nodebase d1 on d1.id = t2.nodeid "+
" where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" +
" and ((t2.isremark = '0' and (t2.takisremark is null or t2.takisremark = 0)) or t2.isremark in ('1','5','7','11')) \n" +
" and t2.islasttimes = 1 \n" +
" and (t2.isprocessing = '' or t2.isprocessing is null)\n" +
" and t2.requestid = "+requestid ;
rs.executeQuery(sql);
while (rs.next()) {
//归档节点抄送
String creator = rs.getString("loginid");
String staffid = rs.getString("staffid");
bb.writeLog("sendOverTimeSubmitBytoDo:"+requestid+" creator:"+creator);
if ("sysadmin".equals(creator)) {
creator = "Admin";
}
JSONObject taskObject = new JSONObject();
taskObject.put("objectAction",objectAction);
taskObject.put("objectType", objectType);
taskObject.put("objectCode", creator);
taskObject.put("objectId", staffid);
taskObject.put("operatorCode", creator);
taskObjectList.add(taskObject);
}
requestObject.put("taskObjectList",taskObjectList);
String auth = username + ":" + passwd;
bb.writeLog("sendOverTimeSubmitBytoDo---requestObject:"+requestObject.toJSONString());
String msgdata = httpRequestUtil.doPostByAuth(portal_todourl,requestObject.toJSONString(),auth);
if (!"".equals(msgdata)) {
JSONObject msgObject = JSONObject.parseObject(msgdata);
if (msgObject.containsKey("resultCode")) {
String resultCode = msgObject.getString("resultCode");
if ("0".equals(resultCode)) {
sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid,nodeId,nodeName,userids,requestObject.toJSONString(),resultCode,"",zhjkbs);
}else{
String resultmsg = msgObject.getString("resultMsg");
sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid,nodeId,nodeName,userids,requestObject.toJSONString(),resultCode,resultmsg,zhjkbs);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param requestid
* @param userids
*/
public void sendOverTimeSubmitByToRead(String requestid,String userids){
BaseBean bb = new BaseBean();
bb.writeLog("sendOverTimeSubmitByToRead");
RecordSet rs = new RecordSet();
String portal_todourl = Constants.portal_todourl;
String bpm_app_workflowurl = Constants.bpm_app_workflowurl;
String username = Constants.username;
String passwd = Constants.passwd;
String bpm_workflowurl = Constants.bpm_workflowurl;
String center = Constants.center;
String bpm_app_requesturl = Constants.bpm_app_requesturl;
String zhjkbs = "weaver.interfaces.dito.overtime.SendPortalOverTimeSubmitUtil.sendOverTimeSubmitBytoRead" ;
SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil();
HttpRequestUtil httpRequestUtil = new HttpRequestUtil();
String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl");
JSONObject requestObject = new JSONObject();
bb.writeLog("SendPortalOverTimeSubmitUtil--sendOverTimeSubmitBytoRead");
String terminal = "1" ;
String actionType = "0" ;
String taskType = "1";
String objectAction = "0" ;
String objectType = "0";
String emailArray = "";
try {
String cus_staff = PropBean.getUfPropValue("cus_staff") ;
String scopeid = "-1";
String scope = "HrmCustomFieldByInfoType" ;
String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss");
String urlPc = "[newtab]"+ bpm_workflowurl+"/workflow/request/ViewRequestForwardSPA.jsp?requestid="+requestid ;
String replace = bpm_app_workflowurl.replace("/bpm", "");
String urlDing = replace+bpm_app_requesturl+requestid;
String urlApp = replace+bpm_app_requesturl+requestid;
if(org.apache.commons.lang.StringUtils.isNotEmpty(mobileJumpUrl)){
urlDing += "&returnUrl="+ URLEncoder.encode(mobileJumpUrl,"UTF-8");
urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8");
}
bb.writeLog("sendOverTimeSubmitBytoRead-urlDing", urlDing);
String requestname = "" ;
String workflowname = "" ;
String nodeId = "" ;
String nodeName = "" ;
String sql =" select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname\n" +
" from workflow_requestbase t1\n" +
" inner join workflow_base t3 on t1.workflowid = t3.id\n" +
" left join workflow_nodebase d1 on d1.id = t1.currentnodeid "+
" where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" +
" and t1.requestid = "+requestid ;
bb.writeLog("sendOverTimeSubmitBytoRead--sql2:"+sql);
rs.executeQuery(sql);
if (rs.next()){
requestname = Util.null2String(rs.getString("requestname")) ;
workflowname = Util.null2String(rs.getString("workflowname")) ;
nodeId = Util.null2String(rs.getString("nodeid")) ;
nodeName = Util.null2String(rs.getString("nodeName")) ;
}
requestObject.put("center",center);
requestObject.put("title",requestname);
requestObject.put("taskCode","weaver"+requestid);
requestObject.put("nodeId",nodeId);
requestObject.put("taskType",taskType);
requestObject.put("actionType",actionType);
requestObject.put("createDate",processTime);
requestObject.put("messageTitle",getShortMessageTitle(requestname));
requestObject.put("messageContent",requestname);
requestObject.put("terminal",terminal);
requestObject.put("urlPc",urlPc);
requestObject.put("urlApp",urlApp);
requestObject.put("urlDing",urlDing);
requestObject.put("nodeName",nodeName);
requestObject.put("ticketType",workflowname);
JSONArray taskObjectList = new JSONArray();
sql = " select t2.userid,h1.loginid,h1.email,t2.isremark,t1.requestid,t2.nodeid,d1.nodename,c1."+cus_staff+" as staffid "+
" from workflow_requestbase t1\n" +
" inner join workflow_currentoperator t2 on t1.requestid = t2.requestid\n" +
" left join cus_fielddata c1 on c1.id = t2.userid and c1.scopeid= "+scopeid+" and c1.scope = '"+scope+"' "+
" left join (select id, lastname,loginid,email from hrmresource where STATUS = 1 union all select id,lastname,loginid,'' as email from hrmresourcemanager ) h1 on h1.id = t2.userid\n" +
" left join workflow_nodebase d1 on d1.id = t2.nodeid "+
" where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" +
" and t2.isremark in ('8','9')\n" +
" and t2.islasttimes = 1\n" +
" and (t2.isprocessing = '' or t2.isprocessing is null)\n" +
" and t2.requestid = "+requestid +
" ";
rs.executeQuery(sql);
while (rs.next()) {
//归档节点抄送
String creator = rs.getString("loginid");
String staffid = rs.getString("staffid");
bb.writeLog("monitorArchived:"+requestid+" creator:"+creator);
if ("sysadmin".equals(creator)) {
creator = "Admin";
}
JSONObject taskObject = new JSONObject();
taskObject.put("objectAction", objectAction);
taskObject.put("objectType", objectType);
taskObject.put("objectCode", creator);
taskObject.put("objectId", staffid);
taskObject.put("operatorCode", creator);
taskObjectList.add(taskObject);
}
requestObject.put("taskObjectList",taskObjectList);
String auth = username + ":" + passwd;
bb.writeLog("sendOverTimeSubmitBytoRead---requestObject:"+requestObject.toJSONString());
String msgdata = httpRequestUtil.doPostByAuth(portal_todourl,requestObject.toJSONString(),auth);
if (!"".equals(msgdata)) {
JSONObject msgObject = JSONObject.parseObject(msgdata);
if (msgObject.containsKey("resultCode")) {
String resultCode = msgObject.getString("resultCode");
if ("0".equals(resultCode)) {
sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid,nodeId,nodeName,userids,requestObject.toJSONString(),resultCode,"",zhjkbs);
}else{
String resultmsg = msgObject.getString("resultMsg");
sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid,nodeId,nodeName,userids,requestObject.toJSONString(),resultCode,resultmsg,zhjkbs);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/***
*
* @param messageTitle
* @return
*/
private String getShortMessageTitle(String messageTitle) {
if (messageTitle.length() > 20) {
messageTitle = messageTitle.substring(0, 17) + "...";
}
return messageTitle;
}
}
Loading…
Cancel
Save