package com.engine.custom.archives.workflow.cmd.requestLog; import com.api.doc.detail.service.DocViewPermission; import com.api.doc.detail.util.DocDownloadCheckUtil; import com.api.odoc.util.OdocFileUtil; import com.api.workflow.constant.RequestAuthenticationConstant; import com.api.workflow.service.RequestAuthenticationService; import com.api.workflow.util.ServiceUtil; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.constant.ParamConstant; import com.engine.common.entity.BizLogContext; import com.engine.common.util.AttrSignatureUtil; import com.engine.core.interceptor.CommandContext; import com.engine.custom.archives.workflow.biz.requestLog.RequestLogCusBiz; import com.engine.hrm.biz.OrganizationShowSetBiz; import com.engine.workflow.biz.QysSignatureCominfo; import com.engine.workflow.biz.RobotNode.RobotNodeBiz; import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz; import com.engine.workflow.biz.SecondAuthBiz; import com.engine.workflow.biz.WorkflowCommunicationBiz; import com.engine.workflow.biz.freeNode.FreeNodeBiz; import com.engine.workflow.biz.requestForm.RequestFormBiz; 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.requestForm.RightMenu; import com.engine.workflow.service.RequestSecondAuthService; import com.engine.workflow.service.impl.RequestSecondAuthServiceImpl; import com.engine.workflow.util.MenuOrderSetUtil; import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.conn.RecordSet; import weaver.crm.Maint.CustomerInfoComInfo; import weaver.dateformat.DateTransformer; import weaver.dateformat.UnifiedConversionInterface; import weaver.docs.category.SecCategoryComInfo; import weaver.docs.docs.DocImageManager; import weaver.docs.webservices.DocAttachment; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.resource.ResourceComInfo; import weaver.systeminfo.SystemEnv; import weaver.workflow.request.RequestLogOperateName; import weaver.workflow.request.RequestRemarkRight; import weaver.workflow.request.WFLinkInfo; import weaver.workflow.request.WorkflowSpeechAppend; import weaver.workflow.workflow.WorkflowAllComInfo; import weaver.workflow.workflow.WorkflowConfigComInfo; import weaver.workflow.workflow.WorkflowRequestComInfo; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 获取签字意见列表数据 * Created by jhy on 2018/4/10. */ public class LoadRequestLogDataCusCmd extends AbstractCommonCommand> { public static Logger log = LoggerFactory.getLogger("Archives"); /***方便使用参数***/ private int requestid; private int workflowid; private int nodeid; private int desrequestid; private int isrequest; private boolean isprint; private boolean isworkflowhtmldoc; private String f_weaver_belongto_userid; private String f_weaver_belongto_usertype; private String source=""; //添加参数,用于转pdf复用此cmd private AttrSignatureUtil attrSignatureUtil; private String authSignatureInfo; private String authStr; private String authSignatureStr; private ResourceComInfo ResourceComInfo; private DepartmentComInfo DepartmentComInfo; private CustomerInfoComInfo CustomerInfoComInfo; private HttpServletRequest request; public LoadRequestLogDataCusCmd(HttpServletRequest request, User user, Map params) { this.request = request; this.user = user; this.params = params; } public LoadRequestLogDataCusCmd(HttpServletRequest request, User user, Map params, String source) { this.request = request; this.user = user; this.params = params; this.source =source; } public LoadRequestLogDataCusCmd(User user, Map params, String source) { this.user = user; this.params = params; this.source =source; } @Override public BizLogContext getLogContext() { return null; } @Override public Map execute(CommandContext commandContext) { return executeTransfer(); } public Map executeTransfer(){ requestid = Util.getIntValue(Util.null2String(params.get("requestid"))); f_weaver_belongto_userid = Util.null2String(params.get("f_weaver_belongto_userid")); f_weaver_belongto_usertype = Util.null2String(params.get("f_weaver_belongto_usertype")); attrSignatureUtil = new AttrSignatureUtil(user.getUID(), Util.null2String(params.get(ParamConstant.REQUEST_HEADER_USER_AGENT))); String _attributesString = Util.null2String(params.get(RequestConstant.SIGNATURE_ATTRIBUTES_STR)); String _attributesSignature = Util.null2String(params.get(RequestConstant.SIGNATURE_SECRET_KEY)); Map apidatas = new HashMap(); if ("".equals(source)){ attrSignatureUtil.verifySignature(_attributesString, _attributesSignature); //校验本次请求的requestid是否是当前用户打开的流程 RequestAuthenticationService authService = new RequestAuthenticationService(); authService.setUser(user); if (!authService.verify(request, requestid)) { new BaseBean().writeLog("被拦截:LoadRequestLogDataCusCmd;requestid:" + requestid); apidatas.put(Util.null2String(requestid),"被拦截:LoadRequestLogDataCusCmd"); return apidatas; } authStr = authService.getAuthString(); authSignatureStr= authService.getAuthSignatureString(); authSignatureInfo = "&authStr=" + authService.getAuthString()+ "&authSignatureStr=" + authService.getAuthSignatureString(); } else { authStr = Util.null2String(params.get(RequestAuthenticationConstant.AUTHORITY_STRING)); authSignatureStr= Util.null2String(params.get(RequestAuthenticationConstant.AUTHORITY_SIGNATURESTRING)); authSignatureInfo = "&authStr=" + Util.null2String(params.get(RequestAuthenticationConstant.AUTHORITY_STRING)) + "&authSignatureStr=" + Util.null2String(params.get(RequestAuthenticationConstant.AUTHORITY_SIGNATURESTRING)); } workflowid = Util.getIntValue(Util.null2String(params.get("workflowid")), 0); nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")), 0); isworkflowhtmldoc = "1".equals(Util.null2String(attrSignatureUtil.getAttribute("isworkflowhtmldoc" + requestid))); desrequestid = Util.getIntValue(Util.null2String(attrSignatureUtil.getAttribute("desrequestid"))); isrequest = Util.getIntValue(Util.null2String(attrSignatureUtil.getAttribute("isrequest"))); isprint = "1".equals(Util.null2String(params.get("isprint"))); try { ResourceComInfo = new ResourceComInfo(); DepartmentComInfo = new DepartmentComInfo(); CustomerInfoComInfo = new CustomerInfoComInfo(); apidatas = getRequestLogData(); } catch (Exception e) { e.printStackTrace(); apidatas.put("error", "1"); } return apidatas; } public Map getRequestLogData() throws Exception { RecordSet recordSet = new RecordSet(); WorkflowAllComInfo wfComInfo = new WorkflowAllComInfo(); boolean isFromWfForm = "1".equals(params.get("isFromWfForm")); long start = System.currentTimeMillis(); int userid = user.getUID(); // boolean isdebug = (userid == 8 || userid == 80 || userid == 1215 || userid == 1348 || userid == 3724 || userid == 4548); boolean isdebug = true; if (isdebug) { log.error("requestlog-121-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } start = System.currentTimeMillis(); Map resultDatas = new HashMap(); boolean issplitload = Util.null2String(params.get("loadmethod")).equals("split"); //是否分页加载 if (isdebug) { log.error("requestlog-122-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } start = System.currentTimeMillis(); boolean loadbyuser = Boolean.parseBoolean(Util.null2String(params.get("loadbyuser"))); String viewLogIds = Util.null2String(params.get("viewLogIds")); int creatorNodeId = Util.getIntValue(Util.null2String(params.get("creatorNodeId"))); String isHideInput = Util.null2String(params.get("isHideInput")); // 是否流程督办 int urger = Util.getIntValue(Util.null2String(attrSignatureUtil.getAttribute("urger"))); // 是否流程干预 int isintervenor = Util.getIntValue(Util.null2String(attrSignatureUtil.getAttribute("isintervenor"))); // 转发引用权限 int forward = Util.getIntValue(Util.null2String(params.get("forward")), 0); int submit = Util.getIntValue(Util.null2String(params.get("submit")), 0); // 页面是否有表单签章,有的话,取消引用按钮 String isFormSignature = Util.null2String(params.get("isFormSignature")); boolean isFromMobile = "1".equals(Util.null2String(params.get("isFromMobile"))); String pgflag = Util.null2String(params.get("pgnumber")); String maxrequestlogid = Util.null2String(params.get("maxrequestlogid")); int wfsignlddtcnt = Util.getIntValue(Util.null2String(params.get("wfsignlddtcnt")), 0); String orderbytype = Util.null2String(params.get("orderbytype")); boolean isOldWf = "true".equals(Util.null2String(params.get("isOldWf"))); boolean isshowsrc = "1".equals(Util.null2String(wfComInfo.getShowSrc(String.valueOf(workflowid)))); boolean isOpenCommunication = false; recordSet.executeQuery("select orderbytype, isOpenCommunication from workflow_base where id = ?",workflowid); if(recordSet.next()){ orderbytype = Util.null2String(recordSet.getString(1)); isOpenCommunication = recordSet.getInt(2) == 1; } if (loadbyuser) { recordSet.executeSql("SELECT nodeid FROM workflow_currentoperator WHERE requestid=" + requestid + " AND userid=" + user.getUID() + " ORDER BY receivedate desc,receivetime DESC"); if (recordSet.next()) { String viewNodeId = recordSet.getString("nodeid"); recordSet.executeSql("SELECT viewnodeids FROM workflow_flownode WHERE workflowid=" + workflowid + " AND nodeid=" + viewNodeId); String viewnodeids = "-1"; if (recordSet.next()) { viewnodeids = recordSet.getString("viewnodeids"); } if ("-1".equals(viewnodeids)) {// 全部查看 recordSet.executeSql("SELECT nodeid FROM workflow_flownode WHERE workflowid= " + workflowid + " AND EXISTS(SELECT 1 FROM workflow_nodebase WHERE id=workflow_flownode.nodeid AND (requestid IS NULL OR requestid=" + requestid + "))"); while (recordSet.next()) { viewLogIds += "," + recordSet.getString("nodeid"); } } else if (viewnodeids == null || "".equals(viewnodeids)) {// 全部不能查看 } else {// 查看部分 viewLogIds += "," + viewnodeids; } } } int pgnumber = Util.getIntValue(pgflag); String orderby = "desc"; if ("2".equals(orderbytype)) { orderby = "asc"; } WFLinkInfo wfLinkInfo = new WFLinkInfo(); wfLinkInfo.setRequest(request); wfLinkInfo.setIsprint(isprint); ArrayList log_loglist = null; // 获取高级查询的条件 String sqlwhere = Util.null2String(params.get("sqlWhere")); if(!"".equals(sqlwhere)) writeLog("requestid:"+requestid+",userid:"+userid+",sqlwhere:"+sqlwhere); if ("".equals(source)){ sqlwhere += wfLinkInfo.getRequestLogSearchConditionStr(); } if (isdebug) { log.error("requestlog-123-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } // 节点签字意见权限控制 RequestRemarkRight remarkRight = new RequestRemarkRight(); String sqlcondition = remarkRight.getRightCondition(requestid, workflowid, user.getUID()); sqlcondition += RequestLogCusBiz.getCustomSourceCondition(source,params);//添加source自定义条件 sqlwhere += sqlcondition; if (isdebug) { log.error("requestlog-124-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } StringBuffer sbfmaxrequestlogid = new StringBuffer(maxrequestlogid); //分页加载重新计算当前页最大logid if (issplitload) { //sbfmaxrequestlogid = wfLinkInfo.getMaxLogid(requestid, workflowid, viewLogIds, orderby, wfsignlddtcnt, pgnumber, sqlwhere); } if (isdebug) { log.error("requestlog-125-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } if (pgflag == null || pgflag.equals("")) { log_loglist = wfLinkInfo.getRequestLog(requestid, workflowid, viewLogIds, "asc", sqlcondition); } else { //log_loglist = wfLinkInfo.getRequestLog(requestid, workflowid, viewLogIds, orderby, wfsignlddtcnt, sbfmaxrequestlogid, sqlwhere); boolean isSubrequest = (boolean)params.get("isSubrequest"); log_loglist = RequestLogCusBiz.getRequestLog(requestid,workflowid,viewLogIds,"asc",wfsignlddtcnt,pgnumber,sqlwhere,isSubrequest); if(RequestLogCusBiz.isEndLog(requestid,workflowid,viewLogIds,"asc",wfsignlddtcnt,pgnumber,sqlwhere)){///判断此次加载是否是最后一页 resultDatas.put("isEnd", true); } } resultDatas.put("maxrequestlogid", sbfmaxrequestlogid.toString()); if (isdebug) { log.error("requestlog-126-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } int tempRequestLogId = 0; int tempImageFileId = 0; int languageidfromrequest = user.getLanguage(); RecordSet recordSetlog3 = new RecordSet(); WorkflowRequestComInfo wfrequestcominfo = new WorkflowRequestComInfo(); DocImageManager DocImageManager = new DocImageManager(); SecCategoryComInfo SecCategoryComInfo1 = new SecCategoryComInfo(); RequestLogOperateName RequestLogOperateName = new RequestLogOperateName(); String initUser = ""; List> loglistnew = new ArrayList>(); //签字意见相关流程 String signrequestids = ""; if (isdebug) { log.error("requestlog-127-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } start = System.currentTimeMillis(); //二次认证,数据保护的验证 Map checkMap = SecondAuthBiz.getProtectedLogs(requestid); Map logIdMap = (HashMap) checkMap.get("logIdMap"); int checkLogId = Util.getIntValue(Util.null2String(checkMap.get("logId")), -1); checkMap.remove("logIdMap"); RequestSecondAuthService requestSecondAuthService = com.engine.common.util.ServiceUtil.getService(RequestSecondAuthServiceImpl.class, user); //批量获取契约锁认证的信息 Map qysSignInfoMap = SecondAuthBiz.getMultiQYSSignInfo(requestid); DateTransformer dft = new DateTransformer(); UnifiedConversionInterface uci = new UnifiedConversionInterface(); QysSignatureCominfo signatureCominfo = new QysSignatureCominfo(); int tempnodeid = FreeNodeBiz.getExtendNodeId(requestid,nodeid); Map operateNameMap = getOperateMenuName(tempnodeid, user.getLanguage()); String forwardMenuName = operateNameMap.get("forwardName"); for (int i = 0; i < log_loglist.size(); i++) { Hashtable htlog = (Hashtable) log_loglist.get(i); Map logmap = new HashMap(); int log_nodeid = Util.getIntValue((String) htlog.get("nodeid"), 0); int log_destnodeid = Util.getIntValue((String) htlog.get("destnodeid"), 0); int log_nodeattribute = Util.getIntValue((String) htlog.get("nodeattribute"), 0); String log_nodename = Util.null2String((String) htlog.get("nodename")); String log_remark = RequestFormBiz.manageCssPollute(Util.null2String((String) htlog.get("remark"))); String log_operator = Util.null2String((String) htlog.get("operator")); String log_operatedate = Util.null2String((String) htlog.get("operatedate")); String log_operatetime = Util.null2String((String) htlog.get("operatetime")); String isRobotNode = Util.null2String((String) htlog.get("isRobotNode")); if(uci.getTimeZoneStatus()) { //开启多时区 String[] tempoperatetime = dft.getLocaleDateAndTime(log_operatedate,log_operatetime); log_operatedate = tempoperatetime[0]; log_operatetime = tempoperatetime[1]; } String log_logtype = Util.null2String((String) htlog.get("logtype")); String log_receivedPersons = Util.null2String((String) htlog.get("receivedPersons")); String log_receivedPersonIds = Util.null2String((String) htlog.get("receivedPersonids")); tempRequestLogId = Util.getIntValue((String) htlog.get("logid"), 0); String log_annexdocids = Util.null2String((String) htlog.get("annexdocids")); String log_signdocids = Util.null2String((String) htlog.get("signdocids")); String log_signworkflowids = Util.null2String((String) htlog.get("signworkflowids")); String tmpLogId = Util.null2String(htlog.get("tmpLogId")); String remarkLocation = Util.null2String(htlog.get("remarkLocation")); String ismobile = Util.null2String(htlog.get("isMobile")); String remarkHtml = Util.null2String((String) htlog.get("remarkHtml")); SignSource signSource = "t".equals(log_logtype) ? null : SignSource.getSignSource(ismobile); String mobileSuffix = ""; if(signSource != null && (isshowsrc || signSource == SignSource.AUTO_APPROVE || signSource == SignSource.AUTO_SUBMIT)) { remarkHtml += SignSource.getSignSourceHtml(signSource,user.getLanguage()); //不显示意见来源,处理历史数据 } else if (!isshowsrc) { remarkHtml = RequestLogCusBiz.removeRemarkSource(remarkHtml); }else if(isshowsrc){ String remarktemp = remarkHtml; remarkHtml = RequestLogCusBiz.removeRemarkSource(remarktemp); int index = remarktemp.indexOf("来自微信企业号"); if (index > 0) { int index2 = remarktemp.indexOf("", index); remarkHtml += "
" + remarktemp.substring(index, index2); } } logmap.put("forwardMenuName", forwardMenuName); logmap.put("remarkLocation",remarkLocation); String log_remarkHtml = RequestFormBiz.manageCssPollute(remarkHtml); String log_iframeId = Util.null2String((String) htlog.get("iframeId")); int requestLogId = Util.getIntValue(Util.null2String(htlog.get("id")), 0); String log_operatortype = Util.null2String((String) htlog.get("operatortype")); //验证数据 //if (!isprint) { logmap.put("isProtected", "0"); logmap.put("checkSuccess", "-1"); if (requestLogId > 0) { if (logIdMap.containsKey(String.valueOf(tmpLogId))) { //有契约锁数据保护 int protectType = Util.getIntValue(Util.null2String(logIdMap.get(tmpLogId)), 0); logmap.put("isProtected", "1"); logmap.put("protectType", protectType); if (protectType == SecondAuthType.QYS.getId()) { //契约锁数据保护 //add by fmj 2019-08-27 因为契约锁数据保护,也会先进行契约锁认证,因此此处先取认证时选择的印章, //String qysSignatureId = SecondAuthBiz.getQYSSignatureId(Util.getIntValue(tmpLogId, 0)); String qysSignatureId = ""; Map certDetails = new HashMap(); if (qysSignInfoMap.containsKey(tmpLogId)) { Map signInfoMap = (Map) qysSignInfoMap.get(tmpLogId); if (signInfoMap != null) { qysSignatureId = Util.null2String(signInfoMap.get("signatureId")); certDetails = (Map) signInfoMap.get("certDetails"); } } int signatureId = Util.getIntValue(qysSignatureId, 0); //没有认证时选择的印章,再取从契约锁同步过来的个人签名 if (signatureId <= 0) { qysSignatureId = signatureCominfo.getSignatureid(log_operator); signatureId = Util.getIntValue(qysSignatureId, 0); } if (signatureId > 0) { String signIdCode = DocDownloadCheckUtil.EncodeFileid(signatureId + "",user); logmap.put("qys_signature_id", signIdCode); //添加印章的尺寸 // Map certDetails = SecondAuthBiz.getCertDetails(Util.getIntValue(tmpLogId, 0)); int qyswidth = (int)Util.getDoubleValue(Util.null2String(certDetails.get("qyswidth")),0); int qysheight = (int)Util.getDoubleValue(Util.null2String(certDetails.get("qysheight")),0); logmap.put("qyswidth",qyswidth); logmap.put("qysheight",qysheight); } } //数据保护默认所有的都是验证通过的,只对最后一条签字意见做特殊处理,需要验证数据有效性 logmap.put("checkSuccess", 1); logmap.put("clickCheck", 0); } else { //没有契约锁数据保护 //String qysSignatureId = SecondAuthBiz.getQYSSignatureId(Util.getIntValue(tmpLogId, 0)); String qysSignatureId = ""; Map certDetails = new HashMap(); if (qysSignInfoMap.containsKey(tmpLogId)) { Map signInfoMap = (Map) qysSignInfoMap.get(tmpLogId); if (signInfoMap != null) { qysSignatureId = Util.null2String(signInfoMap.get("signatureId")); certDetails = (Map) signInfoMap.get("certDetails"); } } int signatureId = Util.getIntValue(qysSignatureId, 0); if (signatureId > 0) { String signIdCode = DocDownloadCheckUtil.EncodeFileid(signatureId + "",user); logmap.put("qys_signature_id", signIdCode); //添加印章的尺寸 //Map certDetails = SecondAuthBiz.getCertDetails(Util.getIntValue(tmpLogId, 0)); int qyswidth = (int)Util.getDoubleValue(Util.null2String(certDetails.get("qyswidth")),0); int qysheight = (int)Util.getDoubleValue(Util.null2String(certDetails.get("qysheight")),0); logmap.put("qyswidth",qyswidth); logmap.put("qysheight",qysheight); } } if (requestLogId == checkLogId) { //最后一条签字意见,验证数据保护 Map checkResult = requestSecondAuthService.checkProtectDatas(checkMap); String checkSuccess = Util.null2String(checkResult.get("success")); logmap.put("checkSuccess", checkSuccess); logmap.put("clickCheck", 1); } } // } if (pgflag == null || pgflag.equals("")) { if (log_loglist.size() > 10) { if (i < 10) { continue; } } } tempImageFileId = 0; if (tempRequestLogId > 0) { recordSet.executeSql("select imageFileId from Workflow_FormSignRemark where requestLogId=" + tempRequestLogId); if (recordSet.next()) { tempImageFileId = Util.getIntValue(recordSet.getString("imageFileId"), 0); } } logmap.put("logid", Util.null2String((String) htlog.get("id"))); //是否有相关交流引用 if (isOpenCommunication) { logmap.put("hasCommunicationQuote", WorkflowCommunicationBiz.requestLogQuoteCheck(Util.getIntValue(Util.null2String(logmap.get("logid"))))); } String img_path = "0".equals(log_operatortype) ? ResourceComInfo.getMessagerUrls(log_operator) : "/messager/images/icon_m_wev8.jpg"; img_path = RobotNodeBiz.operatortype.equals(log_operatortype) ? "/messager/images/robot.png" : img_path; // 人员头像 logmap.put("img_path", img_path); int showimg = Util.getIntValue(recordSet.getPropValue("WFSignatureImg", "showimg"), 0); int signnaturImgHeight = Util.getIntValue(recordSet.getPropValue("WFSignatureImg", "imgheight")); recordSet.execute("select * from DocSignature where hrmresid=" + log_operator + " and sealtype = 1 order by markid"); String userimg = ""; // 表单签章 if (showimg == 1 && recordSet.next() && true && "0".equals(log_operatortype)) { String markpath = Util.null2String(recordSet.getString("markpath")); if (!markpath.equals("")) { OdocFileUtil odocfileutil = new OdocFileUtil(); String useridrandom = odocfileutil.changeParamToBase64Str(Util.getIntValue(log_operator,-1)+""); userimg = "/weaver/weaver.file.ImgFileDownload?userid=" + useridrandom+"&sealType=1"; } } logmap.put("userimg", userimg); logmap.put("signnaturImgHeight", signnaturImgHeight); this.loadOperatorInfo(isOldWf, htlog, creatorNodeId, recordSetlog3, logmap); // 签字意见内容 if (!log_logtype.equals("t")) { // 表单签章 if (tempRequestLogId > 0 && tempImageFileId > 0) { log_remarkHtml += ""; } else { Pattern pattern0 = Pattern.compile("(\\/workflow\\/request\\/ViewRequest(ForwardSPA)?\\.jsp\\?)"); Matcher m0 = pattern0.matcher(log_remarkHtml); if(m0.find()) { log_remarkHtml = m0.replaceAll("/workflow/request/ViewRequestForwardSPA.jsp?f_weaver_belongto_userid=" + f_weaver_belongto_userid + authSignatureInfo + "&desrequestid=" + requestid + "&"); } Pattern pattern1 = Pattern.compile("(\\/docs\\/docs\\/DocDsp.jsp\\?)"); Matcher m1 = pattern1.matcher(log_remarkHtml); if (m1.find()) { log_remarkHtml = m1.replaceAll(ServiceUtil.docViewUrl + "?f_weaver_belongto_userid=" + f_weaver_belongto_userid + authSignatureInfo + "&desrequestid=" + requestid + "&"); } // 流程签字意见内容中附件 if(log_remarkHtml.indexOf("desrequestid=0")>-1) log_remarkHtml = log_remarkHtml.replace("desrequestid=0", "desrequestid=" + desrequestid); if(log_remarkHtml.indexOf("requestid=-1")>-1) log_remarkHtml = log_remarkHtml.replace("requestid=-1", "requestid=" + requestid); // if (log_remarkHtml.indexOf(" -1 && !isFromMobile) { // String begin_logRemark = ""; // String new_logRemark = ""; // String end_logRemark = ""; // String cycleString = log_remarkHtml; // int f = 0; // while (cycleString.indexOf(" -1) { // f++; // int b = cycleString.indexOf(""); // imgString = cycleString.substring(0, e); // if (isworkflowhtmldoc) { // new_logRemark += "" + imgString + " onload=\"image_resize(this,'" + log_iframeId + "');\" onresize=\"image_resize(this,'" + log_iframeId + "');\" /> "; // } else { // new_logRemark += "
" + imgString + " style=\"max-width:100%;\" class=\"maxImg\" />
"; // } // cycleString = cycleString.substring(e + 2); // end_logRemark = cycleString; // } // new_logRemark += end_logRemark; // log_remarkHtml = new_logRemark; // } if(!isprint && isFromWfForm) log_remarkHtml= RequestFormBiz.manageImgLazyLoad(log_remarkHtml); //图片懒加载处理 if (isprint && log_remark.indexOf(" -1) { // 打印使用的是log_remark,也需要处理img // ///////// String begin_logRemark = ""; String new_logRemark = ""; String end_logRemark = ""; String cycleString = log_remark; int f = 0; while (cycleString.indexOf(" -1) { f++; int b = cycleString.indexOf(""); imgString = cycleString.substring(0, e); new_logRemark += "
" + imgString + " onload=\"image_resize(this,'" + log_iframeId + "');\" onresize=\"image_resize(this,'" + log_iframeId + "');\" />
" + imgString + " class=\"maxImg\" />
"; cycleString = cycleString.substring(e + 2); end_logRemark = cycleString; } new_logRemark += end_logRemark; log_remark = new_logRemark; } String tempremark = log_remark; tempremark = Util.StringReplace(tempremark, "<br>", "
"); if (!"".equals(tempremark) && isprint) { tempremark += "
"; } logmap.put("tempremark", tempremark); logmap.put("pgflag", Util.null2String(pgflag)); } } try { String appendData = log_remarkHtml; if(appendData.indexOf("handwritten_xzl")>-1){ int start1 = appendData.indexOf("handwritten_xzl")+21; String tempStr = appendData.substring(start1); int end = tempStr.indexOf("src")-2; String fileId= tempStr.substring(0,end); String new_img=""; String attachmentidAes = DocDownloadCheckUtil.checkPermission(String.valueOf(fileId), null); new_img += "
"; String begin_logRemark = ""; String new_logRemark = ""; String end_logRemark = ""; String cycleString = appendData; if (cycleString.indexOf(" -1) { int b = cycleString.indexOf(""); new_logRemark += new_img; cycleString = cycleString.substring(e + 2); end_logRemark = cycleString; } new_logRemark += end_logRemark; log_remarkHtml = new_logRemark; } }catch(Exception e){ e.printStackTrace(); } logmap.put("log_remarkHtml", ServiceUtil.convertChar(log_remarkHtml)); if(isrequest==-1){ isrequest = Util.getIntValue(Util.null2String(params.get("isrequest")))==-1?1:Util.getIntValue(Util.null2String(params.get("isrequest"))); } // 相关文件 if (!log_annexdocids.equals("") || !log_signdocids.equals("") || !log_signworkflowids.equals("")) { // 相关文档 if (!log_signdocids.equals("")) { recordSetlog3.executeSql("select id,docsubject,accessorycount,SecCategory from docdetail where id in(" + log_signdocids + ") order by id asc"); List> signdocs = new ArrayList>(); while (recordSetlog3.next()) { Map map = new HashMap(); String showid = Util.null2String(recordSetlog3.getString(1)); String tempshowname = Util.toScreen(recordSetlog3.getString(2), languageidfromrequest); map.put("showid", showid); map.put("authStr", authStr); map.put("authSignatureStr", authSignatureStr); map.put("tempshowname", tempshowname); map.put("filelink", ServiceUtil.docViewUrl + "?f_weaver_belongto_userid=" + user.getUID() + "&f_weaver_belongto_usertype=" + f_weaver_belongto_usertype + "&id=" + showid + "&isrequest="+isrequest+"&requestid=" + requestid + authSignatureInfo); signdocs.add(map); } logmap.put("signdocs", signdocs); } int tempnum = Util.getIntValue(String.valueOf(attrSignatureUtil.getAttribute("slinkwfnum"))); // if(tempnum <= 0){ // tempnum = Util.getIntValue(String.valueOf(session.getAttribute("slinkwfnum"))); // } // 相关流程 if (!log_signworkflowids.equals("")) { List> signwfs = new ArrayList>(); ArrayList tempwflists = Util.TokenizerString(log_signworkflowids, ","); for (int k = 0; k < tempwflists.size(); k++) { tempnum++; //session.setAttribute("resrequestid" + tempnum, "" + tempwflists.get(k)); Map map = new HashMap(); map.put("isrequest", "1"); map.put("requestid", tempwflists.get(k)); //map.put("wflinkno", tempnum + ""); map.put("desrequestid", requestid); map.put("authSignatureInfo",authSignatureInfo); map.put("authStr",authStr); map.put("authSignatureStr",authSignatureStr); map.put("f_weaver_belongto_userid", f_weaver_belongto_userid); map.put("f_weaver_belongto_usertype", f_weaver_belongto_usertype); map.put("title", wfrequestcominfo.getRequestName((String) tempwflists.get(k))); signwfs.add(map); signrequestids += tempwflists.get(k) + ","; } logmap.put("signwfs", signwfs); } //session.setAttribute("slinkwfnum", "" + tempnum); //session.setAttribute("haslinkworkflow", "1"); attrSignatureUtil.setAttribute("haslinkworkflow", "1"); // 相关附件 if (!log_annexdocids.equals("")) { recordSetlog3.executeSql("select id,docsubject,accessorycount,SecCategory from docdetail where id in(" + log_annexdocids + ") order by id asc"); List> annexdocs = new ArrayList>(); while (recordSetlog3.next()) { String showid = Util.null2String(recordSetlog3.getString(1)); String tempshowname = Util.toScreen(recordSetlog3.getString(2), languageidfromrequest); int accessoryCount = recordSetlog3.getInt(3); String SecCategory = Util.null2String(recordSetlog3.getString(4)); DocImageManager.resetParameter(); DocImageManager.setDocid(Util.getIntValue(showid)); DocImageManager.selectDocImageInfo(); String docImagefilename = ""; String fileExtendName = ""; String docImagefileid = ""; int versionId = 0; long docImagefileSize = 0; if (DocImageManager.next()) { // DocImageManager会得到doc第一个附件的最新版本 docImagefilename = DocImageManager.getImagefilename(); fileExtendName = docImagefilename.substring(docImagefilename.lastIndexOf(".") + 1).toLowerCase(); docImagefileid = DocImageManager.getImagefileid(); docImagefileSize = DocImageManager.getImageFileSize(Util.getIntValue(docImagefileid)); versionId = DocImageManager.getVersionId(); } if (accessoryCount > 1) { fileExtendName = "htm"; } //String imgSrc = AttachFileUtil.getImgStrbyExtendName(fileExtendName, 16); boolean nodownload = SecCategoryComInfo1.getNoDownload(SecCategory).equals("1") ? true : false; String filelink = ""; //打开文档判断是否在线预览,文档处已经做了全部的处理。所以这边直接走else逻辑 if (false && accessoryCount == 1 && (fileExtendName.equalsIgnoreCase("xls") || fileExtendName.equalsIgnoreCase("doc") || fileExtendName.equalsIgnoreCase("xlsx") || fileExtendName.equalsIgnoreCase("docx") || fileExtendName.equalsIgnoreCase("pdf"))) { filelink = ServiceUtil.docViewUrl + "?f_weaver_belongto_userid=" + user.getUID() + "&f_weaver_belongto_usertype=" + f_weaver_belongto_usertype + "&id=" + showid + "&imagefileId=" + docImagefileid + "&isFromAccessory=true&isrequest="+isrequest+"&requestid=" + requestid + "&desrequestid=" + desrequestid + authSignatureInfo; } else { filelink = ServiceUtil.docViewUrl + "?f_weaver_belongto_userid=" + user.getUID() + "&f_weaver_belongto_usertype=" + f_weaver_belongto_usertype + "&id=" + showid + "&isrequest="+isrequest+"&requestid=" + requestid + "&desrequestid=" + desrequestid + authSignatureInfo; } String downloadlink = ""; if (accessoryCount == 1 && !isprint && ((!fileExtendName.equalsIgnoreCase("xls") && !fileExtendName.equalsIgnoreCase("doc")) || !nodownload)) { downloadlink = weaver.general.GCONST.getContextPath()+"/weaver/weaver.file.FileDownload?fileid=" + docImagefileid + "&download=1&requestid=" + requestid + "&desrequestid=" + desrequestid + authSignatureInfo; } Map map = new HashMap(); map.put("showid", showid); //附件ID map.put("docImagefilename", docImagefilename); //附件名称 map.put("fileExtendName", fileExtendName); //附件后缀名 map.put("docImagefileid", docImagefileid); map.put("versionId", versionId); map.put("docImagefileSize", docImagefileSize); map.put("nodownload", nodownload); map.put("tempshowname", tempshowname); map.put("filelink", filelink); map.put("downloadlink", downloadlink); map.put("authStr",authStr); map.put("authSignatureStr",authSignatureStr); boolean docright = true; if("1".equals(new WorkflowConfigComInfo().getValue("file_download_use_docright"))){ DocViewPermission docViewPermission = new DocViewPermission(); docright = docViewPermission.getShareLevel(Util.getIntValue(showid), user, false).get(DocViewPermission.DOWNLOAD); new BaseBean().writeLog("流程附件下载权限走知识组权限:docright:"+docright+";showid:"+showid); } map.put("showdownload", docright && (!Strings.isNullOrEmpty(downloadlink)) ); annexdocs.add(map); } //需要按照存放顺序显示,存放顺序即log_annexdocids的顺序 String [] idssort = log_annexdocids.split(","); List> annexdocssort = new ArrayList>(); for(String sort: idssort) { for(int si = 0;si 0 && log_receivedPersons.trim().endsWith(",")) { log_receivedPersons = log_receivedPersons.substring(0, log_receivedPersons.length() - 1); } initUsers = log_receivedPersons.split(","); initUser = ""; if (initUsers.length > showCount) { for (int j = 0; j < showCount; j++) { initUser += "," + initUsers[j]; } if (initUser.length() > 1) { initUser = initUser.substring(1); } } else { initUser = log_receivedPersons; } loadMobileInfo(htlog,logmap); // 如果是打印页面,则不隐藏接收人 logmap.put("receiveUser", ServiceUtil.convertChar(initUser)); logmap.put("receiveUserCount", Util.splitString2List(log_receivedPersonIds,",").size()); //判断是否需要显示意见接收人栏的加载更多按钮 boolean showMoreReceiveBtn = log_receivedPersonIds.split(",").length > log_receivedPersons.split(",").length ? true : false; logmap.put("showMoreReceiveBtn", showMoreReceiveBtn); // 操作时间 logmap.put("log_operatedate", Util.toScreen(log_operatedate, languageidfromrequest)); logmap.put("log_operatetime", Util.toScreen(log_operatetime, languageidfromrequest)); // 节点信息 logmap.put("log_nodename", Util.toScreen(log_nodename, languageidfromrequest)); String logtype = log_logtype; String operationname = ""; if("1".equals(isRobotNode)){ operationname = Util.formatMultiLang(new RobotNodeServiceBiz().getRobotNodeSet(Util.getIntValue(log_nodeid)).getOperateTypeName(), languageidfromrequest + ""); } if("".equals(operationname)){ operationname = RequestLogOperateName.getOperateName("" + workflowid, "" + requestid, "" + log_nodeid, logtype, log_operator, languageidfromrequest,log_operatedate,log_operatetime); } logmap.put("operationname", operationname); // 引用按钮 boolean isReference = (!isHideInput.equals("1") && ((isintervenor == 1 || urger == 1 || submit == 1) && !isFormSignature.equals("1")) && !log_logtype.equals("t") && (log_remarkHtml != null && !"".equals(log_remarkHtml.trim()))); logmap.put("isReference", isReference); logmap.put("displaytype", log_operatortype); // 转发 logmap.put("forward", forward); logmap.put("logtype",log_logtype); loglistnew.add(logmap); } if (isdebug) { log.error("requestlog-128-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); } resultDatas.put("totalCount", RequestLogCusBiz.getRequestLogTotalCount(requestid, workflowid, viewLogIds, sqlwhere)); //相关请求增加session信息 //ServiceUtil.addRelatedWfSession(request, this.requestid, signrequestids); resultDatas.put("loglist", loglistnew); return resultDatas; } //支持手机端 private void loadMobileInfo(Hashtable htlog,Map logmap){ //设置手写签批 String attenchmentID = Util.null2String(htlog.get("handwrittensignid")); new BaseBean().writeLog("handwrittensignid123:"+attenchmentID); List docAttachments = new ArrayList<>(); String[] attenchmentids = attenchmentID.split(","); if(!"".equals(attenchmentID)) { for (int i = 0; i < attenchmentids.length; i++) { int attenchmentid = Util.getIntValue(attenchmentids[i]); if (attenchmentid > 0) { String strData = WorkflowSpeechAppend.getAppend(attenchmentid); logmap.put("handWrittenSign", "data:image/png;base64," + strData); //获取手写签章详细信息 DocAttachment docAttObj = WorkflowSpeechAppend.getAttachment(attenchmentid); docAttachments.add(docAttObj); } } } logmap.put("handWrittenSignDoc", docAttachments); //设置语音附件 int attenchmentID1 = Util.getIntValue(Util.null2String(htlog.get("speechattachmentid"))); String speechAttachmente9 = Util.null2String(htlog.get("speechAttachmente9")); if(attenchmentID1 > 0){ if(!"".equals(speechAttachmente9)) { speechAttachmente9 += "," + attenchmentID1; } else { speechAttachmente9 = attenchmentID1 + ""; } } List speechAttachmetnDatas = new ArrayList <>(); if(!"".equals(speechAttachmente9)) { String[] speechIds = Util.splitString(speechAttachmente9,","); for(String speechid : speechIds) { int _speechid = Util.getIntValue(speechid); if(_speechid > 0) { DocAttachment attenchmentDoc = WorkflowSpeechAppend.getAttachment(_speechid); String fileType = attenchmentDoc.getFiletype(); if(fileType.indexOf("/") >=0){ fileType = fileType.substring(fileType.indexOf("/") + 1); } speechAttachmetnDatas.add("data:audio/" + fileType + ";base64," + WorkflowSpeechAppend.getAppend(_speechid)); } } } logmap.put("speechAttachmetnDatas",speechAttachmetnDatas); //电子签章 String remark = Util.null2String(logmap.get("log_remarkHtml")); String eletriSignature = WorkflowSpeechAppend.getElectrSignatrue(remark); if (eletriSignature != null && !"".equals(eletriSignature)){ Pattern pattern = Pattern.compile("/weaver/weaver\\.file\\.SignatureDownLoad\\?markId=\\d+"); Matcher matcher = pattern.matcher(eletriSignature); if(matcher.find()){ String tempurl = matcher.group(); logmap.put("eletriSignature", tempurl); }else{ writeLog(String.format("The eletriSignature URL of '%1$s' is null.", eletriSignature)); } } } /** * 加载节点操作者信息 * * @param isOldWf * @param htlog * @param creatorNodeId * @param recordSetlog3 */ private void loadOperatorInfo(boolean isOldWf, Hashtable htlog, int creatorNodeId, RecordSet recordSetlog3, Map logmap) { int languageidfromrequest = user.getLanguage(); boolean isexsAgent = false; boolean isinneruser = true; String displayid = ""; String displayname = ""; String displaydepid = ""; String displaydepname = ""; String displaybyagentid = ""; String displaybyagentname = ""; String log_operatortype = Util.null2String((String) htlog.get("operatortype")); String log_operatorDept = Util.null2String((String) htlog.get("operatorDept")); String log_operator = Util.null2String((String) htlog.get("operator")); String log_agenttype = Util.null2String((String) htlog.get("agenttype")); String log_agentorbyagentid = Util.null2String((String) htlog.get("agentorbyagentid")); int log_nodeid = Util.getIntValue((String) htlog.get("nodeid"), 0); if (log_operatortype.equals("0") && !"0".equals(Util.null2String(log_operatorDept)) && !"".equals(Util.null2String(log_operatorDept))) { displaydepid = Util.toScreen(log_operatorDept, languageidfromrequest); OrganizationShowSetBiz orgShowBiz = new OrganizationShowSetBiz(); displaydepname = Util.toScreen(orgShowBiz.getDepartmentShow("workflow", log_operatorDept), languageidfromrequest); } String robotNodeName = new RobotNodeServiceBiz().getRobotNodeSet(log_nodeid).getOperatorName(); if (isOldWf) { if (log_operatortype.equals("0")) { if (isprint == false) { displayid = log_operator; displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } else { displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } } else if (log_operatortype.equals("1")) { isinneruser = false; if (isprint == false) { displayid = log_operator; displayname = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(log_operator), languageidfromrequest); } else { displayname = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(log_operator), languageidfromrequest); } } else if (log_operatortype.equals(RobotNodeBiz.operatortype)){ if (isprint == false) { displayid = log_operator; displayname = Util.toScreen(robotNodeName, languageidfromrequest); } else { displayname = Util.toScreen(robotNodeName, languageidfromrequest); } }else { displayname = SystemEnv.getHtmlLabelName(468, languageidfromrequest); } } else { if (log_operatortype.equals("0")) { if (isprint == false) { if (!log_agenttype.equals("2")) { displayid = log_operator; displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } else if (log_agenttype.equals("2") || log_agenttype.equals("1")) { isexsAgent = true; displaybyagentid = log_agentorbyagentid; displaybyagentname = Util.toScreen(ResourceComInfo.getLastname(log_agentorbyagentid), languageidfromrequest); displayid = log_operator; displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } else { } } else { if (!log_agenttype.equals("2")) { displayid = log_operator; displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } else if (log_agenttype.equals("2")) { isexsAgent = true; displayid = log_operator; displaybyagentname = Util.toScreen(ResourceComInfo.getLastname(log_agentorbyagentid), languageidfromrequest); displayname = Util.toScreen(ResourceComInfo.getLastname(log_operator), languageidfromrequest); } else { } } } else if (log_operatortype.equals("1")) { isinneruser = false; if (isprint == false) { displayid = log_operator; displayname = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(log_operator), languageidfromrequest); } else { displayname = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(log_operator), languageidfromrequest); } } else if (log_operatortype.equals(RobotNodeBiz.operatortype)){ if (isprint == false) { displayid = log_operator; displayname = Util.toScreen(robotNodeName, languageidfromrequest); } else { displayname = Util.toScreen(robotNodeName, languageidfromrequest); } } else { displayname = SystemEnv.getHtmlLabelName(468, languageidfromrequest); } } // 节点操作者有代理 显示的格式为 bagenter->agenter logmap.put("isexsAgent", isexsAgent); logmap.put("log_agentorbyagentid", log_agentorbyagentid); logmap.put("displaybyagentname", displaybyagentname); // 节点操作者 logmap.put("isinneruser", isinneruser); logmap.put("displayid", displayid); logmap.put("displayname", displayname); // 操作者部门 logmap.put("displaydepid", displaydepid); logmap.put("displaydepname", displaydepname); } public HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } public Map getOperateMenuName(int tempnodeid, int language){ Map operateNmae = new HashMap<>(); RightMenu rightMenu = new RightMenu(); rightMenu.setSystemMenuType(SystemMenuType.FORWARD); rightMenu.setSystemSmallType(2); String forwardName = MenuOrderSetUtil.getLogName(Util.getIntValue(workflowid),tempnodeid,language,rightMenu); operateNmae.put("forwardName",forwardName); return operateNmae; } public static void main(String[] args){ String value = "2020-10-11 11:22:0.00"; value = value.substring(0,10); log.error("value2222:"+value); } }