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 = 100 ;
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 ) ;
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 ) ;
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 ;
}
}