|
|
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.util.ArchivesUtil;
|
|
|
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.FieldValueBean;
|
|
|
import com.engine.workflow.entity.requestForm.TableInfo;
|
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import weaver.conn.RecordSet;
|
|
|
import weaver.general.BaseBean;
|
|
|
import weaver.general.Util;
|
|
|
import weaver.hrm.User;
|
|
|
import weaver.hrm.company.DepartmentComInfo;
|
|
|
import weaver.workflow.request.RequestManagerForTipsinfo;
|
|
|
import weaver.workflow.request.WFLinkInfo;
|
|
|
import weaver.workflow.workflow.WorkflowBillComInfo;
|
|
|
import weaver.workflow.workflow.WorkflowComInfo;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.util.*;
|
|
|
|
|
|
public class HtmlToPdfServiceCusImpl extends Service implements HtmlToPdfServiceCus {
|
|
|
public static Logger log = LoggerFactory.getLogger("Archives");
|
|
|
@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"));
|
|
|
String workflowid = Util.null2String(reqpParams.get("workflowid"));
|
|
|
//只需要转换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); //明细强制不分页
|
|
|
log.error("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"));
|
|
|
|
|
|
//根据流程id获取是否需要协办
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.executeQuery("select * from uf_ArchivesSet where mainwfid = ?",workflowid);
|
|
|
//是否有协办流程
|
|
|
//------------------------------start----------------------------
|
|
|
try {
|
|
|
|
|
|
|
|
|
boolean isCo = false;
|
|
|
String cowfid = "";
|
|
|
String cofield = "";
|
|
|
String cofieldid = "";
|
|
|
if (rs.next()){
|
|
|
cowfid = Util.null2String(rs.getString("cowfid"));
|
|
|
if (!StringUtils.isBlank(cowfid)){
|
|
|
isCo = true;
|
|
|
cofield = Util.null2String(rs.getString("cofield"));
|
|
|
cofieldid = Util.null2String(rs.getString("cofieldid"));
|
|
|
}
|
|
|
}
|
|
|
log.info("isCo:{};cowfid:{};cofield:{};cofieldid:{}",isCo,cowfid,cofield,cofieldid);
|
|
|
|
|
|
|
|
|
if(isCo){
|
|
|
ArrayList<String> CoSubRequest = new ArrayList<>();
|
|
|
List<String> Cowfids = Arrays.asList(cowfid.split(","));
|
|
|
Map<String, String> subRequest = ArchivesUtil.getSubRequest(requestid, 6);
|
|
|
log.info("subRequest:{}",subRequest);
|
|
|
for (Map.Entry<String, String> subRequestEntry : subRequest.entrySet()) {
|
|
|
String subWFid = subRequestEntry.getValue();
|
|
|
if (Cowfids.contains(subWFid)){
|
|
|
CoSubRequest.add(subRequestEntry.getKey());
|
|
|
}
|
|
|
}
|
|
|
log.info("CoSubRequest.size:{}",CoSubRequest.size());
|
|
|
if (CoSubRequest.size() != 0){
|
|
|
WorkflowComInfo wf = new WorkflowComInfo();
|
|
|
WorkflowBillComInfo wcInfo = new WorkflowBillComInfo();
|
|
|
String formId = wf.getFormId(Cowfids.get(0));
|
|
|
String tablename = wcInfo.getTablename(formId);
|
|
|
String cosql = "select "+cofield+" from " + tablename + " where " +
|
|
|
" requestid in ( " + String.join(",",CoSubRequest) + " ) " +
|
|
|
" order by requestid asc ";
|
|
|
log.info("cosql:{}",cosql);
|
|
|
|
|
|
rs.executeQuery(cosql);
|
|
|
log.info("rs.getExceptionMsg():{}",rs.getExceptionMsg());
|
|
|
String fieldValue = "";
|
|
|
String[] cofieldsplit = cofield.split(",");
|
|
|
String codept = cofieldsplit[0]; //协办部门
|
|
|
String corequirement = cofieldsplit[1]; //协办要求
|
|
|
|
|
|
while (rs.next()){
|
|
|
String codeptValue = Util.null2String(rs.getString(codept));
|
|
|
String corequirementText = Util.null2String(rs.getString(corequirement));
|
|
|
log.info("codeptValue:{}",codeptValue);
|
|
|
log.info("corequirementText:{}",corequirementText);
|
|
|
String codeptText = "";
|
|
|
String[] split = codeptValue.split(",");
|
|
|
DepartmentComInfo deptCom = new DepartmentComInfo();
|
|
|
for (String item : split) {
|
|
|
try {
|
|
|
String departmentName = deptCom.getDepartmentName(item);
|
|
|
codeptText = codeptText + "," + departmentName;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
log.info("codeptText:{}",codeptText);
|
|
|
if (codeptText.startsWith(",")){
|
|
|
codeptText = codeptText.substring(1);
|
|
|
}
|
|
|
if (!StringUtils.isBlank(codeptText)) {
|
|
|
fieldValue = fieldValue + "\n" + codeptText + " : " + corequirementText;
|
|
|
}
|
|
|
}
|
|
|
log.info("fieldValue:{}",fieldValue);
|
|
|
if (fieldValue.startsWith("\n")){
|
|
|
fieldValue = fieldValue.substring(1);
|
|
|
}
|
|
|
log.info("fieldValue:{}",fieldValue);
|
|
|
HashMap<String, Object> cofieldMap = new HashMap<>();
|
|
|
cofieldMap.put("value",fieldValue);
|
|
|
log.info("maindataold:{}",maindata);
|
|
|
FieldValueBean fieldValueBean = new FieldValueBean();
|
|
|
fieldValueBean.setValue(fieldValue);
|
|
|
Map datas = (Map)maindata.get("datas");
|
|
|
log.info("datas:{}",datas);
|
|
|
log.info("datas:{}", datas.getClass().getName() );
|
|
|
|
|
|
datas.put(cofieldid,fieldValueBean);
|
|
|
log.info("maindatanew:{}",maindata);
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
log.error(e.getMessage());
|
|
|
}
|
|
|
//------------------------------end----------------------------
|
|
|
//明细表数据
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
|
|
|
log.error("ismode:"+ismode);
|
|
|
|
|
|
//第五步:模板布局
|
|
|
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);
|
|
|
log.error("layoutid:"+layoutid);
|
|
|
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);
|
|
|
log.error(JSONObject.toJSONString(apidatas));
|
|
|
long end2 = System.currentTimeMillis()-start2;
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
log.error("loadform接口+底部签字意见+detail耗时:"+end2);
|
|
|
log.error("apidata"+JSONObject.toJSONString(apidatas));
|
|
|
|
|
|
//是否开启水印
|
|
|
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;
|
|
|
log.error("【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;
|
|
|
}
|
|
|
|
|
|
}
|