You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
11 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String, Object> getHtml(Map<String, Object> reqpParams, User user) {
return null;
}
@Override
public Map<String, Object> getFormDatas(Map<String, Object> reqpParams) {
Map<String, Object> apidatas = new HashMap<String, Object>();
Map<String, Object> result =new HashMap<String, Object>();
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<String, Object> 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<String, Object> 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<String, Object> commonLayout = new HashMap<String, Object>();
if (ismode == 0) {
commonLayout = commandExecutor.execute(new GenerateCommonLayoutCmd(params, user));
}
//加载表单信息,包括字段信息、明细信息等
Map<String, Object> forminfo = commandExecutor.execute(new FormInfoCmd(requestMap, user, params, commonLayout));
apidatas.putAll(forminfo);
//联动配置
apidatas.put("linkageCfg", commandExecutor.execute(new LinkageCfgCmd(params,user)));
//加载主表数据
Map<String, Object> maindata = commandExecutor.execute(new FormDataCmd(requestMap, user, params, (Map<String, TableInfo>) forminfo.get("tableInfo")));
apidatas.put("maindata", maindata.get("datas"));
//明细表数据
Map<String, TableInfo> tableinfomap = (Map<String, TableInfo>)forminfo.get("tableInfo");
List<String> detailmark = new ArrayList<String> ();
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<String, Object> 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 <String> canViewIds = new ArrayList <String>();
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<String,Object> 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<String,Object> html = commandExecutor.execute(new HtmlToPdfCmd(apidatas,user));
result.putAll(html);
long end = System.currentTimeMillis()-start2;
baseBean.writeLog("【pdf】 总耗时:"+end);
return html;
}
@Override
public Map<String, Object> getFormInfoForWM(Map<String, Object> reqpParams) {
Map<String, Object> apidatas = new HashMap<String, Object>();
Map<String, Object> result =new HashMap<String, Object>();
String requestid = Util.null2String(reqpParams.get("requestid"));
String modeid = Util.null2String(reqpParams.get("modeid"));
Map<String, Object> 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<String, Object> 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<String, Object> commonLayout = new HashMap<String, Object>();
if (ismode == 0) {
commonLayout = commandExecutor.execute(new GenerateCommonLayoutCmd(params, user));
}
//加载表单信息,包括字段信息、明细信息等
Map<String, Object> forminfo = commandExecutor.execute(new FormInfoCmd(requestMap, user, params, commonLayout));
apidatas.putAll(forminfo);
//加载主表数据
Map<String, Object> maindata = commandExecutor.execute(new FormDataCmd(requestMap, user, params, (Map<String, TableInfo>) forminfo.get("tableInfo")));
apidatas.put("maindata", maindata.get("datas"));
return apidatas;
}
}