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.

336 lines
16 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.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;
}
}