diff --git a/src/com/engine/workflow/cmd/workflowOvertime/DoHandle_CommonProcessCmd.java b/src/com/engine/workflow/cmd/workflowOvertime/DoHandle_CommonProcessCmd.java new file mode 100644 index 00000000..74049fba --- /dev/null +++ b/src/com/engine/workflow/cmd/workflowOvertime/DoHandle_CommonProcessCmd.java @@ -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 { + + 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 idlist = entity.getCurrentIdList(); + List 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 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 requestMsgEntity = romm.workflowOverTimeMsg(requestid, msgUserIds, flownextoperator); + new MsgPushUtil().pushMsg(requestMsgEntity); + + RequestRemindBiz remindBiz = new RequestRemindBiz(user); + remindBiz.autoFlowRemind(requestid,workflowid,flownextoperator); + + } +} diff --git a/src/weaver/interfaces/dito/overtime/SendPortalOverTimeSubmitUtil.java b/src/weaver/interfaces/dito/overtime/SendPortalOverTimeSubmitUtil.java new file mode 100644 index 00000000..a36f79ad --- /dev/null +++ b/src/weaver/interfaces/dito/overtime/SendPortalOverTimeSubmitUtil.java @@ -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; + } + +} + +