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.

1444 lines
63 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.action;
import com.alibaba.fastjson.JSON;
import com.api.doc.detail.service.DocSaveService;
import com.api.doc.detail.util.SendMsgForNewDocThread;
import com.api.workflow.util.ServiceUtil;
import com.engine.custom.archives.workflow.biz.requestForm.RequestDocPropManagerCus;
import com.engine.custom.archives.workflow.biz.requestForm.SaveDocDetailBizCus;
import com.engine.custom.archives.workflow.biz.requestForm.WfToDocBizCus;
import com.engine.workflow.biz.requestForm.WfWaterMark4WfToDocBiz;
import com.engine.workflow.entity.WorkflowToDocSettingInfoEntity;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import weaver.alioss.AliOSSObjectManager;
import weaver.conn.RecordSet;
import weaver.docs.category.SecCategoryComInfo;
import weaver.docs.docs.*;
import weaver.file.FileUpload;
import weaver.file.ImageFileManager;
import weaver.general.*;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.integration.logging.Logger;
import weaver.integration.logging.LoggerFactory;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import weaver.system.SystemComInfo;
import weaver.weaversso.CreateTokenUtil;
import weaver.workflow.msg.PoppupRemindInfoUtil;
import weaver.workflow.request.RequestManager;
import weaver.workflow.workflow.WorkflowConfigComInfo;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* 用来将流程存为文档步骤为先将流程保存为html文件 然后新建一个html文档保存的html文件作为html文档的附件
*
* Date: 2008-12-18
* @author cwj
* @version 1.0
*/
@Slf4j
public class WorkflowToDocCus {
String SUCCESS = "1";
String FAILURE_AND_CONTINUE = "0";
// private static final Logger log = LoggerFactory.getLogger(WorkflowToDocCus.class);
private final static int THREAD_NUM = 10;//10个固定线程池
private final static ExecutorService expPool = Executors.newFixedThreadPool(THREAD_NUM);//使用线程池进行线程管理
private static ImageFileIdUpdate imageFileIdUpdate = new ImageFileIdUpdate();
private static VersionIdUpdate versionIdUpdate = new VersionIdUpdate();
private static Pattern port_pattern = Pattern.compile("^\\w*[\\s\\S]+(:\\d+)", Pattern.CASE_INSENSITIVE);
private String isaesencrypt="";
private String aescode="";
//底部签字意见列表显示数量
private int pageSize =99999;
public static Class<?> class_MultiLangFilter;
static {
try {
class_MultiLangFilter = Class.forName("weaver.filter.MultiLangFilter");
} catch (ClassNotFoundException e) {
new BaseBean().writeLog("class MultiLangFilter doesn't exist");
}
}
/**
*
* @param request
* @param reqType 流程类型 0-主流程 1-子流程
* @return
*/
public List<String> execute(RequestInfo request ,int reqType ) {
log.info("流程转文档开始……workflowToDoc start");
String cookie = null;
if (class_MultiLangFilter!=null) {
try {
cookie = (String)class_MultiLangFilter.getMethod("getThreadlocalCookies").invoke(class_MultiLangFilter);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
}
RequestManager requestManager = request.getRequestManager();
String requestid = Util.null2String(request.getRequestid());
String userid = Util.null2String(request.getLastoperator());
String requestname = Util.null2String(request.getDescription());
String workflowid = Util.null2String(request.getWorkflowid());
List<String> docids = Start(requestid, userid, requestname, workflowid, cookie, requestManager, reqType);
log.info("流程转文档结束……workflowToDoc end");
return docids;
}
//接口存文档
public List<String> Start(String requestid, String userid, String requestname, String workflowid, String cookie,RequestManager requestManager,int reqType) {
return Start(requestid, userid, requestname, workflowid, cookie,requestManager,true ,reqType);
}
//批量存文档用
public List<String> Start(String requestid, String userid, String requestname, String workflowid, String cookie ,int reqType) {
RequestManager requestManager = null;
requestManager = getRequestManager(requestManager,requestid);
return Start(requestid, userid, requestname, workflowid, cookie,requestManager,false,reqType);
}
/**
* start
* @param requestid
* 流程id
* @param userid
* 用户id
* @param requestname
* 流程名 流程名作为文档的文档名
* @param workflowid
* @return
*/
public List<String> Start(String requestid, String userid, String requestname, String workflowid, String cookie, RequestManager requestManager, boolean isfromaction , int reqType) {
String src = requestManager.getSrc(); //用于判断是否流程监控干预
User user = new User(Util.getIntValue(userid));
//String wfdocpath = Util.null2String(getWfDocPath(workflowid));
WfToDocBizCus wfbiz = new WfToDocBizCus();
String wfdocpath = Util.null2String(wfbiz.getWfDocPath(workflowid,requestid));
if (wfdocpath.equals("")) {
log.error("流程保存为文档失败,因为未设置流程保存文档的目录");
return null;
}
String docfiles = getDocFiles(workflowid);
if ("".equals(docfiles)){
log.error("流程保存为文档失败,因为未勾选文档附件复选框");
return null;
}
//在这里先获取到modeid 线程中获取时流程可能已经到了下个节点导致模板获取的不对
int nodeid = requestManager.getNodeid();
com.api.workflow.util.ServiceUtil serviceUtil = new ServiceUtil();
if (!isfromaction)
nodeid = serviceUtil.getCurrentNode(requestid,user);
RecordSet rs = new RecordSet();
rs.executeQuery("select * from workflowactionset where workflowid = ? and INTERFACEID = 'WorkflowToDoc'",workflowid);
log.error("oldnodeid:"+nodeid);
if (rs.next()){
nodeid = Util.getIntValue(rs.getString("nodeid"));
}
log.error("newnodeid:"+nodeid);
String modeid = wfbiz.getModeid(Util.getIntValue(workflowid),Util.getIntValue(requestid),nodeid);
int keepsign = getKeepSign(workflowid);
//增加配置文件 是否异步生成
// String isSync = Util.null2String(new WorkflowConfigComInfo().getValue("workflowtodoc_issync"));
String isSync = "1";
if (isSync.equals("1")){
String filename = UUID.randomUUID().toString(); //防止高并发文件名重复
String temppath = getFileSavePath();
LinkedHashMap<String, String> fileids = new LinkedHashMap<String, String> ();
//是否开启水印
boolean isOpenWaterMark = WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid));
String onlineHtmlMethod = Util.null2String(new WorkflowConfigComInfo().getValue("onlineHtmlMethod"));
if (docfiles.contains("1")) { //在线html
if (!onlineHtmlMethod.equals("1")){ //走离线的方法
generateOnLineHtml(requestid,userid, requestname, workflowid,wfdocpath, cookie,fileids,isOpenWaterMark);
}
}
//离线html/pdf
WfToDocBizCus wfToDocBiz = new WfToDocBizCus(user,pageSize,keepsign,docfiles,modeid,isOpenWaterMark);
wfToDocBiz.setOnlineHtmlMethod(onlineHtmlMethod);
wfToDocBiz.generatepdfandhtml(requestid,filename,temppath,src,reqType,workflowid);
fileids.putAll(wfToDocBiz.getfileids(requestname,filename,temppath));
//保存
List<String> docids = saveDocDetail(requestname, workflowid, requestid, wfdocpath, userid, fileids, requestManager, wfbiz);
return docids;
}else {
//线程池执行
expPool.execute(new Runnable() {
@Override
public void run() {
String filename = UUID.randomUUID().toString(); //防止高并发文件名重复
String temppath = getFileSavePath();
LinkedHashMap<String, String> fileids = new LinkedHashMap<String, String> ();
//是否开启水印
boolean isOpenWaterMark = WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid));
String onlineHtmlMethod = Util.null2String(new WorkflowConfigComInfo().getValue("onlineHtmlMethod"));
if (docfiles.contains("1")) { //在线html
if (!onlineHtmlMethod.equals("1")){ //走离线的方法
generateOnLineHtml(requestid,userid, requestname, workflowid,wfdocpath, cookie,fileids,isOpenWaterMark);
}
}
//离线html/pdf
WfToDocBizCus wfToDocBiz = new WfToDocBizCus(user,pageSize,keepsign,docfiles,modeid,isOpenWaterMark);
wfToDocBiz.setOnlineHtmlMethod(onlineHtmlMethod);
wfToDocBiz.generatepdfandhtml(requestid,filename,temppath,src, reqType,workflowid);
fileids.putAll(wfToDocBiz.getfileids(requestname,filename,temppath));
//保存
saveDocDetail(requestname, workflowid,requestid, wfdocpath,userid,fileids,requestManager,wfbiz);
}
});
}
return new ArrayList<>();
}
private void generateOnLineHtml(String requestid, String userid, String requestname, String workflowid,String wfdocpath, String cookie,LinkedHashMap<String, String> fileids,boolean isOpenWaterMark){
String url[] = getUrl(requestid, userid);
if(url!=null && url.length==5){//避免url为空时出现异常
boolean hasNull = false;//检查5个值是不是有空如果有就不导为文档了
/*
* QC271940解决AD域用户使用流程存为文档功能
*/
/*for(int cx=0; cx<url.length; cx++){
if(url[cx]==null || "".equals(url[cx])){
hasNull = true;
}
}*/
if(hasNull == false){
log.info("生成HTML……");
getWorkflowHtml(url, requestid, requestname, workflowid, wfdocpath,userid, cookie,fileids);
}
}else{
log.info("URL数据错误"+ JSON.toJSONString(url));
}
}
/**
* 获取流程的url
*
* @param requestid
* 流程id
* @param userid
* 当前用户
* @return
*/
public String[] getUrl(String requestid, String userid) {
String sql = "";
String tempurl = "";
String loginid = "";
String password = "";
int accounttype = 0; //账号类型,0:主账号1次账号
int belongto = 0;
String isADaccount="";
String para = "";
String oaaddress = "";
String params[] = new String[5];
RecordSet rs = new RecordSet();
sql = "select * from SystemSet";
rs.executeSql(sql);
rs.next();
oaaddress = Util.null2String(rs.getString("oaaddress"));
if (oaaddress.equals("")) {
log.error("流程保存为文档失败因为系统未设置OA访问地址,requestid=" + requestid);
return params;
}
sql = "select * from hrmresource where id = " + userid;
rs.executeSql(sql);
while (rs.next()) {
loginid = rs.getString("loginid");
password = rs.getString("password");
isADaccount = rs.getString("isadaccount");
accounttype = Util.getIntValue(Util.null2String(rs.getString("accounttype")),0);
belongto = Util.getIntValue(Util.null2String(rs.getString("belongto")));
}
sql = "select * from HrmResourceManager where id = " + userid;
rs.executeSql(sql);
while (rs.next()) {
loginid = rs.getString("loginid");
password = rs.getString("password");
}
String f_weaver_belongto_userid = "";
String f_weaver_belongto_usertype = "0";
if(accounttype == 1 && belongto > 0){ //次账号,查询主账号,用主账号登录
f_weaver_belongto_userid = userid;
sql = "select * from hrmresource where id = " + belongto;
rs.executeSql(sql);
if(rs.next()){
isADaccount = rs.getString("isadaccount");
loginid = rs.getString("loginid");
password = rs.getString("password");
}
}
if ((!loginid.equals("") && !password.equals(""))||(!loginid.equals("")&&isADaccount.equals("1"))) {//QC271940[80][90]Ldap集成-解决AD用户无法使用流程存为文档功能
para = "/workflow/request/ViewRequest.jsp?haveVerifyForward=true&requestid=" + requestid
+ "&para2=" + loginid + "&para3=" + password;
} else {
log.error("流程保存为文档失败,因为用户名和密码为空,requestid=" + requestid);
return params;
}
tempurl = oaaddress
+ "/login/VerifyRtxLogin.jsp?urlfrom=workflowtodoc&para1="
+ para;
Map<String, String> result = CreateTokenUtil.createToken("ecology", loginid);
String token = "";
if ("success".equals(result.get("state"))){
token = result.get("data"); //tokenֵ
} else {
String msg = result.get("data");
}
// params[0] = oaaddress+"/login/VerifyRtxLogin.jsp";
params[0] = oaaddress+"/wui/index.html?ssoToken="+token+"#/main";
params[1] = "workflowtodoc";
String pageurl = "/workflow/request/ViewRequest.jsp?haveVerifyForward=true&isworkflowhtmldoc=1&requestid=" + requestid;
if(accounttype > 0 && belongto > 0){
pageurl += "&f_weaver_belongto_userid=" + f_weaver_belongto_userid + "&f_weaver_belongto_usertype=" + f_weaver_belongto_usertype;
}
params[2] = pageurl;
/*try {
params[3] = new String(loginid.getBytes(), "8859_1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
params[3] = PoppupRemindInfoUtil.encrypt(loginid);//解决中文账号问题
params[4] = password;
return params;
}
/**
* 根据url读取html文件并生成文档放到指定的目录下
*
* @param url
* 流程页面的url
*
* @param requestid
* 流程id
* @param requestname
* 流程名称
* @param workflowid
* 流程类型id
* @param wfdocpath
* 文档存放的目录
*/
public void getWorkflowHtml(String url[], String requestid,
String requestname, String workflowid, String wfdocpath,String userid, String cookie,LinkedHashMap<String, String> fileids) {
HttpClient client = FWHttpConnectionManager.getHttpClient();
PostMethod method = new PostMethod(url[0]);//oa地址
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
NameValuePair[] params = {
new NameValuePair("urlfrom", url[1]),//urlfrom
new NameValuePair("para1",url[2]),//requesturl
new NameValuePair("para2",url[3] ),//loginid
new NameValuePair("para3",url[4])};//url4密码
method.setRequestBody(params);
//log.info("----workflowtodoc----"+url[0] + "?urlfrom="+url[1]+"&para1="+url[2]+"&para2="+url[3]+"&para3="+url[4]);
int statusCode = client.executeMethod(method);
new BaseBean().writeLog("WorkflowToDoc statusCode :"+statusCode);
String temppath = getFileSavePath();
String filename = System.currentTimeMillis() + "";
String htmlname = temppath + filename;
File _temppath = new File(temppath);
if(!_temppath.exists()){
_temppath.mkdirs();
}
if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_OK) {
Header locationHeader = method.getResponseHeader("location");
if (locationHeader != null) {
String tempurl = locationHeader.getValue();
if(!tempurl.startsWith("http://") && !tempurl.startsWith("https://")) {
//GET PORT
String port_string = "";
Matcher matcher = port_pattern.matcher(url[0]);
if (matcher.find()) {
port_string = matcher.group(1);
}
tempurl = "http://"
// + (port_string.isEmpty()? "" : "localhost"+port_string)
+ (port_string.isEmpty()? "" : "127.0.0.1"+port_string)
+ tempurl;
}
new BaseBean().writeLog("WorkflowToDoc cookie :"+cookie);
tempurl = getFinallyUrl(client, tempurl,cookie);
tempurl = tempurl.replaceFirst(".jsp", "Iframe.jsp");
tempurl = tempurl+"&urlfrom=workflowtodoc";
new BaseBean().writeLog("WorkflowToDoc client.executeMethod(g) start :"+System.currentTimeMillis());
new BaseBean().writeLog("WorkflowToDoc tempurl :"+tempurl);
GetMethod g = new GetMethod(tempurl);
g.setRequestHeader("cookie", cookie);
client.executeMethod(g);
OutputStream os=new FileOutputStream(htmlname);
new BaseBean().writeLog("WorkflowToDoc client.executeMethod(g) end :"+System.currentTimeMillis());
// SystemComInfo syscominfo=new SystemComInfo() ;
// this.isaesencrypt = syscominfo.getIsaesencrypt();
// this.aescode = Util.getRandomString(13);
// if("1".equals(this.isaesencrypt)){
// try{
// os=AESCoder.encrypt(os, this.aescode);
// } catch(Exception e){
//
// }
// }
OutputStreamWriter output = new OutputStreamWriter(os, "UTF-8");
BufferedWriter bw = new BufferedWriter(output);
BufferedReader in = new BufferedReader(new InputStreamReader(g.getResponseBodyAsStream(), "UTF-8"));
StringBuffer sb=new StringBuffer();
String line = in.readLine();
while (line != null) {
line = line.trim();
if(line.indexOf("</a>")>=0&&line.indexOf("openSignPrint()")>=0&&line.indexOf("onclick")>=0){
//去掉转发按钮
}else if(line.indexOf("<img")>=0&&line.indexOf("class=\"transto\"")>=0&&line.indexOf("onclick")>=0&&line.indexOf("transtoClick(this)")>=0){
}else if(line.indexOf("var")>=0&&line.indexOf("bar")>=0&&line.indexOf("eval")>=0&&line.indexOf("handler")>=0&&line.indexOf("text")>=0){
sb.append("var bar=eval(\"[]\");\n");
}else{
sb.append(line + "\n");
}
line = in.readLine();
}
//添加水印
if(WfWaterMark4WfToDocBiz.isOpenWaterMark(Util.getIntValue(workflowid))){
WfWaterMark4WfToDocBiz wfWaterMark4WfToDocBizCus = new WfWaterMark4WfToDocBiz(new User(Util.getIntValue(userid)));
wfWaterMark4WfToDocBizCus.generateFormData(requestid);
String watetmarkhtml = wfWaterMark4WfToDocBizCus.getWaterMarkHtml(false,Util.getIntValue(workflowid),Util.getIntValue(requestid),true);
int begIndex = sb.lastIndexOf("</body>");
String frontcontent = sb.substring(0, begIndex);
String behindcontent = sb.substring(begIndex);
sb.setLength(0);
sb.append(frontcontent)
.append("\n").append(watetmarkhtml)
.append(behindcontent);
}
//去掉ext的button,<script type="text/javascript" src="/js/wf_wev8.js">var bar=eval("[]");</script>
sb.append("<script type=\"text/javascript\">\n");
sb.append("function drm4request2doc(){\n");
sb.append("\tbar=eval(\"[]\");\n");
sb.append("\tdocument.getElementById(\"rightMenu\").style.display=\"none\";\n");
sb.append("}\n");
sb.append("window.attachEvent(\"onload\", drm4request2doc);\n");
sb.append("</script>");
String sdata=sb.toString();
bw.write(sdata,0,sdata.length());
// long size = 0l;
// File f = new File(htmlname);
// if (f.exists()) {
// size = f.length();
// }
bw.flush();
bw.close();
in.close();
InputStream inputStream = null;
byte[] buffer = null;
File file = new File(htmlname);
if (file.exists()){
try {
inputStream = new FileInputStream(file);
buffer = new byte[(int) file.length()];
inputStream.read(buffer);
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
//
// if("1".equals(this.isaesencrypt)){
// String sm4 = Util.null2String(new weaver.general.BaseBean().getPropValue("weaver_security_type","reversible_enc_type"));
// if("sm4".equalsIgnoreCase(sm4)&&aescode.startsWith("sm4start")&&aescode.endsWith("sm4end")){
// InputStream is = null;
// String _htmlname = temppath + java.util.UUID.randomUUID();
// try{
// is = new FileInputStream(f);
// is = AESCoder.encrypt(is, aescode);
//
// OutputStream ops = new FileOutputStream(_htmlname);
// int n = 0;
// byte []b = new byte[2048];
// while((n=is.read(b)) != -1){
// ops.write(b,0,n);
// }
// ops.flush();
// ops.close();
// is.close();
// //f.delete();
// FileSecurityUtil.deleteFile(f);
// htmlname = _htmlname;
// }catch(Exception e){
// new weaver.general.BaseBean().writeLog(e);
// }
// }
// }
ImageFileManager imageFileManager = new ImageFileManager();
imageFileManager.setComefrom("WorkflowToDoc");
imageFileManager.setData(buffer);
imageFileManager.setImagFileName(requestname+".html");
int imagefileid = imageFileManager.saveImageFile();
// System.out.println("-在线-imagefileid----"+imagefileid);
// 保存imagefile
//int imagefileid = saveImageFile(requestname, htmlname, size,false);
if (imagefileid <= 0) {
log.error("保存在线HTML文件失败");
return ;
}
//把fileid存入fileidsmap中最后一起保存文档-附件关联关系
fileids.put("online_html",imagefileid+"");
//saveDocDetail(requestname, htmlname, size, workflowid,requestid, wfdocpath,userid);
if(g!=null){
g.releaseConnection();
}
if(method!=null){
method.releaseConnection();
}
}
}
} catch (HttpException e) {
log.error("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
log.error("Fatal transport error: " + e.getMessage());
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
new BaseBean().writeLog(e);
}finally {
method.releaseConnection();
}
}
/**
* 获得最后的url因为response之后的值post方法不能直接获取
* @param client
* @param url
* @return
*/
public String getFinallyUrl(HttpClient client, String url,String cookie) {
PostMethod g = new PostMethod(url);
try {
if(!"".equals(cookie) && cookie != null){
g.setRequestHeader("cookie", cookie);
}
client.executeMethod(g);
} catch (Exception e) {
e.printStackTrace();
return url;
}
Header locationHeader = g.getResponseHeader("location");
if (locationHeader != null) {
url = locationHeader.getValue();
url = getFinallyUrl(client, url);
}
if (g != null) {
g.releaseConnection();
}
return url;
}
public String getFinallyUrl(HttpClient client, String url) {
return getFinallyUrl(client,url,null);
}
//重载下 以防有其他地方调用
public Object saveDocDetail(String imagefilename, String workflowid, String requestid, String allwfdocpath, String userid, LinkedHashMap<String,String> fileids, RequestManager requestManager) {
WfToDocBizCus wfbiz = new WfToDocBizCus();
wfbiz.getWfDocPath( workflowid, requestid);
return this.saveDocDetail(imagefilename,workflowid,requestid,allwfdocpath,userid,fileids,requestManager,wfbiz);
}
/**
* 保存文档信息
*
* @param imagefilename
* 文档名称
* @param workflowid
* 流程类型id
* @param allwfdocpath
* 文档目录
* @return 保存是否成功
*/
public List<String> saveDocDetail(String imagefilename, String workflowid, String requestid, String allwfdocpath, String userid, LinkedHashMap<String,String> fileids, RequestManager requestManager, WfToDocBizCus wfbiz) {
RecordSet rs = new RecordSet();
if (allwfdocpath.equals("")) {
log.error("流程保存为文档失败,因为未设置流程保存文档的目录");
return new ArrayList<>();
}
String wfdocpath[] = Util.TokenizerString2(allwfdocpath, ",");
int maincategory = 0;
int subcategory = 0;
int seccategory = 0;
if(wfdocpath.length==1){//如果目录就传了一层,默认只给到seccategory
seccategory = Util.getIntValue(wfdocpath[0],0);
}else{
if(wfdocpath.length > 0 ) maincategory = Util.getIntValue(wfdocpath[0],0);
if(wfdocpath.length > 1 ) subcategory = Util.getIntValue(wfdocpath[1],0);
if(wfdocpath.length > 2 ) seccategory = Util.getIntValue(wfdocpath[2],0);
}
// 保存docdetail
ResourceComInfo ResourceComInfo = null;
try {
ResourceComInfo = new ResourceComInfo();
} catch (Exception e) {
log.error("异常:",e);
}
String sql = "";
int doclangurage = 7;
int docowner = Util.getIntValue(getWfDocOwner(workflowid,requestid), 0);
int docdepartmentid = Util.getIntValue(ResourceComInfo
.getDepartmentID("" + docowner), 0);
String docsubject = imagefilename;
Calendar today = Calendar.getInstance();
String formatdate = Util.add0(today.get(Calendar.YEAR), 4) + "-"
+ Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-"
+ Util.add0(today.get(Calendar.DAY_OF_MONTH), 2);
String formattime = Util.add0(today.get(Calendar.HOUR_OF_DAY), 2) + ":"
+ Util.add0(today.get(Calendar.MINUTE), 2) + ":"
+ Util.add0(today.get(Calendar.SECOND), 2);
String doccreatedate = formatdate;
String doccreatetime = formattime;
String doclastmoddate = formatdate;
String doclastmodtime = formattime;
String docValidDate = formatdate;
String docValidTime = formattime;
String parentids = "";
String docCreaterType = "1";
String docextendname = "html";
String docCode = "";
String doccontent = "";
String clientIp = "";
rs.executeSql("select clientAddress from SysMaintenanceLog, SystemLogItem where operateitem='60' AND SysMaintenanceLog.operateItem = SystemLogItem.itemId and operateuserid = '" + userid + "' order by id desc");
rs.next();
clientIp = rs.getString("clientAddress");
if("0:0:0:0:0:0:0:1".equals(clientIp)){
clientIp = "127.0.0.1";
}
rs.executeProc("Doc_SecCategory_SelectByID",seccategory+"");
rs.next();
String docapprovable = "";
String docreplyable = rs.getString("replyable");
String isreply = "";
int replydocid = 0;
String docpublishtype = "";
int itemid = 0;
int itemmaincategoryid = 0;
int hrmresid = 0;
int crmid = 0;
int projectid = 0;
int financeid = 0;
int doccreaterid = docowner;
int doclastmoduserid = docowner;
int docapproveuserid = 0;
String docapprovedate = "";
String docapprovetime = "";
int docarchiveuserid = 0;
String docarchivedate = "";
String docarchivetime = "";
String docstatus = "1";
int assetid = 0;
int ownerid = docowner;
String keyword = "";
int accessorycount = 0;
String docfiles = getDocFiles(workflowid);
if (docfiles.contains("1")) {
accessorycount++;
}
if (docfiles.contains("2")) {
accessorycount++;
}
if (docfiles.contains("3")){
accessorycount++;
}
int replaydoccount = 0;
int docType = 1;//html
String canCopy = "1";
String canRemind = "1";
String orderable = rs.getString("orderable");
int docEdition = -1;
int docSmallEdition = -1;
int docEditionId = -1;
SecCategoryComInfo scc =null;
try {
scc = new SecCategoryComInfo();
if(scc.isEditionOpen(seccategory)) {//如果版本管理开启
docEdition=1;
docEditionId=this.getNextEditionId();
if(scc.isOpenSizeVersion(seccategory)){
docSmallEdition = 1;
}
}
} catch (Exception e) {
log.error("异常",e);
}
int isHistory = 0;
int approveType = 0;
int mainDoc = 0;
int readOpterCanPrint = rs.getInt("readoptercanprint");
int docValidUserId = docowner;
String invalidationDate = "";
String docLastModUserType = docCreaterType;
String docApproveUserType = "";
String docValidUserType = docCreaterType;
String docInvalUserType = "";
String docArchiveUserType = "";
String docCancelUserType = "";
String docPubUserType = "";
String docReopenUserType = "";
String ownerType = docCreaterType;
int canPrintedNum = 0;
int docid = 0;
List<String> docids = new ArrayList<String> ();
WorkflowToDocSettingInfoEntity workflowToDocSettingInfoEntity = this.getSettingInfo(workflowid);
if (isAnnex(workflowToDocSettingInfoEntity)&&fileids.size()>1){ //勾选了关联到表单且为附件字段并且选择的附件种类大于1 则每个附件生成一个文档
for(Map.Entry<String, String> entry: fileids.entrySet()) {
try {
docid = new DocManager().getNextDocId(rs);
} catch (Exception e) {
log.error("读取文档id号异常" + e);
}
parentids = docid+"";
mainDoc = docid;
if ("offline_pdf".equals(entry.getKey())){
docsubject = imagefilename+"(PDF)";
accessorycount = 1;
}else if ("offline_html".equals(entry.getKey())){
docsubject = imagefilename+"(OfflineHTML)";
accessorycount = 1;
}else if ("online_html".equals(entry.getKey())){
docsubject = imagefilename+"(OnlineHTML)";
accessorycount = 1;
}
SaveDocDetailBizCus saveDocDetailBiz = new SaveDocDetailBizCus();
saveDocDetailBiz.setDocid( docid);
saveDocDetailBiz.setMaincategory( maincategory);
saveDocDetailBiz.setSubcategory( subcategory);
saveDocDetailBiz.setSeccategory( seccategory);
saveDocDetailBiz.setDoclangurage( doclangurage);
saveDocDetailBiz.setDocapprovable( docapprovable);
saveDocDetailBiz.setDocreplyable( docreplyable);
saveDocDetailBiz.setIsreply( isreply);
saveDocDetailBiz.setReplydocid( replydocid);
saveDocDetailBiz.setDocsubject( docsubject);
saveDocDetailBiz.setDocpublishtype( docpublishtype);
saveDocDetailBiz.setItemid( itemid);
saveDocDetailBiz.setItemmaincategoryid( itemmaincategoryid);
saveDocDetailBiz.setHrmresid( hrmresid);
saveDocDetailBiz.setCrmid( crmid);
saveDocDetailBiz.setProjectid( projectid);
saveDocDetailBiz.setFinanceid( financeid);
saveDocDetailBiz.setDoccreaterid( doccreaterid);
saveDocDetailBiz.setDocdepartmentid( docdepartmentid);
saveDocDetailBiz.setDoccreatedate( doccreatedate);
saveDocDetailBiz.setDoccreatetime( doccreatetime);
saveDocDetailBiz.setDoclastmoduserid( doclastmoduserid);
saveDocDetailBiz.setDoclastmoddate( doclastmoddate);
saveDocDetailBiz.setDoclastmodtime( doclastmodtime);
saveDocDetailBiz.setDocapproveuserid( docapproveuserid);
saveDocDetailBiz.setDocapprovedate( docapprovedate);
saveDocDetailBiz.setDocapprovetime( docapprovetime);
saveDocDetailBiz.setDocarchiveuserid( docarchiveuserid);
saveDocDetailBiz.setDocarchivedate( docarchivedate);
saveDocDetailBiz.setDocarchivetime( docarchivetime);
saveDocDetailBiz.setDocstatus( docstatus);
saveDocDetailBiz.setParentids( parentids);
saveDocDetailBiz.setAssetid( assetid);
saveDocDetailBiz.setOwnerid( ownerid);
saveDocDetailBiz.setKeyword( keyword);
saveDocDetailBiz.setAccessorycount( accessorycount);
saveDocDetailBiz.setReplaydoccount( replaydoccount);
saveDocDetailBiz.setUsertype( docCreaterType);
saveDocDetailBiz.setDoctype(docType);
saveDocDetailBiz.setCancopy( canCopy);
saveDocDetailBiz.setCanremind( canRemind);
saveDocDetailBiz.setOrderable( orderable);
saveDocDetailBiz.setDocextendname( docextendname);
saveDocDetailBiz.setDoccode( docCode);
saveDocDetailBiz.setDocedition( docEdition);
saveDocDetailBiz.setDocsmalledition( docSmallEdition);
saveDocDetailBiz.setDoceditionid( docEditionId);
saveDocDetailBiz.setIshistory( isHistory);
saveDocDetailBiz.setApproveType( approveType);
saveDocDetailBiz.setMaindoc( mainDoc);
saveDocDetailBiz.setReadoptercanprint( readOpterCanPrint);
saveDocDetailBiz.setDocvaliduserid( docValidUserId);
saveDocDetailBiz.setDocvaliddate( docValidDate);
saveDocDetailBiz.setDocvalidtime( docValidTime);
saveDocDetailBiz.setInvalidationdate( invalidationDate);
saveDocDetailBiz.setDocCreaterType( docCreaterType);
saveDocDetailBiz.setDocLastModUserType( docLastModUserType);
saveDocDetailBiz.setDocApproveUserType( docApproveUserType);
saveDocDetailBiz.setDocValidUserType( docValidUserType);
saveDocDetailBiz.setDocInvalUserType( docInvalUserType);
saveDocDetailBiz.setDocArchiveUserType( docArchiveUserType);
saveDocDetailBiz.setDocCancelUserType( docCancelUserType);
saveDocDetailBiz.setDocPubUserType( docPubUserType);
saveDocDetailBiz.setDocReopenUserType( docReopenUserType);
saveDocDetailBiz.setOwnerType( ownerType);
saveDocDetailBiz.setCanPrintedNum( canPrintedNum);
saveDocDetailBiz.setFromworkflow( requestid);
saveDocDetailBiz.setDoccontent( doccontent);
saveDocDetailBiz.setDocowner( docowner);
saveDocDetailBiz.setClientIp( clientIp);
saveDocDetailBiz.saveDoc(requestid,requestManager,wfbiz,userid);
// 最后保存 docimagefile
if ("offline_pdf".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,3);
}else if ("offline_html".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,2);
}else if ("online_html".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,1);
}
DocSaveService.copyDocFile(seccategory,docid);
//解决流程存文档不推动文档消息
SendMsgForNewDocThread sendThread = new SendMsgForNewDocThread(new User(Util.getIntValue(userid)),docid,null);sendThread.start();
docids.add(docid+"");
}
}else{ //只生成一篇文档
try {
docid = new DocManager().getNextDocId(rs);
} catch (Exception e) {
log.error("读取文档id号异常" + e);
return null;
}
parentids = docid+"";
mainDoc = docid;
SaveDocDetailBizCus saveDocDetailBiz = new SaveDocDetailBizCus();
saveDocDetailBiz.setDocid( docid);
saveDocDetailBiz.setMaincategory( maincategory);
saveDocDetailBiz.setSubcategory( subcategory);
saveDocDetailBiz.setSeccategory( seccategory);
saveDocDetailBiz.setDoclangurage( doclangurage);
saveDocDetailBiz.setDocapprovable( docapprovable);
saveDocDetailBiz.setDocreplyable( docreplyable);
saveDocDetailBiz.setIsreply( isreply);
saveDocDetailBiz.setReplydocid( replydocid);
saveDocDetailBiz.setDocsubject( docsubject);
saveDocDetailBiz.setDocpublishtype( docpublishtype);
saveDocDetailBiz.setItemid( itemid);
saveDocDetailBiz.setItemmaincategoryid( itemmaincategoryid);
saveDocDetailBiz.setHrmresid( hrmresid);
saveDocDetailBiz.setCrmid( crmid);
saveDocDetailBiz.setProjectid( projectid);
saveDocDetailBiz.setFinanceid( financeid);
saveDocDetailBiz.setDoccreaterid( doccreaterid);
saveDocDetailBiz.setDocdepartmentid( docdepartmentid);
saveDocDetailBiz.setDoccreatedate( doccreatedate);
saveDocDetailBiz.setDoccreatetime( doccreatetime);
saveDocDetailBiz.setDoclastmoduserid( doclastmoduserid);
saveDocDetailBiz.setDoclastmoddate( doclastmoddate);
saveDocDetailBiz.setDoclastmodtime( doclastmodtime);
saveDocDetailBiz.setDocapproveuserid( docapproveuserid);
saveDocDetailBiz.setDocapprovedate( docapprovedate);
saveDocDetailBiz.setDocapprovetime( docapprovetime);
saveDocDetailBiz.setDocarchiveuserid( docarchiveuserid);
saveDocDetailBiz.setDocarchivedate( docarchivedate);
saveDocDetailBiz.setDocarchivetime( docarchivetime);
saveDocDetailBiz.setDocstatus( docstatus);
saveDocDetailBiz.setParentids( parentids);
saveDocDetailBiz.setAssetid( assetid);
saveDocDetailBiz.setOwnerid( ownerid);
saveDocDetailBiz.setKeyword( keyword);
saveDocDetailBiz.setAccessorycount( accessorycount);
saveDocDetailBiz.setReplaydoccount( replaydoccount);
saveDocDetailBiz.setUsertype( docCreaterType);
saveDocDetailBiz.setDoctype(docType);
saveDocDetailBiz.setCancopy( canCopy);
saveDocDetailBiz.setCanremind( canRemind);
saveDocDetailBiz.setOrderable( orderable);
saveDocDetailBiz.setDocextendname( docextendname);
saveDocDetailBiz.setDoccode( docCode);
saveDocDetailBiz.setDocedition( docEdition);
saveDocDetailBiz.setDocsmalledition( docSmallEdition);
saveDocDetailBiz.setDoceditionid( docEditionId);
saveDocDetailBiz.setIshistory( isHistory);
saveDocDetailBiz.setApproveType( approveType);
saveDocDetailBiz.setMaindoc( mainDoc);
saveDocDetailBiz.setReadoptercanprint( readOpterCanPrint);
saveDocDetailBiz.setDocvaliduserid( docValidUserId);
saveDocDetailBiz.setDocvaliddate( docValidDate);
saveDocDetailBiz.setDocvalidtime( docValidTime);
saveDocDetailBiz.setInvalidationdate( invalidationDate);
saveDocDetailBiz.setDocCreaterType( docCreaterType);
saveDocDetailBiz.setDocLastModUserType( docLastModUserType);
saveDocDetailBiz.setDocApproveUserType( docApproveUserType);
saveDocDetailBiz.setDocValidUserType( docValidUserType);
saveDocDetailBiz.setDocInvalUserType( docInvalUserType);
saveDocDetailBiz.setDocArchiveUserType( docArchiveUserType);
saveDocDetailBiz.setDocCancelUserType( docCancelUserType);
saveDocDetailBiz.setDocPubUserType( docPubUserType);
saveDocDetailBiz.setDocReopenUserType( docReopenUserType);
saveDocDetailBiz.setOwnerType( ownerType);
saveDocDetailBiz.setCanPrintedNum( canPrintedNum);
saveDocDetailBiz.setFromworkflow( requestid);
saveDocDetailBiz.setDoccontent( doccontent);
saveDocDetailBiz.setDocowner( docowner);
saveDocDetailBiz.setClientIp( clientIp);
saveDocDetailBiz.saveDoc(requestid,requestManager,wfbiz,userid);
// 最后保存 docimagefile
for(Map.Entry<String, String> entry: fileids.entrySet()) {
if ("offline_pdf".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,3);
}else if ("offline_html".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,2);
}else if ("online_html".equals(entry.getKey())){
saveDocImageFile(docid, Util.getIntValue(entry.getValue()), imagefilename,1);
}
}
DocSaveService.copyDocFile(seccategory,docid);
//解决流程存文档不推动文档消息
SendMsgForNewDocThread sendThread = new SendMsgForNewDocThread(new User(Util.getIntValue(userid)),docid,null);sendThread.start();
docids.add(docid+"");
}
//文档保存到表单字段
saveDocToForm(rs,String.join(",",docids),docowner,requestid,workflowid);
return docids;
}
/*
* 文档关联到表单字段 支持多个文档更新到表单字段
*/
public boolean saveDocToForm(RecordSet rs,String docids,int docowner,String requestid,String workflowid){
String sql = "";
String[] docidarr = docids.split(",");
String tablename = " workflow_form ";
String fieldname = "";
String fieldhtmltype ="";
String type ="";
rs.executeQuery("select formid,isbill,wfdocrelatedformdisplay,wfdocrelatefieldid from workflow_base where id = ?",workflowid);
RecordSet rs1 = new RecordSet();
if (rs.next()){
String wfdocrelatedformdisplay = Util.null2String(rs.getString("wfdocrelatedformdisplay"));
String wfdocrelatefieldid = Util.null2String(rs.getString("wfdocrelatefieldid"));
int isbill = Util.getIntValue(rs.getString("isbill"), 0);
int formid = Util.getIntValue(rs.getString("formid"), 0);
if(wfdocrelatedformdisplay.equals("1")&&!wfdocrelatefieldid.equals("")){
if(isbill == 1){
sql = "select tablename from workflow_bill where id="+formid;
rs1.executeQuery(sql);
if(rs1.next()){
tablename = Util.null2String(rs1.getString(1));
}
sql = "select fieldname,fieldhtmltype,type from workflow_billfield where billid="+formid+" and id="+wfdocrelatefieldid;
}else{
sql = "select fieldname,fieldhtmltype,type from workflow_formdictdetail where id="+wfdocrelatefieldid;
}
rs1.executeQuery(sql);
if(rs1.next()){
fieldname = Util.null2String(rs1.getString(1));
fieldhtmltype =Util.null2String(rs1.getString(2));
type =Util.null2String(rs1.getString(3));
}
if(!"".equals(tablename) && !"".equals(fieldname)){
String fieldvalue =""; //先获取数据库原有值
sql = "select "+fieldname+" from "+tablename+" where requestid="+requestid;
rs1.executeQuery(sql);
if(rs1.next()){
fieldvalue = Util.null2String(rs1.getString(1));
}
if (!fieldvalue.equals("")){
if ((fieldhtmltype.equals("6")&&type.equals("1"))||(fieldhtmltype.equals("3")&&type.equals("37"))){ //附件和多文档字段 追加
String updateDocids = fieldvalue+","+docids;
rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+updateDocids+"' where requestid = ?",requestid);
}else if (fieldhtmltype.equals("3")&&type.equals("9")){ //单文档 会清除原文档再添加
rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+docids+"' where requestid = ?",requestid);
new BaseBean().writeLog("流程存文档关联到表单字段,单文档字段原先值==>"+fieldvalue+",更新后docid ==>"+docids);
}
}else {
rs1.executeUpdate(" update "+tablename+" set "+fieldname+" = '"+docids+"' where requestid = ?",requestid);
}
}
}
/* 更新完成后给流程所有操作者赋权*****/
WfToDocBizCus.docShare(docids,requestid,docowner);
}
return true;
}
/**
* 判断requestmanager是否为空
* @param rmanager
*/
public RequestManager getRequestManager(RequestManager rmanager,String requestid){
if(rmanager==null){
rmanager = new RequestManager();
RecordSet rs = new RecordSet();
String sql = "select * from workflow_requestbase where requestid = " + requestid;
rs.executeSql(sql);
while(rs.next()){
int _requestId=rs.getInt("requestid");
int workflowId=rs.getInt("workflowid");
int creater=rs.getInt("creater");
String requestname = rs.getString("requestname");
String requestlevel = rs.getString("requestlevel");
String messagetype = rs.getString("messagetype");
rmanager.setRequestid(_requestId);
rmanager.setWorkflowid(workflowId);
rmanager.setCreater(creater);
rmanager.setRequestname(requestname);
rmanager.setRequestlevel(requestlevel);
rmanager.setMessageType(messagetype);
rmanager.setNodeid(Util.getIntValue(rs.getString("currentNodeID")));
}
}
return rmanager;
}
//重载下 以防方法在其他地方有调用
public boolean saveDocProp(int docid,String requestid,RequestManager requestManager){
return saveDocProp( docid, requestid, requestManager,new WfToDocBizCus());
}
/**
* 保存文档属性
* @param docid
* @return
*/
public boolean saveDocProp(int docid,String requestid,RequestManager requestManager,WfToDocBizCus wfbiz){
boolean success = true;
String docids = docid+"";
requestManager = getRequestManager(requestManager,requestid);
try{
log.error("saveDocProp:" + docid +" "+requestid);
RequestDocPropManagerCus requestDocPropManager=new RequestDocPropManagerCus(wfbiz);
requestDocPropManager.changeDocProp(requestManager,docids);
}catch (Exception e) {
success = false;
log.error("RequestDocPropManagerCus Error:requestid="+requestid+"###docids="+docids);
log.error("异常"+e);
}
log.error("success:"+success);
return success;
}
/**
* 保存docimagefile
*
* @param docid
* 文档id
* @param imagefileid
* imagefileid
* @param filename
* 文件名
*/
public boolean saveDocImageFile(int docid, int imagefileid, String filename,int filetype) {
RecordSet rs = new RecordSet();
int id = 0;
int versionId = 0;
String imagefilename = "";
if (filetype==1){
imagefilename = filename + ".html";
}else if (filetype ==2){
imagefilename = filename + ".zip";
}else if (filetype==3){
imagefilename = filename+".pdf";
}
String imagefiledesc = "";
String imagefilewidth = "0";
String imagefileheight = "0";
String imagefielsize = "0";
String docfiletype = "2";
String versionDetail = "";
try {
id = new DocImageManager().getNextDocImageFileId();
} catch (Exception e) {
log.error("读取docimagefileid异常" + e);
return false;
}
// rs.executeProc("SequenceIndex_SelectVersionId", "");
// if (rs.next()) {
// versionId = Util.getIntValue(rs.getString(1));
// }
versionId=versionIdUpdate.getVersionNewId();
String tmpsqlstr = "INSERT INTO DocImageFile(docid, imagefileid, imagefilename, imagefiledesc, imagefilewidth, imagefileheight, imagefielsize, docfiletype,versionId,versionDetail,id)"
+ "VALUES ("
+ ""
+ docid
+ ""
+ ","
+ ""
+ imagefileid
+ ""
+ ","
+ "'"
+ imagefilename
+ "'"
+ ","
+ "'"
+ imagefiledesc
+ "'"
+ ","
+ "'"
+ imagefilewidth
+ "'"
+ ","
+ "'"
+ imagefileheight
+ "'"
+ ","
+ ""
+ imagefielsize
+ ""
+ ","
+ "'"
+ docfiletype
+ "'"
+ ","
+ ""
+ versionId
+ ""
+ ","
+ "'" + versionDetail + "'" + "," + id + ")";
rs.executeSql(tmpsqlstr);
//log.error("保存到docimagefile: " + tmpsqlstr);
return true;
}
/**
* 保存imagefile 返回文件的id
*
* @param filename
* 文件名
* @param filerealpath
* 文件绝对路径
* @param filesize
* 文件大小
* @return imagefileid 文件id
*/
public int saveImageFile(String filename, String filerealpath, long filesize,boolean ispdf) {
int imageid = 0;
String originalfilename = filename + ".html";
if(ispdf) originalfilename = filename+".pdf";
String contenttype = "";
String imagefileused = "1";
String iszip = "0";
String isencrypt = "0";
RecordSet rs = new RecordSet();
char separator = Util.getSeparator();
//rs.executeProc("SequenceIndex_SelectFileid", "");
//if (rs.next())
// imageid = Util.getIntValue(rs.getString(1));
imageid=imageFileIdUpdate.getImageFileNewId();
String para = "" + imageid + separator + originalfilename + separator
+ contenttype + separator + imagefileused + separator
+ filerealpath + separator + iszip + separator + isencrypt
+ separator + filesize;
rs.executeProc("ImageFile_Insert", para);
AliOSSObjectManager aliOSSObjectManager=new AliOSSObjectManager();
String tokenKey=aliOSSObjectManager.getTokenKeyByFileRealPath(filerealpath);
//log.error("保存到imagefile: " + para);
//comefrom='WorkflowToDoc' 表示该条附件数据来自于流程存为文档
rs.executeSql("update imagefile set isaesencrypt='"+this.isaesencrypt+"', aescode='"+this.aescode+"',TokenKey='"+tokenKey+"',comefrom='WorkflowToDoc' where imagefileid="+imageid);
aliOSSObjectManager.uploadFile(filerealpath,originalfilename, iszip,isaesencrypt,aescode);
return imageid;
}
/**
* 获取系统的路径
*
* @return
*/
public String getSystemPath() {
String path = GCONST.getPropertyPath();
path = path.substring(0, path.indexOf("WEB-INF"));
path = Util.StringReplace(path, "\\", "/");
return path;
}
//判断是否开启了文档关联到表单并选择了附件字段
public boolean isAnnex(WorkflowToDocSettingInfoEntity workflowToDocSettingInfoEntity) {
RecordSet rs = new RecordSet();
if (workflowToDocSettingInfoEntity.getWfdocrelatedformdisplay().equals("1")){
String sql = "";
if(workflowToDocSettingInfoEntity.getIsbill()==0)
sql = "select fieldhtmltype from workflow_formdict where id = ? ";
else
sql = "select fieldhtmltype as name from workflow_billfield where id =? ";
rs.executeQuery(sql,workflowToDocSettingInfoEntity.getWfdocrelatefieldid());
if (rs.next()&&Util.null2String(rs.getString(1)).equals("6")){
return true;
}
}
return false;
}
/**
* 获取设置信息
* @return
*/
private WorkflowToDocSettingInfoEntity getSettingInfo(String workflowId){
int isbill = 1;
String wfdocpath = "";
String wfdocownertype = "";
String wfdocownerfieldid = "";
String wfdocowner="";
int keepsign = 0;
String docfiles = "";
String wfdocpathtype = ""; //文档存储路径类型 固定目录1 选择目录2
String wfdocpathfieldid = ""; //文档存储路径字段
String wfdocsource = ""; //附件来源
String wfdocrelatedformdisplay = ""; //文档关联到表单显示
String wfdocrelatefieldid = ""; //关联字段
String wfdocdiaplaywatermark = ""; //展示流程水印
RecordSet rs = new RecordSet();
rs.executeQuery("select isbill,wfdocowner,wfdocownertype,wfdocownerfieldid,keepsign,wfdocpath,docfiles,wfdocpathtype,wfdocpathfieldid,wfdocsource,wfdocrelatedformdisplay,wfdocrelatefieldid,wfdocdiaplaywatermark from workflow_base where id = ?" , workflowId);
if(rs.next()) {
wfdocowner = rs.getString("wfdocowner");
wfdocownertype = rs.getString("wfdocownertype");
wfdocownerfieldid = rs.getString("wfdocownerfieldid");
keepsign = rs.getInt("keepsign");
wfdocpath = rs.getString("wfdocpath");
docfiles = rs.getString("docfiles");
wfdocpathtype = rs.getString("wfdocpathtype");
wfdocpathfieldid = rs.getString("wfdocpathfieldid");
wfdocsource = rs.getString("wfdocsource");
wfdocrelatedformdisplay = rs.getString("wfdocrelatedformdisplay");
wfdocrelatefieldid = rs.getString("wfdocrelatefieldid");
wfdocdiaplaywatermark = rs.getString("wfdocdiaplaywatermark");
isbill = Util.getIntValue(rs.getString("isbill"));
}
return new WorkflowToDocSettingInfoEntity(wfdocpath,wfdocownertype,wfdocownerfieldid,wfdocowner,keepsign,docfiles,wfdocpathtype,wfdocpathfieldid,wfdocsource,wfdocrelatedformdisplay,wfdocrelatefieldid,wfdocdiaplaywatermark,isbill);
}
/*
*得到keepsign 是否保留签字意见
*/
public int getKeepSign(String workflowid){
RecordSet rs = new RecordSet();
int keepsign = 0;
rs.executeQuery("select keepsign from workflow_base where id = ?",workflowid);
if (rs.next()){
keepsign = rs.getInt("keepsign");
}
return keepsign;
}
/*
* 得到docfiles 文档附件 在线表单/离线表单(HTML)/离线表单(PDF)
*/
public String getDocFiles(String workflowid){
RecordSet rs = new RecordSet();
String docfiles = "";
String wfdocpath = "";
rs.executeQuery("select docfiles,wfdocpath from workflow_base where id = ?",workflowid);
if (rs.next()){
docfiles = Util.null2String(rs.getString("docfiles"));
wfdocpath = Util.null2String(rs.getString("wfdocpath"));
}
if ("".equals(docfiles)&&!"".equals(wfdocpath)){
docfiles="1";
rs.executeUpdate("update workflow_base set docfiles ='1' where id = ?",workflowid);
}
return docfiles;
}
/**
* 获得文档存放的目录
*
* @param workflowid
* @return 主目录,分目录,子目录
*/
public String getWfDocPath(String workflowid) {
String wfdocpath = "";
RecordSet rs = new RecordSet();
String sql = "select * from workflow_base where id = '" + workflowid
+ "'";
rs.executeSql(sql);
rs.next();
wfdocpath = Util.null2String(rs.getString("wfdocpath"));
return wfdocpath;
}
/**
* 获得文档的所有者
*
* @param workflowid
* @return resourceid
*/
public String getWfDocOwner(String workflowid,String requestid) {
int wfdocowner = 0;
try{
String sql = "";
int wfid = Util.getIntValue(workflowid, 0);
int rid = Util.getIntValue(requestid, 0);
if(wfid<=0 || rid<=0){
return "0";
}
RecordSet rs = new RecordSet();
sql = "select * from workflow_base where id="+wfid;
rs.executeSql(sql);
if(rs.next()){
int wfdocowner_tmp = Util.getIntValue(rs.getString("wfdocowner"), 0);
int wfdocownertype_tmp = Util.getIntValue(rs.getString("wfdocownertype"), 0);
int wfdocownerfieldid_tmp = Util.getIntValue(rs.getString("wfdocownerfieldid"), 0);
int isbill = Util.getIntValue(rs.getString("isbill"), 0);
int formid = Util.getIntValue(rs.getString("formid"), 0);
if(wfdocownertype_tmp == 1){
wfdocowner = wfdocowner_tmp;
}else if(wfdocownertype_tmp == 2){
String tablename = " workflow_form ";
String fieldname = "";
if(isbill == 1){
sql = "select tablename from workflow_bill where id="+formid;
rs.execute(sql);
if(rs.next()){
tablename = Util.null2String(rs.getString(1));
}
sql = "select fieldname from workflow_billfield where billid="+formid+" and id="+wfdocownerfieldid_tmp;
}else{
sql = "select fieldname from workflow_formdict where id="+wfdocownerfieldid_tmp;
}
rs.execute(sql);
if(rs.next()){
fieldname = Util.null2String(rs.getString(1));
if(!"".equals(tablename) && !"".equals(fieldname)){
sql = "select "+fieldname+" from "+tablename+" where requestid="+rid;
rs.execute(sql);
if(rs.next()){
String fieldvalue = Util.null2String(rs.getString(1));
if(!"".equals(fieldvalue)){
int index = fieldvalue.indexOf(",");
if(index > -1){
fieldvalue = fieldvalue.substring(0, index);
}
wfdocowner = Util.getIntValue(fieldvalue);
}
}
}
}
}
String status = Util.null2String(new ResourceComInfo().getStatus(""+wfdocowner));
if(status.equals("0") || status.equals("1") || status.equals("2") || status.equals("3")){
//do nothing
}else{
wfdocowner = 0;
}
}
}catch(Exception e){
}
if(wfdocowner <= 0){
wfdocowner = 1;
}
return ""+wfdocowner;
}
/**
* 获得文件保存目录
*
* @return
*/
public String getFileSavePath() {
SystemComInfo syscominfo = new SystemComInfo();
String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem());
return createdir;
}
public synchronized int getNextEditionId() throws Exception {
int docindex = 0;
RecordSet rs = new RecordSet();
rs.executeProc("SequenceIndex_SelectNextID", "doceditionid");
if (rs.next())
docindex = rs.getInt(1);
return docindex;
}
}