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