|
|
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
|
|
|
+ "¶2=" + loginid + "¶3=" + password;
|
|
|
} else {
|
|
|
log.error("流程保存为文档失败,因为用户名和密码为空,requestid=" + requestid);
|
|
|
return params;
|
|
|
}
|
|
|
|
|
|
tempurl = oaaddress
|
|
|
+ "/login/VerifyRtxLogin.jsp?urlfrom=workflowtodoc¶1="
|
|
|
+ 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]+"¶1="+url[2]+"¶2="+url[3]+"¶3="+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;
|
|
|
}
|
|
|
|
|
|
}
|