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; } }