package com.engine.custom.archives.service; import com.dcfs.fts.common.error.FtpException; import com.engine.custom.hg.util.HgUtils; import com.icbc.api.internal.apache.http.impl.cookie.S; import lombok.extern.slf4j.Slf4j; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; import java.nio.charset.StandardCharsets; import java.io.*; import java.util.*; import org.apache.commons.lang.StringUtils; import weaver.conn.RecordSet; import weaver.general.StringUtil; import weaver.general.Util; import com.alibaba.fastjson.JSONObject; import weaver.file.ImageFileManager; import java.net.URL; import org.apache.commons.io.FileUtils; import okhttp3.*; import java.net.URLEncoder; import weaver.soa.workflow.request.RequestService; import weaver.soa.workflow.request.RequestInfo; import com.engine.custom.archives.action.WorkflowToDocCus; import weaver.docs.docs.DocRecycleManager; import weaver.hrm.User; import com.api.workflow.service.RequestAuthenticationService; import weaver.workflow.workflow.WorkflowConfigComInfo; import weaver.hrm.resource.ResourceComInfo; import weaver.crm.Maint.CustomerInfoComInfo; import com.alibaba.fastjson.JSON; import weaver.workflow.monitor.Monitor; import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz; import com.api.workflow.util.ServiceUtil; import com.engine.workflow.biz.RobotNode.RobotNodeBiz; import weaver.general.TimeUtil; import org.apache.poi.xwpf.usermodel.XWPFDocument; import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.util.ZipUtil; import freemarker.template.Configuration; import freemarker.template.TemplateExceptionHandler; import freemarker.template.Template; import java.nio.charset.StandardCharsets; @Slf4j public class PushArchivesCornService { private static String filePath; private static String Url; private static String templatePath; // 模板文件路径 private static final String zwdir = "正文"; private static final String fjdir = "附件"; private static final String cbddir = "承办单"; private static final String zlcdir = "承办单" + File.separator + "子流程"; private static final String lzxxdir = "流转信息"; private static final String fjFile = "附件"; public void setProp(Map param) { filePath = Util.null2String(param.get("filePath")); Url = Util.null2String(param.get("Url")); templatePath = Util.null2String(param.get("templatePath")); } public void pushArchives(Map param) { log.info("PushArchivesCorn====Begin========{}", param); try { ZipUtil zipUtil = new ZipUtil(); Date date = getDate(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String format = dateFormat.format(date); SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 获取当前时间的第一秒 String firstSecond = yyyyMMddHHmmss.format(getFirstSecondOfDate(date)); // 获取当前时间的最后一秒 String lastSecond = yyyyMMddHHmmss.format(getLastSecondOfDate(date)); String requestid = Util.null2String(param.get("requestid")); log.error("requestid:{}", requestid); String context = extracted(requestid); log.error("context:{}", context); File file = crFile(filePath + "/togd_" + new SimpleDateFormat("yyyyMMdd000000").format(date)); log.error("textfile:{}", file.getAbsolutePath()); writeToTxt(file.getPath(), file.getName(), context, true); File txtzip = new File(filePath + File.separator + "togd_" + new SimpleDateFormat("yyyyMMdd000000").format(date) + ".zip"); log.error("textZipFile:{}", txtzip.getAbsolutePath()); OutputStream outputStream = new FileOutputStream(txtzip); File writename = new File(file.getPath() + "/" + file.getName() + ".txt"); com.engine.custom.hg.util.ZipUtil.filesToZip(writename, outputStream, writename.getName()); log.error("writename:{}",writename.getName()); String s = HgUtils.putFile(txtzip.getAbsolutePath(), txtzip.getName()); updateRecord(requestid, s); log.error("textZip:{}", s); // HgUtils.putFile(""); } catch (Exception e) { log.info("PushArchivesCorn====Exception========{}", e.getMessage()); e.printStackTrace(); } } private void updateRecord(String requestids, String s) { String sql = "update uf_pushArchivesLog set esbtxtml = ? where request in ( " + requestids + " )"; RecordSet recordSet = new RecordSet(); recordSet.executeUpdate(sql, s); } private String extracted(String requestid) throws FtpException, IOException { Map requesData = getRequestByid(requestid); log.info("requesData:{}", requesData); String fj = Util.null2String(requesData.get("fj")); String zwkbj = Util.null2String(requesData.get("zwkbj")); //增加签字意见中的附件到附件文件夹中 Map signFiles = getSignFiles(requestid); List docids = new ArrayList<>(); // docids.addAll(Arrays.asList(fj.split(","))); // docids.addAll(Arrays.asList(zwkbj.split(","))); Map fjMap = getFileIdByDocId(fj); Map zwkbjMap = getFileIdByDocId(zwkbj); List zwFileName = new ArrayList<>(); List fjFileName = new ArrayList<>(); final int[] i = {1}; //附件 fjMap.forEach((docid, imageid) -> { ImageFileManager imageFileManager = new ImageFileManager(); imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); InputStream inputStream = imageFileManager.getInputStream(); //中文路径/中文文件名 String imageFileName = filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName(); fjFileName.add(imageFileManager.getImageFileName()); log.info("生成附件路径:{}", imageFileName); imageFileName = codeUtf8(imageFileName); try { File file = saveInputStreamToFile(inputStream, imageFileName); String jsonStr = callApi(Url, file); log.error("永中接口返回数据:{}", jsonStr); JSONObject result = JSONObject.parseObject(jsonStr); String errorcode = result.getString("errorcode"); if ("0".equals(errorcode)) { JSONObject data = result.getJSONObject("data"); String destFileName = data.getString("destFileName"); String viewUrl = data.getString("viewUrl"); downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); } } catch (IOException e) { e.printStackTrace(); } }); //签字意见附件 signFiles.forEach((docid, imageid) -> { ImageFileManager imageFileManager = new ImageFileManager(); imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); InputStream inputStream = imageFileManager.getInputStream(); //中文路径/中文文件名 String imageFileName = filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName(); fjFileName.add(imageFileManager.getImageFileName()); log.info("生成签字意见附件路径:{}", imageFileName); imageFileName = codeUtf8(imageFileName); try { File file = saveInputStreamToFile(inputStream, imageFileName); String jsonStr = callApi(Url, file); log.error("永中接口返回数据:{}", jsonStr); JSONObject result = JSONObject.parseObject(jsonStr); String errorcode = result.getString("errorcode"); if ("0".equals(errorcode)) { JSONObject data = result.getJSONObject("data"); String destFileName = data.getString("destFileName"); String viewUrl = data.getString("viewUrl"); downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + fjdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); } } catch (IOException e) { e.printStackTrace(); } }); //正文 zwkbjMap.forEach((docid, imageid) -> { ImageFileManager imageFileManager = new ImageFileManager(); imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); InputStream inputStream = imageFileManager.getInputStream(); zwFileName.add(imageFileManager.getImageFileName()); //中文路径/中文文件名 String imageFileName = filePath + File.separator + requestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName(); log.info("生成正文路径:{}", imageFileName); imageFileName = codeUtf8(imageFileName); try { File file = saveInputStreamToFile(inputStream, imageFileName); String jsonStr = callApi(Url, file); log.error("永中接口返回:{}", jsonStr); JSONObject result = JSONObject.parseObject(jsonStr); String errorcode = result.getString("errorcode"); if ("0".equals(errorcode)) { JSONObject data = result.getJSONObject("data"); String destFileName = data.getString("destFileName"); String viewUrl = data.getString("viewUrl"); downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName() + ".pdf"); } } catch (IOException e) { e.printStackTrace(); } }); //开始承办单 先获取主流程的承办单 List requestDocid = generaRequestFormPdf(requestid); // 1.去掉生成子流程承办单 // List subRequestDocid = generaSubRequestFormPdf(requestid); Map reqDocMap = getFileIdByDocId(String.join(",", requestDocid)); // 2.去掉生成子流程承办单 // Map subReqDocMap = getFileIdByDocId(String.join(",", subRequestDocid)); log.error("reqDocMap:{}", JSONObject.toJSONString(reqDocMap)); //log.error("subReqDocMap:{}", JSONObject.toJSONString(subReqDocMap)); docids.addAll(requestDocid); // 3.去掉生成子流程承办单 // docids.addAll(subRequestDocid); //附件 reqDocMap.forEach((docid, imageid) -> { ImageFileManager imageFileManager = new ImageFileManager(); imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); InputStream inputStream = imageFileManager.getInputStream(); //中文路径/中文文件名 String imageFileName = filePath + File.separator + requestid + File.separator + cbddir + File.separator + fjFile + i[0] + "_" + imageFileManager.getImageFileName(); log.info("主流程承办单路径:{}", imageFileName); imageFileName = codeUtf8(imageFileName); try { File file = saveInputStreamToFile(inputStream, imageFileName); String jsonStr = callApi(Url, file); log.error("永中接口返回:{}", jsonStr); JSONObject result = JSONObject.parseObject(jsonStr); String errorcode = result.getString("errorcode"); if ("0".equals(errorcode)) { JSONObject data = result.getJSONObject("data"); String destFileName = data.getString("destFileName"); String viewUrl = data.getString("viewUrl"); downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + cbddir + File.separator + fjFile + i[0] + "_" + imageFileManager.getImageFileName() + ".pdf"); } i[0]++; } catch (IOException e) { e.printStackTrace(); } }); //正文 i[0] = 1; // 4.去掉生成子流程承办单 // subReqDocMap.forEach((docid, imageid) -> { // ImageFileManager imageFileManager = new ImageFileManager(); // imageFileManager.getImageFileInfoById(Util.getIntValue(imageid)); // InputStream inputStream = imageFileManager.getInputStream(); // //中文路径/中文文件名 // String imageFileName = filePath + File.separator + requestid + File.separator + zlcdir + File.separator + fjFile + i[0] + "_" + (imageFileManager.getImageFileName().contains("-")?imageFileManager.getImageFileName().split("\\-")[1]:imageFileManager.getImageFileName()); // imageFileName = codeUtf8(imageFileName); // log.info("子流程承办单路径:{}", imageFileName); // try { // File file = saveInputStreamToFile(inputStream, imageFileName); // String jsonStr = callApi(Url, file); // log.error("永中接口返回:{}", jsonStr); // JSONObject result = JSONObject.parseObject(jsonStr); // String errorcode = result.getString("errorcode"); // if ("0".equals(errorcode)) { // JSONObject data = result.getJSONObject("data"); // String destFileName = data.getString("destFileName"); // String viewUrl = data.getString("viewUrl"); // downloadFile(viewUrl, filePath + File.separator + requestid + File.separator + zlcdir + File.separator + fjFile + i[0] + "_" + (imageFileManager.getImageFileName().contains("-")?imageFileManager.getImageFileName().split("\\-")[1]:imageFileManager.getImageFileName() )+ ".pdf"); // } // i[0]++; // } catch (IOException e) { // e.printStackTrace(); // } // }); log.error(JSONObject.toJSONString(requestDocid)); // log.error(JSONObject.toJSONString(subRequestDocid)); for (String docid : docids) { log.error("删除了" + docid); deleteDocByid(docid); } //-------------------------------------------------------------------- RequestService requestService = new RequestService(); RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100); String logFile = getSignLog(requestid, cbddir+File.separator+lzxxdir, requestInfo.getCreatorid() + requestInfo.getDescription()); String s = callApi(Url, new File(logFile)); log.error(s); JSONObject result = JSONObject.parseObject(s); String errorcode = result.getString("errorcode"); if ("0".equals(errorcode)) { JSONObject data = result.getJSONObject("data"); String destFileName = data.getString("destFileName"); String viewUrl = data.getString("viewUrl"); downloadFile(viewUrl, logFile + ".pdf"); } String zipName = filePath + File.separator + requestid + ".zip"; ZipUtil.zip(filePath + File.separator + requestid, zipName); log.error("zipName:{}", zipName); String ftpFilePath = HgUtils.putFile(zipName, requestid + ".zip"); log.error("ftpFilePath:{}", ftpFilePath); String ftpFilePathNew = HgUtils.putFile(zipName, "test" + File.separator + requestid + ".zip"); log.error("ftpFilePathNew:{}", ftpFilePathNew); String context = getContext(requestid, requesData, requestid + ".zip", zwFileName, fjFileName); insertRecord(requestid, context, ftpFilePath); log.error("context:{}", context); return context; } private Map getSignFiles(String requestid) { RecordSet recordSet = new RecordSet(); ArrayList docids = new ArrayList<>(); List subRequest = getSubRequestIds(requestid); String sql = "select * from WORKFLOW_REQUESTLOG where REQUESTID in ( " + String.join(",",subRequest) + " )" + " and (annexdocids is not null or annexdocids <> '')"; 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 getFileIdByDocId(String.join(",",docids)) ; } private void insertRecord(String requestid, String context, String ftpFilePath) { String sql = "insert into uf_pushArchivesLog (request ,content,esbwjml) VALUES (?,?,?)"; RecordSet recordSet = new RecordSet(); recordSet.executeUpdate(sql, requestid, context, ftpFilePath); } // 获取指定日期的第一秒 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(); } // 获取指定日期的最后一秒 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(); } /** * 生成子流程承办单 * * @param requestid 主流程id */ private List generaSubRequestFormPdf(String requestid) { log.error("generaSubRequestFormPdf,requestid:{}",requestid); Map subRequest = getSubRequest(requestid); for (String s : subRequest.keySet()) { requestid = subRequest.get(s); break; } List 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(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); log.error("generaSubRequestFormPdf,requestInfo:{}",JSON.toJSONString(requestInfo)); List subDocids = workflowToDoc.execute(requestInfo, 1); docids.addAll(subDocids); log.error("generaSubRequestFormPdf,requestInfo:{}",JSON.toJSONString(subDocids)); // } return docids; } /** * 生成主流程承办单 * * @param requestid */ private static List generaRequestFormPdf(String requestid) { 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(getWfNameByid(requestInfo.getWorkflowid()) + "-" + requestInfo.getDescription()); log.error("generaRequestFormPdf,requestInfo:{}",JSON.toJSONString(requestInfo)); return workflowToDoc.execute(requestInfo, 0); } /*** * 封装数据 * @param requestid * @return */ public Map getRequestByid(String requestid) { HashMap record = new HashMap<>(); String sql = "select * from formtable_main_30 where requestid = ?"; String reqsql = "select REQUESTNAME from WORKFLOW_REQUESTBASE where REQUESTID = ?"; RecordSet rs = new RecordSet(); rs.executeQuery(sql, requestid); if (rs.next()) { String fj = Util.null2String(rs.getString("fj")); String zwkbj = Util.null2String(rs.getString("zwkbj")); // 正文可编辑字段 record.put("fj", fj); record.put("zwkbj", zwkbj); record.put("zwyyglgwmk", Util.null2String(rs.getString("zwyyglgwmk"))); record.put("lwh", Util.null2String(rs.getString("lwh"))); record.put("mj", Util.null2String(rs.getString("mj"))); record.put("lwrq", Util.null2String(rs.getString("lwrq"))); record.put("swrq", Util.null2String(rs.getString("swrq"))); record.put("blqx", Util.null2String(rs.getString("blqx"))); record.put("sfdb", Util.null2String(rs.getString("sfdb"))); record.put("wjlx", Util.null2String(rs.getString("wjlx"))); record.put("fssj", Util.null2String(rs.getString("fssj"))); record.put("gdh", Util.null2String(rs.getString("gdh"))); record.put("swh", Util.null2String(rs.getString("swh"))); record.put("ngbm", Util.null2String(rs.getString("ngbm"))); record.put("ngr", Util.null2String(rs.getString("ngr"))); record.put("ngrq", Util.null2String(rs.getString("ngrq"))); record.put("swlx", Util.null2String(rs.getString("swlx"))); record.put("jghwt", Util.null2String(rs.getString("jghwt"))); record.put("lwdwmc", Util.null2String(rs.getString("lwdwmc"))); record.put("bgqx", Util.null2String(rs.getString("bgqx"))); record.put("ys", Util.null2String(rs.getString("ys"))); record.put("wz", Util.null2String(rs.getString("wz"))); record.put("lb", Util.null2String(rs.getString("lb"))); record.put("bz", Util.null2String(rs.getString("bz"))); record.put("yffbm", Util.null2String(rs.getString("yffbm"))); record.put("ffbmb", Util.null2String(rs.getString("ffbmb"))); record.put("yffbm", Util.null2String(rs.getString("yffbm"))); } rs.executeQuery(reqsql, requestid); if (rs.next()) { record.put("REQUESTNAME", Util.null2String(rs.getString("REQUESTNAME"))); } return record; } private String getContext(String requestid, Map requesData, String zipName, List zwFileName, List fjFileName) { StringBuilder context = new StringBuilder(); try { String swrq = Util.null2String(requesData.get("swrq")); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(swrq, formatter); int year = date.getYear(); context.append(year).append("|"); String jghwt = Util.null2String(requesData.get("jghwt")); context.append(jghwt).append("|"); String swh = Util.null2String(requesData.get("swh")); context.append(swh).append("|"); String requestname = Util.null2String(requesData.get("REQUESTNAME")); context.append(requestname).append("|"); String lwdwmc = Util.null2String(requesData.get("lwdwmc")); //5 责任者 -> 来文单位 context.append(lwdwmc).append("|"); String bgqx = Util.null2String(requesData.get("bgqx")); //6 保管期限 -> 保管期限 context.append(bgqx).append("|"); String lwrq = Util.null2String(requesData.get("lwrq")); //7 日期 -> 原发文日期 context.append(lwrq).append("|"); String ys = Util.null2String(requesData.get("ys")); //8 页数 -> 页数 context.append(ys).append("|"); String wz = Util.null2String(requesData.get("wz")); //9 文种 -> 文种 context.append(wz).append("|"); String ngbm = Util.null2String(requesData.get("ngbm")); String[] deptData = getDeptNameAndCode(ngbm); context.append(deptData[0]).append("|"); //10 行编号 -> 拟稿部门 context.append(deptData[1]).append("|"); //11 行名称 context.append("").append("|"); // 12 保管期限编号 context.append("").append("|"); // 13 保管期限及编号 context.append("").append("|"); // 14 是否开放 context.append("").append("|"); // 15 互见号 String lb = Util.null2String(requesData.get("lb")); context.append(lb).append("|"); //16 类别 -> 类别 //TODO String xgbm = Util.null2String(getAssociatedDepts(requesData)); context.append(xgbm).append("|"); //17 相关部门 -> 流经部门 String lwh = Util.null2String(requesData.get("lwh"));// 18 收文号 -> 来文文号 context.append(lwh).append("|"); String fs = ""; context.append(fs).append("|"); // 19 份数 -> 份数 String bz = Util.null2String(requesData.get("bz")); context.append(bz).append("|"); // 20 备注 -> 备注 String yywh = Util.null2String(requesData.get("yywh")); context.append(yywh).append("|"); // 21 引用文号 -> 引用文号 String wjlx = Util.null2String(requesData.get("wjlx")); context.append(wjlx).append("|"); // 22 文件类型 -> 空 String fwlx = Util.null2String(requesData.get("fwlx")); context.append(fwlx).append("|"); // 23 文件类型 -> 空 String f = Util.null2String(requesData.get("f")); context.append(f).append("|"); // 24 发 -> 空 String ngr = Util.null2String(requesData.get("ngr")); context.append(new User(Util.getIntValue(ngr)).getLoginid()).append("|"); // 25 拟稿人 -> 拟稿人 context.append(deptData[1]).append("|"); // 26 拟稿部门 -> 拟稿部门名称 context.append("收文").append("|"); // 27 公文类型 -> "收文" //TODO context.append(getAssociatedPersons(requestid)).append("|"); // 28 相关人员 -> 参与人员 context.append("智慧OA").append("|"); // 29 数据来源 -> 数据来源 context.append(year).append("|"); // 30 形成年度 -> 年份 context.append(String.join("&&", zwFileName)).append("|"); // 31 正文名称 context.append(String.join("&&", fjFileName)).append("|"); // 32 附件名称 context.append(requestid).append("|"); // 33 主键 context.append("").append("|"); // 34 关联主键 context.append("").append("|"); // 35 被关联主键 context.append(zipName);// 36 压缩包名称 } catch (Exception e) { e.printStackTrace(); log.error("getContextError:{}", e.getMessage()); } return context.toString(); } private String getAssociatedDepts(Map requesData) { HashSet records = new HashSet<>(); records.addAll(Arrays.asList(Util.null2String(requesData.get("ngbm")).split(","))); records.addAll(Arrays.asList(Util.null2String(requesData.get("ffbm")).split(","))); records.addAll(Arrays.asList(Util.null2String(requesData.get("yffbm")).split(","))); records.addAll(Arrays.asList(Util.null2String(requesData.get("ffbmb")).split(","))); records.addAll(Arrays.asList(Util.null2String(requesData.get("zfbm")).split(","))); return String.join("&&", records); } private String getAssociatedPersons(String requestid) { List subRequest = getSubRequestIds(requestid); 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 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); } set.add(loginid); } return String.join("&&", set); } private String[] getFileName(String docids) { return new String[0]; } private 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); } /** * 获取当前流程下的所有子流程(最大5层) * * @param requestid * @return */ public static Map getSubRequest(String requestid) { HashMap records = new HashMap<>(); RecordSet rs = new RecordSet(); String ids = requestid; for (int i = 0; i < 5; i++) { ArrayList 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(workflowid, subrequestid); } 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 getSubRequestIds(String requestid) { List reqids = new ArrayList<>(); RecordSet rs = new RecordSet(); String ids = requestid; reqids.add(requestid); for (int i = 0; i < 5; i++) { ArrayList idList = new ArrayList<>(); String sql = "select requestid , workflowid from workflow_requestbase where mainrequestid in ( " + ids + " )"; 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 * * @param ids * @return */ public static Map getFileIdByDocId(String ids) { HashMap 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(); // 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()); String fileName = null; try { fileName = URLEncoder.encode(file.getName(), StandardCharsets.UTF_8.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("convertType", code) .addFormDataPart("file", fileName, 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) { 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 = "44"; } 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")); } /** * 生成流转意见 意见 * * @param requestid * @param dirName * @param requestName * @return */ public static String getSignLog(String requestid, String dirName, String requestName) { List subRequestIds = getSubRequestIds(requestid); ArrayList> lists = new ArrayList<>(); List autoInitNodeIds = getAutoInitNodeIds(String.join(",", subRequestIds)); 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 params = new HashMap<>(); params.put("requestid", reqid); params.put("desremark", "all"); params.put("pageSize", "999"); params.put("isfirst", "true"); // params.put("request", request); Map data = getSignLogCmd(params, new User(1)); log.info("流转信息:{}", data); log.error(JSONObject.toJSONString(data)); Map datas = (Map) data.get("datas"); List> entries = new ArrayList<>(datas.entrySet()); entries.sort(new Comparator>() { @Override public int compare(Map.Entry o1, Map.Entry 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> results = new ArrayList<>(); // log.error(JSONObject.toJSONString(entries)); for (Map.Entry entry : entries) { Map value = (Map) entry.getValue(); List> list = (List) value.get("list"); String nodeid = Util.null2String(value.get("nodeid")) ; if (autoInitNodeIds.contains(nodeid)){ continue; } for (Map item : list) { String operator = (String) item.get("operator"); String operatorid = (String) item.get("operatorid"); 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 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 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 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 + requestid + File.separator + dirName + File.separator + requestName + ".docx"; // 输出文件路径 log.error("生成文件路径:{}", templatePath); return generate(TemplatePath, TemplateName, dataMap, outputPath); } catch (Exception e) { log.error("errorerrorerror"); log.error(e.getMessage()); e.printStackTrace(); } return requestid; } public static Map getSignLogCmd(Map params, User user) { Map result = new HashMap(); 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 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 putpara = new HashMap(); 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> statuslist = new ArrayList>(); 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 nodekv = null; if (statuslist.size() == 0) { currentMinId = currentId; nodekv = new HashMap(); statuslist.add(nodekv); } else { Map 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(); 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 allstatusmap = new HashMap(); Map submitstatusmap = new HashMap(); Map nosubmitstatusmap = new HashMap(); Map viewstatusmap = new HashMap(); Map noviewstatusmap = new HashMap(); //提交节点信息--滚动加载到当前currentoperator对应最大id //数字统计转到新接口count中 ResourceComInfo resourceComInfo = new ResourceComInfo(); CustomerInfoComInfo customerInfoComInfo = new CustomerInfoComInfo(); Map all_nodemap = new HashMap(); Map submit_nodemap = new HashMap(); Map nosubmit_nodemap = new HashMap(); Map view_nodemap = new HashMap(); Map noview_nodemap = new HashMap(); rs.beforFirst(); int currentnum = 0; for (Iterator> it = statuslist.iterator(); it.hasNext(); index++) { Map 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 all_nodemap_in = new HashMap(); all_nodemap_in.put("nodeid", fnodeid); all_nodemap_in.put("nodename", namename); Map submit_nodemap_in = new HashMap(); Map nosubmit_nodemap_in = new HashMap(); Map view_nodemap_in = new HashMap(); Map noview_nodemap_in = new HashMap(); List> nodeallstatuslist = new ArrayList>(); List> nodesubmitstatuslist = new ArrayList>(); List> nodenosubmitstatuslist = new ArrayList>(); List> nodeviewstatuslist = new ArrayList>(); List> nodenoviewstatuslist = new ArrayList>(); 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 _statusmap = new HashMap(); // 操作人 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; } //创建文件夹 public 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; } public void writeToTxt(String path, String title, String content, Boolean append) { try { /* 写入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(); } } private Date getDate() { Date date = new Date(); // if (day != null) { // try { // date = new SimpleDateFormat("yyyyMMdd").parse(day); // } catch (ParseException e) { // // writeLog("时间格式错误,重新发送指定日期失败"); // e.printStackTrace(); // } // } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); //把日期往后增加一天.整数往后推,负数往前移动(1:表示明天、-1:表示昨天,0:表示今天) calendar.add(Calendar.DATE, -1); date = calendar.getTime(); return date; } /** * @param TemplatePath 模版存放目录 * @param TemplateName 模版名 * @param root 填充的数据 * @param GenerateFilename 生成文件名 * @throws Exception */ public static String generate(String TemplatePath, String TemplateName, Map 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();//可不手动调用 return GenerateFilename; } public static void main(String[] args) { String s = "25441,45465,545"; System.out.println(); String[] ss = s.split(","); for (String s1 : ss) { System.out.println(s1); } } /** * 获取流程自动发起的节点 * @param mainAndSubRequestId * @return */ private static ArrayList getAutoInitNodeIds(String mainAndSubRequestId) { RecordSet recordSet = new RecordSet(); ArrayList 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); while (recordSet.next()){ String nodeid = recordSet.getString("nodeid"); if (!StringUtils.isEmpty(nodeid)){ nodeids.add(nodeid); } } return nodeids; } }