package com.engine.custom.archives.util ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONObject ;
import com.api.workflow.service.RequestAuthenticationService ;
import com.api.workflow.util.ServiceUtil ;
import com.engine.custom.archives.action.WorkflowToDocCus ;
import com.engine.custom.archives.entity.PushArchivesBean ;
import com.engine.workflow.biz.RobotNode.RobotNodeBiz ;
import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz ;
import freemarker.template.Configuration ;
import freemarker.template.Template ;
import freemarker.template.TemplateExceptionHandler ;
import lombok.extern.slf4j.Slf4j ;
import okhttp3.* ;
import org.apache.commons.io.FileUtils ;
import org.apache.commons.lang.StringUtils ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import weaver.conn.RecordSet ;
import weaver.crm.Maint.CustomerInfoComInfo ;
import weaver.docs.docs.DocRecycleManager ;
import weaver.file.util.FileDeleteUtil ;
import weaver.general.StringUtil ;
import weaver.general.TimeUtil ;
import weaver.general.Util ;
import weaver.hrm.User ;
import weaver.hrm.resource.ResourceComInfo ;
import weaver.soa.workflow.request.RequestInfo ;
import weaver.soa.workflow.request.RequestService ;
import weaver.workflow.monitor.Monitor ;
import weaver.workflow.workflow.WorkflowConfigComInfo ;
import weaver.wps.doccenter.convert.BaseConvert ;
import weaver.wps.doccenter.utils.Config ;
import weaver.wps.doccenter.utils.FileInfoUtil ;
import weaver.wps.doccenter.utils.Tools ;
import java.io.* ;
import java.lang.reflect.Field ;
import java.net.URL ;
import java.net.URLEncoder ;
import java.nio.charset.StandardCharsets ;
import java.time.LocalTime ;
import java.util.* ;
import java.util.concurrent.TimeUnit ;
public class ArchivesUtil {
public static Logger log = LoggerFactory . getLogger ( "Archives" ) ;
public static final String SQL = "select request from uf_pushArchivesLog where ddsj <= ? " +
" and type = ? and ( zt is null or zt = 1 ) group by REQUEST" ;
/ * *
* 获 取 前 一 天 的 date
*
* @return
* /
public static Date getDate ( ) {
Date date = new Date ( ) ;
Calendar calendar = Calendar . getInstance ( ) ;
calendar . setTime ( date ) ;
//把日期往后增加一天.整数往后推,负数往前移动(1:表示明天、-1: 表示昨天, 0: 表示今天)
calendar . add ( Calendar . DATE , - 1 ) ;
date = calendar . getTime ( ) ;
return date ;
}
/ * *
* 获 取 指 定 日 期 的 第 一 秒
*
* @param date
* @return
* /
public static Date getFirstSecondOfDate ( Date date ) {
Calendar calendar = Calendar . getInstance ( ) ;
calendar . setTime ( date ) ;
calendar . set ( Calendar . HOUR_OF_DAY , 0 ) ;
calendar . set ( Calendar . MINUTE , 0 ) ;
calendar . set ( Calendar . SECOND , 0 ) ;
calendar . set ( Calendar . MILLISECOND , 0 ) ;
return calendar . getTime ( ) ;
}
/ * *
* 获 取 指 定 日 期 的 最 后 一 秒
*
* @param date
* @return
* /
public static Date getLastSecondOfDate ( Date date ) {
Calendar calendar = Calendar . getInstance ( ) ;
calendar . setTime ( date ) ;
calendar . set ( Calendar . HOUR_OF_DAY , 23 ) ;
calendar . set ( Calendar . MINUTE , 59 ) ;
calendar . set ( Calendar . SECOND , 59 ) ;
calendar . set ( Calendar . MILLISECOND , 999 ) ;
return calendar . getTime ( ) ;
}
/ * *
* 获 取 推 送 档 案 的 bean
*
* @param beginTime
* @param endTime
* @param type
* @return
* /
public static List < PushArchivesBean > getResultList ( RecordSet rs , String beginTime , String endTime , int type ) {
rs . executeQuery ( SQL , endTime , type ) ;
// Field[] fields = PushArchivesBean.class.getDeclaredFields();
log . info ( "getResultListSQL:{}?{}?{}" , SQL , endTime , type ) ;
LinkedList < PushArchivesBean > result = new LinkedList < > ( ) ;
while ( rs . next ( ) ) {
PushArchivesBean pushArchivesBean = new PushArchivesBean ( ) ;
// pushArchivesBean.setId(Util.getIntValue(rs.getString("id")));
pushArchivesBean . setRequest ( Util . getIntValue ( rs . getString ( "request" ) ) ) ;
result . add ( pushArchivesBean ) ;
}
return result ;
}
/ * *
* 获 取 流 程 自 动 发 起 的 节 点
*
* @param workflowid
* @return
* /
public static List < String > getAutoInitNodeIds ( String workflowid ) {
RecordSet recordSet = new RecordSet ( ) ;
ArrayList < String > nodeids = new ArrayList < > ( ) ;
//String sql = "select node.NODEID nodeid , nodegroup.GROUPNAME from workflow_flownode node " +
// " left join workflow_nodegroup nodegroup " +
// " on node.nodeid = nodegroup.nodeid " +
// " left join workflow_groupdetail detail " +
// "on nodegroup.id = detail.GROUPID " +
// "where node.WORKFLOWID in (select distinct WORKFLOWID from WORKFLOW_REQUESTBASE where REQUESTID in ( " + mainAndSubRequestId + " ) ) and detail.id is null";
//recordSet.executeQuery(sql);
String sql = "select * from uf_ArchivesSet where mainwfid = ? " ;
recordSet . executeQuery ( sql , workflowid ) ;
String exclusenodeid = "" ;
if ( recordSet . next ( ) ) {
exclusenodeid = recordSet . getString ( "exclusenodeid" ) ;
}
return Arrays . asList ( exclusenodeid . split ( "," ) ) ;
}
/ * *
* @param TemplatePath 模 版 存 放 目 录
* @param TemplateName 模 版 名
* @param root 填 充 的 数 据
* @param GenerateFilename 生 成 文 件 名
* @throws Exception
* /
public static String generate ( String TemplatePath , String TemplateName , Map < String , Object > root , String GenerateFilename ) throws Exception {
Configuration cfg = new Configuration ( ) ;
//指定模板文件的来源目录
cfg . setDirectoryForTemplateLoading ( new File ( TemplatePath ) ) ;
cfg . setDefaultEncoding ( "UTF-8" ) ;
//设置错误的显示方式(日志)
//在生产系统中: TemplateExceptionHandler.RETHROW_HANDLER 默认值
//在开发HTML模板期间: TemplateExceptionHandler.HTML_DEBUG_HANDLER
//在开发非HTML模板期间: TemplateExceptionHandler.DEBUG_HANDLER
cfg . setTemplateExceptionHandler ( TemplateExceptionHandler . RETHROW_HANDLER ) ;
cfg . setTemplateExceptionHandler ( TemplateExceptionHandler . RETHROW_HANDLER ) ;
//获取模板文件
Template temp = cfg . getTemplate ( TemplateName ) ;
//合并模板和数据模型
// File file = new File(TemplatePath + "new-built");
//如果文件夹不存在,则创建文件夹
// if (!file.exists()) {
// //file.mkdirs();//多级目录
// file.mkdir();//只创建一级目录
// }
//Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(TemplatePath + "new-built/" + GenerateFilename)));//输出文件
// FileWriter out = new FileWriter(TemplatePath + "new-built/" + GenerateFilename);
//Writer out = new OutputStreamWriter(System.out);//输出控制台
//StringWriter out = new StringWriter();//输出为字符串,可作为接口动态返回
File file = new File ( GenerateFilename ) ;
File parentDir = file . getParentFile ( ) ;
// 检查父目录是否存在
if ( ! parentDir . exists ( ) ) {
// 父目录不存在,创建所有必需的父目录
boolean dirsCreated = parentDir . mkdirs ( ) ;
if ( dirsCreated ) {
System . out . println ( "所有必需的父目录已创建." ) ;
} else {
System . out . println ( "无法创建目录,请检查权限或路径是否正确." ) ;
}
} else {
System . out . println ( "父目录已存在,无需创建." ) ;
}
// FileOutputStream fos = new FileOutputStream(GenerateFilename);
// Writer out = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
// temp.process(root, out);
// out.flush();//可不手动调用
// 使用 try-with-resources 确保流被正确关闭
try ( FileOutputStream fos = new FileOutputStream ( GenerateFilename ) ;
Writer out = new OutputStreamWriter ( fos , StandardCharsets . UTF_8 ) ) {
temp . process ( root , out ) ;
out . flush ( ) ;
}
return GenerateFilename ;
}
/ * *
* 写 入 txt
*
* @param path
* @param title
* @param content
* @param append
* /
public static void writeToTxt ( String path , String title , String content , Boolean append ) {
try {
System . out . println ( 111 ) ;
/* 写入Txt文件 */
File mkdirsName = new File ( path ) ;
// 相对路径
if ( ! mkdirsName . exists ( ) ) {
mkdirsName . mkdirs ( ) ;
}
File writename = new File ( path + "/" + title + ".txt" ) ;
// 存在即根据操作系统添加换行符
if ( ! writename . exists ( ) & & append = = true ) {
// 创建新文件
writename . createNewFile ( ) ;
} else if ( "del" . equals ( content ) & & append = = false ) {
writename . delete ( ) ;
return ;
} else if ( ! writename . exists ( ) & & append = = false ) {
writename . createNewFile ( ) ;
} else {
String osName = System . getProperties ( ) . getProperty ( "os.name" ) ;
System . out . println ( osName ) ;
if ( "Linux" . equals ( osName ) ) {
content = "\r" + content ;
} else {
content = "\r\n" + content ;
}
}
// 如果是在原有基础上写入则append属性为true, 默认为false
BufferedWriter out = new BufferedWriter ( new OutputStreamWriter ( new FileOutputStream ( writename , append ) , StandardCharsets . UTF_8 ) ) ;
// 写入TXT
out . write ( content ) ;
// 把缓存区内容压入文件
out . flush ( ) ;
// 最后记得关闭文件
out . close ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
System . out . println ( 222 ) ;
}
/ * *
* 创 建 文 件 夹
*
* @param pathName
* @return
* /
public static File crFile ( String pathName ) {
// bean.writeLog("创建文件夹==="+pathName);
File file = new File ( pathName ) ;
try {
// bean.writeLog("创建文件夹==="+file.exists());
if ( ! file . exists ( ) ) {
file . mkdir ( ) ;
}
} catch ( Exception E ) {
// bean.writeLog("Exception"+E.getMessage());
}
return file ;
}
/ * *
* 生 成 流 转 意 见 意 见
*
* @param requestid
* @param dirName
* @param requestName
* @return
* /
public static String getSignLog ( int requestid , String dirName , String requestName , String TemplatePath , String filePath , boolean isSubReq , String workflowid ) {
List < String > subRequestIds = getSubRequestIds ( requestid , isSubReq ) ;
ArrayList < Map < String , Object > > lists = new ArrayList < > ( ) ;
List < String > autoInitNodeIds = getAutoInitNodeIds ( workflowid ) ;
RecordSet recordSet = new RecordSet ( ) ;
String getWFNameByReqId = "select WORKFLOWNAME from WORKFLOW_REQUESTBASE req " +
" left join WORKFLOW_BASE wf on req.WORKFLOWID = wf.ID " +
" where REQUESTID = ? " ;
for ( String reqid : subRequestIds ) {
recordSet . executeQuery ( getWFNameByReqId , reqid ) ;
String wfName = "" ;
if ( recordSet . next ( ) ) {
wfName = recordSet . getString ( "WORKFLOWNAME" ) ;
}
HashMap < String , Object > params = new HashMap < > ( ) ;
params . put ( "requestid" , reqid ) ;
params . put ( "desremark" , "all" ) ;
params . put ( "pageSize" , "9999" ) ;
params . put ( "isfirst" , "true" ) ;
// params.put("request", request);
Map < String , Object > data = ArchivesUtil . getSignLogCmd ( params , new User ( 1 ) ) ;
log . info ( "流转信息:{}" , data ) ;
log . error ( JSONObject . toJSONString ( data ) ) ;
Map < String , Object > datas = ( Map < String , Object > ) data . get ( "datas" ) ;
List < Map . Entry < String , Object > > entries = new ArrayList < > ( datas . entrySet ( ) ) ;
entries . sort ( new Comparator < Map . Entry < String , Object > > ( ) {
@Override
public int compare ( Map . Entry < String , Object > o1 , Map . Entry < String , Object > o2 ) {
Integer key1 = Util . getIntValue ( ( Util . null2String ( o1 . getKey ( ) ) ) . replace ( "key" , "" ) ) ;
Integer key2 = Util . getIntValue ( ( Util . null2String ( o2 . getKey ( ) ) ) . replace ( "key" , "" ) ) ;
return key1 - key2 ;
}
} ) ; // 自然顺序
ArrayList < Map < String , String > > results = new ArrayList < > ( ) ;
// log.error(JSONObject.toJSONString(entries));
for ( Map . Entry < String , Object > entry : entries ) {
Map value = ( Map ) entry . getValue ( ) ;
List < Map < String , Object > > list = ( List ) value . get ( "list" ) ;
String nodeid = Util . null2String ( value . get ( "nodeid" ) ) ;
if ( autoInitNodeIds . contains ( nodeid ) ) {
continue ;
}
for ( Map < String , Object > item : list ) {
String operator = ( String ) item . get ( "operator" ) ;
String operatorid = ( String ) item . get ( "operatorid" ) ;
if ( "6771" . equals ( operatorid ) ) {
operator = "子流程处理" ;
}
String operatortype = ( String ) item . get ( "operatortype" ) ;
String operatedate = ( String ) item . get ( "operatedate" ) ;
String receivedate = ( String ) item . get ( "receivedate" ) ;
String nodename = ( String ) value . get ( "nodename" ) ;
String statuscode = ( String ) item . get ( "statuscode" ) ;
HashMap < String , String > itemMap = new HashMap < > ( ) ;
itemMap . put ( "operator" , operator ) ;
itemMap . put ( "operatorid" , operatorid ) ;
itemMap . put ( "operatortype" , operatortype ) ;
itemMap . put ( "operatedate" , StringUtil . isEmpty ( operatedate ) ? receivedate : operatedate ) ;
itemMap . put ( "nodename" , nodename ) ;
itemMap . put ( "nodename" , nodename ) ;
itemMap . put ( "requestName" , ( String ) value . get ( "requestName" ) ) ;
//1:未查看, 2: :以查看, 3: 已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 8:退回 9:被撤回
String action = "" ;
if ( "1" . equals ( statuscode ) ) {
action = "未查看" ;
} else if ( "2" . equals ( statuscode ) ) {
action = "已查看" ;
} else if ( "3" . equals ( statuscode ) ) {
action = "已提交" ;
} else if ( "4" . equals ( statuscode ) ) {
action = "暂停" ;
} else if ( "5" . equals ( statuscode ) ) {
action = "撤销" ;
} else if ( "6" . equals ( statuscode ) ) {
action = "启用" ;
} else if ( "7" . equals ( statuscode ) ) {
action = "已查阅" ;
} else if ( "8" . equals ( statuscode ) ) {
action = "退回" ;
} else if ( "9" . equals ( statuscode ) ) {
action = "被撤回" ;
}
itemMap . put ( "statuscode" , "3" . equals ( statuscode ) ? "提交" : "查看" ) ;
itemMap . put ( "action" , action ) ;
results . add ( itemMap ) ;
}
}
log . error ( "排序结果:{}" , JSONObject . toJSONString ( results ) ) ;
HashMap < String , Object > records = new HashMap < > ( ) ;
records . put ( "results" , results ) ;
String requestName1 = ( String ) data . get ( "requestName" ) ;
records . put ( "requestName" , "【" + wfName + "】-" + requestName1 ) ;
log . error ( "requestName1:{}" , requestName1 ) ;
log . error ( "records:{}" , JSONObject . toJSONString ( records ) ) ;
lists . add ( records ) ;
}
try {
Map < String , Object > dataMap = new HashMap < > ( ) ;
dataMap . put ( "lists" , lists ) ; // 将用户列表添加到数据映射中
log . error ( "dataMap:{}" , JSONObject . toJSONString ( dataMap ) ) ;
// String TemplatePath = "/opt/weaver/filesys/";
//String TemplateName = "html模版.ftl";
String TemplateName = "temp.ftl" ;
// 加载模板并填充数据
log . error ( "模板路径:{}" , TemplatePath ) ;
// 导出Word文档
String outputPath = filePath + File . separator + "togd" + requestid + File . separator + dirName + File . separator + "文件流转信息" + ".docx" ; // 输出文件路径
log . error ( "生成文件路径:{}" , TemplatePath ) ;
return generate ( TemplatePath , TemplateName , dataMap , outputPath ) ;
} catch ( Exception e ) {
log . error ( "errorerrorerror" ) ;
log . error ( e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
}
return Util . null2String ( requestid ) ;
}
public static Map < String , Object > getSignLogCmd ( Map < String , Object > params , User user ) {
Map < String , Object > result = new HashMap < String , Object > ( ) ;
RequestAuthenticationService authService = new RequestAuthenticationService ( ) ;
authService . setUser ( user ) ;
long date1 = new Date ( ) . getTime ( ) ;
try {
RecordSet rs = new RecordSet ( ) ;
RecordSet rs1 = new RecordSet ( ) ;
int pageSize = Util . getIntValue ( Util . null2String ( params . get ( "pageSize" ) ) , 30 ) ;
int desrequestid = Util . getIntValue ( Util . null2String ( params . get ( "desrequestid" ) ) , 0 ) ;
String isfirst = Util . null2String ( params . get ( "isfirst" ) ) ;
String isurger = Util . null2String ( params . get ( "isurger" ) ) ;
String desremark = Util . null2String ( params . get ( "desremark" ) ) ;
int desremarkIndex = desremark . indexOf ( "_" ) ;
boolean isAdSearch = false ; //是否有过滤条件
if ( desremarkIndex > - 1 ) {
isAdSearch = true ;
desremark = desremark . substring ( 0 , desremarkIndex ) ;
}
String parameter = Util . null2String ( params . get ( "parameter" ) ) ;
int selectedNode = Util . getIntValue ( Util . null2String ( params . get ( "selectedNode" ) ) , - 1 ) ; //选中的节点
String selectedOperator = Util . null2String ( params . get ( "selectedOperator" ) ) ; //选中的操作者
int requestid = Util . getIntValue ( Util . null2String ( params . get ( "requestid" ) ) , 0 ) ;
int workflowid = - 1 ;
String requestName = "" ;
rs . executeQuery ( "select workflowid , REQUESTNAMENEW from workflow_requestbase where requestid=" + requestid ) ;
if ( rs . next ( ) ) {
workflowid = Util . getIntValue ( rs . getString ( "workflowid" ) ) ;
requestName = Util . null2String ( rs . getString ( "REQUESTNAMENEW" ) ) ;
}
// 将json字符串转换成jsonObject
int currentMaxId = 0 ;
int currentMinId = 0 ;
int currentId = 0 ;
int currentId2 = 0 ;
int lastNodeId = 0 ;
String viewlogids = "" ;
int index = 0 ;
try {
if ( ! "true" . equals ( isfirst ) ) {
Map < String , String > parameterMap = JSON . parseObject ( parameter , Map . class ) ; //Weibo类在下边定义
currentMaxId = Util . getIntValue ( parameterMap . get ( "currentMaxId" ) , 0 ) ;
currentMinId = Util . getIntValue ( parameterMap . get ( "currentMinId" ) , 0 ) ;
String currentId12 = Util . null2String ( parameterMap . get ( "currentId" ) ) ;
if ( currentId12 . contains ( "_" ) ) {
String [ ] currentId12Arr = currentId12 . split ( "_" ) ;
currentId = Util . getIntValue ( currentId12Arr [ 0 ] ) ;
currentId2 = Util . getIntValue ( currentId12Arr [ 1 ] ) ;
} else {
currentId = Util . getIntValue ( currentId12 ) ;
}
viewlogids = Util . null2String ( parameterMap . get ( "viewlogids" ) ) ;
index = Util . getIntValue ( parameterMap . get ( "nodeindex" ) , 0 ) ;
lastNodeId = Util . getIntValue ( parameterMap . get ( "lastNodeId" ) , 0 ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
Map < String , String > putpara = new HashMap < String , String > ( ) ;
Monitor monitor = new Monitor ( ) ;
// String joinStr = ("oracle".equalsIgnoreCase(rs.getDBType()) || "mysql".equalsIgnoreCase(rs.getDBType())) ? " left join " : " left hash join ";
String joinStr = " left join " ;
// if (isurger.equals("true") || monitor.hasMonitor(requestid+"", user.getUID() + "")) {
// StringBuffer sqlsb = new StringBuffer();
// sqlsb.append(" select a.id,a.nodeid, ");
// sqlsb.append(" b.nodename, ");
// sqlsb.append(" a.userid, ");
// sqlsb.append(" a.isremark, ");
// sqlsb.append(" a.lastisremark, ");
// sqlsb.append(" a.usertype, ");
// sqlsb.append(" a.agentorbyagentid, ");
// sqlsb.append(" a.agenttype, ");
// sqlsb.append(" a.receivedate, ");
// sqlsb.append(" a.receivetime, ");
// sqlsb.append(" a.operatedate, ");
// sqlsb.append(" a.operatetime, ");
// sqlsb.append(" a.viewtype, ");
// sqlsb.append(" a.nodetype ");
// sqlsb.append(" ,a.operator ");
// sqlsb.append(" from (SELECT distinct top ").append(pageSize);
// sqlsb.append(" o.id, " );
// sqlsb.append(" o.requestid, " );
// sqlsb.append(" o.userid, ");
// sqlsb.append(" o.workflowid, ");
// sqlsb.append(" o.workflowtype, ");
// sqlsb.append(" o.isremark, ");
// sqlsb.append(" o.lastisremark, ");
// sqlsb.append(" o.usertype, ");
// sqlsb.append(" o.nodeid, ");
// sqlsb.append(" o.agentorbyagentid, ");
// sqlsb.append(" o.agenttype, ");
// sqlsb.append(" o.receivedate, ");
// sqlsb.append(" o.receivetime, ");
// sqlsb.append(" o.viewtype, ");
// sqlsb.append(" o.iscomplete, ");
// sqlsb.append(" o.operatedate, ");
// sqlsb.append(" o.operatetime, ");
// sqlsb.append(" nodetype ");
// sqlsb.append(" ,wr.operator ");
// sqlsb.append(" FROM workflow_currentoperator o ");
//
// sqlsb.append(" left join workflow_requestlog wr");
// sqlsb.append(" on wr.requestid=o.requestid");
// sqlsb.append(" and wr.nodeid=o.nodeid");
// sqlsb.append(" and wr.operator = o.userid");
// sqlsb.append(" and wr.logtype <> '1'");
//
// sqlsb.append(" , workflow_flownode ");
//
// sqlsb.append(" where o.nodeid = ");
// sqlsb.append(" workflow_flownode.nodeid ");
// if(desremark ==1){//1:已提交
// sqlsb.append(" AND o.isremark='2' AND wr.operator IS NOT null ");
// }else if(desremark == 2){//2: 未提交
// sqlsb.append(" and ((o.isremark = '0' and (o.takisremark is null or o.takisremark=0)) or o.isremark in ('1','5','7','8','9') )");
// }else if(desremark == 3){//3:已查看
// sqlsb.append(" and (((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','4','5','7','8','9')) AND o.viewtype IN (-1,-2)) ");
// }else if(desremark == 4){//4:未查看
// sqlsb.append(" AND o.viewtype = 0 ");
// }
// sqlsb.append(" and o.id > ").append(currentId);
// sqlsb.append(" and o.requestid = " + requestid + ") a, ");
// sqlsb.append(" workflow_nodebase b ");
// sqlsb.append(" where a.nodeid = b.id ");
// sqlsb.append(" and a.requestid = " + requestid + " ");
// sqlsb.append(" and a.agenttype <> 1 ");
// sqlsb.append(" order by a.id ");
// //log.error("20170309 =====> sqlsb.toString() = "+sqlsb.toString());
// rs.executeSql(sqlsb.toString());
//
// } else {
// 处理相关流程的查看权限
// if ("".equals(viewlogids)) {
// viewlogids = this.getViewLogids();
// }
StringBuffer sqlsb = new StringBuffer ( ) ;
if ( "sqlserver" . equalsIgnoreCase ( rs . getDBType ( ) ) ) { // sqlserver 排序提到这里
sqlsb . append ( " select top " ) . append ( pageSize ) . append ( " a.id,a.nodeid, " ) ;
} else {
sqlsb . append ( " select a.id,a.nodeid, " ) ;
}
sqlsb . append ( "(CASE WHEN a.nodeid < -1 THEN (SELECT nodename FROM workflow_freenode t WHERE t.id = a.nodeid) ELSE (SELECT nodename FROM workflow_nodebase t1 WHERE t1.id = a.nodeid) END) AS nodename," ) ;
sqlsb . append ( " a.userid, " ) ;
sqlsb . append ( " a.isremark, " ) ;
sqlsb . append ( " a.preisremark, " ) ;
sqlsb . append ( " a.lastisremark, " ) ;
sqlsb . append ( " a.usertype, " ) ;
sqlsb . append ( " a.agentorbyagentid, " ) ;
sqlsb . append ( " a.agenttype, " ) ;
sqlsb . append ( " a.receivedate, " ) ;
sqlsb . append ( " a.receivetime, " ) ;
sqlsb . append ( " a.operatedate, " ) ;
sqlsb . append ( " a.operatetime, " ) ;
sqlsb . append ( " a.processuser, " ) ;
sqlsb . append ( " a.viewtype, " ) ;
sqlsb . append ( " a.nodetype " ) ;
sqlsb . append ( " ,a.operator " ) ;
sqlsb . append ( " ,a.tab " ) ;
//if("true".equals(isfirst)){
/ * if ( "oracle" . equals ( rs . getDBType ( ) ) | | "mysql" . equals ( rs . getDBType ( ) ) ) {
sqlsb . append ( " from (SELECT distinct " ) ;
} else {
sqlsb . append ( " from (SELECT distinct top " ) . append ( pageSize ) ; // sqlserver排序提到外层查询
} * /
sqlsb . append ( " from (SELECT distinct " ) ;
// }else{
// sqlsb.append(" from (SELECT distinct ");
// }
sqlsb . append ( " o.id, " ) ;
sqlsb . append ( " o.requestid, " ) ;
sqlsb . append ( " o.userid, " ) ;
sqlsb . append ( " o.workflowid, " ) ;
sqlsb . append ( " o.workflowtype, " ) ;
//workflow_otheroperator表中isremark为字符型, 这里转下字符
if ( rs . getDBType ( ) . toLowerCase ( ) . equals ( "oracle" ) | | rs . getDBType ( ) . toLowerCase ( ) . equals ( "postgresql" ) ) {
sqlsb . append ( " to_char(o.isremark) as isremark, " ) ;
sqlsb . append ( " to_char(o.preisremark) AS preisremark, " ) ;
sqlsb . append ( " to_char(o.lastisremark) AS lastisremark, " ) ;
} else if ( rs . getDBType ( ) . toLowerCase ( ) . equals ( "mysql" ) ) {
sqlsb . append ( " o.isremark, " ) ;
sqlsb . append ( " o.preisremark, " ) ;
sqlsb . append ( " o.lastisremark, " ) ;
} else {
sqlsb . append ( " cast(o.isremark as varchar) as isremark, " ) ;
sqlsb . append ( " cast(o.preisremark as varchar) as preisremark, " ) ;
sqlsb . append ( " cast(o.lastisremark as varchar) as lastisremark, " ) ;
}
sqlsb . append ( " o.usertype, " ) ;
sqlsb . append ( " o.nodeid, " ) ;
sqlsb . append ( " o.agentorbyagentid, " ) ;
sqlsb . append ( " o.agenttype, " ) ;
sqlsb . append ( " o.receivedate, " ) ;
sqlsb . append ( " o.receivetime, " ) ;
sqlsb . append ( " o.viewtype, " ) ;
sqlsb . append ( " o.iscomplete, " ) ;
sqlsb . append ( " o.operatedate, " ) ;
sqlsb . append ( " o.operatetime, " ) ;
sqlsb . append ( " o.processuser, " ) ;
sqlsb . append ( "(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype " ) ;
sqlsb . append ( " ,wr.operator " ) ;
sqlsb . append ( " ,1 as tab " ) ;
sqlsb . append ( " FROM workflow_currentoperator o " ) ;
sqlsb . append ( " " + joinStr + " workflow_requestlog wr" ) ;
sqlsb . append ( " on wr.requestid=o.requestid" ) ;
sqlsb . append ( " and wr.nodeid=o.nodeid" ) ;
sqlsb . append ( " and wr.operator = o.userid" ) ;
sqlsb . append ( " and wr.logtype <> '1'" ) ;
sqlsb . append ( " and o.operatedate = wr.operatedate" ) ;
sqlsb . append ( " and o.operatetime = wr.operatetime" ) ; //再通过时间关联一下,防止流程状态操作状态显示错误
sqlsb . append ( " where o.id > " ) . append ( currentId ) ;
if ( "submit" . equals ( desremark ) ) { //1:已提交----isremark等于4, preisremark=11实际对应已提交数据
sqlsb . append ( " AND (o.isremark='2' or (o.isremark=4 and o.preisremark=11)) AND (wr.operator IS NOT null or o.userid = o.processuser)" ) ;
} else if ( "nosubmit" . equals ( desremark ) ) { //2: 未提交
sqlsb . append ( " AND( (o.isremark != '2' AND o.isremark != '4') OR (o.isremark = '4' AND o.viewtype = 0 and o.preisremark != 11) ) " ) ;
} else if ( "view" . equals ( desremark ) ) { //3:已查看
sqlsb . append ( " and ((o.isremark = '2' AND wr.operator IS NULL) or o.isremark in ('0','1','5','7','8','9','11') or (o.isremark=4 and o.preisremark!=11)) AND o.viewtype IN (-1,-2) " ) ;
} else if ( "noview" . equals ( desremark ) ) { //4:未查看
sqlsb . append ( " AND o.viewtype=0 AND (o.isremark IN ('0','1','5','7','8','9','11') or (o.isremark = '2' AND wr.operator IS NULL) or (o.isremark=4 and o.preisremark!=11)) " ) ;
}
sqlsb . append ( " and o.requestid = " + requestid ) ;
sqlsb . append ( " union " ) ;
sqlsb . append ( " SELECT DISTINCT " ) ;
sqlsb . append ( " o.id, " ) ;
sqlsb . append ( " o.requestid, " ) ;
sqlsb . append ( " o.userid, " ) ;
sqlsb . append ( " o.workflowid, " ) ;
sqlsb . append ( " 0 as workflowtype, " ) ;
sqlsb . append ( " o.isremark, " ) ;
sqlsb . append ( " o.isremark as preisremark, " ) ;
sqlsb . append ( " o.isremark as lastisremark, " ) ;
sqlsb . append ( " o.usertype, " ) ;
sqlsb . append ( " o.nodeid, " ) ;
sqlsb . append ( " 0 as agentorbyagentid, " ) ;
sqlsb . append ( " '0' as agenttype, " ) ;
sqlsb . append ( " o.receivedate, " ) ;
sqlsb . append ( " o.receivetime, " ) ;
sqlsb . append ( " o.viewtype, " ) ;
sqlsb . append ( " 1 as iscomplete, " ) ;
sqlsb . append ( " o.operatedate, " ) ;
sqlsb . append ( " o.operatetime, " ) ;
sqlsb . append ( " wr.operator as processuser, " ) ;
sqlsb . append ( "(case when o.nodeid < -1 then (select nodetype from workflow_freenode t where t.id = o.nodeid) else (select nodetype from workflow_flownode t1 where t1.nodeid = o.nodeid) end) as nodetype, " ) ;
sqlsb . append ( " wr.operator " ) ;
sqlsb . append ( " ,2 as tab " ) ;
sqlsb . append ( " FROM workflow_otheroperator o LEFT JOIN workflow_requestlog wr ON wr.requestid = o.requestid " ) ;
sqlsb . append ( " AND wr.nodeid = o.nodeid " ) ;
sqlsb . append ( " AND wr.operator = o.userid " ) ;
sqlsb . append ( " AND wr.logtype <> '1' " ) ;
sqlsb . append ( " WHERE o.requestid = " + requestid + " " ) ;
sqlsb . append ( " and o.id > " ) . append ( currentId2 ) ;
sqlsb . append ( " ) a " ) ;
sqlsb . append ( " where a.requestid = " + requestid + " " ) ;
sqlsb . append ( " and a.agenttype <> 1 " ) ;
if ( ! "" . equals ( viewlogids ) ) {
sqlsb . append ( " and a.nodeid in (" + viewlogids + ") " ) ;
}
if ( selectedNode ! = - 1 ) {
sqlsb . append ( " AND a.nodeid = " + selectedNode + " " ) ;
}
if ( ! "" . equals ( selectedOperator ) ) {
sqlsb . append ( " AND a.userid = " + selectedOperator + " " ) ;
}
WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo ( ) ;
boolean showdelFreeNodeInfo = "1" . equals ( configComInfo . getValue ( "showdelete_freenode_info" ) ) ;
sqlsb . append ( " and (a.nodeid > -1 or (a.nodeid < -1 and exists (select id from workflow_freenode where id = a.nodeid and requestid = " + requestid + ( showdelFreeNodeInfo ? "" : " and groupid > 0 " ) + " ))) " ) ;
//搜索时返回状态
if ( isAdSearch & & "true" . equals ( isfirst ) ) {
rs . executeQuery ( "select count(id) as count from (" + sqlsb . toString ( ) . replace ( "top " + pageSize , "" ) + ") t" ) ;
result . put ( "countTime" , new Date ( ) . getTime ( ) - date1 ) ;
if ( rs . next ( ) ) {
result . put ( "count" , Util . null2String ( rs . getString ( "count" ) ) ) ;
}
}
sqlsb . append ( " order by a.receivedate, a.receivetime,a.id , a.nodetype" ) ;
//log.error("20170309 =====> sqlsb.toString() = "+sqlsb.toString());
if ( "oracle" . equals ( rs . getDBType ( ) ) ) { //必须排序后再限制rownum
String sql_oracle = sqlsb . toString ( ) ;
sqlsb . setLength ( 0 ) ;
sqlsb . append ( "select * from (" + sql_oracle + ") where rownum < " ) . append ( pageSize ) ;
} else if ( "mysql" . equals ( rs . getDBType ( ) ) ) {
sqlsb . append ( " LIMIT " + pageSize ) ;
} else if ( "postgresql" . equals ( rs . getDBType ( ) ) ) {
sqlsb . append ( " LIMIT " + pageSize ) ;
}
if ( requestid > 0 ) {
rs . executeSql ( sqlsb . toString ( ) ) ;
}
result . put ( "dataTime" , new Date ( ) . getTime ( ) - date1 ) ;
// }
List < Map < String , String > > statuslist = new ArrayList < Map < String , String > > ( ) ;
int tmpnodeid = 0 ;
while ( rs . next ( ) ) {
int tab = rs . getInt ( "tab" ) ;
if ( tab = = 1 ) {
currentId = rs . getInt ( "id" ) ;
} else {
currentId2 = rs . getInt ( "id" ) ;
}
tmpnodeid = rs . getInt ( "nodeid" ) ;
String tmpnodename = rs . getString ( "nodename" ) ;
Map < String , String > nodekv = null ;
if ( statuslist . size ( ) = = 0 ) {
currentMinId = currentId ;
nodekv = new HashMap < String , String > ( ) ;
statuslist . add ( nodekv ) ;
} else {
Map < String , String > temmap = statuslist . get ( statuslist . size ( ) - 1 ) ;
int tnodeid = Util . getIntValue ( temmap . get ( "nodeid" ) , 0 ) ;
if ( tnodeid = = tmpnodeid ) {
nodekv = temmap ;
} else {
currentMinId = currentId ;
nodekv = new HashMap < String , String > ( ) ;
statuslist . add ( nodekv ) ;
}
}
nodekv . put ( "nodeid" , tmpnodeid + "" ) ;
nodekv . put ( "nodename" , tmpnodename + "" ) ;
}
int nextlistcount = 0 ;
int nextsubmitCount = 0 ;
int nextviewCount = 0 ;
int nextnoviewCount = 0 ;
if ( "all" . equals ( desremark ) & & ! isAdSearch ) {
currentMaxId = currentId ;
String maxsql = " select a.id,a.nodeid from workflow_currentoperator a where a.id > " + currentId + " and a.requestid=" + requestid + " order by a.id ,a.receivedate, a.receivetime" ;
rs1 . executeSql ( maxsql ) ;
while ( rs1 . next ( ) ) {
int currentid = rs1 . getInt ( "id" ) ;
int currentnodeid = rs1 . getInt ( "nodeid" ) ;
if ( currentnodeid = = tmpnodeid ) {
currentMaxId = currentid ;
} else {
break ;
}
}
String listcountsql = " select count(id) num from workflow_currentoperator where id > " + currentId + " and id <= " + currentMaxId + " and requestid=" + requestid + " and nodeid=" + tmpnodeid + " and agenttype <> 1 and usertype <> 1 " ;
//String submitCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid +" and agenttype <> 1 and usertype <> 1 and isremark = 2 and exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and workflow_requestlog.operator=workflow_currentoperator.userid )";
//String viewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 and (viewtype = -1 or viewtype=-2) and ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) ";
//String noviewCountsql = " select count(id) num from workflow_currentoperator where id > "+currentId +" and id <= "+currentMaxId+" and requestid="+requestid +" and nodeid="+tmpnodeid + " and agenttype <> 1 and usertype <> 1 AND viewtype=0 AND (isremark IN ('0','1','4','5','7','8','9') or (isremark = '2' and not exists (select 1 from workflow_requestlog where workflow_requestlog.requestid = workflow_currentoperator.requestid and workflow_currentoperator.nodeid=workflow_requestlog.nodeid and (workflow_requestlog.operator is null or workflow_requestlog.operator ='' )))) ";
String submitCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.isremark = 2 and wr.operator is NOT null " ;
String viewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype IN (-1,-2) and ((wc.isremark = '2' AND wr.operator IS NULL) or wc.isremark in ('0','1','4','5','7','8','9')) " ;
String noviewCountsql = " SELECT Count(distinct wc.id) num FROM workflow_currentoperator wc " + joinStr + " workflow_requestlog wr ON wr.requestid = wc.requestid AND wc.nodeid = wr.nodeid AND wr.operator = wc.userid WHERE wc.id > " + currentId + " AND wc.id <= " + currentMaxId + " AND wc.requestid = " + requestid + " AND wc.nodeid = " + tmpnodeid + " AND wc.agenttype <> 1 AND wc.usertype <> 1 AND wc.viewtype=0 AND (wc.isremark IN ('0','1','4','5','7','8','9','11') or (wc.isremark = '2' and wr.operator is null )) " ;
rs1 . executeSql ( listcountsql ) ;
while ( rs1 . next ( ) ) {
nextlistcount = rs1 . getInt ( "num" ) ;
}
rs1 . executeSql ( submitCountsql ) ;
while ( rs1 . next ( ) ) {
nextsubmitCount = rs1 . getInt ( "num" ) ;
}
rs1 . executeSql ( viewCountsql ) ;
while ( rs1 . next ( ) ) {
nextviewCount = rs1 . getInt ( "num" ) ;
}
rs1 . executeSql ( noviewCountsql ) ;
while ( rs1 . next ( ) ) {
nextnoviewCount = rs1 . getInt ( "num" ) ;
}
}
Map < String , Object > allstatusmap = new HashMap < String , Object > ( ) ;
Map < String , Object > submitstatusmap = new HashMap < String , Object > ( ) ;
Map < String , Object > nosubmitstatusmap = new HashMap < String , Object > ( ) ;
Map < String , Object > viewstatusmap = new HashMap < String , Object > ( ) ;
Map < String , Object > noviewstatusmap = new HashMap < String , Object > ( ) ;
//提交节点信息--滚动加载到当前currentoperator对应最大id
//数字统计转到新接口count中
ResourceComInfo resourceComInfo = new ResourceComInfo ( ) ;
CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo ( ) ;
Map < String , Object > all_nodemap = new HashMap < String , Object > ( ) ;
Map < String , Object > submit_nodemap = new HashMap < String , Object > ( ) ;
Map < String , Object > nosubmit_nodemap = new HashMap < String , Object > ( ) ;
Map < String , Object > view_nodemap = new HashMap < String , Object > ( ) ;
Map < String , Object > noview_nodemap = new HashMap < String , Object > ( ) ;
rs . beforFirst ( ) ;
int currentnum = 0 ;
for ( Iterator < Map < String , String > > it = statuslist . iterator ( ) ; it . hasNext ( ) ; index + + ) {
Map < String , String > nodekv = it . next ( ) ;
int fnodeid = Util . getIntValue ( nodekv . get ( "nodeid" ) ) ;
String namename = nodekv . get ( "nodename" ) ;
int submitCount = 0 ;
int viewCount = 0 ;
int noviewCount = 0 ;
int listcount = 0 ;
if ( "false" . equals ( isfirst ) & & currentnum = = 0 & & lastNodeId = = fnodeid ) {
index - = 1 ;
}
if ( tmpnodeid = = fnodeid & & currentnum = = ( statuslist . size ( ) - 1 ) ) {
submitCount = nextsubmitCount ;
viewCount = nextviewCount ;
noviewCount = nextnoviewCount ;
listcount = nextlistcount ;
}
currentnum + + ;
Map < String , Object > all_nodemap_in = new HashMap < String , Object > ( ) ;
all_nodemap_in . put ( "nodeid" , fnodeid ) ;
all_nodemap_in . put ( "nodename" , namename ) ;
Map < String , Object > submit_nodemap_in = new HashMap < String , Object > ( ) ;
Map < String , Object > nosubmit_nodemap_in = new HashMap < String , Object > ( ) ;
Map < String , Object > view_nodemap_in = new HashMap < String , Object > ( ) ;
Map < String , Object > noview_nodemap_in = new HashMap < String , Object > ( ) ;
List < Map < String , String > > nodeallstatuslist = new ArrayList < Map < String , String > > ( ) ;
List < Map < String , String > > nodesubmitstatuslist = new ArrayList < Map < String , String > > ( ) ;
List < Map < String , String > > nodenosubmitstatuslist = new ArrayList < Map < String , String > > ( ) ;
List < Map < String , String > > nodeviewstatuslist = new ArrayList < Map < String , String > > ( ) ;
List < Map < String , String > > nodenoviewstatuslist = new ArrayList < Map < String , String > > ( ) ;
if ( "submit" . equals ( desremark ) ) { //1:已提交
//提交节点信息
submit_nodemap_in . putAll ( all_nodemap_in ) ;
submitstatusmap . put ( "datas" , submit_nodemap ) ;
submit_nodemap . put ( "key" + index , submit_nodemap_in ) ;
submit_nodemap_in . put ( "list" , nodesubmitstatuslist ) ;
} else if ( "nosubmit" . equals ( desremark ) ) { //2: 未提交
nosubmit_nodemap_in . putAll ( all_nodemap_in ) ;
nosubmitstatusmap . put ( "datas" , nosubmit_nodemap ) ;
nosubmit_nodemap . put ( "key" + index , nosubmit_nodemap_in ) ;
nosubmit_nodemap_in . put ( "list" , nodenosubmitstatuslist ) ;
} else if ( "view" . equals ( desremark ) ) { //3:已查看
view_nodemap_in . putAll ( all_nodemap_in ) ;
viewstatusmap . put ( "datas" , view_nodemap ) ;
view_nodemap . put ( "key" + index , view_nodemap_in ) ;
view_nodemap_in . put ( "list" , nodeviewstatuslist ) ;
} else if ( "noview" . equals ( desremark ) ) { //4:未查看
noview_nodemap_in . putAll ( all_nodemap_in ) ;
noviewstatusmap . put ( "datas" , noview_nodemap ) ;
noview_nodemap . put ( "key" + index , noview_nodemap_in ) ;
noview_nodemap_in . put ( "list" , nodenoviewstatuslist ) ;
} else {
//所有节点信息
allstatusmap . put ( "datas" , all_nodemap ) ;
all_nodemap . put ( "key" + index , all_nodemap_in ) ;
all_nodemap_in . put ( "list" , nodeallstatuslist ) ;
}
boolean islight = false ;
RobotNodeServiceBiz robotNodeServiceBiz = new RobotNodeServiceBiz ( ) ;
while ( rs . next ( ) ) {
int tmpnodeid1 = rs . getInt ( "nodeid" ) ;
if ( tmpnodeid1 ! = fnodeid ) {
rs . previous ( ) ;
break ;
}
//String tmpnodename = rs.getString("nodename");
int tmpcurrid = rs . getInt ( "id" ) ;
String tmpuserid = rs . getString ( "userid" ) ;
String tmpisremark = Util . null2String ( rs . getString ( "isremark" ) ) ;
if ( tmpisremark . equals ( "" ) ) {
tmpisremark = Util . null2String ( rs . getString ( "lastisremark" ) ) ;
}
int tmpusertype = rs . getInt ( "usertype" ) ;
String tmpagentorbyagentid = rs . getString ( "agentorbyagentid" ) ;
int tmpagenttype = rs . getInt ( "agenttype" ) ;
String tmpreceivedate = rs . getString ( "receivedate" ) ;
String tmpreceivetime = rs . getString ( "receivetime" ) ;
String tmpoperatedate = rs . getString ( "operatedate" ) ;
String tmpoperatetime = rs . getString ( "operatetime" ) ;
String viewtype = rs . getString ( "viewtype" ) ;
String nodetype = rs . getString ( "nodetype" ) ;
int preisremark = rs . getInt ( "preisremark" ) ;
String processuser = rs . getString ( "processuser" ) ;
boolean flags = false ;
String tmpIntervel = "" ;
// 如果tmpisremark=2 判断时候在日志表里有该人( 确定是否是由非会签得到的isremark=2)
String operator = rs . getString ( "operator" ) ;
if ( operator ! = null & & ! "" . equals ( operator ) ) {
flags = true ;
}
if ( ( tmpisremark . equals ( "2" ) | | ( tmpisremark . equals ( "4" ) & & preisremark = = 11 ) ) & & tmpoperatedate ! = null & & ! tmpoperatedate . equals ( "" ) ) {
tmpIntervel = TimeUtil . timeInterval2 ( tmpreceivedate + " " + tmpreceivetime , tmpoperatedate + " " + tmpoperatetime , user . getLanguage ( ) ) ;
}
islight = ! islight ;
Map < String , String > _statusmap = new HashMap < String , String > ( ) ;
// 操作人
String _statususername = "" ;
String _operatorid = "" ;
String _beagentid = "" ;
String _beagentname = "" ;
String _operatortype = "0" ;
if ( tmpusertype = = 0 ) {
_operatorid = tmpuserid ;
_statususername = ServiceUtil . convertChar ( resourceComInfo . getResourcename ( tmpuserid ) ) ;
if ( tmpagenttype = = 2 ) { //代理情况
_beagentid = tmpagentorbyagentid ;
_beagentname = ServiceUtil . convertChar ( resourceComInfo . getResourcename ( tmpagentorbyagentid ) ) ;
}
_statusmap . put ( "operatorImg" , resourceComInfo . getMessagerUrls ( tmpuserid ) ) ;
_statusmap . put ( "operatorImgDefName" , _statususername ) ;
} else if ( RobotNodeBiz . operatortype . equals ( tmpusertype + "" ) ) {
_statususername = Util . formatMultiLang ( robotNodeServiceBiz . getRobotNodeSet ( tmpnodeid1 ) . getOperatorName ( ) ) ;
_operatorid = tmpuserid ;
_operatortype = "2" ;
} else {
_operatorid = tmpuserid ;
_operatortype = "1" ;
_statususername = ServiceUtil . convertChar ( customerInfoComInfo . getCustomerInfoname ( tmpuserid ) ) ;
}
// 查看状态 1:未查看, 2: :以查看, 3: 已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅 8:退回 9:被撤回
int _statusCode = 0 ;
if ( preisremark ! = 8 & & ( tmpisremark . equals ( "2" ) | | ( tmpisremark . equals ( "4" ) & & preisremark = = 11 ) ) & & ( flags | | tmpuserid . equals ( processuser ) ) ) {
_statusCode = 3 ;
submitCount + + ;
if ( "4" . equals ( nodetype ) & & preisremark = = 0 ) {
_statusCode = 7 ;
}
} else if ( tmpisremark . equals ( "0" ) | | tmpisremark . equals ( "1" ) | | tmpisremark . equals ( "5" ) | | tmpisremark . equals ( "4" ) | | tmpisremark . equals ( "8" ) | | tmpisremark . equals ( "9" ) | | tmpisremark . equals ( "7" ) | | tmpisremark . equals ( "11" ) | | ( tmpisremark . equals ( "2" ) & & ! flags ) ) {
if ( viewtype . equals ( "-2" ) | | ( viewtype . equals ( "-1" ) & & ! tmpoperatedate . equals ( "" ) ) ) {
_statusCode = 2 ;
viewCount + + ;
} else {
_statusCode = 1 ;
noviewCount + + ;
}
} else if ( "s" . equals ( tmpisremark ) ) {
_statusCode = 4 ;
} else if ( "r" . equals ( tmpisremark ) ) {
_statusCode = 6 ;
} else if ( "c" . equals ( tmpisremark ) ) {
_statusCode = 5 ;
} else if ( preisremark = = 8 & & viewtype . equals ( "-2" ) & & tmpisremark . equals ( "2" ) ) {
_statusCode = 2 ;
viewCount + + ;
}
RecordSet recordSet = new RecordSet ( ) ;
recordSet . executeQuery ( "select operatetype from workflow_currentoperator where id=?" , tmpcurrid ) ;
if ( recordSet . next ( ) ) {
int operatetype = recordSet . getInt ( 1 ) ;
if ( operatetype = = 3 ) { //退回
_statusCode = 8 ;
} else if ( operatetype = = 4 ) { //被撤回
_statusCode = 9 ;
}
}
listcount + + ;
if ( "view" . equals ( desremark ) ) { //3:已查看
if ( processuser . equals ( tmpuserid ) & & ( "2" . equals ( tmpisremark ) | | "4" . equals ( tmpisremark ) ) ) {
listcount - - ;
}
}
String _receivedate = "" ;
String _operatedate = "" ;
String _intervel = "" ;
if ( ! tmpisremark . equals ( "s" ) & & ! tmpisremark . equals ( "c" ) & & ! tmpisremark . equals ( "r" ) ) {
_receivedate = Util . toScreen ( tmpreceivedate , user . getLanguage ( ) ) + " " + Util . toScreen ( tmpreceivetime , user . getLanguage ( ) ) ;
}
_operatedate = Util . toScreen ( tmpoperatedate , user . getLanguage ( ) ) + " " + Util . toScreen ( tmpoperatetime , user . getLanguage ( ) ) ;
_intervel = Util . toScreen ( tmpIntervel , user . getLanguage ( ) ) ;
_statusmap . put ( "statuscode" , String . valueOf ( _statusCode ) ) ;
_statusmap . put ( "operator" , _statususername ) ;
_statusmap . put ( "receivedate" , _receivedate ) ;
_statusmap . put ( "operatedate" , _operatedate ) ;
_statusmap . put ( "intervel" , _intervel ) ;
_statusmap . put ( "operatorid" , _operatorid ) ;
_statusmap . put ( "operatortype" , _operatortype ) ;
_statusmap . put ( "beagentid" , _beagentid ) ;
_statusmap . put ( "beagentname" , _beagentname ) ;
_statusmap . put ( "nodetype" , nodetype ) ;
//所有节点
nodeallstatuslist . add ( _statusmap ) ;
//查看状态 1:未查看, 2: :以查看, 3: 已提交, 4:暂停, 5:撤销, 6:启用 7:已查阅
if ( ( tmpisremark . equals ( "2" ) | | ( tmpisremark . equals ( "4" ) & & preisremark = = 11 ) ) & & ( flags | | tmpuserid . equals ( processuser ) ) ) {
nodesubmitstatuslist . add ( _statusmap ) ;
} else if ( tmpisremark . equals ( "0" ) | | tmpisremark . equals ( "1" ) | | tmpisremark . equals ( "5" ) | | tmpisremark . equals ( "4" ) | | tmpisremark . equals ( "8" ) | | tmpisremark . equals ( "9" ) | | tmpisremark . equals ( "7" ) | | tmpisremark . equals ( "11" ) | | ( tmpisremark . equals ( "2" ) & & ! flags ) ) {
if ( viewtype . equals ( "-2" ) | | ( viewtype . equals ( "-1" ) & & ! tmpoperatedate . equals ( "" ) ) ) {
nodeviewstatuslist . add ( _statusmap ) ;
} else if ( viewtype . equals ( "0" ) ) {
nodenoviewstatuslist . add ( _statusmap ) ;
}
}
if ( ( ! tmpisremark . equals ( "2" ) & & ! tmpisremark . equals ( "4" ) ) | | ( tmpisremark . equals ( "4" ) & & viewtype . equals ( "0" ) ) ) {
if ( ! tmpisremark . equals ( "s" ) & & ! tmpisremark . equals ( "s" ) & & ! tmpisremark . equals ( "c" ) & & ! tmpisremark . equals ( "r" ) ) {
nodenosubmitstatuslist . add ( _statusmap ) ;
}
}
}
//--已提交、已查看、未查看
all_nodemap_in . put ( "submitCount" , submitCount ) ; //--已提交
all_nodemap_in . put ( "viewCount" , viewCount ) ; //--已查看
all_nodemap_in . put ( "noviewCount" , noviewCount ) ; //--未查看
if ( "submit" . equals ( desremark ) ) { //1:已提交
//提交节点信息
submit_nodemap_in . put ( "listcount" , listcount ) ;
result . putAll ( submitstatusmap ) ;
} else if ( "nosubmit" . equals ( desremark ) ) { //2: 未提交
nosubmit_nodemap_in . put ( "listcount" , listcount ) ;
result . putAll ( nosubmitstatusmap ) ;
} else if ( "view" . equals ( desremark ) ) { //3:已查看
view_nodemap_in . put ( "listcount" , listcount ) ;
result . putAll ( viewstatusmap ) ;
} else if ( "noview" . equals ( desremark ) ) { //4:未查看
noview_nodemap_in . put ( "listcount" , listcount ) ;
result . putAll ( noviewstatusmap ) ;
} else {
//所有节点信息
all_nodemap_in . put ( "listcount" , listcount ) ;
result . putAll ( allstatusmap ) ;
}
lastNodeId = fnodeid ;
}
// if(maxid == currentMaxId){
// isfinish = 1;
// }
putpara . put ( "nodeindex" , index + "" ) ;
putpara . put ( "currentMaxId" , currentMaxId + "" ) ;
putpara . put ( "currentMinId" , currentMinId + "" ) ;
putpara . put ( "currentId" , currentId + "_" + currentId2 ) ;
putpara . put ( "lastNodeId" , lastNodeId + "" ) ;
putpara . put ( "viewlogids" , viewlogids + "" ) ;
putpara . put ( "requestName" , requestName ) ;
result . put ( "parameter" , putpara ) ;
result . put ( "otherTime" , new Date ( ) . getTime ( ) - date1 ) ;
result . put ( "requestName" , requestName ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
return result ;
}
/ * *
* 获 取 当 前 流 程 下 的 所 有 子 流 程
*
* @param requestid 主 流 程 id
* @param max 遍 历 次 数
* @return
* /
public static Map < String , String > getSubRequest ( String requestid , int max ) {
HashMap < String , String > records = new HashMap < > ( ) ;
RecordSet rs = new RecordSet ( ) ;
String ids = requestid ;
for ( int i = 0 ; i < max ; i + + ) {
ArrayList < String > idList = new ArrayList < > ( ) ;
String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )" ;
rs . executeQuery ( sql ) ;
while ( rs . next ( ) ) {
String subrequestid = Util . null2String ( rs . getString ( "requestid" ) ) ;
String workflowid = Util . null2String ( rs . getString ( "workflowid" ) ) ;
idList . add ( subrequestid ) ;
// 使用map自动去重,一种流程类型只取一个requestid
records . put ( subrequestid , workflowid ) ;
}
ids = String . join ( "," , idList ) ;
}
// String sql = "select requestid from workflow_requestbase where mainrequestid = ?";
// RecordSet rs = new RecordSet();
// rs.executeQuery(sql, requestid);
// if (rs.next()) {
// String subrequestid = Util.null2String(rs.getString("requestid"));
// records.add(subrequestid);
// }
return records ;
}
public static List < String > getSubRequestIds ( int requestid , boolean isSubReq ) {
List < String > reqids = new ArrayList < > ( ) ;
String mainwfid = "" ;
String subwfid = "" ;
if ( ! isSubReq ) {
RecordSet recordSet = new RecordSet ( ) ;
recordSet . executeQuery ( "select * from WORKFLOW_REQUESTBASE where REQUESTID = ?" , requestid ) ;
String wfid = "" ;
if ( recordSet . next ( ) ) {
wfid = Util . null2String ( recordSet . getString ( "WORKFLOWID" ) ) ;
}
recordSet . executeQuery ( "select * from uf_ArchivesSet where mainwfid = ? " , wfid ) ;
if ( recordSet . next ( ) ) {
mainwfid = Util . null2String ( recordSet . getString ( "mainwfid" ) ) ;
subwfid = Util . null2String ( recordSet . getString ( "subwfid" ) ) ;
} else {
reqids . add ( requestid + "" ) ;
return reqids ;
}
}
RecordSet rs = new RecordSet ( ) ;
String ids = requestid + "" ;
reqids . add ( requestid + "" ) ;
for ( int i = 0 ; i < 5 ; i + + ) {
ArrayList < String > idList = new ArrayList < > ( ) ;
String sql ;
if ( isSubReq ) {
sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )" ;
} else {
sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " ) and workflowid in ( " + subwfid + " ) " ;
}
log . error ( "subrequestSql:{}" , sql ) ;
rs . executeQuery ( sql ) ;
while ( rs . next ( ) ) {
String subrequestid = Util . null2String ( rs . getString ( "requestid" ) ) ;
// String workflowid = Util.null2String(rs.getString("workflowid"));
idList . add ( subrequestid ) ;
reqids . add ( subrequestid ) ;
// 使用map自动去重,一种流程类型只取一个requestid
}
ids = String . join ( "," , idList ) ;
if ( ids . length ( ) = = 0 ) {
break ;
}
}
// String sql = "select requestid from workflow_requestbase where mainrequestid = ?";
// RecordSet rs = new RecordSet();
// rs.executeQuery(sql, requestid);
// if (rs.next()) {
// String subrequestid = Util.null2String(rs.getString("requestid"));
// records.add(subrequestid);
// }
return reqids ;
}
/ * *
* 获 取 imageid Map < imageid , docid >
*
* @param ids
* @return
* /
public static Map < String , String > getFileIdByDocId ( String ids ) {
HashMap < String , String > records = new HashMap < > ( ) ;
String sql = "select docid,df.imagefileid imgid from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID in (" + ids + ")" ;
RecordSet recordSet = new RecordSet ( ) ;
recordSet . execute ( sql ) ;
while ( recordSet . next ( ) ) {
String docid = Util . null2String ( recordSet . getString ( "docid" ) ) ;
String imgid = Util . null2String ( recordSet . getString ( "imgid" ) ) ;
records . put ( docid , imgid ) ;
}
return records ;
}
/ * *
* 将 InputStream 写 入 本 地 文 件
*
* @param inputStream 输 入 流
* @param localFilePath 本 地 文 件 路 径
* @return
* @throws IOException 如 果 发 生 输 入 输 出 异 常
* /
public static File saveInputStreamToFile ( InputStream inputStream , String localFilePath ) throws IOException {
File targetFile = new File ( localFilePath ) ;
// 确保目标文件的父目录存在
File parentDir = targetFile . getParentFile ( ) ;
if ( parentDir ! = null & & ! parentDir . exists ( ) ) {
parentDir . mkdirs ( ) ;
}
// 使用try-with-resources语句确保流的正确关闭
try ( InputStream in = inputStream ;
OutputStream outputStream = new FileOutputStream ( targetFile ) ) {
int read ;
byte [ ] bytes = new byte [ 1024 ] ;
while ( ( read = in . read ( bytes ) ) ! = - 1 ) {
outputStream . write ( bytes , 0 , read ) ;
}
} // 自动关闭 in 和 outputStream
return targetFile ;
}
/ * *
* 根 据 链 接 下 载 文 件
*
* @param fileURL
* @param saveDir
* /
public static void downloadFile ( String fileURL , String saveDir ) {
log . info ( "文件下载地址:{}" , fileURL ) ;
log . info ( "文件保存地址:{}" , saveDir ) ;
try {
saveDir = codeUtf8 ( saveDir ) ;
URL url = new URL ( fileURL ) ;
File file = new File ( saveDir ) ;
FileUtils . copyURLToFile ( url , file ) ;
log . error ( "Download completed successfully." ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
log . error ( "Download failed." ) ;
}
}
/ * *
* 调 用 永 中 接 口
*
* @param BASE_URL
* @param file
* @return
* @throws IOException
* /
public static String callApi ( String BASE_URL , File file ) {
// OkHttpClient client = new OkHttpClient();
//增加设置超时时间
OkHttpClient client = new OkHttpClient . Builder ( )
. connectTimeout ( 150 , TimeUnit . SECONDS )
. readTimeout ( 150 , TimeUnit . SECONDS )
. writeTimeout ( 150 , TimeUnit . SECONDS )
. build ( ) ;
// Debugging: Check if the file exists and can be read
if ( file . exists ( ) & & file . canRead ( ) ) {
log . error ( "File exists and is readable. File path: " + file . getAbsolutePath ( ) ) ;
} else {
log . error ( "File does not exist or cannot be read. File path: " + file . getAbsolutePath ( ) ) ;
}
RequestBody requestBody = null ;
String code = getCodeByFileType ( file . getName ( ) ) ;
// if (StringUtil.isEmpty(code)){
// return "";
// }
String fileName = null ;
String extName = "" ;
try {
fileName = URLEncoder . encode ( file . getName ( ) , StandardCharsets . UTF_8 . toString ( ) ) ;
extName = fileName . substring ( fileName . lastIndexOf ( "." ) ) ;
} catch ( UnsupportedEncodingException e ) {
e . printStackTrace ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
try {
String uuid = UUID . randomUUID ( ) . toString ( ) . replaceAll ( "-" , "" ) ;
requestBody = new MultipartBody . Builder ( )
. setType ( MultipartBody . FORM )
. addFormDataPart ( "convertType" , code )
. addFormDataPart ( "file" , uuid + extName , RequestBody . create ( MediaType . parse ( "application/zip" ) , file ) )
. build ( ) ;
} catch ( Exception e ) {
log . error ( e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
}
Request request = new Request . Builder ( )
. url ( BASE_URL )
. post ( requestBody )
. build ( ) ;
try ( Response response = client . newCall ( request ) . execute ( ) ) {
return response . body ( ) . string ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
return "" ;
}
/ * *
* 根 据 文 件 类 型 获 取 转 为 pdf 的 编 码
*
* @param FileName
* @return
* /
public static String getCodeByFileType ( String FileName ) {
if ( ! FileName . contains ( "." ) ) {
return "" ;
}
String extName = FileName . substring ( FileName . lastIndexOf ( "." ) + 1 ) ;
String convertType = "" ;
if ( extName . matches ( "(doc|dot|dtd|docx|docm|dotx|ppt|pptx|ppsx|potx|xlsx|xlsm|wps|dps|et|wpt|xls|xlc|xlt|xlm|xlw|DOC|DOT|DTD|DOCX|DOCM|DOTX|PPT|PPTX|PPSX|POTX|XLSX|XLSM|WPS|DPS|ET|WPT|XLS|XLC|XLT|XLM|XLW)" ) ) {
convertType = "3" ;
} else if ( extName . matches ( "(ofd|OFD)" ) ) {
convertType = "57" ;
} else if ( extName . matches ( "(GIF|JPEG|JPG|BMP|PNG|gif|jpeg|jpg|bmp|png)" ) ) {
convertType = "32" ;
} else if ( extName . matches ( "(PDF|pdf)" ) ) {
convertType = "34" ;
}
return convertType ;
}
/ * * *
* 获 取 关 键 词
* @param id
* @return
* /
public static String getKeyword ( String id ) {
String sql = "select * from uf_test where id = ?" ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( sql , id ) ;
rs . next ( ) ;
return Util . null2String ( rs . getString ( "label" ) ) ;
}
/ * *
* 删 除 文 档 及 附 件 , 调 用 移 到 回 收 站 , 再 从 回 收 站 删 除
*
* @param docid
* /
public static void deleteDocByid ( String docid ) {
DocRecycleManager docRecycleManager = new DocRecycleManager ( ) ;
User user = new User ( 1 ) ;
docRecycleManager . moveDocToRecycle ( user . getUID ( ) , user . getLogintype ( ) , Util . getIntValue ( docid ) , "127.0.0.1" ) ;
docRecycleManager . deleteDocFromRecycle ( user . getUID ( ) , user . getLogintype ( ) , weaver . general . Util . getIntValue ( docid ) , "127.0.0.1" ) ;
}
/ * *
* 获 取 流 程 类 型 名 称
*
* @param wfid
* @return
* /
public static String getWfNameByid ( String wfid ) {
String sql = "select WORKFLOWNAME from WORKFLOW_BASE where id = ?" ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( sql , wfid ) ;
rs . next ( ) ;
return Util . null2String ( rs . getString ( "WORKFLOWNAME" ) ) ;
}
public static String [ ] getDeptNameAndCode ( String ngbm ) {
String sql = "select DEPARTMENTNAME , DAPYBH from hrmdepartment a left join hrmdepartmentdefined b " +
" on a.ID = b.DEPTID " +
" where a.ID = ? " ;
RecordSet recordSet = new RecordSet ( ) ;
recordSet . executeQuery ( sql , ngbm ) ;
recordSet . next ( ) ;
return new String [ ] { recordSet . getString ( "DAPYBH" ) , recordSet . getString ( "DEPARTMENTNAME" ) } ;
}
/ * *
* 将 gbk 转 为 UTF - 8 , 创 建 ISO - 8859 - 1 编 码 的 字 符 串 ,
* ISO - 8859 - 1 编 码 是 一 个 字 节 对 应 一 个 字 符 , 因 此 不 会 使 最 后 一 个 字 节 错 误 。
*
* @param text
* @return
* /
public static String codeUtf8 ( String text ) {
String ISOtext = null ;
ISOtext = new String ( text . getBytes ( StandardCharsets . UTF_8 ) , StandardCharsets . ISO_8859_1 ) ;
return new String ( ISOtext . getBytes ( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
}
public static String getAssociatedPersons ( int requestid , boolean isSubReq ) {
List < String > subRequest = getSubRequestIds ( requestid , isSubReq ) ;
String sql = "select distinct b.LOGINID loginid from WORKFLOW_REQUESTLOG a left join HRMRESOURCE b " +
" on a.OPERATOR = b.ID " +
" where a.OPERATOR is not null and a.OPERATOR != 1 and a.REQUESTID in ( " + String . join ( "," , subRequest ) + " )" ;
RecordSet recordSet = new RecordSet ( ) ;
HashSet < String > set = new HashSet < > ( ) ;
recordSet . executeQuery ( sql ) ;
while ( recordSet . next ( ) ) {
String loginid = Util . null2String ( recordSet . getString ( "loginid" ) ) ;
if ( StringUtil . isEmpty ( loginid ) ) {
continue ;
}
//处理下子账号
if ( loginid . length ( ) > 8 ) {
loginid = loginid . substring ( 0 , 8 ) ;
}
if ( "fenfa" . equals ( loginid ) ) {
continue ;
}
set . add ( loginid ) ;
}
return String . join ( "&&" , set ) ;
}
public static Map < String , String > getSignFiles ( int requestid , boolean isSubReq ) {
RecordSet recordSet = new RecordSet ( ) ;
ArrayList < String > docids = new ArrayList < > ( ) ;
List < String > subRequest = ArchivesUtil . getSubRequestIds ( requestid , isSubReq ) ;
String sql = "select * from WORKFLOW_REQUESTLOG where REQUESTID in ( " +
String . join ( "," , subRequest ) + " )" +
"and logtype != '1' and (annexdocids is not null or annexdocids <> '' ) " ;
log . error ( "getSignFilessql:{}" , sql ) ;
recordSet . executeQuery ( sql ) ;
while ( recordSet . next ( ) ) {
String annexdocids = Util . null2String ( recordSet . getString ( "annexdocids" ) ) ;
if ( annexdocids . length ( ) > 0 ) {
if ( annexdocids . contains ( "," ) ) {
// annexdocids.split(",")
docids . addAll ( Arrays . asList ( annexdocids . split ( "," ) ) ) ;
} else {
docids . add ( annexdocids ) ;
}
}
}
return ArchivesUtil . getFileIdByDocId ( String . join ( "," , docids ) ) ;
}
/ * *
* 生 成 子 流 程 承 办 单
*
* @param requestid 主 流 程 id
* /
public static List < String > generaSubRequestFormPdf ( String requestid ) {
log . error ( "generaSubRequestFormPdf,requestid:{}" , requestid ) ;
Map < String , String > subRequest = ArchivesUtil . getSubRequest ( requestid , 5 ) ;
for ( String s : subRequest . keySet ( ) ) {
requestid = subRequest . get ( s ) ;
break ;
}
List < String > docids = new ArrayList < > ( ) ;
// for (String wfid : subRequest.keySet()) {
RequestService requestService = new RequestService ( ) ;
RequestInfo requestInfo = requestService . getRequest ( Util . getIntValue ( requestid ) , 100 ) ;
WorkflowToDocCus workflowToDoc = new WorkflowToDocCus ( ) ;
requestInfo . setLastoperator ( "1" ) ;
requestInfo . setDescription ( ArchivesUtil . getWfNameByid ( requestInfo . getWorkflowid ( ) ) + "-" + requestInfo . getDescription ( ) ) ;
log . error ( "generaSubRequestFormPdf,requestInfo:{}" , JSON . toJSONString ( requestInfo ) ) ;
List < String > subDocids = workflowToDoc . execute ( requestInfo , 1 ) ;
docids . addAll ( subDocids ) ;
log . error ( "generaSubRequestFormPdf,requestInfo:{}" , JSON . toJSONString ( subDocids ) ) ;
// }
return docids ;
}
/ * *
* 生 成 主 流 程 承 办 单
*
* @param requestid 生 成 表 单 时 的 签 字 意 见 是 否 需 要 子 流 程 的 签 字 意 见
* /
public static List < String > generaRequestFormPdf ( int requestid , int reqType ) {
log . error ( "generaRequestFormPdf,requestid:{}" , requestid ) ;
RequestService requestService = new RequestService ( ) ;
RequestInfo requestInfo = requestService . getRequest ( Util . getIntValue ( requestid ) , 100 ) ;
WorkflowToDocCus workflowToDoc = new WorkflowToDocCus ( ) ;
requestInfo . setLastoperator ( "1" ) ;
requestInfo . setDescription ( ArchivesUtil . getWfNameByid ( requestInfo . getWorkflowid ( ) ) + "-" + requestInfo . getDescription ( ) ) ;
log . error ( "generaRequestFormPdf,requestInfo:{}" , JSON . toJSONString ( requestInfo ) ) ;
return workflowToDoc . execute ( requestInfo , reqType ) ;
}
//
public static int findMaxValue ( String commaSeparatedValues ) {
try {
// 分割字符串
String [ ] numbers = commaSeparatedValues . split ( "," ) ;
// 初始化最大值为整数的最小值
int max = 0 ;
// 遍历字符串数组
for ( String number : numbers ) {
// 转换为整数
int value = Integer . parseInt ( number . trim ( ) ) ; // 使用trim()移除可能的空格
// 检查是否为最大值
if ( value > max ) {
max = value ;
}
}
return max ;
} catch ( NumberFormatException e ) {
log . error ( "ConversionException:" + commaSeparatedValues ) ;
return 0 ;
}
}
public static String [ ] getSubCom ( String ngbm ) {
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( "select sub.id subid , SUBCOMPANYNAME from HRMDEPARTMENT dept left join HRMSUBCOMPANY sub " +
" on dept.SUBCOMPANYID1 = sub.ID " +
" where dept.id = ? " , ngbm ) ;
rs . next ( ) ;
String subcompanyname = rs . getString ( "SUBCOMPANYNAME" ) ;
String subid = rs . getString ( "subid" ) ;
if ( "总行" . equals ( subcompanyname ) ) {
subcompanyname = "总行机关" ;
}
rs . executeQuery ( "select DAPYBH from HRMSUBCOMPANYDEFINED where SUBCOMID = ?" , subid ) ;
rs . next ( ) ;
String DAPYBH = rs . getString ( "DAPYBH" ) ;
return new String [ ] { DAPYBH , subcompanyname } ;
}
public static void deleteDirectory ( String directoryPath ) {
// 创建File对象
File directory = new File ( directoryPath ) ;
try {
// 使用FileUtils.deleteDirectory删除目录及其子目录和文件
FileUtils . deleteDirectory ( directory ) ;
log . info ( "目录删除成功:{}" , directory ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
log . error ( "目录删除失败:{}" , directory ) ;
log . error ( "失败原因:{}" , e . getMessage ( ) ) ;
}
}
public static boolean isAfterSevenAM ( int time ) {
// 获取当前时间
LocalTime currentTime = LocalTime . now ( ) ;
// 定义早上7点的时间
LocalTime sevenAM = LocalTime . of ( time , 0 ) ;
// 比较当前时间和早上7点
return currentTime . isAfter ( sevenAM ) ;
}
public static void main ( String [ ] args ) {
String fileName = "11111" ;
System . out . println ( fileName . substring ( fileName . lastIndexOf ( "." ) ) ) ;
}
//word转pdf
public static int docConvert2Pdf ( String imagefileid ) {
HashMap < String , String > param = new HashMap < > ( ) ;
param . put ( "imagefileid" , imagefileid ) ;
param . put ( "targetFileFormat" , "PDF" ) ;
int imageid = convertDocType ( param ) ;
return imageid ;
}
;
public static Map < String , String > convert ( Map < String , String > params ) throws Exception {
Map < String , String > result = new HashMap < String , String > ( ) ;
net . sf . json . JSONObject requestParams = new net . sf . json . JSONObject ( ) ;
User user = new User ( 1 ) ;
String ecfileid = params . get ( "imagefileid" ) ;
// 判断模块。目前应该只有知识管理的
String fromMould = Tools . null2String ( params . get ( "fromMould" ) ) ;
fromMould = Tools . getFromMould ( fromMould ) ;
String targetFileFormat = Tools . null2String ( params . get ( "targetFileFormat" ) ) ;
String apiUrl = "" ; // Config.getCpsV1OfficeConvert();
if ( 6 = = Config . getProductVersion ( ) ) {
apiUrl = Config . getV6CpsV1OfficeConvert ( ) ;
} else if ( 5 = = Config . getProductVersion ( ) ) {
apiUrl = Config . getCpsV1OfficeConvert ( ) ;
}
FileInfoUtil fileInfoUtil = new FileInfoUtil ( ) ;
Map < String , String > fileInfo = fileInfoUtil . getFileInfo ( ecfileid , user , fromMould ) ;
String filename = fileInfo . get ( "filename" ) ;
filename = Tools . getFileNameWithLowerCaseSuffix ( filename ) ;
requestParams = new net . sf . json . JSONObject ( ) ;
requestParams . put ( "doc_filename" , getTempFileName ( filename ) ) ;
requestParams . put ( "doc_url" , fileInfo . get ( "download" ) ) ;
requestParams . put ( "target_file_format" , targetFileFormat ) ;
//判断下转换格式为PDF且配置文件中未开启时添加参数
// "to_pdf" = {
// "show_ins_and_del" = 1
// }
// if ("PDF".equals(targetFileFormat) && Config.isProperty("show_ins_and_del", 1, 1)){
JSONObject to_pdf = new JSONObject ( ) ;
// to_pdf.put("show_ins_and_del",1);
to_pdf . put ( "print" , true ) ;
to_pdf . put ( "revisions_mode" , 2 ) ;
requestParams . put ( "to_pdf" , to_pdf ) ;
// }
// 判断如果是excel则优化下转换结果
String ext = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
boolean isExcelFile = ( "doc" . equals ( ext ) | | "docx" . equals ( ext ) | | "wps" . equals ( ext ) | | "xls" . equals ( ext ) | | "xlsx" . equals ( ext ) ) ;
isExcelFile = isExcelFile | | ( "," + Config . getPropertyValue ( "doccenter_fit_excel_exts" ) + "," ) . contains ( "," + ext + "," ) ;
if ( isExcelFile & & Config . isProperty ( "doccenter_fit_excel" , 1 , 1 ) ) {
JSONObject et_page_zoom = new JSONObject ( ) ;
// 表示是否保持当前客户端的缩放比, true表示保持当前缩放比打印, false表示以100%的缩放比打印, 当fit_pagetall或fit_pagewide中有一个为1, 或都为1时, 该参数不生效
et_page_zoom . put ( "keep_pagezoom" , "true" . equals ( Config . getPropString ( "doccenter_keep_pagezoom" , "true" ) ) ) ;
// 表示是否适配所有行, 0表示正常分页打印, 1表示不分页, 所有行在一页上
et_page_zoom . put ( "fit_pagewide" , Config . getPropIntValue ( "doccenter_fit_pagewide" , 0 ) ) ;
// 表示是否适配所有列, 0表示正常分页打印, 1表示不分页, 所有列在一页上; 当fit_pagetall与fit_pagewide都为1时, 表示将所有内容打印到一页上
et_page_zoom . put ( "fit_pagetall" , Config . getPropIntValue ( "doccenter_fit_pagetall" , 1 ) ) ;
requestParams . put ( "et_page_zoom" , et_page_zoom ) ;
}
// 结果文件的文件名
String targetFilename = params . containsKey ( "targetFilename" ) ? params . get ( "targetFilename" ) : "" ;
if ( Tools . isEmptyOrNull ( targetFilename ) & & ! Tools . isEmptyOrNull ( filename ) ) {
String nameOnly = filename . contains ( "." ) ? filename . substring ( 0 , filename . lastIndexOf ( "." ) ) : filename ;
targetFilename = nameOnly + "." + targetFileFormat . toLowerCase ( ) ;
}
BaseConvert baseConvert = new BaseConvert ( user ) ;
if ( ! params . containsKey ( "comefrom" ) ) {
params . put ( "comefrom" , "DocTypeConvert" ) ;
}
result = baseConvert . convert ( apiUrl , requestParams , targetFilename , params ) ;
// 处理其他的事务
return result ;
}
public static String getTempFileName ( String filename ) {
if ( Tools . isEmptyOrNull ( filename ) | | ! filename . contains ( "." ) ) {
return filename ;
}
int idx = filename . lastIndexOf ( "." ) ;
return "1" + filename . substring ( idx ) . toLowerCase ( ) ;
}
public static int convertDocType ( Map < String , String > params ) {
Map < String , String > result = new HashMap < String , String > ( ) ;
try {
result = convert ( params ) ;
if ( "0" . equals ( result . get ( "status" ) ) ) {
return Util . getIntValue ( result . get ( "imagefileid" ) ) ;
}
} catch ( Exception e ) {
log . error ( e . getMessage ( ) ) ;
}
return - 1 ;
}
public static void deletePdfImageFile ( int imageFileId ) {
if ( imageFileId < = 0 ) {
return ;
}
try {
RecordSet rs = new RecordSet ( ) ;
String sql = "select p.pdfimagefileid,i.filerealpath from pdf_imagefile p,imagefile i where p.pdfimagefileid = i.imagefileid and p.imagefileid = " + imageFileId ;
rs . executeSql ( sql ) ;
if ( rs . next ( ) ) {
String pdfimagefileid = rs . getString ( "pdfimagefileid" ) ;
String filerealpath = rs . getString ( "filerealpath" ) ;
File file = new File ( filerealpath ) ;
new FileDeleteUtil ( ) . deleteFile ( file ) ;
rs . executeSql ( "delete from pdf_imagefile where imagefileid=" + imageFileId ) ;
rs . executeSql ( "delete from imagefile where imagefileid=" + pdfimagefileid ) ;
} else {
String imgsql = "select * from IMAGEFILE where IMAGEFILEID = " + imageFileId ;
rs . executeSql ( imgsql ) ;
if ( rs . next ( ) ) {
String filerealpath = rs . getString ( "filerealpath" ) ;
File file = new File ( filerealpath ) ;
new FileDeleteUtil ( ) . deleteFile ( file ) ;
rs . executeSql ( "delete from imagefile where imagefileid=" + imageFileId ) ;
}
}
rs . executeUpdate ( "delete from convert_imagefile where imagefileid=?" , imageFileId ) ;
} catch ( Exception ex ) {
}
}
}