package com.engine.custom.sl.action; import com.dcfs.fts.common.error.FtpException; import com.engine.custom.hg.util.HgUtils; import com.engine.custom.sl.entity.*; import com.engine.util.SocketClientUtil; import com.engine.util.XMLUtils; import com.weaver.general.Util; import weaver.conn.RecordSet; import weaver.file.ImageFileManager; import weaver.general.BaseBean; import weaver.hrm.User; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.RequestInfo; import java.io.*; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.*; /** * 推送商旅节点后附加操作(推送商旅节点后附加操作 */ public class OAtoCWAction extends BaseBean implements Action { /** * After selecting aciton after the process path node, this method will be executed after the node is submitted. */ @Override public String execute(RequestInfo request) { // if(error) { // request.getRequestManager().setMessageid("90001"); // request.getRequestManager().setMessagecontent("System Abnormal Termination Process Submission!"); // } String requestId = request.getRequestid(); String tablename = request.getRequestManager().getBillTableName(); TravelToEsbBean toEsbBean = new TravelToEsbBean(); //封装主表数据 RecordSet rs = new RecordSet(); String mainId = setMainForm(requestId, tablename, rs, toEsbBean); writeLog("toEsbBean1====>"+toEsbBean); writeLog("上传附件到ESB服务器====>"); try { fileToEsb(toEsbBean,requestId); } catch (Exception e) { request.getRequestManager().setMessageid("10001"); request.getRequestManager().setMessagecontent(e.getMessage()); return Action.FAILURE_AND_CONTINUE; } setFormDt1(mainId,tablename,rs,toEsbBean); writeLog("toEsbBean2====>"+toEsbBean); setFormDt2(mainId,tablename,rs,toEsbBean); writeLog("toEsbBean3====>"+toEsbBean); String Service_Body = ""+ toEsbBean.toXMLString()+"" ; writeLog("toEsbBean4====>"+Service_Body); try{ EsbRequestHeader esbRequestHeader = new EsbRequestHeader(Util.getIntValue(mainId)); writeLog("esbRequestHeader====>"+esbRequestHeader); String Service_Header = TravelToEsbBean.convertObjectToXml(esbRequestHeader,"Service_Header"); writeLog("esbRequestHeaderXML====>"+Service_Header); String serviceXML = ""; serviceXML = serviceXML + Service_Header + Service_Body; serviceXML = serviceXML + ""; String length = String.format("%08d", serviceXML.length()); writeLog("XMLlength"+ length); serviceXML = length + serviceXML; writeLog("serviceXML==="+ serviceXML); serviceXML = new String(serviceXML.getBytes(StandardCharsets.UTF_8)); writeLog("UTF_8_serviceXML==="+ serviceXML); SocketClientUtil scketClient = new SocketClientUtil("14.1.76.116",10149); String send = scketClient.send(serviceXML); }catch (Exception e){ e.printStackTrace(); writeLog("构建XML异常"+e.getMessage()); request.getRequestManager().setMessageid("10001"); request.getRequestManager().setMessagecontent(e.getMessage()); return Action.FAILURE_AND_CONTINUE; } // setFormDt1(); return Action.SUCCESS; } private void fileToEsb(TravelToEsbBean toEsbBean, String requestId) throws Exception { // HashMap filePathMap = new HashMap<>(); List acsryArray = toEsbBean.getAcsryArray(); for (acsryItem acsryItem : acsryArray) { String acsryNm = acsryItem.getAcsryNm(); writeLog("acsryNm"+acsryNm); ImageFileManager ifm = new ImageFileManager(); ifm.getImageFileInfoById(Util.getIntValue(acsryNm,0)); InputStream inputStream = ifm.getInputStream(); String imageFileName = ifm.getImageFileName(); writeLog("imageFileName"+imageFileName); String[] filename = imageFileName.split("\\."); String tempFilePath = ""; try { File tempFile = File.createTempFile(filename[0],filename.length ==2 ?filename[1]:""); // 创建一个输出流,将数据写入临时文件 OutputStream outputStream = new FileOutputStream(tempFile); // 将输入流中的数据复制到输出流(即临时文件) byte[] buffer = new byte[2048]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } tempFilePath = tempFile.getAbsolutePath(); writeLog( "临时文件位置"+tempFilePath); // 关闭输入流和输出流 inputStream.close(); outputStream.close(); }catch (Exception e){ e.printStackTrace(); writeLog( "创建本地文件异常"+e.getMessage()); throw new Exception("创建本地文件异常"); } //推送ESB服务器 String ftpPath = ""; try { ftpPath = HgUtils.putFile(tempFilePath, requestId + File.separator + imageFileName); } catch (FtpException e) { e.printStackTrace(); writeLog( "传输ESBftp异常"+e.getMessage()); throw new Exception("传输ESBftp异常"); } catch (IOException e) { e.printStackTrace(); writeLog( "传输ESBIO异常"+e.getMessage()); throw new Exception("传输ESBftp异常"); } acsryItem.setAcsryNm(imageFileName); acsryItem.setSavePath(ftpPath); } } private String setMainForm(String requestId, String tablename, RecordSet rs ,TravelToEsbBean toEsbBean) { rs.execute("select * from " + tablename + " where requestid = " + requestId); String mainid = ""; String fj = ""; //表单数据 if (rs.next()) { mainid = rs.getString("id"); //OA差旅报销单单据编号 toEsbBean.setOaTrvlBnsExpnsAcctNo(rs.getString(Util.null2String("djbh"))); //经办人工号 toEsbBean.setOperatorNo(Util.null2String(rs.getString("jbrgh"))); //经办人姓名 id toEsbBean.setOperatorName(Util.null2String(rs.getString("jbrxm"))); String lastname = new User(Util.getIntValue(toEsbBean.getOperatorName())).getLastname(); toEsbBean.setOperatorName(lastname); //附件张数 toEsbBean.setAcsryNums(Util.null2String(rs.getString("fjzs"))); //报销金额 toEsbBean.setExpnsAmt(Util.null2String(rs.getString("bxjedwf"))); //报销事由 toEsbBean.setExpnsRsn(Util.null2String(rs.getString("bxsy"))); //备注 toEsbBean.setRemark(Util.null2String(rs.getString("bz"))); fj = Util.null2String(rs.getString("fj")); // String formData = rs.getString("formData"); } // 封装文件数组 //现在是id List fjids = Arrays.asList(fj.split(",")); ArrayList acsryArray = new ArrayList<>(); for (String fjid : fjids) { acsryItem acsryItem = new acsryItem(); acsryItem.setAcsryNm(getimgid(fjid,rs)); acsryArray.add(acsryItem); } toEsbBean.setAcsryArray(acsryArray); return mainid; } private void setFormDt1(String mainid, String tablename, RecordSet rs , TravelToEsbBean toEsbBean) { rs.execute("select * from " + tablename + "_dt1 where mainid = " + mainid); List expenseArray = new ArrayList<>(); while (rs.next()) { ExpenseItem expenseItem = new ExpenseItem(); // 支出类型 expenseItem.setExpndType(getpartyBuildCostCode(Util.getIntValue(rs.getString("zclx"),0))); //不含税金额 expenseItem.setExclsvTaxAmt(Util.null2String(rs.getString("bhsjedwf"))); // //不含税金额 expenseItem.setTaxAmt(Util.null2String(rs.getString("sedwf"))); //价税合计金额 expenseItem.setPrcTotAmt(Util.null2String(rs.getString("jshjjedwf"))); //记账摘要 expenseItem.setAcctingAbstct(""); expenseArray.add(expenseItem); } toEsbBean.setExpndArray(expenseArray); } private void setFormDt2(String mainid, String tablename, RecordSet rs , TravelToEsbBean toEsbBean) { rs.execute("select * from " + tablename + "_dt2 where mainid = " + mainid); List jrnyInfoArray = new ArrayList<>(); while (rs.next()) { JourneyInfo journeyInfo = new JourneyInfo(); // 开始日期 journeyInfo.setStartDate(Util.null2String(rs.getString("ksrq"))); // 结束日期 journeyInfo.setEndDate(Util.null2String(rs.getString("jsrq"))); // 出差天数 journeyInfo.setBsnTrpDays(Util.null2String(rs.getString("ccts"))); //行程路线 journeyInfo.setJrnyPath(Util.null2String(rs.getString("hclx"))); //行程说明 journeyInfo.setJrnyExpln(Util.null2String(rs.getString("hcsm"))); //记账摘要 journeyInfo.setRemark(Util.null2String(rs.getString("bz"))); jrnyInfoArray.add(journeyInfo); } toEsbBean.setJrnyInfoArray(jrnyInfoArray); } //获取支出类型 private String getpartyBuildCostCode(int index){ if(index == 0){ return "FEE_BUILD"; }else if(index == 1){ return "BIZ_FEE"; }else if(index == 2){ return "PARTY_BUILD_EXPENSE"; } return ""; } public String getimgid(String docid, RecordSet rs){ String sql = "select docid,df.imagefileid imgid from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID = ?"; writeLog("getimgidsql"+sql+"===="+docid); rs.executeQuery(sql,docid); if (rs.next()){ writeLog("imgid"+Util.null2String(rs.getString("imgid"))); return Util.null2String(rs.getString("imgid")); } return ""; }; //生成流水号 public static String generateTimestamp() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); Date currentDate = new Date(); return dateFormat.format(currentDate); } public static void main(String[] args) { //String s = "2023092013233200000301700258cwgl00001012023092013233250012001013025820230920132332000003012312310110537测试_1011053711,234.001234的覅第v的v你你BIZ_FEE11.000.0011.002023-09-202023-09-201111111111滴滴出行行程报销单 (1).pdf/025801/YDBG/20230920/501502/滴滴出行行程报销单 (1).pdf"; // String s = "2023092014250800000701700258cwgl00001012023092014250850012001013025820230920142508000007010110537测试_101105372180.00测试ESb补贴报销单报销事由测试ESb补贴报销单备注BIZ_FEE180.000.00180.002023-09-202023-09-201行程路线-天津北京行程说明-天津北京备注-天津北京公文功能相关接口.pdf/025801/YDBG/20230920/502519/公文功能相关接口.pdf滴滴电子发票.pdf/025801/YDBG/20230920/502519/滴滴电子发票.pdf"; String s = "0000066700000000000402580170951101017020230920195236true500120043010170202309200000000000040BTSQD-202309200007111111测试审批人0驳回测试2"; // byte[] bytes = s.getBytes(StandardCharsets.US_ASCII); // String s1 = new String(bytes); try { // Map paramMap = XMLUtils.parseXMLToMap(s1); // System.out.println(paramMap); System.out.println(s.getBytes(StandardCharsets.UTF_8).length); } catch (Exception e) { e.printStackTrace(); } } }