<%@ page import="weaver.conn.RecordSet" %>
<%@ page import="weaver.general.BaseBean" %>
<%@ page import="com.alibaba.fastjson.JSONObject" %>
<%@ page import="com.alibaba.fastjson.JSONArray" %>
<%@ page import="weaver.general.Util" %>
<%@ page import="cn.hutool.core.util.ZipUtil" %>
<%@ page import="com.engine.custom.archives.util.ArchivesUtil" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="com.engine.custom.archives.entity.PushArchivesBean" %>
<%@ page import="com.engine.custom.hg.util.HgUtils" %>
<%@ page import="com.dcfs.fts.common.error.FtpException" %>
<%@ page import="weaver.soa.workflow.request.RequestService" %>
<%@ page import="weaver.soa.workflow.request.RequestInfo" %>
<%@ page import="weaver.file.ImageFileManager" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.time.format.DateTimeFormatter" %>
<%@ page import="java.time.LocalDate" %>
<%@ page import="weaver.hrm.User" %>
<%@ page import="weaver.hrm.company.DepartmentComInfo" %>
<%@ page import="weaver.general.StringUtil" %>
<%@ page import="org.apache.commons.lang.StringUtils" %>
<%@ page import="weaver.workflow.workflow.WorkflowComInfo" %>
<%@ page import="weaver.workflow.workflow.WorkflowBillComInfo" %>
<%@ page import="org.slf4j.Logger" %>
<%@ page import="org.slf4j.LoggerFactory" %>
<%@ page import="com.engine.custom.archives.service.ReceivingPushArchivesService" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page import="okhttp3.*" %>
<%@ page import="com.engine.common.util.ParamUtil" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%

    Map<String, Object> paramMap = ParamUtil.request2Map(request);
    String requestid = Util.null2String(paramMap.get("requestid"));
    Logger log = LoggerFactory.getLogger("Archives");
    log.info("PushArchivesCorn====Begin========");
    Date date = ArchivesUtil.getDate();
    String dateStr = new SimpleDateFormat("yyyyMMdd").format(date);
    ArrayList<PushArchivesBean> pushArchivesBeans = new ArrayList<>();
    PushArchivesBean pushArchivesBean = new PushArchivesBean();
    pushArchivesBean.setRequest(Util.getIntValue(requestid));
    pushArchivesBeans.add(pushArchivesBean);
    pushArchives(pushArchivesBeans,dateStr);
%>


