From cadd64ab0f08856633be88a771544ba91252578e Mon Sep 17 00:00:00 2001 From: wcf Date: Wed, 18 Oct 2023 16:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BA=90=E7=A0=81=E4=BF=AE=E6=94=B9=E5=92=8C?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B91018?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dito/sendtodo/SendPortalAtAddTodoCmd.java | 199 ++ .../dito/sendtodo/SendPortalForwardCmd.java | 600 ++++++ .../dito/sendtodo/SendPortalToReadUtil.java | 66 +- .../dito/sendtodo/SendPortalTodoCmd.java | 40 +- .../dito/sendtodo/SendPortalTodoRunnable.java | 4 +- .../dito/sendtodo/SendPortalTodoUtil.java | 191 ++ .../sendtodo/SendRemarkOperateTodoCmd.java | 8 +- .../qc2563600/CCOperatorUtil.java | 155 ++ .../reqremark/cmd/AtRequestRemarkCmd.java | 194 ++ .../service/AtRequestRemarkService.java | 18 + .../impl/AtRequestRemarkServiceImpl.java | 24 + .../reqremark/web/AtRequestRemarkAction.java | 55 + .../workflow/cmd/agent/AddAgentSaveCmd.java | 287 +++ .../workflow/cmd/agent/TakeBackAgentCmd.java | 301 +++ .../cmd/requestForm/ForwardSubmitCmd.java | 1839 +++++++++++++++++ .../cmd/requestForm/RemarkSubmitCmd.java | 896 ++++++++ .../communication/DoSaveContentCmd.java | 238 +++ .../workflow/request/DevWorkflowCreater.java | 441 ++++ .../request/RequestSignRelevanceWithMe.java | 205 ++ 19 files changed, 5727 insertions(+), 34 deletions(-) create mode 100644 src/com/customization/dito/sendtodo/SendPortalAtAddTodoCmd.java create mode 100644 src/com/customization/dito/sendtodo/SendPortalForwardCmd.java create mode 100644 src/com/customization/qc2563600/CCOperatorUtil.java create mode 100644 src/com/engine/dito/reqremark/cmd/AtRequestRemarkCmd.java create mode 100644 src/com/engine/dito/reqremark/service/AtRequestRemarkService.java create mode 100644 src/com/engine/dito/reqremark/service/impl/AtRequestRemarkServiceImpl.java create mode 100644 src/com/engine/dito/reqremark/web/AtRequestRemarkAction.java create mode 100644 src/com/engine/workflow/cmd/agent/AddAgentSaveCmd.java create mode 100644 src/com/engine/workflow/cmd/agent/TakeBackAgentCmd.java create mode 100644 src/com/engine/workflow/cmd/requestForm/ForwardSubmitCmd.java create mode 100644 src/com/engine/workflow/cmd/requestForm/RemarkSubmitCmd.java create mode 100644 src/com/engine/workflow/cmd/requestForm/communication/DoSaveContentCmd.java create mode 100644 src/weaver/workflow/request/DevWorkflowCreater.java create mode 100644 src/weaver/workflow/request/RequestSignRelevanceWithMe.java diff --git a/src/com/customization/dito/sendtodo/SendPortalAtAddTodoCmd.java b/src/com/customization/dito/sendtodo/SendPortalAtAddTodoCmd.java new file mode 100644 index 00000000..a5b4987d --- /dev/null +++ b/src/com/customization/dito/sendtodo/SendPortalAtAddTodoCmd.java @@ -0,0 +1,199 @@ +package com.customization.dito.sendtodo; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.constant.Constants; +import com.time.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.dito.comInfo.PropBean; + +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/9/26 + * @Version 1.0 + * @Description + */ +public class SendPortalAtAddTodoCmd { + + private Map params; + public static String EMAIL_REGEX_DEFAULT = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; + + public SendPortalAtAddTodoCmd(){ + } + + public SendPortalAtAddTodoCmd(Map params){ + this.params=params; + } + + public String getShortMessageTitle(String messageTitle) { + if (messageTitle.length() > 20) { + messageTitle = messageTitle.substring(0, 17) + "..."; + } + return messageTitle; + } + + /** + * + * @param username + * @param passwd + * @param portal_todourl + * @param bpm_workflowurl + * @param bpm_app_workflowurl + * @param bpm_app_requesturl + */ + public void sendTodoDataByNode(String requestid, List> todolist, String username, String passwd, String center, String portal_todourl, String bpm_workflowurl, String bpm_app_workflowurl, String bpm_app_requesturl){ + HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); + + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + + JSONObject requestObject = new JSONObject(); + RecordSet rs = new RecordSet(); + + BaseBean bb = new BaseBean(); + bb.writeLog("SendPortalQithRawRunnable--sendTodoDataByNode"); + + String terminal = "1" ; + String taskType = "0"; + String actionType = "0" ; + + try { + + bb.writeLog("SendPortalAtAddTodoCmd sleep start"); + Thread.sleep(2000); + bb.writeLog("sleep end "); + + String sql = ""; + + 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(StringUtils.isNotEmpty(mobileJumpUrl)){ + urlDing += "&returnUrl="+ URLEncoder.encode(mobileJumpUrl,"UTF-8"); + urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); + } + bb.writeLog("urlDing", urlDing); + + + String requestname = "" ; + String workflowname = "" ; + String nodeId = "" ; + String nodeName = "" ; + String lastName = ""; + sql =" select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid"+ + " 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 "+ + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = "+requestid ; + + bb.writeLog("sendTodoDataByNode--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")) ; + lastName = Util.null2String(rs.getString("loginid")) ; + } + + requestObject.put("center",center); + requestObject.put("title",requestname); + requestObject.put("creator",lastName); +// requestObject.put("taskCode","weaver"+requestid); + + 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(); + for (Map todoMap: todolist){ + JSONObject taskObject = new JSONObject(); + JSONArray list = new JSONArray(); + JSONObject requestObject2 = new JSONObject(); + requestObject2.putAll(requestObject); + + SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); + requestObject2.put("nodeName",todoMap.get("nodename")); + requestObject2.put("nodeId",todoMap.get("nodeid")); + requestObject2.put("taskCode",requestid+"_at_"+todoMap.get("id")); + + + String creator = (String) todoMap.get("loginid"); + if("sysadmin".equals(creator)){ + creator = "Admin"; + } + taskObject.put("objectAction","0"); + taskObject.put("objectType","0"); + taskObject.put("objectCode",creator); + taskObject.put("objectId",todoMap.get("id")); + taskObject.put("operatorCode",creator); + list.add(taskObject); + + requestObject2.put("messageTitle",getShortMessageTitle(requestname)); + requestObject2.put("messageContent", requestname); + requestObject2.put("terminal", "1"); + requestObject2.put("taskType", "1"); + requestObject2.put("actionType", "0"); + + requestObject2.put("taskObjectList",list); + + String auth = username + ":" + passwd; + + bb.writeLog("SendPortalToReadUtil--requestObject:" + requestObject2.toJSONString()); + String msgdata = httpRequestUtil.doPostByAuth(Constants.portal_todourl, requestObject2.toJSONString(), auth); + bb.writeLog("SendPortalToReadUtil-msgdata:" + msgdata); + if (!"".equals(msgdata)) { + JSONObject msgObject = JSONObject.parseObject(msgdata); + //{"resultCode":"1","resultMsg":"No Result"} + if (msgObject.containsKey("resultCode")) { + String resultCode = msgObject.getString("resultCode"); + if ("0".equals(resultCode)) { + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,""); + }else if ("TODO-FAIL-002".equals(resultCode)){ + //The task does not exist.任务不存在,则新增 + User user = new User(); + user.setUid(Integer.valueOf(todoMap.get("id").toString())); + SendPortalToReadUtil sendPortalToReadUtil = new SendPortalToReadUtil(); + sendPortalToReadUtil.sendToReadDataByCreateNode(requestid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + + }else{ + + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,resultmsg); + + } + } + } + + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/com/customization/dito/sendtodo/SendPortalForwardCmd.java b/src/com/customization/dito/sendtodo/SendPortalForwardCmd.java new file mode 100644 index 00000000..9fcaa968 --- /dev/null +++ b/src/com/customization/dito/sendtodo/SendPortalForwardCmd.java @@ -0,0 +1,600 @@ +package com.customization.dito.sendtodo; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.constant.Constants; +import com.time.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.dito.comInfo.PropBean; + +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/10/9 + * @Version 1.0 + * @Description + */ +public class SendPortalForwardCmd { + + private Map params; + public static String EMAIL_REGEX_DEFAULT = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; + Pattern regex = Pattern.compile(EMAIL_REGEX_DEFAULT); + + public BaseBean bb = new BaseBean(); + + HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); + SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); + SendMailUtil sendMailUtil = new SendMailUtil(); + + String scopeid = "-1"; + String scope = "HrmCustomFieldByInfoType" ; + + public SendPortalForwardCmd(){ + + } + + public SendPortalForwardCmd(Map params){ + this.params=params; + } + + //转发 + public void forwardSendPortal(String requestid,int currentnodeid,User user) { + bb.writeLog("======== SendPortalForwardCmd forwardSendPortal ========================="); + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + String portal_doneurl = PropBean.getUfPropValue("portal_doneurl"); + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); + RecordSet rs = new RecordSet(); + try { + String zhjkbs = "com.customization.dito.sendtodo.SendPortalForwardCmd.forwardSendPortal"; + String actionType = "0"; + String terminal = "1"; + String taskType = "0"; + String objectAction = "0"; + String objectType = "0"; + + String sql = ""; + String workflowname = ""; + String nodeId = ""; + String nodeName = ""; + JSONObject requestObject = new JSONObject(); + 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; + + String msgdata = ""; + String requestname = ""; + String lastname = ""; + String userids = ""; + String loginid = ""; + String emailArray = ""; + + sql = " select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid " + + " 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 " + + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + bb.writeLog("SendPortalForwardCmd --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") + user.getUID()); + nodeName = Util.null2String(rs.getString("nodeName")); + lastname = Util.null2String(rs.getString("lastname")); + loginid = Util.null2String(rs.getString("loginid")); + } + + if (StringUtils.isNotEmpty(mobileJumpUrl)) { + urlDing += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + urlApp += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + } + JSONArray taskObjectList = new JSONArray(); + + bb.writeLog("SendPortalForwardCmd urlDing", urlDing); + + requestObject.put("center", center); + requestObject.put("title", requestname); + requestObject.put("creator", loginid); + requestObject.put("taskCode", "weaver_zf_" + requestid); + requestObject.put("nodeId", currentnodeid); + 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", getNodeName(currentnodeid)); + requestObject.put("ticketType", workflowname); + + sql = " select t2.userid,h1.loginid,h1.email,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" + + " 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("SendPortalForwardCmd forward --sql:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + JSONObject taskObject = new JSONObject(); + + String usercode = Util.null2String(rs.getString("loginid")); + String staffid = Util.null2String(rs.getString("staffid")); + String userid1 = Util.null2String(rs.getString("userid")); + userids += StringUtils.isEmpty(userids) ? userid1 : "," + userid1; + + if ("sysadmin".equals(usercode)) { + usercode = "Admin"; + } + + String objectCode = usercode; + String operatorCode = usercode; + + taskObject.put("objectAction", objectAction); + taskObject.put("objectType", objectType); + taskObject.put("objectCode", objectCode); + taskObject.put("objectId", staffid); + taskObject.put("operatorCode", operatorCode); + taskObjectList.add(taskObject); + + String email = Util.null2String(rs.getString("email")); + bb.writeLog("SendPortalForwardCmd email3:" + email); + Matcher matcher = regex.matcher(email); + if (matcher.matches()) { + emailArray += StringUtils.isEmpty(emailArray) ? email : "," + email; + } + } + if (taskObjectList.size() > 0) { + requestObject.put("taskObjectList", taskObjectList); + } else { + requestObject.put("actionType", "3"); + } + bb.writeLog("SendPortalForwardCmd requestObject:" + requestObject.toJSONString()); + String auth = username + ":" + passwd; + 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)) { + + bb.writeLog("SendPortalForwardCmd emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname, lastname, processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + + sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + 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){ + bb.writeLog(e); + e.printStackTrace(); + } + } + + //转办 + public void transferSendPortal(String requestid,int currentnodeid,User user){ + bb.writeLog("======== SendPortalForwardCmd transferSendPortal ========================="); + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + String portal_doneurl = PropBean.getUfPropValue("portal_doneurl"); + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); + RecordSet rs = new RecordSet(); + try { + String zhjkbs = "com.customization.dito.sendtodo.SendPortalForwardCmd.transferSendPortal"; + String actionType = "2"; + String terminal = "1"; + String taskType = "0"; + String objectAction = "0"; + String objectType = "0"; + + String sql = ""; + String workflowname = ""; + String nodeId = ""; + String nodeName = ""; + JSONObject requestObject = new JSONObject(); + + String urlPc = "[newtab]"+ Constants.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(StringUtils.isNotEmpty(mobileJumpUrl)){ + urlDing += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); + urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); + } + + + String msgdata = ""; + String requestname = ""; + String lastname = ""; + String userids = ""; + String loginid = ""; + String emailArray = ""; + + sql = " select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid " + + " 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 " + + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + bb.writeLog("SendPortalForwardCmd --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") + user.getUID()); + nodeName = Util.null2String(rs.getString("nodeName")); + lastname = Util.null2String(rs.getString("lastname")); + loginid = Util.null2String(rs.getString("loginid")); + } + + if (StringUtils.isNotEmpty(mobileJumpUrl)) { + urlDing += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + urlApp += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + } + JSONArray taskObjectList = new JSONArray(); + + bb.writeLog("SendPortalForwardCmd urlDing", urlDing); + + requestObject.put("center", center); + requestObject.put("title", requestname); + requestObject.put("creator", loginid); + requestObject.put("taskCode", "weaver" + requestid); + requestObject.put("nodeId", currentnodeid); + 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", getNodeName(currentnodeid)); + requestObject.put("ticketType", workflowname); + + sql = " select t2.userid,h1.loginid,h1.email,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" + + " 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("SendPortalForwardCmd forward --sql:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + JSONObject taskObject = new JSONObject(); + + String usercode = Util.null2String(rs.getString("loginid")); + String staffid = Util.null2String(rs.getString("staffid")); + String userid1 = Util.null2String(rs.getString("userid")); + userids += StringUtils.isEmpty(userids) ? userid1 : "," + userid1; + + if ("sysadmin".equals(usercode)) { + usercode = "Admin"; + } + + String objectCode = usercode; + String operatorCode = usercode; + + taskObject.put("objectAction", objectAction); + taskObject.put("objectType", objectType); + taskObject.put("objectCode", objectCode); + taskObject.put("objectId", staffid); + taskObject.put("operatorCode", operatorCode); + taskObjectList.add(taskObject); + + String email = Util.null2String(rs.getString("email")); + bb.writeLog("SendPortalForwardCmd email3:" + email); + Matcher matcher = regex.matcher(email); + if (matcher.matches()) { + emailArray += StringUtils.isEmpty(emailArray) ? email : "," + email; + } + } + if (taskObjectList.size() > 0) { + requestObject.put("taskObjectList", taskObjectList); + } else { + requestObject.put("actionType", "3"); + } + bb.writeLog("================ SendPortalForwardCmd requestObject ============= "+ requestObject.toJSONString()); + String auth = username + ":" + passwd; + 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)) { + + bb.writeLog("SendPortalForwardCmd emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname, lastname, processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + + sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + 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){ + bb.writeLog(e); + e.printStackTrace(); + } + } + + //流程归档转发处理 + public void delTodoAddDoneSendPortal(String requestid,int currentnodeid,User user){ + bb.writeLog("======== SendPortalForwardCmd delTodoAddDoneSendPortal ========================="); + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + String portal_doneurl = PropBean.getUfPropValue("portal_doneurl"); + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); + RecordSet rs = new RecordSet(); + try { + String zhjkbs = "com.customization.dito.sendtodo.SendPortalForwardCmd.delTodoAddDoneSendPortal"; + String sql = ""; + String workflowname = ""; + String nodeId = ""; + String nodeName = ""; + JSONObject requestObject = new JSONObject(); + 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; + + String msgdata = ""; + String requestname = ""; + String lastname = ""; + String loginid = ""; + + sql = " select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid " + + " 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 " + + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + bb.writeLog("SendPortalWithAddTodoCmd delTodoAddDoneSendPortal --sql:" + 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") + user.getUID()); + nodeName = Util.null2String(rs.getString("nodeName")); + loginid = Util.null2String(rs.getString("loginid")); + } + + //判断是否为转发节点 + sql = "SELECT c1." + PropBean.getUfPropValue("cus_staff") + " as staffid FROM workflow_currentoperator t1 left join cus_fielddata c1 on c1.id = t1.userid and c1.scopeid= " + scopeid + " and c1.scope = '" + scope + "' WHERE t1.preisremark=1 and t1.REQUESTID=? and t1.USERID=?"; + rs.executeQuery(sql, requestid, user.getUID()); + if (rs.next()) { + //删除转发的待办 + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("center", center); + jsonObject.put("title", requestname); + jsonObject.put("creator", loginid); + jsonObject.put("taskCode", "weaver_zf_" + requestid); + + jsonObject.put("taskType", "0"); + jsonObject.put("actionType", "1"); + jsonObject.put("createDate", processTime); + jsonObject.put("messageTitle", getShortMessageTitle(requestname)); + jsonObject.put("messageContent", requestname); + jsonObject.put("terminal", "1"); + jsonObject.put("urlPc", urlPc); + jsonObject.put("urlApp", urlApp); + jsonObject.put("urlDing", urlDing); + jsonObject.put("nodeName", nodeName); + jsonObject.put("ticketType", workflowname); + + JSONArray list = new JSONArray(); + JSONObject taskObject = new JSONObject(); + list.add(taskObject); + taskObject.put("objectAction", "1"); + taskObject.put("objectType", "0"); + taskObject.put("objectCode", user.getLoginid()); + taskObject.put("objectId", rs.getString("staffid")); + taskObject.put("operatorCode", user.getLoginid()); + jsonObject.put("taskObjectList", list); + bb.writeLog("SendPortalWithAddDoneCmd--delTodoAddDoneSendPortal--requestObject:" + jsonObject.toJSONString()); + String auth = username + ":" + passwd; + msgdata = httpRequestUtil.doPostByAuth(Constants.portal_todourl, jsonObject.toJSONString(), auth); + bb.writeLog("SendPortalWithAddDoneCmd-delTodoAddDoneSendPortal-msgdata:" + msgdata); + if (StringUtils.isNotEmpty(msgdata)) { + JSONObject msgObject = JSONObject.parseObject(msgdata); + if (msgObject.containsKey("resultCode")) { + String resultCode = msgObject.getString("resultCode"); + if (!"0".equals(resultCode)) { + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid, user.getUID() + "", nodeName, user.getUID() + "", jsonObject.toJSONString(), resultCode, resultmsg, zhjkbs); + } + } + } + + } + + // 增加已办 + requestObject.put("center", center); + requestObject.put("taskCode", "weaver" + requestid); + requestObject.put("nodeId", nodeId); + requestObject.put("ticketType", workflowname); + requestObject.put("title", requestname); + requestObject.put("creator", loginid); + requestObject.put("processStaff", loginid); + requestObject.put("processTime", processTime); + requestObject.put("isRecall", "1"); + requestObject.put("actionType", "0"); + requestObject.put("urlPC", urlPc); + requestObject.put("urlApp", urlApp); + requestObject.put("urlDing", urlDing); + + String auth = username + ":" + passwd; + bb.writeLog("delTodoAddDoneSendPortal done requestObject:" + requestObject.toJSONString()); + msgdata = httpRequestUtil.doPostByAuth(portal_doneurl, requestObject.toJSONString(), auth); + bb.writeLog("delTodoAddDoneSendPortal done msgdata:" + msgdata); + if (StringUtils.isNotEmpty(msgdata)) { + JSONObject msgObject = JSONObject.parseObject(msgdata); + //{"resultCode":"1","resultMsg":"No Result"} + if (msgObject.containsKey("resultCode")) { + String resultCode = msgObject.getString("resultCode"); + if (!"0".equals(resultCode)) { + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo4Phase2(requestid, nodeId, nodeName, user.getUID() + "", requestObject.toJSONString(), resultCode, resultmsg, zhjkbs); + } + } + } + }catch (Exception e){ + e.printStackTrace(); + rs.writeLog(e); + } + } + + public String getShortMessageTitle(String messageTitle) { + if (messageTitle.length() > 20) { + messageTitle = messageTitle.substring(0, 17) + "..."; + } + return messageTitle; + } + + /*** + * + * @param requestname + * @param operator + * @param operatorTime + * @return + */ + public Map getEmailTemplate(String requestname,String operator,String operatorTime){ + Map dataMap = new HashMap(); + + String notificationSubject = "You have a new To-Read - <"+requestname+"> "; + String notificationContent = operator + " created this task on "+operatorTime+"\n" + + " Please handle it in time."; + + dataMap.put("notificationSubject",notificationSubject); + dataMap.put("notificationContent",notificationContent); + return dataMap; + } + + /** + * 判断流程节点是否是 超时处理提交的 + * @param requestid + * @param nodeid + * @return + */ + public boolean checkIsOvertime(String requestid,String nodeid){ + boolean flag = false; + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_currentoperator where requestid=? and nodeid=?",requestid,nodeid); + if(rs.next()){ + double overtime = Util.getDoubleValue(rs.getString("overtime"),0); + if(overtime > 0){ + flag = true; + } + } + return flag; + } + + /** + * 获取上一节点id + * @param requestid + * @param nodeid + * @return + */ + public String getLastnodeid(String requestid,int nodeid){ + String result = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_requestbase where requestid=? and currentnodeid=?",requestid,nodeid); + if(rs.next()){ + result = Util.null2String(rs.getString("lastnodeid")); + } + return result; + } + + /*** + * 获取节点名称 + * @param nodeid + * @return + */ + public String getNodeName(int nodeid){ + RecordSet rs = new RecordSet(); + String name = ""; + rs.executeQuery(" select nodename from workflow_nodebase where id = ?",nodeid); + while (rs.next()){ + name = Util.null2String(rs.getString("nodename")); + } + return name; + } + +} diff --git a/src/com/customization/dito/sendtodo/SendPortalToReadUtil.java b/src/com/customization/dito/sendtodo/SendPortalToReadUtil.java index ba02da0f..b952a2a1 100644 --- a/src/com/customization/dito/sendtodo/SendPortalToReadUtil.java +++ b/src/com/customization/dito/sendtodo/SendPortalToReadUtil.java @@ -24,8 +24,9 @@ public class SendPortalToReadUtil { /*** * 流程发起节点,提交到下个节点,发起节点没有待办,下个节点有待办 * @param requestid + * @param user */ - public void sendToReadDataByCreateNode(String requestid,String portal_todourl,String bpm_app_workflowurl,String username,String passwd,String bpm_workflowurl,String center,String bpm_app_requesturl){ + public void sendToReadDataByCreateNode(String requestid,User user,String portal_todourl,String bpm_app_workflowurl,String username,String passwd,String bpm_workflowurl,String center,String bpm_app_requesturl){ HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); SendMailUtil sendMailUtil = new SendMailUtil(); @@ -52,10 +53,25 @@ public class SendPortalToReadUtil { try { String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); JSONArray taskObjectList = new JSONArray(); +// int u_userid = user.getUID(); + String lastname = ""; + String loginid = "" ; +// String workcode = ""; +// String sql = " select * from (select id, lastname,loginid from hrmresource where status = 1 union all select id, lastname,loginid from hrmresourcemanager ) w where w.id = '" + u_userid + "'"; +// rs.executeQuery(sql); +// while (rs.next()) { +// workcode = Util.null2String(rs.getString("loginid")); +// } String urlPc = "[newtab]"+bpm_workflowurl+"/workflow/request/ViewRequestForwardSPA.jsp?requestid="+requestid ; +// String app_requestUrl = bpm_app_requesturl+requestid; +// app_requestUrl = URLEncoder.encode(app_requestUrl,"UTF-8"); String replace = bpm_app_workflowurl.replace("/bpm", ""); +// String urlDing = replace+bpm_app_requesturl+requestid; +// bb.writeLog("urlDing", urlDing); +// String urlApp = replace+bpm_app_requesturl+requestid; + String urlDing = replace+bpm_app_requesturl+requestid; String urlApp = replace+bpm_app_requesturl+requestid; if(StringUtils.isNotEmpty(mobileJumpUrl)){ @@ -65,8 +81,13 @@ public class SendPortalToReadUtil { String requestname = ""; String workflowname = "" ; - String lastname = ""; - String loginid = ""; +// sql =" select t1.requestname,t1.requestmark,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 ; + String sql =" select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid "+ " from workflow_requestbase t1\n" + " inner join workflow_base t3 on t1.workflowid = t3.id\n" + @@ -74,6 +95,7 @@ public class SendPortalToReadUtil { " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + " and t1.requestid = "+requestid ; + bb.writeLog("sendToReadDataByNode--sql:"+sql); rs.executeQuery(sql); if (rs.next()){ @@ -178,6 +200,8 @@ public class SendPortalToReadUtil { if(matcher.matches()){ emailArray += StringUtils.isEmpty(emailArray) ? email : ","+email ; } + + bb.writeLog("emailArray:"+emailArray); if(StringUtils.isNotEmpty(emailArray)) { @@ -210,8 +234,9 @@ public class SendPortalToReadUtil { * 如果流程提交节点没有待办,意味着流程流转到下个节点,那么查询出来的待办都有新增,并且删除提交节点的所有待办 * @param requestid * @param noideid + * @param user */ - public void sendToReadDataByNode(String requestid,String noideid,String portal_todourl,String bpm_app_workflowurl,String username,String passwd,String bpm_workflowurl,String center,String bpm_app_requesturl){ + public void sendToReadDataByNode(String requestid,String noideid,User user,String portal_todourl,String bpm_app_workflowurl,String username,String passwd,String bpm_workflowurl,String center,String bpm_app_requesturl){ HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); SendMailUtil sendMailUtil = new SendMailUtil(); SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); @@ -237,6 +262,17 @@ public class SendPortalToReadUtil { String taskType = "1"; try { + +// int u_userid = user.getUID(); + String lastname = ""; +// +// String workcode = ""; +// String sql = " select * from (select id, lastname,loginid from hrmresource where status = 1 union all select id, lastname,loginid from hrmresourcemanager ) w where w.id = '" + u_userid + "'"; +// rs.executeQuery(sql); +// while (rs.next()) { +// workcode = Util.null2String(rs.getString("loginid")); +// } + int count = 0 ; String countSql =" select t2.userid \n" + " from workflow_requestbase t1\n" + @@ -261,8 +297,13 @@ public class SendPortalToReadUtil { 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 = bpm_app_workflowurl+"/interface/mobilelogin/loginsso.jsp?em_auth_usercode="+creator+"&forwardurl="+app_requestUrl; +// String urlApp = replace+bpm_app_requesturl+requestid; + String urlDing = replace+bpm_app_requesturl+requestid; String urlApp = replace+bpm_app_requesturl+requestid; + if(StringUtils.isNotEmpty(mobileJumpUrl)){ urlDing += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); @@ -273,9 +314,13 @@ public class SendPortalToReadUtil { String workflowname = "" ; String requestname = ""; String loginid = ""; - String lastname = "" ; JSONArray taskObjectList = new JSONArray(); +// sql =" select t1.workflowid,t1.requestname,t1.requestmark,t3.workflowname\n" + +// " from workflow_requestbase t1\n" + +// " inner join workflow_base t3 on t1.workflowid = t3.id\n" + +// " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + +// " and t1.requestid = " + requestid; String sql =" select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid "+ " from workflow_requestbase t1\n" + @@ -296,6 +341,7 @@ public class SendPortalToReadUtil { requestObject.put("center", center); requestObject.put("title", requestname); + requestObject.put("taskType", taskType); requestObject.put("actionType", actionType); requestObject.put("createDate", processTime); @@ -401,9 +447,10 @@ public class SendPortalToReadUtil { sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeid,nodename,userid,requestObject.toJSONString(),resultCode,""); + }else if ("TODO-FAIL-002".equals(resultCode)){ //The task does not exist.任务不存在,则新增 - sendToReadDataByCreateNode(requestid,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendToReadDataByCreateNode(requestid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); } else{ @@ -414,17 +461,14 @@ public class SendPortalToReadUtil { } } } + + } } catch (Exception e) { e.printStackTrace(); } } - /*** - * - * @param messageTitle - * @return - */ private String getShortMessageTitle(String messageTitle) { if (messageTitle.length() > 20) { messageTitle = messageTitle.substring(0, 17) + "..."; diff --git a/src/com/customization/dito/sendtodo/SendPortalTodoCmd.java b/src/com/customization/dito/sendtodo/SendPortalTodoCmd.java index 60b0f48e..c25a1808 100644 --- a/src/com/customization/dito/sendtodo/SendPortalTodoCmd.java +++ b/src/com/customization/dito/sendtodo/SendPortalTodoCmd.java @@ -6,10 +6,10 @@ import com.engine.core.interceptor.AbstractCommandProxy; import com.engine.core.interceptor.Command; import com.engine.workflow.cmd.requestForm.RequestSubmitCmd; import com.engine.workflow.entity.requestForm.RequestOperationResultBean; +import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; -import weaver.interfaces.dito.comInfo.PropBean; import javax.servlet.http.HttpServletRequest; import java.util.Map; @@ -45,6 +45,13 @@ public class SendPortalTodoCmd extends AbstractCommandProxy> // System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); // } + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_requestlogAtInfo where requestid=? ",requestid); + while(rs.next()){ + String atuserid = Util.null2String(rs.getString("atuserid")); + bb.writeLog(requestid+"======================== SendPortalTodoCmd ========================="+ atuserid); + } + User user = requestSubmitCmd.getUser(); bb.writeLog("requestid:"+requestid); bb.writeLog("workflowid:"+workflowid); @@ -63,32 +70,29 @@ public class SendPortalTodoCmd extends AbstractCommandProxy> String new_requestid = Util.null2String(resultBean.getResultInfo().get("requestid")); bb.writeLog("new_requestid:"+new_requestid); - SendPortalTodoUtil sendPortalTodoUtil = new SendPortalTodoUtil(); - SendPortalToReadUtil sendPortalToReadUtil = new SendPortalToReadUtil(); - - 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 bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); +// String portal_doneurl = PropBean.getUfPropValue("portal_doneurl"); +// String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); +// String portal_todourl = PropBean.getUfPropValue("portal_todourl"); +// String username = PropBean.getUfPropValue("username"); +// String passwd = PropBean.getUfPropValue("passwd"); +// String center = PropBean.getUfPropValue("center"); +// String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + SendPortalTodoUtil sendPortalTodoUtil = new SendPortalTodoUtil(); if(Util.getIntValue(requestid) == -1 && "save".equals(src)){ - sendPortalTodoUtil.sendTodoDataByCreater(new_requestid,user, portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalTodoUtil.sendTodoDataByCreater(new_requestid,user, Constants.portal_todourl, Constants.bpm_app_workflowurl, Constants.username, Constants.passwd, Constants.bpm_workflowurl, Constants.center, Constants.bpm_app_requesturl); }else if(Util.getIntValue(requestid) == -1 && "submit".equals(src)){ - sendPortalTodoUtil.sendTodoDataByCreateNode(new_requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); - sendPortalToReadUtil.sendToReadDataByCreateNode(new_requestid,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalTodoUtil.sendTodoDataByCreateNode(new_requestid,nodeid,user, Constants.portal_todourl, Constants.bpm_app_workflowurl, Constants.username, Constants.passwd, Constants.bpm_workflowurl, Constants.center, Constants.bpm_app_requesturl); }else if(Util.getIntValue(requestid)> 0 && "submit".equals(src)){ - sendPortalTodoUtil.sendTodoDataByNode(requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); - sendPortalToReadUtil.sendToReadDataByNode(requestid,nodeid,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalTodoUtil.sendTodoDataByNode(requestid,nodeid,user, Constants.portal_todourl, Constants.bpm_app_workflowurl, Constants.username, Constants.passwd, Constants.bpm_workflowurl, Constants.center, Constants.bpm_app_requesturl); }else if(Util.getIntValue(requestid)> 0 && "reject".equals(src)){ - sendPortalTodoUtil.sendTodoDataByReject(requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalTodoUtil.sendTodoDataByReject(requestid,nodeid,user, Constants.portal_todourl, Constants.bpm_app_workflowurl, Constants.username, Constants.passwd, Constants.bpm_workflowurl, Constants.center, Constants.bpm_app_requesturl); } + // SendPortalTodoRunnable sendPortalTodoRunnable = new SendPortalTodoRunnable(src,new_requestid,requestid,nodeid,user); // new Thread(sendPortalTodoRunnable).start(); diff --git a/src/com/customization/dito/sendtodo/SendPortalTodoRunnable.java b/src/com/customization/dito/sendtodo/SendPortalTodoRunnable.java index edb9a0bc..1c2459cf 100644 --- a/src/com/customization/dito/sendtodo/SendPortalTodoRunnable.java +++ b/src/com/customization/dito/sendtodo/SendPortalTodoRunnable.java @@ -44,12 +44,12 @@ public class SendPortalTodoRunnable implements Runnable{ }else if(Util.getIntValue(requestid) == -1 && "submit".equals(src)){ // sendPortalTodoUtil.sendTodoDataByCreateNode(new_requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); // sendPortalDoneUtil.sendPortalDoneData( new_requestid, nodeid, user, portal_doneurl,bpm_app_workflowurl, username, passwd, bpm_workflowurl,bpm_app_requesturl); - sendPortalToReadUtil.sendToReadDataByCreateNode(new_requestid,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalToReadUtil.sendToReadDataByCreateNode(new_requestid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); }else if(Util.getIntValue(requestid)> 0 && "submit".equals(src)){ // sendPortalTodoUtil.sendTodoDataByNode(requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); // sendPortalDoneUtil.sendPortalDoneData( requestid, nodeid, user, portal_doneurl,bpm_app_workflowurl, username, passwd, bpm_workflowurl,bpm_app_requesturl); - sendPortalToReadUtil.sendToReadDataByNode(requestid,nodeid,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + sendPortalToReadUtil.sendToReadDataByNode(requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); }else if(Util.getIntValue(requestid)> 0 && "reject".equals(src)){ // sendPortalTodoUtil.sendTodoDataByReject(requestid,nodeid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); diff --git a/src/com/customization/dito/sendtodo/SendPortalTodoUtil.java b/src/com/customization/dito/sendtodo/SendPortalTodoUtil.java index cd93cd29..5f2de48d 100644 --- a/src/com/customization/dito/sendtodo/SendPortalTodoUtil.java +++ b/src/com/customization/dito/sendtodo/SendPortalTodoUtil.java @@ -2,6 +2,7 @@ package com.customization.dito.sendtodo; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.constant.Constants; import com.time.util.DateUtil; import org.apache.commons.lang.StringUtils; import weaver.conn.RecordSet; @@ -373,6 +374,101 @@ public class SendPortalTodoUtil { } } } + + + //处理抄送的 + JSONObject taskObject = new JSONObject(); + 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 t1.currentnodetype = 3"+ + // " and ((t2.isremark = '8' and t2.preisremark='8') or (t2.isremark = '9' and t2.preisremark='9'))\n" + + " and t2.isremark in ('2','9','8')\n" + + " and t2.preisremark in ('8','9')\n" + + " and t2.islasttimes = 1\n" + + " and (t2.isprocessing = '' or t2.isprocessing is null)\n" + + " and t2.requestid = "+requestid+ " and t2.userid = "+user.getUID(); + rs.executeQuery(sql); + boolean hasData = true; + if (rs.next()){ + hasData = false; + JSONArray list = new JSONArray(); + JSONObject requestObject2 = new JSONObject(); + requestObject2.putAll(requestObject); + + //归档节点抄送 + String email = Util.null2String(rs.getString("email")); + requestObject2.put("nodeName",rs.getString("nodename")); + requestObject2.put("nodeId",rs.getString("nodeid")); + requestObject2.put("taskCode",rs.getString("requestid")+"_cs_"+rs.getString("userid")); + + + String creator = rs.getString("loginid"); + if("sysadmin".equals(creator)){ + creator = "Admin"; + } + taskObject.put("objectAction","0"); + taskObject.put("objectType","0"); + taskObject.put("objectCode",creator); + taskObject.put("objectId",rs.getString("staffid")); + taskObject.put("operatorCode",creator); + list.add(taskObject); + + //归档节点抄送 + + requestObject2.put("messageTitle",getShortMessageTitle(requestname)); + requestObject2.put("messageContent", requestname); + requestObject2.put("terminal", "1"); + requestObject2.put("taskType", "1"); + requestObject2.put("actionType", "2"); + + requestObject2.put("taskObjectList",list); + + String auth = username + ":" + passwd; + + bb.writeLog("SendPortalToReadUtil--requestObject:" + requestObject2.toJSONString()); + String msgdata = httpRequestUtil.doPostByAuth(Constants.portal_todourl, requestObject2.toJSONString(), auth); + bb.writeLog("SendPortalToReadUtil-msgdata:" + msgdata); + if (!"".equals(msgdata)) { + JSONObject msgObject = JSONObject.parseObject(msgdata); + //{"resultCode":"1","resultMsg":"No Result"} + if (msgObject.containsKey("resultCode")) { + String resultCode = msgObject.getString("resultCode"); + if ("0".equals(resultCode)) { + Matcher matcher = regex.matcher(email); + if (matcher.matches()) { + emailArray += StringUtils.isEmpty(emailArray) ? email : "," + email; + } + + bb.writeLog("emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname,rs.getString("lastname"),processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + //sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,""); + + }else if ("TODO-FAIL-002".equals(resultCode)){ + //The task does not exist.任务不存在,则新增 + SendPortalToReadUtil sendPortalToReadUtil = new SendPortalToReadUtil(); + sendPortalToReadUtil.sendToReadDataByCreateNode(requestid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + + }else{ + + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,resultmsg); + + } + } + } + } } catch (Exception e) { e.printStackTrace(); } @@ -700,6 +796,101 @@ public class SendPortalTodoUtil { } } } + + //处理抄送的 + JSONObject taskObject = new JSONObject(); + String 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 t1.currentnodetype = 3"+ + // " and ((t2.isremark = '8' and t2.preisremark='8') or (t2.isremark = '9' and t2.preisremark='9'))\n" + + " and t2.isremark in ('2','9','8')\n" + + " and t2.preisremark in ('8','9')\n" + + " and t2.islasttimes = 1\n" + + " and (t2.isprocessing = '' or t2.isprocessing is null)\n" + + " and t2.requestid = "+requestid+ " and t2.userid = "+user.getUID(); + rs.executeQuery(sql); + boolean hasData = true; + if (rs.next()){ + hasData = false; + JSONArray list = new JSONArray(); + JSONObject requestObject2 = new JSONObject(); + requestObject2.putAll(requestObject); + + //归档节点抄送 + String email = Util.null2String(rs.getString("email")); + requestObject2.put("nodeName",rs.getString("nodename")); + requestObject2.put("nodeId",rs.getString("nodeid")); + requestObject2.put("taskCode",rs.getString("requestid")+"_cs_"+rs.getString("userid")); + + + String creator = rs.getString("loginid"); + if("sysadmin".equals(creator)){ + creator = "Admin"; + } + taskObject.put("objectAction","0"); + taskObject.put("objectType","0"); + taskObject.put("objectCode",creator); + taskObject.put("objectId",rs.getString("staffid")); + taskObject.put("operatorCode",creator); + list.add(taskObject); + + //归档节点抄送 + + requestObject2.put("messageTitle",getShortMessageTitle(requestname)); + requestObject2.put("messageContent", requestname); + requestObject2.put("terminal", "1"); + requestObject2.put("taskType", "1"); + requestObject2.put("actionType", "2"); + + requestObject2.put("taskObjectList",list); + + String auth = username + ":" + passwd; + + bb.writeLog("SendPortalToReadUtil--requestObject:" + requestObject2.toJSONString()); + msgdata = httpRequestUtil.doPostByAuth(Constants.portal_todourl, requestObject2.toJSONString(), auth); + bb.writeLog("SendPortalToReadUtil-msgdata:" + msgdata); + if (!"".equals(msgdata)) { + JSONObject msgObject = JSONObject.parseObject(msgdata); + //{"resultCode":"1","resultMsg":"No Result"} + if (msgObject.containsKey("resultCode")) { + String resultCode = msgObject.getString("resultCode"); + if ("0".equals(resultCode)) { + Matcher matcher = regex.matcher(email); + if (matcher.matches()) { + emailArray += StringUtils.isEmpty(emailArray) ? email : "," + email; + } + + bb.writeLog("emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname,rs.getString("lastname"),processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + //sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,""); + + }else if ("TODO-FAIL-002".equals(resultCode)){ + //The task does not exist.任务不存在,则新增 + SendPortalToReadUtil sendPortalToReadUtil = new SendPortalToReadUtil(); + sendPortalToReadUtil.sendToReadDataByCreateNode(requestid,user,portal_todourl,bpm_app_workflowurl,username,passwd,bpm_workflowurl,center,bpm_app_requesturl); + + }else{ + + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeId,rs.getString("nodename"),rs.getString("userid"),requestObject2.toJSONString(),resultCode,resultmsg); + + } + } + } + } + } catch (Exception e) { e.printStackTrace(); } diff --git a/src/com/customization/dito/sendtodo/SendRemarkOperateTodoCmd.java b/src/com/customization/dito/sendtodo/SendRemarkOperateTodoCmd.java index 4bd7ad6b..47e335cb 100644 --- a/src/com/customization/dito/sendtodo/SendRemarkOperateTodoCmd.java +++ b/src/com/customization/dito/sendtodo/SendRemarkOperateTodoCmd.java @@ -332,7 +332,8 @@ public class SendRemarkOperateTodoCmd extends AbstractCommandProxy userIds, String nodeid, MessageType messageType, MsgNoticeType msgNoticeType,User user) { + List requestMsgEntity = requestFlowMsg(requestid, userIds, nodeid, requestid + "", messageType, msgNoticeType, true); + //发送消息提醒 + new MsgPushUtil().pushMsg(requestMsgEntity); + //先判断是否开启了流程邮件提醒功能,如果开启了则发送邮件提醒 + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery("select a.isemailremind,a.id from workflow_base a left join workflow_requestbase b on b.workflowid = a.id where b.requestid = ?",requestid); + if(recordSet.next()) { + if("1".equals(recordSet.getString("isemailremind"))){ + int workflowid = recordSet.getInt("id"); + String src = "submit"; + RequestRemindBiz requestRemindBiz = new RequestRemindBiz(user,requestid,workflowid,src); + requestRemindBiz.doRemind(requestid,user.getUID(),workflowid,src,"0","1"); + } + } + } + + public static List requestFlowMsg(int requestId, List userIds, String current_node, String targetid, MessageType messageType, MsgNoticeType msgNoticeType,boolean isRejectCC) { + + List innerMsg = new ArrayList<>(); + try { + MsgEntity baseEntity = getBaseInfo(Util.null2String(requestId)); + if (baseEntity == null) return null; + //MessageType.WF_COPY WF_ALREADY_TIMEOUT + //MessageType.CC OVERED_TIME + baseEntity.setMsgType(messageType); + baseEntity.setNoticeType(msgNoticeType); + //流程流转提醒消息 + baseEntity.addAllUserId(userIds); + baseEntity.setDetailTitleParams("current_node", current_node); //当前节点 + baseEntity.setDetailId(targetid); + innerMsg.add(baseEntity); + } catch (Exception e) { + e.printStackTrace(); + } + return innerMsg; + } + + private static MsgEntity getBaseInfo(String requestId) { + MsgEntity msgEntity = null; + //查询流程基本信息 + RecordSet rs = new RecordSet(); + rs.executeQuery("select requestname,requestnamenew,workflowid,creater,createdate,createtime from workflow_requestbase where requestid = ? and (deleted = 0 or deleted is null)", requestId); + if (rs.next()) { + msgEntity = new MsgEntity(); + String detailName = Util.null2String(rs.getString("requestname")); + String detailTitle = Util.null2String(rs.getString("requestnamenew")); + String workflowId = Util.null2String(rs.getString("workflowid")); + String creator = Util.null2String(rs.getString("creater")); + String createDate = Util.null2String(rs.getString("createdate")); + String createTime = Util.null2String(rs.getString("createtime")); + + msgEntity.setDetailId(requestId); + msgEntity.setDetailName(detailName); + msgEntity.setDetailTitle(detailTitle); + msgEntity.setDetailBaseId(workflowId); + msgEntity.setCreator(creator); + msgEntity.setCreateDate(createDate); + msgEntity.setCreateTime(createTime); + + rs.executeQuery("select wfb.workflowname,wft.id,wft.typename from workflow_base wfb,workflow_type wft where wfb.id = ? and wfb.workflowtype = wft.id", workflowId); + if (rs.next()) { + msgEntity.setDetailBaseName(Util.null2String(rs.getString("workflowname"))); + msgEntity.setDetailTypeId(Util.null2String(rs.getString("id"))); + msgEntity.setDetailTypeName(Util.null2String(rs.getString("typename"))); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + msgEntity.setOperaterDate(sdf.format(new Date())); + } + + return msgEntity; + } + + public static void insert(String requestid, List addUsers, String nodeid, String isremark, User user) { + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); + Date date = new Date(); + String receivedate = simpleDateFormat.format(date); + String receivetime = simpleDateFormat1.format(date); + + int showOrder = 0; + RecordSet rs = new RecordSet(); + RecordSet rs3 = new RecordSet(); + rs.executeQuery("select requestid,userid,groupid,workflowid,workflowtype,usertype,nodeid,agentorbyagentid,agenttype,showorder,receivedate,receivetime," + + "viewtype,iscomplete,islasttimes,groupdetailid,needwfback,isremark,preisremark,multiTakLevel " + + "from workflow_currentoperator where requestid=? and nodeid=? order by groupid desc", requestid, nodeid); + if (rs.next()) { + int groupid = Util.getIntValue(rs.getString("groupid")); + ArrayList lists = new ArrayList<>(); + for (String addUser : addUsers) { + groupid++; + String userIdTemp = addUser; + String agentorbyagentid = "-1"; + String agenttype = "0"; + showOrder = rs.getInt("showorder") + 1; + ArrayList list = new ArrayList(); + list.add(rs.getString("requestid")); + list.add(userIdTemp); + list.add(groupid); + list.add(rs.getString("workflowid")); + list.add(rs.getString("workflowtype")); + list.add(0); + list.add(rs.getString("nodeid")); + list.add(agentorbyagentid); + list.add(agenttype); + list.add(showOrder); + list.add(receivedate); + list.add(receivetime); + list.add(0); + list.add(0); + list.add(1); + list.add(0); + list.add(rs.getString("needwfback")); + list.add(isremark); + list.add(isremark); +// list.add(takid); +// list.add(2); +// list.add(rs.getString("multiTakLevel")); + + lists.add(list); + rs3.executeUpdate("update workflow_currentoperator set islasttimes = 0 where requestid = ? and userid = ?", requestid, userIdTemp); + } + + RecordSet rs2 = new RecordSet(); + boolean b = rs2.executeBatchSql("INSERT into workflow_currentoperator(requestid,userid,groupid,workflowid,workflowtype,usertype,nodeid,agentorbyagentid,agenttype,showorder,receivedate,receivetime,viewtype,iscomplete,islasttimes,groupdetailid,needwfback,isremark,preisremark) " + + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", lists); + if (b) { + //发送消息给抄送人 + sendMessage(Util.getIntValue(requestid), addUsers, nodeid, MessageType.WF_COPY, MsgNoticeType.CC,user); + } + } + } +} diff --git a/src/com/engine/dito/reqremark/cmd/AtRequestRemarkCmd.java b/src/com/engine/dito/reqremark/cmd/AtRequestRemarkCmd.java new file mode 100644 index 00000000..0c6bdb0f --- /dev/null +++ b/src/com/engine/dito/reqremark/cmd/AtRequestRemarkCmd.java @@ -0,0 +1,194 @@ +package com.engine.dito.reqremark.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.customization.dito.sendtodo.HttpRequestUtil; +import com.customization.dito.sendtodo.SendPortalErrorUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.dito.comInfo.PropBean; + +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/9/28 + * @Version 1.0 + * @Description + */ +public class AtRequestRemarkCmd extends AbstractCommonCommand> { + + @Override + public BizLogContext getLogContext() { + return null; + } + + public AtRequestRemarkCmd(Map params, User user) { + this.params = params; + this.user = user; + } + + @Override + public Map execute(CommandContext commandContext) { + Map map = new HashMap(); + int userid = user.getUID(); + BaseBean bb = new BaseBean(); + String requestid = Util.null2String(params.get("requestid")); + String nodeid = Util.null2String(params.get("nodeid")); + + String resultCode = completePortalReadData(requestid,nodeid,userid+""); + map.put("resultcode",resultCode); + return map; + } + + /*** + * + * @param requestid + * @param nodeid + * @param userid + */ + public String completePortalReadData(String requestid, String nodeid,String userid){ + + String resultCode = "" ; + HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); + SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); + + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + + String actionType = "3" ; + String terminal = "1" ; + String taskType = "1"; //0 – 待办 1 –待阅 + String objectAction = "0" ; + String objectType = "0"; + String objectId = "" ; + + JSONObject requestObject = new JSONObject(); + try { + + String workcode = ""; + String sql = " select * from (select id, lastname,loginid from hrmresource where status = 1 union all select id, lastname,loginid from hrmresourcemanager ) w where w.id = '" + userid + "'"; + rs.executeQuery(sql); + while (rs.next()) { + workcode = Util.null2String(rs.getString("loginid")); + } + + 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(StringUtils.isNotEmpty(mobileJumpUrl)){ + urlDing += "&returnUrl="+ URLEncoder.encode(mobileJumpUrl,"UTF-8"); + urlApp += "&returnUrl="+URLEncoder.encode(mobileJumpUrl,"UTF-8"); + } + + + String requestname = ""; + String workflowname = "" ; + + sql = " select t1.requestname,t3.workflowname\n" + + " from workflow_requestbase t1\n" + + " inner join workflow_base t3 on t1.workflowid = t3.id\n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + rs.execute(sql); + if (rs.next()) { + workflowname = Util.null2String(rs.getString("workflowname")) ; + requestname = Util.null2String(rs.getString("requestname")) ; + } + + + String createdate = TimeUtil.getCurrentDateString(); + String createtime = TimeUtil.getCurrentTimeString(); + String nodename = getNodeName(nodeid); + + requestObject.put("center",center); + requestObject.put("title",requestname); + requestObject.put("creator",workcode); + requestObject.put("taskCode", requestid+"_at_"+userid); + requestObject.put("nodeId",nodeid); + requestObject.put("taskType",taskType); + requestObject.put("actionType",actionType); + requestObject.put("createDate",createdate+" "+createtime); + requestObject.put("messageTitle",requestname); + requestObject.put("messageContent",requestname); + requestObject.put("terminal",terminal); + requestObject.put("urlPc",urlPc); + requestObject.put("urlApp",urlApp); + requestObject.put("urlDing",urlDing); + requestObject.put("nodeName",getNodeName(nodeid)); + requestObject.put("ticketType",workflowname); + + + JSONArray taskObjectList = new JSONArray(); + JSONObject taskObject = new JSONObject(); + + String objectCode = workcode ; + String operatorCode = workcode ; + taskObject.put("objectAction",objectAction); + taskObject.put("objectType",objectType); + taskObject.put("objectCode",objectCode); + taskObject.put("objectId",objectId); + taskObject.put("operatorCode",operatorCode); + taskObjectList.add(taskObject); + + requestObject.put("taskObjectList",taskObjectList); + String auth = username + ":" + passwd; + String msgdata = httpRequestUtil.doPostByAuth(portal_todourl,requestObject.toJSONString(),auth); + bb.writeLog("msgdata:"+msgdata); + if(StringUtils.isNotEmpty(msgdata)){ + JSONObject msgObject = JSONObject.parseObject(msgdata); + //{"resultCode":"1","resultMsg":"No Result"} + if(msgObject.containsKey("resultCode")){ + resultCode = msgObject.getString("resultCode"); + if(!"0".equals(resultCode)){ + String resultmsg = msgObject.getString("resultMsg"); + sendPortalErrorUtil.doRecordPortalErrorInfo(requestid,nodeid,nodename,userid,requestObject.toJSONString(),resultCode,resultmsg); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return resultCode; + } + + /*** + * + * @param id + * @return + */ + private String getNodeName(String id){ + RecordSet rs = new RecordSet(); + String name = ""; + rs.executeQuery(" select nodename from workflow_nodebase where id = ?",id); + while (rs.next()){ + name = Util.null2String(rs.getString("nodename")); + } + return name; + } + + +} diff --git a/src/com/engine/dito/reqremark/service/AtRequestRemarkService.java b/src/com/engine/dito/reqremark/service/AtRequestRemarkService.java new file mode 100644 index 00000000..9600bfb2 --- /dev/null +++ b/src/com/engine/dito/reqremark/service/AtRequestRemarkService.java @@ -0,0 +1,18 @@ +package com.engine.dito.reqremark.service; + +import weaver.hrm.User; + +import java.util.Map; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/9/28 + * @Version 1.0 + * @Description + */ +public interface AtRequestRemarkService { + + Map AtRequestRemarkSubmit(Map datas, User user); + +} diff --git a/src/com/engine/dito/reqremark/service/impl/AtRequestRemarkServiceImpl.java b/src/com/engine/dito/reqremark/service/impl/AtRequestRemarkServiceImpl.java new file mode 100644 index 00000000..e80203a6 --- /dev/null +++ b/src/com/engine/dito/reqremark/service/impl/AtRequestRemarkServiceImpl.java @@ -0,0 +1,24 @@ +package com.engine.dito.reqremark.service.impl; + +import com.engine.core.impl.Service; +import com.engine.dito.reqremark.cmd.AtRequestRemarkCmd; +import com.engine.dito.reqremark.service.AtRequestRemarkService; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/9/28 + * @Version 1.0 + * @Description + */ +public class AtRequestRemarkServiceImpl extends Service implements AtRequestRemarkService { + + @Override + public Map AtRequestRemarkSubmit(Map datas, User user) { + return commandExecutor.execute(new AtRequestRemarkCmd(datas,user)); + } + +} diff --git a/src/com/engine/dito/reqremark/web/AtRequestRemarkAction.java b/src/com/engine/dito/reqremark/web/AtRequestRemarkAction.java new file mode 100644 index 00000000..57954071 --- /dev/null +++ b/src/com/engine/dito/reqremark/web/AtRequestRemarkAction.java @@ -0,0 +1,55 @@ +package com.engine.dito.reqremark.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.dito.reqremark.service.AtRequestRemarkService; +import com.engine.dito.reqremark.service.impl.AtRequestRemarkServiceImpl; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @Title + * @Author wangchaofa + * @CreateDate 2023/9/27 + * @Version 1.0 + * @Description + */ +public class AtRequestRemarkAction { + + public AtRequestRemarkService getService(){ + return (AtRequestRemarkService) ServiceUtil.getService(AtRequestRemarkServiceImpl.class); + } + + @GET + @Path("/atreqsubmit") + @Produces({MediaType.TEXT_PLAIN}) + public String AtRequestRemarkSubmit(@Context HttpServletRequest request, @Context HttpServletResponse response) { + BaseBean bb = new BaseBean(); + bb.writeLog("createAuthData"); + Map apidatas = new HashMap(); + try{ + User user = HrmUserVarify.getUser(request, response); + Map dataMap = ParamUtil.request2Map(request); + apidatas.putAll(getService().AtRequestRemarkSubmit(dataMap,user)); + apidatas.put("api_status",true); + }catch (Exception e){ + apidatas.put("api_status",false); + apidatas.put("api_errormsg","exception:"+e.getMessage()); + } + bb.writeLog("apidatas:"+ JSONObject.toJSONString(apidatas)); + return JSONObject.toJSONString(apidatas); + + } +} diff --git a/src/com/engine/workflow/cmd/agent/AddAgentSaveCmd.java b/src/com/engine/workflow/cmd/agent/AddAgentSaveCmd.java new file mode 100644 index 00000000..229e5637 --- /dev/null +++ b/src/com/engine/workflow/cmd/agent/AddAgentSaveCmd.java @@ -0,0 +1,287 @@ +package com.engine.workflow.cmd.agent; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.customization.dito.sendtodo.HttpRequestUtil; +import com.customization.dito.sendtodo.SendMailUtil; +import com.customization.dito.sendtodo.SendPortalErrorUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.biz.AgentBiz; +import com.time.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.dito.comInfo.PropBean; +import weaver.workflow.agent.AgentBean; +import weaver.workflow.agent.AgentManager; + +import javax.servlet.http.HttpServletRequest; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public class AddAgentSaveCmd extends AbstractCommonCommand>{ + + private HttpServletRequest request; + + public AddAgentSaveCmd(HttpServletRequest request, User user){ + this.request = request; + this.user = user; + } + + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap(); + try{ + int usertype = "2".equals(user.getLogintype()) ? 1 : 0; + AgentBean bean = new AgentBean(); + int agentuid = Util.getIntValue(request.getParameter("agentuid"), 0); + int isPendThing = Util.getIntValue(request.getParameter("isPendThing"), 0); + bean.setAgentuid(agentuid); + bean.setBegindate(Util.null2String(request.getParameter("beginDate"))); + bean.setBegintime(Util.null2String(request.getParameter("beginTime"))); + bean.setEnddate(Util.null2String(request.getParameter("endDate"))); + bean.setEndtime(Util.null2String(request.getParameter("endTime"))); + bean.setIscreateagenter(isPendThing); + bean.setIsSysCreateAgenter(bean.getIscreateagenter() == 0 ? "0" : request.getParameter("isSysCreateAgenter")); + bean.setIspendthing(Util.getIntValue(request.getParameter("isPendThing"), 0)); + bean.setIsproxydeal(Util.getIntValue(request.getParameter("isProxyDeal"), 0)); + + AgentManager agentManager = new AgentManager(user); + String agentrange = Util.null2String(request.getParameter("agentrange")); + String rangetype = Util.null2String(request.getParameter("rangetype")); + String workflowids = agentManager.getAgentWorkflowRange(agentrange, rangetype, usertype); + //重复处理方式 1、从新保存的代理设置中去除重复设置内容 2、以新保存的代理设置替换已有重复的代理设置 + int overlapMethod = Util.getIntValue(request.getParameter("overlapMethod"), 0); + String agentresult = ""; + List bagentuidRange = AgentBiz.getBagentuidRange(request, user); + for(int bagentuid : bagentuidRange){ + bean.setBagentuid(bagentuid); + + //当开启了代理原有待办时,对接门户,删除被代理人的待办,增加代理人的待办,部分流转 1 + if(isPendThing == 1){ + DealPortalTodoAndDone(agentuid,bagentuid,workflowids); + } + agentresult = agentManager.batchAddAgent(workflowids, bean, overlapMethod); + if(!"success".equals(agentresult)) { + break; + } + } + apidatas.put("agentresult", agentresult); + }catch(Exception e){ + apidatas.put("api_status", false); + apidatas.put("api_errormsg", e.getMessage()); + } + return apidatas; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + /** + * 先查询出被代理人的待办,然后一一推送给门户,代理人待办增加,被代理人待办删除 + * @param agenterid 代理人 + * @param beagenterid 被代理人 + * @param workflowids 指定流程id + */ + public void DealPortalTodoAndDone(int agenterid, int beagenterid, String workflowids){ + RecordSet rs = new RecordSet(); + JSONArray taskObjectList = new JSONArray(); + String EMAIL_REGEX_DEFAULT = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; + Pattern regex = Pattern.compile(EMAIL_REGEX_DEFAULT); + JSONObject taskObject = new JSONObject(); + rs.writeLog("==================== AddAgentSaveCmd DealPortalTodoAndDone ==================="); + + try { + + taskObject.put("objectAction", "0"); + taskObject.put("objectType", "0"); + taskObject.put("objectCode", new ResourceComInfo().getWorkcode(String.valueOf(agenterid))); + taskObject.put("objectId", getStaffId(agenterid)); + taskObject.put("operatorCode", new ResourceComInfo().getWorkcode(String.valueOf(agenterid))); + taskObjectList.add(taskObject); + + HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); + SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); + SendMailUtil sendMailUtil = new SendMailUtil(); + + String scopeid = "-1"; + String scope = "HrmCustomFieldByInfoType" ; + + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); + + String sql = " select distinct t1.requestid,t1.requestname,t1.createdate,h1.lastname as creatorname,t2.receivedate,t2.receivetime " + + " from workflow_base t " + + " left join workflow_requestbase t1 on t.id=t1.workflowid " + + " left join workflow_currentoperator t2 on t1.requestid = t2.requestid " + + " left join hrmresource h1 on h1.id = t1.creater "+ + " where t2.usertype=0 and t2.userid in (" + beagenterid +") and t.id in (" + workflowids +") "+ + " and ((t2.isremark =0 and (t2.takisremark is null or t2.takisremark ='0')) or t2.isremark in('1','5','9','7','8','9','11') ) " + + " and t2.islasttimes=1 " + + " and (t.isvalid=3 or t.isvalid=1) "; + + String zhjkbs = "com.engine.workflow.cmd.agent.AddAgentSaveCmd.DealPortalTodoAndDone"; + String actionType = "1"; + String terminal = "1"; + String taskType = "0"; + rs.executeQuery(sql); + while (rs.next()) { + String requestid = Util.null2String(rs.getString("requestid")); + + String workflowname = ""; + String nodeId = ""; + String nodeName = ""; + JSONObject requestObject = new JSONObject(); + 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 (StringUtils.isNotEmpty(mobileJumpUrl)) { + urlDing += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + urlApp += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + } + + String msgdata = ""; + String requestname = ""; + String lastname = ""; + String userids = ""; + String loginid = ""; + String emailArray = ""; + + sql = " select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid " + + " 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 " + + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + rs.writeLog("AddAgentSaveCmd DealPortalTodoAndDone -- sql:" + 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") + user.getUID()); + nodeName = Util.null2String(rs.getString("nodeName")); + lastname = Util.null2String(rs.getString("lastname")); + loginid = Util.null2String(rs.getString("loginid")); + } + requestObject.put("center", center); + requestObject.put("title", requestname); + requestObject.put("creator", loginid); + 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); + + JSONObject taskObject1 = new JSONObject(); + taskObject1.put("objectAction", "1"); + taskObject1.put("objectType", "0"); + taskObject1.put("objectCode", new ResourceComInfo().getWorkcode(String.valueOf(beagenterid))); + taskObject1.put("objectId", getStaffId(beagenterid)); + taskObject1.put("operatorCode", new ResourceComInfo().getWorkcode(String.valueOf(beagenterid))); + taskObjectList.add(taskObject1); + + if (taskObjectList.size() > 0) { + requestObject.put("taskObjectList", taskObjectList); + } else { + requestObject.put("actionType", "3"); + } + String auth = username + ":" + passwd; + + rs.writeLog("================== AddAgentSaveCmd DealPortalTodoAndDone ======================== "+requestObject.toJSONString()); + + 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)) { + + rs.writeLog("SendPortalForwardCmd emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname, lastname, processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + + sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + 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(); + rs.writeLog(e); + } + } + + public String getShortMessageTitle(String messageTitle) { + if (messageTitle.length() > 20) { + messageTitle = messageTitle.substring(0, 17) + "..."; + } + return messageTitle; + } + + /*** + * + * @param requestname + * @param operator + * @param operatorTime + * @return + */ + public Map getEmailTemplate(String requestname,String operator,String operatorTime){ + Map dataMap = new HashMap(); + String notificationSubject = "You have a new To-Read - <"+requestname+"> "; + String notificationContent = operator + " created this task on "+operatorTime+"\n" + + " Please handle it in time."; + dataMap.put("notificationSubject",notificationSubject); + dataMap.put("notificationContent",notificationContent); + return dataMap; + } + + public int getStaffId(int userid){ + int result = -1; + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + RecordSet rs = new RecordSet(); + rs.executeQuery("select "+ cus_staff + " from cus_fielddata where scopeid=-1 and scope = 'HrmCustomFieldByInfoType' and id=?",userid); + rs.next(); + result = Util.getIntValue(rs.getString("")); + return result; + } + + +} diff --git a/src/com/engine/workflow/cmd/agent/TakeBackAgentCmd.java b/src/com/engine/workflow/cmd/agent/TakeBackAgentCmd.java new file mode 100644 index 00000000..0dea3ace --- /dev/null +++ b/src/com/engine/workflow/cmd/agent/TakeBackAgentCmd.java @@ -0,0 +1,301 @@ +package com.engine.workflow.cmd.agent; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.workflow.util.ServiceUtil; +import com.customization.dito.sendtodo.HttpRequestUtil; +import com.customization.dito.sendtodo.SendMailUtil; +import com.customization.dito.sendtodo.SendPortalErrorUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.biz.AgentBiz; +import com.time.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.dito.comInfo.PropBean; +import weaver.workflow.agent.AgentManager; + +import javax.servlet.http.HttpServletRequest; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public class TakeBackAgentCmd extends AbstractCommonCommand>{ + + private HttpServletRequest request; + + public TakeBackAgentCmd(HttpServletRequest request, User user){ + this.request = request; + this.user = user; + } + + public Map execute(CommandContext commandContext) { + boolean flag = true; + try { + AgentManager agentManager = new AgentManager(user); + String symbol = Util.null2String(request.getParameter("symbol")); + boolean needBackRunning = "1".equals(Util.null2String(request.getParameter("backRunning"))); //收回流转中数据 + if ("it".equals(symbol) || "mt".equals(symbol)) { //单个、批量收回代理 + String agentids = Util.null2String(request.getParameter("agentid")); + agentids = this.getAuthByUser(agentids); + List range = new ArrayList(); + for(String keyid : agentids.split(",")){ + if(!"".equals(keyid)) + range.add(keyid); + } + agentManager.takeBackAgent(range, needBackRunning); + }else if ("pt".equals(symbol)) { // 全部收回逻辑 + int agentid = Util.getIntValue(request.getParameter("agentid")); + int bagentuid = Util.getIntValue(request.getParameter("bagentuid")); + String agentuid = agentManager.getAgentuid(agentid, bagentuid); + if(Util.getIntValue(agentuid) > 0){ + List range = agentManager.getAgentRangeByUser(Util.getIntValue(agentuid), bagentuid); + agentManager.takeBackAgent(range, needBackRunning); + } + } + } catch (Exception e) { + flag = false; + e.printStackTrace(); + } + Map apidatas = new HashMap(); + apidatas.put("flag", flag); + return apidatas; + } + + private String getAuthByUser(String agentids){ + boolean haveAgentAllRight = AgentBiz.judgeHaveAgentAllRight(user); + if(haveAgentAllRight){ + return agentids; + } + if(agentids.startsWith(",")){ + agentids = agentids.substring(1); + } + if(agentids.endsWith(",")){ + agentids = agentids.substring(0,agentids.length()-1); + } + String allUserid = ServiceUtil.getAllUserid(user); //所有用户id,包括主从账号 + String agentids_temp = ""; + RecordSet rs = new RecordSet(); + /* + 原有代码:rs.executeQuery("select agentid from workflow_agent where beagenterid in ("+allUserid+") and agentid IN("+agentids+")"); + */ + String sql_in = Util.getSubINClause(agentids, "agentid", "IN"); + String sql = "select agentid from workflow_agent where beagenterid in ("+allUserid+") and " + sql_in; + rs.executeQuery(sql); + while(rs.next()){ + agentids_temp += "," + rs.getString(1); + } + return "".equals(agentids_temp)?agentids_temp:agentids_temp.substring(1); + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + public void SendPortalTodoAndDone(List range){ + int agenterid = -1; + int beagenterid = -1; + String workflowids = ""; + for(String agentid : range){ + + } + RecordSet rs = new RecordSet(); + JSONArray taskObjectList = new JSONArray(); + String EMAIL_REGEX_DEFAULT = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; + Pattern regex = Pattern.compile(EMAIL_REGEX_DEFAULT); + JSONObject taskObject = new JSONObject(); + rs.writeLog("==================== AddAgentSaveCmd DealPortalTodoAndDone ==================="); + + try { + + taskObject.put("objectAction", "0"); + taskObject.put("objectType", "0"); + taskObject.put("objectCode", new ResourceComInfo().getWorkcode(String.valueOf(agenterid))); + taskObject.put("objectId", getStaffId(agenterid)); + taskObject.put("operatorCode", new ResourceComInfo().getWorkcode(String.valueOf(agenterid))); + taskObjectList.add(taskObject); + + HttpRequestUtil httpRequestUtil = new HttpRequestUtil(); + SendPortalErrorUtil sendPortalErrorUtil = new SendPortalErrorUtil(); + SendMailUtil sendMailUtil = new SendMailUtil(); + + String scopeid = "-1"; + String scope = "HrmCustomFieldByInfoType" ; + + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + String mobileJumpUrl = PropBean.getUfPropValue("mobileJumpUrl"); + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + String processTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss"); + + String sql = " select distinct t1.requestid,t1.requestname,t1.createdate,h1.lastname as creatorname,t2.receivedate,t2.receivetime " + + " from workflow_base t " + + " left join workflow_requestbase t1 on t.id=t1.workflowid " + + " left join workflow_currentoperator t2 on t1.requestid = t2.requestid " + + " left join hrmresource h1 on h1.id = t1.creater "+ + " where t2.usertype=0 and t2.userid in (" + beagenterid +") and t.id in (" + workflowids +") "+ + " and ((t2.isremark =0 and (t2.takisremark is null or t2.takisremark ='0')) or t2.isremark in('1','5','9','7','8','9','11') ) " + + " and t2.islasttimes=1 " + + " and (t.isvalid=3 or t.isvalid=1) "; + + String zhjkbs = "com.engine.workflow.cmd.agent.AddAgentSaveCmd.DealPortalTodoAndDone"; + String actionType = "1"; + String terminal = "1"; + String taskType = "0"; + rs.executeQuery(sql); + while (rs.next()) { + String requestid = Util.null2String(rs.getString("requestid")); + + String workflowname = ""; + String nodeId = ""; + String nodeName = ""; + JSONObject requestObject = new JSONObject(); + 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 (StringUtils.isNotEmpty(mobileJumpUrl)) { + urlDing += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + urlApp += "&returnUrl=" + URLEncoder.encode(mobileJumpUrl, "UTF-8"); + } + + String msgdata = ""; + String requestname = ""; + String lastname = ""; + String userids = ""; + String loginid = ""; + String emailArray = ""; + + sql = " select t1.requestname,t1.currentnodeid as nodeid,d1.nodename,t3.workflowname,h2.lastname,h2.loginid " + + " 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 " + + " left join (select id,lastname,loginid from hrmresource where status = 1 union all select id,lastname,loginid from hrmresourcemanager ) h2 on h2.id = t1.creater \n" + + " where (t1.deleted <> 1 or t1.deleted is null or t1.deleted = '')\n" + + " and t1.requestid = " + requestid; + + rs.writeLog("AddAgentSaveCmd DealPortalTodoAndDone -- sql:" + 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") + user.getUID()); + nodeName = Util.null2String(rs.getString("nodeName")); + lastname = Util.null2String(rs.getString("lastname")); + loginid = Util.null2String(rs.getString("loginid")); + } + requestObject.put("center", center); + requestObject.put("title", requestname); + requestObject.put("creator", loginid); + 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); + + JSONObject taskObject1 = new JSONObject(); + taskObject1.put("objectAction", "1"); + taskObject1.put("objectType", "0"); + taskObject1.put("objectCode", new ResourceComInfo().getWorkcode(String.valueOf(beagenterid))); + taskObject1.put("objectId", getStaffId(beagenterid)); + taskObject1.put("operatorCode", new ResourceComInfo().getWorkcode(String.valueOf(beagenterid))); + taskObjectList.add(taskObject1); + + if (taskObjectList.size() > 0) { + requestObject.put("taskObjectList", taskObjectList); + } else { + requestObject.put("actionType", "3"); + } + String auth = username + ":" + passwd; + + rs.writeLog("================== AddAgentSaveCmd DealPortalTodoAndDone ======================== "+requestObject.toJSONString()); + + 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)) { + + rs.writeLog("SendPortalForwardCmd emailArray:" + emailArray); + if (StringUtils.isNotEmpty(emailArray)) { + + Map templateMap = getEmailTemplate(requestname, lastname, processTime); + String notificationSubject = templateMap.get("notificationSubject"); + String notificationContent = templateMap.get("notificationContent"); + + sendMailUtil.sendMail(requestid, emailArray, notificationSubject, notificationContent); + } + + 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(); + rs.writeLog(e); + } + } + + public String getShortMessageTitle(String messageTitle) { + if (messageTitle.length() > 20) { + messageTitle = messageTitle.substring(0, 17) + "..."; + } + return messageTitle; + } + + /*** + * + * @param requestname + * @param operator + * @param operatorTime + * @return + */ + public Map getEmailTemplate(String requestname,String operator,String operatorTime){ + Map dataMap = new HashMap(); + String notificationSubject = "You have a new To-Read - <"+requestname+"> "; + String notificationContent = operator + " created this task on "+operatorTime+"\n" + + " Please handle it in time."; + dataMap.put("notificationSubject",notificationSubject); + dataMap.put("notificationContent",notificationContent); + return dataMap; + } + + public int getStaffId(int userid){ + int result = -1; + String cus_staff = PropBean.getUfPropValue("cus_staff") ; + RecordSet rs = new RecordSet(); + rs.executeQuery("select "+ cus_staff + " from cus_fielddata where scopeid=-1 and scope = 'HrmCustomFieldByInfoType' and id=?",userid); + rs.next(); + result = Util.getIntValue(rs.getString("")); + return result; + } + +} diff --git a/src/com/engine/workflow/cmd/requestForm/ForwardSubmitCmd.java b/src/com/engine/workflow/cmd/requestForm/ForwardSubmitCmd.java new file mode 100644 index 00000000..ac61055f --- /dev/null +++ b/src/com/engine/workflow/cmd/requestForm/ForwardSubmitCmd.java @@ -0,0 +1,1839 @@ +package com.engine.workflow.cmd.requestForm; + +import com.api.workflow.service.RequestAuthenticationService; +import com.api.workflow.util.ServiceUtil; +import com.cloudstore.dev.api.util.Util_TableMap; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.AttrSignatureUtil; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.biz.SecondAuthBiz; +import com.engine.workflow.biz.WorkflowBaseBiz; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.biz.requestForm.RequestRemindBiz; +import com.engine.workflow.biz.requestForm.TakEndBiz; +import com.engine.workflow.biz.requestForm.TakOptionBiz; +import com.engine.workflow.biz.requestSubmit.RequestOperationBiz; +import com.engine.workflow.biz.workflowCore.RequestBaseBiz; +import com.engine.workflow.biz.workflowOvertime.OvertimeBiz; +import com.engine.workflow.constant.RemindTypeEnum; +import com.engine.workflow.constant.SecondAuthType; +import com.engine.workflow.constant.SignSource; +import com.engine.workflow.constant.menu.SystemMenuType; +import com.engine.workflow.constant.requestForm.RequestConstant; +import com.engine.workflow.entity.core.RequestInfoEntity; +import com.engine.workflow.entity.freeNode.FreeNodeEntity; +import com.engine.workflow.service.RequestSecondAuthService; +import com.engine.workflow.service.impl.RequestSecondAuthServiceImpl; +import com.engine.workflow.util.MenuOrderSetUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.BatchRecordSet; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.crm.Maint.CustomerInfoComInfo; +import weaver.docs.docs.DocCheckInOutUtil; +import weaver.file.FileUpload; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.mobile.webservices.workflow.soa.RequestPreProcessing; +import weaver.share.ShareinnerInfo; +import weaver.systeminfo.SystemEnv; +import weaver.workflow.agent.AgentManager; +import weaver.workflow.request.*; +import weaver.workflow.workflow.WfFunctionManageUtil; +import weaver.workflow.workflow.WorkflowAllComInfo; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.*; + +/** + * 转发、转办、意见征询等提交 + * @author jhy Mar 30, 2017 + */ +public class ForwardSubmitCmd extends AbstractCommonCommand>{ + + private HttpServletRequest request; + + private String uuid; + private int wfcurrrid = 0; + + public ForwardSubmitCmd(HttpServletRequest request, User user){ + this.request = request; + this.user = user; + this.uuid = UUID.randomUUID().toString().replaceAll("-", ""); + } + + public HttpServletRequest getRequest() { + return request; + } + + public void setRequest(HttpServletRequest request) { + this.request = request; + } + + public Map execute(CommandContext commandContext) { + + WFLinkInfo wfLinkInfo = new WFLinkInfo(); + WfFunctionManageUtil wfFunctionManageUtil = new WfFunctionManageUtil(); + Map apidatas = new HashMap(); + apidatas.put("success",false); + //需要批量插入的参数列表 + List> insertOperatorParamsList = new ArrayList>(); + List> chuanyueItems = new ArrayList>(); + //保存要插入的人员, 用于更新islasttimes + List insertOperatorIds = new ArrayList(); + int forwardflag = 1; + + + try { + RecordSet recordSet = new RecordSet(); + RecordSet rs = new RecordSet(); + FileUpload fu = new FileUpload(request); + String operate = Util.null2String(fu.getParameter("operate")); + String needwfback = Util.null2String(fu.getParameter("needwfback")); + String requestid = Util.null2String(fu.getParameter("requestid")); + boolean batchForward = "1".equals(Util.null2String(fu.getParameter("batchForward"))); + + String tokenKey = "forward_token_" + requestid +"_"+ user.getUID(); + String tokenValue = Util.null2String(request.getParameter(tokenKey)); + String tokenValueCache = Util_TableMap.getVal(tokenKey); + if(!"".equals(tokenValueCache) && tokenValue.equals(tokenValueCache)){ + apidatas.put("msg", ""+ SystemEnv.getHtmlLabelName(10005579,weaver.general.ThreadVarLanguage.getLang())+""); + return apidatas; + }else{ + Util_TableMap.setVal(tokenKey, tokenValue, 120); + } + recordSet.executeSql("select * from workflow_requestbase where requestid =" + requestid); + int workflowid = -1; + String currnodetype0 = ""; + int currnodeid0 = 0; + String requestname = ""; + if (recordSet.next()) { + workflowid = Util.getIntValue(recordSet.getString("workflowid")); + currnodetype0 = recordSet.getString("currentnodetype"); + currnodeid0 = recordSet.getInt("currentnodeid"); + requestname = recordSet.getString("requestname"); + } + String userid = user.getUID() + ""; + char flag = Util.getSeparator(); + String para = ""; + String usertype = "0";// 被转发人肯定为人力资源,因此类型默认为“0”TD9836 + String remark = Util.null2String(fu.getParameter("remark")); + forwardflag = Util.getIntValue(fu.getParameter("forwardflag")); + String isSubmitSign = Util.null2String(fu.getParameter("isSubmitSign")); + String isChuanyue = Util.null2String(fu.getParameter("isChuanyue")); + String isRemind = Util.null2String(fu.getParameter("isRemind")); + boolean isOpenTakOvertime = Util.null2String(fu.getParameter("isOpenTakOvertime")).equals("1"); + String takOverHours = Util.null2String(fu.getParameter("takOverHours")); + String takOverMins = Util.null2String(fu.getParameter("takOverMins")); + String isShowReplyNotice = Util.null2s(fu.getParameter("isShowReplyNotice"),"0"); + + + int tmpforwardflag = forwardflag; + if (forwardflag != 2 && forwardflag != 3 && forwardflag != 5) { + forwardflag = 1; // 2 征求意见;3 转办 ;1 转发; 5 征询转办 + } + + int agentType = Util.getIntValue(Util.null2String(request.getParameter("agentType"))); + int agentorByAgentId = Util.getIntValue(Util.null2String(request.getParameter("agentorByAgentId"))); + if (agentType == 1 && (forwardflag == 2 || forwardflag == 3 || forwardflag == 5)) {//流程代理出去,本人意见征询或转办,需先收回代理 + AgentManager agentManager = new AgentManager(user); + agentManager.agentBackRequest(agentorByAgentId, user.getUID(), workflowid + "", Util.getIntValue(requestid)); + } + + String chuanyue_isremark = "11"; + + RequestAuthenticationService authenticationService = new RequestAuthenticationService(); + authenticationService.setUser(user); + boolean hasRight = authenticationService.getRequestUserRight(null, Util.getIntValue(requestid)); + + if (hasRight) { + //流程转办时,需验证当前操作者是否还有流程 操作人权限 + if(forwardflag == 3) { + recordSet.executeQuery("select 1 from workflow_currentoperator where isremark in ('0') and requestid = ? and userid = ?", requestid, userid); + if (!recordSet.next()) { + hasRight = false; + } + } + //流程征询转办时,需验证当前操作者是否还有流程 征询转办权限 + if(forwardflag == 5) { + recordSet.executeQuery("select 1 from workflow_currentoperator where isremark in ('1') and takisremark = '2' and requestid = ? and userid = ?", requestid, userid); + if (!recordSet.next()) { + hasRight = false; + } + } + if(forwardflag == 2){ + recordSet.executeQuery("select 1 from workflow_currentoperator where isremark in ('0') and takisremark = '-2' and requestid = ? and userid = ?",requestid,userid); + if(recordSet.next()){ + hasRight = false; + } + } + } + + if (!hasRight) { + apidatas.put("forwardflag", forwardflag); + String msg = SystemEnv.getHtmlLabelName(389521,user.getLanguage()); + String remarkName = getRemarkName(forwardflag, workflowid, currnodeid0); + if (remarkName != null && remarkName.trim().length() > 0) { + if(forwardflag == 2 || forwardflag == 3 || forwardflag == 5){ + //{1}失败,该流程数据已被更改 + msg = SystemEnv.getHtmlLabelName(519122,user.getLanguage()).replace("{1}", remarkName); + } else { + //{1}失败,该流程已被收回 + msg = SystemEnv.getHtmlLabelName(519124,user.getLanguage()).replace("{1}", remarkName); + } + } else { + if(forwardflag == 2){ + msg = SystemEnv.getHtmlLabelName(512880,user.getLanguage()); + }else if(forwardflag == 3){ + msg = SystemEnv.getHtmlLabelName(512881,user.getLanguage()); + } else if (forwardflag == 5) { + msg = SystemEnv.getHtmlLabelName(512879,user.getLanguage()); + } + } + apidatas.put("msg",msg); + apidatas.put("needReload", true); + return apidatas; + } + String signdocids = Util.null2String(fu.getParameter("signdocids")); + String signworkflowids = Util.null2String(fu.getParameter("signworkflowids")); + String clientip = fu.getRemoteAddr(); + int requestLogId = Util.getIntValue(fu.getParameter("workflowRequestLogId"), 0); + String remarkLocation = Util.null2String(fu.getParameter("remarkLocation")); + String logintype = user.getLogintype(); + // if(logintype.equals("2")){ + // usertype="1"; + // } + String operatortype = ""; + + if (logintype.equals("1")) + operatortype = "0"; + if (logintype.equals("2")) + operatortype = "1"; + + Calendar today = Calendar.getInstance(); + String CurrentDate = ""; + String CurrentTime = ""; + try { + rs.executeProc("GetDBDateAndTime", ""); + if (rs.next()) { + CurrentDate = rs.getString("dbdate"); + CurrentTime = rs.getString("dbtime"); + } + } catch (Exception e) { + CurrentDate = Util.add0(today.get(Calendar.YEAR), 4) + "-" + Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-" + Util.add0(today.get(Calendar.DAY_OF_MONTH), 2); + + CurrentTime = Util.add0(today.get(Calendar.HOUR_OF_DAY), 2) + ":" + Util.add0(today.get(Calendar.MINUTE), 2) + ":" + Util.add0(today.get(Calendar.SECOND), 2); + } + + //批量转发默认意见 + if(batchForward && "".equals(remark)) { + String username = ""; + ResourceComInfo rci = null; + CustomerInfoComInfo cic = null; + try { + rci = new ResourceComInfo(); + cic = new CustomerInfoComInfo(); + } catch (Exception e) { + e.printStackTrace(); + } + if ("1".equals(user.getLogintype())) + username = Util.toScreen(rci.getResourcename("" + user.getUID()), user.getLanguage()); + if ("2".equals(user.getLogintype())) + username = Util.toScreen(cic.getCustomerInfoname("" + user.getUID()), user.getLanguage()); + + remark = "\n" + username + " " + CurrentDate + " " + CurrentTime; + } + + //HttpSession session = request.getSession(); + AttrSignatureUtil attrSignatureUtil = new AttrSignatureUtil(user.getUID(), request.getHeader("user-agent")); + String _attributesString = Util.null2String(request.getParameter(RequestConstant.SIGNATURE_ATTRIBUTES_STR)); + String _attributesSignature = Util.null2o(request.getParameter(RequestConstant.SIGNATURE_SECRET_KEY)); + attrSignatureUtil.verifySignature(_attributesString, _attributesSignature); + int currentnodeid = Util.getIntValue((String) attrSignatureUtil.getAttribute("nodeid"), 0); + // 加强性修改转发。 + String nodetype = ""; + if (currentnodeid < 1) { + currentnodeid = ServiceUtil.getCurrentNode(requestid,user,true); + nodetype = wfLinkInfo.getNodeType(currentnodeid); + } + int extendnodeid = FreeNodeBiz.getExtendNodeId(Util.getIntValue(requestid),currentnodeid); + if (workflowid == 0) { + RequestInfoEntity reqEntity = RequestBaseBiz.loadRequestInfo(Util.getIntValue(requestid)); + if (reqEntity != null) { + requestname = reqEntity.getRequestName(); + workflowid = reqEntity.getWorkflowId(); + } + } + WorkflowAllComInfo workflowComInfo = new WorkflowAllComInfo(); + String workflowtype = workflowComInfo.getWorkflowtype(workflowid + ""); + // all remark resource + Set resourceids = new LinkedHashSet(); + Set beAgentUser = new LinkedHashSet(); + ArrayList agenterids = new ArrayList(); + String resourceid = ""; + int i = 0; + + String tmpid = Util.fromScreen(fu.getParameter("field5"), user.getLanguage()); + if (!tmpid.equals("")) { + String[] tmpids = Util.TokenizerString2(tmpid, ","); + for (int m = 0; m < tmpids.length; m++) { + resourceids.add(tmpids[m]); + } + } + + //获取当前请求操作者的代理情况 + //在插入操作者迭代过程中在单独查询 + wfAgentCondition wfAgentCondition = new wfAgentCondition(); + Map operatorAgentInfo = wfAgentCondition.getAgentInfoByResouce( + String.valueOf(workflowid) + , tmpid + , String.valueOf(requestid)); + + + if((forwardflag == 3) && resourceids.contains(user.getUID()+"")){ + //如果只有自己一个人的时候直接返回成功标志,否则直接剔除自己 + Iterator iterator = resourceids.iterator(); + while(iterator.hasNext()){ + String resourceid_temp = Util.null2String(iterator.next()); + String agenterId = Util.null2String(operatorAgentInfo.get(Util.null2String(resourceid_temp))); + if(agenterId.equals("") && resourceid_temp.equals(user.getUID()+"")){//判断是否有代理 + iterator.remove(); + } + } + if(resourceids.size() == 0){ + apidatas.put("success", true); + return apidatas; + } + } + + + Set rightResourceidList = new HashSet(); + rs.execute("select distinct userid from workflow_currentoperator where usertype=0 and requestid=" + requestid); + while (rs.next()) { + int userid_tmp = Util.getIntValue(rs.getString("userid"), 0); + if (resourceids.contains("" + userid_tmp) == false) { + rightResourceidList.add("" + userid_tmp); + } + } + //wfcurrrid = Util.getIntValue((String) attrSignatureUtil.getAttribute("wfcurrrid"), 0); + Map authInfo = authenticationService.getAuthInfo(); + wfcurrrid = (Integer) authInfo.get("wfcurrrid"); + String isremark = Util.null2s(Util.null2String(authInfo.get("isremarkForRM")),"0"); + if (wfcurrrid == 0) { + recordSet.executeSql("select isremark,isreminded,preisremark,id,groupdetailid,nodeid,(CASE WHEN isremark=9 THEN 0.99 WHEN isremark=11 THEN 0.98 WHEN (isremark=1 and takisremark=2) THEN 0.9 WHEN (preisremark=1 and isremark=2) THEN 1.9 WHEN (isremark=0 and takisremark = -2 and isInMultiTak = 1) THEN 2 ELSE isremark END) orderisremark from workflow_currentoperator where requestid=" + requestid + " and userid=" + userid + + " and usertype=" + usertype + " and islasttimes = 1 order by orderisremark,id"); + boolean istoManagePage = false; // add by xhheng @20041217 for TD + // 1438 + while (recordSet.next()) { + isremark = Util.null2String(recordSet.getString("isremark")); + wfcurrrid = Util.getIntValue(recordSet.getString("id")); + int tmpnodeid = Util.getIntValue(recordSet.getString("nodeid")); + // modify by mackjoe at 2005-09-29 td1772 + // 转发特殊处理,转发信息本人未处理一直需要处理即使流程已归档 + if (isremark.equals("1") || isremark.equals("5") || isremark.equals("7") || isremark.equals("9") || (isremark.equals("0") && !nodetype.equals("3"))) { + // modify by xhheng @20041217 for TD 1438 + break; + } + if (isremark.equals("8")) { + break; + } + } + } + + //检查当前记录isremark,防止结束征询后还能意见征询 + if (forwardflag == 2 || forwardflag == 5) { + rs.executeQuery("select 1 from workflow_currentoperator where (isremark = '1' or isremark = '0') and id = ?", wfcurrrid); + if (!rs.next()) { + hasRight = false; + } + if (!hasRight) { + apidatas.put("forwardflag", forwardflag); + String msg = SystemEnv.getHtmlLabelName(forwardflag == 2 ? 512880 : 512879,user.getLanguage()); + String remarkName = getRemarkName(forwardflag, workflowid, currnodeid0); + if (remarkName != null && remarkName.trim().length() > 0) { + //{1}失败,该流程数据已被更改 + msg = SystemEnv.getHtmlLabelName(519122,user.getLanguage()).replace("{1}", remarkName); + } + apidatas.put("msg",msg); + apidatas.put("needReload", true); + return apidatas; + } + } + /* ---- xwj for td2104 on 20050802 begin----- */ + + // forwardflag : 2 征求意见;3 转办 ;1 转发 + int rolmIsRemark = 2; + String src = "forward"; + if (forwardflag == 2 || forwardflag == 3) { + rolmIsRemark = 0; + if (forwardflag == 2) { + src = "take"; + } else { + src = "trans"; + } + } + if(tmpforwardflag == 4){ + src = "chuanyue"; + } + if (forwardflag == 5) { + src = "takForward"; + } + + + int multiTakLevel = 0; + TakOptionBiz takOptionBiz = new TakOptionBiz(); + //计算多级意见征询层级 + if (forwardflag == 2) { + multiTakLevel = takOptionBiz.getMultiTakLevel(wfcurrrid); + + //多级意见征询,检查被征询人是否满足要求 + if (multiTakLevel > 0) { + List canNotTakUserName = takOptionBiz.getCanNotTakUserName(requestid, resourceids, forwardflag); + //存在不可征询的人员,返回信息给前台 + if (canNotTakUserName.size() > 0) { + apidatas.put("msg", takOptionBiz.getCheckMsg(canNotTakUserName, user, forwardflag, workflowid, currentnodeid)); + Util_TableMap.setVal(tokenKey, "", 120); + return apidatas; + } + } + } + if (forwardflag == 5) { + List canNotTakUserName = takOptionBiz.getCanNotTakUserName(requestid, resourceids, forwardflag); + //存在不可征询的人员,返回信息给前台 + if (canNotTakUserName.size() > 0) { + apidatas.put("msg", takOptionBiz.getCheckMsg(canNotTakUserName, user, forwardflag, workflowid, currentnodeid)); + Util_TableMap.setVal(tokenKey, "", 120); + return apidatas; + } + } + + + /***==========数据保护============*/ + recordSet.executeQuery("select isbill,formid from workflow_base where id = ? ", workflowid); + int isbill4auth = 0; + int formid4auth = 0; + if (recordSet.next()) { + isbill4auth = recordSet.getInt("isbill"); + formid4auth = recordSet.getInt("formid"); + } + + boolean isNeedUpdate = false; + String uuidStr = ""; + RequestSecondAuthService requestSecondAuthService = com.engine.common.util.ServiceUtil.getService(RequestSecondAuthServiceImpl.class, user); + int protectType = Util.getIntValue(Util.null2String(request.getParameter("protectType")), 0); //二次认证认证成功后的参数,数据保护的方式 + int secondAuthType = Util.getIntValue(Util.null2String(request.getParameter("secondAuthType")), 0); //二次认证认证成功后的参数,二次认证的方式 + int qysSignWay = Util.getIntValue(Util.null2String(request.getParameter("qysSignWay")), 0); //契约锁认证的方式,1:ukey,2:契约锁服务 + if (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 2) { //契约锁数据保护 + Map protectResult = requestSecondAuthService.protectDatas(Util.getIntValue(requestid, -1), workflowid, formid4auth, isbill4auth, currentnodeid, remark); + String protectSuccess = Util.null2String(protectResult.get("success")); + + if ("0".equals(protectSuccess)) { //说明数据保护失败 + String protectMsg = Util.null2String(protectResult.get("message")); + apidatas.put("success", false); + apidatas.put("msg", protectMsg); + return apidatas; + } else if ("1".equals(protectSuccess)) { + isNeedUpdate = true; + uuidStr = Util.null2String(protectResult.get("uuid")); + } + } + + RequestOperationLogManager rolm = new RequestOperationLogManager(Util.getIntValue(requestid), currentnodeid, Util.getIntValue(tmpforwardflag == 4?chuanyue_isremark:isremark), user.getUID(), user.getType(), CurrentDate, CurrentTime, src); + // 开始记录日志 + rolm.flowTransStartBefore(); + if (operate.equals("save") && wfcurrrid > 0) { + List poppuplist = new ArrayList(); + + /* --------------add by xwj for td3641 begin ----- */ + String tempHrmIds = "";// xwj td2302 + String receivedPersonids = ""; + String agentSQL = "";// xwj td2302 + boolean isbeAgent = false; + String agenterId = ""; + String beginDate = ""; + String beginTime = ""; + String endDate = ""; + String endTime = ""; + String currentDate = ""; + String currentTime = ""; + String agenttype = ""; + /* --------------add by xwj for td3641 end ----- */ + + FreeNodeEntity nodeEntity = FreeNodeBiz.getCurrentFreeNodeEntity(Util.getIntValue(requestid),currentnodeid); + WFForwardManager wffmanager = new WFForwardManager(); + wffmanager.setIsShowReplyNotice(isShowReplyNotice); + wffmanager.setForwardRight(fu, Util.getIntValue(requestid), workflowid, extendnodeid, Util.getIntValue(userid)); + //意见征询自由节点当继承节点设置了 + if(forwardflag == 2 && FreeNodeBiz.isFreeNode(currentnodeid) && "1".equals(wffmanager.getIsBeForwardModify())) { + wffmanager.setIsBeForwardModify(nodeEntity.isAllowModify() ? "1" : "0"); + } + + int showorder = 1; + + boolean isforwardrights = false; + if(!batchForward) { + ArrayList forwardrights = wffmanager.getUserForwardRights(Util.getIntValue(requestid), workflowid, currentnodeid, Util.getIntValue(userid), 1); + isforwardrights = forwardrights.size() > 0; + } + + //是否运行优化的逻辑 + boolean isPfx = (forwardflag == 1 && !isforwardrights); + if(tmpforwardflag == 4){ + isPfx = true; + } + List insertUesrids = new ArrayList(); + List insertShowOrderids = new ArrayList(); + List insertAgenterids = new ArrayList(); + + //end by mackjoe + + recordSet.executeSql("select max(showorder) as maxshow from workflow_currentoperator where nodeid = " + currentnodeid + " and isremark in ('0','1','4') and requestid = " + requestid); + if (recordSet.next()) { + showorder = recordSet.getInt("maxshow") + 1; + } + + //统一查询出已存在的用户id + List existstOperators = new ArrayList(); + String agentIds_temp = ""; + String anget_temp = ""; + for (Object resourceidObj : resourceids){ + anget_temp = Util.null2String(operatorAgentInfo.get(resourceidObj)); + agentIds_temp += "".equals(anget_temp) ? "" : anget_temp + ","; + } + if(agentIds_temp.length() > 1){ + agentIds_temp = agentIds_temp.substring(0,agentIds_temp.length()-1); + } + if (forwardflag == 1) { + String selectsql = "select userid, isremark,id from workflow_currentoperator where requestid=" + requestid + " and isremark in(0,1,5,7,11) and (" + Util.getSubINClause(tmpid, "userid", "IN") + " or userid in("+(!"".equals(agentIds_temp) && (tmpforwardflag==4 || tmpforwardflag==1) ? agentIds_temp : "-1" )+")) and usertype=0 order by isremark"; + + recordSet.executeSql(selectsql); + + while (recordSet.next()) { + String exiUserid = Util.null2String(recordSet.getString("userid")); + if (existstOperators.indexOf(exiUserid) == -1) { + existstOperators.add(exiUserid); + } + } + } + //处理转发+传阅,islasttimes反了的问题----start + List bigThenCYUsers = new ArrayList<>(); + List bigThenCYUsers_temp = new ArrayList<>(); + String isremark_temp = ""; + String userid_temp = ""; + float orderisremark = -1; + if(tmpforwardflag == 4){ + recordSet.executeQuery("select userid,(CASE WHEN isremark=9 THEN 7.5 WHEN isremark=11 THEN 0.98 WHEN (isremark=1 and takisremark=2) THEN 0.9 ELSE isremark END) orderisremark from workflow_currentoperator where requestid=" + requestid + " and (userid in(" + tmpid + ") or userid in(" + ("".equals(agentIds_temp) ? "-1" : agentIds_temp) + ")) and usertype=0" + " order by orderisremark,id "); + while(recordSet.next()){ + userid_temp = Util.null2String(recordSet.getString("userid")); + orderisremark = Util.getFloatValue(recordSet.getString("orderisremark"),-1); + if(orderisremark <= 0.9){ + bigThenCYUsers_temp.add(userid_temp); + } + if(orderisremark > 0.9 && !bigThenCYUsers_temp.contains(userid_temp) && !bigThenCYUsers.contains(userid_temp)){ + bigThenCYUsers.add(userid_temp); + } + } + } + //处理转发+传阅,islasttimes反了的问题----end + String forwardresourceids = ""; + if (forwardflag == 3) { + RequestInfoEntity reqEntity = new RequestInfoEntity(); + reqEntity.setRequestId(requestid); + reqEntity.setWorkflowId(workflowid); + reqEntity.setCurrentNodeId(String.valueOf(currentnodeid)); + reqEntity.setCurrentNodeType(currnodetype0); + reqEntity.setWorkflowBaseInfo(WorkflowBaseBiz.initBaseInfo(String.valueOf(workflowid))); + Map otherParams = new HashMap <>(); + otherParams.put("needwfback",needwfback); + Map rurnToDoResult = RequestOperationBiz.reqTurnTodoNew(operatorAgentInfo,tmpid,reqEntity,user,CurrentDate,CurrentTime,otherParams); + receivedPersonids = Util.null2String(rurnToDoResult.get("receivedpersonids")); + tempHrmIds = Util.null2String(rurnToDoResult.get("receivedPersons")); + } + for (Object resourceidObj : resourceids) { + int BeForwardid = 0; + isbeAgent = false; + // modify by mackjoe at 2005-09-28 td2865 + resourceid = (String) resourceidObj; + if (forwardflag != 1 || !isPfx) { + //end by mackjoe + recordSet.executeSql("select max(showorder) as maxshow from workflow_currentoperator where nodeid = " + currentnodeid + " and isremark in ('0','1','4') and requestid = " + requestid); + if (recordSet.next()) { + showorder = recordSet.getInt("maxshow") + 1; + } + } else { + //每次自增即可 + showorder++; + } + agenterId = operatorAgentInfo.get(resourceid); + if(agenterId != null && !agenterId.equals("")){ + agenterids.add(agenterId); + beAgentUser.add(resourceid); + isbeAgent = true; + } + if(forwardflag == 3) continue; + // jh暂时屏蔽掉人员去重 + if (isPfx) { + if(isbeAgent){ + List insertSqlParamList = new ArrayList(); + //传阅流程代理信息---- + List chuanyueItem = new ArrayList(); + chuanyueItem.add(resourceid); + chuanyueItem.add(0); + chuanyueItems.add(chuanyueItem); + //传阅流程代理信息---- + insertSqlParamList.add(resourceid); + insertSqlParamList.add("2"); //isremark + insertSqlParamList.add(agenterId); + insertSqlParamList.add("1"); //agenttype + insertSqlParamList.add(showorder); + insertSqlParamList.add(CurrentDate); + insertSqlParamList.add(CurrentTime); + insertSqlParamList.add((forwardflag ==1 && existstOperators.contains(resourceid)) ? "0":"1"); + insertSqlParamList.add(tmpforwardflag == 4?chuanyue_isremark:"1"); + insertOperatorParamsList.add(insertSqlParamList); + + showorder++; + + insertSqlParamList = new ArrayList(); + //传阅流程代理信息---- + chuanyueItem = new ArrayList(); + chuanyueItem.add(agenterId); + chuanyueItem.add(0); + chuanyueItems.add(chuanyueItem); + //传阅流程代理信息---- + insertSqlParamList.add(agenterId); + insertSqlParamList.add(tmpforwardflag == 4?chuanyue_isremark:"1"); + insertSqlParamList.add(resourceid); + insertSqlParamList.add("2"); + insertSqlParamList.add(showorder); + insertSqlParamList.add(CurrentDate); + insertSqlParamList.add(CurrentTime); + //计算islasttimes + String islasttimes = "1"; + if(forwardflag ==1){ + //1、若转发接收对象已经是流程中人员,则islasttimes=0 + if(existstOperators.contains(agenterId)){ + islasttimes = "0"; + } + //2、若转发接收对象是其他接收对象的代理人,则代理的这条记录islasttimes=0 + if(resourceids.contains(agenterId)){ + islasttimes = "0"; + } + } + if(tmpforwardflag == 4){//传阅需要处理 + islasttimes = "0"; + if(bigThenCYUsers.contains(agenterId) || (!existstOperators.contains(agenterId) && !resourceids.contains(agenterId))){ + islasttimes = "1"; + } + } + insertSqlParamList.add(islasttimes); + insertSqlParamList.add(tmpforwardflag == 4?chuanyue_isremark:"1"); + insertOperatorParamsList.add(insertSqlParamList); + + insertUesrids.add(agenterId); + insertShowOrderids.add(showorder); + insertAgenterids.add(agenterId); + + //记录要插入的人员, 用于更新islasttimes + insertOperatorIds.add(resourceid); + insertOperatorIds.add(agenterId); + }else{ + List insertSqlParamList = new ArrayList(); + insertSqlParamList.add(resourceid); + insertSqlParamList.add(tmpforwardflag == 4?chuanyue_isremark:"1"); //isremark + insertSqlParamList.add(-1); + insertSqlParamList.add("0"); //agenttype + insertSqlParamList.add(showorder); + insertSqlParamList.add(CurrentDate); + insertSqlParamList.add(CurrentTime); + if(tmpforwardflag == 4){ + //传阅操作,如果传阅身份是最大的,就更新islasttimes为1//如果第一个条件不满足,则说明这个人对于这条流程是第一次或者是节点操作者或者是意见征询接收人,第二个条件如果为false,基本说明是第一次收到这条流程,所以这两种情况要给1,后面会把前面一个集合的islasttimes先全部置位0 + insertSqlParamList.add(((bigThenCYUsers.contains(resourceid)) || !existstOperators.contains(resourceid)) ? "1":"0"); + }else{ + insertSqlParamList.add((forwardflag ==1 && existstOperators.contains(resourceid)) ? "0":"1"); + } + insertSqlParamList.add(tmpforwardflag == 4?chuanyue_isremark:"1"); + insertOperatorParamsList.add(insertSqlParamList); + + List chuanyueItem = new ArrayList(); + chuanyueItem.add(resourceid); + chuanyueItem.add(0); + chuanyueItems.add(chuanyueItem); + + insertUesrids.add(resourceid); + insertShowOrderids.add(showorder); + + //记录要插入的人员, 用于更新islasttimes + insertOperatorIds.add(resourceid); + } + } + if (isbeAgent) { + // 代理人 + int insertBeAgentRecordId = -1;//代理人插入记录的id + if (forwardflag != 1 || !isPfx) { + String checkoperatorsql = "select 1 from workflow_currentoperator where requestid=" + requestid + " and userid=" + resourceid + " and usertype=" + usertype + + " and isremark='2' and nodeid=" + currentnodeid + " and agenttype = '1'"; + recordSet.execute(checkoperatorsql); + // 意见征询接收人是流程节点操作者 && 当前操作者身份是代理人 && 意见征询接收人是当前操作者的被代理人 防止代理收回后出现自己征询自己的情况 + if (!(forwardflag == 2 && recordSet.next() && agentType==2 && resourceid.equals(agentorByAgentId + ""))) { + para = requestid + flag + resourceid + flag + "0" + flag + workflowid + "" + flag + workflowtype + flag + usertype + flag + "2" + flag + currentnodeid + flag + agenterId + + flag + "1" + flag + showorder + flag + "-1"; + recordSet.executeProc("workflow_CurrentOperator_I", para); + + recordSet.executeQuery("select max(id) as maxid from workflow_currentoperator where requestid = ? and nodeid = ? and userid = ? and usertype = ? and isremark = 2", requestid, currentnodeid, resourceid, usertype); + if (recordSet.next()) { + insertBeAgentRecordId = Util.getIntValue(recordSet.getString("maxid")); + } + } + } + if (forwardflag == 5) {//征询转办 + para = requestid + flag + agenterId + flag + "1" + flag + workflowid + "" + flag + workflowtype + flag + usertype + flag + "1" + flag + currentnodeid + flag + resourceid + + flag + "2" + flag + showorder + flag + "-1"; + recordSet.executeProc("workflow_CurrentOperator_I", para); + + int insertAgentRecordId = -1;//被代理人插入记录的id + recordSet.executeQuery("select max(id) as maxid from workflow_currentoperator where requestid = ? and nodeid = ? and userid = ? and usertype = ? and isremark = 1", requestid, currentnodeid, agenterId, usertype); + if (recordSet.next()) { + insertAgentRecordId = Util.getIntValue(recordSet.getString("maxid")); + } + if (needwfback.equals("0")) { + String needsql = "update workflow_currentoperator set needwfback = '0' where requestid=" + requestid + " and userid=" + agenterId + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid; + recordSet.execute(needsql); + } + String ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid= ? and id = ? "; +// if (agenterId.equals(userid)) { // 转办给自己时特殊处理 +// ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid=" + requestid + " and userid=" + userid + " and showorder<>" + showorder +// + " and usertype=" + usertype + " and isremark='1' and nodeid=" + currentnodeid; +// } else { +// ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype +// + " and isremark='1' and nodeid=" + currentnodeid; +// } + recordSet.executeUpdate(ForwardHsql, requestid, wfcurrrid); + String IDsql = "select * from workflow_currentoperator where requestid=? and id = ? "; + + recordSet.executeQuery(IDsql, requestid, wfcurrrid); + if (recordSet.next()) { + int id = recordSet.getInt("id"); + int groupdetailid = recordSet.getInt("groupdetailid"); + int groupid = recordSet.getInt("groupid"); + String takid = recordSet.getString("takid"); + String multiTakLevel_temp = recordSet.getString("multitaklevel"); + int isTakOut = Util.getIntValue(recordSet.getString("istakout"), 0); + int isInMultitak = Util.getIntValue(recordSet.getString("isinmultitak"), 0); + recordSet.executeUpdate( + "update workflow_currentoperator set handleforwardid = ?, groupdetailid = ?, " + + " groupid = ?, takid = ?, multitaklevel = ?, takisremark = '2', istakout= ?, isinmultitak = ? " + + " where requestid = ? and id in (" + insertBeAgentRecordId + "," + insertAgentRecordId + ") ", + id, groupdetailid, groupid,takid,multiTakLevel_temp,isTakOut, isInMultitak, requestid); + } + if (!agenterId.equals(userid)) { + //转发去重后,当前人可能有多条记录,都要更改状态 + recordSet.executeUpdate("update workflow_currentoperator set isremark = 2 where requestid=? and userid=? and usertype=? and isremark in (1,8,9,11) and (takisremark <> 2 or takisremark is null) ",requestid,userid,usertype); + } + } else if (forwardflag == 3) { + //转办逻辑已在RequestOperationBiz.reqTurnTodoNew处理; + } else if (forwardflag == 2) { // 意见征询,设置标识位takisremark的值为 + // "2" + String checkoperatorsql = "select 1 from workflow_currentoperator where requestid=" + requestid + " and userid=" + resourceid + " and usertype=" + usertype + + " and isremark='2' and nodeid=" + currentnodeid + " and agenttype = '1'"; + recordSet.execute(checkoperatorsql); + // 意见征询接收人是流程节点操作者 && 当前操作者身份是代理人 && 意见征询接收人是当前操作者的被代理人 防止代理收回后出现自己征询自己的情况 + if (!(recordSet.next() && agentType==2 && resourceid.equals(agentorByAgentId + ""))) { + //意见征询出去,当前节点操作者其他的被征询置为回复状态 + recordSet.executeUpdate("update workflow_currentoperator set isremark = 2 " + + "where requestid = ? and userid = ? and usertype = ? and (isremark = 1 or isremark = 9 or isremark = 11) and nodeid = ?", requestid, userid, usertype, currentnodeid); + + + para = requestid + flag + agenterId + flag + "0" + flag + workflowid + "" + flag + workflowtype + flag + usertype + flag + "1" + flag + currentnodeid + flag + + resourceid + flag + "2" + flag + showorder + flag + "-1"; + recordSet.executeProc("workflow_CurrentOperator_I", para); + + String IDsql = "select * from workflow_currentoperator " + + "where requestid=" + requestid + + " and userid=" + userid + + " and usertype=" + usertype + + " and nodeid=" + currentnodeid; + if (multiTakLevel > 0) { + IDsql += " and id = " + wfcurrrid; + } else { + IDsql += " and isremark in ('0') "; + } + + recordSet.execute(IDsql); + if (recordSet.next()) { + int groupdetailid = recordSet.getInt("groupdetailid"); + int groupid = recordSet.getInt("groupid"); + String Taksql = "update workflow_CurrentOperator set multiTakLevel = "+multiTakLevel+", takid = "+wfcurrrid+", takisremark = 2 ,groupdetailid = " + groupdetailid + " ,groupid = " + groupid + " where requestid=" + + requestid + " and userid=" + agenterId + " and usertype=" + usertype + " and showorder=" + showorder + " and isremark='1' and nodeid=" + currentnodeid; + recordSet.execute(Taksql); + recordSet.execute("update workflow_CurrentOperator set takisremark = 2 where requestid="+requestid+" and agentorbyagentid ="+agenterId+" and usertype="+usertype+" and showorder="+showorder+" and isremark='2' and nodeid="+currentnodeid); + } + + String Taksql2 = "update workflow_CurrentOperator set takisremark = -2 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype + + " and isremark='0' and nodeid=" + currentnodeid; + if (multiTakLevel > 0) { + //多重意见征询,征询出去的记录设为已办 + Taksql2 = "update workflow_CurrentOperator set isremark = 2 , istakout = 1 where id = " + wfcurrrid; + if (multiTakLevel == 1) {//multiTakLevel为1时表示进入二级意见征询,更新意见征询起点节点操作者的状态 + recordSet.executeQuery("select takid from workflow_currentoperator where id = ?", wfcurrrid); + if (recordSet.next()) { + recordSet.executeUpdate("update workflow_currentoperator set isInMultiTak = 1 where id = ?", recordSet.getString("takid")); + } + } + } + recordSet.execute(Taksql2); + + //转发去重后,当前操作者既是节点操作者,又是被转发人,意见征询是时要将转发数据状态更改成和意见征询一致 + recordSet.executeUpdate("update workflow_CurrentOperator set takisremark = -2,isremark = 0 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype + + " and isremark='1' and nodeid !=" + currentnodeid); + } + agentSQL = "select id from workflow_CurrentOperator where requestid=" + requestid + " and userid=" + agenterId + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid + " and showorder=" + showorder + " order by id desc"; + + //String sql = "update workflow_CurrentOperator set operatedate="+oper; + } else if(!isPfx){ + //修正转发时选择了接收人可转发后,这里原来逻辑更新islasttimes不正确的问题; + int islasttimes = 1; + if(forwardflag == 1 && existstOperators.contains(agenterId)){ + islasttimes = 0; + }else{ + rs.executeUpdate("update workflow_currentoperator set islasttimes=0 where requestid=? and userid=? and usertype = ?",requestid,agenterId,usertype); + } + rs.executeUpdate("insert into workflow_currentoperator(requestid,userid,groupid, workflowid,workflowtype,usertype,isremark,nodeid,agentorbyagentid,agenttype,showorder,receivedate,receivetime,viewtype,iscomplete,islasttimes,groupdetailid,preisremark,needwfback) values "+ + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",requestid,agenterId, "0",workflowid,workflowtype,usertype,"1",currentnodeid,resourceid,"2",showorder,CurrentDate,CurrentTime,0,0,islasttimes,"-1","1","1"); + agentSQL = "select id from workflow_CurrentOperator where requestid=" + requestid + " and userid=" + agenterId + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid + " and showorder=" + showorder + " order by id desc"; + } + } else { + if (forwardflag == 5) {//征询转办 + para = requestid + flag + resourceid + flag + "1" + flag + workflowid + "" + flag + workflowtype + flag + usertype + flag + "1" + flag + currentnodeid + flag + -1 + flag + + "0" + flag + showorder + flag + "-1"; + recordSet.executeProc("workflow_CurrentOperator_I", para); + + int insertRecordId = -1;//被代理人插入记录的id + recordSet.executeQuery("select max(id) as maxid from workflow_currentoperator where requestid = ? and nodeid = ? and userid = ? and usertype = ? and isremark = 1", requestid, currentnodeid, resourceid, usertype); + if (recordSet.next()) { + insertRecordId = Util.getIntValue(recordSet.getString("maxid")); + } + + if (needwfback.equals("0")) { + String needsql = "update workflow_currentoperator set needwfback = '0' where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid; + recordSet.execute(needsql); + } + String ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid= ? and id = ?"; +// if (resourceid.equals(userid)) { // 转办给自己时特殊处理 +// ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid=" + requestid + " and userid=" + userid + "and showorder<>" + showorder +// + " and usertype=" + usertype + " and isremark='1' and takisremark = '2' and nodeid=" + currentnodeid; +// } else { +// ForwardHsql = "update workflow_currentoperator set isremark = 2 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype +// + " and isremark='1' and takisremark = '2' and nodeid=" + currentnodeid; +// } + recordSet.executeUpdate(ForwardHsql, requestid, wfcurrrid); + String IDsql = "select * from workflow_currentoperator where requestid=? and id = ?";; + recordSet.executeQuery(IDsql, requestid, wfcurrrid); + if (recordSet.next()) { + int id = recordSet.getInt("id"); + int groupdetailid = recordSet.getInt("groupdetailid"); + int groupid = recordSet.getInt("groupid"); + String takid = recordSet.getString("takid"); + String multiTakLevel_temp = recordSet.getString("multitaklevel"); + int isTakOut = Util.getIntValue(recordSet.getString("istakout"), 0); + int isInMultitak = Util.getIntValue(recordSet.getString("isinmultitak"), 0); + recordSet.executeUpdate( + "update workflow_currentoperator set handleforwardid = ?, groupdetailid = ?, " + + " groupid = ?, takid = ?, multitaklevel = ?, takisremark = '2', istakout= ?, isinmultitak = ? " + + " where requestid = ? and id = ? ", + id, groupdetailid, groupid,takid,multiTakLevel_temp,isTakOut, isInMultitak, requestid, insertRecordId); + } + if(!resourceid.equals(userid)){ + //转发去重后,当前人可能有多条记录,都要更改状态 + recordSet.executeUpdate("update workflow_currentoperator set isremark = 2 where requestid=? and userid=? and usertype=? and isremark in (1,8,9,11) and (takisremark <> '2' or takisremark is null) ",requestid,userid,usertype); + } + }else if (forwardflag == 3) { // handleforwardid + //转办逻辑已在RequestOperationBiz.reqTurnTodoNew处理; + } else if (forwardflag == 2) { // 意见征询,设置标识位takisremark的值为 + // "2" + String checkoperatorsql = "select 1 from workflow_currentoperator where requestid=" + requestid + " and userid=" + resourceid + " and usertype=" + usertype + + " and isremark='0' and nodeid=" + currentnodeid; + recordSet.execute(checkoperatorsql); + if (!recordSet.next()) { + + //意见征询出去,当前节点操作者其他的身份置为回复状态 + recordSet.executeUpdate("update workflow_currentoperator set isremark = 2 " + + "where requestid = ? and userid = ? and usertype = ? and (isremark = 1 or isremark = 9 or isremark = 11) and nodeid = ?", requestid, userid, usertype, currentnodeid); + + + para = requestid + flag + resourceid + flag + "0" + flag + workflowid + "" + flag + workflowtype + flag + usertype + flag + "1" + flag + currentnodeid + flag + -1 + + flag + "0" + flag + showorder + flag + "-1"; + recordSet.executeProc("workflow_CurrentOperator_I", para); + + String IDsql = "select * from workflow_currentoperator where " + + " requestid=" + requestid + + " and userid=" + userid + + " and usertype=" + usertype + + " and nodeid=" + currentnodeid; + if (multiTakLevel > 0) { + IDsql += " and id = " + wfcurrrid; + } else { + IDsql += " and isremark in ('0') "; + } + recordSet.execute(IDsql); + if (recordSet.next()) { + int groupdetailid = recordSet.getInt("groupdetailid"); + int groupid = recordSet.getInt("groupid"); + String Taksql = "update workflow_CurrentOperator set multiTakLevel = "+multiTakLevel+", takid = "+wfcurrrid+", takisremark = 2, groupdetailid = " + groupdetailid + " ,groupid = " + groupid + " where requestid=" + + requestid + " and userid=" + resourceid + " and usertype=" + usertype + " and showorder=" + showorder + " and isremark='1' and nodeid=" + currentnodeid; + recordSet.execute(Taksql); + + } + + String Taksql2 = "update workflow_CurrentOperator set takisremark = -2 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype + + " and isremark in ('0') and nodeid=" + currentnodeid; + if (multiTakLevel > 0) { + //多重意见征询,征询出去的记录设为已办 + Taksql2 = "update workflow_CurrentOperator set isremark = 2, istakout = 1 where id = " + wfcurrrid; + if (multiTakLevel == 1) {//multiTakLevel为1时表示进入二级意见征询,更新意见征询起点节点操作者的状态 + recordSet.executeQuery("select takid from workflow_currentoperator where id = ?", wfcurrrid); + if (recordSet.next()) { + recordSet.executeUpdate("update workflow_currentoperator set isInMultiTak = 1 where id = ?", recordSet.getString("takid")); + } + } + } + recordSet.execute(Taksql2); + + + //转发去重后,当前操作者既是节点操作者,又是被转发人,意见征询是时要将转发数据状态更改成和意见征询一致--传阅也需要处理掉 + recordSet.executeUpdate("update workflow_CurrentOperator set isremark = 2,viewtype=-2 where requestid=" + requestid + " and userid=" + userid + " and usertype=" + usertype + + " and (isremark=1 or isremark=11) and nodeid !=" + currentnodeid); + } + agentSQL = "select id from workflow_CurrentOperator where requestid=" + requestid + " and userid=" + resourceid + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid + " and showorder=" + showorder + " order by id desc"; + + }else if (!isPfx){ + + int islasttimes = 1; + if(forwardflag == 1 && existstOperators.contains(resourceid)){ + islasttimes = 0; + }else{ + rs.executeUpdate("update workflow_currentoperator set islasttimes=0 where requestid=? and userid=? and usertype = ?",requestid,resourceid,usertype); + } + rs.executeUpdate("insert into workflow_currentoperator(requestid,userid,groupid, workflowid,workflowtype,usertype,isremark,nodeid,agentorbyagentid,agenttype,showorder,receivedate,receivetime,viewtype,iscomplete,islasttimes,groupdetailid,preisremark,needwfback) values "+ + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",requestid,resourceid, "0",workflowid,workflowtype,usertype,"1",currentnodeid,-1,"0",showorder,CurrentDate,CurrentTime,0,0,islasttimes,"-1","1","1"); + agentSQL = "select id from workflow_CurrentOperator where requestid=" + requestid + " and userid=" + resourceid + " and usertype=" + usertype + + " and isremark='1' and nodeid=" + currentnodeid + " and showorder=" + showorder + " order by id desc"; + } + } + if (forwardflag != 1 || !isPfx) { + recordSet.execute(agentSQL); + if (recordSet.next()) { + BeForwardid = recordSet.getInt("id"); + } + } + + ResourceComInfo rcomInfo = new ResourceComInfo(); + if (!isbeAgent) { + tempHrmIds += Util.toScreen(rcomInfo.getResourcename(resourceid), user.getLanguage()) + ","; + receivedPersonids += Util.null2String(resourceid) + ","; + } else { + tempHrmIds += Util.toScreen(rcomInfo.getResourcename(resourceid), user.getLanguage()) + "->" + Util.toScreen(rcomInfo.getResourcename(agenterId), user.getLanguage()) + ","; + receivedPersonids += Util.null2String(resourceid) + ","; + } + + /* ----------- xwj for td3641 end ----------- */ + + // 流程测试状态下转发,不提醒被转发人 START + int istest = 0; + try { + rs.execute("select isvalid from workflow_base where id=" + workflowid); + if (rs.next()) { + int isvalid_t = Util.getIntValue(rs.getString("isvalid"), 0); + if (isvalid_t == 2) { + istest = 1; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (istest != 1) { + // 2004-05-19 刘煜修改, 在转发的时候加入对被转发人的工作流提醒(有新的工作流), + // 被转发人肯定为人力资源,因此类型默认为“0” + + if (isbeAgent) { + forwardresourceids += "," + agenterId; + // PoppupRemindInfoUtil.insertPoppupRemindInfo(Integer.parseInt(agenterId),0,"0",Integer.parseInt(requestid),requestname);//xwj + // for td3450 20060111 + Map map = new HashMap(); + map.put("userid", "" + Integer.parseInt(agenterId)); + map.put("type", "0"); + map.put("logintype", "0"); + map.put("requestid", "" + Integer.parseInt(requestid)); + map.put("requestname", "" + requestname); + map.put("workflowid", "-1"); + map.put("creater", ""); + poppuplist.add(map); + } else { + forwardresourceids += "," + resourceid; + + Map map = new HashMap(); + map.put("userid", "" + Integer.parseInt(resourceid)); + map.put("type", "0"); + map.put("logintype", "0"); + map.put("requestid", "" + Integer.parseInt(requestid)); + map.put("requestname", "" + requestname); + map.put("workflowid", "-1"); + map.put("creater", ""); + poppuplist.add(map); + // PoppupRemindInfoUtil.insertPoppupRemindInfo(Integer.parseInt(resourceid),0,"0",Integer.parseInt(requestid),requestname);//xwj + // for td3450 20060111 + } + } + + int IsSubmitedOpinion = 0; // 待办提交后被转发人是否可提交意见 + int IsBeForwardTodo = 0; // 待办可转发 + + int IsBeForwardSubmitAlready = 0; // 允许已办被转发人可提交意见 + + int IsBeForwardAlready = 0; // 已办被转发人可转发 + + int IsBeForwardSubmitNotaries = 0; // 允许办结被转发人可提交意见 + + int IsBeForward = 0; // 办结被转发人是否可转发 + + int IsFromWFRemark = -1; // 被转发状态 + + rs.execute("select currentnodetype from workflow_requestbase where requestid = " + requestid); + String currentnodetype = ""; + if (rs.next()) { + currentnodetype = Util.null2String(rs.getString("currentnodetype")); + } + + // 流程测试状态下转发,不提醒被转发人 END + // wffmanager.SaveForward(Util.getIntValue(requestid),wfcurrrid,BeForwardid); + if (isforwardrights) { + IsSubmitedOpinion = Util.getIntValue(fu.getParameter("IsSubmitedOpinion"), 0); // 待办提交后被转发人是否可提交意见 + IsBeForwardTodo = Util.getIntValue(fu.getParameter("IsBeForwardTodo"), 0); // 待办可转发 + + IsBeForwardSubmitAlready = Util.getIntValue(fu.getParameter("IsBeForwardSubmitAlready"), 0); // 允许已办被转发人可提交意见 + + IsBeForwardAlready = Util.getIntValue(fu.getParameter("IsBeForwardAlready"), 0); // 已办被转发人可转发 + if("3".equals(currentnodetype)) { + IsBeForwardSubmitNotaries = Util.getIntValue(fu.getParameter("IsSubmitedOpinion"), 0); // 允许办结被转发人可提交意见 + IsBeForward = Util.getIntValue(fu.getParameter("IsBeForwardTodo"), 0); // 办结被转发人是否可转发 + if("".equals(Util.null2String(fu.getParameter("IsSubmitedOpinion")))){ + IsBeForwardSubmitNotaries = Util.getIntValue(wffmanager.getIsBeForwardSubmitNotaries(),0); + IsBeForward = Util.getIntValue(wffmanager.getIsBeForward(),0); + } + } + IsFromWFRemark = Util.getIntValue(fu.getParameter("IsFromWFRemark"), -1); + } + if (IsFromWFRemark == -1) { + rs.executeQuery(ServiceUtil.calculateCurrentNodeSql(requestid, user.getUID() , Util.getIntValue(usertype))); + String isremarkForRM = ""; + while (rs.next()) { + isremarkForRM = Util.null2String(rs.getString("isremark")); + if (isremarkForRM.equals("1") || isremarkForRM.equals("5") || isremarkForRM.equals("7") || isremarkForRM.equals("8") || isremarkForRM.equals("9") || isremarkForRM.equals("0") || isremarkForRM.equals("11")) { + break; + } + } + + if (currentnodetype.equals("3")) { + IsFromWFRemark = 2; + } else { + if ("1".equals(isremarkForRM) || "0".equals(isremarkForRM) || "7".equals(isremarkForRM) || "8".equals(isremarkForRM) || "9".equals(isremarkForRM) || "11".equals(isremarkForRM)) { + IsFromWFRemark = 0; + } else if ("2".equals(isremarkForRM)) { + IsFromWFRemark = 1; + } + } + } + //rs.writeLog("---------------requestid:" + requestid + ",--------------IsFromWFRemark:" + IsFromWFRemark); + wffmanager.setIsFromWFRemark(IsFromWFRemark+""); + //走优化的逻辑的话, 最后处理 + if (forwardflag != 1 || !isPfx) { + wffmanager.SaveForward(Util.getIntValue(requestid), wfcurrrid, BeForwardid, forwardflag,uuid); + } + if (isforwardrights) { + String wfSQL = "select requestid from workflow_Forward where requestid=" + requestid + " and Forwardid=" + wfcurrrid + " and BeForwardid=" + BeForwardid; + recordSet.execute(wfSQL); + if (recordSet.next()) { + recordSet.execute("update workflow_Forward set IsSubmitedOpinion=" + IsSubmitedOpinion + ",IsBeForwardTodo=" + IsBeForwardTodo + ",IsBeForwardSubmitAlready=" + + IsBeForwardSubmitAlready + ",IsBeForward=" + IsBeForward + ",IsBeForwardAlready=" + IsBeForwardAlready + ",IsBeForwardSubmitNotaries=" + IsBeForwardSubmitNotaries + + ",IsFromWFRemark=" + IsFromWFRemark + ",isShowReplyNotice='"+isShowReplyNotice+"' where requestid=" + requestid + " and Forwardid=" + wfcurrrid + " and BeForwardid=" + BeForwardid); + } + } + + } + + //批量插入处理 + if (insertOperatorParamsList != null && !insertOperatorParamsList.isEmpty()) { + + if(forwardflag ==1 ){ + //转发操作,如果转发接收人已经存在流程中操作者中,则不将已有的islasttimes置为0,而是将新增的数据islasttimes置为0 + insertOperatorIds.removeAll(existstOperators); + + } + //处理islasttimes + if(insertOperatorIds.size()>0 && tmpforwardflag != 4){//不是传阅操作才做这个事情,传阅操作在下面更新,防止更新错 + rs.executeUpdate("update workflow_currentoperator set islasttimes=0 where requestid=" + requestid + + " and (" + Util.getSubINClause(StringUtils.join(insertOperatorIds, ","), "userid", "IN") + ") and usertype = 0"); + } + if(bigThenCYUsers.size() > 0 && tmpforwardflag == 4){ + rs.executeUpdate("update workflow_currentoperator set islasttimes=0 where requestid=" + requestid + + " and (" + Util.getSubINClause(StringUtils.join(bigThenCYUsers, ","), "userid", "IN") + ") and usertype = 0"); + } + + //防止workflowtype的值为空 + String forwardSql = "insert into workflow_currentoperator " + + "(requestid, userid, groupid, workflowid, workflowtype, usertype, isremark, nodeid, agentorbyagentid, agenttype, showorder, receivedate, receivetime, viewtype, iscomplete, islasttimes, groupdetailid, preisremark, needwfback)" + + "values(" + requestid + ", ?, 0, " + workflowid + ", " + workflowtype + ", 0, ?, " + currentnodeid + ", ?, ?, ?, ?, ?, 0, 0, ?, -1, ?, '1')"; + BatchRecordSet rst = new BatchRecordSet(); + + rst.executeBatchSql(forwardSql, insertOperatorParamsList); + + if(tmpforwardflag == 4){ + recordSet.executeQuery("select id,userid from workflow_currentoperator where requestid = ? and isremark = 11 and nodeid = ? and receivedate = ? and receivetime = ?",requestid,currentnodeid,CurrentDate,CurrentTime); + while(recordSet.next()){ + String currid4chuanyue = recordSet.getString("id"); + String userid4chuanyue = recordSet.getString("userid"); + for(List chuanyueItem : chuanyueItems){ + if(chuanyueItem.size() == 2 && userid4chuanyue.equals(chuanyueItem.get(0))){ + chuanyueItem.add(currid4chuanyue); + chuanyueItem.add(wfcurrrid); + } + } + } + } + + String sltCurrtIdSql = "select id, userid, usertype, showorder, agentorbyagentid " + + "from workflow_CurrentOperator " + + "where requestid=" + requestid + " and isremark='1' and nodeid=" + currentnodeid + " and receivedate='" + CurrentDate + "' and receivetime='" + CurrentTime + "' order by id desc"; + rs.executeSql(sltCurrtIdSql); + + List> insertForwardParamsList = new ArrayList>(); + List insertAgentcidList = new ArrayList<>(); + while (rs.next()) { + int currtId = Util.getIntValue(rs.getString("id")); + int currtUserId = Util.getIntValue(rs.getString("userid")); + int currtShoworder = Util.getIntValue(rs.getString("showorder")); + int insertUserIndex = insertUesrids.indexOf(currtUserId + ""); + int insertShowOrderIndex = insertShowOrderids.indexOf(currtShoworder); + int insertAgenterIndex = insertAgenterids.indexOf(currtUserId + ""); + String currtAgentorbyagentid = Util.null2String("agentorbyagentid"); + if (insertUserIndex != -1 && insertUserIndex == insertShowOrderIndex) { + List forwardSqlParamList = new ArrayList(); + forwardSqlParamList.add(currtId); + insertForwardParamsList.add(forwardSqlParamList); + //防止一个人有多次记录的情况 + insertUesrids.remove(insertUserIndex); + insertShowOrderids.remove(insertUserIndex); + } else if (insertUserIndex != -1 && insertAgenterIndex != -1 && forwardflag == 1){ + if(insertAgentcidList.indexOf(currtUserId+"_"+currtAgentorbyagentid) == -1) { + List forwardSqlParamList = new ArrayList(); + forwardSqlParamList.add(currtId); + insertForwardParamsList.add(forwardSqlParamList); + insertAgentcidList.add(currtUserId + "_" + currtAgentorbyagentid); + } + } + } + + if (insertForwardParamsList != null && !insertForwardParamsList.isEmpty()) { + wffmanager.insertForwardInfo(Util.getIntValue(requestid), wfcurrrid, uuid,insertForwardParamsList); + } + } + //推送处理start + WFPathUtil wfutil = new WFPathUtil(); + //有需要提醒的信息,才抛出处理 + + + // 将代理人加入人员列表,用于发送邮件通知和设置共享 + + for (i = 0; i < agenterids.size(); i++) { + resourceids.add(agenterids.get(i)); + } + // 发送邮件 + +// MailAndMessage sendMail = new MailAndMessage(); +// sendMail.setForwardflag(forwardflag); +// sendMail.setRequest(fu); +// sendMail.sendMailAndMessage(Integer.parseInt(requestid), new ArrayList(resourceids), user); + // 加入LOG表信息 + +// recordSet.executeSql("select * from workflow_currentoperator where userid = " + userid + " and nodeid = " + currentnodeid + " and isremark in ('0','1','4') and requestid = " + requestid +// + " order by islasttimes desc, showorder,receivedate,receivetime"); + recordSet.executeQuery("select * from workflow_currentoperator where id = ?", wfcurrrid); + int tempagentorbyagentid = -1; + int tempagenttype = 0; + if (recordSet.next()) { + showorder = recordSet.getInt("showorder"); + tempagentorbyagentid = recordSet.getInt("agentorbyagentid"); + tempagenttype = recordSet.getInt("agenttype"); + if (tempagenttype < 0) + tempagenttype = 0; + } + /*String currentnodetype = ""; + recordSet.executeSql("select currentnodetype from workflow_requestbase where requestid= " + requestid); + if (recordSet.next()) { + currentnodetype = recordSet.getString("currentnodetype"); + if (currentnodetype.equals("3")) { + tempagentorbyagentid = -1; + tempagenttype = 0; + } + }*/ + RequestAnnexUpload rau = new RequestAnnexUpload(); + rau.setRequest(fu); + rau.setUser(user); + String annexdocids = rau.AnnexUpload(); + String Procpara = ""; + //语音附件 + int speechAttachment = Util.getIntValue(fu.getParameter("speechAttachment"),0); + String handWrittenSign = Util.null2String(fu.getParameter("handWrittenSign"),""); + String fulltextannotation = Util.null2String(fu.getParameter("fulltextannotation")); + String speechAttachmente9 = Util.null2String(fu.getParameter("speechAttachmente9")); + String clientType = Util.null2String(fu.getParameter("clientType"), SignSource.PC_BROWSER.getType()); + if (forwardflag == 2) { + Procpara = requestid + "" + flag + workflowid + "" + flag + currentnodeid + "" + flag + "a" + flag + CurrentDate + flag + CurrentTime + flag + userid + "" + flag + // + CurrentDate + flag + CurrentTime + flag + userid+"" + // + flag + remark + flag + + clientip + flag + operatortype + flag + "0" + flag + tempHrmIds.trim() + flag + tempagentorbyagentid + flag + tempagenttype + flag + showorder + flag + annexdocids + flag + + requestLogId + flag + signdocids + flag + signworkflowids + flag + clientType + flag + speechAttachment + flag + handWrittenSign + flag + receivedPersonids.trim() + flag + remarkLocation + flag + fulltextannotation+flag+speechAttachmente9; // xwj + // for + // td1837 + // on + // 2005-05-12 + String updateTimeSql = "update workflow_CurrentOperator set operatedate='"+CurrentDate+"',operatetime='"+CurrentTime+"' where requestid=? and userid=? and usertype=? and nodeid=? and islasttimes='1'";//理论上这个条件能拿到唯一的一条数据了 + int ye = user.getType(); + rs.executeUpdate(updateTimeSql,requestid,user.getUID(),usertype,currentnodeid); + } + if (forwardflag == 3) { + Procpara = requestid + "" + flag + workflowid + "" + flag + currentnodeid + "" + flag + "h" + flag + CurrentDate + flag + CurrentTime + flag + userid + "" + flag + // + CurrentDate + flag + CurrentTime + flag + userid+"" + // + flag + remark + flag + + clientip + flag + operatortype + flag + "0" + flag + tempHrmIds.trim() + flag + tempagentorbyagentid + flag + tempagenttype + flag + showorder + flag + annexdocids + flag + + requestLogId + flag + signdocids + flag + signworkflowids + flag + clientType + flag + speechAttachment + flag + handWrittenSign + flag + receivedPersonids.trim() + flag + remarkLocation + flag + fulltextannotation+flag+speechAttachmente9; // xwj + // for + // td1837 + // on + // 2005-05-12 + String updateTimeSql = "update workflow_CurrentOperator set operatedate='"+CurrentDate+"',operatetime='"+CurrentTime+"' where requestid=? and userid=? and usertype=? and nodeid=? and islasttimes='1'";//理论上这个条件能拿到唯一的一条数据了 + rs.executeUpdate(updateTimeSql,requestid,user.getUID(),usertype,currentnodeid); + } + if (forwardflag == 5) { + if ("".equals(remark)) {//赋默认签字意见 + remark = takOptionBiz.getTakForwardCusSign(workflowid, currentnodeid, user); + } + Procpara = requestid + "" + flag + workflowid + "" + flag + currentnodeid + "" + flag + "z" + flag + CurrentDate + flag + CurrentTime + flag + userid + "" + flag + // + CurrentDate + flag + CurrentTime + flag + userid+"" + // + flag + remark + flag + + clientip + flag + operatortype + flag + "0" + flag + tempHrmIds.trim() + flag + tempagentorbyagentid + flag + tempagenttype + flag + showorder + flag + annexdocids + flag + + requestLogId + flag + signdocids + flag + signworkflowids + flag + clientType + flag + speechAttachment + flag + handWrittenSign + flag + receivedPersonids.trim() + flag + remarkLocation + flag + fulltextannotation+flag+speechAttachmente9; // xwj + // for + // td1837 + // on + // 2005-05-12 + String updateTimeSql = "update workflow_CurrentOperator set operatedate='"+CurrentDate+"',operatetime='"+CurrentTime+"' where requestid=? and userid=? and usertype=? and nodeid=? and islasttimes='1'";//理论上这个条件能拿到唯一的一条数据了 + rs.executeUpdate(updateTimeSql,requestid,user.getUID(),usertype,currentnodeid); + } + if (forwardflag == 1) { + Procpara = requestid + "" + flag + workflowid + "" + flag + currentnodeid + "" + flag + "7" + flag + CurrentDate + flag + CurrentTime + flag + userid + "" + flag + // + CurrentDate + flag + CurrentTime + flag + userid+"" + // + flag + remark + flag + + clientip + flag + operatortype + flag + "0" + flag + tempHrmIds.trim() + flag + tempagentorbyagentid + flag + tempagenttype + flag + showorder + flag + annexdocids + flag + + requestLogId + flag + signdocids + flag + signworkflowids + flag + clientType + flag + speechAttachment + flag + handWrittenSign + flag + receivedPersonids.trim() + flag + remarkLocation+ flag + fulltextannotation+flag+speechAttachmente9; // xwj + // for + // td1837 + // on + // 2005-05-12 + } + + //传阅处理 + if (tmpforwardflag == 4) { + if("".equals(remark)){ + remark = getRemark(workflowid,currentnodeid,remark); + } + Procpara = requestid + "" + flag + workflowid + "" + flag + currentnodeid + "" + flag + "c" + flag + CurrentDate + flag + CurrentTime + flag + userid + "" + flag + // + CurrentDate + flag + CurrentTime + flag + userid+"" + // + flag + remark + flag + + clientip + flag + operatortype + flag + "0" + flag + tempHrmIds.trim() + flag + tempagentorbyagentid + flag + tempagenttype + flag + showorder + flag + annexdocids + flag + + requestLogId + flag + signdocids + flag + signworkflowids + flag + clientType + flag + speechAttachment + flag + handWrittenSign + flag + receivedPersonids.trim() + flag + remarkLocation+ flag + fulltextannotation+flag+speechAttachmente9; // xwj + // for + // td1837 + // on + // 2005-05-12 + } + String currentString = new RequestManager().execRequestlog(Procpara, rs, flag, remark); + + /***================数据保护==============*/ + if (!"".equals(currentString) && currentString.indexOf("~~current~~") > -1) { + String authKey = Util.null2String(request.getParameter("authKey")); + String isProtectSuccess = Util.null2String(request.getParameter("isProtectSuccess")); + String isAuthSuccess = Util.null2String(request.getParameter("isAuthSuccess")); + + if (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 2) { //契约锁数据保护 + if (isNeedUpdate && !"".equals(uuidStr)) { + requestSecondAuthService.updateProtectDatas(Util.getIntValue(requestid, -1), workflowid, currentnodeid, uuidStr); + } + } else if (protectType == SecondAuthType.CAAuth.getId()|| + (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 1)) { //CA数据保护 + if ("1".equals(isProtectSuccess) && !"".equals(authKey)) { + requestSecondAuthService.updateProtectDatas(Util.getIntValue(requestid, -1), workflowid, currentnodeid, authKey); + } + } + + //契约锁二次认证或者契约锁数据保护 + if ((secondAuthType == SecondAuthType.QYS.getId() && "1".equals(isAuthSuccess)) || + (protectType == SecondAuthType.QYS.getId() && (isNeedUpdate || (qysSignWay == 1 && "1".equals(isProtectSuccess))))){ + String sealId = Util.null2String(request.getParameter("qysSealId")); + String sealImg = Util.null2String(request.getParameter("qysSealImg")); + String certDetails = Util.null2String(request.getParameter("qysCertDetails")); + + //查询本次操作插入的日志的id + int logId = SecondAuthBiz.getLogId(Util.getIntValue(requestid, -1), workflowid, currentnodeid, user); + + //保存契约锁验证的盖章信息 + Map authParam = new HashMap(); + authParam.put("sealId", sealId); + authParam.put("sealImg", sealImg); + authParam.put("certDetails", certDetails); + authParam.put("logid", logId); + authParam.put("requestId", requestid); + SecondAuthBiz.saveQYSSignature(authParam, user); + } + } + + + //传阅 + if (tmpforwardflag == 4) { + this.setChuanyueInfo(requestid,workflowid,currentnodeid,isSubmitSign,isChuanyue,isRemind,chuanyueItems); + } + + //转发 || 传阅 + if(forwardflag == 1 || tmpforwardflag == 4){ + this.setRequestLogUUId(requestid,currentnodeid); + } + + + + String configsql = "select notseeeachother from workflow_flownode where workflowid = " + workflowid + " and nodeid = " + currentnodeid; + rs.executeSql(configsql); + int notseeeachother = 0; + if(rs.next()){ + notseeeachother = rs.getInt(1); + } + if (!"".equals(currentString) && currentString.indexOf("~~current~~") > -1 && notseeeachother == 1) { + String[] arraycurrent = Util.TokenizerString2(currentString, "~~current~~"); + String currentdate = arraycurrent[0]; + String currenttime = arraycurrent[1]; + RequestSignRelevanceWithMe reqsignwm = new RequestSignRelevanceWithMe(); + reqsignwm.inertRelevanceInfo(workflowid + "", requestid, currentnodeid + "", "7", currentdate, currenttime, userid, remark, (("" != forwardresourceids) ? forwardresourceids + .substring(1) : forwardresourceids)); + + int nodeattr = wfLinkInfo.getNodeAttribute(currentnodeid); + Set branchNodeSet = new HashSet(); + if (nodeattr == 2) { // 分支中间节点 + String branchnodes = ""; + branchnodes = wfLinkInfo.getNowNodeids(Util.getIntValue(requestid, -1)); + if (!"".equals(branchnodes)) { + String[] strs = branchnodes.split(","); + for (int k = 0; k < strs.length; k++) { + String nodestr = strs[k]; + if (!"-1".equals(nodestr)) { + branchNodeSet.add(nodestr); + } + } + } + } + /** 日志的权限处理,start */ + if (!"3".equals(currnodetype0) && (currentnodeid == currnodeid0 || branchNodeSet.contains(currentnodeid + ""))) { // 非归档节点,且是在当前节点上的转发操作 + + RequestRemarkRight remarkRight = new RequestRemarkRight(); + remarkRight.setRequestid(Util.getIntValue(requestid, -1)); + remarkRight.setNodeid(currentnodeid); + remarkRight.setWorkflow_currentid(wfcurrrid); + String logtype = "7"; + if (forwardflag == 2) { // 征询 + logtype = "a"; + } else if (forwardflag == 3) { // 转办 + logtype = "h"; + } else if(tmpforwardflag == 4){//传阅 + logtype = "c"; + } else if(forwardflag == 5){//征询转办 + logtype = "z"; + } else { // 转发 + logtype = "7"; + } + String rightSql = " select logid from workflow_requestlog where workflowid = " + workflowid + " and nodeid = " + currentnodeid + " and logtype = '" + logtype + + "' and requestid = " + requestid + " and operatedate = '" + currentdate + "' and operatetime = '" + currenttime + "' and operator = " + userid; + recordSet.executeSql(rightSql); + int logid = -1; + if (recordSet.next()) { + logid = recordSet.getInt("logid"); + } + String receiversids = ""; // 授予权限的人员 + + // 这里将转发的接收人,以及接收人的代理人都授权,避免代理人收回代理权限时,还需要处理签字意见的权限问题 + for (Object myuserid : resourceids) { + receiversids += "," + myuserid; + } + if (receiversids.length() > 0) { + receiversids = receiversids.substring(1); + } + remarkRight.saveRemarkRight(logid, receiversids); + } + /** 日志的权限处理,end */ + } + int nodeattr = wfLinkInfo.getNodeAttribute(currentnodeid); + if (forwardflag == 3 && nodeattr == 2) { + new RequestManager().CheckUserIsLasttimes(Util.getIntValue(requestid), currentnodeid, user); + } + + /* + * recordSet.executeProc("workflow_RequestLog_Insert",Procpara); if + * (recordSet.next()) { String currentdate = recordSet.getString(1); + * String currenttime = recordSet.getString(2); + * + * RequestSignRelevanceWithMe reqsignwm = new + * RequestSignRelevanceWithMe(); + * reqsignwm.inertRelevanceInfo(workflowid+"", requestid, + * currentnodeid+"", "7", currentdate, currenttime, userid, remark, + * forwardresourceids.substring(1)); } + */ + + if (requestLogId > 0) {// 表单签章 + recordSet.executeSql("select imagefileid from workflow_formsignremark where requestlogid=" + requestLogId); + recordSet.next(); + int imagefileid = Util.getIntValue(recordSet.getString("imagefileid"), 0); + if (imagefileid > 0) + remark = "" + requestLogId; + } + //提交反馈 + RequestBaseBiz.operateFeedBack(Util.getIntValue(requestid),workflowid,extendnodeid,user.getUID(),remark,currentDate,currentTime); + + // 处理之前节点操作人对附件的权限 TD10577 Start + String[] docids = Util.TokenizerString2(annexdocids, ","); + for (int cx = 0; i < docids.length; i++) { + int docid_tmp = Util.getIntValue(docids[cx]); + for (Object rightResourceid_tmpObj : rightResourceidList) { + int rightResourceid_tmp = Util.getIntValue((String) rightResourceid_tmpObj, 0); + try { + ShareinnerInfo shareInfo = new ShareinnerInfo(); + shareInfo.AddShare(docid_tmp, 1, rightResourceid_tmp, 10, 1, 1, rightResourceid_tmp, "ShareinnerDoc", 1); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + // 处理之前节点操作人对附件的权限 TD10577 End + + // 保存签字意见提交人当前部门 + + // String departmentid = + // Util.null2String(ResourceComInfo.getDepartmentID(""+userid)); + // if(!departmentid.equals("")) rs.executeSql("update + // workflow_requestlog set operatorDept="+departmentid+" where + // requestid="+requestid+" and nodeid="+currentnodeid+" and + // logtype='7' and operator="+userid+" and + // operatortype="+operatortype); + + if (!signdocids.equals("")) { + recordSet.executeSql("select docids from workflow_requestbase where requestid=" + requestid); + recordSet.next(); + String newdocids = Util.null2String(recordSet.getString("docids")); + if (!newdocids.equals("")) + newdocids = newdocids + "," + signdocids; + else + newdocids = signdocids; + recordSet.executeSql("update workflow_requestbase set docids='" + newdocids + "' where requestid=" + requestid); + } + RequestAddShareInfo rasi = new RequestAddShareInfo(); + rasi.SetNextNodeID(currentnodeid); + + //处理模板为只读,转办后附件可以编辑 + String result = ""; + String isEdit = ""; + String sql1 = "select * from workflow_nodeform where nodeid = "+currentnodeid+" and exists (select 1 from workflow_billfield where workflow_nodeform.fieldid = workflow_billfield.id and workflow_billfield.fieldhtmltype='6' and type in(1,2))"; + recordSet.executeSql(sql1); + while(recordSet.next()){ + isEdit = Util.null2String(recordSet.getString("isedit")); + } + if("0".equals(isEdit) || "".equals(isEdit)){ + result = "false"; + }else{ + result = "true"; + } + + if (forwardflag == 1) { + rasi.addShareInfo(requestid, new ArrayList(resourceids), "false", forwardflag == 2, "1".equals(wffmanager.getIsBeForwardModify())); + } else if(forwardflag == 3){//转办 + rs.executeQuery("select isbill,formid from workflow_base where id =" +workflowid); + int isbill = 0; + int formid = 0; + String billtablename = ""; + if(rs.next()){ + isbill = rs.getInt("isbill"); + formid = rs.getInt("formid"); + } + if (isbill == 1) { + rs.executeSql("select tablename from workflow_bill where id = " + formid); // 查询工作流单据表的信息 + if (rs.next()) + billtablename = rs.getString("tablename"); // 获得单据的主表 + } + RequestAddShareInfo shareinfo = new RequestAddShareInfo(); + shareinfo.setRequestid(Util.getIntValue(requestid)); + shareinfo.SetWorkFlowID(workflowid); + shareinfo.SetNowNodeID(currentnodeid); + shareinfo.SetNextNodeID(currentnodeid); + shareinfo.setIsbill(isbill); + shareinfo.setUser(user); + shareinfo.SetIsWorkFlow(1); + shareinfo.setBillTableName(billtablename); + shareinfo.setReCalculatePermission(true); + shareinfo.addShareInfo(); + }else { + rasi.addShareInfo(requestid, new ArrayList(resourceids), result, forwardflag == 2 || forwardflag == 5, "1" + .equals(wffmanager.getIsBeForwardModify())); + if(forwardflag == 5){ + ArrayList currentUser = new ArrayList(); + currentUser.add(userid); + rasi.addShareInfo("" + requestid, currentUser, "false", true, false, true); // 收回征询转办人的文档编辑权限 + } + } + + // added by pony on 2006-05-31 for Td4442 + new RemarkOperaterManager().processRemark(workflowid, requestid, currentnodeid, user, fu); + new RequestAddOpinionShareInfo().processOpinionRemarkResourcesShare(workflowid, requestid, new ArrayList(resourceids), user, currentnodeid); + // added end. + // recordSet.executeSql("update workflow_requestbase set + // lastoperator="+userid+",lastoperatortype="+usertype+",lastoperatedate='"+CurrentDate+"',lastoperatetime='"+CurrentTime+"' + // where requestid="+requestid); + // 表单字段数据未做修改,不更新流程最后操作数据 by wcc +// if (currentnodetype.equals("3")){// 如果流程已归档,不修改lastoperatedate和lastoperatetime的值 +// +// recordSet.executeSql("update workflow_requestbase set lastoperator=" + userid + ",lastoperatortype=" + usertype + " where requestid=" + requestid); +// apidatas.put("lastoperator", userid); +// +// }else{ +// recordSet.executeSql("update workflow_requestbase set lastoperator=" + userid + ",lastoperatortype=" + usertype + ",lastoperatedate='" + CurrentDate + "',lastoperatetime='" +// + CurrentTime + "' where requestid=" + requestid); +// apidatas.put("lastoperator", userid); +// apidatas.put("lastoperatedate", CurrentDate); +// apidatas.put("lastoperatetime", CurrentTime); +// } + try{ + if(forwardflag == 3){ + new DocCheckInOutUtil().docCheckInWhenRequestOperation(user,Util.getIntValue(requestid,0),request); + } + }catch(Exception e){ + + } + // TD9144 弹出转发窗口,提交转发请求后,关闭该窗口,并刷新原页面 + + // 查询当前请求的一些基本信息 + // 转发,转办,意见征询都要生成缓存文件 + if(forwardflag == 1){ + + try { + recordSet.executeQuery("select isbill,formid from workflow_base where id = ? ", workflowid); + if (recordSet.next()) { + int isbill = recordSet.getInt("isbill"); + int formid = recordSet.getInt("formid"); + recordSet.executeProc("workflow_Requestbase_SByID", requestid + ""); + if (recordSet.next()) { + String oldformsignaturemd5 = Util.null2String(recordSet.getString("formsignaturemd5")); + + // 推送处理start + //WFPathUtil wfutil = new WFPathUtil(); + + if (tmpid.length() > 0) { + String[] tmpids = Util.TokenizerString2(tmpid, ","); + for (Object tmpidObj : tmpids) { + int tmpuserid = Util.getIntValue((String) tmpidObj, 0); + if (tmpuserid > 0) { + User userTemp = User.getUser(tmpuserid, Integer.valueOf(usertype)); + wfutil.getFixedThreadPool().execute( + new RequestPreProcessing("0", workflowid, isbill, formid, Integer.valueOf(requestid), requestname, oldformsignaturemd5, currentnodeid, currentnodeid, + false, "0", userTemp, true)); + } + } + } + // 推送处理end + } + } + } catch (Exception e) {} + + } + } + rolm.flowTransSubmitAfter(); + //提醒 + resourceids.removeAll(beAgentUser); + String remindTypes = Util.null2String(fu.getParameter("remindTypes")); + this.doRemind(remindTypes, resourceids ,Util.null2String(workflowid),requestid,src); + apidatas.put("forwardflag", forwardflag); + apidatas.put("success", true); + if(forwardflag == 3) {//转办,更新超时任务 + String isnew = new BaseBean().getPropValue("WorkflowOvertimeIsNew" , "isNew"); + if("1".equals(isnew)) + OvertimeBiz.getInstance().addOvertimeTaskThread(Util.getIntValue(requestid,0), workflowid, currentnodeid); + } + + if (forwardflag == 2 && isOpenTakOvertime) { + new TakEndBiz().setTakOvertime(Util.getIntValue(requestid), user.getUID(), wfcurrrid, takOverHours, takOverMins); + } + + if(forwardflag ==1 ) this.updateReplyNotice(isShowReplyNotice,userid,workflowid); + + // 处理自定义名称 + String remarkName =null; + String message = null; // 要返回的信息 + remarkName = getRemarkName(forwardflag, workflowid, currentnodeid); + if(remarkName != null && !remarkName.equals("")){ // 用户设置了自定义名称 + message = SystemEnv.getHtmlLabelName(30045, user.getLanguage()) + remarkName + SystemEnv.getHtmlLabelName(15242,user.getLanguage()); + apidatas.put("message",message); + } + +// if (forwardflag == 5) { +// rs.executeQuery("select 1 from workflow_currentoperator where requestid = ? and userid = ? and isremark = '1' and takisremark = '2'", requestid, user.getUID()); +// if (rs.next()) { +// //征询转办后, 如果还存在征询在待办,则将之前的消息置为未处理状态 +// +// } +// } + + //转发 对接门户 + if(forwardflag == 1){ + try { + Class clazz = Class.forName("com.customization.dito.sendtodo.SendPortalForwardCmd"); + if (clazz.getMethod("forwardSendPortal", new Class[]{String.class, int.class, User.class}) != null) { + Method method = clazz.getMethod("forwardSendPortal", new Class[]{String.class, int.class, User.class}); + + Object newInstance = clazz.newInstance(); + method.invoke(newInstance, requestid, currentnodeid, user); + } + }catch (Exception e){ + e.printStackTrace(); + rs.writeLog(e); + } + } + //转办 对接门户 + if(forwardflag == 3) { + try { + Class clazz = Class.forName("com.customization.dito.sendtodo.SendPortalForwardCmd"); + if(clazz.getMethod("transferSendPortal",new Class[]{String.class,int.class,User.class}) != null) { + Method method = clazz.getMethod("transferSendPortal",new Class[]{String.class,int.class,User.class}); + + Object newInstance = clazz.newInstance(); + method.invoke(newInstance,requestid,currentnodeid,user); + } + }catch (Exception e){ + e.printStackTrace(); + rs.writeLog(e); + } + } + + + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (RuntimeException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return apidatas; + } + + /*** + * + * @param requestname + * @param operator + * @param operatorTime + * @return + */ + public Map getEmailTemplate(String requestname,String operator,String operatorTime){ + Map dataMap = new HashMap(); + String notificationSubject = "You have a new To-Read - <"+requestname+"> "; + String notificationContent = operator + " created this task on "+operatorTime+"\n" + + " Please handle it in time."; + dataMap.put("notificationSubject",notificationSubject); + dataMap.put("notificationContent",notificationContent); + return dataMap; + } + + public String getShortMessageTitle(String messageTitle) { + if (messageTitle.length() > 20) { + messageTitle = messageTitle.substring(0, 17) + "..."; + } + return messageTitle; + } + + /*** + * + * @param id + * @return + */ + public String getNodeName(int id){ + RecordSet rs = new RecordSet(); + String name = ""; + rs.executeQuery(" select nodename from workflow_nodebase where id = ?",id); + while (rs.next()){ + name = Util.null2String(rs.getString("nodename")); + } + return name; + } + + /** + * 转发时,保存用户自定义的批注是否提醒设置 + * @param isShowReplyNotice + * @param userid + * @param workflowid + */ + private void updateReplyNotice(String isShowReplyNotice,String userid,int workflowid){ + + RecordSet rs = new RecordSet(); + rs.executeQuery("select 1 from workflow_user_config where userid= ? and workflowid = ? and conf_type = 'forward' and conf_key='replyNotice' ",userid,workflowid); + if(rs.next()){ + //更新 + rs.executeUpdate("update workflow_user_config set conf_val="+isShowReplyNotice+" where userid= ? and workflowid = ? and conf_type = 'forward' and conf_key='replyNotice'",userid,workflowid); + }else{ + //全局值 + rs.executeQuery("select value from workflow_config where type= 'forward' and name='replyNotice'"); + if(rs.next()){ + String value = Util.null2String(rs.getString("value")); + if(value.equals(isShowReplyNotice)) return; + //插入 + rs.executeUpdate("insert into workflow_user_config(userid,conf_key,conf_type,conf_val,des,workflowid) values ("+userid+",'replyNotice','forward',"+isShowReplyNotice+",'',"+workflowid+")"); + } + + } + + } + @Override + public BizLogContext getLogContext() { + return null; + } + + /** + * 提醒 + * @param remindTypes + * @param resourceids + * @param wfId + * @param requestId + * @param submitType + */ + private void doRemind(String remindTypes,Set resourceids,String wfId,String requestId,String submitType){ + + Map params = new HashMap<>(); + + params.put("reminder", StringUtils.join(resourceids,",")); + params.put("requestId",requestId); + params.put("workflowId",wfId); + params.put("submitType",submitType); + RequestRemindBiz requestRemindBiz = new RequestRemindBiz(user); + String[] remindType = remindTypes.split(","); + try{ + for(String type : remindType){ + if(RemindTypeEnum.SMS.getCode().equals(type)){ + requestRemindBiz.requestRemind(params, RemindTypeEnum.SMS); + } + if(RemindTypeEnum.EMAIL.getCode().equals(type)){ + requestRemindBiz.requestRemind(params, RemindTypeEnum.EMAIL); + } + if(RemindTypeEnum.WECHAT.getCode().equals(type)){ + requestRemindBiz.requestRemind(params, RemindTypeEnum.WECHAT); + } + } + }catch (Exception e){} + + } + /** + * 传阅更新数据 + * @param requestid + * @param workflowId + * @param nodeid + * @param isSubmitSign + * @param isChuanyue + * @param isRemind + * @return + */ + private boolean setChuanyueInfo(String requestid, int workflowId, int nodeid,String isSubmitSign,String isChuanyue,String isRemind,List> chuanyueItems){ + for(List item : chuanyueItems){ + if(item.size() == 2){ + item.add(0); + item.add(wfcurrrid); + } + item.add("2"); + item.add(isSubmitSign); + item.add(isChuanyue); + item.add(isRemind); + item.add(workflowId); + item.add(nodeid); + item.add(requestid); + item.add(user.getUID()); + item.add(uuid); + } + RecordSetTrans rst = new RecordSetTrans(); + String sql = "insert into WORKFLOW_CHUANYUE(userid,usertype,currid,becurrid,type,isSubmitSign,isChuanyue,isRemind,WORKFLOWID,nodeid,requestid,resourceid,uuid) values(?,?,?,?,?,?,?,?,?,?,?,?,?) "; + try{ + rst.setAutoCommit(false); + rst.executeBatchSql(sql,chuanyueItems); + rst.commit(); + }catch(Exception e){ + e.printStackTrace(); + } + return true; + } + + private int setRequestLogUUId(String requestid,int nodeid){ + int requestLogId = -1; + RecordSet rs = new RecordSet(); + rs.executeQuery("select max(logid) from workflow_requestlog where requestid = ? and nodeid = ? and operator = ?",requestid,nodeid,user.getUID()); + if(rs.next()){ + requestLogId = rs.getInt(1); + } + if(requestLogId > 0){ + rs.executeUpdate("update workflow_requestlog set uuid = ? where requestid = ? and nodeid = ? and operator = ? and logid = ?",uuid,requestid,nodeid,user.getUID(),requestLogId); + } + return requestLogId; + } + + private String getRemark(int workflowid,int nodeid,String remark){ + if("".equals(remark)){ + RecordSet rs = new RecordSet(); + rs.executeQuery("select newname7 from workflow_nodeCustomNewMenu where menutype = -24 and wfid = ? and nodeid = ?",workflowid,nodeid); + if(rs.next()){ + String newname7 = rs.getString(1); + remark = Util.processBody(Util.null2String(rs.getString(1)).trim(), + "" + user.getLanguage()); + } + } + return remark; + } + + /** + * 获取操作的自定义名称 + * @param forwardflag + * @param workflowid + * @param currentnodeid + * @return + */ + public String getRemarkName(int forwardflag, int workflowid, int currentnodeid) { + String remarkName = ""; + if(1 == forwardflag) {//转发 + remarkName = MenuOrderSetUtil.getLogName(workflowid,currentnodeid,user.getLanguage(),SystemMenuType.FORWARD ); + }else if(3 == forwardflag){ // 转办 + remarkName = MenuOrderSetUtil.getLogName(workflowid,currentnodeid,user.getLanguage(),SystemMenuType.TURN_TO ); + }else if(2 == forwardflag){ //意见征询 + remarkName = MenuOrderSetUtil.getLogName(workflowid,currentnodeid,user.getLanguage(),SystemMenuType.REMARKADVICE); + } else if (5 == forwardflag) {//征询转办 + remarkName = MenuOrderSetUtil.getLogName(workflowid,currentnodeid,user.getLanguage(),SystemMenuType.TAKFORWARD); + } + return remarkName; + } + + +} diff --git a/src/com/engine/workflow/cmd/requestForm/RemarkSubmitCmd.java b/src/com/engine/workflow/cmd/requestForm/RemarkSubmitCmd.java new file mode 100644 index 00000000..3e7d3a6b --- /dev/null +++ b/src/com/engine/workflow/cmd/requestForm/RemarkSubmitCmd.java @@ -0,0 +1,896 @@ +package com.engine.workflow.cmd.requestForm; + +import com.api.workflow.service.RequestAuthenticationService; +import com.api.workflow.util.ServiceUtil; +import com.cloudstore.dev.api.util.Util_TableMap; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.AttrSignatureUtil; +import com.engine.core.interceptor.CommandContext; +import com.engine.hrm.biz.HrmClassifiedProtectionBiz; +import com.engine.workflow.biz.SecondAuthBiz; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.biz.operationMenu.MenuDefaultSignBiz; +import com.engine.workflow.biz.requestForm.RequestRemindBiz; +import com.engine.workflow.biz.requestForm.RequestSecLevelBiz; +import com.engine.workflow.biz.requestForm.SubmitErrorMsgBiz; +import com.engine.workflow.biz.requestForm.TakReplyBiz; +import com.engine.workflow.biz.workflowCore.RequestBaseBiz; +import com.engine.workflow.constant.OperationMenuType; +import com.engine.workflow.constant.RemindTypeEnum; +import com.engine.workflow.constant.SecondAuthType; +import com.engine.workflow.constant.SignSource; +import com.engine.workflow.constant.requestForm.PromptType; +import com.engine.workflow.constant.requestForm.RequestConstant; +import com.engine.workflow.constant.requestForm.RequestExecuteType; +import com.engine.workflow.entity.requestForm.RequestOperationResultBean; +import com.engine.workflow.service.RequestSecondAuthService; +import com.engine.workflow.service.impl.RequestSecondAuthServiceImpl; +import com.engine.workflow.util.ChuanyueUtil; +import com.engine.workflow.util.SecondAuthUtil; +import com.engine.workflow.util.WfDataCorrectionUtils; +import com.engine.workflow.util.WorkflowOvertimeSettingsUtil; +import com.google.common.base.Strings; +import org.json.JSONObject; +import weaver.conn.RecordSet; +import weaver.file.FileUpload; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.mobile.webservices.workflow.soa.RequestPreProcessing; +import weaver.systeminfo.SystemEnv; +import weaver.workflow.agent.AgentManager; +import weaver.workflow.msg.MsgPushUtil; +import weaver.workflow.msg.entity.MsgEntity; +import weaver.workflow.request.*; +import weaver.workflow.request.entity.RequestOperateEntityTableNameEnum; +import weaver.workflow.request.entity.RequestOperateTypeEnum; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.*; + + +/** + * 批注回复提交 + */ +public class RemarkSubmitCmd extends AbstractCommonCommand>{ + + private HttpServletRequest request; + + public HttpServletRequest getRequest() { + return request; + } + + private static final int SPACE_TIME_MILLIS = 2000;//两秒步长 + + public void setRequest(HttpServletRequest request) { + this.request = request; + } + + public RemarkSubmitCmd(HttpServletRequest request, User user){ + this.request = request; + this.user = user; + } + + public Map execute(CommandContext commandContext){ + Map result = new HashMap(); + try { + RequestOperationResultBean resultBean = this.getResult(); + result.put("data", resultBean); + Util_TableMap.setObjVal(Util.null2String(resultBean.getResultInfo().get("sessionkey")), resultBean); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + public RequestOperationResultBean getResult() throws Exception { + + RequestOperationResultBean resultBean = new RequestOperationResultBean(); + RecordSet rs = new RecordSet(); + + FileUpload fu = new FileUpload(request); + String comemessage = Util.null2String(request.getParameter("comemessage")); + String userid = "" + user.getUID(); + int usertype = (user.getLogintype()).equals("1") ? 0 : 1; + int requestid = Util.getIntValue(fu.getParameter("requestid"), -1); + //代替session + AttrSignatureUtil attrSignatureUtil = new AttrSignatureUtil(user.getUID(), request.getHeader("user-agent")); + String _attributesString = Util.null2String(request.getParameter(RequestConstant.SIGNATURE_ATTRIBUTES_STR)); + String _attributesSignature = Util.null2o(request.getParameter(RequestConstant.SIGNATURE_SECRET_KEY)); + if(!attrSignatureUtil.verifySignature(_attributesString, _attributesSignature)) { + resultBean.setType(RequestExecuteType.FAILD); + resultBean.getResultInfo().put("requestid",requestid); + return resultBean; + } + + String src = Util.null2String(fu.getParameter("src")); + String iscreate = Util.null2String(fu.getParameter("iscreate")); + + //*********防重复提交验证************* + //小于时间间隔内,判定为重复提交 + String requestKey = new StringBuilder(String.valueOf(requestid)).append("_").append(user.getUID()).toString(); + String tokenValueCache = Util_TableMap.getVal(requestKey); + if(tokenValueCache != null && System.currentTimeMillis() - Long.parseLong(tokenValueCache) < SPACE_TIME_MILLIS) { + writeLog("RemarkSubmitCmd-----过滤重复提交 requestid = " + requestKey); + Util_TableMap.setVal(requestKey, System.currentTimeMillis()+"", 120); + resultBean.setType(RequestExecuteType.SUCCESS); + return resultBean; + } else { + Util_TableMap.setVal(requestKey, System.currentTimeMillis()+"", 120); + } + //*********防重复提交验证************* + int workflowid = Util.getIntValue(fu.getParameter("workflowid"), -1); + String workflowtype = Util.null2String(fu.getParameter("workflowtype")); + int nodeid = Util.getIntValue(fu.getParameter("nodeid"), -1); + String nodetype = Util.null2String(fu.getParameter("nodetype")); + String needwfback = Util.null2String(fu.getParameter("needwfback")); + String remark = Util.null2String(fu.getParameter("remark")); + int formid = Util.getIntValue(fu.getParameter("formid"), -1); + int isbill = Util.getIntValue(fu.getParameter("isbill"), -1); + int billid = Util.getIntValue(fu.getParameter("billid"), -1); + String requestname = Util.fromScreen3(fu.getParameter("requestname"), user.getLanguage()); + String requestlevel = Util.fromScreen(fu.getParameter("requestlevel"), user.getLanguage()); + String messageType = Util.fromScreen(fu.getParameter("messageType"), user.getLanguage()); + String isFromEditDocument = Util.null2String(fu.getParameter("isFromEditDocument")); + String submitNodeId = Util.null2String(fu.getParameter("submitNodeId")); + String Intervenorid = Util.null2String(fu.getParameter("Intervenorid")); + int isremark = Util.getIntValue(fu.getParameter("isremark"), -1); + int realIsReamrk = isremark; + String remarkLocation = Util.null2String(fu.getParameter("remarkLocation")); + boolean IsCanModify = "true".equals(attrSignatureUtil.getAttribute("IsCanModify")) ? true : false; + String ifchangstatus = WorkflowOvertimeSettingsUtil.getOverTimeSettingsEntity().getChangestatus() ; + int agentType = Util.getIntValue(Util.null2String(fu.getParameter("agentType"))); + int agentorByAgentId = Util.getIntValue(Util.null2String(fu.getParameter("agentorByAgentId"))); + + + String f_weaver_belongto_userid = request.getParameter("f_weaver_belongto_userid");// 需要增加的代码 + String f_weaver_belongto_usertype = request.getParameter("f_weaver_belongto_usertype");// 需要增加的代码 + + String sessionkey = workflowid + "_" + nodeid + "_" + user.getUID() + "_" + System.currentTimeMillis(); + Map resultInfo = resultBean.getResultInfo(); + resultInfo.put("f_weaver_belongto_userid", f_weaver_belongto_userid); + resultInfo.put("f_weaver_belongto_usertype", f_weaver_belongto_usertype); + resultInfo.put("requestid", requestid); + resultInfo.put("sessionkey", sessionkey); + + if (Util.getIntValue(fu.getParameter("takisremark"), -1) == 2 && agentType == 1) {//被代理人意见征询回复提交, 收回代理 + AgentManager agentManager = new AgentManager(user); + agentManager.agentBackRequest(agentorByAgentId, user.getUID(), workflowid + "", requestid); + } + + if (src.equals("") || workflowid == -1 || nodeid == -1 || nodetype.equals("")) { + resultBean.setType(RequestExecuteType.SEND_PAGE); + resultBean.setSendPage(weaver.general.GCONST.getContextPath()+"/notice/RequestError.jsp"); + return resultBean; + } + + + RequestAuthenticationService authenticationService = new RequestAuthenticationService(); + authenticationService.setUser(user); + boolean hasRight = authenticationService.getRequestUserRight(null, requestid); + if (!hasRight) { + resultBean.setType(RequestExecuteType.FAILD); + resultBean.setMessageInfo(SubmitErrorMsgBiz.getMsgInfo(request, user, "1", "")); + resultBean.getResultInfo().put("requestid",requestid); + return resultBean; + } + + Map authInfo = authenticationService.getAuthInfo(); + int isreamrk = Util.getIntValue(Util.null2String(authInfo.get("isremarkForRM"))); + //**********加个注释,强制编译下 + if(!(isreamrk == 1 || isreamrk == 0 || isreamrk == 9 || isreamrk==11)) { + resultBean.setType(RequestExecuteType.FAILD); + Map message = new HashMap(); + message.put("prompttype", PromptType.ERRORMSG.getType()); + message.put("title", SystemEnv.getHtmlLabelName(18015,user.getLanguage()) + SystemEnv.getHtmlLabelName(1454,user.getLanguage())); + resultBean.setMessageInfo(message); + return resultBean; + } + + int extendnodeid = FreeNodeBiz.getExtendNodeId(requestid,nodeid); + + RequestManager requestManager = new RequestManager(); + requestManager.setSrc(src); + requestManager.setIscreate(iscreate); + requestManager.setRequestid(requestid); + requestManager.setWorkflowid(workflowid); + requestManager.setWorkflowtype(workflowtype); + requestManager.setIsremark(isremark); + requestManager.setFormid(formid); + requestManager.setIsbill(isbill); + requestManager.setBillid(billid); + requestManager.setNodeid(nodeid); + requestManager.setNodetype(nodetype); + requestManager.setRequestname(requestname); + requestManager.setRequestlevel(requestlevel); + requestManager.setRemark(remark); + requestManager.setRequest(fu); + requestManager.setSubmitNodeId(submitNodeId); + requestManager.setIntervenorid(Intervenorid); + requestManager.setRemarkLocation(remarkLocation); + requestManager.setMessageType(messageType); + requestManager.setIsFromEditDocument(isFromEditDocument); + requestManager.setUser(user); + requestManager.setTakisremark(Util.getIntValue(fu.getParameter("takisremark"), -1)); + requestManager.setCanModify(IsCanModify); + boolean savestatus = requestManager.saveRequestInfo(); + requestid = requestManager.getRequestid(); + if (!savestatus) { + if (requestid != 0) { + String message = requestManager.getMessage(); + message = "".equals(message) ? "1" : message; + resultBean.setType(RequestExecuteType.FAILD); + resultBean.setMessageInfo(SubmitErrorMsgBiz.getMsgInfo(request, user, message, requestManager.getMessagecontent())); + resultBean.getResultInfo().put("requestid",requestid); + return resultBean; + } + } + + + /**======================流程数据加密处理========================*/ + String isCAAuth = Util.null2String(request.getParameter("isCAAuth")); //是否是CA认证,主要是需要CA认证时的参数 + String CAKey = Util.null2String(request.getParameter("CAKey")); //缓存提交时的数据的key,主要是需要CA认证时的参数 + int protectType = Util.getIntValue(Util.null2String(request.getParameter("protectType")), 0); //二次认证认证成功后的参数,数据保护的方式 + int secondAuthType = Util.getIntValue(Util.null2String(request.getParameter("secondAuthType")), 0); //二次认证认证成功后的参数,二次认证的方式 + int qysSignWay = Util.getIntValue(Util.null2String(request.getParameter("qysSignWay")), 0); //契约锁认证的方式,1:ukey,2:契约锁服务 + String uuidStr = ""; + boolean isNeedUpdate = false; + RequestSecondAuthService requestSecondAuthService = com.engine.common.util.ServiceUtil.getService(RequestSecondAuthServiceImpl.class, user); + if (savestatus) { + if ("1".equals(isCAAuth)) { //需要CA认证,保存后不提交流程,直接返回 + //先保存签字意见 + requestManager.setIsremark(0); + requestManager.setSrc("save"); + requestManager.saveRequestLog2(); + + resultBean.setType(RequestExecuteType.SUCCESS); + resultInfo.put("isCAAuth", isCAAuth); + resultInfo.put("CAKey", CAKey); + return resultBean; + } else if (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 2) { //契约锁数据保护 + String tempRemark = requestManager.getRemark(); + Map protectResult = requestSecondAuthService.protectDatas(requestid, workflowid, formid, isbill, nodeid, tempRemark); + String protectSuccess = Util.null2String(protectResult.get("success")); + if ("0".equals(protectSuccess)) { //说明数据保护失败 + resultBean.setType(RequestExecuteType.FAILD); + + String protectMsg = Util.null2String(protectResult.get("message")); + resultBean.setMessageInfo(SecondAuthUtil.getErrorMsg(user, protectMsg)); + return resultBean; + } else if ("1".equals(protectSuccess)) { + isNeedUpdate = true; + uuidStr = Util.null2String(protectResult.get("uuid")); + } + } + } + + int currid = -1; + int takisremark = -1; + int handleforwardid = -1; + String zsql = ServiceUtil.calculateCurrentNodeSql(String.valueOf(requestid),Util.getIntValue(userid),usertype); + rs.executeQuery(zsql); + if (rs.next()) { + takisremark = Util.getIntValue(rs.getString("takisremark")); + handleforwardid = Util.getIntValue(rs.getString("handleforwardid")); + currid = Util.getIntValue(rs.getString("id")); + } + + RequestOperationMsgManager romm = new RequestOperationMsgManager(); + List requestMsgEntity = null; + if(handleforwardid <= 0 && isremark != 11 && isremark != 1){ + requestMsgEntity = romm.getForwardReplyMsg(String.valueOf(requestid),userid); //抄送回复消息 + }else if(handleforwardid <= 0 && realIsReamrk == 1) { + requestMsgEntity = romm.forwardReplyNotice(requestid,user); //转发批注 + }else if(isremark == 11){ + requestMsgEntity = romm.getChuanyueMsg(requestid,userid,nodeid,0);//传阅批示 + } + + if (takisremark == 2 && HrmClassifiedProtectionBiz.isOpenClassification()) {//意见征询回复时,对征询人做密级校验 + List userIds = this.getForwardUserId(rs,requestid,nodeid,userid,false); + String userId = userIds.isEmpty() ? "" : userIds.get(0); + int userSecLevel = Util.getIntValue(new HrmClassifiedProtectionBiz().getMaxResourceSecLevelById2(userId)); + int requestSecLevel = new RequestSecLevelBiz().getSecLevelByRequestId(requestid+""); + if (requestSecLevel < userSecLevel) { + + StringBuffer errorInfoMsgBuffer = new StringBuffer(); + + String nextnodename = WorkflowRequestMessage.getWorkflowNodename(nodeid); + WorkflowRequestMessage.getNodeErrorMsgTitle(errorInfoMsgBuffer, nextnodename, user.getLanguage()); + + String messageContent = ""; + + try { + ResourceComInfo rci = new ResourceComInfo(); + messageContent = rci.getLastname(userId); + } catch (Exception e) { + e.printStackTrace(); + } + + messageContent = errorInfoMsgBuffer.toString() + WorkflowRequestMessage.getBoldInfo(messageContent) + " " + SystemEnv.getHtmlLabelName(501273, user.getLanguage()); + + JSONObject msgInfo = WorkflowRequestMessage.getBottomInfo(SystemEnv.getHtmlLabelName(126540,user.getLanguage()),workflowid,WorkflowRequestMessage.WF_NODE_SET); + msgInfo.put("details", messageContent); + + resultBean.setType(RequestExecuteType.FAILD); + resultBean.setMessageInfo(SubmitErrorMsgBiz.getMsgInfo(request, user, "126221", msgInfo.toString())); + resultBean.getResultInfo().put("requestid",requestid); + + //String sessionkey = workflowid + "_" + nodeid + "_" + user.getUID() + "_" + System.currentTimeMillis(); + //resultBean.getResultInfo().put("sessionkey", sessionkey); + //Util_TableMap.setObjVal(sessionkey, resultBean); + return resultBean; + } + } + + RequestOperationLogManager rolm = new RequestOperationLogManager(requestManager); + rolm.setLastNodetype(nodeid); + rolm.flowTransStartBefore(); + int optLogid = -1; + // 强制收回 + int wfcuroptid = -1; + if (isremark == 9) { + rs.executeQuery("select id from workflow_currentoperator where requestid = ? and userid = ? and usertype = ? and isremark = ?",requestid,userid,usertype,isremark); + if (rs.next()) { + wfcuroptid = Util.getIntValue(rs.getString(1)); + optLogid = rolm.getOptLogID(wfcuroptid); + } + } + + char flag = Util.getSeparator(); + // 提交 + if (isremark == 9) { + if (!"0".equals(needwfback)) { + this.workflow_CurOpe_UbyForward(rs, requestid, Util.getIntValue(userid), usertype, requestManager.getCurrentDate(), requestManager.getCurrentTime()); + } else { + this.workflow_CurOpe_UbyForwardNB(rs,requestid, Util.getIntValue(userid), usertype, requestManager.getCurrentDate(), requestManager.getCurrentTime()); + } + } else if (isremark != 11){ + if(isremark == 1 && takisremark != 2){ + //当操作者在同一节点同时是转发接收人以及抄送不需提交的抄送人,打开表单时,不会将抄送记录修改为已操作,在这里修改一下,进行批注时,将抄送记录修改为已操作 + rs.executeUpdate("update workflow_currentoperator set isremark= 2 where requestid = ? and userid = ? and usertype = ? and preisremark = '8' and isremark = 8 ",requestid,userid,usertype); + } + if (!"0".equals(needwfback)) { + rs.executeProc("workflow_CurOpe_UbySend", "" + requestid + flag + userid + flag + usertype + flag + isremark); + } else { + rs.executeProc("workflow_CurOpe_UbySendNB", "" + requestid + flag + userid + flag + usertype + flag + isremark); + } + } + + // 推送处理start + //new Thread(new RequestPreProcessing(workflowid, isbill, formid, requestid, requestname, "", nodeid, 0, false, "", user, true)).start(); + WFPathUtil wfutil = new WFPathUtil(); + wfutil.getFixedThreadPool().execute(new RequestPreProcessing(workflowid, isbill, formid, requestid, requestname, "", nodeid, 0, false, "", user, true)); + //提交反馈 + RequestBaseBiz.operateFeedBack(requestid,workflowid,extendnodeid,user.getUID(),remark,requestManager.getCurrentDate(),requestManager.getCurrentTime()); + String curnodetype = ""; + int currentnodeid = 0; + rs.executeSql("select currentnodetype,currentnodeid from workflow_Requestbase where requestid=" + requestid); + if (rs.next()) { + curnodetype = Util.null2String(rs.getString(1)); + currentnodeid = rs.getInt(2); + } + if (curnodetype.equals("3"))// 归档流程转发后,转发人或抄送人提交后到办结事宜。 + + rs.executeSql("update workflow_currentoperator set iscomplete=1 where userid=" + userid + " and usertype=" + usertype + " and requestid=" + requestid); + RequestLog requestlog = new RequestLog(); + requestlog.setRequest(fu); + + ////取数据库服务器的当前时间 || 和RequestManager统一,避免批注的时间和提交的时间不一致,导致先批注的签字意见显示在后提交的签字意见前面 + requestlog.setCurrentdate(requestManager.getCurrentDate()); + requestlog.setCurrenttime(requestManager.getCurrentTime()); + requestlog.setIsremark(isremark); + requestlog.setCurrId(currid); + + if("".equals(remark.trim())) { + OperationMenuType type = null; + if (isremark == 1) { + if(takisremark == 2) { + type = OperationMenuType.TAKING_OPINIONS; + } else { + type = OperationMenuType.FORSUB; + } + } else if (isremark == 9) { + type = OperationMenuType.CCSUB; + } + if(type != null) { + remark = Util.null2String(MenuDefaultSignBiz.getMenuDefaultSignMap(workflowid,nodeid,type)); + } + } + //语音附件 + int speechAttachment = Util.getIntValue(fu.getParameter("speechAttachment"),0); + String handWrittenSign = Util.null2String(request.getParameter("handWrittenSign"),""); + String fulltextannotation = Util.null2String(fu.getParameter("fulltextannotation")); + String speechAttachmente9 = Util.null2String(fu.getParameter("speechAttachmente9")); + String clientType = Util.null2String(fu.getParameter("clientType"), SignSource.PC_BROWSER.getType()); + + //传阅回复默认签字意见 + if(isremark==11)remark = getRemark(workflowid,currentnodeid,remark); + + + + String currentString = ""; + if (takisremark == 2) { + currentString = requestlog.saveLog2(workflowid, requestid, nodeid, "b", remark, user, clientType, speechAttachment, handWrittenSign, "", remarkLocation,fulltextannotation,speechAttachmente9); // 意见征询 + } else if (handleforwardid > 0) { + currentString = requestlog.saveLog2(workflowid, requestid, nodeid, "j", remark, user, clientType, speechAttachment, handWrittenSign, "", remarkLocation,fulltextannotation,speechAttachmente9); // 转办 + } else { + currentString = requestlog.saveLog2(workflowid, requestid, nodeid, isremark==11?"y":"9", remark, user, clientType, speechAttachment, handWrittenSign, "", remarkLocation,fulltextannotation,speechAttachmente9); + // 抄送需要提交 时, 添加 强制收回支持 + if (isremark == 9) { + rs.executeSql("select logid from workflow_requestlog where requestid = " + requestid + " and nodeid = " + nodeid + " and operator=" + user.getUID() + " and operatortype=" + usertype + + " and logtype = '9' order by operatedate, operatetime"); + if (rs.next()) { + int newlogid = rs.getInt(1); + if (newlogid > 0) { + // 向之前的日志中添加本条提交的记录, 方便在强制收回的时候能够收回 + rolm.addDetailLog(optLogid, RequestOperateEntityTableNameEnum.REQUESTLOG.getTableName(), newlogid, 0, "", "", ""); + } + } + } + } + + + /***================数据保护==============*/ + if (!"".equals(currentString) && currentString.indexOf("~~current~~") > -1) { + String authKey = Util.null2String(request.getParameter("authKey")); + String isProtectSuccess = Util.null2String(request.getParameter("isProtectSuccess")); + String isAuthSuccess = Util.null2String(request.getParameter("isAuthSuccess")); + + if (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 2) { //契约锁数据保护 + if (isNeedUpdate && !"".equals(uuidStr)) { + requestSecondAuthService.updateProtectDatas(requestid, workflowid, currentnodeid, uuidStr); + } + } else if (protectType == SecondAuthType.CAAuth.getId()|| + (protectType == SecondAuthType.QYS.getId()&&qysSignWay == 1)) { //CA数据保护 + if ("1".equals(isProtectSuccess) && !"".equals(authKey)) { + requestSecondAuthService.updateProtectDatas(requestid, workflowid, currentnodeid, authKey); + } + } + + //契约锁二次认证或者契约锁数据保护 + if ((secondAuthType == SecondAuthType.QYS.getId() && "1".equals(isAuthSuccess)) || + (protectType == SecondAuthType.QYS.getId() && (isNeedUpdate || (qysSignWay == 1 && "1".equals(isProtectSuccess))))) { + String sealId = Util.null2String(request.getParameter("qysSealId")); + String sealImg = Util.null2String(request.getParameter("qysSealImg")); + String certDetails = Util.null2String(request.getParameter("qysCertDetails")); + + //查询本次操作插入的日志的id + int logId = SecondAuthBiz.getLogId(requestid, workflowid, nodeid, user); + + //保存契约锁验证的盖章信息 + Map authParam = new HashMap(); + authParam.put("sealId", sealId); + authParam.put("sealImg", sealImg); + authParam.put("certDetails", certDetails); + authParam.put("logid", logId); + authParam.put("requestId", requestid); + SecondAuthBiz.saveQYSSignature(authParam, user); + } + } + + WFLinkInfo wflinkinfo = new WFLinkInfo(); + int nodeattr = wflinkinfo.getNodeAttribute(nodeid); + Set branchNodeSet = new HashSet(); + if (nodeattr == 2) { // 分支中间节点 + String branchnodes = ""; + branchnodes = wflinkinfo.getNowNodeids(requestid); + if (!"".equals(branchnodes)) { + String[] strs = branchnodes.split(","); + for (int k = 0; k < strs.length; k++) { + String nodestr = strs[k]; + if (!"-1".equals(nodestr)) { + branchNodeSet.add(nodestr); + } + } + } + } + + /** 日志权限的处理,非归档节点,且提交时的节点,跟流程当前节点相同才需要权限控制 */ + if (!"".equals(currentString) && currentString.indexOf("~~current~~") > -1 && !"3".equals(curnodetype) && (nodeid == currentnodeid || branchNodeSet.contains(nodeid + ""))) { + int wfcurrrid = Util.getIntValue((String) attrSignatureUtil.getAttribute("wfcurrrid"), 0); + if (wfcurrrid == 0) { + rs.executeSql("select isremark,isreminded,preisremark,id,groupdetailid,nodeid from workflow_currentoperator where requestid=" + requestid + " and userid=" + userid + " and usertype=" + + usertype + " order by isremark,id"); + while (rs.next()) { + String isremark_tmp = Util.null2String(rs.getString("isremark")); + wfcurrrid = Util.getIntValue(rs.getString("id")); + // 转发特殊处理,转发信息本人未处理一直需要处理即使流程已归档 + if (isremark_tmp.equals("1") || isremark_tmp.equals("5") || isremark_tmp.equals("7") || isremark_tmp.equals("9") || (isremark_tmp.equals("0") && !nodetype.equals("3"))) { + break; + } + if (isremark_tmp.equals("8")) { + break; + } + } + } + + String[] arraycurrent = Util.TokenizerString2(currentString, "~~current~~"); + String currentdate = arraycurrent[0]; + String currenttime = arraycurrent[1]; + RequestRemarkRight remarkRight = new RequestRemarkRight(); + remarkRight.setRequestid(requestid); + remarkRight.setNodeid(nodeid); + remarkRight.setWorkflow_currentid(wfcurrrid); + String logtype = "7"; + if (takisremark == 2) { // 征询 + logtype = "b"; + } else if (handleforwardid > 0) { // 转办 + logtype = "j"; + } else if (isremark == 11) { // 传阅批示 + logtype = "y"; + } else { // 转发 + logtype = "9"; + } + String rightSql = " select logid from workflow_requestlog where workflowid = " + workflowid + " and nodeid = " + nodeid + " and logtype = '" + logtype + "' and requestid = " + requestid + + " and operatedate = '" + currentdate + "' and operatetime = '" + currenttime + "' and operator = " + userid; + rs.executeSql(rightSql); + int logid = -1; + if (rs.next()) { + logid = rs.getInt("logid"); + } + String userids = ""; + remarkRight.saveRemarkRight(logid, userids); + } + + String logtype = "7"; + if (!"".equals(currentString) && currentString.indexOf("~~current~~") > -1) { + String[] arraycurrent = Util.TokenizerString2(currentString, "~~current~~"); + String currentdate = arraycurrent[0]; + String currenttime = arraycurrent[1]; + + if (takisremark == 2) { // 征询 + logtype = "b"; + } else if (handleforwardid > 0) { // 转办 + logtype = "j"; + } else { // 转发 + logtype = "9"; + } + RequestSignRelevanceWithMe reqsignwm = new RequestSignRelevanceWithMe(); + reqsignwm.inertRelevanceInfo(workflowid + "", requestid + "", currentnodeid + "", logtype, currentdate, currenttime, userid, remark); + } + + if(isremark==11 || takisremark == 2){ + String[] arraycurrent = Util.TokenizerString2(currentString, "~~current~~"); + String currentdate = Util.null2String(arraycurrent[0]); + String currenttime = Util.null2String(arraycurrent[1]); + ChuanyueUtil.executeProc4Chuanyue(workflowid,requestid,nodeid,user.getUID(),usertype,currentdate,currenttime,needwfback); + } + + if (takisremark == 2) {//暂不清楚为什么屏蔽这么久 + ArrayList resourceids = new ArrayList(); + resourceids.add(userid); + RequestAddShareInfo requestAddShareInfo = new RequestAddShareInfo(); + requestAddShareInfo.addShareInfo("" + requestid, resourceids, "false", true, false, true); // 收回被征询人的文档编辑权限 + + String forwardids = "";//记录需要做数据修正的forwardid + // 多个分叉中间点意见征询给同一人时, 需要找到当前所有的节点,判断是否存在意见征询动作 + WFLinkInfo wfLinkinfo = new WFLinkInfo(); + TakReplyBiz takOptionBiz = new TakReplyBiz(requestid, workflowid, user); + String takNodeIds = wfLinkinfo.getNowNodeids(requestid); + String taksql = "select id,takid,multiTakLevel, nodeid from workflow_currentoperator where requestid= " + requestid + " and nodeid in ( " + takNodeIds + ") and userid = " + userid + + " and preisremark='1' and takisremark = 2 order by userid,id"; + rs.executeSql(taksql); + RecordSet rs1 = new RecordSet(); + while (rs.next()) { + int beforwardid = Util.getIntValue(rs.getString("id")); + int beforwardNodeId = Util.getIntValue(rs.getString("nodeid")); + int forwardid = Util.getIntValue(rs.getString("takid")); + int multiTakLevel = Util.getIntValue(rs.getString("multiTakLevel"), 0); + //兼容老数据,workflow_currentoperator表中没存takid时,从workflow_forward中取 + if (forwardid <= 0) { + rs1.executeSql("select forwardid from workflow_forward where requestid = " + requestid + " and beforwardid = " + beforwardid); + rs1.next(); + forwardid = Util.getIntValue(rs1.getString("forwardid")); + } + + if (forwardid > 0) { // 找到征询人 + + if (multiTakLevel <= 0) {//添加回复人 + rs1.executeQuery("select 1 from workflow_currentoperator where isremark = 0 and takisremark = '-2' and id = ?", forwardid); + if(rs1.next()) { + takOptionBiz.getReplyToIds().add(forwardid); + } + } + + String sumBeforWardSql = "select * from workflow_currentoperator where requestid= " + requestid + " and nodeid = " + beforwardNodeId + + " and ((isremark=1 and preisremark='1') or istakout = 1) and takisremark = 2 and (id in (select beforwardid from workflow_forward where requestid=" + requestid + " and forwardid=" + + forwardid + " and beforwardid<>" + beforwardid + ") or takid = " + forwardid + ")"; + rs1.executeSql(sumBeforWardSql); + if (!rs1.next()) { // 判断是否所有被征询人都已回复 + forwardids += forwardid + ","; + String uptaksql2 = "update workflow_currentoperator set takisremark=0 where requestid= " + requestid + " and nodeid = " + beforwardNodeId + + " and isremark = 0 and takisremark = -2 and id=" + forwardid; + rs1.executeSql(uptaksql2); + //多重意见征询回复 + if (multiTakLevel > 0) { + takOptionBiz.doTakingReply(forwardid, multiTakLevel, beforwardid); + } else { + int forwardUserid = 0; + rs1.executeQuery("select userid from workflow_currentoperator where id = ?", forwardid); + if (rs1.next()) { + forwardUserid = Util.getIntValue(rs1.getString("userid"), 0); + } + + //调整islasttimes,让流程回到待办 + rs1.executeQuery("select id from workflow_currentoperator where islasttimes = 1 and requestid = ? and userid = ?", requestid, forwardUserid); + int count = rs1.getCounts();//一个requestid,userid存在islasttimes = 1的记录数量,只要不等于1说明需要修复 + int forwardid_temp = -1;//islasttimes = 1的记录与征询人的这条记录不相同,则需要修复 + if(rs1.next()){ + forwardid_temp = rs1.getInt("id"); + } + //增加需要进入修复逻辑的条件(增加条件的原因是因为很多客户再执行这段逻辑时,执行完第一句时,执行第二句就死锁了,导致出问题了) + if(count != 1 || forwardid_temp != forwardid){ + rs1.executeUpdate("update workflow_currentoperator set islasttimes = 0 where requestid = ? and userid = ? and id != ?", requestid, forwardUserid, forwardid); + rs1.executeUpdate("update workflow_currentoperator set islasttimes = 1 where id = ?", forwardid); + } + + // 如果意见征询接收人可以上传附件,需要对意见征询人赋权 + try { + RequestAddShareInfo shareinfo = new RequestAddShareInfo(); + shareinfo.setRequestid(requestid); + shareinfo.SetWorkFlowID(workflowid); + shareinfo.SetNowNodeID(nodeid); + shareinfo.SetNextNodeID(nodeid); + shareinfo.setIsbill(isbill); + shareinfo.setUser(user); + shareinfo.SetIsWorkFlow(1); + String billtablename = ""; + if (isbill == 1) { + rs1.executeSql("select tablename from workflow_bill where id = " + formid); + if (rs1.next()) + billtablename = rs1.getString("tablename"); + } + shareinfo.setBillTableName(billtablename); + shareinfo.setHaspassnode(false); + shareinfo.addShareInfo(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + rs1.executeQuery("select userid from workflow_currentoperator where id = ?",forwardid); + rs1.next(); + //修正A提交B,A再转发给B,B意见征询给C,C回复后,流程在B的已办问题 + String uptaksql2 = "update workflow_currentoperator set takisremark=0 , isremark = 1 where requestid= ? and userid = ? and nodeid not in ("+takNodeIds+") and isremark = 0 and takisremark = -2 and islasttimes = 0" ; + rs1.executeUpdate(uptaksql2,requestid,Util.null2String(rs1.getString("userid"))); + } + //意见征询回复后,更新签字意见的接收人 + takOptionBiz.updateRequestLog(); + //修正:意见征询人在currentoperator表有两条数据,意见征询时workflow_forward表存的forwardid不对,导致回复时更新takisremark更新错的情况,导致流程回不到待办 + WfDataCorrectionUtils.correctTakData(requestid,forwardids); + } + if("b".equals(logtype) || "9".equals(logtype) ){ + if("b".equals(logtype)){ + rolm.setSrc(RequestOperateTypeEnum.TAKEREPLY.getId()); + }else if("9".equals(logtype)){ + rolm.setSrc(RequestOperateTypeEnum.FORWARDREPLY.getId()); + } + rolm.flowTransSubmitAfter(); + } + + //意见征询的加强处理,防止被征询回复后,流程不在待办 + rs.executeQuery("select id from workflow_currentoperator where requestid = ? and isremark = '0' and takisremark = '-2'", requestid); + while (rs.next()) { + int tempId = rs.getInt(1); + if(!checkIsTakOut(requestid, tempId)) {//征询出去的记录都已回复,将此记录设置为已回复状态 + rs.executeUpdate("update workflow_currentoperator set takisremark = '0' where requestid = ? and id = ?", requestid, tempId); + } + } + if (takisremark == 2){ + this.remarkRemind(requestid,workflowid,src,fu,resultInfo,nodeid); + } + + if("1".equals(comemessage)){ + resultBean.setType(RequestExecuteType.SEND_PAGE); + resultBean.setSendPage(weaver.general.GCONST.getContextPath()+"/spa/workflow/index_mobx.jsp#/main/workflow/listDoing"); + }else{ + resultBean.setType(RequestExecuteType.SUCCESS); + } + new MsgPushUtil().pushMsg(requestMsgEntity); + + try { + Class clazz = Class.forName("com.customization.dito.sendtodo.SendPortalForwardCmd"); + if (clazz.getMethod("delTodoAddDoneSendPortal", new Class[]{String.class, int.class, User.class}) != null) { + Method method = clazz.getMethod("delTodoAddDoneSendPortal", new Class[]{String.class, int.class, User.class}); + + Object newInstance = clazz.newInstance(); + method.invoke(newInstance, requestid+"", currentnodeid, user); + } + }catch (Exception e){ + e.printStackTrace(); + rs.writeLog(e); + } + return resultBean; + } + + /** + * 检查当前记录是否处于意见征询出去的状态 + * @param id + * @return + */ + public boolean checkIsTakOut(int requestid, int id) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,isremark from workflow_currentoperator where requestid = ? and takid = ? and takisremark = '2'", requestid, id); + while (rs.next()) { + int tempId = rs.getInt(1); + String tempIsremark = rs.getString(2); + if ("1".equals(tempIsremark)) {//存在未回复的记录 + return true; + } else if(checkIsTakOut(requestid, tempId)){ + //isremark为2的情况,验证多级征询 + return true; + } + } + return false; + } + + /** + * 根据被转发\被意见征询人 找出转发\意见征询人 + * @param rs + * @param requestid + * @param nodeid + * @param userid 转发\被意见征询人 + * @return 转发\意见征询人 + */ + private List getForwardUserId(RecordSet rs,int requestid,int nodeid,String userid,boolean isShowReplyNotice){ + List forwardUserId = new ArrayList<>(); + //根据当前被征询人找出征询人 + rs.executeQuery("select id,takisremark from workflow_currentoperator where requestid = ? and nodeid = ? and userid = ? and isremark = 1", requestid, nodeid, userid); + List beforwardIds = new ArrayList<>(); + while(rs.next()){ + beforwardIds.add(Util.null2String(rs.getString("id"))); + } + if(beforwardIds.isEmpty()) return forwardUserId;; + List forwardIds = this.getForwardIds(rs,beforwardIds,requestid,isShowReplyNotice); + if(forwardIds.isEmpty()) return forwardUserId; + rs.executeQuery("select userid from workflow_currentoperator where " + Util.getSubINClause(String.join(",",forwardIds),"id","in")); + while (rs.next()){ + forwardUserId.add(Util.null2String(rs.getString("userid"))); + } + return forwardUserId; + } + + /** + * + * @param rs + * @param beforwardIds + * @param requestid + * @return + */ + private List getForwardIds(RecordSet rs,List beforwardIds,int requestid,boolean isShowReplyNotice){ + List forwardIds = new ArrayList<>(); + String sql = "select forwardid from workflow_forward where requestid = ? "; + if(isShowReplyNotice){ + sql += " and isShowReplyNotice = '1'"; + } + sql += " and "+ Util.getSubINClause(String.join(",",beforwardIds),"beforwardid","in"); + rs.executeQuery(sql, requestid); + + while(rs.next()){ + forwardIds.add(Util.null2String(rs.getString("forwardid"))); + } + return forwardIds; + } + + private String getRemark(int workflowid,int nodeid,String remark){ + if("".equals(remark) || "\n".equals(remark) ){ + RecordSet rs = new RecordSet(); + rs.executeQuery("select newname7 from workflow_nodeCustomNewMenu where menutype = -25 and wfid = ? and nodeid = ?",workflowid,nodeid); + if(rs.next()){ + String newname7 = rs.getString(1); + remark = Util.processBody(Util.null2String(rs.getString(1)).trim(), + "" + user.getLanguage()); + } + } + return remark; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + + + /** + * PROCEDURE workflow_CurOpe_UbyForward 改造而来 + * @param rs + * @throws Exception + */ + private static void workflow_CurOpe_UbyForward(RecordSet rs, int requestid, int userid, int usertype, String currentdate, String currenttime) throws Exception { + String upSql = "update workflow_currentoperator set isremark = 2, operatedate = '" + currentdate + "', operatetime = '" + currenttime + "',processUser = "+userid + + " where requestid = " + requestid + " and userid =" + userid + + " and usertype = " + usertype + " and (isremark = 1 or isremark = 8 or isremark = 9)"; + rs.executeSql(upSql); + } + + /** + * PROCEDURE workflow_CurOpe_UbyForwardNB 改造而来 + * @param rs + * @throws Exception + */ + private static void workflow_CurOpe_UbyForwardNB(RecordSet rs, int requestid, int userid, int usertype, String currentdate, String currenttime) throws Exception { + String upSql = " update workflow_currentoperator set isremark='2', operatedate = '" + currentdate + "', operatetime = '" + currenttime + "', needwfback = '0',processUser = "+userid + + " where requestid = " + requestid + + " and userid = " + userid + + " and usertype = " + usertype + + " and (isremark = '1' or isremark = '8' or isremark = '9')"; + + rs.executeSql(upSql); + } + + /** + * 意见征询回复提醒 + * @param requestid + * @param workflowid + * @param src + * @param fu + * @param resultInfo + */ + private void remarkRemind(int requestid,int workflowid,String src,FileUpload fu,Map resultInfo,int nodeid ){ + + RecordSet rs = new RecordSet(); + //根据当前被征询人找出征询人 + rs.executeQuery("select id from workflow_currentoperator where requestid = ? and nodeid = ? and userid = ? and isremark = 2 and takisremark = 2", requestid, nodeid, user.getUID()); + rs.next(); + int beforwardId = Util.getIntValue(Util.null2String(rs.getString("id"))); + rs.executeQuery("select forwardid from workflow_forward where requestid = ? and beforwardid = ?", requestid, beforwardId); + rs.next(); + int forwardId = Util.getIntValue(Util.null2String(rs.getString("forwardid"))); + Set allBeforwardId = new HashSet<>(); + rs.executeQuery("select beforwardid from workflow_forward where requestid = ? and forwardid = ?",requestid,forwardId); //所有被征询人 + while(rs.next()){ + allBeforwardId.add(Util.null2String(rs.getString("beforwardid"))); + } + if (allBeforwardId.isEmpty()) return; + String ss = String.join(",",allBeforwardId); + rs.executeQuery("select 1 from workflow_currentoperator where ("+Util.getSubINClause(ss,"id","in")+") and isremark = 1 and takisremark = 2"); + // + if(!rs.next()){ + rs.executeQuery("select userid from workflow_currentoperator where id = ? ", forwardId ); + String remindTypes = Util.null2String(fu.getParameter("remindTypes")); + if(!Strings.isNullOrEmpty(remindTypes) && rs.next()){ + +// boolean isChooseReminder = RequestRemindBiz.isNeedRemind(workflowid,requestid,src,user.getUID()); +// if (isChooseReminder) { +// resultInfo.put("needRemind", true); +// } else { + + String isSmsRemind = remindTypes.indexOf(RemindTypeEnum.SMS.getCode()) > -1 ? "1" : "0"; + String isEmailRemind = remindTypes.indexOf(RemindTypeEnum.EMAIL.getCode()) > -1 ? "1" : "0"; + + String taker = rs.getString(1); + Map params = new HashMap<>(); + params.put("reminder",taker); + params.put("requestId",requestid); + params.put("workflowId",workflowid); + params.put("submitType", ""); + RequestRemindBiz requestRemindBiz = new RequestRemindBiz(user); + + if("1".equals(isSmsRemind)) requestRemindBiz.requestRemind(params,RemindTypeEnum.SMS); + if("1".equals(isEmailRemind)) requestRemindBiz.requestRemind(params,RemindTypeEnum.EMAIL); + +// } + } + } + } + + /** + * 简单校验 是否已回复过 + * @param requestid + * @param nodeid + * @return + */ + private boolean isDidremarkSubmit(int requestid , int nodeid){ + RecordSet recordSet = new RecordSet(); + String sql = "select takid from workflow_currentoperator t where t.requestid=? and nodeid=? and userid=? and islasttimes=1 and isremark=1 and takisremark=2"; + recordSet.executeQuery(sql,requestid,nodeid,user.getUID()); + if(recordSet.next()){ + return false; + } + return true; + } +} diff --git a/src/com/engine/workflow/cmd/requestForm/communication/DoSaveContentCmd.java b/src/com/engine/workflow/cmd/requestForm/communication/DoSaveContentCmd.java new file mode 100644 index 00000000..006dc423 --- /dev/null +++ b/src/com/engine/workflow/cmd/requestForm/communication/DoSaveContentCmd.java @@ -0,0 +1,238 @@ +package com.engine.workflow.cmd.requestForm.communication; + +import com.customization.qc2563600.CCOperatorUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.biz.WorkflowCommunicationBiz; +import com.engine.workflow.entity.requestForm.communication.Content; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.dito.comInfo.PropBean; + +import java.lang.reflect.Method; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 保存交流内容 + */ +public class DoSaveContentCmd extends AbstractCommonCommand> { + + public DoSaveContentCmd() {} + + public DoSaveContentCmd(Map params, User user) { + this.params = params; + this.user = user; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + + int communicationId = Util.getIntValue(Util.null2String(params.get("communicationId")), 0); + int requestId = Util.getIntValue(Util.null2String(params.get("requestid"))); + String nodeid = Util.null2String(params.get("nodeid")); + //没有传交流id,补偿一下 + if (communicationId == 0) { + + int workflowId = Util.getIntValue(Util.null2String(params.get("workflowid"))); + int refRequestId = Util.getIntValue(Util.null2String(params.get("refRequestId"))); + int isSubReqeuestid = Util.getIntValue(Util.null2String(params.get("isSubReqeuestid"))); + if(isSubReqeuestid==1){ + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_requestbase where requestid = ?",refRequestId); + rs.next(); + communicationId = WorkflowCommunicationBiz.getOrNewCommunicationId(refRequestId, Util.getIntValue(rs.getString("workflowid"))); + requestId = refRequestId; + }else{ + communicationId = WorkflowCommunicationBiz.getOrNewCommunicationId(requestId, workflowId); + } + } + String remark = Util.null2String(params.get("remark")); + String quouteRemark = Util.null2String(params.get("quouteRemark")); + int quoteContentId = Util.getIntValue(Util.null2String(params.get("contentId")), -1); + String quoteType = Util.null2String(params.get("quote_type")); + + //引用的是签字意见,先保存签字意见作为内容,返回contentId + if("quoteSign".equals(quoteType)) { + int logUserId = Util.getIntValue(Util.null2String(params.get("log_useid"))); + int logUserType = Util.getIntValue(Util.null2String(params.get("log_userType")), 1); + String logOperatedate = Util.null2String(params.get("log_operatedate")); + String logOperatetime = Util.null2String(params.get("log_operatetime")); + String logNodeName = Util.null2String(params.get("log_nodename")); + int logId = Util.getIntValue(Util.null2String(params.get("sign_logid"))); + String logOperationName = Util.null2String(params.get("operationname")); + String signReplyText = Util.null2String(params.get("signReplyText")); + + Content quoteContent = new Content(); + quoteContent.setIsSignLog("1"); + quoteContent.setCommunicationid(communicationId); + quoteContent.setRemark(signReplyText, ""); + quoteContent.setCreateUser(logUserId); + quoteContent.setCreateUserType(logUserType); + quoteContent.setCreateDate(logOperatedate); + quoteContent.setCreateTime(logOperatetime); + quoteContent.setLogNodeName(logNodeName); + quoteContent.setLogOperationName(logOperationName); + quoteContent.setSignLogId(logId); + quoteContentId = quoteContent.insertContentToDB(); + } + + String projectIDs = Util.null2String(params.get("projectIDs")); + String relatedacc = Util.null2String(params.get("relatedacc")); + String relatedcus = Util.null2String(params.get("relatedcus")); + String relateddoc = Util.null2String(params.get("relateddoc")); + String relatedprj = Util.null2String(params.get("relatedprj")); + String relatedwf = Util.null2String(params.get("relatedwf")); + + Date newDate = new Date(); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + + String dateStr = dateFormat.format(newDate); + String timeStr = timeFormat.format(newDate); + + Content content = new Content(); + content.setCommunicationid(communicationId); + content.setRemark(remark, quouteRemark); + content.setCreateUser(user.getUID()); + content.setCreateUserType(Util.getIntValue(user.getLogintype(), 1)); + content.setCreateDate(dateStr); + content.setCreateTime(timeStr); + content.setQuoteContentId(quoteContentId); + + content.setProjectIds(projectIDs); + content.setRelatedAcc(relatedacc); + content.setRelatedCus(relatedcus); + content.setRelatedDoc(relateddoc); + content.setRelatedPrj(relatedprj); + content.setRelatedWf(relatedwf); + + int contentId = content.insertContentToDB(); + + if(quoteContentId != -1 && contentId != -1) { + //引用成功后,更新消息提醒 + WorkflowCommunicationBiz.updateMessageRemind(contentId); + } + + //修改内容后,重置相关交流的新消息提醒 + if (contentId > 0) { + WorkflowCommunicationBiz.resetNewCommunicationReadLog(communicationId, user, remark); + } + + //抄送(不需提交)给@的人员 + new BaseBean().writeLog("qc2563600===>>开始执行抄送(不需提交)给@的人员,remark:" + remark); + CctoAtUser(nodeid,requestId,remark,user); + + //发送给门户抄送不需提交,待阅 + toMenhuDaiyue(requestId+"",nodeid,remark); + + apidatas.put("result", contentId != -1); + + return apidatas; + } + + /** + * 抄送(不需提交)给@的人员 + * @param nodeid + * @param requestid + * @param remark + */ + private void CctoAtUser(String nodeid, int requestid, String remark,User user) { + + String pattern = "(?i)atsome=\\\"\\@[0-9]*"; + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(remark); + Set userIds = new HashSet<>(); + while (m.find()) { + String replace = m.group().replace("atsome=\"@", ""); + if(!"".equals(replace)) + userIds.add(replace); + } + List list = new ArrayList<>(userIds); + if(list.size() > 0) { + new BaseBean().writeLog("qc2563600===>>开始执行抄送逻辑,userIds" + userIds + "requestid:" + requestid + "nodeid:" + nodeid); + CCOperatorUtil.insert(requestid + "", list, nodeid, "8", user); + } + } + + private void toMenhuDaiyue(String reqid,String nodeid,String remark){ + List> todolist = new ArrayList(); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + Map rsojson = new HashMap<>(); + try { + + String pattern = "(?i)atsome=\\\"\\@[0-9]*"; + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(remark); + Set userIds = new HashSet<>(); + while (m.find()) { + String replace = m.group().replace("atsome=\"@", ""); + if(!"".equals(replace)) { + userIds.add(replace); + } + } + rs1.executeQuery("select * from workflow_requestbase where requestid=?", reqid); + rs1.next(); + String requestname = Util.null2String(rs1.getString("requestname")); + nodeid = Util.null2String(rs1.getString("currentnodeid")); + + rs1.executeQuery("select * from workflow_nodebase where id=?", nodeid); + rs1.next(); + String nodename = Util.null2String(rs1.getString("nodename")); + + List list = new ArrayList<>(userIds); + if(list.size() > 0){ + for(String userid : list){ + rsojson.put("requestname", requestname); + rsojson.put("requestid", reqid); + rsojson.put("username", new ResourceComInfo().getLastname(userid) + "(" + userid + ")"); + rsojson.put("id", userid); + rsojson.put("nodeid", nodeid); + rsojson.put("nodename", nodename); + rsojson.put("isremark", "8");//抄送无需提交 + rsojson.put("loginid", new ResourceComInfo().getLoginID(userid)); + + rs.writeLog("=================== DoSaveContentCmd toMenhuDaiyue ============== " + rsojson); + todolist.add(rsojson); + } + Map params = new HashMap<>(); + params.put("TodoDatas", todolist); + params.put("requestid", reqid); + + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + + Class clazz = Class.forName("com.customization.dito.sendtodo.SendPortalAtAddTodoCmd"); + if(clazz.getMethod("sendTodoDataByNode",new Class[]{String.class,List.class,String.class,String.class,String.class,String.class,String.class,String.class,String.class}) != null) { + Method method = clazz.getMethod("sendTodoDataByNode",new Class[]{String.class,List.class,String.class,String.class,String.class,String.class,String.class,String.class,String.class}); + + Object newInstance = clazz.newInstance(); + method.invoke(newInstance,reqid,todolist,username,passwd,center,portal_todourl,bpm_workflowurl,bpm_app_workflowurl,bpm_app_requesturl); + } + } + }catch (Exception e){ + rs.writeLog(e); + e.printStackTrace(); + } + } + +} diff --git a/src/weaver/workflow/request/DevWorkflowCreater.java b/src/weaver/workflow/request/DevWorkflowCreater.java new file mode 100644 index 00000000..44681221 --- /dev/null +++ b/src/weaver/workflow/request/DevWorkflowCreater.java @@ -0,0 +1,441 @@ +package weaver.workflow.request; + +import com.engine.common.service.HrmCommonService; +import com.engine.common.service.impl.HrmCommonServiceImpl; +import com.engine.integration.util.StringUtils; +import com.engine.workflow.biz.wfPathAdvanceSet.DataRanageBiz; +import com.engine.workflow.util.CollectionUtil; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.companyvirtual.DepartmentVirtualComInfo; +import weaver.hrm.companyvirtual.SubCompanyVirtualComInfo; +import weaver.matrix.MatrixUtil; + +import java.util.*; + +public class DevWorkflowCreater { + + /** + * + * @param workflowId + * @return 获得工作流的创建者,格式为"1,2,3" + */ + public String getWorkflowCreater(int workflowId){ + + StringBuffer resourcesb = new StringBuffer(); + HashSet resourceSet = new HashSet<>(); + int id = -1; + int type = -1; //操作者类型 + int content = -1; //操作者具体内容 + int min_seclevel = -1; //最小安全级别 + int max_seclevel = -1; //最大安全级别 + int isBelong = -1; //属于 or 不属于 + int bhxj = 0;//包含下级 + int groupid = 0; + + String sql = "select id, workflowid, type, content, min_seclevel, max_seclevel, isBelong,bhxj from ShareInnerWfCreate where usertype=0 and workflowid=" + workflowId; + RecordSet rs = new RecordSet(); + rs.executeSql(sql); + HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); + while (rs.next()) { + id = Util.getIntValue(rs.getString("id")); + type = Util.getIntValue(rs.getString("type")); + content = Util.getIntValue(rs.getString("content")); + min_seclevel = Util.getIntValue(rs.getString("min_seclevel")); + max_seclevel = Util.getIntValue(rs.getString("max_seclevel")); + isBelong = Util.getIntValue(rs.getString("isBelong")); + bhxj = Util.getIntValue(rs.getString("bhxj")); + groupid = Util.getIntValue(rs.getString("groupid")); + + String resourceSql = ""; + + if (type == 1) { //部门 + String allParentDepartId = ""; + String allChildDepartId = ""; + try { + ArrayList list = new ArrayList<>(); + allParentDepartId = departmentComInfo.getAllParentDepartId(content + "", content + ""); + ArrayList allChildDept = departmentComInfo.getAllChildDeptByDepId(list, content + ""); + if (allChildDept.size()>0) { + allChildDepartId = StringUtils.join(allChildDept, ",")+","+content; + }else + allChildDepartId = content+""; + } catch (Exception e) { + e.printStackTrace(); + } + if (isBelong == 1) { + if (bhxj == 1){ + resourceSql = "select id from HrmResource where departmentid in (" + allChildDepartId + ") and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + }else if (bhxj == 2){ + resourceSql = "select id from HrmResource where departmentid in (" + allParentDepartId + ") and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + }else if (bhxj == 0){ + resourceSql = "select id from HrmResource where departmentid in (" + content + ") and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + } + } else if (isBelong == 2) { + if (bhxj ==1){ + resourceSql = "select id from HrmResource where (departmentid not in ("+allChildDepartId+") or (departmentid in("+allChildDepartId+") and (seclevel<" + min_seclevel + " or seclevel>" + max_seclevel + " )))"; + }else if (bhxj ==2){ + resourceSql = "select id from HrmResource where (departmentid not in ("+allParentDepartId+") or (departmentid in("+allParentDepartId+") and (seclevel< "+min_seclevel+" or seclevel>"+max_seclevel+" )))"; + }else if (bhxj == 0){ + resourceSql = "select id from HrmResource where (departmentid not in (" + content + ") or (departmentid in(" + content + ") and (seclevel<" + min_seclevel + " or seclevel>" + max_seclevel + " )))"; + } + } + } else if (type == 2) { //角色 + String roleid = String.valueOf(content).substring(0, String.valueOf(content).length() - 1); + String roleLv = String.valueOf(content).substring(String.valueOf(content).length() - 1); + + String roleMemberSql = hrmCommonService.getHrmRoleMemeberSqlByRoleIds(roleid); + if (isBelong == 1) { + resourceSql = "select id from HrmResource where id in ("; + resourceSql += "select distinct resourceid from ("+roleMemberSql+")t2 where t2.roleid=" + roleid + " and t2.rolelevel=" + roleLv; + } else if (isBelong == 2){ + resourceSql = "select id from HrmResource where id not in ("; + resourceSql += "select distinct resourceid from ("+roleMemberSql+")t2 where t2.roleid=" + roleid + " and t2.rolelevel=" + roleLv; + } else { + resourceSql += "-1"; + } + resourceSql += ")"; + } else if (type == 3) { //指定人 + if ("-1".equals(isBelong)) continue; + resourceSql = "select id from HrmResource where id=" + content; + } else if (type == 4) { //所有人 + if ("-1".equals(isBelong)) continue; + resourceSql = "select id from HrmResource where seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + } else if (type == 30) { //分部 + String allSubCompany = ""; + String parentSubCompany = ""; + try { + allSubCompany= subCompanyComInfo.getSubCompanyTreeStr(content + ""); + parentSubCompany = subCompanyComInfo.getAllSupCompany(content + ""); + if (!"".equals(allSubCompany)){ + if (allSubCompany.endsWith(",")) { + allSubCompany += content; + }else + allSubCompany += ","+content; + }else + allSubCompany = content+""; + + if (!"".endsWith(parentSubCompany)){ + if (parentSubCompany.endsWith(",")) + parentSubCompany += content; + else { + parentSubCompany += ","+ content; + } + }else + parentSubCompany = content+""; + } catch (Exception e) { + e.printStackTrace(); + } + + if (isBelong == 1) { + if (bhxj == 1){ + resourceSql = "select id from HrmResource where subcompanyid1 in("+allSubCompany+") and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + }else if (bhxj == 2){ + resourceSql = "select id from HrmResource where subcompanyid1 in ("+parentSubCompany+") and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + }else if (bhxj == 0){ + resourceSql = "select id from HrmResource where subcompanyid1=" + content + " and seclevel>=" + min_seclevel + " and seclevel<=" + max_seclevel; + } + } else if (isBelong == 2) { + if (bhxj ==1){ + resourceSql = "select id from HrmResource where (subcompanyid1 not in ("+allSubCompany+") or (subcompanyid1 in ("+allSubCompany+") and (seclevel<" + min_seclevel + " or seclevel>" + max_seclevel + "))) "; + }else if (bhxj==2){ + resourceSql = "select id from HrmResource where (subcompanyid1 not in ("+parentSubCompany+") or (subcompanyid1 in (" + parentSubCompany + ") and (seclevel<" + min_seclevel + " or seclevel>" + max_seclevel + ") ))"; + }else if (bhxj == 0) + resourceSql = "select id from HrmResource where (subcompanyid1<>" + content + " or (subcompanyid1=" + content + " and (seclevel<" + min_seclevel + " or seclevel>" + max_seclevel + ")) )"; + } + }else if (type == 58){//岗位 + if (isBelong == 1){ + resourceSql = "select id from HrmResource where JOBTITLE in ("+content+")"; + + if (min_seclevel == 0 && max_seclevel>0 ){ + + String allParentDepartId = ""; + String allChildDepartId = ""; + try { + ArrayList list = new ArrayList<>(); + allParentDepartId = departmentComInfo.getAllParentDepartId(max_seclevel + "", max_seclevel + ""); + ArrayList allChildDept = departmentComInfo.getAllChildDeptByDepId(list, max_seclevel + ""); + if (allChildDept.size()>0) { + allChildDepartId = StringUtils.join(allChildDept, ",")+","+max_seclevel; + }else + allChildDepartId = max_seclevel+""; + } catch (Exception e) { + e.printStackTrace(); + } + + if (bhxj ==1){ + resourceSql+=" and DEPARTMENTID in ("+allChildDepartId+") "; + }else if (bhxj ==2){ + resourceSql+=" and DEPARTMENTID in ("+allParentDepartId+") "; + }else if (bhxj == 0){ + resourceSql+=" and DEPARTMENTID in ("+max_seclevel+")"; + } + }else if (min_seclevel == 1 && max_seclevel>0){ + + String allSubCompany = ""; + String parentSubCompany = ""; + try { + allSubCompany= subCompanyComInfo.getSubCompanyTreeStr(max_seclevel + ""); + parentSubCompany = subCompanyComInfo.getAllSupCompany(max_seclevel + ""); + if (!"".equals(allSubCompany)){ + if (allSubCompany.endsWith(",")) { + allSubCompany += max_seclevel; + }else + allSubCompany += ","+max_seclevel; + }else + allSubCompany = max_seclevel+""; + + if (!"".endsWith(parentSubCompany)){ + if (parentSubCompany.endsWith(",")) + parentSubCompany += max_seclevel; + else { + parentSubCompany += ","+ max_seclevel; + } + }else + parentSubCompany = max_seclevel+""; + } catch (Exception e) { + e.printStackTrace(); + } + + if (bhxj == 1){ + resourceSql += " and SUBCOMPANYID1 in("+allSubCompany+") "; + }else if (bhxj ==2){ + resourceSql += " and SUBCOMPANYID1 in("+parentSubCompany+") "; + }else if (bhxj == 0) + resourceSql += " and SUBCOMPANYID1 in("+max_seclevel+") "; + } + }else if (isBelong == 2){ + resourceSql = "select id from HrmResource where jobtitle not in ("+content+")"; + + if (min_seclevel == 0 && max_seclevel>0 ){ + resourceSql += " or (jobtitle in ("+content+")"; + + String allParentDepartId = ""; + String allChildDepartId = ""; + try { + ArrayList list = new ArrayList<>(); + allParentDepartId = departmentComInfo.getAllParentDepartId(max_seclevel + "", max_seclevel + ""); + ArrayList allChildDept = departmentComInfo.getAllChildDeptByDepId(list, max_seclevel + ""); + if (allChildDept.size()>0) { + allChildDepartId = StringUtils.join(allChildDept, ",")+","+max_seclevel; + }else + allChildDepartId = max_seclevel+""; + } catch (Exception e) { + e.printStackTrace(); + } + + if (bhxj ==1){ + resourceSql+=" and DEPARTMENTID not in ("+allChildDepartId+") "; + }else if (bhxj ==2){ + resourceSql+=" and DEPARTMENTID not in ("+allParentDepartId+") "; + }else if (bhxj == 0){ + resourceSql+=" and DEPARTMENTID not in ("+max_seclevel+")"; + } + resourceSql+=")"; + }else if (min_seclevel == 1 && max_seclevel>0){ + resourceSql += " or (jobtitle in ("+content+")"; + + String allSubCompany = ""; + String parentSubCompany = ""; + try { + allSubCompany= subCompanyComInfo.getSubCompanyTreeStr(max_seclevel + ""); + parentSubCompany = subCompanyComInfo.getAllSupCompany(max_seclevel + ""); + if (!"".equals(allSubCompany)){ + if (allSubCompany.endsWith(",")) { + allSubCompany += max_seclevel; + }else + allSubCompany += ","+max_seclevel; + }else + allSubCompany = max_seclevel+""; + + if (!"".endsWith(parentSubCompany)){ + if (parentSubCompany.endsWith(",")) + parentSubCompany += max_seclevel; + else { + parentSubCompany += ","+ max_seclevel; + } + }else + parentSubCompany = max_seclevel+""; + } catch (Exception e) { + e.printStackTrace(); + } + + if (bhxj == 1){ + resourceSql += " and SUBCOMPANYID1 not in("+allSubCompany+") "; + }else if (bhxj ==2){ + resourceSql += " and SUBCOMPANYID1 not in("+parentSubCompany+")"; + }else if (bhxj == 0) { + resourceSql += " and SUBCOMPANYID1 not in(" + max_seclevel + ") "; + } + resourceSql += ")"; + } + }else if (isBelong == -1){ + continue; + } + }else if (type == 99){ + DepartmentComInfo dc = new DepartmentComInfo(); + DepartmentVirtualComInfo dvc = new DepartmentVirtualComInfo(); + SubCompanyComInfo scc = new SubCompanyComInfo(); + SubCompanyVirtualComInfo svc = new SubCompanyVirtualComInfo(); + Map> groupdetailMatrix = getGroupdetailMatrix(); + Map>> groupdetailMatrixdetail = getGroupdetailMatrixdetail(); + MatrixUtil matrixUtil = new MatrixUtil(); + matrixUtil.setMatrixFieldnameMap(getMatrixFieldname()); + String sql1 = "select t1.workflowid,t3.* from workflow_flownode t1 , workflow_nodegroup t2 , workflow_groupdetail t3 where t1.nodeid = t2.nodeid and t2.id = t3.groupid and t1.nodetype = '0' and t3.type = '99'"; + if(workflowId > 0){ + sql1 += " and t1.workflowid = " + workflowId; + } + RecordSet rs1 = new RecordSet(); + //查出所有创建节点设置的矩阵 + rs.executeQuery(sql1); + //优化性能,相同的设置计算一次即可 + Map matrixCreateResultMap = new HashMap<>(); + while(rs.next()){ + String workflowid = rs.getString("workflowid"); + String groupdetailid = rs.getString("id"); + + //查出引用的矩阵以及取值字段 + String matrix = ""; + String value_field = ""; + Map groupdetailMatrixData = groupdetailMatrix.get(groupdetailid); + if(groupdetailMatrixData != null){ + matrix = Util.null2String(groupdetailMatrixData.get("matrix")); + value_field = Util.null2String(groupdetailMatrixData.get("value_field")); + } + Map matchs = new HashMap(); + List> groupdetailMatrixdetailData = groupdetailMatrixdetail.get(groupdetailid); + int workflowBhxj = 0; + if(groupdetailMatrixdetailData!=null) { + String key = matrix +"_"+value_field; + for (Map matrixdetailData : groupdetailMatrixdetailData) { + key += "_"+Util.null2String(matrixdetailData.get("condition_field")); + key += "_"+Util.null2String(matrixdetailData.get("workflow_field")); + key += "_"+Util.getIntValue(Util.null2String(matrixdetailData.get("workflow_bhxj"))); + key += "_"+Util.null2String(matrixdetailData.get("workflow_objId")); + } + Boolean map_result = matrixCreateResultMap.get(key); + if(map_result != null){ + continue; + } + + for (Map matrixdetailData : groupdetailMatrixdetailData) { + String conditionField = Util.null2String(matrixdetailData.get("condition_field")); + String fieldId = Util.null2String(matrixdetailData.get("workflow_field")); + workflowBhxj = Util.getIntValue(Util.null2String(matrixdetailData.get("workflow_bhxj"))); + String fieldValue = Util.null2String(matrixdetailData.get("workflow_objId")); + switch (fieldId) { + case "-1"://指定分部 + fieldValue = CollectionUtil.list2String(DataRanageBiz.loadAllSubcompany(fieldValue, workflowBhxj, scc, svc), ","); + break; + case "-2"://指定部门 + fieldValue = CollectionUtil.list2String(DataRanageBiz.loadAllDepartmet(fieldValue, workflowBhxj, dc, dvc), ","); + break; + default: + break; + } + matchs.put(conditionField, fieldValue); + } + String userids = matrixUtil.getMatrixUsers(matrix, value_field, matchs, workflowBhxj, rs1); + resourceSet.addAll(Util.TokenizerString(userids,",")); + } + + } + } + + if (!"".equals(resourceSql)) { + RecordSet rs2 = new RecordSet(); + rs2.writeLog("wcq:::sql="+resourceSql + " and (status =0 or status = 1 or status = 2 or status = 3)"); + rs2.executeSql(resourceSql + " and (status =0 or status = 1 or status = 2 or status = 3)"); + while (rs2.next()) { + String resourceid = rs2.getString("id"); + resourceSet.add(resourceid); + } + } + } + //end + return StringUtils.join(resourceSet,","); + } + + /** + * 获取创建权限矩阵计算所需的MatrixFieldInfo数据,缓存在map中,防止oracle报错(超出最大游标) + * @return + */ + private Map> getMatrixFieldname(){ + Map> result = new HashMap<>(); + String sql = "select id,fieldname,browsertypeid,matrixid from MatrixFieldInfo where id in (select condition_field from workflow_matrixdetail where groupdetailid in (select t3.id from workflow_flownode t1 , workflow_nodegroup t2 , workflow_groupdetail t3 where t1.nodeid = t2.nodeid and t2.id = t3.groupid and t1.nodetype = '0' and t3.type = '99')) "+ + " union all select id, fieldname, browsertypeid, matrixid from MatrixFieldInfo where id in (SELECT value_field FROM workflow_groupdetail_matrix WHERE groupdetailid in (select t3.id from workflow_flownode t1 , workflow_nodegroup t2 , workflow_groupdetail t3 where t1.nodeid = t2.nodeid and t2.id = t3.groupid and t1.nodetype = '0' and t3.type = '99'))"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + while(rs.next()){ + String id = Util.null2String(rs.getString("id")); + String fieldname = Util.null2String(rs.getString("fieldname")); + String browsertypeid = Util.null2String(rs.getString("browsertypeid")); + String matrixid = Util.null2String(rs.getString("matrixid")); + + Map matrixDeatil = new HashMap(); + matrixDeatil.put("id", id); + matrixDeatil.put("fieldname", fieldname); + matrixDeatil.put("browsertypeid", browsertypeid); + matrixDeatil.put("matrixid", matrixid); + + result.put(id, matrixDeatil); + result.put(id+"_"+matrixid, matrixDeatil); + } + return result; + } + + /** + * 获取创建权限矩阵计算所需的workflow_groupdetail_matrix数据,缓存在map中,防止oracle报错(超出最大游标) + * @return + */ + private Map> getGroupdetailMatrix(){ + Map> result = new HashMap<>(); + String sql = "SELECT matrix,value_field,groupdetailid FROM workflow_groupdetail_matrix WHERE groupdetailid in (select t3.id from workflow_flownode t1 , workflow_nodegroup t2 , workflow_groupdetail t3 where t1.nodeid = t2.nodeid and t2.id = t3.groupid and t1.nodetype = '0' and t3.type = '99')"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + while(rs.next()){ + Map tempData = new HashMap<>(); + String groupdetailid = Util.null2String(rs.getString("groupdetailid")); + String matrix = Util.null2String(rs.getString("matrix")); + String value_field = Util.null2String(rs.getString("value_field")); + tempData.put("matrix",matrix); + tempData.put("value_field",value_field); + result.put(groupdetailid, tempData); + } + return result; + } + + /** + * 获取创建权限矩阵计算所需的workflow_matrixdetail数据,缓存在map中,防止oracle报错(超出最大游标) + * @return + */ + private Map>> getGroupdetailMatrixdetail(){ + Map>> result = new HashMap<>(); + String sql = "select condition_field,workflow_field,workflow_objid,workflow_bhxj,virtualid,groupdetailid from workflow_matrixdetail where groupdetailid in (select t3.id from workflow_flownode t1 , workflow_nodegroup t2 , workflow_groupdetail t3 where t1.nodeid = t2.nodeid and t2.id = t3.groupid and t1.nodetype = '0' and t3.type = '99')"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + while(rs.next()){ + String groupdetailid = Util.null2String(rs.getString("groupdetailid")); + String conditionField = Util.null2String(rs.getString("condition_field")); + String fieldId = Util.null2String(rs.getString("workflow_field")); + int workflowBhxj = Util.getIntValue(Util.null2String(rs.getString("workflow_bhxj"))); + String fieldValue = Util.null2String(rs.getString("workflow_objId")); + + List> tempData = result.get(groupdetailid) == null ? new ArrayList<>() : result.get(groupdetailid); + Map matrixDeatil = new HashMap(); + matrixDeatil.put("groupdetailid", groupdetailid); + matrixDeatil.put("condition_field", conditionField); + matrixDeatil.put("workflow_field", fieldId); + matrixDeatil.put("workflow_bhxj", workflowBhxj+""); + matrixDeatil.put("workflow_objId", fieldValue); + tempData.add(matrixDeatil); + + result.put(groupdetailid, tempData); + } + return result; + } +} diff --git a/src/weaver/workflow/request/RequestSignRelevanceWithMe.java b/src/weaver/workflow/request/RequestSignRelevanceWithMe.java new file mode 100644 index 00000000..6edf9761 --- /dev/null +++ b/src/weaver/workflow/request/RequestSignRelevanceWithMe.java @@ -0,0 +1,205 @@ +package weaver.workflow.request; + +import com.google.common.base.Strings; +import weaver.conn.ConnStatement; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.dito.comInfo.PropBean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class RequestSignRelevanceWithMe extends BaseBean { + + /** + * 获取与我相关的Logid + * @param wfid + * @param reqid + * @param userid + * @return + */ + public String getRelevanceinfo(String wfid, String reqid, String userid) { + String result = ""; + //所有@我的log + String sql = "select t2.logid from workflow_requestlogatinfo t1 inner join workflow_requestlog t2 " + + " on t1.nodeid=t2.nodeid " + + " and t1.logtype=t2.logtype " + + " and t1.operatedate=t2.operatedate " + + " and t1.operatetime=t2.operatetime " + + " and t1.operator=t2.operator" + + " where t1.workflowid=" + wfid + " and t1.requestid=" + reqid + " and ((t1.atuserid is not null and t1.atuserid=" + userid + ") or (t1.forwardresource is not null and t1.forwardresource like '%," + userid + ",%'))"; + RecordSet rs = new RecordSet(); + rs.executeSql(sql); + + while (rs.next()) { + result += Util.null2String(rs.getString(1)) + ","; + } + + result += "0"; + return result; + } + + /** + * 插入关联信息 + * @param remark 签字意见 + * @param wfid 流程id + * @param reqid 请求id + * @param nodeid 节点id + * @param logtype 日志类型 + * @param operatedate 操作日期 + * @param operatetime 操作时间 + * @param operator 操作人 + * @param atuserid @人 + * @return 是否保存成功 + */ + public void inertRelevanceInfo(String wfid, String reqid, String nodeid, String logtype, String operatedate, String operatetime, String operator, String remark) { + inertRelevanceInfo(wfid, reqid, nodeid, logtype, operatedate, operatetime, operator, remark, null); + } + /** + * 插入关联信息 + * @param wfid 流程id + * @param reqid 请求id + * @param nodeid 节点id + * @param logtype 日志类型 + * @param operatedate 操作日期 + * @param operatetime 操作时间 + * @param operator 操作人 + * @param remark 签字意见 + * @param resourceids @人 + * @return 是否保存成功 + */ + public void inertRelevanceInfo(String wfid, String reqid, String nodeid, String logtype, String operatedate, String operatetime, String operator, String remark, String resourceids) { + List atlist = this.parseRemark(remark); + RecordSet rs = new RecordSet(); + try { + RecordSet rs1 = new RecordSet(); + List> todolist = new ArrayList(); + for (int i = 0; i < atlist.size(); i++) { + String atuserid = atlist.get(i); + String sql = "insert into workflow_requestlogAtInfo(workflowid, requestid, nodeid, logtype, operatedate, operatetime, operator, atuserid)"; + sql += " values (" + wfid + ", " + reqid + ", " + nodeid + ", '" + logtype + "', '" + operatedate + "', '" + operatetime + "', " + operator + ", " + atuserid + ")"; + rs.execute(sql); + + Map rsojson = new HashMap<>(); + rs1.executeQuery("select * from workflow_requestbase where requestid=?", reqid); + rs1.next(); + String requestname = Util.null2String(rs1.getString("requestname")); + + rs1.executeQuery("select * from workflow_nodebase where id=?", nodeid); + rs1.next(); + String nodename = Util.null2String(rs1.getString("nodename")); + + rsojson.put("requestname", requestname); + rsojson.put("requestid", reqid); + rsojson.put("username", new ResourceComInfo().getLastname(atuserid) + "(" + atuserid + ")"); + rsojson.put("id", atuserid); + rsojson.put("nodeid", nodeid); + rsojson.put("nodename", nodename); + rsojson.put("isremark", "8");//抄送无需提交 + rsojson.put("loginid", new ResourceComInfo().getLoginID(atuserid)); + + rs.writeLog("=================== RequestSignRelevanceWithMe inertRelevanceInfo ============== "+ rsojson); + todolist.add(rsojson); + } + Map params = new HashMap<>(); + params.put("TodoDatas", todolist); + params.put("requestid", reqid); + + String bpm_app_workflowurl = PropBean.getUfPropValue("bpm_app_workflowurl"); + String bpm_app_requesturl = PropBean.getUfPropValue("bpm_app_requesturl"); + String portal_todourl = PropBean.getUfPropValue("portal_todourl"); + String username = PropBean.getUfPropValue("username"); + String passwd = PropBean.getUfPropValue("passwd"); + String center = PropBean.getUfPropValue("center"); + String bpm_workflowurl = PropBean.getUfPropValue("bpm_workflowurl"); + + Class clazz = Class.forName("com.customization.dito.sendtodo.SendPortalAtAddTodoCmd"); + if(clazz.getMethod("sendTodoDataByNode",new Class[]{String.class,List.class,String.class,String.class,String.class,String.class,String.class,String.class,String.class}) != null) { + Method method = clazz.getMethod("sendTodoDataByNode",new Class[]{String.class,List.class,String.class,String.class,String.class,String.class,String.class,String.class,String.class}); + + Object newInstance = clazz.newInstance(); + method.invoke(newInstance,reqid,todolist,username,passwd,center,portal_todourl,bpm_workflowurl,bpm_app_workflowurl,bpm_app_requesturl); + } + }catch (Exception e){ + e.printStackTrace(); + rs.writeLog(e); + } + + if (resourceids != null && resourceids.length() > 0) { + resourceids = "," + resourceids + ","; + String sql = "insert into workflow_requestlogAtInfo(workflowid, requestid, nodeid, logtype, operatedate, operatetime, operator, forwardresource)"; + if(rs.getDBType().equals("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")){ + sql += " values (" + wfid + ", " + reqid + ", " + nodeid + ", '" + logtype + "', '" + operatedate + "', '" + operatetime + "', " + operator + ", '')"; + }else{ + sql += " values (" + wfid + ", " + reqid + ", " + nodeid + ", '" + logtype + "', '" + operatedate + "', '" + operatetime + "', " + operator + ", '" + resourceids + "')"; + } + rs.execute(sql); + /***多人力clob***/ + if(rs.getDBType().equals("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")){ + ConnStatement hrmsta = null; + try { + String maxidsql = "select max(id) maxid from workflow_requestlogAtInfo where workflowid = " + wfid + " and requestid =" + reqid; + rs.executeSql(maxidsql); + if(rs.next()){ + String maxid = Util.null2String(rs.getString("maxid")); + if(!"".equals(maxid)){ + String hrmsql = "update workflow_requestlogAtInfo set forwardresource = ? where id = "+maxid; + hrmsta = new ConnStatement(); + hrmsta.setStatementSql(hrmsql); + hrmsta.setString(1, resourceids); + hrmsta.executeUpdate(); + } + } + }catch(Exception e){ + writeLog(e); + }finally { + if(hrmsta!=null) { + hrmsta.close(); + } + } + // + } + /******/ + } + } + + /** + * 解析签字意见内容中的at人 + * @param remark 签字意见 + * @return at列表 + */ + public List parseRemark(String remark) { + List result = new ArrayList(); + if (Strings.isNullOrEmpty(remark)) return result; + try { + //匹配atsome="@3" + Pattern ptrn = Pattern.compile("atsome=\\\"@[\\d]+\\\""); + Pattern atptrn = Pattern.compile("[\\d]+"); + Matcher matcher = ptrn.matcher(remark); + if(ptrn == null || atptrn == null){ + return result; + } + + while (matcher.find()) { + String atsome = matcher.group(); + Matcher atMatcher = atptrn.matcher(atsome); + if (atMatcher.find()) { + if (!result.contains(atMatcher.group())) { + result.add(atMatcher.group()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + } +}