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

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