From 21a4b5e9b4740282b7402993f2b9112a8ec9d3ae Mon Sep 17 00:00:00 2001 From: rengp Date: Sun, 24 Mar 2024 01:10:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9C=AC=E5=9C=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- com/api/login/util/LoginUtil.java | 7 +- com/api/nsyh/opinion/WfOpinion.java | 14 + .../ProxyRequestFormServiceImpl.java | 63 +- .../ProxyRequestListServiceImpl.java | 142 + .../archives/action/WorkflowToDocCus.java | 1434 +++++++++ .../archives/corn/PushArchivesCorn.java | 31 + com/engine/custom/archives/entity/Dept.java | 84 + .../archives/service/HtmlToPdfServiceCus.java | 19 + .../service/PushArchivesCornService.java | 1717 +++++++++++ .../service/impl/HtmlToPdfServiceCusImpl.java | 226 ++ .../requestForm/RequestDocPropManagerCus.java | 571 ++++ .../biz/requestForm/SaveDocDetailBizCus.java | 882 ++++++ .../biz/requestForm/WfToDocBizCus.java | 457 +++ .../biz/requestLog/RequestLogCusBiz.java | 799 +++++ .../requestLog/LoadRequestLogDataCusCmd.java | 1072 +++++++ com/engine/custom/yunxuetang/Test.java | 2 + com/engine/tjbankSocket/SocketExecute.java | 4 +- .../tjbankSocket/impl/CWGLSocketExecute.java | 4 +- .../impl/GetToCountSocketExecute.java | 6 +- com/engine/util/SocketClientUtil.java | 116 + com/engine/util/XMLUtils.java | 379 +++ com/engine/web/tjbk/TJBKWorkFlow.java | 5 +- com/engine/web/tjbk/TjbkServerSocket.java | 18 +- .../nsyh/opinion/cmd/GetNodesCmd.java | 65 + .../opinion/service/WfOpinionService.java | 15 + .../service/impl/WfOpinionServiceImpl.java | 19 + .../nsyh/opinion/web/WfOpinionAction.java | 55 + interface/transfer/testDemo.jsp | 1188 ++++++++ interface/transfer/testDemo2.jsp | 80 + interface/transfer/testError.jsp | 847 +++++- interface/transfer/testError2.jsp | 99 + interface/transfer/testError3.jsp | 52 + interface/transfer/testPost.jsp | 99 + interface/transfer/testXML.jsp | 75 + interface/transfer/最终测试一下1106.html | 2580 +++++++++++++++++ produce/23/transfer.zip | Bin 158962 -> 0 bytes produce/23/transfer/EntranceQQEmail.jsp | 33 + produce/23/transfer/integration.log | 1324 +++++++++ produce/23/transfer/mobile/MHXX.jsp | 56 +- produce/23/transfer/ofsTrance.jsp | 45 +- produce/23/transfer/ofsTrance.zip | Bin 0 -> 2682 bytes weaver/filter/LoginEMFilter.java | 32 +- .../action/javacode/Action20231015024217.java | 7 +- .../action/javacode/Action20231113045722.java | 15 +- .../action/javacode/Action20240312101859.java | 68 + .../action/javacode/Action20240312103913.java | 67 + 46 files changed, 14746 insertions(+), 127 deletions(-) create mode 100644 com/api/nsyh/opinion/WfOpinion.java rename com/customization/{ProxyRequestForm => doReadItProxy/ProxyRequestFormService}/ProxyRequestFormServiceImpl.java (87%) create mode 100644 com/customization/doReadItProxy/proxyRequestListService/ProxyRequestListServiceImpl.java create mode 100644 com/engine/custom/archives/action/WorkflowToDocCus.java create mode 100644 com/engine/custom/archives/corn/PushArchivesCorn.java create mode 100644 com/engine/custom/archives/entity/Dept.java create mode 100644 com/engine/custom/archives/service/HtmlToPdfServiceCus.java create mode 100644 com/engine/custom/archives/service/PushArchivesCornService.java create mode 100644 com/engine/custom/archives/service/impl/HtmlToPdfServiceCusImpl.java create mode 100644 com/engine/custom/archives/workflow/biz/requestForm/RequestDocPropManagerCus.java create mode 100644 com/engine/custom/archives/workflow/biz/requestForm/SaveDocDetailBizCus.java create mode 100644 com/engine/custom/archives/workflow/biz/requestForm/WfToDocBizCus.java create mode 100644 com/engine/custom/archives/workflow/biz/requestLog/RequestLogCusBiz.java create mode 100644 com/engine/custom/archives/workflow/cmd/requestLog/LoadRequestLogDataCusCmd.java create mode 100644 com/engine/util/SocketClientUtil.java create mode 100644 com/engine/util/XMLUtils.java create mode 100644 com/weavernorth/nsyh/opinion/cmd/GetNodesCmd.java create mode 100644 com/weavernorth/nsyh/opinion/service/WfOpinionService.java create mode 100644 com/weavernorth/nsyh/opinion/service/impl/WfOpinionServiceImpl.java create mode 100644 com/weavernorth/nsyh/opinion/web/WfOpinionAction.java create mode 100644 interface/transfer/testDemo.jsp create mode 100644 interface/transfer/testDemo2.jsp create mode 100644 interface/transfer/testError2.jsp create mode 100644 interface/transfer/testError3.jsp create mode 100644 interface/transfer/testPost.jsp create mode 100644 interface/transfer/testXML.jsp create mode 100644 interface/transfer/最终测试一下1106.html delete mode 100644 produce/23/transfer.zip create mode 100644 produce/23/transfer/EntranceQQEmail.jsp create mode 100644 produce/23/transfer/integration.log create mode 100644 produce/23/transfer/ofsTrance.zip create mode 100644 weaver/interfaces/workflow/action/javacode/Action20240312101859.java create mode 100644 weaver/interfaces/workflow/action/javacode/Action20240312103913.java diff --git a/com/api/login/util/LoginUtil.java b/com/api/login/util/LoginUtil.java index a1f03fe..84b6785 100644 --- a/com/api/login/util/LoginUtil.java +++ b/com/api/login/util/LoginUtil.java @@ -250,7 +250,7 @@ public class LoginUtil extends BaseBean { if("1".equals(isrsaopen)){ decriptList.add(login_id) ; decriptList.add(user_password) ; - List resultList = rsa.decryptList(request,decriptList) ; + List resultList = rsa.decryptList(request,decriptList,true) ; login_id = resultList.get(0) ; user_password = resultList.get(1) ; @@ -2022,7 +2022,7 @@ public class LoginUtil extends BaseBean { if ("1".equals(isrsaopen)) { decriptList.add(login_id); decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); + List resultList = rsa.decryptList(request, decriptList,true); login_id = resultList.get(0); user_password = resultList.get(1); @@ -2244,7 +2244,8 @@ public class LoginUtil extends BaseBean { if (imsgid == 184) { errorMsg[2] = SystemEnv.getErrorMsgName(imsgid, languageid); } else { - errorMsg[2] = (String) resObj.get("msg"); + // errorMsg[2] = (String) resObj.get("msg"); + errorMsg[2] = "账号或密码错误"; } } bb.writeLog("最后返回的msg"+errorMsg); diff --git a/com/api/nsyh/opinion/WfOpinion.java b/com/api/nsyh/opinion/WfOpinion.java new file mode 100644 index 0000000..79416ed --- /dev/null +++ b/com/api/nsyh/opinion/WfOpinion.java @@ -0,0 +1,14 @@ +package com.api.nsyh.opinion; + +import com.weavernorth.nsyh.opinion.web.WfOpinionAction; + +import javax.ws.rs.Path; + +/** + * @Author : 孙浩 + * @Date : 2022/3/1 9:39 + * @Version 1.0 + */ +@Path("/nsyh/opinion") +public class WfOpinion extends WfOpinionAction { +} diff --git a/com/customization/ProxyRequestForm/ProxyRequestFormServiceImpl.java b/com/customization/doReadItProxy/ProxyRequestFormService/ProxyRequestFormServiceImpl.java similarity index 87% rename from com/customization/ProxyRequestForm/ProxyRequestFormServiceImpl.java rename to com/customization/doReadItProxy/ProxyRequestFormService/ProxyRequestFormServiceImpl.java index e4da263..e4d9e33 100644 --- a/com/customization/ProxyRequestForm/ProxyRequestFormServiceImpl.java +++ b/com/customization/doReadItProxy/ProxyRequestFormService/ProxyRequestFormServiceImpl.java @@ -1,43 +1,26 @@ -package com.customization.ProxyRequestForm; +package com.customization.doReadItProxy.ProxyRequestFormService; -import com.alibaba.fastjson.JSONObject; -import com.engine.core.cfg.annotation.CommandDynamicProxy; import com.engine.core.cfg.annotation.ServiceDynamicProxy; import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; import com.engine.core.impl.aop.AbstractServiceProxy; -import com.engine.core.interceptor.AbstractCommandProxy; -import com.engine.core.interceptor.Command; -import com.engine.workflow.cmd.requestForm.GetRightMenuCmd; -import com.engine.workflow.constant.menu.SystemMenuType; -import com.engine.workflow.constant.requestForm.RequestMenuType; import com.engine.workflow.entity.requestForm.AutoApproveEntity; -import com.engine.workflow.entity.requestForm.RightMenu; import com.engine.workflow.service.RequestFormService; -import com.engine.workflow.service.RequestService; import com.engine.workflow.service.impl.RequestFormServiceImpl; import com.wbi.util.ParamUtil; -import lombok.extern.log4j.Log4j; -import lombok.extern.log4j.Log4j2; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import weaver.conn.RecordSet; +import weaver.general.StringUtil; import weaver.general.Util; -import weaver.hrm.User; -import weaver.systeminfo.SystemEnv; import weaver.workflow.request.RequestManager; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; import java.util.Map; /** - *
- * @author han.mengyu
- * @version 1.0
- * @createDate 2021/12/29
+ * */ @ServiceDynamicProxy(target = RequestFormServiceImpl.class, desc = "移动端小号拦截小红点") @Slf4j @@ -45,20 +28,32 @@ public class ProxyRequestFormServiceImpl extends AbstractServiceProxy implements @Override - @ServiceMethodDynamicProxy(desc="移动端小号拦截小红点") + @ServiceMethodDynamicProxy(desc="移动端小号拦截未读标记,OA系统流程") public Map updateReqInfo(HttpServletRequest httpServletRequest) { - - String loginidweaver = getCookie(httpServletRequest, "loginidweaver"); - log.info("loginidweaver==>{}",loginidweaver); - Map paramMap = ParamUtil.request2Map(httpServletRequest); - log.info("paramMap==>{}",paramMap); - //此id为小号//不请求已读接口 - if(loginidweaver.length() == 8 && "1".equals(paramMap.get("ismobile"))){ - return null; - }else { - executeMethod(httpServletRequest); + RecordSet rs = new RecordSet(); + String isOpen = rs.getPropValue("updateUnread", "isOpen"); + //为空默认不开启,1开启,0不开启 + try { + if (StringUtil.isEmpty(isOpen) || "0".equals(isOpen)){ + return (Map)executeMethod(httpServletRequest); + }else if ("1".equals(isOpen)) { + String loginidweaver = getCookie(httpServletRequest, "loginidweaver"); + log.info("loginidweaver==>{}",loginidweaver); + Map paramMap = ParamUtil.request2Map(httpServletRequest); + log.info("paramMap==>{}",paramMap); + //此id为小号//不请求已读接口 + if(loginidweaver.length() == 8 && "1".equals(paramMap.get("ismobile"))){ + return new HashMap<>(); + }else { + return (Map)executeMethod(httpServletRequest); + } + } + }catch (Exception e){ + e.printStackTrace(); + log.error(e.getMessage()); + return (Map) executeMethod(httpServletRequest); } - return null; + return new HashMap<>(); } private String getCookie(HttpServletRequest request,String name){ diff --git a/com/customization/doReadItProxy/proxyRequestListService/ProxyRequestListServiceImpl.java b/com/customization/doReadItProxy/proxyRequestListService/ProxyRequestListServiceImpl.java new file mode 100644 index 0000000..4f4304b --- /dev/null +++ b/com/customization/doReadItProxy/proxyRequestListService/ProxyRequestListServiceImpl.java @@ -0,0 +1,142 @@ +package com.customization.doReadItProxy.proxyRequestListService; + + +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.workflow.service.RequestListService; +import com.engine.workflow.service.impl.RequestListServiceImpl; +import com.wbi.util.ParamUtil; +import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; +import weaver.general.StringUtil; +import weaver.general.Util; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@ServiceDynamicProxy(target = RequestListServiceImpl.class, desc = "移动端小号拦截小红点") +@Slf4j +public class ProxyRequestListServiceImpl extends AbstractServiceProxy implements RequestListService { + + + @Override + @ServiceMethodDynamicProxy(desc="移动端小号拦截未读标记,异构系统待办") + public Map doReadIt(HttpServletRequest httpServletRequest) { + RecordSet rs = new RecordSet(); + String isOpen = rs.getPropValue("updateUnread", "isOpen"); + if (StringUtil.isEmpty(isOpen) || "0".equals(isOpen)){ + return (Map)executeMethod(httpServletRequest); + }else if ("1".equals(isOpen)) { + String loginidweaver = getCookie(httpServletRequest, "loginidweaver"); + log.info("loginidweaver==>{}",loginidweaver); + Map paramMap = ParamUtil.request2Map(httpServletRequest); + log.info("paramMap==>{}",paramMap); + String ua = Util.null2String(paramMap.get("request_header_user_agent")); + //此id为小号//不请求已读接口 + if(loginidweaver.length() == 8 && ua.contains("E-Mobile7")){ + return new HashMap(); + }else { + return (Map)executeMethod(httpServletRequest); + } + } + return new HashMap(); + } + + private String getCookie(HttpServletRequest request,String name){ + try { + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if(name.equals(cookie.getName())){ + return Util.null2String(cookie.getValue()); + } + } + } + }catch (Exception e){ + log.error("getCookieError:{}",e.getMessage()); + e.printStackTrace(); + } + return ""; + } + + + @Override + public Map doingBaseInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map doingCountInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map doneBaseInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map doneCountInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map mineBaseInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map mineCountInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map splitPageKey(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getDoingNewCount(HttpServletRequest httpServletRequest) { + return null; + } + + + + @Override + public Map doSaveData(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getDefaultList(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getUnoperators(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getWfListParams(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getHendledReqIds(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map continnuationProcessInfo(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map judgeReloadList(HttpServletRequest httpServletRequest) { + return null; + } +} diff --git a/com/engine/custom/archives/action/WorkflowToDocCus.java b/com/engine/custom/archives/action/WorkflowToDocCus.java new file mode 100644 index 0000000..6b3d2b2 --- /dev/null +++ b/com/engine/custom/archives/action/WorkflowToDocCus.java @@ -0,0 +1,1434 @@ +package com.engine.custom.archives.action; + +import com.alibaba.fastjson.JSON; +import com.api.doc.detail.service.DocSaveService; +import com.api.doc.detail.util.SendMsgForNewDocThread; +import com.api.workflow.util.ServiceUtil; +import com.engine.custom.archives.workflow.biz.requestForm.RequestDocPropManagerCus; +import com.engine.custom.archives.workflow.biz.requestForm.SaveDocDetailBizCus; +import com.engine.custom.archives.workflow.biz.requestForm.WfToDocBizCus; + + +import com.engine.workflow.biz.requestForm.WfWaterMark4WfToDocBiz; +import com.engine.workflow.entity.WorkflowToDocSettingInfoEntity; +import org.apache.commons.httpclient.*; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.params.HttpMethodParams; +import weaver.alioss.AliOSSObjectManager; +import weaver.conn.RecordSet; +import weaver.docs.category.SecCategoryComInfo; +import weaver.docs.docs.*; +import weaver.file.FileUpload; +import weaver.file.ImageFileManager; +import weaver.general.*; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.integration.logging.Logger; +import weaver.integration.logging.LoggerFactory; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; +import weaver.system.SystemComInfo; +import weaver.weaversso.CreateTokenUtil; +import weaver.workflow.msg.PoppupRemindInfoUtil; +import weaver.workflow.request.RequestManager; +import weaver.workflow.workflow.WorkflowConfigComInfo; + +import java.io.*; +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/** + * + * 用来将流程存为文档,步骤为先将流程保存为html文件, 然后新建一个html文档,保存的html文件作为html文档的附件 + * + * Date: 2008-12-18 + * @author cwj + * @version 1.0 + */ + +public class WorkflowToDocCus { + String SUCCESS = "1"; + String FAILURE_AND_CONTINUE = "0"; + + private static final Logger log = LoggerFactory.getLogger(WorkflowToDocCus.class); + + private final static int THREAD_NUM = 10;//10个固定线程池 + private final static ExecutorService expPool = Executors.newFixedThreadPool(THREAD_NUM);//使用线程池进行线程管理 + + private static ImageFileIdUpdate imageFileIdUpdate = new ImageFileIdUpdate(); + + private static VersionIdUpdate versionIdUpdate = new VersionIdUpdate(); + + private static Pattern port_pattern = Pattern.compile("^\\w*[\\s\\S]+(:\\d+)", Pattern.CASE_INSENSITIVE); + + private String isaesencrypt=""; + private String aescode=""; + + //底部签字意见列表显示数量 + private int pageSize =100; + + public static Class class_MultiLangFilter; + static { + try { + class_MultiLangFilter = Class.forName("weaver.filter.MultiLangFilter"); + } catch (ClassNotFoundException e) { + log.info("class MultiLangFilter doesn't exist"); + } + } + + /** + * + * @param request + * @param reqType 流程类型 0-主流程 1-子流程 + * @return + */ + public List execute(RequestInfo request ,int reqType ) { + log.info("流程转文档开始……workflowToDoc start"); + String cookie = null; + if (class_MultiLangFilter!=null) { + try { + cookie = (String)class_MultiLangFilter.getMethod("getThreadlocalCookies").invoke(class_MultiLangFilter); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + e.printStackTrace(); + } + } + + RequestManager requestManager = request.getRequestManager(); + String requestid = Util.null2String(request.getRequestid()); + String userid = Util.null2String(request.getLastoperator()); + String requestname = Util.null2String(request.getDescription()); + String workflowid = Util.null2String(request.getWorkflowid()); + List docids = Start(requestid, userid, requestname, workflowid, cookie, requestManager, reqType); + log.info("流程转文档结束……workflowToDoc end"); + return docids; + } + + //接口存文档 + public List Start(String requestid, String userid, String requestname, String workflowid, String cookie,RequestManager requestManager,int reqType) { + return Start(requestid, userid, requestname, workflowid, cookie,requestManager,true ,reqType); + } + + //批量存文档用 + public List Start(String requestid, String userid, String requestname, String workflowid, String cookie ,int reqType) { + RequestManager requestManager = null; + requestManager = getRequestManager(requestManager,requestid); + return Start(requestid, userid, requestname, workflowid, cookie,requestManager,false,reqType); + } + /** + * start + * @param requestid + * 流程id + * @param userid + * 用户id + * @param requestname + * 流程名 流程名作为文档的文档名 + * @param workflowid + * @return + */ + public List Start(String requestid, String userid, String requestname, String workflowid, String cookie, RequestManager requestManager, boolean isfromaction , int reqType) { + String src = requestManager.getSrc(); //用于判断是否流程监控干预 + User user = new User(Util.getIntValue(userid)); + //String wfdocpath = Util.null2String(getWfDocPath(workflowid)); + WfToDocBizCus wfbiz = new WfToDocBizCus(); + String wfdocpath = Util.null2String(wfbiz.getWfDocPath(workflowid,requestid)); + + + if (wfdocpath.equals("")) { + log.error("流程保存为文档失败,因为未设置流程保存文档的目录"); + return null; + } + String docfiles = getDocFiles(workflowid); + if ("".equals(docfiles)){ + log.error("流程保存为文档失败,因为未勾选文档附件复选框"); + return null; + } + //在这里先获取到modeid 线程中获取时流程可能已经到了下个节点导致模板获取的不对 + int nodeid = requestManager.getNodeid(); + com.api.workflow.util.ServiceUtil serviceUtil = new ServiceUtil(); + if (!isfromaction) + nodeid = serviceUtil.getCurrentNode(requestid,user); + String modeid = wfbiz.getModeid(Util.getIntValue(workflowid),Util.getIntValue(requestid),nodeid); + + int keepsign = getKeepSign(workflowid); + //增加配置文件 是否异步生成 + // String isSync = Util.null2String(new WorkflowConfigComInfo().getValue("workflowtodoc_issync")); + String isSync = "1"; + if (isSync.equals("1")){ + String filename = UUID.randomUUID().toString(); //防止高并发文件名重复 + String temppath = getFileSavePath(); + LinkedHashMap fileids = new LinkedHashMap (); + //是否开启水印 + boolean isOpenWaterMark = WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid)); + String onlineHtmlMethod = Util.null2String(new WorkflowConfigComInfo().getValue("onlineHtmlMethod")); + + if (docfiles.contains("1")) { //在线html + if (!onlineHtmlMethod.equals("1")){ //走离线的方法 + generateOnLineHtml(requestid,userid, requestname, workflowid,wfdocpath, cookie,fileids,isOpenWaterMark); + } + } + //离线html/pdf + WfToDocBizCus wfToDocBiz = new WfToDocBizCus(user,pageSize,keepsign,docfiles,modeid,isOpenWaterMark); + wfToDocBiz.setOnlineHtmlMethod(onlineHtmlMethod); + wfToDocBiz.generatepdfandhtml(requestid,filename,temppath,src,reqType); + fileids.putAll(wfToDocBiz.getfileids(requestname,filename,temppath)); + //保存 + List docids = saveDocDetail(requestname, workflowid, requestid, wfdocpath, userid, fileids, requestManager, wfbiz); + return docids; + }else { + //线程池执行 + expPool.execute(new Runnable() { + @Override + public void run() { + + String filename = UUID.randomUUID().toString(); //防止高并发文件名重复 + String temppath = getFileSavePath(); + LinkedHashMap fileids = new LinkedHashMap (); + //是否开启水印 + boolean isOpenWaterMark = WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid)); + String onlineHtmlMethod = Util.null2String(new WorkflowConfigComInfo().getValue("onlineHtmlMethod")); + + if (docfiles.contains("1")) { //在线html + if (!onlineHtmlMethod.equals("1")){ //走离线的方法 + generateOnLineHtml(requestid,userid, requestname, workflowid,wfdocpath, cookie,fileids,isOpenWaterMark); + } + } + //离线html/pdf + WfToDocBizCus wfToDocBiz = new WfToDocBizCus(user,pageSize,keepsign,docfiles,modeid,isOpenWaterMark); + wfToDocBiz.setOnlineHtmlMethod(onlineHtmlMethod); + wfToDocBiz.generatepdfandhtml(requestid,filename,temppath,src, reqType); + fileids.putAll(wfToDocBiz.getfileids(requestname,filename,temppath)); + //保存 + saveDocDetail(requestname, workflowid,requestid, wfdocpath,userid,fileids,requestManager,wfbiz); + } + }); + } + return new ArrayList<>(); + } + + + private void generateOnLineHtml(String requestid, String userid, String requestname, String workflowid,String wfdocpath, String cookie,LinkedHashMap fileids,boolean isOpenWaterMark){ + String url[] = getUrl(requestid, userid); + + if(url!=null && url.length==5){//避免url为空时,出现异常 + boolean hasNull = false;//检查5个值是不是有空,如果有,就不导为文档了 + /* + * QC271940解决AD域用户使用流程存为文档功能 + */ + /*for(int cx=0; cx 0){ //次账号,查询主账号,用主账号登录 + f_weaver_belongto_userid = userid; + sql = "select * from hrmresource where id = " + belongto; + rs.executeSql(sql); + if(rs.next()){ + isADaccount = rs.getString("isadaccount"); + loginid = rs.getString("loginid"); + password = rs.getString("password"); + } + } + + if ((!loginid.equals("") && !password.equals(""))||(!loginid.equals("")&&isADaccount.equals("1"))) {//QC271940[80][90]Ldap集成-解决AD用户无法使用流程存为文档功能 + para = "/workflow/request/ViewRequest.jsp?haveVerifyForward=true&requestid=" + requestid + + "¶2=" + loginid + "¶3=" + password; + } else { + log.error("流程保存为文档失败,因为用户名和密码为空,requestid=" + requestid); + return params; + } + + tempurl = oaaddress + + "/login/VerifyRtxLogin.jsp?urlfrom=workflowtodoc¶1=" + + para; + + Map result = CreateTokenUtil.createToken("ecology", loginid); + String token = ""; + if ("success".equals(result.get("state"))){ + token = result.get("data"); //tokenֵ + } else { + String msg = result.get("data"); + } + +// params[0] = oaaddress+"/login/VerifyRtxLogin.jsp"; + params[0] = oaaddress+"/wui/index.html?ssoToken="+token+"#/main"; + params[1] = "workflowtodoc"; + String pageurl = "/workflow/request/ViewRequest.jsp?haveVerifyForward=true&isworkflowhtmldoc=1&requestid=" + requestid; + if(accounttype > 0 && belongto > 0){ + pageurl += "&f_weaver_belongto_userid=" + f_weaver_belongto_userid + "&f_weaver_belongto_usertype=" + f_weaver_belongto_usertype; + } + params[2] = pageurl; + /*try { + params[3] = new String(loginid.getBytes(), "8859_1"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ + params[3] = PoppupRemindInfoUtil.encrypt(loginid);//解决中文账号问题 + params[4] = password; + + + return params; + } + + /** + * 根据url读取html文件,并生成文档,放到指定的目录下 + * + * @param url + * 流程页面的url + * + * @param requestid + * 流程id + * @param requestname + * 流程名称 + * @param workflowid + * 流程类型id + * @param wfdocpath + * 文档存放的目录 + */ + public void getWorkflowHtml(String url[], String requestid, + String requestname, String workflowid, String wfdocpath,String userid, String cookie,LinkedHashMap fileids) { + + HttpClient client = FWHttpConnectionManager.getHttpClient(); + + PostMethod method = new PostMethod(url[0]);//oa地址 + method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, + new DefaultHttpMethodRetryHandler(3, false)); + try { + NameValuePair[] params = { + new NameValuePair("urlfrom", url[1]),//urlfrom + new NameValuePair("para1",url[2]),//requesturl + new NameValuePair("para2",url[3] ),//loginid + new NameValuePair("para3",url[4])};//url4密码 + method.setRequestBody(params); + //log.info("----workflowtodoc----"+url[0] + "?urlfrom="+url[1]+"¶1="+url[2]+"¶2="+url[3]+"¶3="+url[4]); + + + int statusCode = client.executeMethod(method); + new BaseBean().writeLog("WorkflowToDoc statusCode :"+statusCode); + String temppath = getFileSavePath(); + String filename = System.currentTimeMillis() + ""; + String htmlname = temppath + filename; + File _temppath = new File(temppath); + if(!_temppath.exists()){ + _temppath.mkdirs(); + } + + if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY + || statusCode == HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_OK) { + Header locationHeader = method.getResponseHeader("location"); + if (locationHeader != null) { + String tempurl = locationHeader.getValue(); + if(!tempurl.startsWith("http://") && !tempurl.startsWith("https://")) { + //GET PORT + String port_string = ""; + Matcher matcher = port_pattern.matcher(url[0]); + if (matcher.find()) { + port_string = matcher.group(1); + } + tempurl = "http://" +// + (port_string.isEmpty()? "" : "localhost"+port_string) + + (port_string.isEmpty()? "" : "127.0.0.1"+port_string) + + tempurl; + + } + new BaseBean().writeLog("WorkflowToDoc cookie :"+cookie); + tempurl = getFinallyUrl(client, tempurl,cookie); + tempurl = tempurl.replaceFirst(".jsp", "Iframe.jsp"); + tempurl = tempurl+"&urlfrom=workflowtodoc"; + + new BaseBean().writeLog("WorkflowToDoc client.executeMethod(g) start :"+System.currentTimeMillis()); + new BaseBean().writeLog("WorkflowToDoc tempurl :"+tempurl); + GetMethod g = new GetMethod(tempurl); + g.setRequestHeader("cookie", cookie); + client.executeMethod(g); + OutputStream os=new FileOutputStream(htmlname); + + new BaseBean().writeLog("WorkflowToDoc client.executeMethod(g) end :"+System.currentTimeMillis()); +// SystemComInfo syscominfo=new SystemComInfo() ; +// this.isaesencrypt = syscominfo.getIsaesencrypt(); +// this.aescode = Util.getRandomString(13); +// if("1".equals(this.isaesencrypt)){ +// try{ +// os=AESCoder.encrypt(os, this.aescode); +// } catch(Exception e){ +// +// } +// } + OutputStreamWriter output = new OutputStreamWriter(os, "UTF-8"); + BufferedWriter bw = new BufferedWriter(output); + + BufferedReader in = new BufferedReader(new InputStreamReader(g.getResponseBodyAsStream(), "UTF-8")); + StringBuffer sb=new StringBuffer(); + String line = in.readLine(); + while (line != null) { + line = line.trim(); + if(line.indexOf("")>=0&&line.indexOf("openSignPrint()")>=0&&line.indexOf("onclick")>=0){ + //去掉转发按钮 + }else if(line.indexOf("=0&&line.indexOf("class=\"transto\"")>=0&&line.indexOf("onclick")>=0&&line.indexOf("transtoClick(this)")>=0){ + + }else if(line.indexOf("var")>=0&&line.indexOf("bar")>=0&&line.indexOf("eval")>=0&&line.indexOf("handler")>=0&&line.indexOf("text")>=0){ + sb.append("var bar=eval(\"[]\");\n"); + }else{ + sb.append(line + "\n"); + } + line = in.readLine(); + } + + //添加水印 + if(WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid))){ + WfWaterMark4WfToDocBiz wfWaterMark4WfToDocBizCus = new WfWaterMark4WfToDocBiz(new User(Util.getIntValue(userid))); + wfWaterMark4WfToDocBizCus.generateFormData(requestid); + String watetmarkhtml = wfWaterMark4WfToDocBizCus.getWaterMarkHtml(false,Util.getIntValue(workflowid),Util.getIntValue(requestid),true); + int begIndex = sb.lastIndexOf(""); + String frontcontent = sb.substring(0, begIndex); + String behindcontent = sb.substring(begIndex); + sb.setLength(0); + sb.append(frontcontent) + .append("\n").append(watetmarkhtml) + .append(behindcontent); + } + + //去掉ext的button, + sb.append(""); + + String sdata=sb.toString(); + bw.write(sdata,0,sdata.length()); + +// long size = 0l; +// File f = new File(htmlname); +// if (f.exists()) { +// size = f.length(); +// } + + bw.flush(); + bw.close(); + in.close(); + + InputStream inputStream = null; + byte[] buffer = null; + File file = new File(htmlname); + if (file.exists()){ + try { + inputStream = new FileInputStream(file); + buffer = new byte[(int) file.length()]; + inputStream.read(buffer); + inputStream.close(); + }catch (Exception e){ + e.printStackTrace(); + } + } + +// +// if("1".equals(this.isaesencrypt)){ +// String sm4 = Util.null2String(new weaver.general.BaseBean().getPropValue("weaver_security_type","reversible_enc_type")); +// if("sm4".equalsIgnoreCase(sm4)&&aescode.startsWith("sm4start")&&aescode.endsWith("sm4end")){ +// InputStream is = null; +// String _htmlname = temppath + java.util.UUID.randomUUID(); +// try{ +// is = new FileInputStream(f); +// is = AESCoder.encrypt(is, aescode); +// +// OutputStream ops = new FileOutputStream(_htmlname); +// int n = 0; +// byte []b = new byte[2048]; +// while((n=is.read(b)) != -1){ +// ops.write(b,0,n); +// } +// ops.flush(); +// ops.close(); +// is.close(); +// //f.delete(); +// FileSecurityUtil.deleteFile(f); +// htmlname = _htmlname; +// }catch(Exception e){ +// new weaver.general.BaseBean().writeLog(e); +// } +// } +// } + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.setComefrom("WorkflowToDoc"); + imageFileManager.setData(buffer); + imageFileManager.setImagFileName(requestname+".html"); + int imagefileid = imageFileManager.saveImageFile(); +// System.out.println("-在线-imagefileid----"+imagefileid); + // 保存imagefile + //int imagefileid = saveImageFile(requestname, htmlname, size,false); + if (imagefileid <= 0) { + log.error("保存在线HTML文件失败"); + return ; + } + //把fileid存入fileidsmap中最后一起保存文档-附件关联关系 + fileids.put("online_html",imagefileid+""); + //saveDocDetail(requestname, htmlname, size, workflowid,requestid, wfdocpath,userid); + + if(g!=null){ + g.releaseConnection(); + } + if(method!=null){ + method.releaseConnection(); + } + } + } + + } catch (HttpException e) { + log.error("Fatal protocol violation: " + e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + log.error("Fatal transport error: " + e.getMessage()); + e.printStackTrace(); + }catch (Exception e) { + e.printStackTrace(); + new BaseBean().writeLog(e); + }finally { + method.releaseConnection(); + } + + } + + /** + * 获得最后的url,因为response之后的值,post方法不能直接获取 + * @param client + * @param url + * @return + */ + public String getFinallyUrl(HttpClient client, String url,String cookie) { + PostMethod g = new PostMethod(url); + try { + if(!"".equals(cookie) && cookie != null){ + g.setRequestHeader("cookie", cookie); + } + client.executeMethod(g); + } catch (Exception e) { + e.printStackTrace(); + return url; + } + Header locationHeader = g.getResponseHeader("location"); + if (locationHeader != null) { + url = locationHeader.getValue(); + url = getFinallyUrl(client, url); + } + if (g != null) { + g.releaseConnection(); + } + return url; + } + + public String getFinallyUrl(HttpClient client, String url) { + return getFinallyUrl(client,url,null); + } + + //重载下 以防有其他地方调用 + public Object saveDocDetail(String imagefilename, String workflowid, String requestid, String allwfdocpath, String userid, LinkedHashMap fileids, RequestManager requestManager) { + WfToDocBizCus wfbiz = new WfToDocBizCus(); + wfbiz.getWfDocPath( workflowid, requestid); + return this.saveDocDetail(imagefilename,workflowid,requestid,allwfdocpath,userid,fileids,requestManager,wfbiz); + } + /** + * 保存文档信息 + * + * @param imagefilename + * 文档名称 + * @param workflowid + * 流程类型id + * @param allwfdocpath + * 文档目录 + * @return 保存是否成功 + */ + public List saveDocDetail(String imagefilename, String workflowid, String requestid, String allwfdocpath, String userid, LinkedHashMap fileids, RequestManager requestManager, WfToDocBizCus wfbiz) { + RecordSet rs = new RecordSet(); + if (allwfdocpath.equals("")) { + log.error("流程保存为文档失败,因为未设置流程保存文档的目录"); + return new ArrayList<>(); + } + String wfdocpath[] = Util.TokenizerString2(allwfdocpath, ","); + int maincategory = 0; + int subcategory = 0; + int seccategory = 0; + + if(wfdocpath.length==1){//如果目录就传了一层,默认只给到seccategory + seccategory = Util.getIntValue(wfdocpath[0],0); + }else{ + if(wfdocpath.length > 0 ) maincategory = Util.getIntValue(wfdocpath[0],0); + if(wfdocpath.length > 1 ) subcategory = Util.getIntValue(wfdocpath[1],0); + if(wfdocpath.length > 2 ) seccategory = Util.getIntValue(wfdocpath[2],0); + } + + // 保存docdetail + ResourceComInfo ResourceComInfo = null; + try { + ResourceComInfo = new ResourceComInfo(); + } catch (Exception e) { + log.error(e); + } + String sql = ""; + int doclangurage = 7; + int docowner = Util.getIntValue(getWfDocOwner(workflowid,requestid), 0); + int docdepartmentid = Util.getIntValue(ResourceComInfo + .getDepartmentID("" + docowner), 0); + String docsubject = imagefilename; + + Calendar today = Calendar.getInstance(); + String formatdate = Util.add0(today.get(Calendar.YEAR), 4) + "-" + + Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(today.get(Calendar.DAY_OF_MONTH), 2); + String formattime = Util.add0(today.get(Calendar.HOUR_OF_DAY), 2) + ":" + + Util.add0(today.get(Calendar.MINUTE), 2) + ":" + + Util.add0(today.get(Calendar.SECOND), 2); + String doccreatedate = formatdate; + String doccreatetime = formattime; + String doclastmoddate = formatdate; + String doclastmodtime = formattime; + String docValidDate = formatdate; + String docValidTime = formattime; + String parentids = ""; + String docCreaterType = "1"; + String docextendname = "html"; + String docCode = ""; + String doccontent = ""; + String clientIp = ""; + + rs.executeSql("select clientAddress from SysMaintenanceLog, SystemLogItem where operateitem='60' AND SysMaintenanceLog.operateItem = SystemLogItem.itemId and operateuserid = '" + userid + "' order by id desc"); + rs.next(); + clientIp = rs.getString("clientAddress"); + + if("0:0:0:0:0:0:0:1".equals(clientIp)){ + clientIp = "127.0.0.1"; + } + + rs.executeProc("Doc_SecCategory_SelectByID",seccategory+""); + rs.next(); + + String docapprovable = ""; + String docreplyable = rs.getString("replyable"); + String isreply = ""; + int replydocid = 0; + String docpublishtype = ""; + + int itemid = 0; + int itemmaincategoryid = 0; + int hrmresid = 0; + int crmid = 0; + int projectid = 0; + int financeid = 0; + + int doccreaterid = docowner; + int doclastmoduserid = docowner; + int docapproveuserid = 0; + String docapprovedate = ""; + String docapprovetime = ""; + + int docarchiveuserid = 0; + String docarchivedate = ""; + String docarchivetime = ""; + + String docstatus = "1"; + int assetid = 0; + int ownerid = docowner; + + String keyword = ""; + int accessorycount = 0; + String docfiles = getDocFiles(workflowid); + if (docfiles.contains("1")) { + accessorycount++; + } + if (docfiles.contains("2")) { + accessorycount++; + } + if (docfiles.contains("3")){ + accessorycount++; + } + + int replaydoccount = 0; + int docType = 1;//html + String canCopy = "1"; + String canRemind = "1"; + String orderable = rs.getString("orderable"); + + int docEdition = -1; + int docSmallEdition = -1; + int docEditionId = -1; + SecCategoryComInfo scc =null; + + try { + scc = new SecCategoryComInfo(); + if(scc.isEditionOpen(seccategory)) {//如果版本管理开启 + + docEdition=1; + docEditionId=this.getNextEditionId(); + if(scc.isOpenSizeVersion(seccategory)){ + docSmallEdition = 1; + } + + } + } catch (Exception e) { + log.error(e); + } + int isHistory = 0; + int approveType = 0; + int mainDoc = 0; + int readOpterCanPrint = rs.getInt("readoptercanprint"); + + + int docValidUserId = docowner; + String invalidationDate = ""; + String docLastModUserType = docCreaterType; + String docApproveUserType = ""; + String docValidUserType = docCreaterType; + String docInvalUserType = ""; + String docArchiveUserType = ""; + String docCancelUserType = ""; + String docPubUserType = ""; + String docReopenUserType = ""; + String ownerType = docCreaterType; + int canPrintedNum = 0; + + int docid = 0; + List docids = new ArrayList (); + WorkflowToDocSettingInfoEntity workflowToDocSettingInfoEntity = this.getSettingInfo(workflowid); + if (isAnnex(workflowToDocSettingInfoEntity)&&fileids.size()>1){ //勾选了关联到表单且为附件字段并且选择的附件种类大于1 则每个附件生成一个文档 + for(Map.Entry entry: fileids.entrySet()) { + try { + docid = new DocManager().getNextDocId(rs); + } catch (Exception e) { + log.error("读取文档id号异常:" + e); + } + parentids = docid+""; + mainDoc = docid; + if ("offline_pdf".equals(entry.getKey())){ + docsubject = imagefilename+"(PDF)"; + accessorycount = 1; + }else if ("offline_html".equals(entry.getKey())){ + docsubject = imagefilename+"(OfflineHTML)"; + accessorycount = 1; + }else if ("online_html".equals(entry.getKey())){ + docsubject = imagefilename+"(OnlineHTML)"; + accessorycount = 1; + } + SaveDocDetailBizCus saveDocDetailBiz = new SaveDocDetailBizCus(); + saveDocDetailBiz.setDocid( docid); + saveDocDetailBiz.setMaincategory( maincategory); + saveDocDetailBiz.setSubcategory( subcategory); + saveDocDetailBiz.setSeccategory( seccategory); + saveDocDetailBiz.setDoclangurage( doclangurage); + saveDocDetailBiz.setDocapprovable( docapprovable); + saveDocDetailBiz.setDocreplyable( docreplyable); + saveDocDetailBiz.setIsreply( isreply); + saveDocDetailBiz.setReplydocid( replydocid); + saveDocDetailBiz.setDocsubject( docsubject); + saveDocDetailBiz.setDocpublishtype( docpublishtype); + saveDocDetailBiz.setItemid( itemid); + saveDocDetailBiz.setItemmaincategoryid( itemmaincategoryid); + saveDocDetailBiz.setHrmresid( hrmresid); + saveDocDetailBiz.setCrmid( crmid); + saveDocDetailBiz.setProjectid( projectid); + saveDocDetailBiz.setFinanceid( financeid); + saveDocDetailBiz.setDoccreaterid( doccreaterid); + saveDocDetailBiz.setDocdepartmentid( docdepartmentid); + saveDocDetailBiz.setDoccreatedate( doccreatedate); + saveDocDetailBiz.setDoccreatetime( doccreatetime); + saveDocDetailBiz.setDoclastmoduserid( doclastmoduserid); + saveDocDetailBiz.setDoclastmoddate( doclastmoddate); + saveDocDetailBiz.setDoclastmodtime( doclastmodtime); + saveDocDetailBiz.setDocapproveuserid( docapproveuserid); + saveDocDetailBiz.setDocapprovedate( docapprovedate); + saveDocDetailBiz.setDocapprovetime( docapprovetime); + saveDocDetailBiz.setDocarchiveuserid( docarchiveuserid); + saveDocDetailBiz.setDocarchivedate( docarchivedate); + saveDocDetailBiz.setDocarchivetime( docarchivetime); + saveDocDetailBiz.setDocstatus( docstatus); + saveDocDetailBiz.setParentids( parentids); + saveDocDetailBiz.setAssetid( assetid); + saveDocDetailBiz.setOwnerid( ownerid); + saveDocDetailBiz.setKeyword( keyword); + saveDocDetailBiz.setAccessorycount( accessorycount); + saveDocDetailBiz.setReplaydoccount( replaydoccount); + saveDocDetailBiz.setUsertype( docCreaterType); + saveDocDetailBiz.setDoctype(docType); + saveDocDetailBiz.setCancopy( canCopy); + saveDocDetailBiz.setCanremind( canRemind); + saveDocDetailBiz.setOrderable( orderable); + saveDocDetailBiz.setDocextendname( docextendname); + saveDocDetailBiz.setDoccode( docCode); + saveDocDetailBiz.setDocedition( docEdition); + saveDocDetailBiz.setDocsmalledition( docSmallEdition); + saveDocDetailBiz.setDoceditionid( docEditionId); + saveDocDetailBiz.setIshistory( isHistory); + saveDocDetailBiz.setApproveType( approveType); + saveDocDetailBiz.setMaindoc( mainDoc); + saveDocDetailBiz.setReadoptercanprint( readOpterCanPrint); + saveDocDetailBiz.setDocvaliduserid( docValidUserId); + saveDocDetailBiz.setDocvaliddate( docValidDate); + saveDocDetailBiz.setDocvalidtime( docValidTime); + saveDocDetailBiz.setInvalidationdate( invalidationDate); + saveDocDetailBiz.setDocCreaterType( docCreaterType); + saveDocDetailBiz.setDocLastModUserType( docLastModUserType); + saveDocDetailBiz.setDocApproveUserType( docApproveUserType); + saveDocDetailBiz.setDocValidUserType( docValidUserType); + saveDocDetailBiz.setDocInvalUserType( docInvalUserType); + saveDocDetailBiz.setDocArchiveUserType( docArchiveUserType); + saveDocDetailBiz.setDocCancelUserType( docCancelUserType); + saveDocDetailBiz.setDocPubUserType( docPubUserType); + saveDocDetailBiz.setDocReopenUserType( docReopenUserType); + saveDocDetailBiz.setOwnerType( ownerType); + saveDocDetailBiz.setCanPrintedNum( canPrintedNum); + saveDocDetailBiz.setFromworkflow( requestid); + saveDocDetailBiz.setDoccontent( doccontent); + saveDocDetailBiz.setDocowner( docowner); + saveDocDetailBiz.setClientIp( clientIp); + saveDocDetailBiz.saveDoc(requestid,requestManager,wfbiz,userid); + + // 最后保存 docimagefile + if ("offline_pdf".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,3); + }else if ("offline_html".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,2); + }else if ("online_html".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,1); + } + DocSaveService.copyDocFile(seccategory,docid); + + //解决流程存文档不推动文档消息 + SendMsgForNewDocThread sendThread = new SendMsgForNewDocThread(new User(Util.getIntValue(userid)),docid,null);sendThread.start(); + docids.add(docid+""); + } + }else{ //只生成一篇文档 + try { + docid = new DocManager().getNextDocId(rs); + } catch (Exception e) { + log.error("读取文档id号异常:" + e); + return null; + } + parentids = docid+""; + mainDoc = docid; + SaveDocDetailBizCus saveDocDetailBiz = new SaveDocDetailBizCus(); + saveDocDetailBiz.setDocid( docid); + saveDocDetailBiz.setMaincategory( maincategory); + saveDocDetailBiz.setSubcategory( subcategory); + saveDocDetailBiz.setSeccategory( seccategory); + saveDocDetailBiz.setDoclangurage( doclangurage); + saveDocDetailBiz.setDocapprovable( docapprovable); + saveDocDetailBiz.setDocreplyable( docreplyable); + saveDocDetailBiz.setIsreply( isreply); + saveDocDetailBiz.setReplydocid( replydocid); + saveDocDetailBiz.setDocsubject( docsubject); + saveDocDetailBiz.setDocpublishtype( docpublishtype); + saveDocDetailBiz.setItemid( itemid); + saveDocDetailBiz.setItemmaincategoryid( itemmaincategoryid); + saveDocDetailBiz.setHrmresid( hrmresid); + saveDocDetailBiz.setCrmid( crmid); + saveDocDetailBiz.setProjectid( projectid); + saveDocDetailBiz.setFinanceid( financeid); + saveDocDetailBiz.setDoccreaterid( doccreaterid); + saveDocDetailBiz.setDocdepartmentid( docdepartmentid); + saveDocDetailBiz.setDoccreatedate( doccreatedate); + saveDocDetailBiz.setDoccreatetime( doccreatetime); + saveDocDetailBiz.setDoclastmoduserid( doclastmoduserid); + saveDocDetailBiz.setDoclastmoddate( doclastmoddate); + saveDocDetailBiz.setDoclastmodtime( doclastmodtime); + saveDocDetailBiz.setDocapproveuserid( docapproveuserid); + saveDocDetailBiz.setDocapprovedate( docapprovedate); + saveDocDetailBiz.setDocapprovetime( docapprovetime); + saveDocDetailBiz.setDocarchiveuserid( docarchiveuserid); + saveDocDetailBiz.setDocarchivedate( docarchivedate); + saveDocDetailBiz.setDocarchivetime( docarchivetime); + saveDocDetailBiz.setDocstatus( docstatus); + saveDocDetailBiz.setParentids( parentids); + saveDocDetailBiz.setAssetid( assetid); + saveDocDetailBiz.setOwnerid( ownerid); + saveDocDetailBiz.setKeyword( keyword); + saveDocDetailBiz.setAccessorycount( accessorycount); + saveDocDetailBiz.setReplaydoccount( replaydoccount); + saveDocDetailBiz.setUsertype( docCreaterType); + saveDocDetailBiz.setDoctype(docType); + saveDocDetailBiz.setCancopy( canCopy); + saveDocDetailBiz.setCanremind( canRemind); + saveDocDetailBiz.setOrderable( orderable); + saveDocDetailBiz.setDocextendname( docextendname); + saveDocDetailBiz.setDoccode( docCode); + saveDocDetailBiz.setDocedition( docEdition); + saveDocDetailBiz.setDocsmalledition( docSmallEdition); + saveDocDetailBiz.setDoceditionid( docEditionId); + saveDocDetailBiz.setIshistory( isHistory); + saveDocDetailBiz.setApproveType( approveType); + saveDocDetailBiz.setMaindoc( mainDoc); + saveDocDetailBiz.setReadoptercanprint( readOpterCanPrint); + saveDocDetailBiz.setDocvaliduserid( docValidUserId); + saveDocDetailBiz.setDocvaliddate( docValidDate); + saveDocDetailBiz.setDocvalidtime( docValidTime); + saveDocDetailBiz.setInvalidationdate( invalidationDate); + saveDocDetailBiz.setDocCreaterType( docCreaterType); + saveDocDetailBiz.setDocLastModUserType( docLastModUserType); + saveDocDetailBiz.setDocApproveUserType( docApproveUserType); + saveDocDetailBiz.setDocValidUserType( docValidUserType); + saveDocDetailBiz.setDocInvalUserType( docInvalUserType); + saveDocDetailBiz.setDocArchiveUserType( docArchiveUserType); + saveDocDetailBiz.setDocCancelUserType( docCancelUserType); + saveDocDetailBiz.setDocPubUserType( docPubUserType); + saveDocDetailBiz.setDocReopenUserType( docReopenUserType); + saveDocDetailBiz.setOwnerType( ownerType); + saveDocDetailBiz.setCanPrintedNum( canPrintedNum); + saveDocDetailBiz.setFromworkflow( requestid); + saveDocDetailBiz.setDoccontent( doccontent); + saveDocDetailBiz.setDocowner( docowner); + saveDocDetailBiz.setClientIp( clientIp); + saveDocDetailBiz.saveDoc(requestid,requestManager,wfbiz,userid); + + // 最后保存 docimagefile + for(Map.Entry entry: fileids.entrySet()) { + if ("offline_pdf".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,3); + }else if ("offline_html".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,2); + }else if ("online_html".equals(entry.getKey())){ + saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,1); + } + } + DocSaveService.copyDocFile(seccategory,docid); + //解决流程存文档不推动文档消息 + SendMsgForNewDocThread sendThread = new SendMsgForNewDocThread(new User(Util.getIntValue(userid)),docid,null);sendThread.start(); + docids.add(docid+""); + } + + //文档保存到表单字段 + saveDocToForm(rs,String.join(",",docids),docowner,requestid,workflowid); + return docids; + } + + /* + * 文档关联到表单字段 支持多个文档更新到表单字段 + */ + public boolean saveDocToForm(RecordSet rs,String docids,int docowner,String requestid,String workflowid){ + String sql = ""; + String[] docidarr = docids.split(","); + + String tablename = " workflow_form "; + String fieldname = ""; + String fieldhtmltype =""; + String type =""; + rs.executeQuery("select formid,isbill,wfdocrelatedformdisplay,wfdocrelatefieldid from workflow_base where id = ?",workflowid); + RecordSet rs1 = new RecordSet(); + if (rs.next()){ + String wfdocrelatedformdisplay = Util.null2String(rs.getString("wfdocrelatedformdisplay")); + String wfdocrelatefieldid = Util.null2String(rs.getString("wfdocrelatefieldid")); + int isbill = Util.getIntValue(rs.getString("isbill"), 0); + int formid = Util.getIntValue(rs.getString("formid"), 0); + if(wfdocrelatedformdisplay.equals("1")&&!wfdocrelatefieldid.equals("")){ + if(isbill == 1){ + sql = "select tablename from workflow_bill where id="+formid; + rs1.executeQuery(sql); + if(rs1.next()){ + tablename = Util.null2String(rs1.getString(1)); + } + sql = "select fieldname,fieldhtmltype,type from workflow_billfield where billid="+formid+" and id="+wfdocrelatefieldid; + }else{ + sql = "select fieldname,fieldhtmltype,type from workflow_formdictdetail where id="+wfdocrelatefieldid; + } + rs1.executeQuery(sql); + if(rs1.next()){ + fieldname = Util.null2String(rs1.getString(1)); + fieldhtmltype =Util.null2String(rs1.getString(2)); + type =Util.null2String(rs1.getString(3)); + } + if(!"".equals(tablename) && !"".equals(fieldname)){ + String fieldvalue =""; //先获取数据库原有值 + sql = "select "+fieldname+" from "+tablename+" where requestid="+requestid; + rs1.executeQuery(sql); + if(rs1.next()){ + fieldvalue = Util.null2String(rs1.getString(1)); + } + if (!fieldvalue.equals("")){ + if ((fieldhtmltype.equals("6")&&type.equals("1"))||(fieldhtmltype.equals("3")&&type.equals("37"))){ //附件和多文档字段 追加 + String updateDocids = fieldvalue+","+docids; + rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+updateDocids+"' where requestid = ?",requestid); + }else if (fieldhtmltype.equals("3")&&type.equals("9")){ //单文档 会清除原文档再添加 + rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+docids+"' where requestid = ?",requestid); + new BaseBean().writeLog("流程存文档关联到表单字段,单文档字段原先值==>"+fieldvalue+",更新后docid ==>"+docids); + } + }else { + rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+docids+"' where requestid = ?",requestid); + } + } + } + + /* 更新完成后给流程所有操作者赋权*****/ + WfToDocBizCus.docShare(docids,requestid,docowner); + + } + return true; + } + + + /** + * 判断requestmanager是否为空 + * @param rmanager + */ + public RequestManager getRequestManager(RequestManager rmanager,String requestid){ + if(rmanager==null){ + rmanager = new RequestManager(); + RecordSet rs = new RecordSet(); + String sql = "select * from workflow_requestbase where requestid = " + requestid; + rs.executeSql(sql); + while(rs.next()){ + int _requestId=rs.getInt("requestid"); + int workflowId=rs.getInt("workflowid"); + int creater=rs.getInt("creater"); + String requestname = rs.getString("requestname"); + String requestlevel = rs.getString("requestlevel"); + String messagetype = rs.getString("messagetype"); + rmanager.setRequestid(_requestId); + rmanager.setWorkflowid(workflowId); + rmanager.setCreater(creater); + rmanager.setRequestname(requestname); + rmanager.setRequestlevel(requestlevel); + rmanager.setMessageType(messagetype); + rmanager.setNodeid(Util.getIntValue(rs.getString("currentNodeID"))); + } + } + + return rmanager; + } + + //重载下 以防方法在其他地方有调用 + public boolean saveDocProp(int docid,String requestid,RequestManager requestManager){ + return saveDocProp( docid, requestid, requestManager,new WfToDocBizCus()); + } + /** + * 保存文档属性 + * @param docid + * @return + */ + public boolean saveDocProp(int docid,String requestid,RequestManager requestManager,WfToDocBizCus wfbiz){ + boolean success = true; + String docids = docid+""; + requestManager = getRequestManager(requestManager,requestid); + try{ + log.error("saveDocProp:" + docid +" "+requestid); + RequestDocPropManagerCus requestDocPropManager=new RequestDocPropManagerCus(wfbiz); + requestDocPropManager.changeDocProp(requestManager,docids); + }catch (Exception e) { + success = false; + log.error("RequestDocPropManagerCus Error:requestid="+requestid+"###docids="+docids); + log.error(e); + } + log.error("success:"+success); + return success; + + } + + /** + * 保存docimagefile + * + * @param docid + * 文档id + * @param imagefileid + * imagefileid + * @param filename + * 文件名 + */ + public boolean saveDocImageFile(int docid, int imagefileid, String filename,int filetype) { + RecordSet rs = new RecordSet(); + + int id = 0; + int versionId = 0; + String imagefilename = ""; + if (filetype==1){ + imagefilename = filename + ".html"; + }else if (filetype ==2){ + imagefilename = filename + ".zip"; + }else if (filetype==3){ + imagefilename = filename+".pdf"; + } + String imagefiledesc = ""; + String imagefilewidth = "0"; + String imagefileheight = "0"; + String imagefielsize = "0"; + String docfiletype = "2"; + String versionDetail = ""; + + try { + id = new DocImageManager().getNextDocImageFileId(); + } catch (Exception e) { + log.error("读取docimagefileid异常:" + e); + return false; + } + +// rs.executeProc("SequenceIndex_SelectVersionId", ""); +// if (rs.next()) { +// versionId = Util.getIntValue(rs.getString(1)); +// } + versionId=versionIdUpdate.getVersionNewId(); + + String tmpsqlstr = "INSERT INTO DocImageFile(docid, imagefileid, imagefilename, imagefiledesc, imagefilewidth, imagefileheight, imagefielsize, docfiletype,versionId,versionDetail,id)" + + "VALUES (" + + "" + + docid + + "" + + "," + + "" + + imagefileid + + "" + + "," + + "'" + + imagefilename + + "'" + + "," + + "'" + + imagefiledesc + + "'" + + "," + + "'" + + imagefilewidth + + "'" + + "," + + "'" + + imagefileheight + + "'" + + "," + + "" + + imagefielsize + + "" + + "," + + "'" + + docfiletype + + "'" + + "," + + "" + + versionId + + "" + + "," + + "'" + versionDetail + "'" + "," + id + ")"; + rs.executeSql(tmpsqlstr); + //log.error("保存到docimagefile: " + tmpsqlstr); + return true; + } + + /** + * 保存imagefile 返回文件的id + * + * @param filename + * 文件名 + * @param filerealpath + * 文件绝对路径 + * @param filesize + * 文件大小 + * @return imagefileid 文件id + */ + public int saveImageFile(String filename, String filerealpath, long filesize,boolean ispdf) { + int imageid = 0; + String originalfilename = filename + ".html"; + if(ispdf) originalfilename = filename+".pdf"; + String contenttype = ""; + + String imagefileused = "1"; + String iszip = "0"; + String isencrypt = "0"; + + RecordSet rs = new RecordSet(); + char separator = Util.getSeparator(); + + //rs.executeProc("SequenceIndex_SelectFileid", ""); + //if (rs.next()) + // imageid = Util.getIntValue(rs.getString(1)); + imageid=imageFileIdUpdate.getImageFileNewId(); + + String para = "" + imageid + separator + originalfilename + separator + + contenttype + separator + imagefileused + separator + + filerealpath + separator + iszip + separator + isencrypt + + separator + filesize; + + rs.executeProc("ImageFile_Insert", para); + + AliOSSObjectManager aliOSSObjectManager=new AliOSSObjectManager(); + String tokenKey=aliOSSObjectManager.getTokenKeyByFileRealPath(filerealpath); + + //log.error("保存到imagefile: " + para); + + //comefrom='WorkflowToDoc' 表示该条附件数据来自于流程存为文档 + rs.executeSql("update imagefile set isaesencrypt='"+this.isaesencrypt+"', aescode='"+this.aescode+"',TokenKey='"+tokenKey+"',comefrom='WorkflowToDoc' where imagefileid="+imageid); + + aliOSSObjectManager.uploadFile(filerealpath,originalfilename, iszip,isaesencrypt,aescode); + + return imageid; + } + + /** + * 获取系统的路径 + * + * @return + */ + public String getSystemPath() { + String path = GCONST.getPropertyPath(); + path = path.substring(0, path.indexOf("WEB-INF")); + path = Util.StringReplace(path, "\\", "/"); + return path; + } + + //判断是否开启了文档关联到表单并选择了附件字段 + public boolean isAnnex(WorkflowToDocSettingInfoEntity workflowToDocSettingInfoEntity) { + RecordSet rs = new RecordSet(); + if (workflowToDocSettingInfoEntity.getWfdocrelatedformdisplay().equals("1")){ + String sql = ""; + if(workflowToDocSettingInfoEntity.getIsbill()==0) + sql = "select fieldhtmltype from workflow_formdict where id = ? "; + else + sql = "select fieldhtmltype as name from workflow_billfield where id =? "; + rs.executeQuery(sql,workflowToDocSettingInfoEntity.getWfdocrelatefieldid()); + if (rs.next()&&Util.null2String(rs.getString(1)).equals("6")){ + return true; + } + } + return false; + } + + /** + * 获取设置信息 + * @return + */ + private WorkflowToDocSettingInfoEntity getSettingInfo(String workflowId){ + int isbill = 1; + String wfdocpath = ""; + String wfdocownertype = ""; + String wfdocownerfieldid = ""; + String wfdocowner=""; + int keepsign = 0; + String docfiles = ""; + String wfdocpathtype = ""; //文档存储路径类型 固定目录1 选择目录2 + String wfdocpathfieldid = ""; //文档存储路径字段 + String wfdocsource = ""; //附件来源 + String wfdocrelatedformdisplay = ""; //文档关联到表单显示 + String wfdocrelatefieldid = ""; //关联字段 + String wfdocdiaplaywatermark = ""; //展示流程水印 + RecordSet rs = new RecordSet(); + rs.executeQuery("select isbill,wfdocowner,wfdocownertype,wfdocownerfieldid,keepsign,wfdocpath,docfiles,wfdocpathtype,wfdocpathfieldid,wfdocsource,wfdocrelatedformdisplay,wfdocrelatefieldid,wfdocdiaplaywatermark from workflow_base where id = ?" , workflowId); + if(rs.next()) { + wfdocowner = rs.getString("wfdocowner"); + wfdocownertype = rs.getString("wfdocownertype"); + wfdocownerfieldid = rs.getString("wfdocownerfieldid"); + keepsign = rs.getInt("keepsign"); + wfdocpath = rs.getString("wfdocpath"); + docfiles = rs.getString("docfiles"); + wfdocpathtype = rs.getString("wfdocpathtype"); + wfdocpathfieldid = rs.getString("wfdocpathfieldid"); + wfdocsource = rs.getString("wfdocsource"); + wfdocrelatedformdisplay = rs.getString("wfdocrelatedformdisplay"); + wfdocrelatefieldid = rs.getString("wfdocrelatefieldid"); + wfdocdiaplaywatermark = rs.getString("wfdocdiaplaywatermark"); + isbill = Util.getIntValue(rs.getString("isbill")); + } + + return new WorkflowToDocSettingInfoEntity(wfdocpath,wfdocownertype,wfdocownerfieldid,wfdocowner,keepsign,docfiles,wfdocpathtype,wfdocpathfieldid,wfdocsource,wfdocrelatedformdisplay,wfdocrelatefieldid,wfdocdiaplaywatermark,isbill); + } + /* + *得到keepsign 是否保留签字意见 + */ + public int getKeepSign(String workflowid){ + RecordSet rs = new RecordSet(); + int keepsign = 0; + rs.executeQuery("select keepsign from workflow_base where id = ?",workflowid); + if (rs.next()){ + keepsign = rs.getInt("keepsign"); + } + return keepsign; + } + /* + * 得到docfiles 文档附件 在线表单/离线表单(HTML)/离线表单(PDF) + */ + public String getDocFiles(String workflowid){ + RecordSet rs = new RecordSet(); + String docfiles = ""; + String wfdocpath = ""; + rs.executeQuery("select docfiles,wfdocpath from workflow_base where id = ?",workflowid); + if (rs.next()){ + docfiles = Util.null2String(rs.getString("docfiles")); + wfdocpath = Util.null2String(rs.getString("wfdocpath")); + } + if ("".equals(docfiles)&&!"".equals(wfdocpath)){ + docfiles="1"; + rs.executeUpdate("update workflow_base set docfiles ='1' where id = ?",workflowid); + } + return docfiles; + } + /** + * 获得文档存放的目录 + * + * @param workflowid + * @return 主目录,分目录,子目录 + */ + public String getWfDocPath(String workflowid) { + String wfdocpath = ""; + RecordSet rs = new RecordSet(); + String sql = "select * from workflow_base where id = '" + workflowid + + "'"; + rs.executeSql(sql); + rs.next(); + wfdocpath = Util.null2String(rs.getString("wfdocpath")); + return wfdocpath; + } + + /** + * 获得文档的所有者 + * + * @param workflowid + * @return resourceid + */ + public String getWfDocOwner(String workflowid,String requestid) { + int wfdocowner = 0; + try{ + String sql = ""; + int wfid = Util.getIntValue(workflowid, 0); + int rid = Util.getIntValue(requestid, 0); + if(wfid<=0 || rid<=0){ + return "0"; + } + RecordSet rs = new RecordSet(); + sql = "select * from workflow_base where id="+wfid; + rs.executeSql(sql); + if(rs.next()){ + int wfdocowner_tmp = Util.getIntValue(rs.getString("wfdocowner"), 0); + int wfdocownertype_tmp = Util.getIntValue(rs.getString("wfdocownertype"), 0); + int wfdocownerfieldid_tmp = Util.getIntValue(rs.getString("wfdocownerfieldid"), 0); + int isbill = Util.getIntValue(rs.getString("isbill"), 0); + int formid = Util.getIntValue(rs.getString("formid"), 0); + if(wfdocownertype_tmp == 1){ + wfdocowner = wfdocowner_tmp; + }else if(wfdocownertype_tmp == 2){ + String tablename = " workflow_form "; + String fieldname = ""; + if(isbill == 1){ + sql = "select tablename from workflow_bill where id="+formid; + rs.execute(sql); + if(rs.next()){ + tablename = Util.null2String(rs.getString(1)); + } + sql = "select fieldname from workflow_billfield where billid="+formid+" and id="+wfdocownerfieldid_tmp; + }else{ + sql = "select fieldname from workflow_formdict where id="+wfdocownerfieldid_tmp; + } + rs.execute(sql); + if(rs.next()){ + fieldname = Util.null2String(rs.getString(1)); + if(!"".equals(tablename) && !"".equals(fieldname)){ + sql = "select "+fieldname+" from "+tablename+" where requestid="+rid; + rs.execute(sql); + if(rs.next()){ + String fieldvalue = Util.null2String(rs.getString(1)); + if(!"".equals(fieldvalue)){ + int index = fieldvalue.indexOf(","); + if(index > -1){ + fieldvalue = fieldvalue.substring(0, index); + } + wfdocowner = Util.getIntValue(fieldvalue); + } + } + } + } + } + String status = Util.null2String(new ResourceComInfo().getStatus(""+wfdocowner)); + if(status.equals("0") || status.equals("1") || status.equals("2") || status.equals("3")){ + //do nothing + }else{ + wfdocowner = 0; + } + } + }catch(Exception e){ + + } + if(wfdocowner <= 0){ + wfdocowner = 1; + } + return ""+wfdocowner; + } + + /** + * 获得文件保存目录 + * + * @return + */ + public String getFileSavePath() { + SystemComInfo syscominfo = new SystemComInfo(); + String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()); + return createdir; + } + + public synchronized int getNextEditionId() throws Exception { + int docindex = 0; + RecordSet rs = new RecordSet(); + rs.executeProc("SequenceIndex_SelectNextID", "doceditionid"); + if (rs.next()) + docindex = rs.getInt(1); + return docindex; + } + +} diff --git a/com/engine/custom/archives/corn/PushArchivesCorn.java b/com/engine/custom/archives/corn/PushArchivesCorn.java new file mode 100644 index 0000000..9e2fb57 --- /dev/null +++ b/com/engine/custom/archives/corn/PushArchivesCorn.java @@ -0,0 +1,31 @@ +package com.engine.custom.archives.corn; + +import com.engine.custom.archives.service.PushArchivesCornService; +import lombok.extern.slf4j.Slf4j; +import weaver.interfaces.schedule.BaseCronJob; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; + +@Slf4j +public class PushArchivesCorn extends BaseCronJob { + public String filePath = "/opt/weaver/filesys/test"; + public String Url = "http://14.1.206.240:18080/fcscloud/composite/upload"; + public String templatePath = "/opt/weaver/filesys/template.docx"; + public String reqid = ""; + + PushArchivesCornService service = new PushArchivesCornService(); + + @Override + public void execute() { + log.info("PushArchivesCorn====Begin========"); + HashMap param = new HashMap<>(); + param.put("filePath",filePath); + param.put("Url",Url); + param.put("requestid",reqid); + param.put("templatePath",templatePath); + service.setProp(param); + service.pushArchives(param); + } +} diff --git a/com/engine/custom/archives/entity/Dept.java b/com/engine/custom/archives/entity/Dept.java new file mode 100644 index 0000000..012c53b --- /dev/null +++ b/com/engine/custom/archives/entity/Dept.java @@ -0,0 +1,84 @@ +package com.engine.custom.archives.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; + +public class Dept { + + + @Excel(name = "组织id") + private String id; + @Excel(name = "组织名称") + private String name; + @Excel(name = "组织类型") + private String type; + @Excel(name = "父组织id") + private String parentId; + @Excel(name = "组织全路径") + private String allName; + + + + public Dept() { + } + + public Dept(String id, String name, String type, String parentId, String allName) { + this.id = id; + this.name = name; + this.type = type; + this.parentId = parentId; + this.allName = allName; + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getAllName() { + return allName; + } + + public void setAllName(String allName) { + this.allName = allName; + } + + @Override + public String toString() { + return "Dept{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", type='" + type + '\'' + + ", parentId='" + parentId + '\'' + + ", allName='" + allName + '\'' + + '}'; + } +} + diff --git a/com/engine/custom/archives/service/HtmlToPdfServiceCus.java b/com/engine/custom/archives/service/HtmlToPdfServiceCus.java new file mode 100644 index 0000000..0dd1e3d --- /dev/null +++ b/com/engine/custom/archives/service/HtmlToPdfServiceCus.java @@ -0,0 +1,19 @@ +package com.engine.custom.archives.service; + +import weaver.hrm.User; + +import java.util.Map; + +public interface HtmlToPdfServiceCus { + public Map getHtml(Map params, User user); + + /* + * 转html和pdf + */ + public Map getFormDatas(Map params); + + /* + * 在线html获取表单信息用于生成水印 + */ + public Map getFormInfoForWM(Map params); +} diff --git a/com/engine/custom/archives/service/PushArchivesCornService.java b/com/engine/custom/archives/service/PushArchivesCornService.java new file mode 100644 index 0000000..4074656 --- /dev/null +++ b/com/engine/custom/archives/service/PushArchivesCornService.java @@ -0,0 +1,1717 @@ +package com.engine.custom.archives.service; + + +import com.dcfs.fts.common.error.FtpException; +import com.engine.custom.hg.util.HgUtils; +import com.icbc.api.internal.apache.http.impl.cookie.S; +import lombok.extern.slf4j.Slf4j; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.nio.charset.StandardCharsets; +import java.io.*; +import java.util.*; + +import weaver.conn.RecordSet; +import weaver.general.StringUtil; +import weaver.general.Util; +import com.alibaba.fastjson.JSONObject; +import weaver.file.ImageFileManager; + +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import okhttp3.*; + +import java.net.URLEncoder; + +import weaver.soa.workflow.request.RequestService; +import weaver.soa.workflow.request.RequestInfo; +import com.engine.custom.archives.action.WorkflowToDocCus; +import weaver.docs.docs.DocRecycleManager; +import weaver.hrm.User; +import com.api.workflow.service.RequestAuthenticationService; +import weaver.workflow.workflow.WorkflowConfigComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.crm.Maint.CustomerInfoComInfo; +import com.alibaba.fastjson.JSON; +import weaver.workflow.monitor.Monitor; +import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz; +import com.api.workflow.util.ServiceUtil; +import com.engine.workflow.biz.RobotNode.RobotNodeBiz; +import weaver.general.TimeUtil; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import cn.afterturn.easypoi.word.WordExportUtil; +import cn.hutool.core.util.ZipUtil; +import freemarker.template.Configuration; +import freemarker.template.TemplateExceptionHandler; +import freemarker.template.Template; +import java.nio.charset.StandardCharsets; + + +@Slf4j +public class PushArchivesCornService { + private static String filePath; + private static String Url; + private static String templatePath; // 模板文件路径 + private static final String zwdir = "正文"; + private static final String fjdir = "附件"; + private static final String cbddir = "承办单"; + private static final String zlcdir = "承办单" + File.separator + "子流程"; + private static final String lzxxdir = "流转信息"; + private static final String fjFile = "附件"; + + + public void setProp(Map param) { + filePath = Util.null2String(param.get("filePath")); + Url = Util.null2String(param.get("Url")); + templatePath = Util.null2String(param.get("templatePath")); + } + + + public void pushArchives(Map param) { + log.info("PushArchivesCorn====Begin========{}", param); + try { + ZipUtil zipUtil = new ZipUtil(); + Date date = getDate(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + String format = dateFormat.format(date); + SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + // 获取当前时间的第一秒 + String firstSecond = yyyyMMddHHmmss.format(getFirstSecondOfDate(date)); + // 获取当前时间的最后一秒 + String lastSecond = yyyyMMddHHmmss.format(getLastSecondOfDate(date)); + String requestid = Util.null2String(param.get("requestid")); + log.error("requestid:{}", requestid); + String context = extracted(requestid); + log.error("context:{}", context); + File file = crFile(filePath + "/togd_" + new SimpleDateFormat("yyyyMMdd000000").format(date)); + log.error("textfile:{}", file.getAbsolutePath()); + writeToTxt(file.getPath(), file.getName(), context, true); + File txtzip = new File(filePath + File.separator + "togd_" + new SimpleDateFormat("yyyyMMdd000000").format(date) + ".zip"); + log.error("textZipFile:{}", txtzip.getAbsolutePath()); + OutputStream outputStream = new FileOutputStream(txtzip); + File writename = new File(file.getPath() + "/" + file.getName() + ".txt"); + com.engine.custom.hg.util.ZipUtil.filesToZip(writename, outputStream, writename.getName()); + log.error("writename:{}",writename.getName()); + String s = HgUtils.putFile(txtzip.getAbsolutePath(), txtzip.getName()); + updateRecord(requestid, s); + log.error("textZip:{}", s); + + // HgUtils.putFile(""); + } catch (Exception e) { + log.info("PushArchivesCorn====Exception========{}", e.getMessage()); + e.printStackTrace(); + } + + } + + private void updateRecord(String requestids, String s) { + String sql = "update uf_pushArchivesLog set esbtxtml = ? where request in ( " + requestids + " )"; + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdate(sql, s); + } + + private String extracted(String requestid) throws FtpException, IOException { + Map requesData = getRequestByid(requestid); + log.info("requesData:{}", requesData); + String fj = Util.null2String(requesData.get("fj")); + String zwkbj = Util.null2String(requesData.get("zwkbj")); + //增加签字意见中的附件到附件文件夹中 + Map signFiles = getSignFiles(requestid); + + + List docids = new ArrayList<>(); + // docids.addAll(Arrays.asList(fj.split(","))); + // docids.addAll(Arrays.asList(zwkbj.split(","))); + Map fjMap = getFileIdByDocId(fj); + Map zwkbjMap = getFileIdByDocId(zwkbj); + List zwFileName = new ArrayList<>(); + List fjFileName = new ArrayList<>(); + final int[] i = {1}; + //附件 + fjMap.forEach((docid, imageid) -> { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); + InputStream inputStream = imageFileManager.getInputStream(); + //中文路径/中文文件名 + String imageFileName = filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName(); + fjFileName.add(imageFileManager.getImageFileName()); + log.info("生成附件路径:{}", imageFileName); + imageFileName = codeUtf8(imageFileName); + try { + File file = saveInputStreamToFile(inputStream, imageFileName); + String jsonStr = callApi(Url, file); + log.error("永中接口返回数据:{}", jsonStr); + JSONObject result = JSONObject.parseObject(jsonStr); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + + //签字意见附件 + signFiles.forEach((docid, imageid) -> { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); + InputStream inputStream = imageFileManager.getInputStream(); + //中文路径/中文文件名 + String imageFileName = filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName(); + fjFileName.add(imageFileManager.getImageFileName()); + log.info("生成签字意见附件路径:{}", imageFileName); + imageFileName = codeUtf8(imageFileName); + try { + File file = saveInputStreamToFile(inputStream, imageFileName); + String jsonStr = callApi(Url, file); + log.error("永中接口返回数据:{}", jsonStr); + JSONObject result = JSONObject.parseObject(jsonStr); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + + //正文 + zwkbjMap.forEach((docid, imageid) -> { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); + InputStream inputStream = imageFileManager.getInputStream(); + zwFileName.add(imageFileManager.getImageFileName()); + //中文路径/中文文件名 + String imageFileName = filePath + File.separator + requestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName(); + log.info("生成正文路径:{}", imageFileName); + imageFileName = codeUtf8(imageFileName); + try { + File file = saveInputStreamToFile(inputStream, imageFileName); + String jsonStr = callApi(Url, file); + log.error("永中接口返回:{}", jsonStr); + JSONObject result = JSONObject.parseObject(jsonStr); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + //开始承办单 先获取主流程的承办单 + List requestDocid = generaRequestFormPdf(requestid); + List subRequestDocid = generaSubRequestFormPdf(requestid); + Map reqDocMap = getFileIdByDocId(String.join(",", requestDocid)); + Map subReqDocMap = getFileIdByDocId(String.join(",", subRequestDocid)); + log.error("reqDocMap:{}", JSONObject.toJSONString(reqDocMap)); + log.error("subReqDocMap:{}", JSONObject.toJSONString(subReqDocMap)); + docids.addAll(requestDocid); + docids.addAll(subRequestDocid); + //附件 + reqDocMap.forEach((docid, imageid) -> { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); + InputStream inputStream = imageFileManager.getInputStream(); + //中文路径/中文文件名 + String imageFileName = filePath + File.separator + requestid + File.separator + cbddir + File.separator + fjFile + i[0] + "_" + imageFileManager.getImageFileName(); + log.info("主流程承办单路径:{}", imageFileName); + imageFileName = codeUtf8(imageFileName); + try { + File file = saveInputStreamToFile(inputStream, imageFileName); + String jsonStr = callApi(Url, file); + log.error("永中接口返回:{}", jsonStr); + JSONObject result = JSONObject.parseObject(jsonStr); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + cbddir + File.separator + fjFile + i[0] + "_" + imageFileManager.getImageFileName() + ".pdf"); + } + i[0]++; + } catch (IOException e) { + e.printStackTrace(); + } + }); +//正文 + i[0] = 1; + subReqDocMap.forEach((docid, imageid) -> { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); + InputStream inputStream = imageFileManager.getInputStream(); + //中文路径/中文文件名 + String imageFileName = filePath + File.separator + requestid + File.separator + zlcdir + File.separator + fjFile + i[0] + "_" + (imageFileManager.getImageFileName().contains("-")?imageFileManager.getImageFileName().split("\\-")[1]:imageFileManager.getImageFileName()); + imageFileName = codeUtf8(imageFileName); + log.info("子流程承办单路径:{}", imageFileName); + try { + File file = saveInputStreamToFile(inputStream, imageFileName); + String jsonStr = callApi(Url, file); + log.error("永中接口返回:{}", jsonStr); + JSONObject result = JSONObject.parseObject(jsonStr); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + zlcdir + File.separator + fjFile + i[0] + "_" + (imageFileManager.getImageFileName().contains("-")?imageFileManager.getImageFileName().split("\\-")[1]:imageFileManager.getImageFileName() )+ ".pdf"); + } + i[0]++; + } catch (IOException e) { + e.printStackTrace(); + } + }); + log.error(JSONObject.toJSONString(requestDocid)); + log.error(JSONObject.toJSONString(subRequestDocid)); + for (String docid : docids) { + log.error("删除了" + docid); + deleteDocByid(docid); + } + //-------------------------------------------------------------------- + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); + + String logFile = getSignLog(requestid, cbddir+File.separator+lzxxdir, requestInfo.getCreatorid() + requestInfo.getDescription()); + String s = callApi(Url, new File(logFile)); + log.error(s); + JSONObject result = JSONObject.parseObject(s); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, logFile + ".pdf"); + } + String zipName = filePath + File.separator + requestid + ".zip"; + ZipUtil.zip(filePath + File.separator + requestid, zipName); + log.error("zipName:{}", zipName); + String ftpFilePath = HgUtils.putFile(zipName, requestid + ".zip"); + log.error("ftpFilePath:{}", ftpFilePath); + String ftpFilePathNew = HgUtils.putFile(zipName, "test" + File.separator + requestid + ".zip"); + log.error("ftpFilePathNew:{}", ftpFilePathNew); + String context = getContext(requestid, requesData, requestid + ".zip", zwFileName, fjFileName); + insertRecord(requestid, context, ftpFilePath); + log.error("context:{}", context); + return context; + } + + private Map getSignFiles(String requestid) { + RecordSet recordSet = new RecordSet(); + ArrayList docids = new ArrayList<>(); + List subRequest = getSubRequestIds(requestid); + String sql = "select * from WORKFLOW_REQUESTLOG where REQUESTID in ( " + + String.join(",",subRequest) + " )" + + " and (annexdocids is not null or annexdocids <> '')"; + recordSet.executeQuery(sql); + while (recordSet.next()){ + String annexdocids = Util.null2String(recordSet.getString("annexdocids")) ; + if (annexdocids.length()>0){ + if (annexdocids.contains(",")){ + // annexdocids.split(",") + docids.addAll(Arrays.asList(annexdocids.split(","))); + }else { + docids.add(annexdocids); + } + } + } + return getFileIdByDocId(String.join(",",docids)) ; + } + + private void insertRecord(String requestid, String context, String ftpFilePath) { + String sql = "insert into uf_pushArchivesLog (request ,content,esbwjml) VALUES (?,?,?)"; + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdate(sql, requestid, context, ftpFilePath); + } + + + // 获取指定日期的第一秒 + public static Date getFirstSecondOfDate(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + // 获取指定日期的最后一秒 + public static Date getLastSecondOfDate(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + return calendar.getTime(); + } + + /** + * 生成子流程承办单 + * + * @param requestid 主流程id + */ + private List generaSubRequestFormPdf(String requestid) { + log.error("generaSubRequestFormPdf,requestid:{}",requestid); + Map subRequest = getSubRequest(requestid); + for (String s : subRequest.keySet()) { + requestid = subRequest.get(s); + break; + } + List docids = new ArrayList<>(); + // for (String wfid : subRequest.keySet()) { + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid) , 100); + WorkflowToDocCus workflowToDoc = new WorkflowToDocCus(); + requestInfo.setLastoperator("1"); + requestInfo.setDescription(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); + log.error("generaSubRequestFormPdf,requestInfo:{}",JSON.toJSONString(requestInfo)); + + List subDocids = workflowToDoc.execute(requestInfo, 1); + docids.addAll(subDocids); + log.error("generaSubRequestFormPdf,requestInfo:{}",JSON.toJSONString(subDocids)); + + // } + return docids; + } + + /** + * 生成主流程承办单 + * + * @param requestid + */ + private static List generaRequestFormPdf(String requestid) { + log.error("generaRequestFormPdf,requestid:{}",requestid); + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); + WorkflowToDocCus workflowToDoc = new WorkflowToDocCus(); + requestInfo.setLastoperator("1"); + requestInfo.setDescription(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); + log.error("generaRequestFormPdf,requestInfo:{}",JSON.toJSONString(requestInfo)); + return workflowToDoc.execute(requestInfo, 0); + } + + /*** + * 封装数据 + * @param requestid + * @return + */ + public Map getRequestByid(String requestid) { + HashMap record = new HashMap<>(); + String sql = "select * from formtable_main_30 where requestid = ?"; + String reqsql = "select REQUESTNAME from WORKFLOW_REQUESTBASE where REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + if (rs.next()) { + String fj = Util.null2String(rs.getString("fj")); + String zwkbj = Util.null2String(rs.getString("zwkbj")); // 正文可编辑字段 + record.put("fj", fj); + record.put("zwkbj", zwkbj); + record.put("zwyyglgwmk", Util.null2String(rs.getString("zwyyglgwmk"))); + record.put("lwh", Util.null2String(rs.getString("lwh"))); + record.put("mj", Util.null2String(rs.getString("mj"))); + record.put("lwrq", Util.null2String(rs.getString("lwrq"))); + record.put("swrq", Util.null2String(rs.getString("swrq"))); + record.put("blqx", Util.null2String(rs.getString("blqx"))); + record.put("sfdb", Util.null2String(rs.getString("sfdb"))); + record.put("wjlx", Util.null2String(rs.getString("wjlx"))); + record.put("fssj", Util.null2String(rs.getString("fssj"))); + record.put("gdh", Util.null2String(rs.getString("gdh"))); + record.put("swh", Util.null2String(rs.getString("swh"))); + record.put("ngbm", Util.null2String(rs.getString("ngbm"))); + record.put("ngr", Util.null2String(rs.getString("ngr"))); + record.put("ngrq", Util.null2String(rs.getString("ngrq"))); + record.put("swlx", Util.null2String(rs.getString("swlx"))); + record.put("jghwt", Util.null2String(rs.getString("jghwt"))); + record.put("lwdwmc", Util.null2String(rs.getString("lwdwmc"))); + record.put("bgqx", Util.null2String(rs.getString("bgqx"))); + record.put("ys", Util.null2String(rs.getString("ys"))); + record.put("wz", Util.null2String(rs.getString("wz"))); + record.put("lb", Util.null2String(rs.getString("lb"))); + record.put("bz", Util.null2String(rs.getString("bz"))); + record.put("yffbm", Util.null2String(rs.getString("yffbm"))); + record.put("ffbmb", Util.null2String(rs.getString("ffbmb"))); + record.put("yffbm", Util.null2String(rs.getString("yffbm"))); + } + rs.executeQuery(reqsql, requestid); + if (rs.next()) { + record.put("REQUESTNAME", Util.null2String(rs.getString("REQUESTNAME"))); + } + return record; + } + + + private String getContext(String requestid, Map requesData, String zipName, List zwFileName, List fjFileName) { + StringBuilder context = new StringBuilder(); + try { + + String swrq = Util.null2String(requesData.get("swrq")); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(swrq, formatter); + int year = date.getYear(); + context.append(year).append("|"); + String jghwt = Util.null2String(requesData.get("jghwt")); + context.append(jghwt).append("|"); + String swh = Util.null2String(requesData.get("swh")); + context.append(swh).append("|"); + String requestname = Util.null2String(requesData.get("REQUESTNAME")); + context.append(requestname).append("|"); + String lwdwmc = Util.null2String(requesData.get("lwdwmc")); //5 责任者 -> 来文单位 + context.append(lwdwmc).append("|"); + String bgqx = Util.null2String(requesData.get("bgqx")); //6 保管期限 -> 保管期限 + context.append(bgqx).append("|"); + String lwrq = Util.null2String(requesData.get("bgqx")); //7 日期 -> 原发文日期 + context.append(lwrq).append("|"); + String ys = Util.null2String(requesData.get("ys")); //8 页数 -> 页数 + context.append(ys).append("|"); + String wz = Util.null2String(requesData.get("wz")); //9 文种 -> 文种 + context.append(wz).append("|"); + String ngbm = Util.null2String(requesData.get("ngbm")); + String[] deptData = getDeptNameAndCode(ngbm); + context.append(deptData[0]).append("|"); //10 行编号 -> 拟稿部门 + context.append(deptData[1]).append("|"); //11 行名称 + context.append("").append("|"); // 12 保管期限编号 + context.append("").append("|"); // 13 保管期限及编号 + context.append("").append("|"); // 14 是否开放 + context.append("").append("|"); // 15 互见号 + String lb = Util.null2String(requesData.get("lb")); + context.append(lb).append("|"); //16 类别 -> 类别 + //TODO + String xgbm = Util.null2String(getAssociatedDepts(requesData)); + context.append(xgbm).append("|"); //17 相关部门 -> 流经部门 + String lwh = Util.null2String(requesData.get("lwh"));// 18 收文号 -> 来文文号 + context.append(lwh).append("|"); + String fs = ""; + context.append(fs).append("|"); // 19 份数 -> 份数 + String bz = Util.null2String(requesData.get("bz")); + context.append(bz).append("|"); // 20 备注 -> 备注 + String yywh = Util.null2String(requesData.get("yywh")); + context.append(yywh).append("|"); // 21 引用文号 -> 引用文号 + String wjlx = Util.null2String(requesData.get("wjlx")); + context.append(wjlx).append("|"); // 22 文件类型 -> 空 + String fwlx = Util.null2String(requesData.get("fwlx")); + context.append(fwlx).append("|"); // 23 文件类型 -> 空 + String f = Util.null2String(requesData.get("f")); + context.append(f).append("|"); // 24 发 -> 空 + String ngr = Util.null2String(requesData.get("ngr")); + context.append(new User(Util.getIntValue(ngr)).getLoginid()).append("|"); // 25 拟稿人 -> 拟稿人 + context.append(deptData[1]).append("|"); // 26 拟稿部门 -> 拟稿部门名称 + context.append("收文").append("|"); // 27 公文类型 -> "收文" + //TODO + context.append(getAssociatedPersons(requestid)).append("|"); // 28 相关人员 -> 参与人员 + context.append("智慧OA").append("|"); // 29 数据来源 -> 数据来源 + context.append(year).append("|"); // 30 形成年度 -> 年份 + context.append(String.join("&&", zwFileName)).append("|"); // 31 正文名称 + context.append(String.join("&&", fjFileName)).append("|"); // 32 附件名称 + context.append(requestid).append("|"); // 33 主键 + context.append("").append("|"); // 34 关联主键 + context.append("").append("|"); // 35 被关联主键 + context.append(zipName);// 36 压缩包名称 + } catch (Exception e) { + e.printStackTrace(); + log.error("getContextError:{}", e.getMessage()); + } + + return context.toString(); + } + + private String getAssociatedDepts(Map requesData) { + HashSet records = new HashSet<>(); + records.addAll(Arrays.asList(Util.null2String(requesData.get("ngbm")).split(","))); + records.addAll(Arrays.asList(Util.null2String(requesData.get("ffbm")).split(","))); + records.addAll(Arrays.asList(Util.null2String(requesData.get("yffbm")).split(","))); + records.addAll(Arrays.asList(Util.null2String(requesData.get("ffbmb")).split(","))); + records.addAll(Arrays.asList(Util.null2String(requesData.get("zfbm")).split(","))); + return String.join("&&", records); + } + + private String getAssociatedPersons(String requestid) { + List subRequest = getSubRequestIds(requestid); + String sql = "select distinct b.LOGINID loginid from WORKFLOW_REQUESTLOG a left join HRMRESOURCE b " + + " on a.OPERATOR = b.ID " + + " where a.OPERATOR is not null and a.OPERATOR != 1 and a.REQUESTID in ( " + String.join(",", subRequest) + " )"; + RecordSet recordSet = new RecordSet(); + HashSet set = new HashSet<>(); + recordSet.executeQuery(sql); + while (recordSet.next()) { + String loginid = Util.null2String(recordSet.getString("loginid")); + if (StringUtil.isEmpty(loginid)) { + continue; + } + //处理下子账号 + if (loginid.length() > 8) { + loginid = loginid.substring(0, 8); + } + set.add(loginid); + } + return String.join("&&", set); + } + + private String[] getFileName(String docids) { + return new String[0]; + } + + private String[] getDeptNameAndCode(String ngbm) { + String sql = "select DEPARTMENTNAME , DAPYBH from hrmdepartment a left join hrmdepartmentdefined b " + + " on a.ID = b.DEPTID " + + " where a.ID = ? "; + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery(sql, ngbm); + recordSet.next(); + return new String[]{recordSet.getString("DAPYBH"), recordSet.getString("DEPARTMENTNAME")}; + } + + /** + * 将gbk转为UTF-8,创建ISO-8859-1编码的字符串, + * ISO-8859-1编码是一个字节对应一个字符,因此不会使最后一个字节错误。 + * + * @param text + * @return + */ + public static String codeUtf8(String text) { + String ISOtext = null; + ISOtext = new String(text.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + return new String(ISOtext.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + + } + + /** + * 获取当前流程下的所有子流程(最大5层) + * + * @param requestid + * @return + */ + public static Map getSubRequest(String requestid) { + HashMap records = new HashMap<>(); + RecordSet rs = new RecordSet(); + String ids = requestid; + for (int i = 0; i < 5; i++) { + ArrayList idList = new ArrayList<>(); + String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; + rs.executeQuery(sql); + while (rs.next()) { + String subrequestid = Util.null2String(rs.getString("requestid")); + String workflowid = Util.null2String(rs.getString("workflowid")); + idList.add(subrequestid); + // 使用map自动去重,一种流程类型只取一个requestid + records.put(workflowid, subrequestid); + } + ids = String.join(",", idList); + } + + + // String sql = "select requestid from workflow_requestbase where mainrequestid = ?"; + // RecordSet rs = new RecordSet(); + // rs.executeQuery(sql, requestid); + // if (rs.next()) { + // String subrequestid = Util.null2String(rs.getString("requestid")); + // records.add(subrequestid); + // } + return records; + } + + public static List getSubRequestIds(String requestid) { + List reqids = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String ids = requestid; + reqids.add(requestid); + for (int i = 0; i < 5; i++) { + ArrayList idList = new ArrayList<>(); + String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; + log.error("subrequestSql:{}", sql); + rs.executeQuery(sql); + while (rs.next()) { + String subrequestid = Util.null2String(rs.getString("requestid")); + // String workflowid = Util.null2String(rs.getString("workflowid")); + idList.add(subrequestid); + reqids.add(subrequestid); + // 使用map自动去重,一种流程类型只取一个requestid + + } + ids = String.join(",", idList); + if (ids.length() == 0) { + break; + } + } + + + // String sql = "select requestid from workflow_requestbase where mainrequestid = ?"; + // RecordSet rs = new RecordSet(); + // rs.executeQuery(sql, requestid); + // if (rs.next()) { + // String subrequestid = Util.null2String(rs.getString("requestid")); + // records.add(subrequestid); + // } + return reqids; + } + + + /** + * 获取imageid Map + * + * @param ids + * @return + */ + public static Map getFileIdByDocId(String ids) { + HashMap records = new HashMap<>(); + + String sql = "select docid,df.imagefileid imgid from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID in (" + ids + ")"; + RecordSet recordSet = new RecordSet(); + recordSet.execute(sql); + while (recordSet.next()) { + String docid = Util.null2String(recordSet.getString("docid")); + String imgid = Util.null2String(recordSet.getString("imgid")); + records.put(docid, imgid); + } + return records; + } + + /** + * 将InputStream写入本地文件 + * + * @param inputStream 输入流 + * @param localFilePath 本地文件路径 + * @return + * @throws IOException 如果发生输入输出异常 + */ + public static File saveInputStreamToFile(InputStream inputStream, String localFilePath) throws IOException { + File targetFile = new File(localFilePath); + + // 确保目标文件的父目录存在 + File parentDir = targetFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + + + // 使用try-with-resources语句确保流的正确关闭 + try (InputStream in = inputStream; + OutputStream outputStream = new FileOutputStream(targetFile)) { + int read; + byte[] bytes = new byte[1024]; + while ((read = in.read(bytes)) != -1) { + outputStream.write(bytes, 0, read); + } + } // 自动关闭 in 和 outputStream + return targetFile; + } + + + /** + * 根据链接下载文件 + * + * @param fileURL + * @param saveDir + */ + public static void downloadFile(String fileURL, String saveDir) { + log.info("文件下载地址:{}", fileURL); + log.info("文件保存地址:{}", saveDir); + + try { + saveDir = codeUtf8(saveDir); + URL url = new URL(fileURL); + File file = new File(saveDir); + FileUtils.copyURLToFile(url, file); + log.error("Download completed successfully."); + } catch (IOException e) { + e.printStackTrace(); + log.error("Download failed."); + } + } + + + /** + * 调用永中接口 + * + * @param BASE_URL + * @param file + * @return + * @throws IOException + */ + public static String callApi(String BASE_URL, File file) { + OkHttpClient client = new OkHttpClient(); + // Debugging: Check if the file exists and can be read + if (file.exists() && file.canRead()) { + log.error("File exists and is readable. File path: " + file.getAbsolutePath()); + } else { + log.error("File does not exist or cannot be read. File path: " + file.getAbsolutePath()); + } + RequestBody requestBody = null; + String code = getCodeByFileType(file.getName()); + String fileName = null; + try { + fileName = URLEncoder.encode(file.getName(), StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + try { + requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("convertType", code) + .addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("application/zip"), file)) + .build(); + } catch (Exception e) { + log.error(e.getMessage()); + e.printStackTrace(); + } + + Request request = new Request.Builder() + .url(BASE_URL) + .post(requestBody) + .build(); + + try (Response response = client.newCall(request).execute()) { + return response.body().string(); + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + /** + * 根据文件类型获取转为pdf的编码 + * + * @param FileName + * @return + */ + + public static String getCodeByFileType(String FileName) { + String extName = FileName.substring(FileName.lastIndexOf(".") + 1); + String convertType = ""; + if (extName.matches("(doc|dot|dtd|docx|docm|dotx|ppt|pptx|ppsx|potx|xlsx|xlsm|wps|dps|et|wpt|xls|xlc|xlt|xlm|xlw|DOC|DOT|DTD|DOCX|DOCM|DOTX|PPT|PPTX|PPSX|POTX|XLSX|XLSM|WPS|DPS|ET|WPT|XLS|XLC|XLT|XLM|XLW)")) { + convertType = "3"; + } else if (extName.matches("(ofd|OFD)")) { + convertType = "57"; + } else if (extName.matches("(GIF|JPEG|JPG|BMP|PNG|gif|jpeg|jpg|bmp|png)")) { + convertType = "44"; + } else if (extName.matches("(PDF|pdf)")) { + convertType = "34"; + } + return convertType; + } + + + /*** + * 获取关键词 + * @param id + * @return + */ + public static String getKeyword(String id) { + String sql = "select * from uf_test where id = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, id); + rs.next(); + return Util.null2String(rs.getString("label")); + } + + /** + * 删除文档及附件,调用移到回收站,再从回收站删除 + * + * @param docid + */ + public static void deleteDocByid(String docid) { + DocRecycleManager docRecycleManager = new DocRecycleManager(); + User user = new User(1); + docRecycleManager.moveDocToRecycle(user.getUID(), user.getLogintype(), Util.getIntValue(docid), "127.0.0.1"); + docRecycleManager.deleteDocFromRecycle(user.getUID(), user.getLogintype(), weaver.general.Util.getIntValue(docid), "127.0.0.1"); + } + + /** + * 获取流程类型名称 + * + * @param wfid + * @return + */ + + public static String getWfNameByid(String wfid) { + String sql = "select WORKFLOWNAME from WORKFLOW_BASE where id = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, wfid); + rs.next(); + return Util.null2String(rs.getString("WORKFLOWNAME")); + } + + + /** + * 生成流转意见 意见 + * + * @param requestid + * @param dirName + * @param requestName + * @return + */ + public static String getSignLog(String requestid, String dirName, String requestName) { + List subRequestIds = getSubRequestIds(requestid); + ArrayList> lists = new ArrayList<>(); + for (String reqid : subRequestIds) { + HashMap params = new HashMap<>(); + params.put("requestid", reqid); + params.put("desremark", "all"); + params.put("pageSize", "50"); + params.put("isfirst", "true"); + // params.put("request", request); + Map data = getSignLogCmd(params, new User(1)); + log.info("流转信息:{}", data); + log.error(JSONObject.toJSONString(data)); + Map datas = (Map) data.get("datas"); + List> entries = new ArrayList<>(datas.entrySet()); + entries.sort(new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + Integer key1 = Util.getIntValue((Util.null2String(o1.getKey())).replace("key", "")); + Integer key2 = Util.getIntValue((Util.null2String(o2.getKey())).replace("key", "")); + return key1 - key2; + } + }); // 自然顺序 + + ArrayList> results = new ArrayList<>(); + // log.error(JSONObject.toJSONString(entries)); + for (Map.Entry entry : entries) { + + Map value = (Map) entry.getValue(); + List> list = (List) value.get("list"); + for (Map item : list) { + String operator = (String) item.get("operator"); + String operatorid = (String) item.get("operatorid"); + String operatortype = (String) item.get("operatortype"); + String operatedate = (String) item.get("operatedate"); + String nodename = (String) value.get("nodename"); + HashMap itemMap = new HashMap<>(); + itemMap.put("operator", operator); + itemMap.put("operatorid", operatorid); + itemMap.put("operatortype", operatortype); + itemMap.put("operatedate", operatedate); + itemMap.put("nodename", nodename); + itemMap.put("requestName", (String) value.get("requestName")); + + results.add(itemMap); + } + } + log.error("排序结果:{}", JSONObject.toJSONString(results)); + HashMap records = new HashMap<>(); + records.put("results",results); + String requestName1 = (String) data.get("requestName"); + records.put("requestName",requestName1); + log.error("requestName1:{}", requestName1); + log.error("records:{}", JSONObject.toJSONString(records)); + lists.add(records); + } + + try { + Map dataMap = new HashMap<>(); + dataMap.put("lists", lists); // 将用户列表添加到数据映射中 + log.error("dataMap:{}", JSONObject.toJSONString(dataMap)); + String TemplatePath = "/opt/weaver/filesys/"; + //String TemplateName = "html模版.ftl"; + String TemplateName = "temp.ftl"; + // 加载模板并填充数据 + log.error("模板路径:{}", templatePath); + // 导出Word文档 + String outputPath = filePath + File.separator + requestid + File.separator + dirName + File.separator + requestName + ".docx"; // 输出文件路径 + log.error("生成文件路径:{}", templatePath); + + return generate(TemplatePath, TemplateName, dataMap, outputPath); + } catch (Exception e) { + log.error("errorerrorerror"); + log.error(e.getMessage()); + e.printStackTrace(); + } + return requestid; + } + + + public static Map getSignLogCmd(Map params, User user) { + Map result = new HashMap(); + RequestAuthenticationService authService = new RequestAuthenticationService(); + authService.setUser(user); + + long date1 = new Date().getTime(); + try { + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + int pageSize = Util.getIntValue(Util.null2String(params.get("pageSize")), 30); + int desrequestid = Util.getIntValue(Util.null2String(params.get("desrequestid")), 0); + String isfirst = Util.null2String(params.get("isfirst")); + String isurger = Util.null2String(params.get("isurger")); + String desremark = Util.null2String(params.get("desremark")); + int desremarkIndex = desremark.indexOf("_"); + boolean isAdSearch = false;//是否有过滤条件 + if (desremarkIndex > -1) { + isAdSearch = true; + desremark = desremark.substring(0, desremarkIndex); + } + String parameter = Util.null2String(params.get("parameter")); + int selectedNode = Util.getIntValue(Util.null2String(params.get("selectedNode")), -1);//选中的节点 + String selectedOperator = Util.null2String(params.get("selectedOperator"));//选中的操作者 + int requestid = Util.getIntValue(Util.null2String(params.get("requestid")), 0); + int workflowid = -1; + String requestName = ""; + rs.executeQuery("select workflowid , REQUESTNAMENEW from workflow_requestbase where requestid=" + requestid); + if (rs.next()) { + workflowid = Util.getIntValue(rs.getString("workflowid")); + requestName = Util.null2String(rs.getString("REQUESTNAMENEW")); + } + // 将json字符串转换成jsonObject + int currentMaxId = 0; + int currentMinId = 0; + int currentId = 0; + int currentId2 = 0; + int lastNodeId = 0; + String viewlogids = ""; + int index = 0; + try { + if (!"true".equals(isfirst)) { + Map parameterMap = JSON.parseObject(parameter, Map.class);//Weibo类在下边定义 + currentMaxId = Util.getIntValue(parameterMap.get("currentMaxId"), 0); + currentMinId = Util.getIntValue(parameterMap.get("currentMinId"), 0); + String currentId12 = Util.null2String(parameterMap.get("currentId")); + if (currentId12.contains("_")) { + String[] currentId12Arr = currentId12.split("_"); + currentId = Util.getIntValue(currentId12Arr[0]); + currentId2 = Util.getIntValue(currentId12Arr[1]); + } else { + currentId = Util.getIntValue(currentId12); + } + viewlogids = Util.null2String(parameterMap.get("viewlogids")); + index = Util.getIntValue(parameterMap.get("nodeindex"), 0); + lastNodeId = Util.getIntValue(parameterMap.get("lastNodeId"), 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + Map putpara = new HashMap(); + + Monitor monitor = new Monitor(); +// String joinStr = ("oracle".equalsIgnoreCase(rs.getDBType()) || "mysql".equalsIgnoreCase(rs.getDBType())) ? " left join " : " left hash join "; + String joinStr = " left join "; +// if (isurger.equals("true") || monitor.hasMonitor(requestid+"", user.getUID() + "")) { +// StringBuffer sqlsb = new StringBuffer(); +// sqlsb.append(" select a.id,a.nodeid, "); +// sqlsb.append(" b.nodename, "); +// sqlsb.append(" a.userid, "); +// sqlsb.append(" a.isremark, "); +// sqlsb.append(" a.lastisremark, "); +// sqlsb.append(" a.usertype, "); +// sqlsb.append(" a.agentorbyagentid, "); +// sqlsb.append(" a.agenttype, "); +// sqlsb.append(" a.receivedate, "); +// sqlsb.append(" a.receivetime, "); +// sqlsb.append(" a.operatedate, "); +// sqlsb.append(" a.operatetime, "); +// sqlsb.append(" a.viewtype, "); +// sqlsb.append(" a.nodetype "); +// sqlsb.append(" ,a.operator "); +// sqlsb.append(" from (SELECT distinct top ").append(pageSize); +// sqlsb.append(" o.id, " ); +// sqlsb.append(" o.requestid, " ); +// sqlsb.append(" o.userid, "); +// sqlsb.append(" o.workflowid, "); +// sqlsb.append(" o.workflowtype, "); +// sqlsb.append(" o.isremark, "); +// sqlsb.append(" o.lastisremark, "); +// sqlsb.append(" o.usertype, "); +// sqlsb.append(" o.nodeid, "); +// sqlsb.append(" o.agentorbyagentid, "); +// sqlsb.append(" o.agenttype, "); +// sqlsb.append(" o.receivedate, "); +// sqlsb.append(" o.receivetime, "); +// sqlsb.append(" o.viewtype, "); +// sqlsb.append(" o.iscomplete, "); +// sqlsb.append(" o.operatedate, "); +// sqlsb.append(" o.operatetime, "); +// sqlsb.append(" nodetype "); +// sqlsb.append(" ,wr.operator "); +// sqlsb.append(" FROM workflow_currentoperator o "); +// +// sqlsb.append(" left join workflow_requestlog wr"); +// sqlsb.append(" on wr.requestid=o.requestid"); +// sqlsb.append(" and wr.nodeid=o.nodeid"); +// sqlsb.append(" and wr.operator = o.userid"); +// sqlsb.append(" and wr.logtype <> '1'"); +// +// sqlsb.append(" , workflow_flownode "); +// +// sqlsb.append(" where o.nodeid = "); +// sqlsb.append(" workflow_flownode.nodeid "); +// if(desremark ==1){//1:已提交 +// sqlsb.append(" AND o.isremark='2' AND wr.operator IS NOT null "); +// }else if(desremark == 2){//2:未提交 +// sqlsb.append(" and ((o.isremark = '0' and (o.takisremark is null or o.takisremark=0)) or o.isremark in ('1','5','7','8','9') )"); +// }else if(desremark == 3){//3:已查看 +// sqlsb.append(" and (((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','4','5','7','8','9')) AND o.viewtype IN (-1,-2)) "); +// }else if(desremark == 4){//4:未查看 +// sqlsb.append(" AND o.viewtype = 0 "); +// } +// sqlsb.append(" and o.id > ").append(currentId); +// sqlsb.append(" and o.requestid = " + requestid + ") a, "); +// sqlsb.append(" workflow_nodebase b "); +// sqlsb.append(" where a.nodeid = b.id "); +// sqlsb.append(" and a.requestid = " + requestid + " "); +// sqlsb.append(" and a.agenttype <> 1 "); +// sqlsb.append(" order by a.id "); +// //log.error("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); +// rs.executeSql(sqlsb.toString()); +// +// } else { + // 处理相关流程的查看权限 +// if ("".equals(viewlogids)) { +// viewlogids = this.getViewLogids(); +// } + StringBuffer sqlsb = new StringBuffer(); + if ("sqlserver".equalsIgnoreCase(rs.getDBType())) { // sqlserver 排序提到这里 + sqlsb.append(" select top ").append(pageSize).append(" a.id,a.nodeid, "); + } else { + sqlsb.append(" select a.id,a.nodeid, "); + } + sqlsb.append("(CASE WHEN a.nodeid < -1 THEN (SELECT nodename FROM workflow_freenode t WHERE t.id = a.nodeid) ELSE (SELECT nodename FROM workflow_nodebase t1 WHERE t1.id = a.nodeid) END) AS nodename,"); + sqlsb.append(" a.userid, "); + sqlsb.append(" a.isremark, "); + sqlsb.append(" a.preisremark, "); + sqlsb.append(" a.lastisremark, "); + sqlsb.append(" a.usertype, "); + sqlsb.append(" a.agentorbyagentid, "); + sqlsb.append(" a.agenttype, "); + sqlsb.append(" a.receivedate, "); + sqlsb.append(" a.receivetime, "); + sqlsb.append(" a.operatedate, "); + sqlsb.append(" a.operatetime, "); + sqlsb.append(" a.processuser, "); + sqlsb.append(" a.viewtype, "); + sqlsb.append(" a.nodetype "); + sqlsb.append(" ,a.operator "); + sqlsb.append(" ,a.tab "); + //if("true".equals(isfirst)){ + /*if("oracle".equals(rs.getDBType()) || "mysql".equals(rs.getDBType())){ + sqlsb.append(" from (SELECT distinct "); + }else{ + sqlsb.append(" from (SELECT distinct top ").append(pageSize); // sqlserver排序提到外层查询 + }*/ + sqlsb.append(" from (SELECT distinct "); +// }else{ +// sqlsb.append(" from (SELECT distinct "); +// } + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" o.workflowtype, "); + //workflow_otheroperator表中isremark为字符型,这里转下字符 + if (rs.getDBType().toLowerCase().equals("oracle") || rs.getDBType().toLowerCase().equals("postgresql")) { + sqlsb.append(" to_char(o.isremark) as isremark, "); + sqlsb.append(" to_char(o.preisremark) AS preisremark, "); + sqlsb.append(" to_char(o.lastisremark) AS lastisremark, "); + } else if (rs.getDBType().toLowerCase().equals("mysql")) { + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.preisremark, "); + sqlsb.append(" o.lastisremark, "); + } else { + sqlsb.append(" cast(o.isremark as varchar) as isremark, "); + sqlsb.append(" cast(o.preisremark as varchar) as preisremark, "); + sqlsb.append(" cast(o.lastisremark as varchar) as lastisremark, "); + } + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" o.agentorbyagentid, "); + sqlsb.append(" o.agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" o.iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" o.processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype "); + sqlsb.append(" ,wr.operator "); + sqlsb.append(" ,1 as tab "); + sqlsb.append(" FROM workflow_currentoperator o "); + sqlsb.append(" " + joinStr + " workflow_requestlog wr"); + sqlsb.append(" on wr.requestid=o.requestid"); + sqlsb.append(" and wr.nodeid=o.nodeid"); + sqlsb.append(" and wr.operator = o.userid"); + sqlsb.append(" and wr.logtype <> '1'"); + sqlsb.append(" and o.operatedate = wr.operatedate"); + sqlsb.append(" and o.operatetime = wr.operatetime");//再通过时间关联一下,防止流程状态操作状态显示错误 + sqlsb.append(" where o.id > ").append(currentId); + if ("submit".equals(desremark)) {//1:已提交----isremark等于4,preisremark=11实际对应已提交数据 + sqlsb.append(" AND (o.isremark='2' or (o.isremark=4 and o.preisremark=11)) AND (wr.operator IS NOT null or o.userid = o.processuser)"); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + sqlsb.append(" AND( (o.isremark != '2' AND o.isremark != '4') OR (o.isremark = '4' AND o.viewtype = 0 and o.preisremark != 11) ) "); + } else if ("view".equals(desremark)) {//3:已查看 + sqlsb.append(" and ((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','5','7','8','9','11') or (o.isremark=4 and o.preisremark!=11)) AND o.viewtype IN (-1,-2) "); + } else if ("noview".equals(desremark)) {//4:未查看 + sqlsb.append(" AND o.viewtype=0 AND (o.isremark IN ('0','1','5','7','8','9','11') or (o.isremark = '2' AND wr.operator IS NULL) or (o.isremark=4 and o.preisremark!=11)) "); + } + sqlsb.append(" and o.requestid = " + requestid); + sqlsb.append(" union "); + sqlsb.append(" SELECT DISTINCT "); + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" 0 as workflowtype, "); + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.isremark as preisremark, "); + sqlsb.append(" o.isremark as lastisremark, "); + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" 0 as agentorbyagentid, "); + sqlsb.append(" '0' as agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" 1 as iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" wr.operator as processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype, "); + sqlsb.append(" wr.operator "); + sqlsb.append(" ,2 as tab "); + sqlsb.append(" FROM workflow_otheroperator o LEFT JOIN workflow_requestlog wr ON wr.requestid = o.requestid "); + sqlsb.append(" AND wr.nodeid = o.nodeid "); + sqlsb.append(" AND wr.operator = o.userid "); + sqlsb.append(" AND wr.logtype <> '1' "); + sqlsb.append(" WHERE o.requestid = " + requestid + " "); + sqlsb.append(" and o.id > ").append(currentId2); + sqlsb.append(" ) a "); + sqlsb.append(" where a.requestid = " + requestid + " "); + sqlsb.append(" and a.agenttype <> 1 "); + if (!"".equals(viewlogids)) { + sqlsb.append(" and a.nodeid in (" + viewlogids + ") "); + } + if (selectedNode != -1) { + sqlsb.append(" AND a.nodeid = " + selectedNode + " "); + } + if (!"".equals(selectedOperator)) { + sqlsb.append(" AND a.userid = " + selectedOperator + " "); + } + + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + boolean showdelFreeNodeInfo = "1".equals(configComInfo.getValue("showdelete_freenode_info")); + + sqlsb.append(" and (a.nodeid > -1 or (a.nodeid < -1 and exists (select id from workflow_freenode where id = a.nodeid and requestid = " + requestid + (showdelFreeNodeInfo ? "" : " and groupid > 0 ") + " ))) "); + + //搜索时返回状态 + if (isAdSearch && "true".equals(isfirst)) { + rs.executeQuery("select count(id) as count from (" + sqlsb.toString().replace("top " + pageSize, "") + ") t"); + result.put("countTime", new Date().getTime() - date1); + if (rs.next()) { + result.put("count", Util.null2String(rs.getString("count"))); + } + } + + sqlsb.append(" order by a.receivedate, a.receivetime,a.id , a.nodetype"); + + //log.error("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); + if ("oracle".equals(rs.getDBType())) { //必须排序后再限制rownum + String sql_oracle = sqlsb.toString(); + sqlsb.setLength(0); + sqlsb.append("select * from (" + sql_oracle + ") where rownum < ").append(pageSize); + } else if ("mysql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } else if ("postgresql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } + if (requestid > 0) { + rs.executeSql(sqlsb.toString()); + } + result.put("dataTime", new Date().getTime() - date1); +// } + List> statuslist = new ArrayList>(); + int tmpnodeid = 0; + while (rs.next()) { + int tab = rs.getInt("tab"); + if (tab == 1) { + currentId = rs.getInt("id"); + } else { + currentId2 = rs.getInt("id"); + } + tmpnodeid = rs.getInt("nodeid"); + String tmpnodename = rs.getString("nodename"); + Map nodekv = null; + if (statuslist.size() == 0) { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } else { + Map temmap = statuslist.get(statuslist.size() - 1); + int tnodeid = Util.getIntValue(temmap.get("nodeid"), 0); + if (tnodeid == tmpnodeid) { + nodekv = temmap; + } else { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } + } + nodekv.put("nodeid", tmpnodeid + ""); + nodekv.put("nodename", tmpnodename + ""); + } + int nextlistcount = 0; + int nextsubmitCount = 0; + int nextviewCount = 0; + int nextnoviewCount = 0; + if ("all".equals(desremark) && !isAdSearch) { + currentMaxId = currentId; + String maxsql = " select a.id,a.nodeid from workflow_currentoperator a where a.id > " + currentId + " and a.requestid=" + requestid + " order by a.id ,a.receivedate, a.receivetime"; + rs1.executeSql(maxsql); + while (rs1.next()) { + int currentid = rs1.getInt("id"); + int currentnodeid = rs1.getInt("nodeid"); + if (currentnodeid == tmpnodeid) { + currentMaxId = currentid; + } else { + break; + } + } + String listcountsql = " select count(id) num from workflow_currentoperator where id > " + currentId + " and id <= " + currentMaxId + " and requestid=" + requestid + " and nodeid=" + tmpnodeid + " and agenttype <> 1 and usertype <> 1 "; + //String submitCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid +" and agenttype <> 1 and usertype <> 1 and isremark = 2 and exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and workflow_requestlog.operator=workflow_currentoperator.userid )"; + //String viewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 and (viewtype = -1 or viewtype=-2) and ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + //String noviewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 AND viewtype=0 AND (isremark IN ('0','1','4','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + String submitCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.isremark = 2 and wr.operator is NOT null "; + String viewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype IN (-1,-2) and ((wc.isremark = '2' AND wr.operator IS NULL) or wc.isremark in ('0','1','4','5','7','8','9')) "; + String noviewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype=0 AND (wc.isremark IN ('0','1','4','5','7','8','9','11') or (wc.isremark = '2' and wr.operator is null )) "; + rs1.executeSql(listcountsql); + while (rs1.next()) { + nextlistcount = rs1.getInt("num"); + } + rs1.executeSql(submitCountsql); + while (rs1.next()) { + nextsubmitCount = rs1.getInt("num"); + } + rs1.executeSql(viewCountsql); + while (rs1.next()) { + nextviewCount = rs1.getInt("num"); + } + rs1.executeSql(noviewCountsql); + while (rs1.next()) { + nextnoviewCount = rs1.getInt("num"); + } + } + + Map allstatusmap = new HashMap(); + Map submitstatusmap = new HashMap(); + Map nosubmitstatusmap = new HashMap(); + Map viewstatusmap = new HashMap(); + Map noviewstatusmap = new HashMap(); + //提交节点信息--滚动加载到当前currentoperator对应最大id + + //数字统计转到新接口count中 + ResourceComInfo resourceComInfo = new ResourceComInfo(); + CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo(); + Map all_nodemap = new HashMap(); + Map submit_nodemap = new HashMap(); + Map nosubmit_nodemap = new HashMap(); + Map view_nodemap = new HashMap(); + Map noview_nodemap = new HashMap(); + + rs.beforFirst(); + int currentnum = 0; + for (Iterator> it = statuslist.iterator(); it.hasNext(); index++) { + + Map nodekv = it.next(); + int fnodeid = Util.getIntValue(nodekv.get("nodeid")); + String namename = nodekv.get("nodename"); + int submitCount = 0; + int viewCount = 0; + int noviewCount = 0; + int listcount = 0; + if ("false".equals(isfirst) && currentnum == 0 && lastNodeId == fnodeid) { + index -= 1; + } + if (tmpnodeid == fnodeid && currentnum == (statuslist.size() - 1)) { + submitCount = nextsubmitCount; + viewCount = nextviewCount; + noviewCount = nextnoviewCount; + listcount = nextlistcount; + } + currentnum++; + Map all_nodemap_in = new HashMap(); + all_nodemap_in.put("nodeid", fnodeid); + all_nodemap_in.put("nodename", namename); + Map submit_nodemap_in = new HashMap(); + Map nosubmit_nodemap_in = new HashMap(); + Map view_nodemap_in = new HashMap(); + Map noview_nodemap_in = new HashMap(); + + List> nodeallstatuslist = new ArrayList>(); + List> nodesubmitstatuslist = new ArrayList>(); + List> nodenosubmitstatuslist = new ArrayList>(); + List> nodeviewstatuslist = new ArrayList>(); + List> nodenoviewstatuslist = new ArrayList>(); + + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.putAll(all_nodemap_in); + submitstatusmap.put("datas", submit_nodemap); + submit_nodemap.put("key" + index, submit_nodemap_in); + submit_nodemap_in.put("list", nodesubmitstatuslist); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.putAll(all_nodemap_in); + nosubmitstatusmap.put("datas", nosubmit_nodemap); + nosubmit_nodemap.put("key" + index, nosubmit_nodemap_in); + nosubmit_nodemap_in.put("list", nodenosubmitstatuslist); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.putAll(all_nodemap_in); + viewstatusmap.put("datas", view_nodemap); + view_nodemap.put("key" + index, view_nodemap_in); + view_nodemap_in.put("list", nodeviewstatuslist); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.putAll(all_nodemap_in); + noviewstatusmap.put("datas", noview_nodemap); + noview_nodemap.put("key" + index, noview_nodemap_in); + noview_nodemap_in.put("list", nodenoviewstatuslist); + } else { + //所有节点信息 + allstatusmap.put("datas", all_nodemap); + all_nodemap.put("key" + index, all_nodemap_in); + all_nodemap_in.put("list", nodeallstatuslist); + } + + boolean islight = false; + RobotNodeServiceBiz robotNodeServiceBiz = new RobotNodeServiceBiz(); + while (rs.next()) { + int tmpnodeid1 = rs.getInt("nodeid"); + + if (tmpnodeid1 != fnodeid) { + rs.previous(); + break; + } + + //String tmpnodename = rs.getString("nodename"); + int tmpcurrid = rs.getInt("id"); + String tmpuserid = rs.getString("userid"); + String tmpisremark = Util.null2String(rs.getString("isremark")); + if (tmpisremark.equals("")) { + tmpisremark = Util.null2String(rs.getString("lastisremark")); + } + int tmpusertype = rs.getInt("usertype"); + String tmpagentorbyagentid = rs.getString("agentorbyagentid"); + int tmpagenttype = rs.getInt("agenttype"); + String tmpreceivedate = rs.getString("receivedate"); + String tmpreceivetime = rs.getString("receivetime"); + String tmpoperatedate = rs.getString("operatedate"); + String tmpoperatetime = rs.getString("operatetime"); + String viewtype = rs.getString("viewtype"); + String nodetype = rs.getString("nodetype"); + int preisremark = rs.getInt("preisremark"); + String processuser = rs.getString("processuser"); + boolean flags = false; + String tmpIntervel = ""; + // 如果tmpisremark=2 判断时候在日志表里有该人(确定是否是由非会签得到的isremark=2) + + String operator = rs.getString("operator"); + if (operator != null && !"".equals(operator)) { + flags = true; + } + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && tmpoperatedate != null && !tmpoperatedate.equals("")) { + tmpIntervel = TimeUtil.timeInterval2(tmpreceivedate + " " + tmpreceivetime, tmpoperatedate + " " + tmpoperatetime, user.getLanguage()); + } + islight = !islight; + Map _statusmap = new HashMap(); + // 操作人 + String _statususername = ""; + String _operatorid = ""; + String _beagentid = ""; + String _beagentname = ""; + String _operatortype = "0"; + if (tmpusertype == 0) { + _operatorid = tmpuserid; + _statususername = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpuserid)); + if (tmpagenttype == 2) { //代理情况 + _beagentid = tmpagentorbyagentid; + _beagentname = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpagentorbyagentid)); + } + _statusmap.put("operatorImg", resourceComInfo.getMessagerUrls(tmpuserid)); + _statusmap.put("operatorImgDefName", _statususername); + } else if (RobotNodeBiz.operatortype.equals(tmpusertype + "")) { + _statususername = Util.formatMultiLang(robotNodeServiceBiz.getRobotNodeSet(tmpnodeid1).getOperatorName()); + _operatorid = tmpuserid; + _operatortype = "2"; + } else { + _operatorid = tmpuserid; + _operatortype = "1"; + _statususername = ServiceUtil.convertChar(customerInfoComInfo.getCustomerInfoname(tmpuserid)); + } + + // 查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 8:退回 9:被撤回 + int _statusCode = 0; + + if (preisremark != 8 && (tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + _statusCode = 3; + submitCount++; + if ("4".equals(nodetype) && preisremark == 0) { + _statusCode = 7; + } + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + _statusCode = 2; + viewCount++; + } else { + _statusCode = 1; + noviewCount++; + } + } else if ("s".equals(tmpisremark)) { + _statusCode = 4; + } else if ("r".equals(tmpisremark)) { + _statusCode = 6; + } else if ("c".equals(tmpisremark)) { + _statusCode = 5; + } else if (preisremark == 8 && viewtype.equals("-2") && tmpisremark.equals("2")) { + _statusCode = 2; + viewCount++; + } + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery("select operatetype from workflow_currentoperator where id=?", tmpcurrid); + if (recordSet.next()) { + int operatetype = recordSet.getInt(1); + if (operatetype == 3) {//退回 + _statusCode = 8; + } else if (operatetype == 4) {//被撤回 + _statusCode = 9; + } + } + + + listcount++; + if ("view".equals(desremark)) {//3:已查看 + if (processuser.equals(tmpuserid) && ("2".equals(tmpisremark) || "4".equals(tmpisremark))) { + listcount--; + } + } + String _receivedate = ""; + String _operatedate = ""; + String _intervel = ""; + + if (!tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + _receivedate = Util.toScreen(tmpreceivedate, user.getLanguage()) + " " + Util.toScreen(tmpreceivetime, user.getLanguage()); + } + _operatedate = Util.toScreen(tmpreceivedate, user.getLanguage()) + " " + Util.toScreen(tmpreceivetime, user.getLanguage()); + + _intervel = Util.toScreen(tmpIntervel, user.getLanguage()); + + _statusmap.put("statuscode", String.valueOf(_statusCode)); + _statusmap.put("operator", _statususername); + _statusmap.put("receivedate", _receivedate); + _statusmap.put("operatedate", _operatedate); + _statusmap.put("intervel", _intervel); + _statusmap.put("operatorid", _operatorid); + _statusmap.put("operatortype", _operatortype); + _statusmap.put("beagentid", _beagentid); + _statusmap.put("beagentname", _beagentname); + _statusmap.put("nodetype", nodetype); + + //所有节点 + nodeallstatuslist.add(_statusmap); + //查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + nodesubmitstatuslist.add(_statusmap); + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + nodeviewstatuslist.add(_statusmap); + } else if (viewtype.equals("0")) { + nodenoviewstatuslist.add(_statusmap); + } + } + + if ((!tmpisremark.equals("2") && !tmpisremark.equals("4")) || (tmpisremark.equals("4") && viewtype.equals("0"))) { + if (!tmpisremark.equals("s") && !tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + nodenosubmitstatuslist.add(_statusmap); + } + } + } + //--已提交、已查看、未查看 + all_nodemap_in.put("submitCount", submitCount);//--已提交 + all_nodemap_in.put("viewCount", viewCount);//--已查看 + all_nodemap_in.put("noviewCount", noviewCount);//--未查看 + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.put("listcount", listcount); + result.putAll(submitstatusmap); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.put("listcount", listcount); + result.putAll(nosubmitstatusmap); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.put("listcount", listcount); + result.putAll(viewstatusmap); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.put("listcount", listcount); + result.putAll(noviewstatusmap); + } else { + //所有节点信息 + all_nodemap_in.put("listcount", listcount); + result.putAll(allstatusmap); + } + lastNodeId = fnodeid; + } +// if(maxid == currentMaxId){ +// isfinish = 1; +// } + putpara.put("nodeindex", index + ""); + putpara.put("currentMaxId", currentMaxId + ""); + putpara.put("currentMinId", currentMinId + ""); + putpara.put("currentId", currentId + "_" + currentId2); + putpara.put("lastNodeId", lastNodeId + ""); + putpara.put("viewlogids", viewlogids + ""); + putpara.put("requestName", requestName); + result.put("parameter", putpara); + result.put("otherTime", new Date().getTime() - date1); + result.put("requestName", requestName); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + //创建文件夹 + public File crFile(String pathName) { + // bean.writeLog("创建文件夹==="+pathName); + File file = new File(pathName); + try { + // bean.writeLog("创建文件夹==="+file.exists()); + if (!file.exists()) { + file.mkdir(); + } + } catch (Exception E) { + // bean.writeLog("Exception"+E.getMessage()); + } + return file; + } + + public void writeToTxt(String path, String title, String content, Boolean append) { + try { + /* 写入Txt文件 */ + File mkdirsName = new File(path); + // 相对路径 + if (!mkdirsName.exists()) { + mkdirsName.mkdirs(); + } + File writename = new File(path + "/" + title + ".txt"); + // 存在即根据操作系统添加换行符 + if (!writename.exists() && append == true) { + // 创建新文件 + writename.createNewFile(); + } else if ("del".equals(content) && append == false) { + writename.delete(); + return; + } else if (!writename.exists() && append == false) { + writename.createNewFile(); + } else { + String osName = System.getProperties().getProperty("os.name"); + System.out.println(osName); + if ("Linux".equals(osName)) { + content = "\r" + content; + } else { + content = "\r\n" + content; + } + } + // 如果是在原有基础上写入则append属性为true,默认为false + BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(writename, append), StandardCharsets.UTF_8)); + // 写入TXT + out.write(content); + // 把缓存区内容压入文件 + out.flush(); + // 最后记得关闭文件 + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + private Date getDate() { + Date date = new Date(); + // if (day != null) { + // try { + // date = new SimpleDateFormat("yyyyMMdd").parse(day); + // } catch (ParseException e) { + // // writeLog("时间格式错误,重新发送指定日期失败"); + // e.printStackTrace(); + // } + // } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + //把日期往后增加一天.整数往后推,负数往前移动(1:表示明天、-1:表示昨天,0:表示今天) + calendar.add(Calendar.DATE, -1); + date = calendar.getTime(); + return date; + } + + /** + * @param TemplatePath 模版存放目录 + * @param TemplateName 模版名 + * @param root 填充的数据 + * @param GenerateFilename 生成文件名 + * @throws Exception + */ + public static String generate(String TemplatePath, String TemplateName, Map root, String GenerateFilename) throws Exception { + Configuration cfg = new Configuration(); + //指定模板文件的来源目录 + cfg.setDirectoryForTemplateLoading(new File(TemplatePath)); + cfg.setDefaultEncoding("UTF-8"); + //设置错误的显示方式(日志) + //在生产系统中:TemplateExceptionHandler.RETHROW_HANDLER 默认值 + //在开发HTML模板期间:TemplateExceptionHandler.HTML_DEBUG_HANDLER + //在开发非HTML模板期间:TemplateExceptionHandler.DEBUG_HANDLER + cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + + + //获取模板文件 + Template temp = cfg.getTemplate(TemplateName); + //合并模板和数据模型 + // File file = new File(TemplatePath + "new-built"); + //如果文件夹不存在,则创建文件夹 + // if (!file.exists()) { + // //file.mkdirs();//多级目录 + // file.mkdir();//只创建一级目录 + // } + //Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(TemplatePath + "new-built/" + GenerateFilename)));//输出文件 + // FileWriter out = new FileWriter(TemplatePath + "new-built/" + GenerateFilename); + //Writer out = new OutputStreamWriter(System.out);//输出控制台 + //StringWriter out = new StringWriter();//输出为字符串,可作为接口动态返回 + File file = new File(GenerateFilename); + File parentDir = file.getParentFile(); + + // 检查父目录是否存在 + if (!parentDir.exists()) { + // 父目录不存在,创建所有必需的父目录 + boolean dirsCreated = parentDir.mkdirs(); + if (dirsCreated) { + System.out.println("所有必需的父目录已创建."); + } else { + System.out.println("无法创建目录,请检查权限或路径是否正确."); + } + } else { + System.out.println("父目录已存在,无需创建."); + } + + FileOutputStream fos = new FileOutputStream(GenerateFilename); + Writer out = new OutputStreamWriter(fos, StandardCharsets.UTF_8); + temp.process(root, out); + out.flush();//可不手动调用 + return GenerateFilename; + } + + public static void main(String[] args) { + String s = "25441,45465,545"; + System.out.println(); + String[] ss = s.split(","); + for (String s1 : ss) { + System.out.println(s1); + } + } +} diff --git a/com/engine/custom/archives/service/impl/HtmlToPdfServiceCusImpl.java b/com/engine/custom/archives/service/impl/HtmlToPdfServiceCusImpl.java new file mode 100644 index 0000000..364ad5d --- /dev/null +++ b/com/engine/custom/archives/service/impl/HtmlToPdfServiceCusImpl.java @@ -0,0 +1,226 @@ +package com.engine.custom.archives.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.custom.archives.service.HtmlToPdfServiceCus; +import com.engine.custom.archives.workflow.cmd.requestLog.LoadRequestLogDataCusCmd; +import com.engine.workflow.biz.RequestLogBiz; +import com.engine.workflow.biz.requestForm.LayoutInfoBiz; +import com.engine.workflow.cmd.requestForm.*; +import com.engine.workflow.entity.requestForm.TableInfo; + +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.workflow.request.RequestManagerForTipsinfo; +import weaver.workflow.request.WFLinkInfo; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class HtmlToPdfServiceCusImpl extends Service implements HtmlToPdfServiceCus { + @Override + public Map getHtml(Map reqpParams, User user) { + return null; + } + + @Override + public Map getFormDatas(Map reqpParams) { + Map apidatas = new HashMap(); + Map result =new HashMap(); + String requestid = Util.null2String(reqpParams.get("requestid")); + String modeid = Util.null2String(reqpParams.get("modeid")); + //只需要转换html + int onlyHtml = Util.getIntValue(Util.null2String(reqpParams.get("onlyHtml")),0); + //用wktohtml转换 + int useWk = Util.getIntValue(Util.null2String(reqpParams.get("useWk")),0); + int useItext7 = Util.getIntValue(Util.null2String(reqpParams.get("useItext7")),0); + //底部签字意见列表显示的数量 + int pageSize = Util.getIntValue(Util.null2String(reqpParams.get("pageSize")),100); + //pdf或html目录 + String path = Util.null2String(reqpParams.get("path")); + String filename = Util.null2String(reqpParams.get("filename")); + int isTest = Util.getIntValue(Util.null2String(reqpParams.get("isTest"))); + int keepsign = Util.getIntValue(Util.null2String(reqpParams.get("keepsign"))); + boolean onlinehtml = reqpParams.containsKey("onlinehtml") && (boolean) reqpParams.get("onlinehtml"); + + Map requestMap = new HashMap<>(); + requestMap.put("requestid",requestid); + requestMap.put("modeid",modeid); + requestMap.put("limitauth",Util.null2String(reqpParams.get("limitauth"))); + requestMap.put("forceNoPaging",1); //明细强制不分页 + new BaseBean().writeLog("HtmltoPdfServiceimpl ---requestid:"+requestid+"-----modeid:"+modeid); + + long start2 = System.currentTimeMillis(); + //第一步:获取基础信息参数 + Map params = commandExecutor.execute(new GetPdfParamsCmd(requestMap,user)); + apidatas.put("params",params); + params.put("onlyHtml",onlyHtml); + params.put("useWk",useWk); + params.put("useItext7",useItext7); + params.put("path",path); + params.put("filename",filename); + params.put("isTest",isTest); + params.put("keepsign",keepsign); + params.put("onlinehtml",onlinehtml); + + + int ismode = Util.getIntValue(Util.null2String(params.get("ismode")), 0); + int layoutversion = Util.getIntValue(Util.null2String(params.get("layoutversion")), 0); + + //生成普通模式模板布局信息 + Map commonLayout = new HashMap(); + if (ismode == 0) { + commonLayout = commandExecutor.execute(new GenerateCommonLayoutCmd(params, user)); + } + + //加载表单信息,包括字段信息、明细信息等 + Map forminfo = commandExecutor.execute(new FormInfoCmd(requestMap, user, params, commonLayout)); + apidatas.putAll(forminfo); + //联动配置 + apidatas.put("linkageCfg", commandExecutor.execute(new LinkageCfgCmd(params,user))); + //加载主表数据 + Map maindata = commandExecutor.execute(new FormDataCmd(requestMap, user, params, (Map) forminfo.get("tableInfo"))); + apidatas.put("maindata", maindata.get("datas")); + + //明细表数据 + Map tableinfomap = (Map)forminfo.get("tableInfo"); + List detailmark = new ArrayList (); + for (String key:tableinfomap.keySet()){ + if (key.contains("detail_")){ + detailmark.add(key); + } + } + if (detailmark.size()>0){ + String isprint = Util.null2String(params.get("isprint")); + requestMap.put("reqParams",JSON.toJSONString(params)); + requestMap.put("ismode",ismode); + requestMap.put("ismonitor","0"); + requestMap.put("isprint",isprint); + requestMap.put("modeid",modeid); + requestMap.put("detailmark", StringUtils.join(detailmark.toArray(), ",")); + Map detaildata = commandExecutor.execute(new FormDataCmd(requestMap, user)); + apidatas.put("detaildata", detaildata); + } + + + + //第五步:模板布局 + if (ismode == 0 || (ismode == 2 && layoutversion == 2)) { + String layoutStr = ""; + if (ismode == 0) { //普通模式 + layoutStr = Util.null2String(commonLayout.get("layoutStr")); + } else if (ismode == 2) { //html模式 + int layoutid = Util.getIntValue(Util.null2String(params.get("modeid")), 0); + layoutStr = new LayoutInfoBiz().getLayoutStr(layoutid); + } + apidatas.put("datajson",layoutStr); + }else { + result.put("unsupported",""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005682,weaver.general.ThreadVarLanguage.getLang())+""); + return result; + } + RecordSet recordSet = new RecordSet(); + + //获取签字意见可查看的nodeid + String viewLogIdstr = RequestLogBiz.getViewLogIds(Util.getIntValue(requestid),user.getUID(),(int)params.get("workflowid")); + String src = Util.null2String(reqpParams.get("src")); + if ("intervenor".equals(src) ) { + List canViewIds = new ArrayList (); + String tempNodeId = "-1"; + recordSet.executeSql("select nodeid from workflow_flownode where workflowid= " + params.get("workflowid") + " and exists(select 1 from workflow_nodebase where id=workflow_flownode.nodeid and (requestid is null or requestid=" + requestid + "))"); + while (recordSet.next()) { + tempNodeId = recordSet.getString("nodeid"); + if (!canViewIds.contains(tempNodeId)) { + canViewIds.add(tempNodeId); + } + } + viewLogIdstr = String.join(",", canViewIds); + } + //获取签字意见 + HttpServletRequest request = null; + int workflowid = (int) params.get("workflowid"); + int nodeid =(int) params.get("nodeid"); + String isFormSignature = ""; + recordSet.executeSql("select isFormSignature from workflow_flownode where workflowId=" + workflowid + " and nodeId=" + nodeid); + if (recordSet.next()) { + isFormSignature = Util.null2String(recordSet.getString("isFormSignature")); + } + boolean isOldWf =false; + RequestManagerForTipsinfo requestManagerForTipsinfo = new RequestManagerForTipsinfo(); + isOldWf = requestManagerForTipsinfo.isOldOrNewFlag(Util.getIntValue(requestid)); + String maxrequestlogid = ""; + params.put("requestid",requestid); + params.put("viewLogIds",viewLogIdstr); + params.put("creatorNodeId",WFLinkInfo.getCreatNodeId(workflowid+"")); + params.put("isHideInput","1"); + params.put("isFormSignature",isFormSignature); + params.put("pgnumber",1); + params.put("wfsignlddtcnt",pageSize); //底部签字意见一页的数量 + params.put("orderbytype","desc"); + params.put("isOldWf",isOldWf); + params.put("maxrequestlogid",maxrequestlogid); + params.put("isSubrequest",reqpParams.get("isSubrequest")); + Map requestlog =commandExecutor.execute(new LoadRequestLogDataCusCmd(request, user, params,"topdf")); + apidatas.put("requestLog",requestlog); + new BaseBean().writeLog(JSONObject.toJSONString(apidatas)); + long end2 = System.currentTimeMillis()-start2; + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("loadform接口+底部签字意见+detail耗时:"+end2); + + //是否开启水印 + apidatas.put("isOpenWaterMark",reqpParams.get("isOpenWaterMark")); + + //转html/pdf + Map html = commandExecutor.execute(new HtmlToPdfCmd(apidatas,user)); + + result.putAll(html); + long end = System.currentTimeMillis()-start2; + baseBean.writeLog("【pdf】 总耗时:"+end); + return html; + + } + + @Override + public Map getFormInfoForWM(Map reqpParams) { + Map apidatas = new HashMap(); + Map result =new HashMap(); + String requestid = Util.null2String(reqpParams.get("requestid")); + String modeid = Util.null2String(reqpParams.get("modeid")); + + Map requestMap = new HashMap<>(); + requestMap.put("requestid",requestid); + requestMap.put("modeid",modeid); + requestMap.put("limitauth",Util.null2String(reqpParams.get("limitauth"))); + requestMap.put("forceNoPaging",1); //明细强制不分页 + + long start2 = System.currentTimeMillis(); + //第一步:获取基础信息参数 + Map params = commandExecutor.execute(new GetPdfParamsCmd(requestMap,user)); + apidatas.put("params",params); + + int ismode = Util.getIntValue(Util.null2String(params.get("ismode")), 0); + int layoutversion = Util.getIntValue(Util.null2String(params.get("layoutversion")), 0); + + //生成普通模式模板布局信息 + Map commonLayout = new HashMap(); + if (ismode == 0) { + commonLayout = commandExecutor.execute(new GenerateCommonLayoutCmd(params, user)); + } + + //加载表单信息,包括字段信息、明细信息等 + Map forminfo = commandExecutor.execute(new FormInfoCmd(requestMap, user, params, commonLayout)); + apidatas.putAll(forminfo); + + //加载主表数据 + Map maindata = commandExecutor.execute(new FormDataCmd(requestMap, user, params, (Map) forminfo.get("tableInfo"))); + apidatas.put("maindata", maindata.get("datas")); + return apidatas; + } + +} diff --git a/com/engine/custom/archives/workflow/biz/requestForm/RequestDocPropManagerCus.java b/com/engine/custom/archives/workflow/biz/requestForm/RequestDocPropManagerCus.java new file mode 100644 index 0000000..96829d1 --- /dev/null +++ b/com/engine/custom/archives/workflow/biz/requestForm/RequestDocPropManagerCus.java @@ -0,0 +1,571 @@ +/* +* Created on 2008-06-13 +* Copyright (c) 2001-2008 泛微软件 +* 泛微协同商务系统,版权所有。 +* +*/ + +package com.engine.custom.archives.workflow.biz.requestForm; + +import com.engine.workflow.biz.requestForm.WfToDocBiz; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.workflow.request.RequestManager; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.util.HashMap; +import java.util.Map; + +/** + + * Description: 更新文档属性页基本类 + * @author 方观生 + * @date 2008-6-13 + * 备注:该类目前只考虑表单而没有考虑单据。 + */ + +public class RequestDocPropManagerCus extends BaseBean { + + + //private RecordSet rs;//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + //private RecordSet rsTwo;//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + private char flag = Util.getSeparator(); + + private WorkflowComInfo workflowComInfo; + + private WfToDocBizCus wfToDocBiz; + /** + * 构造函数 + */ + public RequestDocPropManagerCus() { + + //rs = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + //rsTwo = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + + try { + workflowComInfo=new WorkflowComInfo(); + } catch (Exception ex) { + } + } + + public RequestDocPropManagerCus(WfToDocBizCus wfToDocBiz) { + + this.wfToDocBiz = wfToDocBiz; + try { + workflowComInfo=new WorkflowComInfo(); + } catch (Exception ex) { + } + } + /** + * 更改文档属性页数据。 + * + * @param requestManager RequestManager对象 + * + * @param docIds 文档id + * + */ + public void changeDocProp(RequestManager requestManager,String docIds) throws Exception{ + RecordSet rs = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + RecordSet rsTwo = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + + int requestId=requestManager.getRequestid(); + int workflowId=requestManager.getWorkflowid(); + int creater=requestManager.getCreater(); + + //创建人分部 + int subCompanyId = 0; + try { + ResourceComInfo resourceComInfo = new ResourceComInfo(); + subCompanyId = Util.getIntValue(resourceComInfo.getSubCompanyID("" + creater), 0); + } catch (Exception ex) { + ex.printStackTrace(); + } + + //安全性检查 + if(requestId<=0 + ||workflowId<=0 + ||docIds==null + ||docIds.trim().equals("") + ){ + return ; + } + + String requestName=Util.null2String(requestManager.getRequestname()); +// //2、根据workflowId获取创建文档字段、确定文件存放目录的字段 +// RequestDoc requestDoc=new RequestDoc(); +// ArrayList flowDoc=requestDoc.getDocFiled(""+workflowId); +// if(flowDoc==null||flowDoc.size()==0){ +// return ; +// } +//writeLog("2"); +// int flowDocField=Util.getIntValue((String)flowDoc.get(1),-1);//创建文档字段 +// int flowDocCatField=Util.getIntValue((String)flowDoc.get(3),-1);// 确定文件存放目录的字段 +// //创建文档字段必须选择 +// if(flowDocField<=0){ +// return ; +// } + + int formId=Util.getIntValue(workflowComInfo.getFormId(""+workflowId),0); + String isBill=Util.null2String(workflowComInfo.getIsBill(""+workflowId)); + if(!isBill.equals("1")){ + isBill="0"; + } + +// //3、由创建文档字段、确定文件存放目录的字段获取文档id,确定文件存放目录的字段值。 +// String flowDocFieldName=null; +// String flowDocCatFieldName=null; +// +// String tableName="workflow_form"; +// String sql=null; +// if(isBill.equals("1")){ +// rs.executeSql("select tablename from workflow_bill where id = " + formId); // 查询工作流单据表的信息 +// if (rs.next()){ +// tableName = Util.null2String(rs.getString("tablename")); // 获得单据的主表 +// } +// sql="select a.fieldname from workflow_billfield a where a.id="+flowDocField ; +// }else{ +// sql="select a.fieldname from workflow_formdict a where a.id="+flowDocField ; +// } +// rs.executeSql(sql); +// if(rs.next()){ +// flowDocFieldName=Util.null2String(rs.getString(1)); +// } +// +// if(isBill.equals("1")){ +// sql="select a.fieldname from workflow_billfield a where a.id="+flowDocCatField ; +// }else{ +// sql="select a.fieldname from workflow_formdict a where a.id="+flowDocCatField ; +// } +// rs.executeSql(sql); +// if(rs.next()){ +// flowDocCatFieldName=Util.null2String(rs.getString(1)); +// } +// +// int docId=0; +// int selectItemId=-1; +// if(flowDocCatFieldName!=null&&!flowDocCatFieldName.trim().equals("")){ +// sql="select "+flowDocFieldName+","+flowDocCatFieldName+" from "+tableName+" where requestId="+requestId; +// }else{ +// sql="select "+flowDocFieldName+",-1 from "+tableName+" where requestId="+requestId; +// } +// rs.executeSql(sql); +// if(rs.next()){ +// docId=Util.getIntValue(rs.getString(1),-1); +// selectItemId=Util.getIntValue(rs.getString(2),-1); +// } +// if(docId<=0||(","+docIds+",").indexOf(","+docId+",")<0){ +// return ; +// } + //存文文档优化-根据选择框值设置存放目录 + String wfdocpathfieldvalue = ""; //表单中存放目录的选择框字段值 + String wfdocpathtype = ""; + String wfdocpathfieldid = ""; + String isAccordToSubCom = ""; + if (wfToDocBiz!=null){ + wfdocpathtype = Util.null2String(wfToDocBiz.getWfdocpathtype()); + if (wfdocpathtype.equals("2")){ + wfdocpathfieldvalue = Util.null2String(wfToDocBiz.getWfdocpathfieldvalue()); + wfdocpathfieldid = Util.null2String(wfToDocBiz.getWfdocpathfieldid()); + isAccordToSubCom = Util.null2String(wfToDocBiz.getIsAccordToSubCom()); + } + } + + //4、根据文档id获取文档所在的子目录 + int docId=Util.getIntValue(docIds,0); + int secCategoryId=-1; + rs.executeSql("select secCategory from DocDetail where id="+docId); + if(rs.next()){ + secCategoryId=Util.getIntValue(rs.getString("secCategory"),-1); + } + if(secCategoryId<=0){ + return ; + } + + //5、根据workflowId、selectItemId、secCategoryId获取docPropId + int docPropId=-1; + if (wfdocpathtype.equals("2")&&!wfdocpathfieldvalue.equals("")){ + String sql = "select id from WorkflowToDocProp where workflowId=? and secCategoryId= ? and selectitemid =? and selectfieldid =? "; + if(isAccordToSubCom.equals("2")) + sql = sql+ " objid="+subCompanyId; + rs.executeQuery(sql,workflowId,secCategoryId,wfdocpathfieldvalue,wfdocpathfieldid); + if(rs.next()){ + docPropId=Util.getIntValue(rs.getString("id"),-1); + } + }else { + rs.executeSql("select id from WorkflowToDocProp where workflowId="+workflowId+" and secCategoryId="+secCategoryId +" and selectitemid is null"); + if(rs.next()){ + docPropId=Util.getIntValue(rs.getString("id"),-1); + } + } + + + + if(docPropId<=0){ + return ; + } + + //6、根据docPropId获取WorkflowToDocPropDetail中数据,workflowFieldId要求大于0 + int docPropFieldId=-1; + int workflowFieldId=-1; + String workflowFieldName=null; + String strDocPropFieldId=""; + String strWorkflowFieldName=""; + + Map workflowFieldIdByDocPropFieldIdMap=new HashMap(); + rs.executeSql("select docPropFieldId,workflowFieldId from WorkflowToDocPropDetail where docPropId="+docPropId+" and (workflowFieldId>=0 or workflowFieldId=-3 or workflowFieldId=-99) order by id asc"); + while(rs.next()){ + docPropFieldId=Util.getIntValue(rs.getString("docPropFieldId"),-1); + workflowFieldId=Util.getIntValue(rs.getString("workflowFieldId"),-1); + workflowFieldIdByDocPropFieldIdMap.put(""+docPropFieldId,""+workflowFieldId); + strDocPropFieldId+=","+docPropFieldId; + } + + if(strDocPropFieldId.equals("")){ + return ; + } + strDocPropFieldId=strDocPropFieldId.substring(1); + + Map mainFieldValueMap=this.getValueOfField(requestManager,workflowId); + String workflowFieldValue=null; + String workflowFieldShowName=null; + + //7、获得DocDetail、cus_fielddata的更新语句。 + boolean isEditCustomData=false; + rs.executeSql("select id from cus_fielddata where scope='DocCustomFieldBySecCategory' and scopeid=" + secCategoryId + + " and id=" + docId); + if (rs.next()) { + isEditCustomData=true; + } + + String docDetailSql="update DocDetail set "; + String docDetailSetStr=""; + + String cusFieldDataSql=null; + if(isEditCustomData){ + cusFieldDataSql="update cus_fielddata set "; + }else{ + cusFieldDataSql="insert into cus_fielddata"; + } + String cusFieldDataSetStr=""; + + String cusFieldDataNameStr=""; + String cusFieldDataValueStr=""; + + int docPropertyId=-1; + int docPropertyType=-1; + int fieldId=-1; + String fieldDbType= null; + + String fieldHtmlType=null; + String type=null; + Map cusFieldValueMap=new HashMap(); + int fieldLength=0; + + rs.executeSql("select id as fieldId,fieldDbType,fieldHtmlType,type from cus_formdict"); + while(rs.next()){ + fieldId=Util.getIntValue(rs.getString("fieldId"),-1); + fieldDbType=Util.null2String(rs.getString("fieldDbType")); + fieldHtmlType=Util.null2String(rs.getString("fieldHtmlType")); + type=Util.null2String(rs.getString("type")); + + cusFieldValueMap.put("fieldDbType"+fieldId,""+fieldDbType); + cusFieldValueMap.put("fieldHtmlType"+fieldId,""+fieldHtmlType); + cusFieldValueMap.put("type"+fieldId,""+type); + } + + StringBuffer sb=new StringBuffer(); + + sb.append(" select id as docPropertyId,type as docPropertyType,fieldId ") + .append(" from DocSecCategoryDocProperty") + .append(" where secCategoryId=").append(secCategoryId) + .append(" and id in(").append(strDocPropFieldId).append(") ") + .append(" order by viewIndex ") + ; + rs.executeSql(sb.toString()); + while(rs.next()){ + docPropertyId=Util.getIntValue(rs.getString("docPropertyId"),-1); + docPropertyType=Util.getIntValue(rs.getString("docPropertyType"),-1); + fieldId=Util.getIntValue(rs.getString("fieldId"),-1); + fieldDbType=Util.null2String((String)cusFieldValueMap.get("fieldDbType"+fieldId)); + fieldHtmlType=Util.null2String((String)cusFieldValueMap.get("fieldHtmlType"+fieldId)); + + workflowFieldId=Util.getIntValue((String)workflowFieldIdByDocPropFieldIdMap.get(""+docPropertyId),0); + if (workflowFieldId==-99)//requestid + workflowFieldValue = requestId+""; + else + workflowFieldValue=Util.null2String((String)mainFieldValueMap.get("field"+workflowFieldId)); + + if(docPropertyType==1&&docDetailSetStr.indexOf(",docSubject=")<0&&!workflowFieldValue.trim().equals("")){//文档标题,docSubject,varchar(200) + docDetailSetStr += ",docSubject='"+interceptString(workflowFieldValue,200)+"'"; + }else if(docPropertyType==2&&docDetailSetStr.indexOf(",docCode=")<0){//文档编号,docCode,varchar(200) + docDetailSetStr += ",docCode='"+interceptString(workflowFieldValue,200)+"'"; + }else if(docPropertyType==3&&docDetailSetStr.indexOf(",docPublishType=")<0){//发布,docPublishType,char(1) + docDetailSetStr += ",docPublishType='"+interceptString(workflowFieldValue,1)+"'"; + }else if(docPropertyType==4&&docDetailSetStr.indexOf(",docedition=")<0){//文档版本,docedition,int + docDetailSetStr += ",docedition="+Util.getIntValue(workflowFieldValue,-1); + }else if(docPropertyType==5&&docDetailSetStr.indexOf(",docStatus=")<0){//文档状态,docStatus,int + docDetailSetStr += ",docStatus="+Util.getIntValue(workflowFieldValue,-1); + }else if(docPropertyType==9&&docDetailSetStr.indexOf(",docDepartmentId=")<0){//部门,docDepartmentId,int + docDetailSetStr += ",docDepartmentId="+Util.getIntValue(workflowFieldValue,-1); + }else if(docPropertyType==12&&docDetailSetStr.indexOf(",keyword=")<0){//关键字,keyword,varchar(255) + docDetailSetStr += ",keyword='"+interceptString(workflowFieldValue,255)+"'"; + }else if(docPropertyType==19&&docDetailSetStr.indexOf(",mainDoc=")<0){//主文档,mainDoc,int + docDetailSetStr += ",mainDoc="+Util.getIntValue(workflowFieldValue,docId); + }else if(docPropertyType==21&&docDetailSetStr.indexOf(",ownerId=")<0){//文档所有者,ownerId,int + docDetailSetStr += ",ownerId="+Util.getIntValue(workflowFieldValue,-1); + }else if(docPropertyType==22&&docDetailSetStr.indexOf(",invalidationDate=")<0){//失效时间,invalidationDate,char(10) + docDetailSetStr += ",invalidationDate='"+interceptString(workflowFieldValue,10)+"'"; + }else if(docPropertyType==25&&docDetailSetStr.indexOf(",canPrintedNum=")<0){//可打印份数,canPrintedNum,int + docDetailSetStr += ",canPrintedNum="+Util.getIntValue(workflowFieldValue,0); + }else if(docPropertyType==0){//自定义字段 + String cusfieldname=""; + rsTwo.executeSql("select fieldname from cus_formdict where id="+fieldId); + if(rsTwo.next()){ + cusfieldname=Util.null2String(rsTwo.getString("fieldname")); + } + if(isEditCustomData&&cusFieldDataSetStr.indexOf(",field" + fieldId + "=")<0){ + cusFieldDataSetStr += ",field" + fieldId + "="; + if (fieldDbType.startsWith("text") || fieldDbType.startsWith("char") + || fieldDbType.startsWith("varchar")|| fieldDbType.startsWith("browser")) { + if(fieldDbType.indexOf("(")>=0&&fieldDbType.indexOf(")")>fieldDbType.indexOf("(")+1){ + fieldLength=Util.getIntValue(fieldDbType.substring(fieldDbType.indexOf("(")+1,fieldDbType.indexOf(")")),0); + } + if(fieldLength>0){ + cusFieldDataSetStr += "'" + interceptString(workflowFieldValue,fieldLength) + "'"; + }else{ + cusFieldDataSetStr += "'" + workflowFieldValue + "'"; + } + } else { + if(fieldHtmlType.equals("5")){ + workflowFieldShowName=(String)mainFieldValueMap.get("fieldShowName"+workflowFieldId); + workflowFieldValue=this.getNewSelectValue(workflowFieldShowName,workflowFieldValue,fieldId); + } + if(fieldHtmlType.equals("1")){ + cusFieldDataSetStr += Util.getDoubleValue(workflowFieldValue,0); + }else{ + cusFieldDataSetStr += Util.getIntValue(workflowFieldValue,0); + } + } + }else if((cusFieldDataNameStr+",").indexOf("," + cusfieldname+",")<0){ + cusFieldDataNameStr += "," + cusfieldname; + if (fieldDbType.startsWith("text") || fieldDbType.startsWith("char") + || fieldDbType.startsWith("varchar")|| fieldDbType.startsWith("browser")) { + if(fieldDbType.indexOf("(")>=0&&fieldDbType.indexOf(")")>fieldDbType.indexOf("(")+1){ + fieldLength=Util.getIntValue(fieldDbType.substring(fieldDbType.indexOf("(")+1,fieldDbType.indexOf(")")),0); + } + if(fieldLength>0){ + cusFieldDataValueStr += ",'" + interceptString(workflowFieldValue,fieldLength) + "'"; + }else{ + cusFieldDataValueStr += ",'" + workflowFieldValue + "'"; + } + } else { + if(fieldHtmlType.equals("5")){ + workflowFieldShowName=(String)mainFieldValueMap.get("fieldShowName"+workflowFieldId); + workflowFieldValue=this.getNewSelectValue(workflowFieldShowName,workflowFieldValue,fieldId); + } + if(fieldHtmlType.equals("1")){ + cusFieldDataValueStr += "," +Util.getDoubleValue(workflowFieldValue,0); + }else{ + cusFieldDataValueStr += "," +Util.getIntValue(workflowFieldValue,0); + } + + } + } + } + } + + if (!docDetailSetStr.equals("")) { + docDetailSetStr = docDetailSetStr.substring(1); + docDetailSql += docDetailSetStr + " where id=" + docId; +//writeLog("docDetailSql:"+docDetailSql); + rs.executeSql(docDetailSql); + } + + if(isEditCustomData){ + if (!cusFieldDataSetStr.equals("")) { + cusFieldDataSetStr = cusFieldDataSetStr.substring(1); + cusFieldDataSql += cusFieldDataSetStr + " where scope='DocCustomFieldBySecCategory' and scopeid=" + secCategoryId + " and id=" + docId; + rs.executeSql(cusFieldDataSql); + } + }else{ + if (!cusFieldDataNameStr.equals("")) { + cusFieldDataNameStr = cusFieldDataNameStr.substring(1); + cusFieldDataValueStr = cusFieldDataValueStr.substring(1); + + cusFieldDataSql += "(scope,scopeid,id," + cusFieldDataNameStr + ") values('DocCustomFieldBySecCategory'," + secCategoryId + "," + docId + + "," + cusFieldDataValueStr + ")"; + rs.executeSql(cusFieldDataSql); + } + } + + } + + /** + * 截取不大于指定字节长度的字符串 + * @param initString 初始字符串 + * @param byteLength 指定字节长度 + * @return String 不大于指定字节长度的字符串 + */ + private static String interceptString(String initString,int byteLength) { + try{ + + int counterOfDoubleByte = 0; + byte[] b = initString.getBytes("UTF-8"); + if(b.length <= byteLength) + return initString; + for(int i = 0; i < byteLength; i++){ + if(b[i] < 0) + counterOfDoubleByte++; + } + + if(counterOfDoubleByte % 2 == 0) + return new String(b, 0, byteLength, "UTF-8"); + else + return new String(b, 0, byteLength - 1, "UTF-8"); + + }catch(Exception ex){ + return ""; + } + } + + /** + * 获得指定工作流程某个请求所有主字段的值。 + * + * @param mainRequest 主请求 + * @param workflowId 工作流id + * + * @return Map 关键字为 field加字段id 值为字段值、 + * 关键字为 fieldHtmlType加字段id 值为表现形式、 + * 关键字为 type加字段id 值为字段类型 + * 关键字为 fieldShowName加字段id 职位字段显示名称 + */ + private Map getValueOfField(RequestManager mainRequest,int workflowId){ + RecordSet rs = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + RecordSet rsTwo = new RecordSet();//277481: [90]集成中心-解决代码质量问题修复--操作数据库的对象不能作为成员变量 + + Map mainFieldValueMap=new HashMap(); + + //获取字段值 + //根据主流程的id获得相关信息 + String formId=""; + String isBill=""; + rs.executeSql(" select formId,isBill from workflow_base where id="+workflowId); + if(rs.next()){ + formId=rs.getString(1); + isBill=rs.getString(2); + } + if(!"1".equals(isBill)){ + isBill="0"; + } + int requestId=mainRequest.getRequestid(); + + mainFieldValueMap.put("field-2",""+requestId); + mainFieldValueMap.put("field-3",mainRequest.getRequestname()); + mainFieldValueMap.put("field-4",mainRequest.getRequestlevel()); + mainFieldValueMap.put("field-5",mainRequest.getMessageType()); + + //获得主流程人力资源相关字段的值和页面类型、详细类型 + String fieldId="";//字段id + String fieldName="";//字段名称 + String fieldValue="";//字段值 + String fieldHtmlType="";//页面类型 + String type="";//详细类型 + //String billId="0"; + String tableName="workflow_form"; + + Map tempmap=new HashMap(); + String fieldnames=""; + int cols=0; + String sql=""; + + if("0".equals(isBill)){//如果不为单据,即为表单 + sql="select b.id,b.fieldName,b.fieldHtmlType,b.type from workflow_formfield a,workflow_formdict b where a.fieldId=b.id and (a.isdetail<>'1' or a.isdetail is null) and a.formId="+formId; + }else{//否则为单据 + //rs.executeSql(" select tableName from workflow_bill where id="+billId); + rs.executeSql(" select tableName from workflow_bill where id="+formId); + if(rs.next()){ + tableName=Util.null2String(rs.getString("tableName")); + } + //sql="select id,fieldName,fieldHtmlType,type from workflow_billfield where (viewtype is null or viewtype<>1) and billId="+fieldId; + sql="select id,fieldName,fieldHtmlType,type from workflow_billfield where (viewtype is null or viewtype<>1) and billId="+formId; + } + rs.executeSql(sql); + while(rs.next()){ + fieldId=Util.null2String(rs.getString("id")); + fieldName=Util.null2String(rs.getString("fieldName")); + fieldHtmlType=Util.null2String(rs.getString("fieldHtmlType")); + type=Util.null2String(rs.getString("type")); + + if(!fieldName.equals("")){ + if(fieldnames.equals("")){ + fieldnames=fieldName; + }else{ + fieldnames+=","+fieldName; + } + tempmap.put("col"+cols,fieldId); + cols++; + } + + mainFieldValueMap.put("fieldHtmlType"+fieldId,fieldHtmlType); + mainFieldValueMap.put("type"+fieldId,type); + } + + if(fieldnames.equals("")||tableName.equals("")){ + return mainFieldValueMap; + } + + String fieldShowName=""; + + sql="select "+fieldnames+" from "+tableName+" where requestid= "+requestId; + rs.executeSql(sql); + while(rs.next()){ + for(int i=0;i 0){ + String importdate= TimeUtil.getCurrentDateString(); + String importtime=TimeUtil.getOnlyCurrentTimeString(); + DocTreeDocFieldComInfo ddfc = new DocTreeDocFieldComInfo(); + if(!ddfc.isHaveSameOne(strDummy,""+docid)) { + strSql="insert into DocDummyDetail(catelogid,docid,importdate,importtime) values ("+strDummy+","+docid+",'"+importdate+"','"+importtime+"')"; + rsDummyDoc.executeSql(strSql); + } + } + } + } + }catch(Exception ex) { + writeLog("添加文档信息至虚拟目录出错:" + ex); + } + + //更新文档密级 + if (HrmClassifiedProtectionBiz.isOpenClassification()) { + Map secInfo = new RequestSecLevelBiz().getSecInfoByRequestId(Util.getIntValue(requestid)); + String secLevel = Util.null2String(secInfo.get("secLevel")); + String secValidity = Util.null2String(secInfo.get("secValidity")); + new DocSecretLevelUtil().modifyDocSecretLevel(docid+"", secLevel, secValidity); + } + + // 添加文档共享信息 + DocManager DocManager = new DocManager(); + DocManager.setIsreply("0"); + DocManager.setId(docid); + DocManager.setSeccategory(seccategory); + DocManager.setUserid(docowner); + DocManager.setUsertype("1"); + try { + DocManager.AddShareInfo(); + } catch (Exception e) { + writeLog("添加文档共享信息出错:" + e); + } + try { + new DocViewer().setDocShareByDoc("" + docid); + } catch (Exception e) { + writeLog("添加文档共享信息出错:" + e); + } + return docid; + } + + /** + * 保存文档属性 + * @param docid + * @return + */ + public boolean saveDocProp(int docid, String requestid, RequestManager requestManager, WfToDocBizCus wfbiz){ + boolean success = true; + String docids = docid+""; + try{ + writeLog("saveDocProp:" + docid +" "+requestid); + RequestDocPropManagerCus requestDocPropManager=new RequestDocPropManagerCus(wfbiz); + requestDocPropManager.changeDocProp(requestManager,docids); + }catch (Exception e) { + success = false; + writeLog("RequestDocPropManagerCus Error:requestid="+requestid+"###docids="+docids); + writeLog(e); + } + writeLog("success:"+success); + return success; + + } +} diff --git a/com/engine/custom/archives/workflow/biz/requestForm/WfToDocBizCus.java b/com/engine/custom/archives/workflow/biz/requestForm/WfToDocBizCus.java new file mode 100644 index 0000000..43c24a4 --- /dev/null +++ b/com/engine/custom/archives/workflow/biz/requestForm/WfToDocBizCus.java @@ -0,0 +1,457 @@ +package com.engine.custom.archives.workflow.biz.requestForm; + + +import com.engine.common.util.ServiceUtil; +import com.engine.custom.archives.service.HtmlToPdfServiceCus; +import com.engine.custom.archives.service.impl.HtmlToPdfServiceCusImpl; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.entity.freeNode.FreeNodeEntity; + +import weaver.conn.RecordSet; +import weaver.docs.share.DocShareUtil; +import weaver.file.FileSecurityUtil; +import weaver.file.FileUpload; +import weaver.file.ImageFileManager; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.system.SystemComInfo; +import weaver.workflow.exceldesign.HtmlLayoutOperate; +import weaver.workflow.workflow.WorkflowConfigComInfo; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + + +public class WfToDocBizCus extends BaseBean { + + //底部签字意见列表显示数量 + private int pageSize =100; + //是否用wk转换 + private String useWk=""; + private int keepsign; + private User user; + private String docfiles; + Map pathMap; + private LinkedHashMap fileids; + + private boolean isOpenWaterMark; //是否生成水印 + private String useModeid ; + /* ---这些参数给到workflowtodoc获取 避免查多次数据库 -- start*/ + private String wfdocpathtype ="1"; + private String wfdocpath = ""; + private String wfdocpathfieldid = ""; + private String wfdocpathfieldvalue =""; + private String isAccordToSubCom = ""; + /* --- end ----*/ + + String OnlineHtmlMethod; //生成在线文档 + + private Map otherParamsMap; + + public Map getOtherParamsMap() { + return otherParamsMap; + } + + public void setOtherParamsMap(Map otherParamsMap) { + this.otherParamsMap = otherParamsMap; + } + + public void setOnlineHtmlMethod(String onlineHtmlMethod) { + OnlineHtmlMethod = onlineHtmlMethod; + } + + public Map getPathMap() { + return pathMap; + } + + public void setPathMap(Map pathMap) { + this.pathMap = pathMap; + } + + public String getWfdocpathtype() { + return wfdocpathtype; + } + + public void setWfdocpathtype(String wfdocpathtype) { + this.wfdocpathtype = wfdocpathtype; + } + + public String getWfdocpath() { + return wfdocpath; + } + + public void setWfdocpath(String wfdocpath) { + this.wfdocpath = wfdocpath; + } + + public String getWfdocpathfieldid() { + return wfdocpathfieldid; + } + + public void setWfdocpathfieldid(String wfdocpathfieldid) { + this.wfdocpathfieldid = wfdocpathfieldid; + } + + public String getWfdocpathfieldvalue() { + return wfdocpathfieldvalue; + } + + public void setWfdocpathfieldvalue(String wfdocpathfieldvalue) { + this.wfdocpathfieldvalue = wfdocpathfieldvalue; + } + + public String getIsAccordToSubCom() { + return isAccordToSubCom; + } + + public void setIsAccordToSubCom(String isAccordToSubCom) { + this.isAccordToSubCom = isAccordToSubCom; + } + + + + public WfToDocBizCus(User user, int pageSize, int keepsign, String docfiles){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + } + + public WfToDocBizCus(User user, int pageSize, int keepsign, String docfiles, String useModeid){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + this.useModeid=useModeid; + } + + public WfToDocBizCus(User user, int pageSize, int keepsign, String docfiles, String useModeid, boolean isOpenWaterMark){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + this.useModeid=useModeid; + this.isOpenWaterMark = isOpenWaterMark; + } + + + public WfToDocBizCus(){ + } + + + /* + * 生成html和pdf + */ + public void generatepdfandhtml(String requestid, String filename, String temppath, String src, int reqType){ + int onlyHtml =0; + if (docfiles.contains("2")&&!docfiles.contains("3")){ //只选了生成离线html 没选pdf + onlyHtml =1; + }else if (docfiles.contains("3")&&docfiles.contains("2")){ //选了pdf和html + onlyHtml =2; + }else if (docfiles.contains("3")&&!docfiles.contains("2")){ //只选了pdf + onlyHtml =0; + } + Map params = new HashMap<>(); + params.put("requestid",requestid); + params.put("onlyHtml", onlyHtml); + params.put("pageSize", pageSize); + params.put("path", temppath); + params.put("filename", filename); + params.put("keepsign", keepsign); + params.put("limitauth", "0"); + params.put("src",src); + params.put("modeid",useModeid); + params.put("isSubrequest",reqType == 1); + //是否使用wk,在config表中读配置 + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + useWk = Util.null2String(configComInfo.getValue("htmltopdf_usewk")); + new BaseBean().writeLog("jymjym……useWk ="+useWk); + //是否使用Itext7 + String useItext7 = Util.null2String(configComInfo.getValue("workflowtodoc_useitext7")); + params.put("useItext7", useItext7); + if (!"".equals(useWk)){ + params.put("useWk", useWk); + } + params.put("isOpenWaterMark",isOpenWaterMark); + + params.put("onlinehtml",OnlineHtmlMethod.equals("1")&&docfiles.contains("1")); //在线htmlE9 + + if (this.otherParamsMap!=null) + params.putAll(this.otherParamsMap); + + HtmlToPdfServiceCus htmlToPdfService = (HtmlToPdfServiceCus) ServiceUtil.getService(HtmlToPdfServiceCusImpl.class,user); + pathMap = (htmlToPdfService != null) ? htmlToPdfService.getFormDatas(params) : new HashMap<>(); + } + + public LinkedHashMap getfileids(String requestname, String filename,String temppath){ + int onlyHtml =0; + if (docfiles.contains("2")&&!docfiles.contains("3")){ //只选了生成离线html 没选pdf + onlyHtml =1; + }else if (docfiles.contains("3")&&docfiles.contains("2")){ //选了pdf和html + onlyHtml =2; + }else if (docfiles.contains("3")&&!docfiles.contains("2")){ //只选了pdf + onlyHtml =0; + } + String htmlname=""; + String truefilename =""; + + if (OnlineHtmlMethod.equals("1")&&docfiles.contains("1")){ //在线html + htmlname = temppath + Util.null2String(pathMap.get("onlinehtmlfilename")); + truefilename = requestname +"_online.html"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("online_html",fileid); + } + } + + if (docfiles.contains("2")){ //选了生成离线html + if(onlyHtml ==1){ //只选了生成离线html 没选pdf + htmlname = temppath + Util.null2String(pathMap.get("filename")); + }else if(onlyHtml ==2){ + htmlname = temppath + Util.null2String(pathMap.get("htmlfilename")); + } + truefilename = requestname +"_offline_html.zip"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("offline_html",fileid+""); + } + + } + if (docfiles.contains("3")){ //只要选了pdf + if(onlyHtml ==0){ //只选了pdf + htmlname = temppath + Util.null2String(pathMap.get("filename")); + }else if(onlyHtml ==2){ + htmlname = temppath + Util.null2String(pathMap.get("pdffilename")); + } + truefilename = requestname + "_offline_pdf.pdf"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("offline_pdf",fileid); + } + } + + + return fileids; + } + + //保存为附件 + public String saveAsFile(String htmlname,String truefilename){ + truefilename = Util.formatMultiLang(truefilename,user.getLanguage()+""); + InputStream in = null; + byte[] buffer = null; + File file = new File(htmlname); + if (file.exists()){ + try { + in = new FileInputStream(file); + buffer = new byte[(int) file.length()]; + in.read(buffer); + in.close(); + }catch (Exception e){ + e.printStackTrace(); + } + } + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.setComefrom("WorkflowToDoc"); + imageFileManager.setData(buffer); + imageFileManager.setImagFileName(truefilename); + + int fileid = imageFileManager.saveImageFile(); + if (fileid <= 0) { + writeLog("保存离线HTML/PDF文件失败"); + return ""; + } + FileSecurityUtil.deleteFile(file); + return fileid+""; + } + + /** + * 获得文件保存目录 + * + * @return + */ + public String getFileSavePath() { + SystemComInfo syscominfo = new SystemComInfo(); + String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()); + return createdir; + } + + + //获取存文档的路径 + public String getWfDocPath(String workflowid,String requestid){ + String doccategory = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_base where id = ?",workflowid); + + if (rs.next()){ + this.wfdocpathtype = Util.null2String(rs.getString("wfdocpathtype")); + this.wfdocpath = Util.null2String(rs.getString("wfdocpath")); + this.wfdocpathfieldid = Util.null2String(rs.getString("wfdocpathfieldid")); + + int isbill = Util.getIntValue(rs.getString("isbill"), 0); + int formid = Util.getIntValue(rs.getString("formid"), 0); + if (wfdocpathtype.equals("1")||wfdocpathtype.equals("")){ //历史数据为空则默认用固定目录 + doccategory = wfdocpath; + }else if (wfdocpathtype.equals("2")){ //选择框字段值对应路径 + //先获取表单字段值 + String fieldvalue = ""; //表单字段值 + String tablename = " workflow_form "; + String fieldname = ""; + String sql = ""; + if(isbill == 1){ + sql = "select tablename from workflow_bill where id="+formid; + rs.executeQuery(sql); + if(rs.next()){ + tablename = Util.null2String(rs.getString(1)); + } + sql = "select fieldname from workflow_billfield where billid="+formid+" and id="+wfdocpathfieldid; + }else{ + sql = "select fieldname from workflow_formdictdetail where id="+wfdocpathfieldid; + } + rs.executeQuery(sql); + if(rs.next()){ + fieldname = Util.null2String(rs.getString(1)); + if(!"".equals(tablename) && !"".equals(fieldname)){ + sql = "select "+fieldname+" from "+tablename+" where requestid="+requestid; + rs.executeQuery(sql); + if(rs.next()){ + fieldvalue = Util.null2String(rs.getString(1)); + } + } + } + this.wfdocpathfieldvalue = fieldvalue; + if (!fieldvalue.equals("")){ + rs.executeQuery("select doccategory,isAccordToSubCom from workflow_selectitem t where fieldid=" + + wfdocpathfieldid + " and selectvalue=" + fieldvalue); + if (rs.next()) { + doccategory = rs.getString("doccategory"); + isAccordToSubCom = Util.null2String(rs.getString("isAccordToSubCom")); + } + if (isAccordToSubCom.equals("1")) { + int creater = 0; + rs.executeQuery("select creater from workflow_requestbase where requestId=" + requestid); + if (rs.next()) { + creater = Util.getIntValue(rs.getString("creater"), 0); + } + + int subCompanyId = 0; + try { + ResourceComInfo resourceComInfo = new ResourceComInfo(); + subCompanyId = Util.getIntValue(resourceComInfo.getSubCompanyID("" + creater), 0); + } catch (Exception ex) { + ex.printStackTrace(); + } + rs.executeQuery("SELECT docCategory FROM Workflow_SelectitemObj where fieldid=" + + wfdocpathfieldid + " and selectvalue=" + fieldvalue + " and isBill=" + isbill + + " and objType='1' and objId= " + subCompanyId); + if (rs.next()) { + doccategory = Util.null2String(rs.getString("docCategory")); + } + } + } + } + } + return doccategory; + } + + /* + *获取模板id + */ + public String getModeid(int workflowid,int requestid,int nodeid){ + RecordSet rs = new RecordSet(); + int modeid = -1; + FreeNodeEntity nodeEntity = FreeNodeBiz.getCurrentFreeNodeEntity(requestid,nodeid); + if(nodeEntity != null) { //如果为自由节点 + nodeid = nodeEntity.getExtendnodeid(); + } + String wfdocsource =""; + rs.executeQuery("select * from workflow_base where id = ?",workflowid); + if (rs.next()){ + wfdocsource = Util.null2String(rs.getString("wfdocsource")); //附件来源 1:显示模板 2:打印模板 + } + HtmlLayoutOperate htmlLayoutOperate = new HtmlLayoutOperate(); + if (wfdocsource.equals("2")) { //打印模板 获取开启的第一个打印模板 如果没有开启的打印模板,则取显示模板,如果没有打印模板 则取显示模板 + rs.executeQuery("select * from workflow_printset where nodeid = ? and type =1 and printenable =1 order by orderid",nodeid); + if (rs.next()){ + modeid = Util.getIntValue(rs.getString("modeid"),-1); + }else { + modeid = htmlLayoutOperate.getActiveHtmlLayout(workflowid, nodeid, 0); //获取当前显示模板的活动模板 + } + }else { //否则就取当前显示模板 + rs.executeQuery("select ismode from workflow_flownode where workflowid=? and nodeid=?",workflowid,nodeid); + if (rs.next()){ + String ismode = Util.null2String(rs.getString("ismode")); + if (ismode.equals("2")){ //如果不是 + modeid = htmlLayoutOperate.getActiveHtmlLayout(workflowid, nodeid, 0); //获取当前显示模板的活动模板 + }else{ + modeid = -1; + } + } + + } + return modeid+""; + } + + /* + * 文档赋权 + * docid 赋权的文档id + * requestid 请求id + * docowner 文档所有者 + * 给流程所有操作者赋权 + */ + public static void docShare(String docids,String requestid,int docowner){ + RecordSet rs = new RecordSet(); + //选择流程的所有操作人 + String sql = "select distinct userid,usertype,isremark,agentorbyagentid,agenttype from workflow_currentoperator where requestid ="+requestid; + rs.executeQuery(sql); + String userids = ""; + String usertypes = ""; + String agentids = ""; + String agenttypes = ""; + while (rs.next()){ + int opertor = rs.getInt("userid"); + int beagentorid=rs.getInt("agentorbyagentid"); + int usertype = rs.getInt("usertype"); + int isremark=Util.getIntValue(rs.getString("isremark"),-1); + int agenttype=Util.getIntValue(rs.getString("agenttype"),-1); + //用户相关客户一次性共享 + userids += "," + opertor; + usertypes += "," + usertype; + + if (beagentorid > 0) { + agentids += "," + beagentorid; + agenttypes += ",0"; + } + } + //修正数据 + if (userids.length() > 0) { + userids = userids.substring(1); + usertypes = usertypes.substring(1); + } + if (agentids.length() > 0) { + agentids = agentids.substring(1); + agenttypes = agenttypes.substring(1); + } + new BaseBean().writeLog("docShare------userids="+userids+"-------agentids="+agentids+"-----docid="+docids); + User user = new User(docowner); + //文档共享 + DocShareUtil dsu = new DocShareUtil(); + //共享 + dsu.addDocShare(user, docids, usertypes, userids, 1); + + if (agentids.length() > 0) { + //共享 + dsu.addDocShare(user, docids, agenttypes, agentids, 1); + } + } + + +} diff --git a/com/engine/custom/archives/workflow/biz/requestLog/RequestLogCusBiz.java b/com/engine/custom/archives/workflow/biz/requestLog/RequestLogCusBiz.java new file mode 100644 index 0000000..31b8921 --- /dev/null +++ b/com/engine/custom/archives/workflow/biz/requestLog/RequestLogCusBiz.java @@ -0,0 +1,799 @@ +package com.engine.custom.archives.workflow.biz.requestLog; + +import com.alibaba.fastjson.JSONObject; +import com.api.doc.detail.util.DocDownloadCheckUtil; +import com.engine.workflow.biz.RobotNode.RobotNodeBiz; +import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.biz.workflowCore.WorkflowBaseBiz; +import com.engine.workflow.constant.RequestLogType; +import com.engine.workflow.constant.SignSource; +import com.engine.workflow.constant.node.NodeType; +import com.engine.workflow.entity.core.NodeInfoEntity; +import com.engine.workflow.entity.requestLog.RequestLogEntity; +import com.engine.workflow.util.CollectionUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.ConnStatement; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; +import weaver.workflow.request.RequestOperationMsgManager; +import weaver.workflow.request.RequestSignRelevanceWithMe; +import weaver.workflow.request.WFLinkInfo; +import weaver.workflow.request.WorkflowSpeechAppend; +import weaver.workflow.workflow.WorkflowVersion; + +import java.util.*; + +/** + * 获取签字意见 + * Created by jhy on 2018/11/7. + */ +public class RequestLogCusBiz { + + private final static Logger log = LoggerFactory.getLogger(RequestLogCusBiz.class); + + /** + * 获得流程流转日志总记录数 + * + * @param requestid + * @param workflowid + * @param viewLogIds + * @return + */ + public static int getRequestLogTotalCount(int requestid, int workflowid, String viewLogIds, String sqlwhere) { + RecordSet rs = new RecordSet(); + String thisviewLogIds = getViewLogIds(viewLogIds, requestid, workflowid); + //需要排除不留痕的机器人节点的id + String robotNodeid = getRobotNodeid(thisviewLogIds); + + String sql = "select count(t1.logid) from workflow_requestlog t1 " + + " where t1.requestid=" + requestid + " and t1.logtype != '1' " + + " and " + Util.getSubINClause(thisviewLogIds, "t1.nodeid", "in") + " " + sqlwhere; + ArrayList unshowlogids = forkStartLogids(requestid, workflowid); + if (unshowlogids.size() > 0) { + sql += " and " + Util.getSubINClause(StringUtils.join(unshowlogids, ","), "t1.logid", "not in"); + } + + if(!"".equals(robotNodeid)){ + sql += " and logid not in (select logid from workflow_requestlog where "+Util.getSubINClause(robotNodeid, "t1.nodeid", "in")+" and operator = '0' and isRobotNode='1')"; + } + rs.executeSql(sql); + int logcount = 0; + if (rs.next()) logcount = rs.getInt(1); + return logcount; + } + + //得到不留痕的机器人节点的id + public static String getRobotNodeid(String thisviewLogIds){ + //需要排除不留痕的机器人节点的id + String robotNodeid = ""; + String[] thisviewLogIdsArr = thisviewLogIds.split(","); + for (String viewLogId : thisviewLogIdsArr) { + int viewnodeid = Util.getIntValue(viewLogId,-1); + NodeInfoEntity nodeInfoEntity = WorkflowBaseBiz.getNodeInfo(viewnodeid); + if(NodeType.WAIT.getValue().equals(nodeInfoEntity.getNodetype()+"") || NodeType.AUTOPROCESS.getValue().equals(nodeInfoEntity.getNodetype()+"")){ + String remarkOperation = new RobotNodeServiceBiz().getRobotNodeSet(viewnodeid).getRemarkOperation(); + if("0".equals(remarkOperation)){ + robotNodeid += "," + viewLogId; + } + } + } + if(robotNodeid.startsWith(",")){ + robotNodeid = robotNodeid.substring(1); + } + return robotNodeid; + } + + /** + * 获得流程流转日志 + * + * @param requestid + * @param workflowid + * @param viewLogIds + * @return + */ + public static ArrayList getRequestLog(int requestid, int workflowid, String viewLogIds, String orderby, int pageSize, int pagenumber, String sqlwhere , boolean isSubrequest) { + ArrayList logs = new ArrayList(); + RecordSet rs = new RecordSet(); + + int min = (pagenumber - 1) * pageSize; + int max = pagenumber * pageSize; + + String sql = getLogSql(requestid, workflowid, viewLogIds, orderby, sqlwhere ,isSubrequest); + System.out.println("requestlogsql==>"+ sql); + StringBuffer splitinertSql = new StringBuffer(); + if ("sqlserver".equals(rs.getDBType())) { + splitinertSql.append(" select * from ( select"); + splitinertSql.append(" row_number() over(order by tbl.operatedate ").append(orderby).append(",tbl.operatetime ").append(orderby).append(", tbl.logid ").append(orderby).append(") as rn,* from ("); + splitinertSql.append(sql).append(" ) tbl "); + splitinertSql.append(") t where rn > ").append(min).append(" and rn <= ").append(max); + } else if ("mysql".equals(rs.getDBType())) { + splitinertSql.append(sql).append(" limit ").append(min).append(",").append(pageSize); + } + else if ("postgresql".equals(rs.getDBType())) { + splitinertSql.append(sql).append(" limit ").append(pageSize).append(" offset ").append(min); + } + else { + splitinertSql.append(" select t1.* from ("); + splitinertSql.append(" select t.*,rownum rn from (" + sql + ") t "); + splitinertSql.append(" ) t1 where rn >").append(min).append(" and rn <=").append(max); + } + rs.execute(splitinertSql.toString()); + while (rs.next()) { + Hashtable hashtable = addLogItem(rs); + if(hashtable != null) logs.add(hashtable); + } + //对log中的重复数据进行清除 + logs = uniqLogs(logs); + return logs; + } + + public static String getLogSql(int requestid, int workflowid, String viewLogIds, String orderby, String sqlwhere, boolean isSubrequest) { + RecordSet rs = new RecordSet(); + String mainAndSubRequestId = getMainOrSubRequest(requestid,isSubrequest); + if (orderby == null || orderby.trim().equals("")) orderby = "desc"; + String mssqlTopflg = ""; + if ("sqlserver".equals((rs.getDBType()))) { + mssqlTopflg = " top 100 percent "; + } + String thisviewLogIds = getViewLogIds(viewLogIds, requestid, workflowid); + String robotNodeid = getRobotNodeid(thisviewLogIds); + String selectfields = " nodeid,destnodeid,operatedate,operatetime,logtype,remark,isMobile,logid,operatortype,operator," + + "agenttype,agentorbyagentid,receivedPersonids,requestLogId,annexdocids,operatorDept,signdocids," + + "signworkflowids,fulltextannotation,HandWrittenSign,SpeechAttachment,speechAttachmente9,remarkLocation,isRobotNode"; + if ("sqlserver".equals(rs.getDBType())) { + selectfields += ",left(substring(receivedPersons,0,2000),240) as receivedPersons "; + } else if ("oracle".equalsIgnoreCase(rs.getDBType())) { + selectfields += ",substr(receivedPersons,0,240) as receivedPersons "; + } else if ("mysql".equalsIgnoreCase(rs.getDBType())) { + selectfields += ",left(receivedPersons,240) as receivedPersons "; + } else { + selectfields += ",receivedPersons"; + } + + String sql = "select " + mssqlTopflg + selectfields + " from workflow_requestlog t1 " + + " where t1.requestid in ( " + mainAndSubRequestId + ") and t1.logtype != '1' " ; + // " and " + Util.getSubINClause(thisviewLogIds, "t1.nodeid", "in"); + if (sqlwhere != null && !sqlwhere.equals("")) { + sql = sql + sqlwhere; + } + + ArrayList unshowlogids = forkStartLogids(requestid, workflowid); + if (unshowlogids.size() > 0) { + sql += " and " + Util.getSubINClause(StringUtils.join(unshowlogids, ","), "t1.logid", "not in"); + } + if(!"".equals(robotNodeid)){ + sql += " and logid not in (select logid from workflow_requestlog where "+Util.getSubINClause(robotNodeid, "t1.nodeid", "in")+" and operator = '0' and isRobotNode='1')"; + } + sql = sql + " order by t1.operatedate " + orderby + ",t1.operatetime " + orderby + ",t1.logtype " + orderby + ",t1.logid " + orderby; + return sql; + } + + private static String getMainOrSubRequest(int requestid, boolean isSubrequest) { + if (isSubrequest){ + // RecordSet rs = new RecordSet(); + // ArrayList results = new ArrayList<>(); + // String mainSql = "select mainrequestid from workflow_requestbase where requestid = ? "; + // String mainRequestId = ""; + // rs.executeQuery(mainSql,requestid); + // if (rs.next()){ + // mainRequestId = Util.null2String(rs.getString("mainrequestid")); + // }else { + // return Util.null2String(requestid); + // } + // // results.add(requestid+""); + // String subSql = "select requestid from workflow_requestbase where mainrequestid = ? "; + // rs.executeQuery(subSql , mainRequestId); + // while (rs.next()){ + // results.add(rs.getString("requestid")); + // } + + List reqids = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String ids = requestid+""; + // reqids.add(requestid); + for (int i = 0; i < 5; i++) { + ArrayList idList = new ArrayList<>(); + String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; + log.error("subrequestSql:{}" + sql); + rs.executeQuery(sql); + while (rs.next()) { + String subrequestid = Util.null2String(rs.getString("requestid")); + // String workflowid = Util.null2String(rs.getString("workflowid")); + idList.add(subrequestid); + reqids.add(subrequestid); + // 使用map自动去重,一种流程类型只取一个requestid + + } + ids = String.join(",", idList); + if (ids.length() == 0) { + break; + } + } + log.error("子流程的id:"+String.join(",", reqids)); + return String.join(",", reqids); + }else { + List reqids = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String ids = requestid+""; + reqids.add(requestid+""); + for (int i = 0; i < 5; i++) { + ArrayList idList = new ArrayList<>(); + String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; + log.error("subrequestSql:{}" + sql); + rs.executeQuery(sql); + while (rs.next()) { + String subrequestid = Util.null2String(rs.getString("requestid")); + // String workflowid = Util.null2String(rs.getString("workflowid")); + idList.add(subrequestid); + reqids.add(subrequestid); + // 使用map自动去重,一种流程类型只取一个requestid + + } + ids = String.join(",", idList); + if (ids.length() == 0) { + break; + } + } + log.error("子流程的id:"+String.join(",", reqids)); + return String.join(",", reqids); + } + + } + + public static String getLogCountSql(int requestid, int workflowid, String viewLogIds, String orderby, String sqlwhere){ + String thisviewLogIds = getViewLogIds(viewLogIds, requestid, workflowid); + + String sql = "select count(*) as count from workflow_requestlog t1 " + + " where t1.requestid=" + requestid + " and t1.logtype != '1' " + + " and " + Util.getSubINClause(thisviewLogIds, "t1.nodeid", "in"); + if (sqlwhere != null && !sqlwhere.equals("")) { + sql = sql + sqlwhere; + } + + ArrayList unshowlogids = forkStartLogids(requestid, workflowid); + if (unshowlogids.size() > 0) { + sql += " and " + Util.getSubINClause(StringUtils.join(unshowlogids, ","), "t1.logid", "not in"); + } + return sql; + } + + /** + * 判断签字意见是否加载完毕 + * + */ + public static boolean isEndLog(int requestid, int workflowid, String viewLogIds, String orderby, int pageSize, int pagenumber, String sqlwhere) { + RecordSet rs = new RecordSet(); + int max = pagenumber * pageSize; + String sql =getLogCountSql(requestid, workflowid, viewLogIds, orderby, sqlwhere); + rs.executeQuery(sql); + int count = 0; + if(rs.next()){ + count = rs.getInt("count"); + } + if(count<=max){ + return true; + }else{ + return false; + } + } + + private static Hashtable addLogItem(RecordSet rs) { + int log_nodeid = rs.getInt("nodeid"); + int log_destnodeid = rs.getInt("destnodeid"); + String operatedate = Util.null2String(rs.getString("operatedate")); + String operatetime = Util.null2String(rs.getString("operatetime")); + String log_logtype = Util.null2String(rs.getString("logtype")); + String isRobotNode = Util.null2String(rs.getString("isRobotNode")); + Hashtable htlog = new Hashtable(); + String remarkHtml = rs.getString("remark"); + String isMobile = Util.null2String(rs.getString("isMobile")); + htlog.put("nodeid", "" + log_nodeid); + htlog.put("isRobotNode", "" + isRobotNode); + + NodeInfoEntity nodeInfoEntity = WorkflowBaseBiz.getNodeInfo(log_nodeid); + String operator = rs.getString("operator"); + if(operator.equals(RobotNodeBiz.operatorid) && (NodeType.WAIT.getValue().equals(nodeInfoEntity.getNodetype()+"") || NodeType.AUTOPROCESS.getValue().equals(nodeInfoEntity.getNodetype()+""))){ + //机器人节点 + String remarkOperation = new RobotNodeServiceBiz().getRobotNodeSet(log_nodeid).getRemarkOperation(); + if("0".equals(remarkOperation) && "1".equals(isRobotNode)){ + return null; + } + } + htlog.put("nodeattribute", nodeInfoEntity.getNodeAttribute()); + htlog.put("nodename", nodeInfoEntity.getNodename()); + htlog.put("destnodeid", "" + log_destnodeid); + htlog.put("iframeId", "FCKsigniframe" + rs.getInt("logid")); + htlog.put("operatortype", rs.getString("operatortype")); + htlog.put("operator", rs.getString("operator")); + htlog.put("agenttype", rs.getString("agenttype")); + htlog.put("agentorbyagentid", rs.getString("agentorbyagentid")); + htlog.put("operatedate", operatedate); + htlog.put("operatetime", operatetime); + htlog.put("logtype", log_logtype); + htlog.put("receivedPersons", rs.getString("receivedPersons")); + htlog.put("receivedPersonids", rs.getString("receivedPersonids")); + htlog.put("logid", rs.getString("requestLogId")); + htlog.put("tmpLogId", rs.getString("logid")); + htlog.put("annexdocids", rs.getString("annexdocids")); + htlog.put("operatorDept", rs.getString("operatorDept")); + htlog.put("signdocids", rs.getString("signdocids")); + htlog.put("signworkflowids", rs.getString("signworkflowids")); + htlog.put("fulltextannotation", rs.getString("fulltextannotation")); + htlog.put("isMobile", isMobile); + + htlog.put("handwrittensignid", Util.null2String(rs.getString("HandWrittenSign"), "")); + htlog.put("speechattachmentid", Util.getIntValue(rs.getString("SpeechAttachment"), 0)); + htlog.put("speechAttachmente9", rs.getString("speechAttachmente9")); + + htlog.put("remarkLocation", rs.getString("remarkLocation")); + htlog.put("id", rs.getString("logid")); + + //处理手机版中所添加的来源的后缀。 + String mobileSuffix = null; + //处理历史数据 + SignSource signSource = SignSource.getSignSource(isMobile); + if (signSource != null) { + mobileSuffix = WorkflowSpeechAppend.getMobileSuffix(remarkHtml); + if (mobileSuffix != null) { + remarkHtml = remarkHtml.substring(0, remarkHtml.lastIndexOf(mobileSuffix)); + } + } + + //获取签字意见中的电子签章部分。 + String eletriSignature = WorkflowSpeechAppend.getElectrSignatrue(remarkHtml); + if (eletriSignature != null) { + remarkHtml = remarkHtml.substring(0, remarkHtml.lastIndexOf(eletriSignature)); + } + + //获取并设置手写签批和语音附件内容 + String attachmentID = Util.null2String(rs.getString("HandWrittenSign"), ""); + if (!"".equals(attachmentID)) { + String[] attachmentids = attachmentID.split(","); + for (int i = 0; i < attachmentids.length; i++) { + int attachmentid = Util.getIntValue(attachmentids[i]); + if (attachmentid > 0) { + String attachmentidAes = DocDownloadCheckUtil.checkPermission(String.valueOf(attachmentid), null); + remarkHtml += "
"; + } + } + } + //全文批注 + String fulltextannotation = Util.null2String(rs.getString("fulltextannotation")).trim(); + if (!"".equals(fulltextannotation)) { + String[] fulltextannotationIds = Util.splitString(fulltextannotation, ","); + for (String fulltextannotationId : fulltextannotationIds) { + int __fulltextannoationid = Util.getIntValue(fulltextannotationId); + if (__fulltextannoationid <= 0) continue; + remarkHtml += "
"; + } + } + int attachmentID1 = Util.getIntValue(rs.getString("SpeechAttachment"), 0); + if (attachmentID1 > 0) { + remarkHtml += "
"; + } + + //再加上电子签章和来源信息。 + if (eletriSignature != null) { + remarkHtml += eletriSignature; + } + if (mobileSuffix != null) { + remarkHtml += mobileSuffix; + } + htlog.put("remarkHtml", remarkHtml); + htlog.put("isbranche", "1".equals(nodeInfoEntity.getNodeAttribute()) ? "1" : "0"); + return htlog; + } + + private static String getViewLogIds(String viewLogIds, int requestid, int workflowid) { + if ("".equals(viewLogIds)) { + viewLogIds = "-1"; + } + + if (viewLogIds.lastIndexOf(",") == viewLogIds.length() - 1) { + viewLogIds = viewLogIds.substring(0, viewLogIds.length() - 1); + } + //查找可查看节点发起的自由节点 + String _freenodeids = getFreeNodeidsByNodeids(requestid + "", viewLogIds); + if (!"".equals(viewLogIds) && !"".equals(_freenodeids)) { + viewLogIds += "," + _freenodeids; + } + + String thisrequestnodeid = getAllNodeids4Request(requestid, workflowid); + return checkNodeids(thisrequestnodeid, viewLogIds); + } + + public static String getFreeNodeidsByNodeids(String requestid, String nodeids) { + String result = ""; + if (nodeids == null || "".equals(nodeids)) return result; + if (nodeids.endsWith(",")) { + nodeids = nodeids.substring(0, nodeids.lastIndexOf(",")); + } + String sql = "select id from workflow_nodebase where isfreenode=1 and requestid=" + requestid + " and " + Util.getSubINClause(nodeids, "startnodeid", "in"); + RecordSet rs = new RecordSet(); + rs.executeSql(sql); + while (rs.next()) { + result += "," + Util.null2String(rs.getString(1)); + } + if (result.length() > 1) { + result = result.substring(1); + } + return result; + } + + /** + * 查找到当前请求有关的所有节点的ID,包括路径设置里设置的和自由流程的节点 + * + * @param requestid + * @param workflowid + * @return + */ + public static String getAllNodeids4Request(int requestid, int workflowid) { + StringBuffer sb = new StringBuffer(); + try { + String allWfId = WorkflowVersion.getAllVersionStringByWFIDs(String.valueOf(workflowid)); + RecordSet recordSet = new RecordSet(); + recordSet.execute("select nb.id from workflow_nodebase nb left join workflow_flownode fn on nb.id=fn.nodeid where (nb.IsFreeNode is null or nb.IsFreeNode!='1' or (nb.IsFreeNode='1' and nb.requestid=" + requestid + ")) and " + Util.getSubINClause(allWfId, "fn.workflowid"," in")); + while (recordSet.next()) { + int id_tmp = Util.getIntValue(recordSet.getString(1)); + sb.append("," + id_tmp); + } + sb.append(","); + } catch (Exception e) { + // + } + return sb.toString(); + } + + /** + * 筛选节点ID,只留下和当前请求有关的,主要是去掉同workflowid下的其他请求的自由流程节点 + * + * @param thisnodeids:这个requestid对应的workflowid的所有节点和requestid下的所有自由流程节点 + * @param nodeids:待筛选的节点,一般是当前操作用户有权限查看签字意见的所有节点 + * @return + */ + public static String checkNodeids(String thisnodeids, String nodeids) { + StringBuffer sb = new StringBuffer(); + nodeids = Util.null2String(nodeids); + thisnodeids = Util.null2String(thisnodeids); + if (!"".equals(nodeids) && !"".equals(thisnodeids)) { + try { + String[] nodeid_sz = nodeids.split(","); + for (int cx = 0; cx < nodeid_sz.length; cx++) { + int nodeid_tmp = Util.getIntValue(Util.null2String(nodeid_sz[cx]).trim()); + //E9新版自由流程 + if (nodeid_tmp < -1) { + sb.append(nodeid_tmp + ","); + } else { + if (("," + thisnodeids + ",").indexOf("," + nodeid_tmp + ",") > -1) { + sb.append(nodeid_tmp + ","); + } + } + } + if (sb.length() > 0) { + sb.delete(sb.length() - 1, sb.length()); + } + } catch (Exception e) { + // + } + } + if (sb.length() == 0) { + sb.append("-1"); + } + return sb.toString(); + } + + /** + * 查询需要过滤的分叉起始节点的签字意见,排除最后一个 + * + * @param requestid + * @param workflowid + * @return + */ + public static ArrayList forkStartLogids(int requestid, int workflowid) { + ArrayList logids = new ArrayList(); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + String c_sql = ""; + rs.executeSql("select 1 from workflow_flownode f ,workflow_nodebase n where f.workflowid=" + workflowid + " and f.nodeid=n.id and n.nodeattribute=1");//通过分叉起始节点判断是否为分叉流程 + if (rs.next()) { + //rs.executeSql("select nodeid,nodename from workflow_flownode f,workflow_nodebase n WHERE workflowid="+workflowid+" AND n.id=f.nodeid and (n.IsFreeNode is null or n.IsFreeNode!='1') "); + rs.executeSql("select nodeid,nodename from workflow_flownode f,workflow_nodebase n WHERE workflowid=" + workflowid + " AND n.id=f.nodeid and (n.IsFreeNode is null or n.IsFreeNode!='1') and n.nodeattribute not in ('2') and exists (select 1 from workflow_requestlog l where l.requestid=" + requestid + " and l.nodeid=f.nodeid and l.logtype in ('0','2','3') group by l.logid having(l.logid)>1) "); + while (rs.next()) { + String nodeid = rs.getString("nodeid"); + String nodename = rs.getString("nodename"); + c_sql = "SELECT a.LOGID FROM workflow_requestLog a WHERE requestid=" + requestid + " and a.logtype in ('0','2','3','t') and a.nodeid=" + nodeid + " AND a.logid NOT IN (SELECT MAX(b.logid) FROM workflow_requestlog b WHERE a.requestid=b.requestid AND a.workflowid=b.workflowid AND a.nodeid=b.nodeid AND a.operatedate=b.operatedate AND a.operatetime=b.operatetime AND a.operator=b.operator AND a.logtype=b.logtype)"; + rs1.executeSql(c_sql); + while (rs1.next()) { + logids.add(Util.getIntValue(rs1.getString(1))); + } + } + } + + return logids; + } + + public static ArrayList uniqLogs(ArrayList logs) { + ArrayList tmpLogs = new ArrayList(); + ArrayList logIds = new ArrayList(); + for (int i = 0; i < logs.size(); i++) { + Hashtable ht = (Hashtable) logs.get(i); + int logid = -1; + try { +// System.out.println(ht.get("tmpLogId")); + logid = Integer.parseInt((String) ht.get("tmpLogId")); + } catch (Exception e) { + e.printStackTrace(); + } + if (logIds.indexOf(logid) < 0) { + tmpLogs.add(ht); + logIds.add(logid); + } + } + return tmpLogs; + } + + /** + * 删除签字意见中的来源 + */ + public static String removeRemarkSource(String remark) { + if (remark != null) { + remark = remark.replaceAll("来自[a-zA-Z]{3,10}客户端|来自[a-zA-Z]{3,10}手机版|来自企业微信|来自微信企业号", ""); + remark = remark.replaceAll("

", ""); + } else + remark = ""; + return remark; + } + + public static void loadNodeCanViewNodeIds(int viewNodeId, int workflowid, List canViewIds, int requestid) { + loadNodeCanViewNodeIds(viewNodeId, workflowid, canViewIds, requestid, false); + } + + /** + * 获取节点设置可查看意见范围 + * + * @param viewNodeId + * @param workflowid + * @param canViewIds + */ + public static void loadNodeCanViewNodeIds(int viewNodeId, int workflowid, List canViewIds, int requestid, boolean isViewAllNodeLog) { + RecordSet rs = new RecordSet(); + String singleViewLogIds = ""; + if (isViewAllNodeLog) { + singleViewLogIds = "-1"; + } else { + rs.executeQuery("select viewnodeids from workflow_flownode where workflowid= ? and nodeid= ? ",workflowid,viewNodeId); + if (rs.next()) { + singleViewLogIds = rs.getString("viewnodeids"); + } + } + if ("-1".equals(singleViewLogIds)) {// 全部查看 + rs.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 (rs.next()) { + String tempNodeId = rs.getString("nodeid"); + if (!canViewIds.contains(tempNodeId)) { + canViewIds.add(tempNodeId); + } + } + } else if (singleViewLogIds == null || "".equals(singleViewLogIds)) {// 全部不能查看 + } else {// 查看部分 + String tempidstrs[] = Util.TokenizerString2(singleViewLogIds, ","); + for (int i = 0; i < tempidstrs.length; i++) { + if (!canViewIds.contains(tempidstrs[i])) { + canViewIds.add(tempidstrs[i]); + } + } + } + } + + /** + * 得到可查看的节点id + * + * @param requestid + * @param workflowid + * @return + */ + public static String getViewLogIds(int requestid, int userid, int workflowid) { + List canViewIds = new ArrayList(); + RecordSet recordSet = new RecordSet(); + //节点操作者 + recordSet.executeSql("select nodeid from workflow_currentoperator where requestid=" + requestid + " and userid=" + userid + " order by receivedate desc ,receivetime desc"); + if (recordSet.next()) { + int viewnodeid = FreeNodeBiz.getExtendNodeId(requestid, Util.getIntValue(recordSet.getString("nodeid"))); + RequestLogCusBiz.loadNodeCanViewNodeIds(viewnodeid, workflowid, canViewIds, requestid); + } + //加载自由节点 + FreeNodeBiz.loadViewLogFreeNodeIds(requestid, canViewIds); + return CollectionUtil.list2String(canViewIds, ","); + } + + + /** + * 意见保存,返回requestlogId + * + * @param logEntity + * @param user + * @return + */ + public static int saveRequestLog(RequestLogEntity logEntity, User user, boolean istest) { + int logid = -1; + if (logEntity == null) return logid; + int operatorDept1 = user.getUserDepartment(); + int operatorSub = user.getUserSubCompany1(); + int operatorJob = Util.getIntValue(user.getJobtitle(), 0); + String seclevel = Util.getIntValue(user.getSeclevel(), 0) + ""; + ConnStatement logstatement = null; + String remarknew = logEntity.getRemark(); + RequestLogType logType = logEntity.getLogType(); + if (logType == RequestLogType.SAVE && !"".equals(Util.null2String(logEntity.getRemarkquote()))) { + remarknew = logEntity.getRemarkquote(); + } + logEntity.setRemarkquote(""); + logEntity.setOperator(user.getUID()); + logEntity.setOperatortype("1".equals(user.getLogintype()) ? 0 : 1); + try { + RecordSet rs = new RecordSet(); + boolean insertLog = true; + if (logType == RequestLogType.SAVE) { + String logsql = " SELECT logid FROM workflow_requestlog WHERE requestid= ? AND nodeid= ? AND logtype=? AND OPERATOR = ? AND operatortype = ?"; + rs.executeQuery(logsql, logEntity.getRequestid(), logEntity.getNodeid(), logType.getKey(), user.getUID(), logEntity.getOperatortype()); + if (rs.next()) { + logid = rs.getInt("logid"); + insertLog = false; + String updatelogsql = " UPDATE workflow_requestlog SET operatedate= ?,operatetime= ?," + + " remark= ?, clientip= ?, destnodeid= ?, annexdocids= ?, " + + " requestLogId= ?, signdocids= ?, signworkflowids= ?, isMobile= ?," + + " SpeechAttachment= ?, HandWrittenSign= ?, remarkLocation=?,remarkquote=?,fulltextannotation = ?,speechAttachmente9 = ? where requestid=" + logEntity.getRequestid() + + " AND nodeid=" + logEntity.getNodeid() + " AND logtype='" + logType.getKey() + "' AND OPERATOR = " + user.getUID() + + " AND operatortype = " + logEntity.getOperatortype(); + logstatement = new ConnStatement(); + logstatement.setStatementSql(updatelogsql); + logstatement.setString(1, logEntity.getOperatedate()); + logstatement.setString(2, logEntity.getOperatetime()); + logstatement.setString(3, logEntity.getRemark()); + logstatement.setString(4, logEntity.getClientip()); + logstatement.setInt(5, logEntity.getDestnodeid()); + logstatement.setString(6, logEntity.getAnnexdocids()); + logstatement.setInt(7, logEntity.getRequestLogId()); + logstatement.setString(8, logEntity.getSigndocids()); + logstatement.setString(9, logEntity.getSignworkflowids()); + logstatement.setString(10, logEntity.getIsMobile()); + logstatement.setInt(11, logEntity.getSpeechAttachment()); + logstatement.setString(12, String.valueOf(logEntity.getHandWrittenSign())); + logstatement.setString(13, logEntity.getRemarkLocation()); + logstatement.setString(14, logEntity.getRemarkquote()); + logstatement.setString(15, logEntity.getFulltextannotation()); + logstatement.setString(16, logEntity.getSpeechAttachmente9()); + logstatement.executeUpdate(); + } + } else { + String deletelogsql = " DELETE from workflow_requestlog WHERE requestid= ? AND nodeid= ? AND (logtype='1') AND OPERATOR = ? AND operatortype = ?"; + rs.executeUpdate(deletelogsql, logEntity.getRequestid(), logEntity.getNodeid(), user.getUID(), logEntity.getOperatortype()); + } + //插入意見 + if (insertLog) { + String uuid = UUID.randomUUID().toString(); + String insertlogsql = " INSERT INTO workflow_requestlog (requestid,workflowid,nodeid,logtype, operatedate, " + + " operatetime,OPERATOR, remark,clientip,operatortype,destnodeid,receivedPersons, " + + " agentorbyagentid,agenttype,showorder,annexdocids,requestLogId,operatorDept, " + + " signdocids,signworkflowids,isMobile,HandWrittenSign,SpeechAttachment,receivedPersonids,remarkLocation,remarkquote,fulltextannotation,speechAttachmente9,uuid,operatorSub, operatorJob, seclevel) " + + " VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) "; + logstatement = new ConnStatement(); + logstatement.setStatementSql(insertlogsql); + logstatement.setInt(1, logEntity.getRequestid()); + logstatement.setInt(2, logEntity.getWorkflowid()); + logstatement.setInt(3, logEntity.getNodeid()); + logstatement.setString(4, logType.getKey()); + logstatement.setString(5, logEntity.getOperatedate()); + logstatement.setString(6, logEntity.getOperatetime()); + logstatement.setInt(7, user.getUID()); + logstatement.setString(8, remarknew); + logstatement.setString(9, logEntity.getClientip()); + logstatement.setInt(10, logEntity.getOperatortype()); + logstatement.setInt(11, logEntity.getDestnodeid()); + logstatement.setString(12, logEntity.getReceivedPersons()); + logstatement.setInt(13, logEntity.getAgentorbyagentid()); + logstatement.setString(14, logEntity.getAgenttype()); + logstatement.setInt(15, logEntity.getShoworder()); + logstatement.setString(16, logEntity.getAnnexdocids()); + logstatement.setInt(17, logEntity.getRequestLogId()); + logstatement.setString(18, String.valueOf(operatorDept1)); + logstatement.setString(19, logEntity.getSigndocids()); + logstatement.setString(20, logEntity.getSignworkflowids()); + logstatement.setString(21, logEntity.getSignSource().getType()); + logstatement.setString(22, String.valueOf(logEntity.getHandWrittenSign())); + logstatement.setInt(23, Util.getIntValue(logEntity.getSpeechAttachment(), 0)); + logstatement.setString(24, logEntity.getReceivedpersonids()); + logstatement.setString(25, logEntity.getRemarkLocation()); + logstatement.setString(26, logEntity.getRemarkquote()); + logstatement.setString(27, logEntity.getFulltextannotation()); + logstatement.setString(28, logEntity.getSpeechAttachmente9()); + logstatement.setString(29, uuid); + logstatement.setInt(30, operatorSub); + logstatement.setInt(31, operatorJob); + logstatement.setString(32, seclevel); + logstatement.executeUpdate(); + logstatement.close(); + + rs.executeQuery("select logid from workflow_requestlog where requestid = ? and uuid = ?", logEntity.getRequestid(), uuid); + if (rs.next()) { + logid = rs.getInt("logid"); + } + } + + /** + * 处理签字意见的权限,督办(s)所有人都有权限,其他的都只给日志的操作人赋予权限 + * 处理日志查看权限 + */ + if (logType != RequestLogType.SAVE) { + rs.executeQuery("select currentnodeid,currentnodetype from workflow_requestbase where requestid = ?", logEntity.getRequestid()); + int curnodeid = 0; + int curnodetype = -1; + if (rs.next()) { + curnodeid = rs.getInt("currentnodeid"); + curnodetype = rs.getInt("currentnodetype"); + } + NodeInfoEntity nodeInfoEntity = WorkflowBaseBiz.getNodeInfo(curnodeid); + Set branchNodeSet = new HashSet(); + if ("2".equals(nodeInfoEntity.getNodeAttribute())) { //分支中间节点 + WFLinkInfo wflinkinfo = new WFLinkInfo(); + String branchnodes = wflinkinfo.getNowNodeids(logEntity.getRequestid()); + 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 (!"3".equals(curnodetype) && (curnodeid == logEntity.getNodeid() || branchNodeSet.contains(String.valueOf(logEntity.getNodeid())))) { + int loguserid = user.getUID(); + if (logType == RequestLogType.SUPERVISE) { // 督办所有人有权限 + loguserid = -1; + } + String rightSql = "insert into workflow_logviewusers (logid,userid) values (? , ?)"; + rs.executeUpdate(rightSql, logid, loguserid); + } + + RequestSignRelevanceWithMe reqsignwm = new RequestSignRelevanceWithMe(); + reqsignwm.inertRelevanceInfo(String.valueOf(logEntity.getWorkflowid()), String.valueOf(logEntity.getRequestid()), String.valueOf(logEntity.getNodeid()), + logType.getKey(), logEntity.getOperatedate(), logEntity.getOperatetime(), String.valueOf(user.getUID()), remarknew); + + //提醒 + List atResourceids = reqsignwm.parseRemark(remarknew); + if (atResourceids.size() > 0) { + RequestOperationMsgManager romm = new RequestOperationMsgManager(); + romm.remarkAtMsg(String.valueOf(logEntity.getRequestid()), String.valueOf(user.getUID()), atResourceids); + } + } + } catch (Exception e) { + log.info(new StringBuilder().append("~requestlog~rstlogpara:").append(JSONObject.toJSONString(logEntity)).append(",remark:").append(remarknew).toString()); + e.printStackTrace(); + } finally { + if (logstatement != null) logstatement.close(); + } + return logid; + } + + + /** + * 根据来源获取需要自定义拼接的条件 + * @return + */ + public static String getCustomSourceCondition(String source,Map params){ + String result = ""; + if("wfCenter".equals(source)){ + if(!"".equals(Util.null2String(params.get("logids")))){ + result += " and logid in(" + Util.null2String(params.get("logids")) + ") "; + } + } + return result; + } +} diff --git a/com/engine/custom/archives/workflow/cmd/requestLog/LoadRequestLogDataCusCmd.java b/com/engine/custom/archives/workflow/cmd/requestLog/LoadRequestLogDataCusCmd.java new file mode 100644 index 0000000..5a6eadf --- /dev/null +++ b/com/engine/custom/archives/workflow/cmd/requestLog/LoadRequestLogDataCusCmd.java @@ -0,0 +1,1072 @@ +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 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> { + + /***方便使用参数***/ + 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); + if (isdebug) { + System.out.println("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) { + System.out.println("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) { + System.out.println("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) { + System.out.println("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) { + System.out.println("requestlog-125-requestid-" + requestid + "-userid-" + userid + "-" + (System.currentTimeMillis() - start)); + start = System.currentTimeMillis(); + } + if (pgflag == null || pgflag.equals("")) { + log_loglist = wfLinkInfo.getRequestLog(requestid, workflowid, viewLogIds, orderby, 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,orderby,wfsignlddtcnt,pgnumber,sqlwhere,isSubrequest); + if(RequestLogCusBiz.isEndLog(requestid,workflowid,viewLogIds,orderby,wfsignlddtcnt,pgnumber,sqlwhere)){///判断此次加载是否是最后一页 + resultDatas.put("isEnd", true); + } + } + + resultDatas.put("maxrequestlogid", sbfmaxrequestlogid.toString()); + + if (isdebug) { + System.out.println("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) { + System.out.println("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) { + System.out.println("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); + System.out.println("value2222:"+value); + } +} diff --git a/com/engine/custom/yunxuetang/Test.java b/com/engine/custom/yunxuetang/Test.java index 1eb367b..58396f7 100644 --- a/com/engine/custom/yunxuetang/Test.java +++ b/com/engine/custom/yunxuetang/Test.java @@ -258,6 +258,8 @@ public class Test { if (matcher.find()) { return matcher.group(1); // 返回匹配的第一个分组,即中文内容 } + + //birthdayReminders return input; } } diff --git a/com/engine/tjbankSocket/SocketExecute.java b/com/engine/tjbankSocket/SocketExecute.java index a589217..a76bf6c 100644 --- a/com/engine/tjbankSocket/SocketExecute.java +++ b/com/engine/tjbankSocket/SocketExecute.java @@ -1,5 +1,7 @@ package com.engine.tjbankSocket; +import java.util.Map; + public interface SocketExecute { - public String execute(String param); + public String execute(Map param); } diff --git a/com/engine/tjbankSocket/impl/CWGLSocketExecute.java b/com/engine/tjbankSocket/impl/CWGLSocketExecute.java index aed7667..130ae3a 100644 --- a/com/engine/tjbankSocket/impl/CWGLSocketExecute.java +++ b/com/engine/tjbankSocket/impl/CWGLSocketExecute.java @@ -20,8 +20,8 @@ import java.util.*; */ public class CWGLSocketExecute extends BaseBean implements SocketExecute { @Override - public String execute(String param) { - Map paramMap = XMLUtils.parseXMLToMap(param); + public String execute(Map param) { + Map paramMap = param; writeLog("paramMap==="+paramMap); String oaTrvlBnsExpnsAcctNo = Util.null2String(paramMap.get("oaTrvlBnsExpnsAcctNo")); String apprvrNo = Util.null2String(paramMap.get("apprvrNo")); diff --git a/com/engine/tjbankSocket/impl/GetToCountSocketExecute.java b/com/engine/tjbankSocket/impl/GetToCountSocketExecute.java index 06f18c5..065d5a8 100644 --- a/com/engine/tjbankSocket/impl/GetToCountSocketExecute.java +++ b/com/engine/tjbankSocket/impl/GetToCountSocketExecute.java @@ -3,10 +3,12 @@ package com.engine.tjbankSocket.impl; import com.engine.tjbankSocket.SocketExecute; import com.engine.web.tjbk.TJBKWorkFlow; +import java.util.Map; + public class GetToCountSocketExecute implements SocketExecute { TJBKWorkFlow tjbkWorkFlow = new TJBKWorkFlow(); @Override - public String execute(String param) { - return tjbkWorkFlow.getToDoCount(param.toString()); + public String execute(Map param) { + return tjbkWorkFlow.getToDoCount(param); } } diff --git a/com/engine/util/SocketClientUtil.java b/com/engine/util/SocketClientUtil.java new file mode 100644 index 0000000..ad2a0ba --- /dev/null +++ b/com/engine/util/SocketClientUtil.java @@ -0,0 +1,116 @@ +package com.engine.util; + +import weaver.general.BaseBean; +import weaver.general.StringUtil; + +import java.io.*; +import java.net.Socket; +import java.nio.charset.StandardCharsets; + +//发送SocketUtil +public class SocketClientUtil { + private int port = 8090; + private String host = "14.1.209.146"; + // private BaseBean bs = new BaseBean(); + + + public SocketClientUtil(String host ,int port) { + this.port = port; + this.host = host; + } + + public String send(String request) throws Exception { + // bs.writeLog("Client Start..."); + Socket socket = null; + try { + //创建一个流套接字并将其连接到指定主机上的指定端口号 + socket = new Socket(host,port); + // String str = "000006121010157060000081243025801570102311000120230905104426true500130004130157202309050600000812430todogetCountuserNum10913026任广鹏是个大刷币"; + // System.out.println(str); + //读取服务器端数据 + BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)); + //向服务器端发送数据 + // PrintStream out = new PrintStream(new OutputStreamWriter(socket.getOutputStream(),StandardCharsets.UTF_8)); + PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),StandardCharsets.UTF_8),true); + out.println(request); + char[] datalen=new char[8];//报文前八位为报文体总长度 + input.read(datalen,0,8); + String lendata=new String (datalen); + System.out.println(lendata); + int length=Integer.parseInt(lendata); + // new BaseBean().writeLog("报文长度"+length); + char[] data=new char[length]; + int datalength = input.read(data,0,length); + String requestData = new String(data); + // new BaseBean().writeLog("requestData",requestData); + // String ret = input.readLine(); + System.out.println("服务器端返回过来的是: " + requestData); + // bs.writeLog("服务器端返回过来的是: " + requestData); + // 如接收到 "OK" 则断开连接 + if (!StringUtil.isEmpty(requestData)) { + // bs.writeLog("客户端将关闭连接"); + // System.out.println("客户端将关闭连接: " + requestData); + Thread.sleep(500); + } + out.close(); + input.close(); + return requestData; + } catch (Exception e) { + System.out.println("客户端异常:" + e.getMessage()); + throw e; + } finally { + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + socket = null; + // bs.writeLog("客户端 finally 异常:" + e.getMessage()); + } + } + } + // return "-1"; + } + + static class UpdateLogThread extends Thread { + @Override + public void run() { + try { + Thread.sleep(3000); + System.out.println("33333333"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + + } + + public static void main(String[] args) throws Exception { + for (int i = 0; i < 5000; i++) { + new Thread(){ + @Override + public void run(){ + SocketClientUtil socket = new SocketClientUtil("14.1.209.146", 8090); + try { + socket.send("000005971010157060000065445025801570102311000120240315092648true500130004120157202403150600000654450todogetCount2userNum10110047"); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } + + + + } + + + public static String cece(){ + System.out.println("1111"); + UpdateLogThread updateLogThread = new UpdateLogThread(); + updateLogThread.start(); + return "222"; + } + + +} diff --git a/com/engine/util/XMLUtils.java b/com/engine/util/XMLUtils.java new file mode 100644 index 0000000..d75bb61 --- /dev/null +++ b/com/engine/util/XMLUtils.java @@ -0,0 +1,379 @@ +package com.engine.util; + +import com.alibaba.druid.util.StringUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; +import weaver.general.BaseBean; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +public class XMLUtils { + //构建返回值 + public static String count2XML(Map headerParam,Integer todocount , Integer toreadcount ) { + try { + // 创建文档对象 + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + +// 创建根节点 + Element rootElement = doc.createElement("Service"); + doc.appendChild(rootElement); + + addServiceHeader(doc,rootElement,headerParam); + + // 创建Service_Body节点 + Element serviceBodyElement = doc.createElement("Service_Body"); + rootElement.appendChild(serviceBodyElement); + + // 创建response节点 + Element responseElement = doc.createElement("response"); + serviceBodyElement.appendChild(responseElement); + + // 创建todo节点 + Element todoElement = doc.createElement("todo"); + responseElement.appendChild(todoElement); + + // 创建count节点并设置值 + if(todocount != null) { + Element countElement = doc.createElement("count"); + countElement.setTextContent(todocount + ""); + todoElement.appendChild(countElement); + } + if(toreadcount != null){ + Element countOneElement = doc.createElement("countOne"); + countOneElement.setTextContent(toreadcount+""); + todoElement.appendChild(countOneElement); + } + + + // 将文档对象转换为XML字符串 + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // 设置不包含XML声明 + DOMSource source = new DOMSource(doc); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + StreamResult result = new StreamResult(outputStream); + + transformer.transform(source, result); + + // 将XML结果转换为字符串 + String xmlString = outputStream.toString("UTF-8"); + //System.out.println(xmlString); + return xmlString; + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + private static void addServiceHeader(Document doc, Element rootElement, Map headerParam) { + + // 创建Service_Body节点 + Element serviceHeaderElement = doc.createElement("Service_Header"); + rootElement.appendChild(serviceHeaderElement); + //service_sn ESB服务流水号 + if (!StringUtils.isEmpty(headerParam.get("service_sn"))){ + Element serviceSnElement = doc.createElement("service_sn"); + serviceSnElement.setTextContent(headerParam.get("service_sn")); + serviceHeaderElement.appendChild(serviceSnElement); + } + if (!StringUtils.isEmpty(headerParam.get("service_id"))){ + Element serviceIdElement = doc.createElement("service_id"); + serviceIdElement.setTextContent(headerParam.get("service_id")); + serviceHeaderElement.appendChild(serviceIdElement); + } + if (!StringUtils.isEmpty(headerParam.get("system_id"))){ + Element systemIdElement = doc.createElement("system_id"); + systemIdElement.setTextContent(headerParam.get("system_id")); + serviceHeaderElement.appendChild(systemIdElement); + } + if (!StringUtils.isEmpty(headerParam.get("requester_id"))){ + Element requesterIdElement = doc.createElement("requester_id"); + requesterIdElement.setTextContent(headerParam.get("requester_id")); + serviceHeaderElement.appendChild(requesterIdElement); + } + if (!StringUtils.isEmpty(headerParam.get("branch_id"))){ + Element branchIdElement = doc.createElement("branch_id"); + branchIdElement.setTextContent(headerParam.get("branch_id")); + serviceHeaderElement.appendChild(branchIdElement); + } + if (!StringUtils.isEmpty(headerParam.get("channel_id"))){ + Element channelIdElement = doc.createElement("channel_id"); + channelIdElement.setTextContent(headerParam.get("channel_id")); + serviceHeaderElement.appendChild(channelIdElement); + } + if (!StringUtils.isEmpty(headerParam.get("service_time"))){ + Element serviceTimeElement = doc.createElement("requester_id"); + serviceTimeElement.setTextContent(headerParam.get("service_time")); + serviceHeaderElement.appendChild(serviceTimeElement); + } + if (!StringUtils.isEmpty(headerParam.get("BnkSrlNo"))){ + Element BnkSrlNoElement = doc.createElement("BnkSrlNo"); + BnkSrlNoElement.setTextContent(headerParam.get("BnkSrlNo")); + serviceHeaderElement.appendChild(BnkSrlNoElement); + } +// if (!StringUtils.isEmpty(headerParam.get("FileFlg"))){ + Element FileFlgElement = doc.createElement("FileFlg"); + FileFlgElement.setTextContent("0"); + serviceHeaderElement.appendChild(FileFlgElement); +// } + if (!StringUtils.isEmpty(headerParam.get("SvcCd"))){ + Element SvcCdElement = doc.createElement("SvcCd"); + SvcCdElement.setTextContent(headerParam.get("SvcCd")); + serviceHeaderElement.appendChild(SvcCdElement); + } + if (!StringUtils.isEmpty(headerParam.get("SvcScn"))){ + Element SvcScnElement = doc.createElement("SvcScn"); + SvcScnElement.setTextContent(headerParam.get("SvcScn")); + serviceHeaderElement.appendChild(SvcScnElement); + } +// 响应码 + Element service_responseElement = doc.createElement("service_response"); + serviceHeaderElement.appendChild(service_responseElement); + if (!StringUtils.isEmpty(headerParam.get("status"))){ + Element statusElement = doc.createElement("status"); + statusElement.setTextContent(headerParam.get("status")); + service_responseElement.appendChild(statusElement); + } + if (!StringUtils.isEmpty(headerParam.get("code"))){ + Element codeElement = doc.createElement("code"); + codeElement.setTextContent(headerParam.get("code")); + service_responseElement.appendChild(codeElement); + } + if (!StringUtils.isEmpty(headerParam.get("desc"))){ + Element descElement = doc.createElement("desc"); + descElement.setTextContent(headerParam.get("desc")); + service_responseElement.appendChild(descElement); + } + + } + + + public static Map parseXMLToMap2(String xmlString) { + Map resultMap = new HashMap<>(); + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.parse(new ByteArrayInputStream(xmlString.getBytes())); + + Element rootElement = document.getDocumentElement(); + extractValues(rootElement, resultMap); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + private static void extractValues(Element element, Map resultMap) { + NodeList childNodes = element.getChildNodes(); + for (int i = 0; i < childNodes.getLength(); i++) { + if (childNodes.item(i) instanceof Element) { + Element childElement = (Element) childNodes.item(i); + String nodeName = childElement.getNodeName(); + String nodeValue = childElement.getTextContent(); + resultMap.put(nodeName, nodeValue); + extractValues(childElement, resultMap); + } + } + } + public static String CW2XML(Map headerParam, String retCd, String errorMessage) { + try { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + Element rootElement = doc.createElement("Service"); + doc.appendChild(rootElement); + addServiceHeader(doc, rootElement, headerParam); + Element serviceBodyElement = doc.createElement("Service_Body"); + rootElement.appendChild(serviceBodyElement); + Element responseElement = doc.createElement("response"); + serviceBodyElement.appendChild(responseElement); + Element countOneElement; + if (retCd != null) { + countOneElement = doc.createElement("retCd"); + countOneElement.setTextContent(retCd + ""); + responseElement.appendChild(countOneElement); + } + + if (errorMessage != null) { + countOneElement = doc.createElement("errorMessage"); + countOneElement.setTextContent(errorMessage + ""); + responseElement.appendChild(countOneElement); + } + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty("omit-xml-declaration", "no"); + DOMSource source = new DOMSource(doc); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + StreamResult result = new StreamResult(outputStream); + transformer.transform(source, result); + String xmlString = outputStream.toString("UTF-8"); + String length = String.format("%08d", xmlString.length()); + return length + xmlString; + } catch (Exception var16) { + var16.printStackTrace(); + return ""; + } + } + + + // public static Map parseXMLToMap(String xmlString) { + // Map resultMap = new HashMap<>(); + // try { + // DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + // DocumentBuilder builder = factory.newDocumentBuilder(); + // Document document = builder.parse(new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8))); + // + // Element rootElement = document.getDocumentElement(); + // // 直接从根元素开始处理 + // NodeList children = rootElement.getChildNodes(); + // for (int i = 0; i < children.getLength(); i++) { + // if (children.item(i).getNodeType() == Node.ELEMENT_NODE) { + // Element child = (Element) children.item(i); + // extractValues(child, resultMap); + // } + // } + // } catch (Exception e) { + // e.printStackTrace(); + // } + // return resultMap; + // } + // + // private static void extractValues(Element element, Map resultMap) { + // // 检查是否有子元素 + // boolean hasChildElement = false; + // NodeList childNodes = element.getChildNodes(); + // for (int i = 0; i < childNodes.getLength(); i++) { + // if (childNodes.item(i).getNodeType() == Node.ELEMENT_NODE) { + // hasChildElement = true; + // break; + // } + // } + // + // // 如果有子元素,只处理子元素 + // if (hasChildElement) { + // for (int i = 0; i < childNodes.getLength(); i++) { + // Node node = childNodes.item(i); + // if (node.getNodeType() == Node.ELEMENT_NODE) { + // Element childElement = (Element) node; + // String nodeName = childElement.getNodeName(); + // // 去除前后空白字符 + // String nodeValue = childElement.getTextContent().trim(); + // resultMap.put(nodeName, nodeValue); + // // 不再递归调用以避免重复添加 + // } + // } + // } + // } + + public static void main(String[] args) { + System.out.println(new Date()); + String xml = "1010157060000065445025801570102311000120240315092648true500130004120157202403150600000654450todogetCount2userNum10110707"; + for (int i = 0; i < 2000; i++) { + new Thread() { + @Override + public void run() { + // System.out.println(parseXMLToMap2(xml)); + parseXMLToMap(xml); + parseXMLToMap(xml); + parseXMLToMap(xml); + parseXMLToMap(xml); + printMemoryUsage(); + + } + }.start(); + printMemoryUsage(); + } + System.out.println(new Date()); + } + + + public static Map parseXMLToMap(String xmlString) { + new BaseBean().writeLog("XMLUtils:xmlString==>"+xmlString); + Map resultMap = new HashMap<>(); + try { + SAXParserFactory factory = SAXParserFactory.newInstance(); + SAXParser saxParser = factory.newSAXParser(); + + InputStream xmlInput = new ByteArrayInputStream(xmlString.getBytes("UTF-8")); + saxParser.parse(xmlInput, new SAXHandler(resultMap)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + private static class SAXHandler extends DefaultHandler { + private Map resultMap; + private Stack elementStack = new Stack<>(); + private StringBuilder elementValue = new StringBuilder(); + + public SAXHandler(Map resultMap) { + this.resultMap = resultMap; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + elementStack.push(qName); + elementValue.setLength(0); // 清空字符缓存 + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + String value = elementValue.toString().trim(); + if (!value.isEmpty()) { + // 如果当前元素有值且没有子元素,则将其添加到结果Map中 + if (elementStack.size() > 1) { + resultMap.put(elementStack.peek(), value); + } + } + elementStack.pop(); + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + elementValue.append(ch, start, length); + } + } + + public static void printMemoryUsage() { + Runtime runtime = Runtime.getRuntime(); + + long totalMemory = runtime.totalMemory(); // JVM总内存 + long freeMemory = runtime.freeMemory(); // JVM空闲内存 + long usedMemory = totalMemory - freeMemory; // 已使用内存 + + // System.out.println("Total Memory: " + totalMemory + " bytes"); + // System.out.println("Free Memory: " + freeMemory + " bytes"); + System.out.println("Used Memory: " + usedMemory + " bytes"); + } + +} \ No newline at end of file diff --git a/com/engine/web/tjbk/TJBKWorkFlow.java b/com/engine/web/tjbk/TJBKWorkFlow.java index 3c2e5fa..cc15a56 100644 --- a/com/engine/web/tjbk/TJBKWorkFlow.java +++ b/com/engine/web/tjbk/TJBKWorkFlow.java @@ -68,7 +68,7 @@ public class TJBKWorkFlow { } } - public String getToDoCount(String param) { + public String getToDoCount(Map param) { // new BaseBean().writeLog("请求参数为" + param); // if (StringUtil.isEmpty(requestBody)) { @@ -80,7 +80,8 @@ public class TJBKWorkFlow { try { // String substring = param.substring(8, param.length()); // new BaseBean().writeLog("xml报文"+substring); - paramMap = XMLUtils.parseXMLToMap(param); + // paramMap = XMLUtils.parseXMLToMap(param); + paramMap = param; String path = paramMap.get("path"); String method = paramMap.get("method"); diff --git a/com/engine/web/tjbk/TjbkServerSocket.java b/com/engine/web/tjbk/TjbkServerSocket.java index 68a2095..b585cde 100644 --- a/com/engine/web/tjbk/TjbkServerSocket.java +++ b/com/engine/web/tjbk/TjbkServerSocket.java @@ -16,6 +16,8 @@ import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class TjbkServerSocket implements ServletContextListener { private SocketThread socketThread; @@ -47,6 +49,7 @@ class SocketThread extends Thread { private ServletContext servletContext; private ServerSocket serverSocket; + private ExecutorService executorService; // 线程池 public SocketThread(ServerSocket serverSocket, ServletContext servletContext) { this.servletContext = servletContext; @@ -55,6 +58,9 @@ class SocketThread extends Thread { if (serverSocket == null) { try { this.serverSocket = new ServerSocket(Integer.parseInt(port)); + // 创建固定大小的线程池 + this.executorService = Executors.newFixedThreadPool(10); + } catch (IOException e) { e.printStackTrace(); } @@ -69,7 +75,8 @@ class SocketThread extends Thread { new BaseBean().writeLog("SocketThread线程启动"); Socket socket = serverSocket.accept(); if (socket != null) { - new ProcessSocketData(socket, this.servletContext).start(); + // new ProcessSocketData(socket, this.servletContext).start(); + executorService.submit(new ProcessSocketData(socket, servletContext)); } } catch (IOException e) { e.printStackTrace(); @@ -81,6 +88,7 @@ class SocketThread extends Thread { try { if (serverSocket != null && !serverSocket.isClosed()) { serverSocket.close(); + executorService.shutdown(); } } catch (IOException e) { e.printStackTrace(); @@ -88,7 +96,7 @@ class SocketThread extends Thread { } } -class ProcessSocketData extends Thread { +class ProcessSocketData implements Runnable { private Socket socket; private ServletContext servletContext; @@ -106,7 +114,7 @@ class ProcessSocketData extends Thread { public void run() { try { // BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); - new BaseBean().writeLog("ServerSocket线程启动"); + new BaseBean().writeLog("ServerSocket线程启动"+Thread.currentThread().getName()); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8); PrintWriter pw = new PrintWriter(outputStreamWriter); @@ -160,7 +168,9 @@ class ProcessSocketData extends Thread { socketExecute = new CWGLSocketExecute(); new BaseBean().writeLog(this.getClass().getName()+":CWGLSocketExecute"); } - String execute = socketExecute.execute(XMLparam); + String execute = socketExecute.execute(paramMap); return execute; } } + + diff --git a/com/weavernorth/nsyh/opinion/cmd/GetNodesCmd.java b/com/weavernorth/nsyh/opinion/cmd/GetNodesCmd.java new file mode 100644 index 0000000..0e8e6d0 --- /dev/null +++ b/com/weavernorth/nsyh/opinion/cmd/GetNodesCmd.java @@ -0,0 +1,65 @@ +package com.weavernorth.nsyh.opinion.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.*; + +/** + * @Author : 孙浩 + * @Date : 2022/3/1 9:58 + * @Version 1.0 + */ +public class GetNodesCmd extends AbstractCommonCommand> { + + public GetNodesCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap(); + if (null == user){ + apidatas.put("hasRight", false); + apidatas.put("msg", "用户信息不存在"); + return apidatas; + } + try { +// int workflowid = Util.getIntValue(Util.null2String(params.get("workflowid")),0); +// if(workflowid==0){ +// apidatas.put("hasRight", false); +// apidatas.put("msg", "参数不足"); +// return apidatas; +// } + RecordSet rs = new RecordSet(); + List> nodeList = new ArrayList<>(); + rs.executeQuery("select workflowid,nodename from uf_ycqzyjxx where zt = 0 "); + while (rs.next()){ + String workflowid = Util.null2String(rs.getString("workflowid")); + String nodeid = Util.null2String(rs.getString("nodename")); + if(!"".equals(workflowid)&&!"".equals(nodeid)){ + Map nodemap = new HashMap<>(); + nodemap.put("workflowid",workflowid); + nodemap.put("nodeid",nodeid); + nodeList.add(nodemap); + } + } + apidatas.put("nodelist",nodeList); + apidatas.put("hasRight", true); + } catch (Exception e) { + apidatas.put("hasRight", false); + apidatas.put("msg", "Exception WorkflowTodoCmd"+e); + } + return apidatas; + } +} diff --git a/com/weavernorth/nsyh/opinion/service/WfOpinionService.java b/com/weavernorth/nsyh/opinion/service/WfOpinionService.java new file mode 100644 index 0000000..c395a4c --- /dev/null +++ b/com/weavernorth/nsyh/opinion/service/WfOpinionService.java @@ -0,0 +1,15 @@ +package com.weavernorth.nsyh.opinion.service; + +import java.util.Map; + +/** + * @Author : 孙浩 + * @Date : 2022/3/1 9:47 + * @Version 1.0 + */ +public interface WfOpinionService { + + //根据流程id获取需要隐藏签字意见相关信息的节点id + Map getNodes(Map params); + +} diff --git a/com/weavernorth/nsyh/opinion/service/impl/WfOpinionServiceImpl.java b/com/weavernorth/nsyh/opinion/service/impl/WfOpinionServiceImpl.java new file mode 100644 index 0000000..c40ba77 --- /dev/null +++ b/com/weavernorth/nsyh/opinion/service/impl/WfOpinionServiceImpl.java @@ -0,0 +1,19 @@ +package com.weavernorth.nsyh.opinion.service.impl; + +import com.weavernorth.nsyh.opinion.cmd.GetNodesCmd; +import com.weavernorth.nsyh.opinion.service.WfOpinionService; + +import com.engine.core.impl.Service; +import java.util.Map; + +/** + * @Author : 孙浩 + * @Date : 2022/3/1 9:49 + * @Version 1.0 + */ +public class WfOpinionServiceImpl extends Service implements WfOpinionService { + @Override + public Map getNodes(Map params) { + return commandExecutor.execute(new GetNodesCmd(user,params)); + } +} diff --git a/com/weavernorth/nsyh/opinion/web/WfOpinionAction.java b/com/weavernorth/nsyh/opinion/web/WfOpinionAction.java new file mode 100644 index 0000000..c7963cd --- /dev/null +++ b/com/weavernorth/nsyh/opinion/web/WfOpinionAction.java @@ -0,0 +1,55 @@ +package com.weavernorth.nsyh.opinion.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.weavernorth.nsyh.opinion.service.WfOpinionService; +import com.weavernorth.nsyh.opinion.service.impl.WfOpinionServiceImpl; +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; + +/** + * @Author : 孙浩 + * @Date : 2022/3/1 9:40 + * @Version 1.0 + */ +public class WfOpinionAction extends BaseBean { + + private WfOpinionService getService(User user) { + return (WfOpinionServiceImpl) ServiceUtil.getService(WfOpinionServiceImpl.class, user); + } + + /** + * 根据流程id获取需要隐藏签字意见相关信息的节点id + * @param request + * @param response + * @return + */ + @GET + @Path("/getNodes") + @Produces({MediaType.TEXT_PLAIN}) + public String getNodes(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas.putAll(getService(user).getNodes(ParamUtil.request2Map(request))); + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } +} \ No newline at end of file diff --git a/interface/transfer/testDemo.jsp b/interface/transfer/testDemo.jsp new file mode 100644 index 0000000..442b232 --- /dev/null +++ b/interface/transfer/testDemo.jsp @@ -0,0 +1,1188 @@ +<%@ page import="java.nio.charset.StandardCharsets" %> +<%@ page import="java.io.*" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="weaver.file.ImageFileManager" %> +<%@ page import="java.net.URL" %> +<%@ page import="org.apache.commons.io.FileUtils" %> +<%@ page import="okhttp3.*" %> +<%@ page import="java.net.URLEncoder" %> +<%@ page import="weaver.soa.workflow.request.RequestService" %> +<%@ page import="weaver.soa.workflow.request.RequestInfo" %> +<%@ page import="com.engine.custom.archives.action.WorkflowToDocCus" %> +<%@ page import="weaver.docs.docs.DocRecycleManager" %> +<%@ page import="weaver.hrm.User" %> +<%@ page import="com.api.workflow.service.RequestAuthenticationService" %> +<%@ page import="weaver.workflow.workflow.WorkflowConfigComInfo" %> +<%@ page import="weaver.hrm.resource.ResourceComInfo" %> +<%@ page import="weaver.crm.Maint.CustomerInfoComInfo" %> +<%@ page import="com.alibaba.fastjson.JSON" %> +<%@ page import="weaver.workflow.monitor.Monitor" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz" %> +<%@ page import="com.api.workflow.util.ServiceUtil" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeBiz" %> +<%@ page import="weaver.general.TimeUtil" %> +<%@ page import="org.apache.poi.xwpf.usermodel.XWPFDocument" %> +<%@ page import="cn.afterturn.easypoi.word.WordExportUtil" %> +<%@ page import="com.icbc.api.internal.apache.http.impl.cookie.F" %> +<%@ page import="cn.hutool.core.util.ZipUtil" %> + + +<% + String requestid = "607615"; + String filePath = "/opt/weaver/filesys/test"; + String zwdir = getKeyword("7"); + String fjdir = getKeyword("8"); + String cbddir = getKeyword("9"); + String zlcdir = getKeyword("9") + File.separator + getKeyword("10"); + String lzxxdir = getKeyword("11"); + String Url = "http://14.1.206.240:18080/fcscloud/composite/upload"; + String fjFile = fjdir; + + Map subRequest = getSubRequest(requestid); + + Map requesData = getRequestByid(requestid); + String fj = Util.null2String(requesData.get("fj")); + String zwkbj = Util.null2String(requesData.get("zwkbj")); + List docids = new ArrayList<>(); + docids.addAll(Arrays.asList(fj.split(","))); + docids.addAll(Arrays.asList(zwkbj.split(","))); + Map fjMap = getFileIdByDocId(fj); + Map zwkbjMap = getFileIdByDocId(zwkbj); + final int[] i = {1}; +// //--------------------------------------------------------------------------- +// //附件 +// fjMap.forEach((docid, imageid) -> { +// ImageFileManager imageFileManager = new ImageFileManager(); +// imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); +// InputStream inputStream = imageFileManager.getInputStream(); +// //中文路径/中文文件名 +// String imageFileName = filePath + File.separator + fjdir + File.separator + imageFileManager.getImageFileName(); +// imageFileName = codeUtf8(imageFileName); +// try { +// File file = saveInputStreamToFile(inputStream, imageFileName); +// String s = callApi(Url, file); +// System.out.println(s); +// JSONObject result = JSONObject.parseObject(s); +// String errorcode = result.getString("errorcode"); +// if ("0".equals(errorcode)) { +// JSONObject data = result.getJSONObject("data"); +// String destFileName = data.getString("destFileName"); +// String viewUrl = data.getString("viewUrl"); +// downloadFile(viewUrl, filePath + File.separator + fjdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// }); +// //正文 +// zwkbjMap.forEach((docid, imageid) -> { +// ImageFileManager imageFileManager = new ImageFileManager(); +// imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); +// InputStream inputStream = imageFileManager.getInputStream(); +// //中文路径/中文文件名 +// String imageFileName = filePath + File.separator + zwdir + File.separator + imageFileManager.getImageFileName(); +// imageFileName = codeUtf8(imageFileName); +// try { +// File file = saveInputStreamToFile(inputStream, imageFileName); +// String s = callApi(Url, file); +// System.out.println(s); +// JSONObject result = JSONObject.parseObject(s); +// String errorcode = result.getString("errorcode"); +// if ("0".equals(errorcode)) { +// JSONObject data = result.getJSONObject("data"); +// String destFileName = data.getString("destFileName"); +// String viewUrl = data.getString("viewUrl"); +// downloadFile(viewUrl, filePath + File.separator + zwdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// }); +// //开始承办单 先获取主流程的承办单 +// +// List requestDocid = generaRequestFormPdf(requestid); +// List requestDocid1 = generaSubRequestFormPdf(requestid); +// Map map1 = getFileIdByDocId(String.join(",",requestDocid)); +// Map map2 = getFileIdByDocId(String.join(",",requestDocid1)); +// out.print("
"); +// out.print("map1:"+JSONObject.toJSONString(map1)); +// out.print("
"); +// out.print("map2:"+JSONObject.toJSONString(map2)); +// out.print("
"); +// +// docids.addAll(requestDocid); +// docids.addAll(requestDocid1); +// +// //附件 +// map1.forEach((docid, imageid) -> { +// ImageFileManager imageFileManager = new ImageFileManager(); +// imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); +// InputStream inputStream = imageFileManager.getInputStream(); +// //中文路径/中文文件名 +// String imageFileName = filePath + File.separator + cbddir + File.separator + fjFile + i[0] +"_"+ imageFileManager.getImageFileName(); +// imageFileName = codeUtf8(imageFileName); +// try { +// File file = saveInputStreamToFile(inputStream, imageFileName); +// String s = callApi(Url, file); +// System.out.println(s); +// JSONObject result = JSONObject.parseObject(s); +// String errorcode = result.getString("errorcode"); +// if ("0".equals(errorcode)) { +// JSONObject data = result.getJSONObject("data"); +// String destFileName = data.getString("destFileName"); +// String viewUrl = data.getString("viewUrl"); +// downloadFile(viewUrl, filePath + File.separator + cbddir + File.separator +fjFile + i[0] +"_"+ imageFileManager.getImageFileName() + ".pdf"); +// } +// i[0]++; +// } catch (IOException e) { +// e.printStackTrace(); +// } +// }); +// //正文 +// i[0] = 1; +// map2.forEach((docid, imageid) -> { +// ImageFileManager imageFileManager = new ImageFileManager(); +// imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); +// InputStream inputStream = imageFileManager.getInputStream(); +// //中文路径/中文文件名 +// String imageFileName = filePath + File.separator + zlcdir + File.separator + fjFile + i[0] +"_"+ imageFileManager.getImageFileName(); +// imageFileName = codeUtf8(imageFileName); +// try { +// File file = saveInputStreamToFile(inputStream, imageFileName); +// String s = callApi(Url, file); +// System.out.println(s); +// JSONObject result = JSONObject.parseObject(s); +// String errorcode = result.getString("errorcode"); +// if ("0".equals(errorcode)) { +// JSONObject data = result.getJSONObject("data"); +// String destFileName = data.getString("destFileName"); +// String viewUrl = data.getString("viewUrl"); +// downloadFile(viewUrl, filePath + File.separator + zlcdir + File.separator + fjFile + i[0] +"_"+ imageFileManager.getImageFileName() + ".pdf"); +// } +// i[0]++; +// } catch (IOException e) { +// e.printStackTrace(); +// } +// }); +// // +// out.print(JSONObject.toJSONString(requestDocid)); +// out.print(JSONObject.toJSONString(requestDocid1)); +// for (String docid : docids) { +// out.print("删除了"+docids); +// out.print("
"); +// deleteDocByid(docid); +// } +// //-------------------------------------------------------------------- + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); + String logFile = getSignLog(requestid, lzxxdir, requestInfo.getCreatorid() + requestInfo.getDescription()); + String s = callApi(Url, new File(logFile)); + System.out.println(s); + JSONObject result = JSONObject.parseObject(s); + String errorcode = result.getString("errorcode"); + if ("0".equals(errorcode)) { + JSONObject data = result.getJSONObject("data"); + String destFileName = data.getString("destFileName"); + String viewUrl = data.getString("viewUrl"); + downloadFile(viewUrl, logFile + ".pdf"); + } + ZipUtil.zip(filePath,filePath+"test.zip"); +%> + +<%! + /** + * 生成子流程承办单 + * @param requestid 主流程id + */ + private List generaSubRequestFormPdf(String requestid) { + Map subRequest = getSubRequest(requestid); + List docids = new ArrayList<>(); + for (String wfid : subRequest.keySet()) { + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(subRequest.get(wfid)), 100); + WorkflowToDocCus workflowToDoc = new WorkflowToDocCus(); + requestInfo.setLastoperator("1"); + requestInfo.setDescription(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); + List subDocids = workflowToDoc.execute(requestInfo, 1); + docids.addAll(subDocids); + } + return docids; + } + + /** + * 生成主流程承办单 + * @param requestid + */ + private static List generaRequestFormPdf(String requestid) { + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); + WorkflowToDocCus workflowToDoc = new WorkflowToDocCus(); + requestInfo.setLastoperator("1"); + requestInfo.setDescription(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); + + return workflowToDoc.execute(requestInfo, 0); + } + + /*** + * 封装数据 + * @param requestid + * @return + */ + public Map getRequestByid(String requestid) { + HashMap record = new HashMap<>(); + String sql = "select * from formtable_main_30 where requestid = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + if (rs.next()) { + String fj = Util.null2String(rs.getString("fj")); + String zwkbj = Util.null2String(rs.getString("zwkbj")); // 正文可编辑字段 + record.put("fj", fj); + record.put("zwkbj", zwkbj); + } + return record; + } + + + /** + * 将gbk转为UTF-8,创建ISO-8859-1编码的字符串, + * ISO-8859-1编码是一个字节对应一个字符,因此不会使最后一个字节错误。 + * @param text + * @return + */ + public static String codeUtf8(String text) { + String ISOtext = null; + ISOtext = new String(text.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + return new String(ISOtext.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + + } + + /** + * 获取当前流程下的所有子流程(最大5层) + * @param requestid + * @return + */ + public static Map getSubRequest(String requestid) { + HashMap records = new HashMap<>(); + RecordSet rs = new RecordSet(); + String ids = requestid; + for (int i = 0; i < 5; i++) { + ArrayList idList = new ArrayList<>(); + String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; + rs.executeQuery(sql); + while (rs.next()) { + String subrequestid = Util.null2String(rs.getString("requestid")); + String workflowid = Util.null2String(rs.getString("workflowid")); + idList.add(subrequestid); + // 使用map自动去重,一种流程类型只取一个requestid + records.put(workflowid, subrequestid); + } + ids = String.join(",", idList); + } + + + // String sql = "select requestid from workflow_requestbase where mainrequestid = ?"; + // RecordSet rs = new RecordSet(); + // rs.executeQuery(sql, requestid); + // if (rs.next()) { + // String subrequestid = Util.null2String(rs.getString("requestid")); + // records.add(subrequestid); + // } + return records; + } + + /** + * 获取imageid Map + * @param ids + * @return + */ + public static Map getFileIdByDocId(String ids) { + HashMap records = new HashMap<>(); + + String sql = "select docid,df.imagefileid imgid from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID in (" + ids + ")"; + RecordSet recordSet = new RecordSet(); + recordSet.execute(sql); + while (recordSet.next()) { + String docid = Util.null2String(recordSet.getString("docid")); + String imgid = Util.null2String(recordSet.getString("imgid")); + records.put(docid, imgid); + } + return records; + } + + /** + * 将InputStream写入本地文件 + * @param inputStream 输入流 + * @param localFilePath 本地文件路径 + * @throws IOException 如果发生输入输出异常 + * @return + */ + public static File saveInputStreamToFile(InputStream inputStream, String localFilePath) throws IOException { + File targetFile = new File(localFilePath); + + // 确保目标文件的父目录存在 + File parentDir = targetFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + + + // 使用try-with-resources语句确保流的正确关闭 + try (InputStream in = inputStream; + OutputStream outputStream = new FileOutputStream(targetFile)) { + int read; + byte[] bytes = new byte[1024]; + while ((read = in.read(bytes)) != -1) { + outputStream.write(bytes, 0, read); + } + } // 自动关闭 in 和 outputStream + return targetFile; + } + + + /** + * 根据链接下载文件 + * @param fileURL + * @param saveDir + */ + public static void downloadFile(String fileURL, String saveDir) { + + try { + saveDir = codeUtf8(saveDir); + URL url = new URL(fileURL); + File file = new File(saveDir); + FileUtils.copyURLToFile(url, file); + System.out.println("Download completed successfully."); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("Download failed."); + } + } + + + /** + * 调用永中接口 + * @param BASE_URL + * @param file + * @return + * @throws IOException + */ + public static String callApi(String BASE_URL, File file) throws IOException { + OkHttpClient client = new OkHttpClient(); + // Debugging: Check if the file exists and can be read + if (file.exists() && file.canRead()) { + System.out.println("File exists and is readable. File path: " + file.getAbsolutePath()); + } else { + System.out.println("File does not exist or cannot be read. File path: " + file.getAbsolutePath()); + } + RequestBody requestBody = null; + String code = getCodeByFileType(file.getName()); + String fileName = URLEncoder.encode(file.getName(), StandardCharsets.UTF_8.toString()); + try { + requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("convertType", code) + .addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("application/zip"), file)) + .build(); + } catch (Exception e) { + System.out.println(e); + e.printStackTrace(); + } + + Request request = new Request.Builder() + .url(BASE_URL) + .post(requestBody) + .build(); + + try (Response response = client.newCall(request).execute()) { + return response.body().string(); + } + } + + /** + * 根据文件类型获取转为pdf的编码 + * @param FileName + * @return + */ + + public static String getCodeByFileType(String FileName) { + String extName = FileName.substring(FileName.lastIndexOf(".") + 1); + String convertType = ""; + if (extName.matches("(doc|dot|dtd|docx|docm|dotx|ppt|pptx|ppsx|potx|xlsx|xlsm|wps|dps|et|wpt|xls|xlc|xlt|xlm|xlw|DOC|DOT|DTD|DOCX|DOCM|DOTX|PPT|PPTX|PPSX|POTX|XLSX|XLSM|WPS|DPS|ET|WPT|XLS|XLC|XLT|XLM|XLW)")) { + convertType = "3"; + } else if (extName.matches("(ofd|OFD)")) { + convertType = "57"; + } else if (extName.matches("(GIF|JPEG|JPG|BMP|PNG|gif|jpeg|jpg|bmp|png)")) { + convertType = "44"; + } else if (extName.matches("(PDF|pdf)")) { + convertType = "34"; + } + return convertType; + } + + + /*** + * 获取关键词 + * @param id + * @return + */ + public static String getKeyword(String id) { + String sql = "select * from uf_test where id = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, id); + rs.next(); + return Util.null2String(rs.getString("label")); + } + + /** + * 删除文档及附件,调用移到回收站,再从回收站删除 + * @param docid + */ + public static void deleteDocByid(String docid) { + DocRecycleManager docRecycleManager = new DocRecycleManager(); + User user = new User(1); + docRecycleManager.moveDocToRecycle(user.getUID(), user.getLogintype(), Util.getIntValue(docid), "127.0.0.1"); + docRecycleManager.deleteDocFromRecycle(user.getUID(), user.getLogintype(), weaver.general.Util.getIntValue(docid), "127.0.0.1"); + } + + /** + * 获取流程类型名称 + * @param wfid + * @return + */ + + public static String getWfNameByid(String wfid) { + String sql = "select WORKFLOWNAME from WORKFLOW_BASE where id = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, wfid); + rs.next(); + return Util.null2String(rs.getString("WORKFLOWNAME")); + } + + /** + * 生成流转意见 意见 + * @param params + * @param user + * @return + */ + public static String getSignLog(String requestid, String dirName, String requestName) { + HashMap params = new HashMap<>(); + params.put("requestid", requestid); + params.put("desremark", "all"); + params.put("pageSize", "50"); + params.put("isfirst", "true"); + // params.put("request", request); + Map data = getSignLogCmd(params, new User(1)); + System.out.println("data===>"); + System.out.println(JSONObject.toJSONString(data)); + Map datas = (Map) data.get("datas"); + List> entries = new ArrayList<>(datas.entrySet()); + entries.sort(new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + Integer key1 = Util.getIntValue((Util.null2String(o1.getKey())).replace("key", "")); + Integer key2 = Util.getIntValue((Util.null2String(o2.getKey())).replace("key", "")); + return key1 - key2; + } + }); // 自然顺序 + + ArrayList> results = new ArrayList<>(); + // out.print(JSONObject.toJSONString(entries)); + for (Map.Entry entry : entries) { + Map value = (Map) entry.getValue(); + List> list = (List) value.get("list"); + for (Map item : list) { + String operator = (String) item.get("operator"); + String operatorid = (String) item.get("operatorid"); + String operatortype = (String) item.get("operatortype"); + String operatedate = (String) item.get("operatedate"); + String nodename = (String) value.get("nodename"); + HashMap itemMap = new HashMap<>(); + itemMap.put("operator", operator); + itemMap.put("operatorid", operatorid); + itemMap.put("operatortype", operatortype); + itemMap.put("operatedate", operatedate); + itemMap.put("nodename", nodename); + results.add(itemMap); + } + } + + System.out.println("results===>"); + System.out.println(JSONObject.toJSONString(results)); + try { + Map dataMap = new HashMap<>(); + dataMap.put("results", results); // 将用户列表添加到数据映射中 + dataMap.put("name", requestName); // 将用户列表添加到数据映射中 + + // 加载模板并填充数据 + String templatePath = "/opt/weaver/filesys/template.docx"; // 模板文件路径 + System.out.println(dataMap); + XWPFDocument doc = WordExportUtil.exportWord07(templatePath, dataMap); + // 导出Word文档 + String outputPath = "/opt/weaver/filesys/test" + File.separator + dirName + File.separator + requestName + ".docx"; // 输出文件路径 + outputPath = codeUtf8(outputPath); + + File targetFile = new File(outputPath); + + // 确保目标文件的父目录存在 + File parentDir = targetFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + FileOutputStream fos = new FileOutputStream(outputPath); + doc.write(fos); + fos.close(); + return outputPath; + } catch (Exception e) { + System.out.println("errorerrorerror"); + System.out.println(e.getMessage()); + e.printStackTrace(); + } + return requestid; + } + + + public static Map getSignLogCmd(Map params, User user) { + Map result = new HashMap(); + RequestAuthenticationService authService = new RequestAuthenticationService(); + authService.setUser(user); + + long date1 = new Date().getTime(); + try { + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + int pageSize = Util.getIntValue(Util.null2String(params.get("pageSize")), 30); + int desrequestid = Util.getIntValue(Util.null2String(params.get("desrequestid")), 0); + String isfirst = Util.null2String(params.get("isfirst")); + String isurger = Util.null2String(params.get("isurger")); + String desremark = Util.null2String(params.get("desremark")); + int desremarkIndex = desremark.indexOf("_"); + boolean isAdSearch = false;//是否有过滤条件 + if (desremarkIndex > -1) { + isAdSearch = true; + desremark = desremark.substring(0, desremarkIndex); + } + String parameter = Util.null2String(params.get("parameter")); + int selectedNode = Util.getIntValue(Util.null2String(params.get("selectedNode")), -1);//选中的节点 + String selectedOperator = Util.null2String(params.get("selectedOperator"));//选中的操作者 + int requestid = Util.getIntValue(Util.null2String(params.get("requestid")), 0); + int workflowid = -1; + rs.executeQuery("select workflowid from workflow_requestbase where requestid=" + requestid); + if (rs.next()) + workflowid = Util.getIntValue(rs.getString("workflowid")); + + // 将json字符串转换成jsonObject + int currentMaxId = 0; + int currentMinId = 0; + int currentId = 0; + int currentId2 = 0; + int lastNodeId = 0; + String viewlogids = ""; + int index = 0; + try { + if (!"true".equals(isfirst)) { + Map parameterMap = JSON.parseObject(parameter, Map.class);//Weibo类在下边定义 + currentMaxId = Util.getIntValue(parameterMap.get("currentMaxId"), 0); + currentMinId = Util.getIntValue(parameterMap.get("currentMinId"), 0); + String currentId12 = Util.null2String(parameterMap.get("currentId")); + if (currentId12.contains("_")) { + String[] currentId12Arr = currentId12.split("_"); + currentId = Util.getIntValue(currentId12Arr[0]); + currentId2 = Util.getIntValue(currentId12Arr[1]); + } else { + currentId = Util.getIntValue(currentId12); + } + viewlogids = Util.null2String(parameterMap.get("viewlogids")); + index = Util.getIntValue(parameterMap.get("nodeindex"), 0); + lastNodeId = Util.getIntValue(parameterMap.get("lastNodeId"), 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + Map putpara = new HashMap(); + + Monitor monitor = new Monitor(); +// String joinStr = ("oracle".equalsIgnoreCase(rs.getDBType()) || "mysql".equalsIgnoreCase(rs.getDBType())) ? " left join " : " left hash join "; + String joinStr = " left join "; +// if (isurger.equals("true") || monitor.hasMonitor(requestid+"", user.getUID() + "")) { +// StringBuffer sqlsb = new StringBuffer(); +// sqlsb.append(" select a.id,a.nodeid, "); +// sqlsb.append(" b.nodename, "); +// sqlsb.append(" a.userid, "); +// sqlsb.append(" a.isremark, "); +// sqlsb.append(" a.lastisremark, "); +// sqlsb.append(" a.usertype, "); +// sqlsb.append(" a.agentorbyagentid, "); +// sqlsb.append(" a.agenttype, "); +// sqlsb.append(" a.receivedate, "); +// sqlsb.append(" a.receivetime, "); +// sqlsb.append(" a.operatedate, "); +// sqlsb.append(" a.operatetime, "); +// sqlsb.append(" a.viewtype, "); +// sqlsb.append(" a.nodetype "); +// sqlsb.append(" ,a.operator "); +// sqlsb.append(" from (SELECT distinct top ").append(pageSize); +// sqlsb.append(" o.id, " ); +// sqlsb.append(" o.requestid, " ); +// sqlsb.append(" o.userid, "); +// sqlsb.append(" o.workflowid, "); +// sqlsb.append(" o.workflowtype, "); +// sqlsb.append(" o.isremark, "); +// sqlsb.append(" o.lastisremark, "); +// sqlsb.append(" o.usertype, "); +// sqlsb.append(" o.nodeid, "); +// sqlsb.append(" o.agentorbyagentid, "); +// sqlsb.append(" o.agenttype, "); +// sqlsb.append(" o.receivedate, "); +// sqlsb.append(" o.receivetime, "); +// sqlsb.append(" o.viewtype, "); +// sqlsb.append(" o.iscomplete, "); +// sqlsb.append(" o.operatedate, "); +// sqlsb.append(" o.operatetime, "); +// sqlsb.append(" nodetype "); +// sqlsb.append(" ,wr.operator "); +// sqlsb.append(" FROM workflow_currentoperator o "); +// +// sqlsb.append(" left join workflow_requestlog wr"); +// sqlsb.append(" on wr.requestid=o.requestid"); +// sqlsb.append(" and wr.nodeid=o.nodeid"); +// sqlsb.append(" and wr.operator = o.userid"); +// sqlsb.append(" and wr.logtype <> '1'"); +// +// sqlsb.append(" , workflow_flownode "); +// +// sqlsb.append(" where o.nodeid = "); +// sqlsb.append(" workflow_flownode.nodeid "); +// if(desremark ==1){//1:已提交 +// sqlsb.append(" AND o.isremark='2' AND wr.operator IS NOT null "); +// }else if(desremark == 2){//2:未提交 +// sqlsb.append(" and ((o.isremark = '0' and (o.takisremark is null or o.takisremark=0)) or o.isremark in ('1','5','7','8','9') )"); +// }else if(desremark == 3){//3:已查看 +// sqlsb.append(" and (((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','4','5','7','8','9')) AND o.viewtype IN (-1,-2)) "); +// }else if(desremark == 4){//4:未查看 +// sqlsb.append(" AND o.viewtype = 0 "); +// } +// sqlsb.append(" and o.id > ").append(currentId); +// sqlsb.append(" and o.requestid = " + requestid + ") a, "); +// sqlsb.append(" workflow_nodebase b "); +// sqlsb.append(" where a.nodeid = b.id "); +// sqlsb.append(" and a.requestid = " + requestid + " "); +// sqlsb.append(" and a.agenttype <> 1 "); +// sqlsb.append(" order by a.id "); +// //System.out.println("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); +// rs.executeSql(sqlsb.toString()); +// +// } else { + // 处理相关流程的查看权限 +// if ("".equals(viewlogids)) { +// viewlogids = this.getViewLogids(); +// } + StringBuffer sqlsb = new StringBuffer(); + if ("sqlserver".equalsIgnoreCase(rs.getDBType())) { // sqlserver 排序提到这里 + sqlsb.append(" select top ").append(pageSize).append(" a.id,a.nodeid, "); + } else { + sqlsb.append(" select a.id,a.nodeid, "); + } + sqlsb.append("(CASE WHEN a.nodeid < -1 THEN (SELECT nodename FROM workflow_freenode t WHERE t.id = a.nodeid) ELSE (SELECT nodename FROM workflow_nodebase t1 WHERE t1.id = a.nodeid) END) AS nodename,"); + sqlsb.append(" a.userid, "); + sqlsb.append(" a.isremark, "); + sqlsb.append(" a.preisremark, "); + sqlsb.append(" a.lastisremark, "); + sqlsb.append(" a.usertype, "); + sqlsb.append(" a.agentorbyagentid, "); + sqlsb.append(" a.agenttype, "); + sqlsb.append(" a.receivedate, "); + sqlsb.append(" a.receivetime, "); + sqlsb.append(" a.operatedate, "); + sqlsb.append(" a.operatetime, "); + sqlsb.append(" a.processuser, "); + sqlsb.append(" a.viewtype, "); + sqlsb.append(" a.nodetype "); + sqlsb.append(" ,a.operator "); + sqlsb.append(" ,a.tab "); + //if("true".equals(isfirst)){ + /*if("oracle".equals(rs.getDBType()) || "mysql".equals(rs.getDBType())){ + sqlsb.append(" from (SELECT distinct "); + }else{ + sqlsb.append(" from (SELECT distinct top ").append(pageSize); // sqlserver排序提到外层查询 + }*/ + sqlsb.append(" from (SELECT distinct "); +// }else{ +// sqlsb.append(" from (SELECT distinct "); +// } + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" o.workflowtype, "); + //workflow_otheroperator表中isremark为字符型,这里转下字符 + if (rs.getDBType().toLowerCase().equals("oracle") || rs.getDBType().toLowerCase().equals("postgresql")) { + sqlsb.append(" to_char(o.isremark) as isremark, "); + sqlsb.append(" to_char(o.preisremark) AS preisremark, "); + sqlsb.append(" to_char(o.lastisremark) AS lastisremark, "); + } else if (rs.getDBType().toLowerCase().equals("mysql")) { + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.preisremark, "); + sqlsb.append(" o.lastisremark, "); + } else { + sqlsb.append(" cast(o.isremark as varchar) as isremark, "); + sqlsb.append(" cast(o.preisremark as varchar) as preisremark, "); + sqlsb.append(" cast(o.lastisremark as varchar) as lastisremark, "); + } + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" o.agentorbyagentid, "); + sqlsb.append(" o.agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" o.iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" o.processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype "); + sqlsb.append(" ,wr.operator "); + sqlsb.append(" ,1 as tab "); + sqlsb.append(" FROM workflow_currentoperator o "); + sqlsb.append(" " + joinStr + " workflow_requestlog wr"); + sqlsb.append(" on wr.requestid=o.requestid"); + sqlsb.append(" and wr.nodeid=o.nodeid"); + sqlsb.append(" and wr.operator = o.userid"); + sqlsb.append(" and wr.logtype <> '1'"); + sqlsb.append(" and o.operatedate = wr.operatedate"); + sqlsb.append(" and o.operatetime = wr.operatetime");//再通过时间关联一下,防止流程状态操作状态显示错误 + sqlsb.append(" where o.id > ").append(currentId); + if ("submit".equals(desremark)) {//1:已提交----isremark等于4,preisremark=11实际对应已提交数据 + sqlsb.append(" AND (o.isremark='2' or (o.isremark=4 and o.preisremark=11)) AND (wr.operator IS NOT null or o.userid = o.processuser)"); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + sqlsb.append(" AND( (o.isremark != '2' AND o.isremark != '4') OR (o.isremark = '4' AND o.viewtype = 0 and o.preisremark != 11) ) "); + } else if ("view".equals(desremark)) {//3:已查看 + sqlsb.append(" and ((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','5','7','8','9','11') or (o.isremark=4 and o.preisremark!=11)) AND o.viewtype IN (-1,-2) "); + } else if ("noview".equals(desremark)) {//4:未查看 + sqlsb.append(" AND o.viewtype=0 AND (o.isremark IN ('0','1','5','7','8','9','11') or (o.isremark = '2' AND wr.operator IS NULL) or (o.isremark=4 and o.preisremark!=11)) "); + } + sqlsb.append(" and o.requestid = " + requestid); + sqlsb.append(" union "); + sqlsb.append(" SELECT DISTINCT "); + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" 0 as workflowtype, "); + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.isremark as preisremark, "); + sqlsb.append(" o.isremark as lastisremark, "); + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" 0 as agentorbyagentid, "); + sqlsb.append(" '0' as agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" 1 as iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" wr.operator as processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype, "); + sqlsb.append(" wr.operator "); + sqlsb.append(" ,2 as tab "); + sqlsb.append(" FROM workflow_otheroperator o LEFT JOIN workflow_requestlog wr ON wr.requestid = o.requestid "); + sqlsb.append(" AND wr.nodeid = o.nodeid "); + sqlsb.append(" AND wr.operator = o.userid "); + sqlsb.append(" AND wr.logtype <> '1' "); + sqlsb.append(" WHERE o.requestid = " + requestid + " "); + sqlsb.append(" and o.id > ").append(currentId2); + sqlsb.append(" ) a "); + sqlsb.append(" where a.requestid = " + requestid + " "); + sqlsb.append(" and a.agenttype <> 1 "); + if (!"".equals(viewlogids)) { + sqlsb.append(" and a.nodeid in (" + viewlogids + ") "); + } + if (selectedNode != -1) { + sqlsb.append(" AND a.nodeid = " + selectedNode + " "); + } + if (!"".equals(selectedOperator)) { + sqlsb.append(" AND a.userid = " + selectedOperator + " "); + } + + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + boolean showdelFreeNodeInfo = "1".equals(configComInfo.getValue("showdelete_freenode_info")); + + sqlsb.append(" and (a.nodeid > -1 or (a.nodeid < -1 and exists (select id from workflow_freenode where id = a.nodeid and requestid = " + requestid + (showdelFreeNodeInfo ? "" : " and groupid > 0 ") + " ))) "); + + //搜索时返回状态 + if (isAdSearch && "true".equals(isfirst)) { + rs.executeQuery("select count(id) as count from (" + sqlsb.toString().replace("top " + pageSize, "") + ") t"); + result.put("countTime", new Date().getTime() - date1); + if (rs.next()) { + result.put("count", Util.null2String(rs.getString("count"))); + } + } + + sqlsb.append(" order by a.receivedate, a.receivetime,a.id , a.nodetype"); + + //System.out.println("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); + if ("oracle".equals(rs.getDBType())) { //必须排序后再限制rownum + String sql_oracle = sqlsb.toString(); + sqlsb.setLength(0); + sqlsb.append("select * from (" + sql_oracle + ") where rownum < ").append(pageSize); + } else if ("mysql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } else if ("postgresql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } + if (requestid > 0) { + rs.executeSql(sqlsb.toString()); + } + result.put("dataTime", new Date().getTime() - date1); +// } + List> statuslist = new ArrayList>(); + int tmpnodeid = 0; + while (rs.next()) { + int tab = rs.getInt("tab"); + if (tab == 1) { + currentId = rs.getInt("id"); + } else { + currentId2 = rs.getInt("id"); + } + tmpnodeid = rs.getInt("nodeid"); + String tmpnodename = rs.getString("nodename"); + Map nodekv = null; + if (statuslist.size() == 0) { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } else { + Map temmap = statuslist.get(statuslist.size() - 1); + int tnodeid = Util.getIntValue(temmap.get("nodeid"), 0); + if (tnodeid == tmpnodeid) { + nodekv = temmap; + } else { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } + } + nodekv.put("nodeid", tmpnodeid + ""); + nodekv.put("nodename", tmpnodename + ""); + } + int nextlistcount = 0; + int nextsubmitCount = 0; + int nextviewCount = 0; + int nextnoviewCount = 0; + if ("all".equals(desremark) && !isAdSearch) { + currentMaxId = currentId; + String maxsql = " select a.id,a.nodeid from workflow_currentoperator a where a.id > " + currentId + " and a.requestid=" + requestid + " order by a.id ,a.receivedate, a.receivetime"; + rs1.executeSql(maxsql); + while (rs1.next()) { + int currentid = rs1.getInt("id"); + int currentnodeid = rs1.getInt("nodeid"); + if (currentnodeid == tmpnodeid) { + currentMaxId = currentid; + } else { + break; + } + } + String listcountsql = " select count(id) num from workflow_currentoperator where id > " + currentId + " and id <= " + currentMaxId + " and requestid=" + requestid + " and nodeid=" + tmpnodeid + " and agenttype <> 1 and usertype <> 1 "; + //String submitCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid +" and agenttype <> 1 and usertype <> 1 and isremark = 2 and exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and workflow_requestlog.operator=workflow_currentoperator.userid )"; + //String viewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 and (viewtype = -1 or viewtype=-2) and ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + //String noviewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 AND viewtype=0 AND (isremark IN ('0','1','4','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + String submitCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.isremark = 2 and wr.operator is NOT null "; + String viewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype IN (-1,-2) and ((wc.isremark = '2' AND wr.operator IS NULL) or wc.isremark in ('0','1','4','5','7','8','9')) "; + String noviewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype=0 AND (wc.isremark IN ('0','1','4','5','7','8','9','11') or (wc.isremark = '2' and wr.operator is null )) "; + rs1.executeSql(listcountsql); + while (rs1.next()) { + nextlistcount = rs1.getInt("num"); + } + rs1.executeSql(submitCountsql); + while (rs1.next()) { + nextsubmitCount = rs1.getInt("num"); + } + rs1.executeSql(viewCountsql); + while (rs1.next()) { + nextviewCount = rs1.getInt("num"); + } + rs1.executeSql(noviewCountsql); + while (rs1.next()) { + nextnoviewCount = rs1.getInt("num"); + } + } + + Map allstatusmap = new HashMap(); + Map submitstatusmap = new HashMap(); + Map nosubmitstatusmap = new HashMap(); + Map viewstatusmap = new HashMap(); + Map noviewstatusmap = new HashMap(); + //提交节点信息--滚动加载到当前currentoperator对应最大id + + //数字统计转到新接口count中 + ResourceComInfo resourceComInfo = new ResourceComInfo(); + CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo(); + Map all_nodemap = new HashMap(); + Map submit_nodemap = new HashMap(); + Map nosubmit_nodemap = new HashMap(); + Map view_nodemap = new HashMap(); + Map noview_nodemap = new HashMap(); + + rs.beforFirst(); + int currentnum = 0; + for (Iterator> it = statuslist.iterator(); it.hasNext(); index++) { + + Map nodekv = it.next(); + int fnodeid = Util.getIntValue(nodekv.get("nodeid")); + String namename = nodekv.get("nodename"); + int submitCount = 0; + int viewCount = 0; + int noviewCount = 0; + int listcount = 0; + if ("false".equals(isfirst) && currentnum == 0 && lastNodeId == fnodeid) { + index -= 1; + } + if (tmpnodeid == fnodeid && currentnum == (statuslist.size() - 1)) { + submitCount = nextsubmitCount; + viewCount = nextviewCount; + noviewCount = nextnoviewCount; + listcount = nextlistcount; + } + currentnum++; + Map all_nodemap_in = new HashMap(); + all_nodemap_in.put("nodeid", fnodeid); + all_nodemap_in.put("nodename", namename); + Map submit_nodemap_in = new HashMap(); + Map nosubmit_nodemap_in = new HashMap(); + Map view_nodemap_in = new HashMap(); + Map noview_nodemap_in = new HashMap(); + + List> nodeallstatuslist = new ArrayList>(); + List> nodesubmitstatuslist = new ArrayList>(); + List> nodenosubmitstatuslist = new ArrayList>(); + List> nodeviewstatuslist = new ArrayList>(); + List> nodenoviewstatuslist = new ArrayList>(); + + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.putAll(all_nodemap_in); + submitstatusmap.put("datas", submit_nodemap); + submit_nodemap.put("key" + index, submit_nodemap_in); + submit_nodemap_in.put("list", nodesubmitstatuslist); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.putAll(all_nodemap_in); + nosubmitstatusmap.put("datas", nosubmit_nodemap); + nosubmit_nodemap.put("key" + index, nosubmit_nodemap_in); + nosubmit_nodemap_in.put("list", nodenosubmitstatuslist); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.putAll(all_nodemap_in); + viewstatusmap.put("datas", view_nodemap); + view_nodemap.put("key" + index, view_nodemap_in); + view_nodemap_in.put("list", nodeviewstatuslist); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.putAll(all_nodemap_in); + noviewstatusmap.put("datas", noview_nodemap); + noview_nodemap.put("key" + index, noview_nodemap_in); + noview_nodemap_in.put("list", nodenoviewstatuslist); + } else { + //所有节点信息 + allstatusmap.put("datas", all_nodemap); + all_nodemap.put("key" + index, all_nodemap_in); + all_nodemap_in.put("list", nodeallstatuslist); + } + + boolean islight = false; + RobotNodeServiceBiz robotNodeServiceBiz = new RobotNodeServiceBiz(); + while (rs.next()) { + int tmpnodeid1 = rs.getInt("nodeid"); + + if (tmpnodeid1 != fnodeid) { + rs.previous(); + break; + } + + //String tmpnodename = rs.getString("nodename"); + int tmpcurrid = rs.getInt("id"); + String tmpuserid = rs.getString("userid"); + String tmpisremark = Util.null2String(rs.getString("isremark")); + if (tmpisremark.equals("")) { + tmpisremark = Util.null2String(rs.getString("lastisremark")); + } + int tmpusertype = rs.getInt("usertype"); + String tmpagentorbyagentid = rs.getString("agentorbyagentid"); + int tmpagenttype = rs.getInt("agenttype"); + String tmpreceivedate = rs.getString("receivedate"); + String tmpreceivetime = rs.getString("receivetime"); + String tmpoperatedate = rs.getString("operatedate"); + String tmpoperatetime = rs.getString("operatetime"); + String viewtype = rs.getString("viewtype"); + String nodetype = rs.getString("nodetype"); + int preisremark = rs.getInt("preisremark"); + String processuser = rs.getString("processuser"); + boolean flags = false; + String tmpIntervel = ""; + // 如果tmpisremark=2 判断时候在日志表里有该人(确定是否是由非会签得到的isremark=2) + + String operator = rs.getString("operator"); + if (operator != null && !"".equals(operator)) { + flags = true; + } + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && tmpoperatedate != null && !tmpoperatedate.equals("")) { + tmpIntervel = TimeUtil.timeInterval2(tmpreceivedate + " " + tmpreceivetime, tmpoperatedate + " " + tmpoperatetime, user.getLanguage()); + } + islight = !islight; + Map _statusmap = new HashMap(); + // 操作人 + String _statususername = ""; + String _operatorid = ""; + String _beagentid = ""; + String _beagentname = ""; + String _operatortype = "0"; + if (tmpusertype == 0) { + _operatorid = tmpuserid; + _statususername = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpuserid)); + if (tmpagenttype == 2) { //代理情况 + _beagentid = tmpagentorbyagentid; + _beagentname = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpagentorbyagentid)); + } + _statusmap.put("operatorImg", resourceComInfo.getMessagerUrls(tmpuserid)); + _statusmap.put("operatorImgDefName", _statususername); + } else if (RobotNodeBiz.operatortype.equals(tmpusertype + "")) { + _statususername = Util.formatMultiLang(robotNodeServiceBiz.getRobotNodeSet(tmpnodeid1).getOperatorName()); + _operatorid = tmpuserid; + _operatortype = "2"; + } else { + _operatorid = tmpuserid; + _operatortype = "1"; + _statususername = ServiceUtil.convertChar(customerInfoComInfo.getCustomerInfoname(tmpuserid)); + } + + // 查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 8:退回 9:被撤回 + int _statusCode = 0; + + if (preisremark != 8 && (tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + _statusCode = 3; + submitCount++; + if ("4".equals(nodetype) && preisremark == 0) { + _statusCode = 7; + } + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + _statusCode = 2; + viewCount++; + } else { + _statusCode = 1; + noviewCount++; + } + } else if ("s".equals(tmpisremark)) { + _statusCode = 4; + } else if ("r".equals(tmpisremark)) { + _statusCode = 6; + } else if ("c".equals(tmpisremark)) { + _statusCode = 5; + } else if (preisremark == 8 && viewtype.equals("-2") && tmpisremark.equals("2")) { + _statusCode = 2; + viewCount++; + } + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery("select operatetype from workflow_currentoperator where id=?", tmpcurrid); + if (recordSet.next()) { + int operatetype = recordSet.getInt(1); + if (operatetype == 3) {//退回 + _statusCode = 8; + } else if (operatetype == 4) {//被撤回 + _statusCode = 9; + } + } + + + listcount++; + if ("view".equals(desremark)) {//3:已查看 + if (processuser.equals(tmpuserid) && ("2".equals(tmpisremark) || "4".equals(tmpisremark))) { + listcount--; + } + } + String _receivedate = ""; + String _operatedate = ""; + String _intervel = ""; + + if (!tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + _receivedate = Util.toScreen(tmpreceivedate, user.getLanguage()) + " " + Util.toScreen(tmpreceivetime, user.getLanguage()); + } + _operatedate = Util.toScreen(tmpoperatedate, user.getLanguage()) + " " + Util.toScreen(tmpoperatetime, user.getLanguage()); + + _intervel = Util.toScreen(tmpIntervel, user.getLanguage()); + + _statusmap.put("statuscode", String.valueOf(_statusCode)); + _statusmap.put("operator", _statususername); + _statusmap.put("receivedate", _receivedate); + _statusmap.put("operatedate", _operatedate); + _statusmap.put("intervel", _intervel); + _statusmap.put("operatorid", _operatorid); + _statusmap.put("operatortype", _operatortype); + _statusmap.put("beagentid", _beagentid); + _statusmap.put("beagentname", _beagentname); + _statusmap.put("nodetype", nodetype); + + //所有节点 + nodeallstatuslist.add(_statusmap); + //查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + nodesubmitstatuslist.add(_statusmap); + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + nodeviewstatuslist.add(_statusmap); + } else if (viewtype.equals("0")) { + nodenoviewstatuslist.add(_statusmap); + } + } + + if ((!tmpisremark.equals("2") && !tmpisremark.equals("4")) || (tmpisremark.equals("4") && viewtype.equals("0"))) { + if (!tmpisremark.equals("s") && !tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + nodenosubmitstatuslist.add(_statusmap); + } + } + } + //--已提交、已查看、未查看 + all_nodemap_in.put("submitCount", submitCount);//--已提交 + all_nodemap_in.put("viewCount", viewCount);//--已查看 + all_nodemap_in.put("noviewCount", noviewCount);//--未查看 + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.put("listcount", listcount); + result.putAll(submitstatusmap); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.put("listcount", listcount); + result.putAll(nosubmitstatusmap); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.put("listcount", listcount); + result.putAll(viewstatusmap); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.put("listcount", listcount); + result.putAll(noviewstatusmap); + } else { + //所有节点信息 + all_nodemap_in.put("listcount", listcount); + result.putAll(allstatusmap); + } + lastNodeId = fnodeid; + } +// if(maxid == currentMaxId){ +// isfinish = 1; +// } + putpara.put("nodeindex", index + ""); + putpara.put("currentMaxId", currentMaxId + ""); + putpara.put("currentMinId", currentMinId + ""); + putpara.put("currentId", currentId + "_" + currentId2); + putpara.put("lastNodeId", lastNodeId + ""); + putpara.put("viewlogids", viewlogids + ""); + result.put("parameter", putpara); + result.put("otherTime", new Date().getTime() - date1); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + +%> + + diff --git a/interface/transfer/testDemo2.jsp b/interface/transfer/testDemo2.jsp new file mode 100644 index 0000000..23b5ce5 --- /dev/null +++ b/interface/transfer/testDemo2.jsp @@ -0,0 +1,80 @@ +<%@ page import="java.util.List" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.io.FileInputStream" %> +<%@ page import="java.io.File" %> +<%@ page import="org.apache.poi.ss.usermodel.Workbook" %> +<%@ page import="org.apache.poi.xssf.usermodel.XSSFWorkbook" %> +<%@ page import="org.apache.poi.ss.usermodel.Sheet" %> +<%@ page import="org.apache.poi.ss.usermodel.Row" %> +<%@ page import="java.util.Iterator" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="com.engine.custom.archives.entity.Dept" %> +<%@ page import="com.alibaba.fastjson.JSONObject" %> + + +<% + List depts = readExcelFile("/opt/weaver/filesys/zzxx.xlsx"); + // 输出或处理dept列表 + out.println(depts.size()); + out.println(JSONObject.toJSONString(depts)); + RecordSet recordSet = new RecordSet(); + String comSql = "update hrmsubcompanydefined set DAPYBH = ? where SUBCOMID = (select id from hrmsubcompany where SUBCOMPANYNAME = ? )"; + // String deptByDeptSql = "update hrmdepartmentdefined set DAPYBH = ? where SUBCOMPANYNAME = ? and SUPDEPID = (select * from hrmdepartmentdefined where DAPYBH = ? )"; + // String deptByComSql = "update hrmdepartmentdefined set DAPYBH = ? where SUBCOMPANYNAME = ? and SUPDEPID = (select * from SUBCOMPANYID1 where DAPYBH = ? )"; + String deptSql = "update hrmdepartmentdefined set DAPYBH = ? where deptid in (select id from hrmdepartment where DEPARTMENTNAME = ? ) and deptid in (select id from hrmdepartment where SUBCOMPANYID1 = (select SUBCOMID from hrmsubcompanydefined where DAPYBH = ? ) or SUPDEPID = (select DEPTID from hrmdepartmentdefined where DAPYBH = ? ) )"; + + for (Dept dept : depts) { + if ("zgs".equals(dept.getType())) { + continue; + } + if ("zonghang".equals(dept.getType())) { + recordSet.executeUpdate(comSql, dept.getId(), dept.getName()); + } + if ("zhih".equals(dept.getType()) || "fh".equals(dept.getType())) { + if ("10".equals(dept.getParentId())) { + recordSet.executeUpdate(comSql, dept.getId(), dept.getName()); + } else { + recordSet.executeUpdate(deptSql, dept.getId(), dept.getName(), dept.getParentId(), dept.getParentId()); + } + } + if ("ld".equals(dept.getType()) || "bm".equals(dept.getType())) { + recordSet.executeUpdate(deptSql, dept.getId(), dept.getName(), dept.getParentId(), dept.getParentId()); + } + } + + +%> + +<%! + public static List readExcelFile(String filePath) { + List dept = new ArrayList<>(); + try (FileInputStream fis = new FileInputStream(new File(filePath)); + Workbook workbook = new XSSFWorkbook(fis)) { + + Sheet sheet = workbook.getSheetAt(0); + Iterator rowIterator = sheet.iterator(); + + if (rowIterator.hasNext()) { + rowIterator.next(); // 跳过标题行 + } + + while (rowIterator.hasNext()) { + Row row = rowIterator.next(); + Dept Dept = new Dept(); + Dept.setId(row.getCell(0).getStringCellValue()); + Dept.setName(row.getCell(1).getStringCellValue()); + Dept.setType(row.getCell(2).getStringCellValue()); + Dept.setParentId(row.getCell(3).getStringCellValue()); + Dept.setAllName(row.getCell(4).getStringCellValue()); + // 假设第一列是姓名,第二列是年龄 + dept.add(Dept); + } + } catch (Exception e) { + e.printStackTrace(); + } + return dept; + } + +%> + + diff --git a/interface/transfer/testError.jsp b/interface/transfer/testError.jsp index 1d7250f..d863b26 100644 --- a/interface/transfer/testError.jsp +++ b/interface/transfer/testError.jsp @@ -1,64 +1,811 @@ -<%@ page import="weaver.conn.RecordSet" %> -<%@ page import="weaver.general.BaseBean" %> -<%@ page import="weaver.general.Util" %> -<%@ page import="com.alibaba.fastjson.JSONObject" %> -<%@ page import="com.alibaba.fastjson.JSONArray" %> -<%@ page import="java.util.regex.Pattern" %> -<%@ page import="java.util.regex.Matcher" %> +<%@ page import="org.apache.poi.xwpf.usermodel.XWPFDocument" %> +<%@ page import="cn.afterturn.easypoi.word.WordExportUtil" %> +<%@ page import="java.nio.charset.StandardCharsets" %> <%@ page import="java.io.*" %> <%@ page import="weaver.hrm.User" %> -<%@ page import="java.text.SimpleDateFormat" %> +<%@ page import="com.engine.workflow.cmd.requestForm.StatusDataCmd" %> +<%@ page import="com.engine.core.interceptor.CommandContext" %> +<%@ page import="com.api.workflow.service.RequestAuthenticationService" %> <%@ page import="java.util.*" %> -<%@ page language="java" contentType="text/html; charset=UTF-8"%> -<%@ page import="org.apache.http.impl.client.CloseableHttpClient" %> -<%@ page import="org.apache.http.impl.client.HttpClients" %> -<%@ page import="org.apache.http.client.methods.HttpPost" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.general.Util" %> <%@ page import="com.alibaba.fastjson.JSON" %> -<%@ page import="org.apache.http.entity.StringEntity" %> -<%@ page import="org.apache.http.client.methods.CloseableHttpResponse" %> -<%@ page import="org.apache.http.HttpStatus" %> -<%@ page import="org.apache.http.HttpEntity" %> -<%@ page import="org.apache.http.util.EntityUtils" %> -<%@ page import="org.apache.http.client.ClientProtocolException" %> -<%@ page import="weaver.hrm.HrmUserVarify" %> -<%@ page import="java.net.URL" %> -<%@ page import="java.net.HttpURLConnection" %> -<%@ page import="org.apache.http.HttpException" %> -<%@ page import="org.apache.http.client.HttpClient" %> -<%@ page import="org.apache.commons.httpclient.methods.PostMethod" %> -<%@ page import="org.apache.commons.httpclient.params.HttpMethodParams" %> -<%@ page import="org.apache.http.NameValuePair" %> -<%@ page import="org.apache.http.message.BasicNameValuePair" %> -<%@ page import="org.apache.http.client.entity.UrlEncodedFormEntity" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%@ page import="com.engine.common.util.ParamUtil" %> -<%@ page import="com.wbi.util.StringUtil" %> -<%@ page import="org.json.JSONException" %> -<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ page import="weaver.workflow.monitor.Monitor" %> +<%@ page import="weaver.workflow.workflow.WorkflowConfigComInfo" %> +<%@ page import="weaver.hrm.resource.ResourceComInfo" %> +<%@ page import="weaver.crm.Maint.CustomerInfoComInfo" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz" %> +<%@ page import="weaver.general.TimeUtil" %> +<%@ page import="com.api.workflow.util.ServiceUtil" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeBiz" %> +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="java.nio.charset.Charset" %> +<%@ page import="weaver.rtx.ChangeCharset" %> + <% - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if ("loginidweaver".equals(cookie.getName())) { - String cookieValue = cookie.getValue(); - // 使用cookieValue - out.print(cookieValue); - out.print(""); - } + response.setCharacterEncoding("utf-8"); + HashMap params = new HashMap<>(); + params.put("requestid", "727734"); + params.put("desremark", "all"); + params.put("pageSize", "50"); + params.put("isfirst", "true"); + params.put("request", request); + Map data = execute(params, new User(23)); + Map datas = (Map) data.get("datas"); + List> entries = new ArrayList<>(datas.entrySet()); + entries.sort(new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + Integer key1 = Util.getIntValue((Util.null2String(o1.getKey())).replace("key", "")); + Integer key2 = Util.getIntValue((Util.null2String(o2.getKey())).replace("key", "")); + return key1 - key2; + } + }); // 自然顺序 + ArrayList> results = new ArrayList<>(); + // out.print(JSONObject.toJSONString(entries)); + for (Map.Entry entry : entries) { + Map value = (Map)entry.getValue(); + List> list = (List)value.get("list"); + for (Map item : list) { + String operator = (String)item.get("operator"); + String operatorid = (String)item.get("operatorid"); + String operatortype = (String)item.get("operatortype"); + String operatedate = (String)item.get("operatedate"); + String nodename = (String)value.get("nodename"); + HashMap itemMap = new HashMap<>(); + itemMap.put("operator",operator); + itemMap.put("operatorid",operatorid); + itemMap.put("operatortype",operatortype); + itemMap.put("operatedate",operatedate); + itemMap.put("nodename",nodename); + results.add(itemMap); } + + } + + String encoding = System.getProperty("file.encoding"); + out.print(encoding); + + + try { + + + Map dataMap = new HashMap<>(); + dataMap.put("users", results); // 将用户列表添加到数据映射中 + // dataMap.put("name", results); // 将用户列表添加到数据映射中 + + // 加载模板并填充数据 + String templatePath = "/opt/weaver/filesys/template.docx"; // 模板文件路径 + String templatePath2 = "/opt/weaver/filesys/xinxi2.docx"; // 模板文件路径 + File file = new File(templatePath); + File file2 = new File(templatePath2); + // out.print(file.exists()); + // out.print(file2.exists()); + System.out.println(dataMap); + XWPFDocument doc = WordExportUtil.exportWord07(templatePath, dataMap); + + // 导出Word文档 + String lastname = new User(6473).getLastname(); + String outputPath = "/opt/weaver/filesys/"+lastname+".docx"; // 输出文件路径 + + // byte[] gbks = outputPath.getBytes("gbk"); + System.out.print(outputPath); + String outputPath1 = new String( outputPath.getBytes("UTF-8"),"ISO-8859-1"); + String outputPath2 = new String( outputPath1.getBytes("ISO-8859-1"),"UTF-8"); + + // ChangeCharset changeCharset = new ChangeCharset(); + // String outputPath1 = changeCharset.toUTF_8(outputPath); + System.out.print(outputPath1); + System.out.print(outputPath2); + + outputPath = new String(outputPath.getBytes("ISO8859_1"), "UTF-8"); + File file11 = new File(outputPath1); + File file22 = new File(outputPath2); + // if(!file1.exists()){ + file11.createNewFile(); + file22.createNewFile(); + // } + + + FileOutputStream fos = new FileOutputStream(outputPath) ; + doc.write(fos); + fos.close(); + } catch (Exception e) { + System.out.println("errorerrorerror"); + + System.out.println(e.getMessage()); + out.print(e.getMessage()+"123"); + e.printStackTrace(); } + + + + + + %> <%! + private void test1(ArrayList> results) { + try { + Map dataMap = new HashMap<>(); + dataMap.put("users", results); // 将用户列表添加到数据映射中 + // 加载模板并填充数据 + String templatePath = "/opt/weaver/filesys/xinxi.docx"; // 模板文件路径 + String templatePath2 = "/opt/weaver/filesys/xinxi2.docx"; // 模板文件路径 + File file = new File(templatePath); + File file2 = new File(templatePath2); + // out.print(file.exists()); + // out.print(file2.exists()); + System.out.println(dataMap); + XWPFDocument doc = WordExportUtil.exportWord07(templatePath, dataMap); + + // 导出Word文档 + String lastname = new User(22).getLastname(); + String outputPath = "/opt/weaver/filesys/"+lastname+".docx"; // 输出文件路径 + + // byte[] gbks = outputPath.getBytes("gbk"); + String outputPath1 = new String( outputPath.getBytes("UTF-8")); + // outputPath = new String(outputPath.getBytes("ISO8859_1"), "UTF-8"); + File file1 = new File(outputPath1); + if(!file1.exists()){ + file1.createNewFile(); + } + + + // FileOutputStream fos = new FileOutputStream(outputPath) ; + // doc.write(fos); + // fos.close(); + } catch (Exception e) { + System.out.println("errorerrorerror"); + + System.out.println(e.getMessage()); + // out.print(e.getMessage()+"123"); + e.printStackTrace(); + } + } + + + public Map execute(Map params, User user) { + Map result = new HashMap(); + RequestAuthenticationService authService = new RequestAuthenticationService(); + authService.setUser(user); + + long date1 = new Date().getTime(); + try { + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + int pageSize = Util.getIntValue(Util.null2String(params.get("pageSize")), 30); + int desrequestid = Util.getIntValue(Util.null2String(params.get("desrequestid")), 0); + String isfirst = Util.null2String(params.get("isfirst")); + String isurger = Util.null2String(params.get("isurger")); + String desremark = Util.null2String(params.get("desremark")); + int desremarkIndex = desremark.indexOf("_"); + boolean isAdSearch = false;//是否有过滤条件 + if (desremarkIndex > -1) { + isAdSearch = true; + desremark = desremark.substring(0, desremarkIndex); + } + String parameter = Util.null2String(params.get("parameter")); + int selectedNode = Util.getIntValue(Util.null2String(params.get("selectedNode")), -1);//选中的节点 + String selectedOperator = Util.null2String(params.get("selectedOperator"));//选中的操作者 + int requestid = Util.getIntValue(Util.null2String(params.get("requestid")), 0); + int workflowid = -1; + rs.executeQuery("select workflowid from workflow_requestbase where requestid=" + requestid); + if (rs.next()) + workflowid = Util.getIntValue(rs.getString("workflowid")); + + // 将json字符串转换成jsonObject + int currentMaxId = 0; + int currentMinId = 0; + int currentId = 0; + int currentId2 = 0; + int lastNodeId = 0; + String viewlogids = ""; + int index = 0; + try { + if (!"true".equals(isfirst)) { + Map parameterMap = JSON.parseObject(parameter, Map.class);//Weibo类在下边定义 + currentMaxId = Util.getIntValue(parameterMap.get("currentMaxId"), 0); + currentMinId = Util.getIntValue(parameterMap.get("currentMinId"), 0); + String currentId12 = Util.null2String(parameterMap.get("currentId")); + if (currentId12.contains("_")) { + String[] currentId12Arr = currentId12.split("_"); + currentId = Util.getIntValue(currentId12Arr[0]); + currentId2 = Util.getIntValue(currentId12Arr[1]); + } else { + currentId = Util.getIntValue(currentId12); + } + viewlogids = Util.null2String(parameterMap.get("viewlogids")); + index = Util.getIntValue(parameterMap.get("nodeindex"), 0); + lastNodeId = Util.getIntValue(parameterMap.get("lastNodeId"), 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + Map putpara = new HashMap(); + + Monitor monitor = new Monitor(); +// String joinStr = ("oracle".equalsIgnoreCase(rs.getDBType()) || "mysql".equalsIgnoreCase(rs.getDBType())) ? " left join " : " left hash join "; + String joinStr = " left join "; +// if (isurger.equals("true") || monitor.hasMonitor(requestid+"", user.getUID() + "")) { +// StringBuffer sqlsb = new StringBuffer(); +// sqlsb.append(" select a.id,a.nodeid, "); +// sqlsb.append(" b.nodename, "); +// sqlsb.append(" a.userid, "); +// sqlsb.append(" a.isremark, "); +// sqlsb.append(" a.lastisremark, "); +// sqlsb.append(" a.usertype, "); +// sqlsb.append(" a.agentorbyagentid, "); +// sqlsb.append(" a.agenttype, "); +// sqlsb.append(" a.receivedate, "); +// sqlsb.append(" a.receivetime, "); +// sqlsb.append(" a.operatedate, "); +// sqlsb.append(" a.operatetime, "); +// sqlsb.append(" a.viewtype, "); +// sqlsb.append(" a.nodetype "); +// sqlsb.append(" ,a.operator "); +// sqlsb.append(" from (SELECT distinct top ").append(pageSize); +// sqlsb.append(" o.id, " ); +// sqlsb.append(" o.requestid, " ); +// sqlsb.append(" o.userid, "); +// sqlsb.append(" o.workflowid, "); +// sqlsb.append(" o.workflowtype, "); +// sqlsb.append(" o.isremark, "); +// sqlsb.append(" o.lastisremark, "); +// sqlsb.append(" o.usertype, "); +// sqlsb.append(" o.nodeid, "); +// sqlsb.append(" o.agentorbyagentid, "); +// sqlsb.append(" o.agenttype, "); +// sqlsb.append(" o.receivedate, "); +// sqlsb.append(" o.receivetime, "); +// sqlsb.append(" o.viewtype, "); +// sqlsb.append(" o.iscomplete, "); +// sqlsb.append(" o.operatedate, "); +// sqlsb.append(" o.operatetime, "); +// sqlsb.append(" nodetype "); +// sqlsb.append(" ,wr.operator "); +// sqlsb.append(" FROM workflow_currentoperator o "); +// +// sqlsb.append(" left join workflow_requestlog wr"); +// sqlsb.append(" on wr.requestid=o.requestid"); +// sqlsb.append(" and wr.nodeid=o.nodeid"); +// sqlsb.append(" and wr.operator = o.userid"); +// sqlsb.append(" and wr.logtype <> '1'"); +// +// sqlsb.append(" , workflow_flownode "); +// +// sqlsb.append(" where o.nodeid = "); +// sqlsb.append(" workflow_flownode.nodeid "); +// if(desremark ==1){//1:已提交 +// sqlsb.append(" AND o.isremark='2' AND wr.operator IS NOT null "); +// }else if(desremark == 2){//2:未提交 +// sqlsb.append(" and ((o.isremark = '0' and (o.takisremark is null or o.takisremark=0)) or o.isremark in ('1','5','7','8','9') )"); +// }else if(desremark == 3){//3:已查看 +// sqlsb.append(" and (((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','4','5','7','8','9')) AND o.viewtype IN (-1,-2)) "); +// }else if(desremark == 4){//4:未查看 +// sqlsb.append(" AND o.viewtype = 0 "); +// } +// sqlsb.append(" and o.id > ").append(currentId); +// sqlsb.append(" and o.requestid = " + requestid + ") a, "); +// sqlsb.append(" workflow_nodebase b "); +// sqlsb.append(" where a.nodeid = b.id "); +// sqlsb.append(" and a.requestid = " + requestid + " "); +// sqlsb.append(" and a.agenttype <> 1 "); +// sqlsb.append(" order by a.id "); +// //System.out.println("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); +// rs.executeSql(sqlsb.toString()); +// +// } else { + // 处理相关流程的查看权限 +// if ("".equals(viewlogids)) { +// viewlogids = this.getViewLogids(); +// } + StringBuffer sqlsb = new StringBuffer(); + if ("sqlserver".equalsIgnoreCase(rs.getDBType())) { // sqlserver 排序提到这里 + sqlsb.append(" select top ").append(pageSize).append(" a.id,a.nodeid, "); + } else { + sqlsb.append(" select a.id,a.nodeid, "); + } + sqlsb.append("(CASE WHEN a.nodeid < -1 THEN (SELECT nodename FROM workflow_freenode t WHERE t.id = a.nodeid) ELSE (SELECT nodename FROM workflow_nodebase t1 WHERE t1.id = a.nodeid) END) AS nodename,"); + sqlsb.append(" a.userid, "); + sqlsb.append(" a.isremark, "); + sqlsb.append(" a.preisremark, "); + sqlsb.append(" a.lastisremark, "); + sqlsb.append(" a.usertype, "); + sqlsb.append(" a.agentorbyagentid, "); + sqlsb.append(" a.agenttype, "); + sqlsb.append(" a.receivedate, "); + sqlsb.append(" a.receivetime, "); + sqlsb.append(" a.operatedate, "); + sqlsb.append(" a.operatetime, "); + sqlsb.append(" a.processuser, "); + sqlsb.append(" a.viewtype, "); + sqlsb.append(" a.nodetype "); + sqlsb.append(" ,a.operator "); + sqlsb.append(" ,a.tab "); + //if("true".equals(isfirst)){ + /*if("oracle".equals(rs.getDBType()) || "mysql".equals(rs.getDBType())){ + sqlsb.append(" from (SELECT distinct "); + }else{ + sqlsb.append(" from (SELECT distinct top ").append(pageSize); // sqlserver排序提到外层查询 + }*/ + sqlsb.append(" from (SELECT distinct "); +// }else{ +// sqlsb.append(" from (SELECT distinct "); +// } + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" o.workflowtype, "); + //workflow_otheroperator表中isremark为字符型,这里转下字符 + if (rs.getDBType().toLowerCase().equals("oracle") || rs.getDBType().toLowerCase().equals("postgresql")) { + sqlsb.append(" to_char(o.isremark) as isremark, "); + sqlsb.append(" to_char(o.preisremark) AS preisremark, "); + sqlsb.append(" to_char(o.lastisremark) AS lastisremark, "); + } else if (rs.getDBType().toLowerCase().equals("mysql")) { + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.preisremark, "); + sqlsb.append(" o.lastisremark, "); + } else { + sqlsb.append(" cast(o.isremark as varchar) as isremark, "); + sqlsb.append(" cast(o.preisremark as varchar) as preisremark, "); + sqlsb.append(" cast(o.lastisremark as varchar) as lastisremark, "); + } + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" o.agentorbyagentid, "); + sqlsb.append(" o.agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" o.iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" o.processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype "); + sqlsb.append(" ,wr.operator "); + sqlsb.append(" ,1 as tab "); + sqlsb.append(" FROM workflow_currentoperator o "); + sqlsb.append(" " + joinStr + " workflow_requestlog wr"); + sqlsb.append(" on wr.requestid=o.requestid"); + sqlsb.append(" and wr.nodeid=o.nodeid"); + sqlsb.append(" and wr.operator = o.userid"); + sqlsb.append(" and wr.logtype <> '1'"); + sqlsb.append(" and o.operatedate = wr.operatedate"); + sqlsb.append(" and o.operatetime = wr.operatetime");//再通过时间关联一下,防止流程状态操作状态显示错误 + sqlsb.append(" where o.id > ").append(currentId); + if ("submit".equals(desremark)) {//1:已提交----isremark等于4,preisremark=11实际对应已提交数据 + sqlsb.append(" AND (o.isremark='2' or (o.isremark=4 and o.preisremark=11)) AND (wr.operator IS NOT null or o.userid = o.processuser)"); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + sqlsb.append(" AND( (o.isremark != '2' AND o.isremark != '4') OR (o.isremark = '4' AND o.viewtype = 0 and o.preisremark != 11) ) "); + } else if ("view".equals(desremark)) {//3:已查看 + sqlsb.append(" and ((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','5','7','8','9','11') or (o.isremark=4 and o.preisremark!=11)) AND o.viewtype IN (-1,-2) "); + } else if ("noview".equals(desremark)) {//4:未查看 + sqlsb.append(" AND o.viewtype=0 AND (o.isremark IN ('0','1','5','7','8','9','11') or (o.isremark = '2' AND wr.operator IS NULL) or (o.isremark=4 and o.preisremark!=11)) "); + } + sqlsb.append(" and o.requestid = " + requestid); + sqlsb.append(" union "); + sqlsb.append(" SELECT DISTINCT "); + sqlsb.append(" o.id, "); + sqlsb.append(" o.requestid, "); + sqlsb.append(" o.userid, "); + sqlsb.append(" o.workflowid, "); + sqlsb.append(" 0 as workflowtype, "); + sqlsb.append(" o.isremark, "); + sqlsb.append(" o.isremark as preisremark, "); + sqlsb.append(" o.isremark as lastisremark, "); + sqlsb.append(" o.usertype, "); + sqlsb.append(" o.nodeid, "); + sqlsb.append(" 0 as agentorbyagentid, "); + sqlsb.append(" '0' as agenttype, "); + sqlsb.append(" o.receivedate, "); + sqlsb.append(" o.receivetime, "); + sqlsb.append(" o.viewtype, "); + sqlsb.append(" 1 as iscomplete, "); + sqlsb.append(" o.operatedate, "); + sqlsb.append(" o.operatetime, "); + sqlsb.append(" wr.operator as processuser, "); + sqlsb.append("(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype, "); + sqlsb.append(" wr.operator "); + sqlsb.append(" ,2 as tab "); + sqlsb.append(" FROM workflow_otheroperator o LEFT JOIN workflow_requestlog wr ON wr.requestid = o.requestid "); + sqlsb.append(" AND wr.nodeid = o.nodeid "); + sqlsb.append(" AND wr.operator = o.userid "); + sqlsb.append(" AND wr.logtype <> '1' "); + sqlsb.append(" WHERE o.requestid = " + requestid + " "); + sqlsb.append(" and o.id > ").append(currentId2); + sqlsb.append(" ) a "); + sqlsb.append(" where a.requestid = " + requestid + " "); + sqlsb.append(" and a.agenttype <> 1 "); + if (!"".equals(viewlogids)) { + sqlsb.append(" and a.nodeid in (" + viewlogids + ") "); + } + if (selectedNode != -1) { + sqlsb.append(" AND a.nodeid = " + selectedNode + " "); + } + if (!"".equals(selectedOperator)) { + sqlsb.append(" AND a.userid = " + selectedOperator + " "); + } + + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + boolean showdelFreeNodeInfo = "1".equals(configComInfo.getValue("showdelete_freenode_info")); + + sqlsb.append(" and (a.nodeid > -1 or (a.nodeid < -1 and exists (select id from workflow_freenode where id = a.nodeid and requestid = " + requestid + (showdelFreeNodeInfo ? "" : " and groupid > 0 ") + " ))) "); + + //搜索时返回状态 + if (isAdSearch && "true".equals(isfirst)) { + rs.executeQuery("select count(id) as count from (" + sqlsb.toString().replace("top " + pageSize, "") + ") t"); + result.put("countTime", new Date().getTime() - date1); + if (rs.next()) { + result.put("count", Util.null2String(rs.getString("count"))); + } + } + + sqlsb.append(" order by a.receivedate, a.receivetime,a.id , a.nodetype"); + + //System.out.println("20170309 =====> sqlsb.toString() = "+sqlsb.toString()); + if ("oracle".equals(rs.getDBType())) { //必须排序后再限制rownum + String sql_oracle = sqlsb.toString(); + sqlsb.setLength(0); + sqlsb.append("select * from (" + sql_oracle + ") where rownum < ").append(pageSize); + } else if ("mysql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } else if ("postgresql".equals(rs.getDBType())) { + sqlsb.append(" LIMIT " + pageSize); + } + if (requestid > 0) { + rs.executeSql(sqlsb.toString()); + } + result.put("dataTime", new Date().getTime() - date1); +// } + List> statuslist = new ArrayList>(); + int tmpnodeid = 0; + while (rs.next()) { + int tab = rs.getInt("tab"); + if (tab == 1) { + currentId = rs.getInt("id"); + } else { + currentId2 = rs.getInt("id"); + } + tmpnodeid = rs.getInt("nodeid"); + String tmpnodename = rs.getString("nodename"); + Map nodekv = null; + if (statuslist.size() == 0) { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } else { + Map temmap = statuslist.get(statuslist.size() - 1); + int tnodeid = Util.getIntValue(temmap.get("nodeid"), 0); + if (tnodeid == tmpnodeid) { + nodekv = temmap; + } else { + currentMinId = currentId; + nodekv = new HashMap(); + statuslist.add(nodekv); + } + } + nodekv.put("nodeid", tmpnodeid + ""); + nodekv.put("nodename", tmpnodename + ""); + } + int nextlistcount = 0; + int nextsubmitCount = 0; + int nextviewCount = 0; + int nextnoviewCount = 0; + if ("all".equals(desremark) && !isAdSearch) { + currentMaxId = currentId; + String maxsql = " select a.id,a.nodeid from workflow_currentoperator a where a.id > " + currentId + " and a.requestid=" + requestid + " order by a.id ,a.receivedate, a.receivetime"; + rs1.executeSql(maxsql); + while (rs1.next()) { + int currentid = rs1.getInt("id"); + int currentnodeid = rs1.getInt("nodeid"); + if (currentnodeid == tmpnodeid) { + currentMaxId = currentid; + } else { + break; + } + } + String listcountsql = " select count(id) num from workflow_currentoperator where id > " + currentId + " and id <= " + currentMaxId + " and requestid=" + requestid + " and nodeid=" + tmpnodeid + " and agenttype <> 1 and usertype <> 1 "; + //String submitCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid +" and agenttype <> 1 and usertype <> 1 and isremark = 2 and exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and workflow_requestlog.operator=workflow_currentoperator.userid )"; + //String viewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 and (viewtype = -1 or viewtype=-2) and ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + //String noviewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 AND viewtype=0 AND (isremark IN ('0','1','4','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) "; + String submitCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.isremark = 2 and wr.operator is NOT null "; + String viewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype IN (-1,-2) and ((wc.isremark = '2' AND wr.operator IS NULL) or wc.isremark in ('0','1','4','5','7','8','9')) "; + String noviewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype=0 AND (wc.isremark IN ('0','1','4','5','7','8','9','11') or (wc.isremark = '2' and wr.operator is null )) "; + rs1.executeSql(listcountsql); + while (rs1.next()) { + nextlistcount = rs1.getInt("num"); + } + rs1.executeSql(submitCountsql); + while (rs1.next()) { + nextsubmitCount = rs1.getInt("num"); + } + rs1.executeSql(viewCountsql); + while (rs1.next()) { + nextviewCount = rs1.getInt("num"); + } + rs1.executeSql(noviewCountsql); + while (rs1.next()) { + nextnoviewCount = rs1.getInt("num"); + } + } + + Map allstatusmap = new HashMap(); + Map submitstatusmap = new HashMap(); + Map nosubmitstatusmap = new HashMap(); + Map viewstatusmap = new HashMap(); + Map noviewstatusmap = new HashMap(); + //提交节点信息--滚动加载到当前currentoperator对应最大id + + //数字统计转到新接口count中 + ResourceComInfo resourceComInfo = new ResourceComInfo(); + CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo(); + Map all_nodemap = new HashMap(); + Map submit_nodemap = new HashMap(); + Map nosubmit_nodemap = new HashMap(); + Map view_nodemap = new HashMap(); + Map noview_nodemap = new HashMap(); + + rs.beforFirst(); + int currentnum = 0; + for (Iterator> it = statuslist.iterator(); it.hasNext(); index++) { + + Map nodekv = it.next(); + int fnodeid = Util.getIntValue(nodekv.get("nodeid")); + String namename = nodekv.get("nodename"); + int submitCount = 0; + int viewCount = 0; + int noviewCount = 0; + int listcount = 0; + if ("false".equals(isfirst) && currentnum == 0 && lastNodeId == fnodeid) { + index -= 1; + } + if (tmpnodeid == fnodeid && currentnum == (statuslist.size() - 1)) { + submitCount = nextsubmitCount; + viewCount = nextviewCount; + noviewCount = nextnoviewCount; + listcount = nextlistcount; + } + currentnum++; + Map all_nodemap_in = new HashMap(); + all_nodemap_in.put("nodeid", fnodeid); + all_nodemap_in.put("nodename", namename); + Map submit_nodemap_in = new HashMap(); + Map nosubmit_nodemap_in = new HashMap(); + Map view_nodemap_in = new HashMap(); + Map noview_nodemap_in = new HashMap(); + + List> nodeallstatuslist = new ArrayList>(); + List> nodesubmitstatuslist = new ArrayList>(); + List> nodenosubmitstatuslist = new ArrayList>(); + List> nodeviewstatuslist = new ArrayList>(); + List> nodenoviewstatuslist = new ArrayList>(); + + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.putAll(all_nodemap_in); + submitstatusmap.put("datas", submit_nodemap); + submit_nodemap.put("key" + index, submit_nodemap_in); + submit_nodemap_in.put("list", nodesubmitstatuslist); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.putAll(all_nodemap_in); + nosubmitstatusmap.put("datas", nosubmit_nodemap); + nosubmit_nodemap.put("key" + index, nosubmit_nodemap_in); + nosubmit_nodemap_in.put("list", nodenosubmitstatuslist); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.putAll(all_nodemap_in); + viewstatusmap.put("datas", view_nodemap); + view_nodemap.put("key" + index, view_nodemap_in); + view_nodemap_in.put("list", nodeviewstatuslist); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.putAll(all_nodemap_in); + noviewstatusmap.put("datas", noview_nodemap); + noview_nodemap.put("key" + index, noview_nodemap_in); + noview_nodemap_in.put("list", nodenoviewstatuslist); + } else { + //所有节点信息 + allstatusmap.put("datas", all_nodemap); + all_nodemap.put("key" + index, all_nodemap_in); + all_nodemap_in.put("list", nodeallstatuslist); + } + + boolean islight = false; + RobotNodeServiceBiz robotNodeServiceBiz = new RobotNodeServiceBiz(); + while (rs.next()) { + int tmpnodeid1 = rs.getInt("nodeid"); + + if (tmpnodeid1 != fnodeid) { + rs.previous(); + break; + } + + //String tmpnodename = rs.getString("nodename"); + int tmpcurrid = rs.getInt("id"); + String tmpuserid = rs.getString("userid"); + String tmpisremark = Util.null2String(rs.getString("isremark")); + if (tmpisremark.equals("")) { + tmpisremark = Util.null2String(rs.getString("lastisremark")); + } + int tmpusertype = rs.getInt("usertype"); + String tmpagentorbyagentid = rs.getString("agentorbyagentid"); + int tmpagenttype = rs.getInt("agenttype"); + String tmpreceivedate = rs.getString("receivedate"); + String tmpreceivetime = rs.getString("receivetime"); + String tmpoperatedate = rs.getString("operatedate"); + String tmpoperatetime = rs.getString("operatetime"); + String viewtype = rs.getString("viewtype"); + String nodetype = rs.getString("nodetype"); + int preisremark = rs.getInt("preisremark"); + String processuser = rs.getString("processuser"); + boolean flags = false; + String tmpIntervel = ""; + // 如果tmpisremark=2 判断时候在日志表里有该人(确定是否是由非会签得到的isremark=2) + + String operator = rs.getString("operator"); + if (operator != null && !"".equals(operator)) { + flags = true; + } + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && tmpoperatedate != null && !tmpoperatedate.equals("")) { + tmpIntervel = TimeUtil.timeInterval2(tmpreceivedate + " " + tmpreceivetime, tmpoperatedate + " " + tmpoperatetime, user.getLanguage()); + } + islight = !islight; + Map _statusmap = new HashMap(); + // 操作人 + String _statususername = ""; + String _operatorid = ""; + String _beagentid = ""; + String _beagentname = ""; + String _operatortype = "0"; + if (tmpusertype == 0) { + _operatorid = tmpuserid; + _statususername = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpuserid)); + if (tmpagenttype == 2) { //代理情况 + _beagentid = tmpagentorbyagentid; + _beagentname = ServiceUtil.convertChar(resourceComInfo.getResourcename(tmpagentorbyagentid)); + } + _statusmap.put("operatorImg", resourceComInfo.getMessagerUrls(tmpuserid)); + _statusmap.put("operatorImgDefName", _statususername); + } else if (RobotNodeBiz.operatortype.equals(tmpusertype + "")) { + _statususername = Util.formatMultiLang(robotNodeServiceBiz.getRobotNodeSet(tmpnodeid1).getOperatorName()); + _operatorid = tmpuserid; + _operatortype = "2"; + } else { + _operatorid = tmpuserid; + _operatortype = "1"; + _statususername = ServiceUtil.convertChar(customerInfoComInfo.getCustomerInfoname(tmpuserid)); + } + + // 查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 8:退回 9:被撤回 + int _statusCode = 0; + + if (preisremark != 8 && (tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + _statusCode = 3; + submitCount++; + if ("4".equals(nodetype) && preisremark == 0) { + _statusCode = 7; + } + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + _statusCode = 2; + viewCount++; + } else { + _statusCode = 1; + noviewCount++; + } + } else if ("s".equals(tmpisremark)) { + _statusCode = 4; + } else if ("r".equals(tmpisremark)) { + _statusCode = 6; + } else if ("c".equals(tmpisremark)) { + _statusCode = 5; + } else if (preisremark == 8 && viewtype.equals("-2") && tmpisremark.equals("2")) { + _statusCode = 2; + viewCount++; + } + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery("select operatetype from workflow_currentoperator where id=?", tmpcurrid); + if (recordSet.next()) { + int operatetype = recordSet.getInt(1); + if (operatetype == 3) {//退回 + _statusCode = 8; + } else if (operatetype == 4) {//被撤回 + _statusCode = 9; + } + } + + + listcount++; + if ("view".equals(desremark)) {//3:已查看 + if (processuser.equals(tmpuserid) && ("2".equals(tmpisremark) || "4".equals(tmpisremark))) { + listcount--; + } + } + String _receivedate = ""; + String _operatedate = ""; + String _intervel = ""; + + if (!tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + _receivedate = Util.toScreen(tmpreceivedate, user.getLanguage()) + " " + Util.toScreen(tmpreceivetime, user.getLanguage()); + } + _operatedate = Util.toScreen(tmpoperatedate, user.getLanguage()) + " " + Util.toScreen(tmpoperatetime, user.getLanguage()); + + _intervel = Util.toScreen(tmpIntervel, user.getLanguage()); + + _statusmap.put("statuscode", String.valueOf(_statusCode)); + _statusmap.put("operator", _statususername); + _statusmap.put("receivedate", _receivedate); + _statusmap.put("operatedate", _operatedate); + _statusmap.put("intervel", _intervel); + _statusmap.put("operatorid", _operatorid); + _statusmap.put("operatortype", _operatortype); + _statusmap.put("beagentid", _beagentid); + _statusmap.put("beagentname", _beagentname); + _statusmap.put("nodetype", nodetype); + + //所有节点 + nodeallstatuslist.add(_statusmap); + //查看状态 1:未查看, 2::以查看, 3:已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 + if ((tmpisremark.equals("2") || (tmpisremark.equals("4") && preisremark == 11)) && (flags || tmpuserid.equals(processuser))) { + nodesubmitstatuslist.add(_statusmap); + } else if (tmpisremark.equals("0") || tmpisremark.equals("1") || tmpisremark.equals("5") || tmpisremark.equals("4") || tmpisremark.equals("8") || tmpisremark.equals("9") || tmpisremark.equals("7") || tmpisremark.equals("11") || (tmpisremark.equals("2") && !flags)) { + if (viewtype.equals("-2") || (viewtype.equals("-1") && !tmpoperatedate.equals(""))) { + nodeviewstatuslist.add(_statusmap); + } else if (viewtype.equals("0")) { + nodenoviewstatuslist.add(_statusmap); + } + } + + if ((!tmpisremark.equals("2") && !tmpisremark.equals("4")) || (tmpisremark.equals("4") && viewtype.equals("0"))) { + if (!tmpisremark.equals("s") && !tmpisremark.equals("s") && !tmpisremark.equals("c") && !tmpisremark.equals("r")) { + nodenosubmitstatuslist.add(_statusmap); + } + } + } + //--已提交、已查看、未查看 + all_nodemap_in.put("submitCount", submitCount);//--已提交 + all_nodemap_in.put("viewCount", viewCount);//--已查看 + all_nodemap_in.put("noviewCount", noviewCount);//--未查看 + if ("submit".equals(desremark)) {//1:已提交 + //提交节点信息 + submit_nodemap_in.put("listcount", listcount); + result.putAll(submitstatusmap); + } else if ("nosubmit".equals(desremark)) {//2:未提交 + nosubmit_nodemap_in.put("listcount", listcount); + result.putAll(nosubmitstatusmap); + } else if ("view".equals(desremark)) {//3:已查看 + view_nodemap_in.put("listcount", listcount); + result.putAll(viewstatusmap); + } else if ("noview".equals(desremark)) {//4:未查看 + noview_nodemap_in.put("listcount", listcount); + result.putAll(noviewstatusmap); + } else { + //所有节点信息 + all_nodemap_in.put("listcount", listcount); + result.putAll(allstatusmap); + } + lastNodeId = fnodeid; + } +// if(maxid == currentMaxId){ +// isfinish = 1; +// } + putpara.put("nodeindex", index + ""); + putpara.put("currentMaxId", currentMaxId + ""); + putpara.put("currentMinId", currentMinId + ""); + putpara.put("currentId", currentId + "_" + currentId2); + putpara.put("lastNodeId", lastNodeId + ""); + putpara.put("viewlogids", viewlogids + ""); + result.put("parameter", putpara); + result.put("otherTime", new Date().getTime() - date1); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + %> diff --git a/interface/transfer/testError2.jsp b/interface/transfer/testError2.jsp new file mode 100644 index 0000000..6e1be93 --- /dev/null +++ b/interface/transfer/testError2.jsp @@ -0,0 +1,99 @@ + +<%@ page import="java.io.*" %> +<%@ page import="weaver.hrm.User" %> +<%@ page import="java.util.*" %> +<%@ page import="freemarker.template.Configuration" %> +<%@ page import="freemarker.template.TemplateExceptionHandler" %> +<%@ page import="freemarker.template.Template" %> +<%@ page import="java.nio.charset.StandardCharsets" %> + + +<% + String TemplatePath = "/opt/weaver/filesys/"; + //String TemplateName = "html模版.ftl"; + String TemplateName = "qwer.ftl"; + Map root = new HashMap<>(); + // root.put("title", "期末成绩表"); + + ArrayList list = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("lastname",new User(22).getLastname() ); + map.put("subject", new User(22).getLastname() ); + map.put("achievement", "98"); + list.add(map); + Map map2 = new HashMap<>(); + map2.put("lastname", new User(22).getLastname() ); + map2.put("subject", new User(22).getLastname()); + map2.put("achievement", "97"); + list.add(map2); + list.add(map2); + list.add(map2); + list.add(map2); + list.add(map2); + + ArrayList lists = new ArrayList(); + root.put("achievementList", list); + lists.add(root); + lists.add(root); + lists.add(root); + + Map roots = new HashMap(); + System.out.println(lists.size()); + roots.put("testlist",lists); + //generate(TemplatePath, TemplateName, root, "shengcheng.html"); + generate(TemplatePath, TemplateName, roots, "shengcheng1.docx"); + +%> + +<%! + /** + * @param TemplatePath 模版存放目录 + * @param TemplateName 模版名 + * @param root 填充的数据 + * @param GenerateFilename 生成文件名 + * @throws Exception + */ + public static void generate(String TemplatePath, String TemplateName, Map root, String GenerateFilename) throws Exception { + Configuration cfg = new Configuration(); + //指定模板文件的来源目录 + cfg.setDirectoryForTemplateLoading(new File(TemplatePath)); + cfg.setDefaultEncoding("UTF-8"); + //设置错误的显示方式(日志) + //在生产系统中:TemplateExceptionHandler.RETHROW_HANDLER 默认值 + //在开发HTML模板期间:TemplateExceptionHandler.HTML_DEBUG_HANDLER + //在开发非HTML模板期间:TemplateExceptionHandler.DEBUG_HANDLER + cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + + + //获取模板文件 + Template temp = cfg.getTemplate(TemplateName); + //合并模板和数据模型 + File file = new File(TemplatePath + "new-built"); + //如果文件夹不存在,则创建文件夹 + if (!file.exists()) { + //file.mkdirs();//多级目录 + file.mkdir();//只创建一级目录 + } + //Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(TemplatePath + "new-built/" + GenerateFilename)));//输出文件 + // FileWriter out = new FileWriter(TemplatePath + "new-built/" + GenerateFilename); + //Writer out = new OutputStreamWriter(System.out);//输出控制台 + //StringWriter out = new StringWriter();//输出为字符串,可作为接口动态返回 + + + FileOutputStream fos = new FileOutputStream(TemplatePath + "new-built/" + GenerateFilename); + Writer out = new OutputStreamWriter(fos, StandardCharsets.UTF_8); + temp.process(root, out); + out.flush();//可不手动调用 + } + + public static String codeUtf8(String text) { + String ISOtext = null; + ISOtext = new String(text.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + return new String(ISOtext.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + + } + +%> + + diff --git a/interface/transfer/testError3.jsp b/interface/transfer/testError3.jsp new file mode 100644 index 0000000..70e1043 --- /dev/null +++ b/interface/transfer/testError3.jsp @@ -0,0 +1,52 @@ +<%@ page import="org.apache.poi.xwpf.usermodel.XWPFDocument" %> +<%@ page import="cn.afterturn.easypoi.word.WordExportUtil" %> +<%@ page import="java.nio.charset.StandardCharsets" %> +<%@ page import="java.io.*" %> +<%@ page import="weaver.hrm.User" %> +<%@ page import="com.engine.workflow.cmd.requestForm.StatusDataCmd" %> +<%@ page import="com.engine.core.interceptor.CommandContext" %> +<%@ page import="com.api.workflow.service.RequestAuthenticationService" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="com.alibaba.fastjson.JSON" %> +<%@ page import="weaver.workflow.monitor.Monitor" %> +<%@ page import="weaver.workflow.workflow.WorkflowConfigComInfo" %> +<%@ page import="weaver.hrm.resource.ResourceComInfo" %> +<%@ page import="weaver.crm.Maint.CustomerInfoComInfo" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz" %> +<%@ page import="weaver.general.TimeUtil" %> +<%@ page import="com.api.workflow.util.ServiceUtil" %> +<%@ page import="com.engine.workflow.biz.RobotNode.RobotNodeBiz" %> +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="java.nio.charset.Charset" %> +<%@ page import="weaver.rtx.ChangeCharset" %> +<%@ page import="weaver.soa.workflow.request.RequestService" %> +<%@ page import="weaver.soa.workflow.request.RequestInfo" %> +<%@ page import="weaver.interfaces.workflow.action.WorkflowToDoc" %> +<%@ page import="weaver.workflow.request.RequestManager" %> +<%@ page import="com.engine.custom.archives.action.WorkflowToDocCus" %> +<%@ page import="okhttp3.*" %> +<%@ page import="weaver.docs.docs.DocRecycleManager" %> + + +<% + response.setCharacterEncoding("utf-8"); + String requestid = "607615"; + RequestService requestService = new RequestService(); + RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); + out.print(JSONObject.toJSONString(requestInfo)); +%> + +<%! + + public static void deleteDocByid(String docid){ + DocRecycleManager docRecycleManager=new DocRecycleManager(); + User user = new User(1); + docRecycleManager.moveDocToRecycle(user.getUID(), user.getLogintype(), Util.getIntValue(docid), "127.0.0.1"); + docRecycleManager.deleteDocFromRecycle(user.getUID(), user.getLogintype(), weaver.general.Util.getIntValue(docid), "127.0.0.1"); + } + +%> + + diff --git a/interface/transfer/testPost.jsp b/interface/transfer/testPost.jsp new file mode 100644 index 0000000..7c13c35 --- /dev/null +++ b/interface/transfer/testPost.jsp @@ -0,0 +1,99 @@ +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="java.util.*" %> +<%@ page import="com.engine.common.util.ParamUtil" %> +<%@ page import="com.alibaba.fastjson.JSONArray" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="java.sql.Array" %> +<%@ page import="com.wbi.util.Util" %> +<%@ page import="java.math.BigDecimal" %> +<%@ page import="tebie.applib.api.O" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + + +<% + Map param = ParamUtil.request2Map(request); + String[] yffieldArr = {"y4","y5","y6","y7","y8","y9","y10","y11","y12","y1","y2","y3"}; + + List yffieldList = new ArrayList<>(Arrays.asList(yffieldArr)); + + // out.print(JSONObject.toJSONString(param)); + String sql = "select zx. *,kyb.ky ,jz.syry from " + + "uf_axyssjzx zx " + + "left join (select a.budget,ISNULL(nky,0)-ISNULL(am,0) as ky from " + + "(select sum(budgetAmount) nky, depart,subject,budget,year ,departMemberId,subjectMemberId,budgetMemberId,yearMemberId " + + "from FnaMultiBudgetAX_3 " + + "group by depart,subject,budget,year ,departMemberId,subjectMemberId,budgetMemberId,yearMemberId) a " + + "left join (select sum(amount) am,budgetMember_1, budgetMember_2 , budgetMember_3 ,budgetMember_4 from FnaExpenseInfo_3_2 " + + "where expenseStaus= 1 or expenseStaus= 0 group by budgetMember_1, budgetMember_2 , budgetMember_3 ,budgetMember_4 ) b " + + "on a.budget = b.budgetMember_3 where a.budget is not null and a.budget != 'null') kyb " + + "on zx.id = kyb.budget " + + "left join matrixtable_33 jz " + + "on zx.YSBMYSBS = jz.ysbm " + + "WHERE zx.zt = 0"; + String data = (String) param.get("data"); + String sxyf = "y"+(String) param.get("sxyf"); + + int index = yffieldList.indexOf(sxyf); + // out.print("sxyf=====>"+sxyf); + // out.print("
"); + // out.print("index=====>"+index); + // out.print("
"); + List subList = new ArrayList<>(); + if (index != -1) { + subList = yffieldList.subList(index , yffieldList.size()); + System.out.println(subList); // 打印剩余元素 + } + // out.print("subList=====>"+subList); + // out.print("
"); + RecordSet recordSet = new RecordSet(); + JSONArray objects = JSONObject.parseArray(data); + ArrayList ids = new ArrayList<>(); + for (int i = 0; i ysMap = new HashMap<>(); + while (recordSet.next()){ + // out.print(recordSet.getString("YSBHYSFH")); + // out.print("----------"); + // out.print(recordSet.getString("YSKMBH")); + // out.print("
"); + ysMap.put(Util.null2String(recordSet.getString("id")),Util.null2String(recordSet.getString("ky"))); + } + ArrayList errorList = new ArrayList<>(); + String errorTxt = ""; + for (int i = 0; i >>>>>"+sum.toString()); + + BigDecimal kyys = new BigDecimal(ysMap.get(bh)); + // out.print(">>>>>>"+kyys.toString()); + // out.print("
"); + if (sum.compareTo(kyys)>0){ + errorList.add(bh); + String bhName = (String)map.get("bhName"); + errorTxt = errorTxt + " " + bhName; + } + } + HashMap result = new HashMap<>(); + result.put("errList",errorList); + result.put("errTxt",errorTxt); + out.print(JSONObject.toJSONString(result)); + +%> +<%! + +%> \ No newline at end of file diff --git a/interface/transfer/testXML.jsp b/interface/transfer/testXML.jsp new file mode 100644 index 0000000..4a087c6 --- /dev/null +++ b/interface/transfer/testXML.jsp @@ -0,0 +1,75 @@ +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="java.util.*" %> +<%@ page import="com.engine.common.util.ParamUtil" %> +<%@ page import="com.alibaba.fastjson.JSONArray" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="java.sql.Array" %> +<%@ page import="com.wbi.util.Util" %> +<%@ page import="java.math.BigDecimal" %> +<%@ page import="tebie.applib.api.O" %> +<%@ page import="weaver.general.BaseBean" %> +<%@ page import="javax.xml.parsers.SAXParserFactory" %> +<%@ page import="javax.xml.parsers.SAXParser" %> +<%@ page import="java.io.InputStream" %> +<%@ page import="java.io.ByteArrayInputStream" %> +<%@ page import="com.engine.util.XMLUtils" %> +<%@ page import="org.xml.sax.helpers.DefaultHandler" %> +<%@ page import="org.xml.sax.Attributes" %> +<%@ page import="org.xml.sax.SAXException" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + + +<% + + +%> +<%! + public static Map parseXMLToMap(String xmlString) { + new BaseBean().writeLog("XMLUtils:xmlString==>"+xmlString); + Map resultMap = new HashMap<>(); + try { + SAXParserFactory factory = SAXParserFactory.newInstance(); + SAXParser saxParser = factory.newSAXParser(); + + InputStream xmlInput = new ByteArrayInputStream(xmlString.getBytes("UTF-8")); + saxParser.parse(xmlInput, new XMLUtils.SAXHandler(resultMap)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + private static class SAXHandler extends DefaultHandler { + private Map resultMap; + private Stack elementStack = new Stack<>(); + private StringBuilder elementValue = new StringBuilder(); + + public SAXHandler(Map resultMap) { + this.resultMap = resultMap; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + elementStack.push(qName); + elementValue.setLength(0); // 清空字符缓存 + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + String value = elementValue.toString().trim(); + if (!value.isEmpty()) { + // 如果当前元素有值且没有子元素,则将其添加到结果Map中 + if (elementStack.size() > 1) { + resultMap.put(elementStack.peek(), value); + } + } + elementStack.pop(); + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + elementValue.append(ch, start, length); + } + } +%> \ No newline at end of file diff --git a/interface/transfer/最终测试一下1106.html b/interface/transfer/最终测试一下1106.html new file mode 100644 index 0000000..2ef0ce8 --- /dev/null +++ b/interface/transfer/最终测试一下1106.html @@ -0,0 +1,2580 @@ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + 天津银行总行 
收文阅办单
+ +
+
+ +
+ + + 标题 + +
+
+ +
+ + + 最终测试一下1106 + +
+
+ +
+ + + 来文单位 + +
+
+ +
+ + + +市委组织部 + + + + + + + +
+
+ +
+ + + 收文号 + +
+
+ +
+ + + 2023-S139号 + +
+
+ +
+ + + 来文号 + +
+
+ +
+ + + + +
+
+ +
+ + + 反馈时限 + +
+
+ +
+ + + + +
+
+ +
+ + + 分发意见 + +
+
+ +
+ + + + + + + + + +
+
+ 办公室/ + 测试-杨芳_10110033[ + 2023-11-06  + 14:16:33]: + 测试_10110013、个人金融部、信用卡部、测试_10110223、信息技术部  + +
23
+
+
+ +
+ + + 行外收文 + +
+
+ +
+ + + 正文 + +
+
+ +
+ + + + +
+
+ +
+ + + 正文 + +
+
+ +
+ + + + +
+
+ +
+ + + 附件 + +
+
+ +
+ + + +
+ +
+
+ +
+ + + 备注 + +
+
+ +
+ + + + +
+
+ +
+ + + 行领导意见 + +
+
+ +
+ + + + + + + + + + + +
+
+ 行领导/ + 测试_10110013[ + 2023-11-06  + 14:18:30]: + 行领导阅批  + +
22
+ + + + + + + + + + +
+
+ 行领导/ + 测试_10110223[ + 2023-11-06  + 14:18:01]: + 行领导阅知  + +
22
+ + +
+
+ +
+ + + 主办部门办理意见 + +
+
+ +
+ + + + + + + + + + + +
+
+ 个人金融部/ + 测试_10110141[ + 2023-11-06  + 15:13:31]: + 阅办——部门领导2  + +
30
+
+ 信用卡部/ + 测试_10110152[ + 2023-11-06  + 14:21:08]: + 阅办——部门领导1  + +
31
+ + + + + + + + + + + + + + +
+
+ 个人金融部/ + 测试_10111252[ + 2023-11-07  + 11:15:40]: + 阅办——员工6  + +
30
+
+ 个人金融部/ + 测试_10110145[ + 2023-11-07  + 10:50:31]: + 阅办——员工3  + +
30
+
+ 信用卡部/ + 测试_10110160[ + 2023-11-06  + 15:04:50]: + 阅办——又回到员工2  + +
31
+
+ 信用卡部/ + 测试_10110155[ + 2023-11-06  + 14:48:50]: + 阅办——又回到员工1  + +
31
+ + +
+
+ +
+ + + 协办部门办理意见 + +
+
+ +
+ + + + + + + + + + + +
+
+ 安全保卫部(人民武装部)/ + 测试_10111050[ + 2023-11-07  + 10:58:21]: + 部门协办——领导6  + +
50
+
+ 综合管理团队/ + 测试_10110772[ + 2023-11-07  + 10:56:04]: + 部门协办——领导5  + +
3490
+
+ 授信管理部/ + 测试_10110277[ + 2023-11-06  + 14:56:41]: + 部门协办——领导4
 
+ +
36
+
+ 资产保全部/ + 测试_10110308[ + 2023-11-06  + 14:54:13]: + 部门协办——领导3  + +
37
+
+ 法律事务部/ + 测试_10110349[ + 2023-11-06  + 14:46:03]: + 部门协办——领导2  + +
38
+
+ 运营管理部/ + 测试_10110396[ + 2023-11-06  + 14:43:47]: + 部门协办——领导1  + +
42
+ + + + + + + + + + + + + + +
+
+ 安全保卫部(人民武装部)/ + 测试_10111050[ + 2023-11-07  + 10:59:00]: + 部门协办——员工6  + +
50
+
+ 综合管理团队/ + 测试_10110772[ + 2023-11-07  + 10:56:46]: + 部门协办——员工5  + +
3490
+
+ 授信管理部/ + 测试_10110277[ + 2023-11-06  + 14:58:08]: + 部门协办——员工4  + +
36
+
+ 资产保全部/ + 测试_10110308[ + 2023-11-06  + 14:54:56]: + 部门协办——员工3  + +
37
+
+ 法律事务部/ + 测试_10110349[ + 2023-11-06  + 14:46:31]: + 部门协办-员工办理2  + +
38
+
+ 运营管理部/ + 测试_10110396[ + 2023-11-06  + 14:44:25]: + 部门协办-员工办理1  + +
42
+ + +
+
+ +
+ + + 阅件部门办理意见 + +
+
+ +
+ + + + + + + + + + + +
+
+ 信息技术部/ + 测试_10110632[ + 2023-11-06  + 14:19:16]: + 阅知——部门领导  + +
48
+ + + + + + + + + + + + + + +
+
+ 信息技术部/ + 测试_10110632[ + 2023-11-06  + 14:19:47]: + 阅知——员工办理  + +
48
+ + +
+
+ +
+ + + 矩阵 + +
+
+ +
+ + + + +
+
+ +
+ + + 阅办负责人 + +
+
+ +
+ + + 魏来 + +
+
+ +
+ + + 抄送人员 + +
+
+ + +
+ +
+ + + 当前部门 + +
+
+ +
+ + + + +
+
+ +
+ + + 测试_10110223 + +
+
+ +
+ + + 是否屏蔽移动端 + +
+
+ +
+ + + + +
+
+ +
+ + + 办理期限 + +
+
+ +
+ + + 2023-12-11 + +
+
+
+ +
+ +
+
+
+ +
+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110141

+

2023-11-07 11:29:53[综合文员 / 提交]

+
+
+
+ + + + + + + +
+
+ + +
+
+
+ 自动流转至下一操作者 +
+
+
+
+

接收人 : 测试_10110141

+

2023-11-07 11:15:41[员工办理 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_fenfa

+

2023-11-06 15:13:51[综合文员 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 阅办——部门领导2 +
+
+
+
+

接收人 : 测试_10110141

+

2023-11-06 15:13:31[部门领导批示 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110141

+

2023-11-06 15:13:07[部门文员办理 / 提交]

+
+
+
+ + + + + + + +
+
+ + +
+
+
+ 自动流转至下一操作者 +
+
+
+
+

接收人 : 测试_10110152

+

2023-11-06 15:04:50[员工办理 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_fenfa

+

2023-11-06 14:31:06[综合文员 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 阅办——部门领导1 +
+
+
+
+

接收人 : 测试_10110152

+

2023-11-06 14:21:08[部门领导批示 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110152

+

2023-11-06 14:20:46[部门文员办理 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:20:06[综合文员 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 阅知——员工办理 +
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:19:47[员工办理 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:19:32[综合文员 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 阅知——部门领导 +
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:19:16[部门领导批示 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:19:00[部门文员办理 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 行领导阅批 +
+
+
+
+

接收人 : 测试_10110013

+

2023-11-06 14:18:30[行领导 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+ 行领导阅知 +
+
+
+
+

接收人 : 测试_10110223

+

2023-11-06 14:18:01[行领导 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110223

+

2023-11-06 14:16:35[自动发起 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110632

+

2023-11-06 14:16:35[自动发起 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110013

+

2023-11-06 14:16:34[自动发起 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110152

+

2023-11-06 14:16:34[自动发起 / 提交]

+
+
+
+ + + + + + + +
+ +
+
+
+
+
+
+

接收人 : 测试_10110141

+

2023-11-06 14:16:33[自动发起 / 提交]

+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/produce/23/transfer.zip b/produce/23/transfer.zip deleted file mode 100644 index d91af08531bc28b613b0a58c2121e4e0e82e92ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158962 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

N96lkno`JEQS-H6H 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

vw}%1a8`*&jWfVX1nsV=4IfnJ8$=WqiB9PNg>u3 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 +<%@ page import="weaver.integration.entrance.service.EntranceService" %> +<%@ page import="weaver.integration.entrance.service.IEntranceService" %> +<%@ page import="weaver.integration.entrance.service.IOutterSysServer" %> +<%@ page import="weaver.integration.entrance.service.impl.QQMailServer" %> +<%@ page import="weaver.integration.entrance.service.permission.IPermissionService" %> +<%@ page import="weaver.integration.entrance.service.permission.PermissionService" %> +<%@ page language="java" contentType="text/html; charset=GBK" %> +<%--<%@ include file="/systeminfo/init.jsp"%>--%> +<%@ page import="weaver.general.Util" %> +<%@ page import="java.util.Objects" %> +<%@ page import="java.util.Map" %> + + + + +<% + IPermissionService permissionService=new PermissionService(); + String operationType = permissionService.getOperationType(request); + String sysid = Util.null2String(request.getParameter("id"));// ϵͳʶ + + IEntranceService entranceService = new EntranceService(); + IOutterSysServer qqMailServer = new QQMailServer(); + OutterLoginBean loginBean = entranceService.getLoginBean(qqMailServer, sysid, operationType, request, response); + + Map qqMap = entranceService.getUrl(qqMailServer, loginBean, operationType, request, response); + + if (Objects.nonNull(qqMap)){ + if (Objects.nonNull(qqMap.get("isRedirect")) && "true".equals(qqMap.get("isRedirect"))){ + response.sendRedirect(qqMap.get("redirectUrl").toString()); + } + } +%> \ No newline at end of file diff --git a/produce/23/transfer/integration.log b/produce/23/transfer/integration.log new file mode 100644 index 0000000..f22c361 --- /dev/null +++ b/produce/23/transfer/integration.log @@ -0,0 +1,1324 @@ +2024-02-04 16:55:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 16:55:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 16:55:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 16:55:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,024 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 16:55:00,025 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 16:55:00,030 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:00,034 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 16:55:08,274 WARN [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=11012&isremark=0&sysId=-2&flowId=7713ea7bde8f09a9747a211be719748b&workflowId=-149×tamp=1707036884908 +2024-02-04 16:55:08,275 INFO [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110610 +2024-02-04 16:55:08,275 INFO [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-2, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=7713ea7bde8f09a9747a211be719748b, workflowId=-149, timestamp=1707036884908} +2024-02-04 16:55:08,275 INFO [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110610 +2024-02-04 16:55:08,684 ERROR [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=11012 +2024-02-04 16:55:08,685 ERROR [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 16:55:08,688 INFO [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:GnpkTY7lvu4wxMoy4PBqPsqoqeyHHDQwK5osgcpZOuI= +2024-02-04 16:55:08,688 INFO [Thread:WeaverHttp&10110610&16:55:08&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=kdFVFv3yuOIIRBBhpr%2FSt5ukBWpudYEN0PpekT670IsFd3ZWq2hhY800qJs3e64vTo7AKmzU4duf9KrqoV1JQZredgfWnEC6pii9pM%2BpipalCiE28VnsmkE8CCP%2FXCE%2F3faoEkWUyTbg01iXzQHFbPH3O7WMUsHXA7%2FG%2BiZk85uuDCoxNs%2FPGh52oI1FYsNtfiLgaO2A2JyMvjJppx9pfh4m5sdLcAAdgqX4JmZw18uz0KPX8GlWfKnCTzU%2BfKWs2UQK9vE3GmL8swcB3RWqV%2BNvQzxAPzXT7LqilWyXWopo0acwrZKc%2Fh5OFAYMoPIumxR2w0vfA1hKBG8rCbIdwiPImNJn0MI7MeoeUXZ20VwKW%2FFpBLY6gU%2BahP9ID9YI3rkMDWLHDgoNB6ZB%2BgsL0PWvWv18NQN4Q5gcwQ5L3Pw2QAEwfvVGAGYrdeE%2Bwsqp4mZeRvch1CReLcAvFYPxsnQwSYSlM4QvGEZteSPmGiGVuCp1KG8vyyWE3P3CZVHTynkaZ6Rlzaatvgr4BYZuNDfoyRP6v8PB8fojbnnZg8R8PpG39OW9NOWCp6Rom1cHxxOiMDURx2DilohfNQBrx4JuYidjxtf9q6v%2FjCfzz%2FKqdKTcAUZVbmosyRvCCVE%2Ffu0ylOXPytMKHCa5A3Mm0IgotkQTXckM4gEkCloNMYs%3D&loginid=10110610&stamp=1707036908687&token=GnpkTY7lvu4wxMoy4PBqPsqoqeyHHDQwK5osgcpZOuI%3D +2024-02-04 16:55:12,765 WARN [Thread:WeaverHttp&10110610&16:55:12&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=8846&isremark=0&sysId=-2&flowId=d21b37c990de898bcf6c1d6cea28c2fc&workflowId=-149×tamp=1707036889383 +2024-02-04 16:55:12,766 INFO [Thread:WeaverHttp&10110610&16:55:12&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110610 +2024-02-04 16:55:12,766 INFO [Thread:WeaverHttp&10110610&16:55:12&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-2, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=d21b37c990de898bcf6c1d6cea28c2fc, workflowId=-149, timestamp=1707036889383} +2024-02-04 16:55:12,766 INFO [Thread:WeaverHttp&10110610&16:55:12&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110610 +2024-02-04 16:55:13,130 ERROR [Thread:WeaverHttp&10110610&16:55:13&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=8846 +2024-02-04 16:55:13,130 ERROR [Thread:WeaverHttp&10110610&16:55:13&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 16:55:13,133 INFO [Thread:WeaverHttp&10110610&16:55:13&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:GnpkTY7lvu4wxMoy4PBqPp8uflib7zDpU9fIrI4gquc= +2024-02-04 16:55:13,133 INFO [Thread:WeaverHttp&10110610&16:55:13&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=kdFVFv3yuOIIRBBhpr%2FSt5ukBWpudYEN0PpekT670IsFd3ZWq2hhY800qJs3e64vTo7AKmzU4duf9KrqoV1JQZredgfWnEC6pii9pM%2BpipalCiE28VnsmkE8CCP%2FXCE%2F3faoEkWUyTbg01iXzQHFbPH3O7WMUsHXA7%2FG%2BiZk85uuDCoxNs%2FPGh52oI1FYsNtfiLgaO2A2JyMvjJppx9pfh4m5sdLcAAdgqX4JmZw18uz0KPX8GlWfKnCTzU%2BfKWs2UQK9vE3GmL8swcB3RWqV%2BNvQzxAPzXT7LqilWyXWopo0acwrZKc%2Fh5OFAYMoPIumxR2w0vfA1hKBG8rCbIdwk7SLLCep23s1DYPqedsx4cKW%2FFpBLY6gU%2BahP9ID9YI3rkMDWLHDgoNB6ZB%2BgsL0PWvWv18NQN4Q5gcwQ5L3PyldDtc8etKaAa9%2BN2AlLaI7rFyMcmaTFzQ%2FVysq0sBEWSkUyv%2F0PDsiYc5gnPAOOKoStSDJp7%2FatQiStS3K51ADYf1CJ0LObK0OwJ7%2FouLD5igCJY9ZtzPfMBHYRqrEa%2BR1FPl0fMDBni%2FYD9njVm8wBbvQEFAwp7d9ZoBXRLDnmFRolPkVB%2BjVBqp5MnoeV8EJH5D379z1LvOJorMLHIU%2FN1cv7eIVNQaQCc%2FknR%2F7ZrsD75wXUI3AkE%2B%2FtA8SP4%3D&loginid=10110610&stamp=1707036913132&token=GnpkTY7lvu4wxMoy4PBqPp8uflib7zDpU9fIrI4gquc%3D +2024-02-04 16:55:18,581 WARN [Thread:WeaverHttp&10110610&16:55:18&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=8074&isremark=0&sysId=-2&flowId=3e173d77033570b6a8de00a9a4b707e1&workflowId=-149×tamp=1707036895205 +2024-02-04 16:55:18,581 INFO [Thread:WeaverHttp&10110610&16:55:18&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110610 +2024-02-04 16:55:18,582 INFO [Thread:WeaverHttp&10110610&16:55:18&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-2, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=3e173d77033570b6a8de00a9a4b707e1, workflowId=-149, timestamp=1707036895205} +2024-02-04 16:55:18,582 INFO [Thread:WeaverHttp&10110610&16:55:18&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110610 +2024-02-04 16:55:19,024 ERROR [Thread:WeaverHttp&10110610&16:55:19&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=8074 +2024-02-04 16:55:19,024 ERROR [Thread:WeaverHttp&10110610&16:55:19&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 16:55:19,027 INFO [Thread:WeaverHttp&10110610&16:55:19&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:GnpkTY7lvu4wxMoy4PBqPjiEhIa0W7XGAp6E/KOK4Z8= +2024-02-04 16:55:19,027 INFO [Thread:WeaverHttp&10110610&16:55:19&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=kdFVFv3yuOIIRBBhpr%2FSt5ukBWpudYEN0PpekT670IsFd3ZWq2hhY800qJs3e64vTo7AKmzU4duf9KrqoV1JQZredgfWnEC6pii9pM%2BpipalCiE28VnsmkE8CCP%2FXCE%2F3faoEkWUyTbg01iXzQHFbPH3O7WMUsHXA7%2FG%2BiZk85uuDCoxNs%2FPGh52oI1FYsNtfiLgaO2A2JyMvjJppx9pfh4m5sdLcAAdgqX4JmZw18uz0KPX8GlWfKnCTzU%2BfKWs2UQK9vE3GmL8swcB3RWqV%2BNvQzxAPzXT7LqilWyXWopo0acwrZKc%2Fh5OFAYMoPIumxR2w0vfA1hKBG8rCbIdws2PKEMPbfY2YYKdfM%2FtWlsKW%2FFpBLY6gU%2BahP9ID9YI3rkMDWLHDgoNB6ZB%2BgsL0PWvWv18NQN4Q5gcwQ5L3PyldDtc8etKaAa9%2BN2AlLaI7rFyMcmaTFzQ%2FVysq0sBEWSkUyv%2F0PDsiYc5gnPAOOKoStSDJp7%2FatQiStS3K51ADYf1CJ0LObK0OwJ7%2FouLD5igCJY9ZtzPfMBHYRqrEa%2BR1FPl0fMDBni%2FYD9njVm8YSODMyUYh9AU8BZd0NOsoMRLLMCvO2LsQhiOwZNqA%2FwOFaaX6qQ01rn4fmLDDOtA%2FN1cv7eIVNQaQCc%2FknR%2F7ZrsD75wXUI3AkE%2B%2FtA8SP4%3D&loginid=10110610&stamp=1707036919026&token=GnpkTY7lvu4wxMoy4PBqPjiEhIa0W7XGAp6E%2FKOK4Z8%3D +2024-02-04 16:55:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:30,002 INFO [Thread:DefaultQuartzScheduler_Worker-28] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 16:55:30,012 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:55:30,018 INFO [Thread:DefaultQuartzScheduler_Worker-28] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 16:56:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:56:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 16:56:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 16:56:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 16:56:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 16:56:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 16:56:00,028 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 16:56:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 16:56:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ9 +2024-02-04 16:56:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:56:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 16:56:09,186 INFO [Thread:WeaverHttp&&16:56:09&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 16:56:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:56:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-30] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 16:56:30,011 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:56:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-30] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 16:57:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-31] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 16:57:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-31] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 16:57:56,526 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,529 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,532 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,533 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,533 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,536 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:56,536 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:57:58,789 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:58:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:58:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 16:58:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 16:58:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 16:58:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 16:58:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 16:58:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 16:58:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 16:58:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 16:58:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:58:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 16:58:30,000 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:58:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 16:58:30,009 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:58:30,012 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 16:59:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:59:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 16:59:30,013 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 16:59:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:00:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-39] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-39] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:00:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-43] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-43] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-40] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-40] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.GoalRemindJob)ʼִ +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-44] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-44] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.OA2HGorn)ʼִ +2024-02-04 17:00:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-46] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-46] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PerformanceRemindJob)ʼִ +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-45] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PLDRZBTX)ʼִ +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-42] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmUpdateOrganizationShowOrderJob)ʼִ +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-48] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-48] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PushCorn)ʼִ +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-50] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:00:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-49] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-49] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.TaskRemindJob)ʼִ +2024-02-04 17:00:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-47] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-47] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PlanRemindJob)ʼִ +2024-02-04 17:00:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-41] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-41] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:00:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-39] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-43] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:00:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:00:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:00:00,023 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:00:00,030 INFO [Thread:DefaultQuartzScheduler_Worker-45] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,032 INFO [Thread:DefaultQuartzScheduler_Worker-39] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:00:00,034 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PLDRZBTX)ִС +2024-02-04 17:00:00,035 INFO [Thread:DefaultQuartzScheduler_Worker-41] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,038 INFO [Thread:DefaultQuartzScheduler_Worker-43] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:00:00,040 INFO [Thread:DefaultQuartzScheduler_Worker-44] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,042 INFO [Thread:DefaultQuartzScheduler_Worker-46] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:00:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:00:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-41] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:00:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ23 +2024-02-04 17:00:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-50] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,047 INFO [Thread:DefaultQuartzScheduler_Worker-44] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.OA2HGorn)ִС +2024-02-04 17:00:00,048 INFO [Thread:DefaultQuartzScheduler_Worker-46] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PerformanceRemindJob)ִС +2024-02-04 17:00:00,051 INFO [Thread:DefaultQuartzScheduler_Worker-50] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:00:00,053 INFO [Thread:DefaultQuartzScheduler_Worker-49] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,059 INFO [Thread:DefaultQuartzScheduler_Worker-49] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.TaskRemindJob)ִС +2024-02-04 17:00:00,065 INFO [Thread:DefaultQuartzScheduler_Worker-47] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,068 INFO [Thread:DefaultQuartzScheduler_Worker-47] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PlanRemindJob)ִС +2024-02-04 17:00:00,080 INFO [Thread:DefaultQuartzScheduler_Worker-40] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,087 INFO [Thread:DefaultQuartzScheduler_Worker-40] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.GoalRemindJob)ִС +2024-02-04 17:00:00,673 INFO [Thread:DefaultQuartzScheduler_Worker-42] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:00,677 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmUpdateOrganizationShowOrderJob)ִС +2024-02-04 17:00:09,241 INFO [Thread:DefaultQuartzScheduler_Worker-48] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:09,247 INFO [Thread:DefaultQuartzScheduler_Worker-48] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PushCorn)ִС +2024-02-04 17:00:30,002 INFO [Thread:DefaultQuartzScheduler_Worker-51] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:30,002 INFO [Thread:DefaultQuartzScheduler_Worker-51] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:00:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-51] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:00:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-51] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:01:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-52] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:01:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-52] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:01:30,011 INFO [Thread:DefaultQuartzScheduler_Worker-52] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:01:30,018 INFO [Thread:DefaultQuartzScheduler_Worker-52] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:02:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-53] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:02:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:02:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:02:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:02:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:02:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:02:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:02:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:02:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ6 +2024-02-04 17:02:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-53] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@41444ad6]" +2024-02-04 17:02:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:03:38,506 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.checkEndUpgrade() - ,sleep... +2024-02-04 17:03:38,512 INFO [Thread:Thread-58] weaver.general.InitServerHrmDBThread.checkEndUpgrade() - ,sleep... +2024-02-04 17:03:38,516 INFO [Thread:Thread-59] weaver.general.InitServerWorkflowDBThread.checkEndUpgrade() - ,sleep... +2024-02-04 17:03:38,516 INFO [Thread:Thread-60] weaver.general.InitServerHrmDBThread.checkEndUpgrade() - ,sleep... +2024-02-04 17:03:39,507 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - SQLɣִ InitServiceXMLtoDB ... +2024-02-04 17:03:39,515 INFO [Thread:Thread-58] weaver.general.InitServerHrmDBThread.run() - ɣִ InitServerHrmDBThread ... +2024-02-04 17:03:39,516 INFO [Thread:Thread-59] weaver.general.InitServerWorkflowDBThread.run() - ɣִ InitServerWorkflowDBThread ... +2024-02-04 17:03:39,523 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initAllService start... +2024-02-04 17:03:39,555 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistTable() - table(INITSERVICEXMLSTATE) exist +2024-02-04 17:03:39,590 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistTable() - table(INITSERVICEXMLSTATE) exist +2024-02-04 17:03:39,615 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistField() - filed (INITSERVICEXMLSTATE.E8CLEAR) exist +2024-02-04 17:03:39,646 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistTable() - table(INITSERVICEXMLSTATE) exist +2024-02-04 17:03:39,656 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistField() - filed (INITSERVICEXMLSTATE.SMS) exist +2024-02-04 17:03:39,688 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistTable() - table(INITSERVICEXMLSTATE) exist +2024-02-04 17:03:39,699 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistField() - filed (INITSERVICEXMLSTATE.CHECKERRORDATA) exist +2024-02-04 17:03:39,731 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistTable() - table(INITSERVICEXMLSTATE) exist +2024-02-04 17:03:39,744 INFO [Thread:Thread-56] weaver.general.init.InitManager.notExistField() - filed (INITSERVICEXMLSTATE.XMLINITTODB) exist +2024-02-04 17:03:39,744 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initDBState:0,ʼ״̬ñ +2024-02-04 17:03:39,821 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initServicePlugin:1,ʼservicePlugin +2024-02-04 17:03:39,821 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initServiceXML:2,ʼWEB-INF/service/initļ +2024-02-04 17:03:39,827 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initOther:3,ʼ +2024-02-04 17:03:39,827 INFO [Thread:Thread-56] weaver.general.init.InitManager.initAllService() - =================initAllService end... +2024-02-04 17:03:39,827 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼл濪ʼ... +2024-02-04 17:03:39,829 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4DataSource ʼ... +2024-02-04 17:03:39,834 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.loadCache() - ʼԴ ...... +2024-02-04 17:03:39,868 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4DataSource ... +2024-02-04 17:03:39,868 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Action ʼ... +2024-02-04 17:03:39,871 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Action.loadCache() - ʼAction ...... +2024-02-04 17:03:45,817 INFO [Thread:DeploymentService-deployment-on-startup] com.weaver.esb.server.EsbServer.init() - Esb MQ init start.... +2024-02-04 17:03:45,837 INFO [Thread:DeploymentService-deployment-on-startup] com.weaver.esb.server.EsbServer.init() - Esb MQ init end.... +2024-02-04 17:03:45,847 INFO [Thread:DeploymentService-deployment-on-startup] weaver.integration.syncExpData.util.ExpSyncUtil.initSyncCron() - ʼ̹鵵XMLͬƵʿʼ +2024-02-04 17:03:45,847 INFO [Thread:DeploymentService-deployment-on-startup] weaver.integration.syncExpData.util.ExpSyncUtil.initSyncCron() - ʼ̹鵵XMLͬƵʽ +2024-02-04 17:03:45,850 INFO [Thread:DeploymentService-deployment-on-startup] weaver.integration.syncExpData.util.ExpSyncUtil.initSyncCron() - ʼ̹鵵DBͬƵʿʼ +2024-02-04 17:03:45,850 INFO [Thread:DeploymentService-deployment-on-startup] weaver.integration.syncExpData.util.ExpSyncUtil.initSyncCron() - ʼ̹鵵DBͬƵʽ +2024-02-04 17:03:46,135 INFO [Thread:Thread-154] com.engine.odoc.util.signSetting.InitSignModuleThread.doThreadWork() - SQLɣִ InitSignModuleThread ... +2024-02-04 17:03:46,157 INFO [Thread:Thread-154] com.engine.odoc.util.signSetting.InitSignModuleThread.doThreadWork() - ===========InitSignModuleThread end.... +2024-02-04 17:03:46,157 INFO [Thread:Thread-154] com.engine.odoc.util.signSetting.InitSignModuleThread.doThreadWork() - ==========================InitSignModuleThread end... +2024-02-04 17:04:22,338 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Action ... +2024-02-04 17:04:22,338 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Schedule ʼ... +2024-02-04 17:04:22,347 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Schedule.loadCache() - ʼƻ񻺴Start ...... +2024-02-04 17:04:22,596 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Schedule.loadCache() - scheduleԼ뻺쳣(usersids)java.lang.NoSuchFieldException: usersids +2024-02-04 17:04:22,656 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Schedule.loadCache() - scheduleԼ뻺쳣(userIds)java.lang.NoSuchFieldException: userIds +2024-02-04 17:04:22,682 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Schedule ... +2024-02-04 17:04:22,683 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Browser ʼ... +2024-02-04 17:04:22,689 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 ...... +2024-02-04 17:04:22,708 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,715 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:2 +2024-02-04 17:04:22,747 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,747 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:3 +2024-02-04 17:04:22,771 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,771 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:4 +2024-02-04 17:04:22,798 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ false| dbtype : | id:5 +2024-02-04 17:04:22,799 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,799 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:6 +2024-02-04 17:04:22,823 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,823 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:7 +2024-02-04 17:04:22,849 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,849 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:8 +2024-02-04 17:04:22,875 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,875 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:9 +2024-02-04 17:04:22,897 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,897 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:10 +2024-02-04 17:04:22,932 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,932 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:11 +2024-02-04 17:04:22,955 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,956 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:12 +2024-02-04 17:04:22,979 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:22,979 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:13 +2024-02-04 17:04:23,003 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,004 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:14 +2024-02-04 17:04:23,030 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,031 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:15 +2024-02-04 17:04:23,055 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,056 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:16 +2024-02-04 17:04:23,080 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,080 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:17 +2024-02-04 17:04:23,102 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,102 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:18 +2024-02-04 17:04:23,126 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,127 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:19 +2024-02-04 17:04:23,151 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,151 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:20 +2024-02-04 17:04:23,175 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,175 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:21 +2024-02-04 17:04:23,200 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,200 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:22 +2024-02-04 17:04:23,223 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,223 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:23 +2024-02-04 17:04:23,247 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,247 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:24 +2024-02-04 17:04:23,271 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,271 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:25 +2024-02-04 17:04:23,295 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,296 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:26 +2024-02-04 17:04:23,320 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,320 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:27 +2024-02-04 17:04:23,345 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,345 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:28 +2024-02-04 17:04:23,369 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,369 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:30 +2024-02-04 17:04:23,393 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,394 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:31 +2024-02-04 17:04:23,416 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,417 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:32 +2024-02-04 17:04:23,439 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,439 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:33 +2024-02-04 17:04:23,463 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,463 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:34 +2024-02-04 17:04:23,492 ERROR [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4DataSource.getCacheByKey() - ===========ʶ:datasource. +2024-02-04 17:04:23,492 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Browser.loadCache() - ʼ򻺴 Ƿַ֧ҳ true| dbtype :oracle | id:35 +2024-02-04 17:04:23,516 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Browser ... +2024-02-04 17:04:23,516 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4SMS ʼ... +2024-02-04 17:04:23,522 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4SMS ... +2024-02-04 17:04:23,522 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Hrsyn ʼ... +2024-02-04 17:04:23,524 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Hrsyn.loadCache() - ʼHR ...... +2024-02-04 17:04:23,527 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4Hrsyn.loadCache() - ͬ ...... +2024-02-04 17:04:23,528 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4Hrsyn ... +2024-02-04 17:04:23,529 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4WFTrigger ʼ... +2024-02-04 17:04:23,531 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4WFTrigger.loadCache() - ʼʷ ...... +2024-02-04 17:04:23,532 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4WFTrigger.loadCache() - ʼת ...... +2024-02-04 17:04:23,536 INFO [Thread:Thread-56] weaver.interfaces.cache.impl.IntegrationCache4WFTrigger.loadCache() - ʼ ...... +2024-02-04 17:04:23,541 INFO [Thread:Thread-56] weaver.interfaces.cache.CacheManager.loadAllCache() - ==============ʼweaver.interfaces.cache.impl.IntegrationCache4WFTrigger ... +2024-02-04 17:04:23,541 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - ===========InitServiceXMLtoDB end.... +2024-02-04 17:04:23,548 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.isInit() - LC list:177 +2024-02-04 17:04:23,548 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.isInit() - LC res:false +2024-02-04 17:04:23,566 INFO [Thread:Thread-56] org.quartz.impl.StdSchedulerFactory.initialize() - -----------requestedFile : null +2024-02-04 17:04:23,567 INFO [Thread:Thread-56] org.quartz.impl.StdSchedulerFactory.initialize() - -----------ʼƻ 3 ----------- +2024-02-04 17:04:23,694 INFO [Thread:Thread-56] org.quartz.core.QuartzScheduler.addInternalJobListener() - -----------org.quartz.core.ExecutingJobsManager) ! +2024-02-04 17:04:23,704 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - LC started:false +2024-02-04 17:04:23,708 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.getLocalIp() - ====ȡǰڵ IP +2024-02-04 17:04:23,711 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.AuditLogAutoExport +2024-02-04 17:04:23,711 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.systeminfo.timer.LogAuditArchivingJob +2024-02-04 17:04:23,711 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.AuditLogAutoRemind +2024-02-04 17:04:23,711 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.systeminfo.timer.LogAuditDiskSpaceAlertJob +2024-02-04 17:04:23,739 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.AuditLogAutoRemindɹ +2024-02-04 17:04:23,799 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.AutoCountApplyNumTask +2024-02-04 17:04:23,799 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.formmode.quartz.AutoCountApplyNumTask +2024-02-04 17:04:23,800 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.AutoCountApplyNumTaskɹ +2024-02-04 17:04:23,803 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.Birthday +2024-02-04 17:04:23,803 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.Reminder.BirthdayPlanningtask +2024-02-04 17:04:23,803 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.Birthdayɹ +2024-02-04 17:04:23,806 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.BirthdayReminderEmployer +2024-02-04 17:04:23,806 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.Reminder.BirthdayEmployerPlanningtask +2024-02-04 17:04:23,807 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.BirthdayReminderEmployerɹ +2024-02-04 17:04:23,809 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.BlogTiming +2024-02-04 17:04:23,809 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.blog.biz.message.DoSendMessage +2024-02-04 17:04:23,809 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.BlogTimingɹ +2024-02-04 17:04:23,811 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.ChgPasswd +2024-02-04 17:04:23,811 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.Reminder.ChgPasswdPlanningtask +2024-02-04 17:04:23,811 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.ChgPasswdɹ +2024-02-04 17:04:23,814 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.ClearScheduleRunLogJob +2024-02-04 17:04:23,814 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.interfaces.schedule.ClearScheduleRunLogJob +2024-02-04 17:04:23,814 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.ClearScheduleRunLogJobɹ +2024-02-04 17:04:23,817 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.Contract +2024-02-04 17:04:23,817 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.Reminder.ContractPlanningtask +2024-02-04 17:04:23,818 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.Contractɹ +2024-02-04 17:04:23,820 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.CoworkInfluenceJob +2024-02-04 17:04:23,820 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.cowork.biz.cornJob.CoworkInfluenceJob +2024-02-04 17:04:23,820 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.CoworkInfluenceJobɹ +2024-02-04 17:04:23,822 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.CrmContactRemindJob +2024-02-04 17:04:23,822 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.crm.job.CrmContactRemindJob +2024-02-04 17:04:23,823 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.CrmContactRemindJobɹ +2024-02-04 17:04:23,825 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.CrmTimedRemindJob +2024-02-04 17:04:23,825 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.crm.job.CrmTimedRemindJob +2024-02-04 17:04:23,825 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.CrmTimedRemindJobɹ +2024-02-04 17:04:23,827 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.EcodeAuthCheckJob +2024-02-04 17:04:23,827 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.cloudstore.dev.timer.EcodeAuthCheckJob +2024-02-04 17:04:23,827 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.EcodeAuthCheckJobɹ +2024-02-04 17:04:23,829 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.EcologyLogSignatureJob +2024-02-04 17:04:23,830 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.common.biz.EcologyLogSignatureJob +2024-02-04 17:04:23,830 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.EdcAutoCreateTaskJob +2024-02-04 17:04:23,830 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.edc.job.EdcAutoCreateTaskJob +2024-02-04 17:04:23,830 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.EdcAutoCreateTaskJobɹ +2024-02-04 17:04:23,832 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.GoalRemindJob +2024-02-04 17:04:23,832 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.goal.cronjob.GoalRemindJob +2024-02-04 17:04:23,832 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.GoalRemindJobɹ +2024-02-04 17:04:23,834 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.HrmOnLineLogJob +2024-02-04 17:04:23,834 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.online.schedule.HrmOnLineLogJob +2024-02-04 17:04:23,835 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.HrmOnLineLogJobɹ +2024-02-04 17:04:23,837 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.HrmUpdateOrganizationShowOrderJob +2024-02-04 17:04:23,837 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.hrm.biz.HrmUpdateOrganizationShowOrderJob +2024-02-04 17:04:23,838 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.HrmUpdateOrganizationShowOrderJobɹ +2024-02-04 17:04:23,839 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.InitPersonDutyRecordRemindJob +2024-02-04 17:04:23,839 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.api.arrangework.scheduledTasks.InitPersonDutyRecordRemindJob +2024-02-04 17:04:23,840 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.InitPersonDutyRecordRemindJobɹ +2024-02-04 17:04:23,843 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQAutoCardTask +2024-02-04 17:04:23,843 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.hrm.Reminder.KQAutoCardTask +2024-02-04 17:04:23,843 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQAutoCardTaskɹ +2024-02-04 17:04:23,846 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQClearCardLogJob +2024-02-04 17:04:23,846 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.kq.biz.KQClearCardLogJob +2024-02-04 17:04:23,846 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQClearCardLogJobɹ +2024-02-04 17:04:23,849 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQFormatDateChangeJob +2024-02-04 17:04:23,849 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.kq.biz.KQFormatDateChangeJob +2024-02-04 17:04:23,849 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQFormatDateChangeJobɹ +2024-02-04 17:04:23,851 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQSignRemindJob +2024-02-04 17:04:23,852 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.kq.biz.KQSignRemindJob +2024-02-04 17:04:23,852 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQSignRemindJobɹ +2024-02-04 17:04:23,854 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQTodayFormatJob +2024-02-04 17:04:23,854 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.kq.biz.KQTodayFormatJob +2024-02-04 17:04:23,855 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQTodayFormatJobɹ +2024-02-04 17:04:23,857 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.KQYesterdayFormatJob +2024-02-04 17:04:23,857 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.kq.biz.KQYesterdayFormatJob +2024-02-04 17:04:23,858 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.KQYesterdayFormatJobɹ +2024-02-04 17:04:23,860 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.MeetingInfluenceJob +2024-02-04 17:04:23,860 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.meeting.organization.MeetingOrgTrigger +2024-02-04 17:04:23,860 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.MeetingInfluenceJobɹ +2024-02-04 17:04:23,872 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.MenuDupDataClearCronJob +2024-02-04 17:04:23,872 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.portal.job.MenuDupDataClearCronJob +2024-02-04 17:04:23,872 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.MenuDupDataClearCronJobɹ +2024-02-04 17:04:23,880 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.OA2HGorn +2024-02-04 17:04:23,880 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.custom.hg.corn.OA2HGorn +2024-02-04 17:04:23,881 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.OA2HGornɹ +2024-02-04 17:04:23,883 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PLDRZBTX +2024-02-04 17:04:23,883 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.formmode.customjavacode.modeexpand.OnDutyJob +2024-02-04 17:04:23,884 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PLDRZBTXɹ +2024-02-04 17:04:23,886 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PerformanceRemindJob +2024-02-04 17:04:23,886 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.performance.cronjob.PerformanceRemindJob +2024-02-04 17:04:23,887 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PerformanceRemindJobɹ +2024-02-04 17:04:23,889 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PlanRemindJob +2024-02-04 17:04:23,889 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.plan.cronjob.PlanRemindJob +2024-02-04 17:04:23,889 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PlanRemindJobɹ +2024-02-04 17:04:23,891 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PortraitIndividualItemJob +2024-02-04 17:04:23,891 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.portrait.cmd.cronjob.IndividualItemJob +2024-02-04 17:04:23,891 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PortraitTeamTotalItemJob +2024-02-04 17:04:23,891 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.portrait.cmd.cronjob.TeamTotalItemJob +2024-02-04 17:04:23,891 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PrjOrCptUpdateDepartmentJob +2024-02-04 17:04:23,891 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.prj.util.PrjOrCptUpdateDepartmentJob +2024-02-04 17:04:23,892 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PrjOrCptUpdateDepartmentJobɹ +2024-02-04 17:04:23,894 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PushCorn +2024-02-04 17:04:23,894 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.custom.push.corn.PushCornTest +2024-02-04 17:04:23,894 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PushCornɹ +2024-02-04 17:04:23,896 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.PushUser2YeaLinkJob +2024-02-04 17:04:23,896 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.api.meeting.cusvideo.task.PushUser2YeaLinkJob +2024-02-04 17:04:23,896 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.PushUser2YeaLinkJobɹ +2024-02-04 17:04:23,898 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.SynHrmToCtrip +2024-02-04 17:04:23,898 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.ctrip.ecology.SynHrmToCtrip +2024-02-04 17:04:23,899 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.SynHrmToCtripɹ +2024-02-04 17:04:23,901 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.TaskCycleJob +2024-02-04 17:04:23,901 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.task.cronjob.TaskCycleJob +2024-02-04 17:04:23,903 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.TaskCycleJobɹ +2024-02-04 17:04:23,905 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.TaskRemindJob +2024-02-04 17:04:23,905 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.task.cronjob.TaskRemindJob +2024-02-04 17:04:23,906 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.TaskRemindJobɹ +2024-02-04 17:04:23,908 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.WeekReportCorn +2024-02-04 17:04:23,908 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.custom.corn.WeekReportCorn +2024-02-04 17:04:23,909 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.WeekReportCornɹ +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.WrIndividualInfluenceJob +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.portrait.cronjob.IndividualInfluenceJob +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.WrIndividualRiskJob +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.portrait.cronjob.IndividualRiskJob +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.WrTeamRiskJob +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.portrait.cronjob.TeamRiskJob +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.YearInventoryJob +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.portrait.yearinventory.cronjob.YearInventoryAutoGenerateJob +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.YearInventoryMonthJob +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.workrelate.cmd.portrait.yearinventory.cronjob.YearInventoryMonthJob +2024-02-04 17:04:23,911 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.YearReportCorn +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.engine.custom.corn.YearReportCorn +2024-02-04 17:04:23,911 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.YearReportCornɹ +2024-02-04 17:04:23,914 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.deleteEML +2024-02-04 17:04:23,914 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.system.DeleteEML +2024-02-04 17:04:23,914 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.deleteEMLɹ +2024-02-04 17:04:23,916 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.subMessageCronJob +2024-02-04 17:04:23,916 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjcom.cloudstore.dev.api.message.task.SubMessageCronJob +2024-02-04 17:04:23,916 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.subMessageCronJobɹ +2024-02-04 17:04:23,918 ERROR [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - Schedule Cron Job 棨schedule.weaver_trigger_24 +2024-02-04 17:04:23,918 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - JobObjweaver.interfaces.schedule.TriggerJob +2024-02-04 17:04:23,918 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - schedule.weaver_trigger_24ɹ +2024-02-04 17:04:23,920 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - ʼģƻ... +2024-02-04 17:04:23,965 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - ƻɹ +2024-02-04 17:04:23,965 INFO [Thread:Thread-56] weaver.interfaces.schedule.ScheduleManage.start() - LC started:true +2024-02-04 17:04:23,965 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - ===========ScheduleManage end.... +2024-02-04 17:04:23,965 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - ==========================initFormmodeBrowser start... +2024-02-04 17:04:24,015 INFO [Thread:DefaultQuartzScheduler_Worker-4] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,016 INFO [Thread:DefaultQuartzScheduler_Worker-2] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,017 INFO [Thread:DefaultQuartzScheduler_Worker-5] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,018 INFO [Thread:DefaultQuartzScheduler_Worker-3] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,018 INFO [Thread:DefaultQuartzScheduler_Worker-1] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,020 INFO [Thread:DefaultQuartzScheduler_Worker-5] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,021 INFO [Thread:DefaultQuartzScheduler_Worker-2] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,022 INFO [Thread:DefaultQuartzScheduler_Worker-4] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,022 INFO [Thread:DefaultQuartzScheduler_Worker-1] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:24,063 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - ==========================initFormmodeBrowser end... +2024-02-04 17:04:24,064 INFO [Thread:Thread-56] weaver.general.InitServerXMLtoDBThread.run() - ==========================InitServiceXMLtoDB end... +2024-02-04 17:04:26,991 INFO [Thread:DefaultQuartzScheduler_Worker-3] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:30,014 INFO [Thread:DefaultQuartzScheduler_Worker-6] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:30,027 INFO [Thread:DefaultQuartzScheduler_Worker-6] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:04:30,058 INFO [Thread:DefaultQuartzScheduler_Worker-6] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:04:30,062 INFO [Thread:DefaultQuartzScheduler_Worker-6] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:05:00,954 INFO [Thread:DefaultQuartzScheduler_Worker-8] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:00,957 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:05:00,957 INFO [Thread:DefaultQuartzScheduler_Worker-7] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:00,958 INFO [Thread:DefaultQuartzScheduler_Worker-7] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:05:00,958 INFO [Thread:DefaultQuartzScheduler_Worker-9] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:00,958 INFO [Thread:DefaultQuartzScheduler_Worker-9] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:05:00,990 INFO [Thread:DefaultQuartzScheduler_Worker-8] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:01,000 INFO [Thread:DefaultQuartzScheduler_Worker-9] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:01,003 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:05:01,010 INFO [Thread:DefaultQuartzScheduler_Worker-9] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:05:01,052 INFO [Thread:DefaultQuartzScheduler_Worker-7] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:01,059 INFO [Thread:DefaultQuartzScheduler_Worker-7] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:05:09,109 INFO [Thread:WeaverHttp&&17:05:09&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:05:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-10] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:05:30,069 INFO [Thread:DefaultQuartzScheduler_Worker-10] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:05:30,073 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:06:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-12] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:06:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-11] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.Birthday)ʼִ +2024-02-04 17:06:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.hrm.Reminder.BirthdayPlanningtask.execute() - ƻBirthdayPlanningtaskʼִ +2024-02-04 17:06:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:06:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.hrm.Reminder.BirthdayPlanningtask.execute() - ƻBirthdayPlanningtaskִнʱ5 +2024-02-04 17:06:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-11] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:00,036 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.Birthday)ִС +2024-02-04 17:06:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {} +2024-02-04 17:06:00,044 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:06:00,185 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildMainSql() - Դdbtype dm +2024-02-04 17:06:00,473 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - =1=================sql2SELECT * FROM Workflow_billdetailtable where billid=? order by id formid:-281 +2024-02-04 17:06:00,475 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - =======1===========SourceTableNameformtable_main_281_dt1 +2024-02-04 17:06:00,475 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - =======1===========SourceTableNameformtable_main_281_dt2 +2024-02-04 17:06:00,475 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - =======1===========SourceTableNameformtable_main_281_dt3 +2024-02-04 17:06:00,481 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - =====search sql:SELECT * FROM ( +select t1.id as id,0 AS detailtable_id,t1.fieldname as name,t1.fieldlabel as label,t1.fieldhtmltype as htmltype,t1.type as type,t1.fielddbtype,t1.detailtable +from workflow_billfield t1 WHERE billid=-281 AND ( detailtable='' or detailtable is null ) +UNION all +select t1.id,t2.id AS detailtable_id,t1.fieldname as name,t1.fieldlabel as label,t1.fieldhtmltype as htmltype,t1.type as type,t1.fielddbtype,t1.detailtable +from workflow_billfield t1,Workflow_billdetailtable t2 WHERE t1.billid=t2.billid AND t1.detailtable=t2.tablename AND t1.billid =-281 + ) tt ORDER BY tt.detailtable_id +2024-02-04 17:06:00,487 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.biz.WorkflowTriggerInitializer.buildGeneralMappingDefine() - ==================tables{0=weaver.integration.framework.mappingdefine.impl.TableMappingDefine@5466046, 1=weaver.integration.framework.mappingdefine.impl.TableMappingDefine@11b953e, 2=weaver.integration.framework.mappingdefine.impl.TableMappingDefine@24c45486, 3=weaver.integration.framework.mappingdefine.impl.TableMappingDefine@5fc1639c} +2024-02-04 17:06:00,505 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:06:00,510 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:06:00,511 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:06:00,511 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ484 +2024-02-04 17:06:00,512 INFO [Thread:DefaultQuartzScheduler_Worker-12] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:00,516 INFO [Thread:DefaultQuartzScheduler_Worker-12] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:06:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-13] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-13] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:06:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-13] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:06:30,024 INFO [Thread:DefaultQuartzScheduler_Worker-13] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:07:24,753 INFO [Thread:WeaverHttp&sysadmin&17:07:24&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵѱȡϵֵԱ","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037644674","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"13Oq704j","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:07:24","title":"ֵ","userCodeList":["101115401"],"userId":0,"userList":["872"],"userLoginIdList":["10111540"]}] +2024-02-04 17:07:24,837 INFO [Thread:WeaverHttp&sysadmin&17:07:24&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵ࣬밴ʱֵ๤ϵֵԱ!","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037644832","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"h6PlL495","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:07:24","title":"ֵ","userCodeList":["10110001"],"userId":0,"userList":["22"],"userLoginIdList":["10110001"]}] +2024-02-04 17:07:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-14] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:07:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-14] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:07:30,051 INFO [Thread:DefaultQuartzScheduler_Worker-14] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:07:30,057 INFO [Thread:DefaultQuartzScheduler_Worker-14] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:07:44,144 INFO [Thread:WeaverHttp&&17:07:44&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:08:00,000 INFO [Thread:DefaultQuartzScheduler_Worker-15] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:08:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:08:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:08:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:08:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:08:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:08:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:08:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:08:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ11 +2024-02-04 17:08:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-15] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:08:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-15] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:08:02,218 INFO [Thread:WeaverHttp&10111540&17:08:02&http://14.1.209.146:8080/api/hrm/login/checkLogout] com.engine.integration.biz.CASLogoutUtil.checkLogout() - =======================CASLogoutUtil weaver_login_type:OALogin +2024-02-04 17:08:04,817 INFO [Thread:WeaverHttp&&17:08:04&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:08:27,659 INFO [Thread:WeaverHttp&sysadmin&17:08:27&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵѱȡϵֵԱ","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037707654","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"O789QXec","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:08:27","title":"ֵ","userCodeList":["101115401"],"userId":0,"userList":["872"],"userLoginIdList":["10111540"]}] +2024-02-04 17:08:27,667 INFO [Thread:WeaverHttp&sysadmin&17:08:27&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵ࣬밴ʱֵ๤ϵֵԱ!","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037707662","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"mBrwcMVv","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:08:27","title":"ֵ","userCodeList":["10110610"],"userId":0,"userList":["758"],"userLoginIdList":["10110610"]}] +2024-02-04 17:08:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-16] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:08:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-16] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:08:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-16] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:08:30,026 INFO [Thread:DefaultQuartzScheduler_Worker-16] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:08:30,973 INFO [Thread:WeaverHttp&10110001&17:08:30&http://14.1.209.146:8080/api/hrm/login/checkLogout] com.engine.integration.biz.CASLogoutUtil.checkLogout() - =======================CASLogoutUtil weaver_login_type:OALogin +2024-02-04 17:08:38,644 INFO [Thread:WeaverHttp&&17:08:38&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:08:49,944 INFO [Thread:WeaverHttp&10111540&17:08:49&http://14.1.209.146:8080/api/hrm/login/checkLogout] com.engine.integration.biz.CASLogoutUtil.checkLogout() - =======================CASLogoutUtil weaver_login_type:OALogin +2024-02-04 17:08:56,708 INFO [Thread:WeaverHttp&&17:08:56&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:09:20,243 INFO [Thread:WeaverHttp&10110610&17:09:20&http://14.1.209.146:8080/api/hrm/login/checkLogout] com.engine.integration.biz.CASLogoutUtil.checkLogout() - =======================CASLogoutUtil weaver_login_type:OALogin +2024-02-04 17:09:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-17] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-18] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,956 INFO [Thread:DefaultQuartzScheduler_Worker-18] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,956 INFO [Thread:DefaultQuartzScheduler_Worker-17] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-19] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,962 INFO [Thread:DefaultQuartzScheduler_Worker-20] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:23,962 INFO [Thread:DefaultQuartzScheduler_Worker-20] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:26,342 INFO [Thread:DefaultQuartzScheduler_Worker-19] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:26,543 INFO [Thread:WeaverHttp&&17:09:26&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:09:28,298 INFO [Thread:WeaverHttp&sysadmin&17:09:28&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵѱȡϵֵԱ","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037768293","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"i50ORqI9","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:09:28","title":"ֵ","userCodeList":["11210170"],"userId":0,"userList":["54"],"userLoginIdList":["11210170"]}] +2024-02-04 17:09:28,305 INFO [Thread:WeaverHttp&sysadmin&17:09:28&http://14.1.209.146:8080/api/cube/new/card/doSubmit] com.engine.integration.biz.message.TodoClientTodoMessageDispatcher.onMessage() - =====================message:[{"agentId":"106","belongId":"lGw3G2j4","change":true,"context":"2024-03-01ռֵ࣬밴ʱֵ๤ϵֵԱ!","creater":1,"createrCode":"","customMessageType":0,"date":"2024-02-04","detailTitleParams":{},"emParams":{},"enable":"y","enableEM":"y","enablePC":"y","imgUrl":"/cloudstore/images/icon/app/app032.png","isDefault":"n","isTab":"","linkMobileUrl":"","linkUrl":"","messageCurrectTime":"1707037768302","messageGroupType":"lGw3G2j4","messageGroupTypeName":"ֵ","messageId":"wO360534","messageType":{"code":1745,"labelId":1745,"lableId":1745,"parentCode":0},"moduleId":"18","params":{},"sendMobile":"y","state":0,"time":"17:09:28","title":"ֵ","userCodeList":["101115401"],"userId":0,"userList":["872"],"userLoginIdList":["10111540"]}] +2024-02-04 17:09:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-21] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:09:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-21] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:09:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:09:40,832 INFO [Thread:WeaverHttp&11210170&17:09:40&http://14.1.209.146:8080/api/hrm/login/checkLogout] com.engine.integration.biz.CASLogoutUtil.checkLogout() - =======================CASLogoutUtil weaver_login_type:OALogin +2024-02-04 17:09:43,729 INFO [Thread:WeaverHttp&&17:09:43&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:10:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-22] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-22] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:10:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-23] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-23] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:10:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-24] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-24] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:10:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PLDRZBTX)ʼִ +2024-02-04 17:10:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:10:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-24] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:10:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:10:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:10:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:10:00,025 INFO [Thread:DefaultQuartzScheduler_Worker-22] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,030 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-24] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ13 +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-22] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:10:00,031 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PLDRZBTX)ִС +2024-02-04 17:10:00,034 INFO [Thread:DefaultQuartzScheduler_Worker-23] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:00,034 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:10:00,038 INFO [Thread:DefaultQuartzScheduler_Worker-23] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:10:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:30,007 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:10:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:10:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:11:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:11:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-28] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:11:30,023 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:11:30,027 INFO [Thread:DefaultQuartzScheduler_Worker-28] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:12:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:12:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:12:00,072 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:12:00,072 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:12:00,072 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:12:00,073 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:12:00,076 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:12:00,076 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:12:00,077 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ5 +2024-02-04 17:12:00,077 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:12:00,080 INFO [Thread:DefaultQuartzScheduler_Worker-29] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:12:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:12:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-30] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:12:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:12:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-30] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:13:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:13:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-31] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:13:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:13:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-31] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:14:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:14:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:14:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:14:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:14:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:14:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:14:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:14:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:14:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:00,023 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:14:23,956 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,956 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:23,960 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:26,250 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:30,002 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:14:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:14:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:15:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:15:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-40] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-40] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:15:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-39] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-39] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:15:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-40] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:15:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-40] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:15:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-39] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-39] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:15:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-41] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-41] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:15:30,017 INFO [Thread:DefaultQuartzScheduler_Worker-41] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:15:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-41] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:16:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-42] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:16:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:16:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:16:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:16:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:16:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:16:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:16:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:16:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:16:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-42] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:16:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-42] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:16:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-43] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:16:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-43] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:16:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-43] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:16:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-43] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:17:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-44] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:17:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-44] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:17:30,023 INFO [Thread:DefaultQuartzScheduler_Worker-44] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:17:30,028 INFO [Thread:DefaultQuartzScheduler_Worker-44] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:18:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-45] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:18:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:18:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:18:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:18:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:18:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:18:00,049 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:18:00,049 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:18:00,049 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ5 +2024-02-04 17:18:00,050 INFO [Thread:DefaultQuartzScheduler_Worker-45] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:18:00,053 INFO [Thread:DefaultQuartzScheduler_Worker-45] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:18:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-46] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:18:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-46] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:18:30,052 INFO [Thread:DefaultQuartzScheduler_Worker-46] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:18:30,056 INFO [Thread:DefaultQuartzScheduler_Worker-46] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:19:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-47] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-48] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-48] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-49] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-47] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,964 INFO [Thread:DefaultQuartzScheduler_Worker-50] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:23,965 INFO [Thread:DefaultQuartzScheduler_Worker-50] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:26,370 INFO [Thread:DefaultQuartzScheduler_Worker-49] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-51] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:30,018 INFO [Thread:DefaultQuartzScheduler_Worker-51] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:19:30,029 INFO [Thread:DefaultQuartzScheduler_Worker-51] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:19:30,033 INFO [Thread:DefaultQuartzScheduler_Worker-51] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:20:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-53] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-52] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-52] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-56] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-55] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-55] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PLDRZBTX)ʼִ +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-54] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-54] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:20:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:20:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:20:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:20:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-54] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-52] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-55] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:20:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-54] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:20:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-53] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-52] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:20:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:20:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-55] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PLDRZBTX)ִС +2024-02-04 17:20:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:20:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ8 +2024-02-04 17:20:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-56] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-53] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:20:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-56] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:20:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-57] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-57] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:20:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-57] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:20:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-57] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:21:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-58] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:21:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-58] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:21:30,014 INFO [Thread:DefaultQuartzScheduler_Worker-58] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:21:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-58] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:22:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-59] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:22:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:22:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:22:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:22:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:22:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:22:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:22:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:22:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:22:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-59] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:22:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-59] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:22:30,002 INFO [Thread:DefaultQuartzScheduler_Worker-60] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:22:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-60] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:22:30,018 INFO [Thread:DefaultQuartzScheduler_Worker-60] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:22:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-60] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:23:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-61] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:23:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-61] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:23:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-61] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:23:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-61] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:24:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-62] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:24:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:24:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:24:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:24:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:24:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:24:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:24:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ13 +2024-02-04 17:24:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-62] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-62] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:24:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-63] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-64] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-64] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-63] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-65] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,960 INFO [Thread:DefaultQuartzScheduler_Worker-66] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:23,961 INFO [Thread:DefaultQuartzScheduler_Worker-66] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:26,641 INFO [Thread:DefaultQuartzScheduler_Worker-65] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-67] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-67] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:24:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-67] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:24:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-67] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:25:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-68] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-68] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:25:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-70] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-70] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:25:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-69] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-69] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:25:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-68] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-70] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-69] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-68] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:25:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-70] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:25:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-69] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:25:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-71] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-71] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:25:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-71] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:25:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-71] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:26:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-72] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:26:00,004 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:26:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:26:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:26:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:26:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:26:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:26:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:26:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:26:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-72] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:26:00,047 INFO [Thread:DefaultQuartzScheduler_Worker-72] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:26:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-73] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:26:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-73] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:26:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-73] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:26:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-73] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:27:29,368 INFO [Thread:WeaverHttp&&17:27:29&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:27:30,000 INFO [Thread:DefaultQuartzScheduler_Worker-74] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:27:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-74] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:27:30,013 INFO [Thread:DefaultQuartzScheduler_Worker-74] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:27:30,017 INFO [Thread:DefaultQuartzScheduler_Worker-74] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:28:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-75] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:28:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:28:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:28:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:28:00,026 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:28:00,027 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:28:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:28:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:28:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:28:00,033 INFO [Thread:DefaultQuartzScheduler_Worker-75] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:28:00,037 INFO [Thread:DefaultQuartzScheduler_Worker-75] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:28:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-76] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:28:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-76] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:28:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-76] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:28:30,023 INFO [Thread:DefaultQuartzScheduler_Worker-76] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:29:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-77] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-78] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-80] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-77] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-79] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,963 INFO [Thread:DefaultQuartzScheduler_Worker-80] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:23,964 INFO [Thread:DefaultQuartzScheduler_Worker-78] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:26,547 INFO [Thread:DefaultQuartzScheduler_Worker-79] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-81] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-81] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:29:30,023 INFO [Thread:DefaultQuartzScheduler_Worker-81] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:29:30,027 INFO [Thread:DefaultQuartzScheduler_Worker-81] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:30:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-84] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-91] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-84] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-90] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-90] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.TaskRemindJob)ʼִ +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-85] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-85] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmUpdateOrganizationShowOrderJob)ʼִ +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-87] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-87] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PLDRZBTX)ʼִ +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-88] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-88] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PerformanceRemindJob)ʼִ +2024-02-04 17:30:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-86] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-86] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:30:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-89] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-89] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PlanRemindJob)ʼִ +2024-02-04 17:30:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-83] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-83] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.GoalRemindJob)ʼִ +2024-02-04 17:30:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-82] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,008 INFO [Thread:DefaultQuartzScheduler_Worker-82] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:30:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:30:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:30:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:30:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:30:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-86] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-87] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-82] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-87] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PLDRZBTX)ִС +2024-02-04 17:30:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:30:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:30:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ9 +2024-02-04 17:30:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-91] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-88] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-86] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:30:00,023 INFO [Thread:DefaultQuartzScheduler_Worker-88] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PerformanceRemindJob)ִС +2024-02-04 17:30:00,024 INFO [Thread:DefaultQuartzScheduler_Worker-91] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:30:00,029 INFO [Thread:DefaultQuartzScheduler_Worker-84] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,032 INFO [Thread:DefaultQuartzScheduler_Worker-82] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:30:00,034 INFO [Thread:DefaultQuartzScheduler_Worker-84] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:30:00,038 INFO [Thread:DefaultQuartzScheduler_Worker-89] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,041 INFO [Thread:DefaultQuartzScheduler_Worker-90] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,042 INFO [Thread:DefaultQuartzScheduler_Worker-89] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PlanRemindJob)ִС +2024-02-04 17:30:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-90] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.TaskRemindJob)ִС +2024-02-04 17:30:00,067 INFO [Thread:DefaultQuartzScheduler_Worker-83] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,070 INFO [Thread:DefaultQuartzScheduler_Worker-83] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.GoalRemindJob)ִС +2024-02-04 17:30:00,624 INFO [Thread:DefaultQuartzScheduler_Worker-85] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:00,627 INFO [Thread:DefaultQuartzScheduler_Worker-85] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmUpdateOrganizationShowOrderJob)ִС +2024-02-04 17:30:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-92] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-92] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:30:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-92] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:30:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-92] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:31:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-93] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:31:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-93] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:31:30,014 INFO [Thread:DefaultQuartzScheduler_Worker-93] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:31:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-93] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:32:00,000 INFO [Thread:DefaultQuartzScheduler_Worker-94] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:32:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:32:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:32:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:32:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:32:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:32:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:32:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:32:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ11 +2024-02-04 17:32:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-94] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:32:00,025 INFO [Thread:DefaultQuartzScheduler_Worker-94] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:32:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-95] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:32:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-95] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:32:30,012 INFO [Thread:DefaultQuartzScheduler_Worker-95] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:32:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-95] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:33:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-96] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:33:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-96] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:33:30,074 INFO [Thread:DefaultQuartzScheduler_Worker-96] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:33:30,077 INFO [Thread:DefaultQuartzScheduler_Worker-96] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:34:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-97] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:34:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:34:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:34:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:34:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:34:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:34:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:34:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ7 +2024-02-04 17:34:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-97] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-97] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:34:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-98] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-99] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,957 INFO [Thread:DefaultQuartzScheduler_Worker-98] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,957 INFO [Thread:DefaultQuartzScheduler_Worker-99] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-100] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-1] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:23,960 INFO [Thread:DefaultQuartzScheduler_Worker-1] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:26,219 INFO [Thread:DefaultQuartzScheduler_Worker-100] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-5] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-5] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:34:30,018 INFO [Thread:DefaultQuartzScheduler_Worker-5] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:34:30,024 INFO [Thread:DefaultQuartzScheduler_Worker-5] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:35:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-4] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-4] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:35:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-2] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-2] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:35:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-3] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-3] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:35:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-3] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-4] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,014 INFO [Thread:DefaultQuartzScheduler_Worker-2] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-3] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:35:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-4] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:35:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-2] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:35:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-6] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:30,008 INFO [Thread:DefaultQuartzScheduler_Worker-6] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:35:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-6] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:35:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-6] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:36:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-8] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:36:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:36:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:36:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:36:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:36:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:36:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:36:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:36:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ5 +2024-02-04 17:36:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-8] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:36:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-8] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:36:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-9] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:36:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-9] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:36:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-9] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:36:30,024 INFO [Thread:DefaultQuartzScheduler_Worker-9] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:37:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-7] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:37:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-7] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:37:30,024 INFO [Thread:DefaultQuartzScheduler_Worker-7] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:37:30,028 INFO [Thread:DefaultQuartzScheduler_Worker-7] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:38:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-10] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:38:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:38:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:38:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:38:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:38:00,013 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:38:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:38:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:38:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ9 +2024-02-04 17:38:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-10] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:38:00,025 INFO [Thread:DefaultQuartzScheduler_Worker-10] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:38:20,758 INFO [Thread:WeaverHttp&&17:38:20&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:38:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-11] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:38:30,007 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:38:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-11] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:38:30,023 INFO [Thread:DefaultQuartzScheduler_Worker-11] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:39:00,439 INFO [Thread:WeaverHttp&&17:39:00&http://14.1.209.146:8080/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:39:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-12] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,956 INFO [Thread:DefaultQuartzScheduler_Worker-13] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,957 INFO [Thread:DefaultQuartzScheduler_Worker-12] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-13] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-14] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,959 INFO [Thread:DefaultQuartzScheduler_Worker-15] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:23,961 INFO [Thread:DefaultQuartzScheduler_Worker-15] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:26,570 INFO [Thread:DefaultQuartzScheduler_Worker-14] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-16] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-16] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:39:30,011 INFO [Thread:DefaultQuartzScheduler_Worker-16] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:39:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-16] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:39:49,755 INFO [Thread:WeaverHttp&sysadmin&17:39:49&http://14.1.209.146:8080/api/hrm/systeminfo/save] weaver.integration.thirdsdk.ldap.biz.HrmResourceSubscriber4Ldap.synData() - յϢΪ[{"fieldName":"id","fieldLabel":"32011","fieldType":"int","fieldValue":"6938"}, {"fieldName":"password","fieldLabel":"409","fieldType":"varchar","fieldValue":"null"}] +2024-02-04 17:39:49,757 INFO [Thread:WeaverHttp&sysadmin&17:39:49&http://14.1.209.146:8080/api/hrm/systeminfo/save] weaver.integration.thirdsdk.ldap.biz.HrmResourceSubscriber4Ldap.synData() - յĶΪupdate +2024-02-04 17:39:49,795 ERROR [Thread:WeaverHttp&sysadmin&17:39:49&http://14.1.209.146:8080/api/hrm/systeminfo/save] com.weaver.integration.ldap.util.AuthenticUtil.checkType() - δҵӦLDAP(10110047_test) +2024-02-04 17:39:52,317 INFO [Thread:WeaverHttp&&17:39:52&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.isomericSource.IsomericSourceUtil.isIsomericAuth() - ===========isIsomericAuth search result: {"executeClass":"","isIsomericAuth":false} +2024-02-04 17:39:52,357 INFO [Thread:WeaverHttp&&17:39:52&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.cas.CASLoginUtil.isOpenSSOAPPIntegration() - ============isuse:true +2024-02-04 17:39:52,358 INFO [Thread:WeaverHttp&&17:39:52&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.cas.CASLoginUtil.isOpenSSOAPPIntegration() - ============appAuth:false +2024-02-04 17:39:52,358 INFO [Thread:WeaverHttp&&17:39:52&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.cas.CASLoginUtil.isOpenSSOAPPIntegration() - =======casisopen:1,oauth2isopen:false +2024-02-04 17:39:52,358 INFO [Thread:WeaverHttp&&17:39:52&http://123.151.115.199:8999/api/hrm/login/checkLogin] weaver.interfaces.sso.cas.CASLoginUtil.isOpenSSOAPPIntegration() - =======isOpenAPPSSOLogin false +2024-02-04 17:40:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-19] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-19] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.PLDRZBTX)ʼִ +2024-02-04 17:40:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-20] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-20] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-17] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-17] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-18] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-18] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-21] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,003 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:40:00,040 INFO [Thread:DefaultQuartzScheduler_Worker-18] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,041 INFO [Thread:DefaultQuartzScheduler_Worker-20] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,041 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:40:00,041 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:40:00,041 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:40:00,042 INFO [Thread:DefaultQuartzScheduler_Worker-19] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,043 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:40:00,045 INFO [Thread:DefaultQuartzScheduler_Worker-20] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:40:00,046 INFO [Thread:DefaultQuartzScheduler_Worker-19] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.PLDRZBTX)ִС +2024-02-04 17:40:00,046 INFO [Thread:DefaultQuartzScheduler_Worker-17] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,046 INFO [Thread:DefaultQuartzScheduler_Worker-18] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:40:00,049 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:40:00,050 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:40:00,050 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ9 +2024-02-04 17:40:00,050 INFO [Thread:DefaultQuartzScheduler_Worker-21] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:00,050 INFO [Thread:DefaultQuartzScheduler_Worker-17] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:40:00,053 INFO [Thread:DefaultQuartzScheduler_Worker-21] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:40:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-24] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-24] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:40:30,026 INFO [Thread:DefaultQuartzScheduler_Worker-24] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:40:30,031 INFO [Thread:DefaultQuartzScheduler_Worker-24] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:40:52,596 WARN [Thread:WeaverHttp&10110047&17:40:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16168&isremark=0&sysId=-22&flowId=815507117245988864&workflowId=-158×tamp=1707039626323 +2024-02-04 17:40:52,599 INFO [Thread:WeaverHttp&10110047&17:40:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:40:52,600 INFO [Thread:WeaverHttp&10110047&17:40:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507117245988864, workflowId=-158, timestamp=1707039626323} +2024-02-04 17:40:52,600 INFO [Thread:WeaverHttp&10110047&17:40:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update viewtype=1 ==>10110047 +2024-02-04 17:40:53,720 ERROR [Thread:WeaverHttp&10110047&17:40:53&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16168 +2024-02-04 17:40:53,720 ERROR [Thread:WeaverHttp&10110047&17:40:53&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:40:53,741 INFO [Thread:WeaverHttp&10110047&17:40:53&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:0XU3B8UpGXahFK9+PnVbHY7GDOxvqvj1Oe6dreL80rg= +2024-02-04 17:40:53,741 INFO [Thread:WeaverHttp&10110047&17:40:53&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4E%2BFfupERJ39syDACqz1YHzC4lu22%2Fg%2BUhvMYh4xcLxW14ItLLbTGCEDB%2F0BXH1UkNG%2B4T2hmLinOkbYriwrSSa%2FMzouqWF11SZCw%2FkuU4Wl55y0%2BWZG2l%2B8%2FOY3BBEe9nNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZtbmypSc3o2CT5bXhjd9xdnpRA4g3cL06REf%2BMVRDS6l0bcSMQ7VpDM5mAQFQ7VyMeqGk2PG7bEkTeKN9pmYZqB2FfIMcLvj5XWwrM5W5QQiVysZbaKYrmDTC5g57eqUe%2FP44RI97HI7c2OQ5NLIQKSmFTNveceTeQ3TMpo9YWC9Qk1J8YMeKr%2BbQKXdZNiMnoBsXzTE01xDSo4lyvTXIOOnl1ZBaiDdk%2Fg3hBfER8wZzVWc9W%2Bdz%2BM0C1z9LRyDbFooxzokxKLEufcJ3C1qZmPXQzMBEF52FS0gXhaFSekKnKLNAZqVGzKpCruW9p9KeIYyhdf0XGgcophhuHSOcUZigCJY9ZtzPfMBHYRqrEa9IhvRgbBko4D%2FG%2B8OTOqs9PaYvAwLH6iNRI1JhDycZhoTjIGyQLD6WNiazk%2Fu8vpk9JUU0tgRcNgz0bIuAIhi6XCwMaGSIqXeUCCxR69pF9G42f7aKKDPsgk%2FuRaL2W%2FzkcG68v%2B%2Bkenzmk36InEd4p%2FpHjjpB2r0o5H71Rm%2FSycc7f4U%2B924k9c1%2FYJhIAU%2FgPneyC9tOIdB9z4YuD%2FBw%2FSCyuCNWj3t19%2BDDdM9hxQ%3D%3D&loginid=10110047&stamp=1707039653735&token=0XU3B8UpGXahFK9%2BPnVbHY7GDOxvqvj1Oe6dreL80rg%3D +2024-02-04 17:41:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-22] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:41:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-22] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:41:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-22] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:41:30,021 INFO [Thread:DefaultQuartzScheduler_Worker-22] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:42:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:42:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:42:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:42:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:42:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:42:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:42:00,018 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:42:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:42:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ8 +2024-02-04 17:42:00,019 INFO [Thread:DefaultQuartzScheduler_Worker-25] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:42:00,024 INFO [Thread:DefaultQuartzScheduler_Worker-25] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:42:24,559 WARN [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16165&isremark=0&sysId=-22&flowId=815507693534969856&workflowId=-157×tamp=1707039721048 +2024-02-04 17:42:24,560 INFO [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:42:24,561 INFO [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507693534969856, workflowId=-157, timestamp=1707039721048} +2024-02-04 17:42:24,561 INFO [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update viewtype=1 ==>10110047 +2024-02-04 17:42:24,952 ERROR [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16165 +2024-02-04 17:42:24,952 ERROR [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:42:24,956 INFO [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:9rZFrEGwAgLHCxzIqKcQZ721ocJERyc8GWQK1s9PjwA= +2024-02-04 17:42:24,956 INFO [Thread:WeaverHttp&10110047&17:42:24&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wRzybaPPTL8sN4EhphAifH%2F6%2BIEimSjdELaR3Ya8Q0dFPqajCVMLA9qeinVq%2FgmPp1WrWKXQ0hes5yNVIFWe5BDOa%2FMzouqWF11SZCw%2FkuU4WMZClJsDCF8KcssN%2FKp%2FUb5glSR55LsSc%2Bsb%2BlFQ4qYPGLgr18M3JSfvPQ2wizX2xgLFwIQKQS7Y6HS710pgBFfZSTfsR7TVpjesKSDHlsDT1RzwYhyGS20HiIMZvkMcjinzq%2FpSsYgaUhvEn%2FZVttBLTflbbxzkxLHMJZpAReHsg%2BZOLtVEoUpaUMeY3m%2BC3SSYQwZfPuImJ2NIipPwkXb80mkj6aPJWYlDc0s4bUbHmFkR8TrSZ1ola6dHi79rp9yxwqsz644A8dfs9NuvkwasnJRo1h4y1KMhpqWy%2FIXLdvTSCfz5JbBncvqtvf1avvDkHRB1%2FB8Z7t1OynN0dA%2FOiivNWbhyHJ7KxpS%2FWdjwyPOMoA28%2FcuzvDTLKuVeqiDUVs5FV04MB077sOqYl%2FpwTR%2FeaDO%2BId185NXLaUYrn7FDumrTSZMl8o3Y9kU11B6qDdXkN17ploRkdrOM3OhLC2GE1IP39F8cQklLRDtyTnLUOYs3f7DWkdVbHX8sB1VrVHPCB%2BXDijdbOLgJBca9N8SRqWIYRbkm5dd%2BNvXvsP7RSQjlHyhV8JETVQyyOlK%2BaTrS3rjII3YhK3dcOrOdMSknY1oPSbcPwLd4dJCpPWtFDfM87tJxhabpe6epA59H9%2Fl891a1Q06P3dRs46ODeX3SGXzYXy9Em7tB535s%3D&loginid=10110047&stamp=1707039744955&token=9rZFrEGwAgLHCxzIqKcQZ721ocJERyc8GWQK1s9PjwA%3D +2024-02-04 17:42:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:42:30,006 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:42:30,064 INFO [Thread:DefaultQuartzScheduler_Worker-26] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:42:30,067 INFO [Thread:DefaultQuartzScheduler_Worker-26] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:43:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-23] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:43:30,003 INFO [Thread:DefaultQuartzScheduler_Worker-23] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:43:30,016 INFO [Thread:DefaultQuartzScheduler_Worker-23] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:43:30,020 INFO [Thread:DefaultQuartzScheduler_Worker-23] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:43:53,860 WARN [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16168&isremark=0&sysId=-22&flowId=815507117245988864&workflowId=-158×tamp=1707039810132 +2024-02-04 17:43:53,862 INFO [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:43:53,863 INFO [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507117245988864, workflowId=-158, timestamp=1707039810132} +2024-02-04 17:43:53,864 INFO [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver.length()=={}true +2024-02-04 17:43:53,864 INFO [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}false +2024-02-04 17:43:53,864 INFO [Thread:WeaverHttp&10110047&17:43:53&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update viewtype=1 ==>10110047 +2024-02-04 17:43:54,313 ERROR [Thread:WeaverHttp&10110047&17:43:54&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16168 +2024-02-04 17:43:54,314 ERROR [Thread:WeaverHttp&10110047&17:43:54&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:43:54,318 INFO [Thread:WeaverHttp&10110047&17:43:54&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:qQGqMJcPihAD6Yi4hw+ruE93GZDCxBW3IQh/MAhL+6E= +2024-02-04 17:43:54,318 INFO [Thread:WeaverHttp&10110047&17:43:54&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4E%2BFfupERJ39syDACqz1YHzC4lu22%2Fg%2BUhvMYh4xcLxW14ItLLbTGCEDB%2F0BXH1UkNG%2B4T2hmLinOkbYriwrSSa%2FMzouqWF11SZCw%2FkuU4Wl55y0%2BWZG2l%2B8%2FOY3BBEe9nNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZtbmypSc3o2CT5bXhjd9xdnpRA4g3cL06REf%2BMVRDS6l0bcSMQ7VpDM5mAQFQ7VyMeqGk2PG7bEkTeKN9pmYZqB2FfIMcLvj5XWwrM5W5QQiVysZbaKYrmDTC5g57eqUe%2FP44RI97HI7c2OQ5NLIQKSmFTNveceTeQ3TMpo9YWC9Qk1J8YMeKr%2BbQKXdZNiMnoBsXzTE01xDSo4lyvTXIOOnl1ZBaiDdk%2Fg3hBfER8wZzVWc9W%2Bdz%2BM0C1z9LRyDbFooxzokxKLEufcJ3C1qZmPXQzMBEF52FS0gXhaFSekKnKLNAZqVGzKpCruW9p9KeIYyhdf0XGgcophhuHSOcUZigCJY9ZtzPfMBHYRqrEa9IhvRgbBko4D%2FG%2B8OTOqs9PaYvAwLH6iNRI1JhDycZhoTjIGyQLD6WNiazk%2Fu8vpk9JUU0tgRcNgz0bIuAIhi6XCwMaGSIqXeUCCxR69pF9G42f7aKKDPsgk%2FuRaL2W%2FzkcG68v%2B%2Bkenzmk36InEd4p%2FpHjjpB2r0o5H71Rm%2FSycc7f4U%2B924k9c1%2FYJhIAU%2FgPneyC9tOIdB9z4YuD%2FBw%2FSCyuCNWj3t19%2BDDdM9hxQ%3D%3D&loginid=10110047&stamp=1707039834317&token=qQGqMJcPihAD6Yi4hw%2BruE93GZDCxBW3IQh%2FMAhL%2B6E%3D +2024-02-04 17:43:56,221 WARN [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16167&isremark=0&sysId=-22&flowId=815507368962949120&workflowId=-159×tamp=1707039812798 +2024-02-04 17:43:56,221 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:43:56,221 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507368962949120, workflowId=-159, timestamp=1707039812798} +2024-02-04 17:43:56,222 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver.length()=={}true +2024-02-04 17:43:56,222 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}false +2024-02-04 17:43:56,222 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update viewtype=1 ==>10110047 +2024-02-04 17:43:56,608 ERROR [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16167 +2024-02-04 17:43:56,609 ERROR [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:43:56,611 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:qQGqMJcPihAD6Yi4hw+ruMrKZUUQdT/1in+0uMEtVjM= +2024-02-04 17:43:56,611 INFO [Thread:WeaverHttp&10110047&17:43:56&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4tS6aQFjMe27rn5UAR4MXyXmbMcZUcZ24veUSeGtAnPtso4bCzf1LVknliE%2BXnrBpr77TUIGsDq%2FxvtdggKX9Wa%2FMzouqWF11SZCw%2FkuU4WbDwz4q%2FThhG8QZjBNL6kStnNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZrq9OlNRNrqsJkMoZYMMrOFMtCulb%2BadzRXCLU2RH5g0xBbiU9%2B6nCsui3StdFA9D%2BAR6q4jbjXcCJ0w%2BvxDc4O4knIg1ievsofo8xyBTIRxa5nu62fvICfI9vahzh1nmHaeKTDbB%2B%2FmAOOjISikVqa3ptdEDcqNxLwt3ryNg%2Bf6CnbbjtiYnIdgYHqaw0gkK0jA2vamlERtoAcLnZ004w4yARz2lAL%2FrhYsdPO8Bd6VKqqXVlMgtm0MspVYiAAQ3FB8K%2BPdpH5KBEqrry%2BZTMC8WbQArEYh00i1VjdF%2FbVxrObzX4zx6lGp%2FU0UhsjskvPqxsEumShqQHEBeeDGX5fJRSY0nOQMeOEtE3dYg2dncmznP5JRvOpxMvf0FdMWsQnd54nAazHB%2FV2YWlYiw8RUiVQ%2BOgmPIfhaDNLWp%2BxYYm9wopBw3iNCACOvFpQxNyQaj7lgJmhOn0MDv%2F8Fxrh889zlPOzbIdwEeXmrDzTN%2FEvuSoOK7cQWw7LDWOfPqdquYeQshcZnYo1ynksnvJ4THfOXzGaGo4LvcGLly534kIwu%2FHElP0F%2FVtlH6BKfzKzM%2BXusmpjtGcySF2XGZqRZxmog89dgKQjeMFYiLA%2FQ%3D&loginid=10110047&stamp=1707039836611&token=qQGqMJcPihAD6Yi4hw%2BruMrKZUUQdT%2F1in%2B0uMEtVjM%3D +2024-02-04 17:44:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:44:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:44:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:44:00,009 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:44:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:44:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:44:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:44:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ14 +2024-02-04 17:44:00,022 INFO [Thread:DefaultQuartzScheduler_Worker-27] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:00,027 INFO [Thread:DefaultQuartzScheduler_Worker-27] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:44:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,955 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-28] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,958 INFO [Thread:DefaultQuartzScheduler_Worker-29] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,961 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:23,962 INFO [Thread:DefaultQuartzScheduler_Worker-31] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:26,189 INFO [Thread:DefaultQuartzScheduler_Worker-30] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:30,008 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:44:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-32] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:44:30,025 INFO [Thread:DefaultQuartzScheduler_Worker-32] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:45:00,002 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,006 INFO [Thread:DefaultQuartzScheduler_Worker-33] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ʼִ +2024-02-04 17:45:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,007 INFO [Thread:DefaultQuartzScheduler_Worker-34] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.HrmOnLineLogJob)ʼִ +2024-02-04 17:45:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ʼִ +2024-02-04 17:45:00,012 INFO [Thread:DefaultQuartzScheduler_Worker-33] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,016 INFO [Thread:DefaultQuartzScheduler_Worker-33] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.EdcAutoCreateTaskJob)ִС +2024-02-04 17:45:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-36] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,017 INFO [Thread:DefaultQuartzScheduler_Worker-34] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-34] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.HrmOnLineLogJob)ִС +2024-02-04 17:45:00,021 INFO [Thread:DefaultQuartzScheduler_Worker-36] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.InitPersonDutyRecordRemindJob)ִС +2024-02-04 17:45:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:30,005 INFO [Thread:DefaultQuartzScheduler_Worker-35] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:45:30,015 INFO [Thread:DefaultQuartzScheduler_Worker-35] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:45:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-35] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:46:00,001 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:46:00,005 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.weaver_trigger_24)ʼִ +2024-02-04 17:46:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) strat +2024-02-04 17:46:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.integration.workflowtrigger.WorkflowTriggerManager.() - before {24=true} +2024-02-04 17:46:00,010 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡ24 true +2024-02-04 17:46:00,011 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿsql SELECT COUNT(*) +FROM uf_CCSPDTZ +WHERE xcdzt = 0 + AND xcbxzt = 0 + AND sqsjzt = 0 + AND TO_DATE(hgsj, 'YYYY-MM-DD HH24:MI:SS') + 3 < SYSDATE + AND xmdh = 'CLSQDP-202312070054' +2024-02-04 17:46:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - ȡⲿ 0 +2024-02-04 17:46:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.integration.workflowtrigger.WorkflowTriggerManager.execute() - Ƿ֧ҳ true +2024-02-04 17:46:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.BaseCronJob.execute() - ̴>>>>>>>>(24) end ʱ5 +2024-02-04 17:46:00,015 INFO [Thread:DefaultQuartzScheduler_Worker-37] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:46:00,020 INFO [Thread:DefaultQuartzScheduler_Worker-37] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.weaver_trigger_24)ִС +2024-02-04 17:46:30,001 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:46:30,004 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobToBeExecuted() - Schedule (schedule.CrmTimedRemindJob)ʼִ +2024-02-04 17:46:30,019 INFO [Thread:DefaultQuartzScheduler_Worker-38] org.quartz.core.QuartzScheduler.getInternalJobListeners() - "-------job [org.quartz.core.ExecutingJobsManager@509591de]" +2024-02-04 17:46:30,022 INFO [Thread:DefaultQuartzScheduler_Worker-38] weaver.interfaces.schedule.ScheduleManage.jobWasExecuted() - Schedule (schedule.CrmTimedRemindJob)ִС +2024-02-04 17:46:43,637 WARN [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16168&isremark=0&sysId=-22&flowId=815507117245988864&workflowId=-158×tamp=1707039979842 +2024-02-04 17:46:43,641 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:46:43,642 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507117245988864, workflowId=-158, timestamp=1707039979842} +2024-02-04 17:46:43,642 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver.length()=={}true +2024-02-04 17:46:43,643 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK +2024-02-04 17:46:43,643 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}true +2024-02-04 17:46:43,643 INFO [Thread:WeaverHttp&10110047&17:46:43&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110047 +2024-02-04 17:46:44,072 ERROR [Thread:WeaverHttp&10110047&17:46:44&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16168 +2024-02-04 17:46:44,073 ERROR [Thread:WeaverHttp&10110047&17:46:44&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:46:44,077 INFO [Thread:WeaverHttp&10110047&17:46:44&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:S/o049M1qbXuKeqPglFcj7FrEasE6Hnwcj58XuE3l2A= +2024-02-04 17:46:44,078 INFO [Thread:WeaverHttp&10110047&17:46:44&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4E%2BFfupERJ39syDACqz1YHzC4lu22%2Fg%2BUhvMYh4xcLxW14ItLLbTGCEDB%2F0BXH1UkNG%2B4T2hmLinOkbYriwrSSa%2FMzouqWF11SZCw%2FkuU4Wl55y0%2BWZG2l%2B8%2FOY3BBEe9nNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZtbmypSc3o2CT5bXhjd9xdnpRA4g3cL06REf%2BMVRDS6l0bcSMQ7VpDM5mAQFQ7VyMeqGk2PG7bEkTeKN9pmYZqB2FfIMcLvj5XWwrM5W5QQiVysZbaKYrmDTC5g57eqUe%2FP44RI97HI7c2OQ5NLIQKSmFTNveceTeQ3TMpo9YWC9Qk1J8YMeKr%2BbQKXdZNiMnoBsXzTE01xDSo4lyvTXIOOnl1ZBaiDdk%2Fg3hBfER8wZzVWc9W%2Bdz%2BM0C1z9LRyDbFooxzokxKLEufcJ3C1qZmPXQzMBEF52FS0gXhaFSekKnKLNAZqVGzKpCruW9p9KeIYyhdf0XGgcophhuHSOcUZigCJY9ZtzPfMBHYRqrEa9IhvRgbBko4D%2FG%2B8OTOqs9PaYvAwLH6iNRI1JhDycZhoTjIGyQLD6WNiazk%2Fu8vpk9JUU0tgRcNgz0bIuAIhi6XCwMaGSIqXeUCCxR69pF9G42f7aKKDPsgk%2FuRaL2W%2FzkcG68v%2B%2Bkenzmk36InEd4p%2FpHjjpB2r0o5H71Rm%2FSycc7f4U%2B924k9c1%2FYJhIAU%2FgPneyC9tOIdB9z4YuD%2FBw%2FSCyuCNWj3t19%2BDDdM9hxQ%3D%3D&loginid=10110047&stamp=1707040004076&token=S%2Fo049M1qbXuKeqPglFcj7FrEasE6Hnwcj58XuE3l2A%3D +2024-02-04 17:46:46,000 WARN [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16167&isremark=0&sysId=-22&flowId=815507368962949120&workflowId=-159×tamp=1707039982537 +2024-02-04 17:46:46,000 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:46:46,001 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507368962949120, workflowId=-159, timestamp=1707039982537} +2024-02-04 17:46:46,002 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver.length()=={}true +2024-02-04 17:46:46,002 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK +2024-02-04 17:46:46,002 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}true +2024-02-04 17:46:46,002 INFO [Thread:WeaverHttp&10110047&17:46:45&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110047 +2024-02-04 17:46:46,344 ERROR [Thread:WeaverHttp&10110047&17:46:46&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16167 +2024-02-04 17:46:46,345 ERROR [Thread:WeaverHttp&10110047&17:46:46&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:46:46,348 INFO [Thread:WeaverHttp&10110047&17:46:46&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:S/o049M1qbXuKeqPglFcj4JdTdJtbx0ngqXQPWyR9kQ= +2024-02-04 17:46:46,348 INFO [Thread:WeaverHttp&10110047&17:46:46&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4tS6aQFjMe27rn5UAR4MXyXmbMcZUcZ24veUSeGtAnPtso4bCzf1LVknliE%2BXnrBpr77TUIGsDq%2FxvtdggKX9Wa%2FMzouqWF11SZCw%2FkuU4WbDwz4q%2FThhG8QZjBNL6kStnNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZrq9OlNRNrqsJkMoZYMMrOFMtCulb%2BadzRXCLU2RH5g0xBbiU9%2B6nCsui3StdFA9D%2BAR6q4jbjXcCJ0w%2BvxDc4O4knIg1ievsofo8xyBTIRxa5nu62fvICfI9vahzh1nmHaeKTDbB%2B%2FmAOOjISikVqa3ptdEDcqNxLwt3ryNg%2Bf6CnbbjtiYnIdgYHqaw0gkK0jA2vamlERtoAcLnZ004w4yARz2lAL%2FrhYsdPO8Bd6VKqqXVlMgtm0MspVYiAAQ3FB8K%2BPdpH5KBEqrry%2BZTMC8WbQArEYh00i1VjdF%2FbVxrObzX4zx6lGp%2FU0UhsjskvPqxsEumShqQHEBeeDGX5fJRSY0nOQMeOEtE3dYg2dncmznP5JRvOpxMvf0FdMWsQnd54nAazHB%2FV2YWlYiw8RUiVQ%2BOgmPIfhaDNLWp%2BxYYm9wopBw3iNCACOvFpQxNyQaj7lgJmhOn0MDv%2F8Fxrh889zlPOzbIdwEeXmrDzTN%2FEvuSoOK7cQWw7LDWOfPqdquYeQshcZnYo1ynksnvJ4THfOXzGaGo4LvcGLly534kIwu%2FHElP0F%2FVtlH6BKfzKzM%2BXusmpjtGcySF2XGZqRZxmog89dgKQjeMFYiLA%2FQ%3D&loginid=10110047&stamp=1707040006347&token=S%2Fo049M1qbXuKeqPglFcj4JdTdJtbx0ngqXQPWyR9kQ%3D +2024-02-04 17:46:49,258 WARN [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - תURL:/interface/transfer/mobile/apptransferfor3rd.jsp?tododataid=16168&isremark=0&sysId=-22&flowId=815507117245988864&workflowId=-158×tamp=1707039985726 +2024-02-04 17:46:49,258 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver==>10110047 +2024-02-04 17:46:49,259 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - paramMap==>{}{sysId=-22, request_header_user_agent=Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK, param_ip=39.144.82.33, type=app, flowId=815507117245988864, workflowId=-158, timestamp=1707039985726} +2024-02-04 17:46:49,259 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - loginidweaver.length()=={}true +2024-02-04 17:46:49,260 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}Mozilla/5.0 (Linux; Android 13; M2011K2C Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.211 Mobile Safari/537.36 E-Mobile7/7.0.52.20231110 Language/zh Qiyuesuo/physicalSDK +2024-02-04 17:46:49,260 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - ua.contains(E-Mobile7) == [}true +2024-02-04 17:46:49,260 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/ofsTrance.jsp] org.apache.jsp.interface_.transfer.ofsTrance_jsp._jspService() - update no eceute ==>10110047 +2024-02-04 17:46:49,733 ERROR [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - todoDataId=16168 +2024-02-04 17:46:49,733 ERROR [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - isRemark=0 +2024-02-04 17:46:49,736 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp.getToken() - =============apptransferforee9_token:S/o049M1qbXuKeqPglFcj9kjF+DiID/xtrwIS5LNtZ4= +2024-02-04 17:46:49,736 INFO [Thread:WeaverHttp&10110047&17:46:49&http://123.151.115.199:8999/interface/transfer/mobile/apptransferfor3rd.jsp] org.apache.jsp.interface_.transfer.mobile.apptransferfor3rd_jsp._jspService() - ==============APP˷칹ϵͳַhttps://hndtest.bankoftianjin.com/tydb/?param=rJ3yNo2x53XCQtbzIy1wR4E%2BFfupERJ39syDACqz1YHzC4lu22%2Fg%2BUhvMYh4xcLxW14ItLLbTGCEDB%2F0BXH1UkNG%2B4T2hmLinOkbYriwrSSa%2FMzouqWF11SZCw%2FkuU4Wl55y0%2BWZG2l%2B8%2FOY3BBEe9nNl6Z6GMt%2FxSGQu2acSA3LO3FSrchkWaC0eMeAUcCZtbmypSc3o2CT5bXhjd9xdnpRA4g3cL06REf%2BMVRDS6l0bcSMQ7VpDM5mAQFQ7VyMeqGk2PG7bEkTeKN9pmYZqB2FfIMcLvj5XWwrM5W5QQiVysZbaKYrmDTC5g57eqUe%2FP44RI97HI7c2OQ5NLIQKSmFTNveceTeQ3TMpo9YWC9Qk1J8YMeKr%2BbQKXdZNiMnoBsXzTE01xDSo4lyvTXIOOnl1ZBaiDdk%2Fg3hBfER8wZzVWc9W%2Bdz%2BM0C1z9LRyDbFooxzokxKLEufcJ3C1qZmPXQzMBEF52FS0gXhaFSekKnKLNAZqVGzKpCruW9p9KeIYyhdf0XGgcophhuHSOcUZigCJY9ZtzPfMBHYRqrEa9IhvRgbBko4D%2FG%2B8OTOqs9PaYvAwLH6iNRI1JhDycZhoTjIGyQLD6WNiazk%2Fu8vpk9JUU0tgRcNgz0bIuAIhi6XCwMaGSIqXeUCCxR69pF9G42f7aKKDPsgk%2FuRaL2W%2FzkcG68v%2B%2Bkenzmk36InEd4p%2FpHjjpB2r0o5H71Rm%2FSycc7f4U%2B924k9c1%2FYJhIAU%2FgPneyC9tOIdB9z4YuD%2FBw%2FSCyuCNWj3t19%2BDDdM9hxQ%3D%3D&loginid=10110047&stamp=1707040009735&token=S%2Fo049M1qbXuKeqPglFcj9kjF%2BDiID%2FxtrwIS5LNtZ4%3D diff --git a/produce/23/transfer/mobile/MHXX.jsp b/produce/23/transfer/mobile/MHXX.jsp index d009c52..8065e4c 100644 --- a/produce/23/transfer/mobile/MHXX.jsp +++ b/produce/23/transfer/mobile/MHXX.jsp @@ -1,38 +1,31 @@ -<%@ page import="weaver.integration.entrance.bean.OutterLoginBean" %> -<%@ page import="weaver.integration.entrance.service.EntranceService" %> -<%@ page import="weaver.integration.entrance.service.IEntranceService" %> -<%@ page import="weaver.integration.entrance.service.IOutterSysServer" %> -<%@ page import="weaver.integration.entrance.service.impl.NcServer" %> -<%@ page import="weaver.integration.entrance.service.permission.IPermissionService" %> -<%@ page import="weaver.integration.entrance.service.permission.PermissionService" %> <%@ page contentType="text/html;charset=UTF-8" language="java"%> <%--<%@ include file="/systeminfo/init_wev8.jsp" %>--%> -<%@ page import="weaver.integration.logging.LoggerFactory" %> -<%@ page import="weaver.integration.logging.Logger" %> + <%@ page import="weaver.general.Util" %> <%@ page import="java.util.Map" %> -<%@ page import="java.util.Objects" %> + <%@ page import="weaver.general.BaseBean" %> <%@ page import="weaver.hrm.User" %> <%@ page import="weaver.hrm.HrmUserVarify" %> <%@ page import="weaver.interfaces.encode.AES_IV" %> <%@ page import="com.engine.common.util.ParamUtil" %> -<%@ page import="com.icbc.api.internal.apache.http.impl.cookie.S" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="com.wbi.util.StringUtil" %> <% - Logger integration_logger = LoggerFactory.getLogger(); BaseBean bb = new BaseBean(); + String mhurlId = ""; String mhurl = ""; String encodeResultStr = ""; try { User user = HrmUserVarify.getUser(request,response); String loginid = user.getLoginid(); Map paramMap = ParamUtil.request2Map(request); - mhurl = (String) paramMap.get("mhurl"); - + mhurlId = (String) paramMap.get("mhurlId"); + mhurl = getSysUrl(mhurlId); AES_IV aesIV = new AES_IV(); // AES的密钥长度最好是16位(不是必须) String password = "ecology_nsh_2021"; @@ -43,10 +36,39 @@ // 加密 encodeResultStr = aesIV.encode(loginid); // out.println(mhurl); - response.sendRedirect(mhurl+"?loginid="+encodeResultStr); + response.sendRedirect(mhurl+"loginid="+encodeResultStr); }catch (Exception E){ bb.writeLog("mhxxerror====>"+E.getMessage()); - response.sendRedirect(mhurl); + if (StringUtil.isBlank(mhurl)){ + out.print("跳转失败:未查询到系统ID对应的跳转链接(02002)"); + }else { + response.sendRedirect(mhurl); + } + + } + %> + +<%! + public static String getSysUrl(String sysid){ + RecordSet rs = new RecordSet(); + String url = "-1"; + //查询建模 + rs.executeQuery("select * from uf_otherSysInfo where id = ?" ,sysid); + if (rs.next()){ + url = Util.null2String(rs.getString("xtdz")); + }else { + return "-1"; + } + url = url.trim(); + if (!StringUtil.isBlank(url)){ + //判断是否带?号 + if (url.indexOf("?") == -1){ + url = url+"?"; + }else{ + url = url+"&"; + } + }; + return url; } - %> \ No newline at end of file +%> \ No newline at end of file diff --git a/produce/23/transfer/ofsTrance.jsp b/produce/23/transfer/ofsTrance.jsp index b8861b0..76f3c70 100644 --- a/produce/23/transfer/ofsTrance.jsp +++ b/produce/23/transfer/ofsTrance.jsp @@ -13,6 +13,7 @@ <%@ page import="org.apache.commons.lang3.StringUtils" %> <%@ page import="com.alibaba.fastjson.JSONObject" %> <%@ page import="weaver.interfaces.sso.cas.CASLoginUtil" %> +<%@ page import="com.wbi.util.ParamUtil" %> <%@ include file="/systeminfo/init_wev8.jsp" %> <% @@ -58,12 +59,29 @@ String toURL = todoDataUtils.getURL("app".equalsIgnoreCase(type)? "1":"0" , ofsSysInfo , todoData , request , paramMap) ; log.warn("跳转URL:" + toURL); - rs.executeUpdate("update ofs_todo_data set viewtype=1 where requestid=? and userid=? and islasttimes=1" , requestId , userId); + //添加判断,是否为小号,为小号则不更新未读标记 + String loginidweaver = getCookie(request, "loginidweaver"); + log.info("loginidweaver==>"+loginidweaver); - rs.executeUpdate("update ofs_done_data set viewtype=1 where requestid=? and userid=? " , requestId , userId); + log.info("paramMap==>{}"+ParamUtil.request2Map(request)); + String ua = Util.null2String(ParamUtil.request2Map(request).get("request_header_user_agent")); + log.info("loginidweaver.length()=={}"+(loginidweaver.length() == 8)); + log.info(" ua.contains(E-Mobile7) == [}"+ua); + log.info(" ua.contains(E-Mobile7) == [}"+ua.contains("E-Mobile7") ); + if(loginidweaver.length() == 8 && ua.contains("E-Mobile7") ){ + log.info("update no eceute ==>"+loginidweaver); - rs.executeUpdate("delete from SysPoppupRemindInfoNew where userid = ? and requestid = ?", userId, requestId); + }else { + log.info("update viewtype=1 ==>"+loginidweaver); + + rs.executeUpdate("update ofs_todo_data set viewtype=1 where requestid=? and userid=? and islasttimes=1" , requestId , userId); + + rs.executeUpdate("update ofs_done_data set viewtype=1 where requestid=? and userid=? " , requestId , userId); + + rs.executeUpdate("delete from SysPoppupRemindInfoNew where userid = ? and requestid = ?", userId, requestId); + + } %>