You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1718 lines
88 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.engine.custom.archives.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 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<String, String> param) {
filePath = Util.null2String(param.get("filePath"));
Url = Util.null2String(param.get("Url"));
templatePath = Util.null2String(param.get("templatePath"));
}
public void pushArchives(Map<String, String> 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<String, String> requesData = getRequestByid(requestid);
log.info("requesData:{}", requesData);
String fj = Util.null2String(requesData.get("fj"));
String zwkbj = Util.null2String(requesData.get("zwkbj"));
//增加签字意见中的附件到附件文件夹中
Map<String, String> signFiles = getSignFiles(requestid);
List<String> docids = new ArrayList<>();
// docids.addAll(Arrays.asList(fj.split(",")));
// docids.addAll(Arrays.asList(zwkbj.split(",")));
Map<String, String> fjMap = getFileIdByDocId(fj);
Map<String, String> zwkbjMap = getFileIdByDocId(zwkbj);
List<String> zwFileName = new ArrayList<>();
List<String> 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<String> requestDocid = generaRequestFormPdf(requestid);
List<String> subRequestDocid = generaSubRequestFormPdf(requestid);
Map<String, String> reqDocMap = getFileIdByDocId(String.join(",", requestDocid));
Map<String, String> subReqDocMap = getFileIdByDocId(String.join(",", subRequestDocid));
log.error("reqDocMap:{}", JSONObject.toJSONString(reqDocMap));
log.error("subReqDocMap:{}", JSONObject.toJSONString(subReqDocMap));
docids.addAll(requestDocid);
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;
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 <String, String> getSignFiles(String requestid) {
RecordSet recordSet = new RecordSet();
ArrayList<String> docids = new ArrayList<>();
List<String> 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<String> generaSubRequestFormPdf(String requestid) {
log.error("generaSubRequestFormPdf,requestid:{}",requestid);
Map<String, String> subRequest = getSubRequest(requestid);
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(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
*/
private static List<String> 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<String, String> getRequestByid(String requestid) {
HashMap<String, String> 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<String, String> requesData, String zipName, List<String> zwFileName, List<String> 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("bgqx")); //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<String, String> requesData) {
HashSet<String> 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<String> 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<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);
}
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<String, String> getSubRequest(String requestid) {
HashMap<String, String> records = new HashMap<>();
RecordSet rs = new RecordSet();
String ids = requestid;
for (int i = 0; i < 5; 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(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<String> getSubRequestIds(String requestid) {
List<String> reqids = new ArrayList<>();
RecordSet rs = new RecordSet();
String ids = requestid;
reqids.add(requestid);
for (int i = 0; i < 5; i++) {
ArrayList<String> 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<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();
// 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<String> subRequestIds = getSubRequestIds(requestid);
ArrayList<Map<String, Object>> lists = new ArrayList<>();
for (String reqid : subRequestIds) {
HashMap<String, Object> params = new HashMap<>();
params.put("requestid", reqid);
params.put("desremark", "all");
params.put("pageSize", "50");
params.put("isfirst", "true");
// params.put("request", request);
Map<String, Object> data = 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");
for (Map<String, Object> 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 nodename = (String) value.get("nodename");
HashMap<String, String> itemMap = new HashMap<>();
itemMap.put("operator", operator);
itemMap.put("operatorid", operatorid);
itemMap.put("operatortype", operatortype);
itemMap.put("operatedate", operatedate);
itemMap.put("nodename", nodename);
itemMap.put("requestName", (String) value.get("requestName"));
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",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 + 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<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等于4preisremark=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(tmpreceivedate, user.getLanguage()) + " " + Util.toScreen(tmpreceivetime, 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<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();//可不手动调用
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);
}
}
}