<%!

    private static String filePath = "/opt/oadata/archivesFile";;
    private static String Url = "http://14.1.213.5:18080/fcscloud/composite/upload" ;
    private static String templatePath = "/opt/weaver/archivesFile/template/"; // 模板文件路径
    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 = "附件";
    private static final String lcfjWord = "流程附件";
    private static final String qzyjfjWord = "签字意见附件";
    private static final String xbbmfjWord = "协办部门附件";
    private static final String wjcldWord = "文件处理单";
    private static final String wjlzxxWord = "文件流转信息";

    public static Logger log = LoggerFactory.getLogger("Archives");

    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(List<PushArchivesBean> result, String dateStr) {

        try {
            filePath = filePath + File.separator + dateStr ;
            ZipUtil zipUtil = new ZipUtil();
            Date date = ArchivesUtil.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));


            RecordSet recordSet = new RecordSet();
            // List<PushArchivesBean> result = ArchivesUtil.getResultList(recordSet, firstSecond, lastSecond, 1);
            log.error("推送收文的数量:{}", result.size());
            File file = ArchivesUtil.crFile(filePath + "/togd_" + new SimpleDateFormat("yyyyMMdd000000").format(date));
            log.error("textfile:{}", file.getAbsolutePath());
            for (PushArchivesBean pushArchivesBean : result) {
                int requestid = pushArchivesBean.getRequest();
                try {
                    log.error("requestid:{}", requestid);
                    //1.生成文件及推送的txt
                    String context = extracted(requestid);
                    log.error("context:{}", context);
                    //1.生成文件及推送的txt
                    ArchivesUtil.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);
                    updateRecord(requestid,"esbtxtml",s);
                    updateRecord(requestid,"zt","0");
                    log.error("textZip:{}", s);
                }catch (Exception e){
                    e.printStackTrace();
                    log.error("推送档案requestid:{}异常,异常原因为:{}",requestid,e.getMessage());
                }
            }
        } catch (Exception e) {
            log.info("PushArchivesCorn====Exception========{}", e.getMessage());
            e.printStackTrace();
        }

    }

    private void updateRecord(int 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(int requestid) throws FtpException, IOException {
        String newRequestid = "togd"+requestid;
        RequestService requestService = new RequestService();
        RequestInfo requestInfo = requestService.getRequest(Util.getIntValue(requestid), 100);
        String workflowid = requestInfo.getWorkflowid();
        Map<String, String> requesData = getRequestByid(requestid);
        log.info("requesData:{}", requesData);
        String fj = Util.null2String(requesData.get("fj"));
        String zwkbj = Util.null2String(requesData.get("zwkbj"));
        String lczw = Util.null2String(requesData.get("lczw"));
        String gwly = Util.null2String(requesData.get("gwly"));
        //增加签字意见中的附件到附件文件夹中
        Map<String, String> signFiles = ArchivesUtil.getSignFiles(requestid,true);
        List<String> docids = new ArrayList<>();
        // docids.addAll(Arrays.asList(fj.split(",")));
        // docids.addAll(Arrays.asList(zwkbj.split(",")));
        Map<String, String> fjMap = ArchivesUtil.getFileIdByDocId(fj);

        // Map<String, String> zwkbjMap = ArchivesUtil.getFileIdByDocId(zwkbj);
        // Map<String, String> lczwMap = ArchivesUtil.getFileIdByDocId(lczw);
        Map<String, String> lczwMap = new HashMap<>();
        //判断公文来源
        if ("0".equals(gwly)){
            lczwMap = ArchivesUtil.getFileIdByDocId(lczw);
        }else {
            lczwMap = ArchivesUtil.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 + newRequestid + File.separator + fjdir + File.separator + lcfjWord+ i[0] +"-" + imageFileManager.getImageFileName();
            fjFileName.add(lcfjWord+ i[0] +"-" + imageFileManager.getImageFileName());
            log.info("生成附件路径:{}", imageFileName);
            imageFileName = ArchivesUtil.codeUtf8(imageFileName);
            try {
                File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
                String jsonStr = ArchivesUtil.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");
                    ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + fjdir + File.separator + lcfjWord+ i[0] + "-" + imageFileManager.getImageFileName() + ".pdf");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(inputStream!=null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            i[0]++;
        });
        i[0] = 1;
        //签字意见附件
        signFiles.forEach((docid, imageid) -> {
            ImageFileManager imageFileManager = new ImageFileManager();
            imageFileManager.getImageFileInfoById(Util.getIntValue(imageid));
            InputStream inputStream = imageFileManager.getInputStream();
            //中文路径/中文文件名
            String imageFileName = filePath + File.separator + newRequestid + File.separator + fjdir + File.separator + qzyjfjWord + i[0] +  "-" +imageFileManager.getImageFileName();
            fjFileName.add(qzyjfjWord + i[0] +  "-" +imageFileManager.getImageFileName());
            log.info("生成签字意见附件路径:{}", imageFileName);
            imageFileName = ArchivesUtil.codeUtf8(imageFileName);
            try {
                File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
                String jsonStr = ArchivesUtil.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");
                    ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + fjdir + File.separator + qzyjfjWord + i[0] +  "-" + imageFileManager.getImageFileName() + ".pdf");
                }
                i[0]++;
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(inputStream!=null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        });

        i[0] = 1;
        Map<String, String> coReqFile = getCoReqFile(requestid, workflowid);
        //协办要求
        coReqFile.forEach((docid, imageid) -> {
            ImageFileManager imageFileManager = new ImageFileManager();
            imageFileManager.getImageFileInfoById(Util.getIntValue(imageid));
            InputStream inputStream = imageFileManager.getInputStream();
            zwFileName.add(xbbmfjWord+ i[0] +"-"+ imageFileManager.getImageFileName());
            //中文路径/中文文件名
            String imageFileName = filePath + File.separator + newRequestid + File.separator + fjdir + File.separator +xbbmfjWord+ i[0] +"-"+ imageFileManager.getImageFileName();
            log.info("生成协办部门路径:{}", imageFileName);
            imageFileName = ArchivesUtil.codeUtf8(imageFileName);
            try {
                File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
                String jsonStr = ArchivesUtil.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");
                    ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + fjdir + File.separator+xbbmfjWord+ i[0] +"-" + imageFileManager.getImageFileName() + ".pdf");
                }
                i[0]++;
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(inputStream!=null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        // i[0] = 1;
        // //正文
        // 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 + newRequestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName();
        //     log.info("生成正文路径:{}", imageFileName);
        //     imageFileName = ArchivesUtil.codeUtf8(imageFileName);
        //     try {
        //         File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
        //         String jsonStr = ArchivesUtil.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");
        //             ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName() + ".pdf");
        //         }
        //
        //     } catch (IOException e) {
        //         e.printStackTrace();
        //     }finally {
        //         if(inputStream!=null) {
        //             try {
        //                 inputStream.close();
        //             } catch (IOException e) {
        //                 e.printStackTrace();
        //             }
        //         }
        //     }
        // });

        i[0] = 1;
        //正文
        lczwMap.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 + newRequestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName();
            log.info("生成正文路径:{}", imageFileName);
            imageFileName = ArchivesUtil.codeUtf8(imageFileName);
            try {
                File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
                String jsonStr = ArchivesUtil.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");
                    ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + zwdir + File.separator + imageFileManager.getImageFileName() + ".pdf");
                }

            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(inputStream!=null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        //开始承办单   先获取主流程的承办单
        List<String> requestDocid = ArchivesUtil.generaRequestFormPdf(requestid,1);
        // 1.去掉生成子流程承办单
        // List<String> subRequestDocid = generaSubRequestFormPdf(requestid);
        Map<String, String> reqDocMap = ArchivesUtil.getFileIdByDocId(String.join(",", requestDocid));
        // 2.去掉生成子流程承办单
        // Map<String, String> 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();
            String imageFileName = filePath + File.separator + newRequestid + File.separator + cbddir + File.separator +  wjcldWord+".pdf";

            log.info("主流程承办单路径:{}", imageFileName);
            imageFileName = ArchivesUtil.codeUtf8(imageFileName);
            try {
                File file = ArchivesUtil.saveInputStreamToFile(inputStream, imageFileName);
                String jsonStr = ArchivesUtil.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");
                    ArchivesUtil.downloadFile(viewUrl, filePath + File.separator + newRequestid + File.separator + cbddir + File.separator +  wjcldWord + ".pdf" + ".pdf");
                }
                i[0]++;
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(inputStream!=null) {
                    try {
                        inputStream.close();
                    } 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);
            ArchivesUtil.deleteDocByid(docid);
        }
        //--------------------------------------------------------------------


        String logFile = ArchivesUtil.getSignLog(requestid, cbddir+File.separator+lzxxdir, requestInfo.getCreatorid() + requestInfo.getDescription(),templatePath,filePath,true,workflowid);
        String s = ArchivesUtil.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");
            ArchivesUtil.downloadFile(viewUrl, logFile + ".pdf");
        }
        String zipName = filePath + File.separator + newRequestid + ".zip";
        ZipUtil.zip(filePath + File.separator + newRequestid, zipName);
        log.error("zipName:{}", zipName);
        String ftpFilePath = HgUtils.putFile(zipName, newRequestid + ".zip");
        updateRecord(requestid,"esbwjml",ftpFilePath);
        log.error("ftpFilePath:{}", ftpFilePath);
        // String ftpFilePathNew = HgUtils.putFile(zipName, "test" + File.separator + newRequestid + ".zip");
        // log.error("ftpFilePathNew:{}", ftpFilePathNew);
        String context = getContext(requestid, requesData, newRequestid + ".zip", zwFileName, fjFileName);
        // insertRecord(requestid, context, ftpFilePath);
        log.error("context:{}", context);
        updateRecord(requestid,"content",context);
        return context;
    }



    private void insertRecord(int 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
     * @return
     */
    public Map<String, String> getRequestByid(int 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")));
            record.put("lczw", Util.null2String(rs.getString("lczw")));
            record.put("gwly", Util.null2String(rs.getString("gwly")));
            record.put("lwdwsx", Util.null2String(rs.getString("lwdwsx")));
        }
        rs.executeQuery(reqsql, requestid);
        if (rs.next()) {
            record.put("REQUESTNAME", Util.null2String(rs.getString("REQUESTNAME")));
        }
        return record;
    }


    private String getContext(int 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"));
            String swh = Util.null2String(requesData.get("lwh"));
            context.append(swh).append("|");
            String requestname = Util.null2String(requesData.get("REQUESTNAME"));
            context.append(requestname).append("|");
            String lwdwmc = Util.null2String(requesData.get("lwdwsx")); //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 = ArchivesUtil.getDeptNameAndCode(ngbm);
            String[] subData = ArchivesUtil.getSubCom(ngbm);
            context.append("D10001").append("|"); //10 行编号 -> 拟稿部门

            context.append("总行机关").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 收文号 -> 来文文号
            String lwh = Util.null2String(requesData.get("swh"));// 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(ArchivesUtil.getAssociatedPersons(requestid,true)).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("togd"+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(",")));
        ArrayList<String> deptName = new ArrayList<>();
        DepartmentComInfo departmentComInfo = new DepartmentComInfo();
        for (String record : records) {
            try {
                if (StringUtil.isEmpty(record)){
                    continue;
                }
                String departmentName = departmentComInfo.getDepartmentName(record);
                deptName.add(departmentName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return String.join("&&", deptName);
    }

    private Map<String, String> getCoReqFile(int requestid , String workflowid){
        RecordSet rs = new RecordSet();
        rs.executeQuery("select * from uf_ArchivesSet where mainwfid = ?",workflowid);
        boolean isCo = false;
        String cowfid = "";
        String cofield = "";
        String cofieldid = "";
        if (rs.next()){
            cowfid = Util.null2String(rs.getString("cowfid"));
            if (!StringUtils.isBlank(cowfid)){
                isCo = true;
                cofield = Util.null2String(rs.getString("cofield"));
                cofieldid = Util.null2String(rs.getString("cofieldid"));
            }
        }
        log.info("isCo:{};cowfid:{};cofield:{};cofieldid:{}",isCo,cowfid,cofield,cofieldid);


        if(isCo){
            ArrayList<String> CoSubRequest = new ArrayList<>();
            Map<String, String> subRequest = ArchivesUtil.getSubRequest(Util.null2String(requestid) , 6);
            log.info("subRequest:{}",subRequest);
            for (Map.Entry<String, String> subRequestEntry : subRequest.entrySet()) {
                String subWFid = subRequestEntry.getValue();
                if (cowfid.equals(subWFid)){
                    CoSubRequest.add(subRequestEntry.getKey());
                }
            }
            log.info("CoSubRequest.size:{}",CoSubRequest.size());
            WorkflowComInfo wf = new WorkflowComInfo();
            WorkflowBillComInfo wcInfo = new WorkflowBillComInfo();
            String formId = wf.getFormId(cowfid);
            String tablename = wcInfo.getTablename(formId);
            String cosql = "select "+cofield+" from " + tablename + " where " +
                    " requestid in ( " + String.join(",",CoSubRequest) + " ) " +
                    " order by requestid asc ";
            log.info("cosql:{}",cosql);

            rs.executeQuery(cosql);
            log.info("rs.getExceptionMsg():{}",rs.getExceptionMsg());
            String fieldValue = "";
            String[] cofieldsplit = cofield.split(",");
            String coFile = cofieldsplit[2]; //协办部门
            ArrayList<String> docids = new ArrayList<>();
            while (rs.next()){
                String coFileValue = rs.getString(coFile);
                docids.addAll(Arrays.asList(coFileValue.split(",")));
            }
            log.info("fieldValue:{}",fieldValue);
            return ArchivesUtil.getFileIdByDocId(String.join(",",docids));
        }
        return new HashMap<>();
    }

    private void updateRecord(int requestid, String field , String fieldvalue) {
        String sql = "update uf_pushArchivesLog set "+field+" = ? where request = ?";
        RecordSet recordSet = new RecordSet();
        recordSet.executeUpdate(sql, fieldvalue, requestid);
    }
%>

