diff --git a/com/engine/custom/sl/entity/EsbRequestHeader.java b/com/engine/custom/sl/entity/EsbRequestHeader.java new file mode 100644 index 0000000..51afa37 --- /dev/null +++ b/com/engine/custom/sl/entity/EsbRequestHeader.java @@ -0,0 +1,171 @@ +package com.engine.custom.sl.entity; + +import com.icbc.api.internal.apache.http.impl.cookie.S; +import weaver.general.BaseBean; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class EsbRequestHeader { + private String service_sn; + private String system_id; + private String requester_id; + private String branch_id; + private String channel_id; + private String service_time; + private String need_request; + private String SvcCd; + private String SvcScn; + private String BnkSrlNo; + private String FileFlg; + private String FilePath; + + public EsbRequestHeader() { + + } + + + public EsbRequestHeader(int id) { + BaseBean baseBean = new BaseBean(); + String idStr = String.format("%06d", id); + String timestamp = generateTimestamp(); + service_sn = timestamp+idStr; + system_id = baseBean.getPropValue("ESB_Header","system_id"); + requester_id = baseBean.getPropValue("ESB_Header","requester_id"); + branch_id = baseBean.getPropValue("ESB_Header","branch_id"); + channel_id = baseBean.getPropValue("ESB_Header","channel_id"); + service_time = timestamp; + need_request = ""; + SvcCd = baseBean.getPropValue("ESB_Header","500120010");; + SvcScn = baseBean.getPropValue("ESB_Header","13");; + BnkSrlNo = requester_id + timestamp + idStr ; + FileFlg ="0"; + } + + public String getService_sn() { + return service_sn; + } + + public void setService_sn(String service_sn) { + this.service_sn = service_sn; + } + + public String getSystem_id() { + return system_id; + } + + public void setSystem_id(String system_id) { + this.system_id = system_id; + } + + public String getRequester_id() { + return requester_id; + } + + public void setRequester_id(String requester_id) { + this.requester_id = requester_id; + } + + public String getBranch_id() { + return branch_id; + } + + public void setBranch_id(String branch_id) { + this.branch_id = branch_id; + } + + public String getChannel_id() { + return channel_id; + } + + public void setChannel_id(String channel_id) { + this.channel_id = channel_id; + } + + public String getService_time() { + return service_time; + } + + public void setService_time(String service_time) { + this.service_time = service_time; + } + + public String getNeed_request() { + return need_request; + } + + public void setNeed_request(String need_request) { + this.need_request = need_request; + } + + public String getSvcCd() { + return SvcCd; + } + + public void setSvcCd(String svcCd) { + SvcCd = svcCd; + } + + public String getSvcScn() { + return SvcScn; + } + + public void setSvcScn(String svcScn) { + SvcScn = svcScn; + } + + public String getBnkSrlNo() { + return BnkSrlNo; + } + + public void setBnkSrlNo(String bnkSrlNo) { + BnkSrlNo = bnkSrlNo; + } + + public String getFileFlg() { + return FileFlg; + } + + public void setFileFlg(String fileFlg) { + FileFlg = fileFlg; + } + + public String getFilePath() { + return FilePath; + } + + public void setFilePath(String filePath) { + FilePath = filePath; + } + public static String generateTimestamp() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + Date currentDate = new Date(); + return dateFormat.format(currentDate); + } + // public static String getCurrentTime() { + // SimpleDateFormat dateFormat = new SimpleDateFormat("YYYYMMDDHHmmss"); + // Date currentDate = new Date(); + // return dateFormat.format(currentDate); + // } + + + @Override + public String toString() { + return "EsbRequestHeader{" + + "service_sn='" + service_sn + '\'' + + ", system_id='" + system_id + '\'' + + ", requester_id='" + requester_id + '\'' + + ", branch_id='" + branch_id + '\'' + + ", channel_id='" + channel_id + '\'' + + ", service_time='" + service_time + '\'' + + ", need_request='" + need_request + '\'' + + ", SvcCd='" + SvcCd + '\'' + + ", SvcScn='" + SvcScn + '\'' + + ", BnkSrlNo='" + BnkSrlNo + '\'' + + ", FileFlg='" + FileFlg + '\'' + + ", FilePath='" + FilePath + '\'' + + '}'; + } + + +} diff --git a/com/engine/custom/sl/entity/JourneyInfo.java b/com/engine/custom/sl/entity/JourneyInfo.java index e2a4d62..8a0e073 100644 --- a/com/engine/custom/sl/entity/JourneyInfo.java +++ b/com/engine/custom/sl/entity/JourneyInfo.java @@ -16,16 +16,14 @@ public class JourneyInfo { private String bsnTrpDays; private String jrnyPath; private String jrnyExpln; + private String remark; + public String getRemark() { + return remark; + } - public String toXMLString() { - return "" + - "" + startDate + ""+ - "" + endDate + - "" + bsnTrpDays + - "" + jrnyPath + - "" + jrnyExpln + - "" ; + public void setRemark(String remark) { + this.remark = remark; } @Override @@ -36,6 +34,7 @@ public class JourneyInfo { ", bsnTrpDays='" + bsnTrpDays + '\'' + ", jrnyPath='" + jrnyPath + '\'' + ", jrnyExpln='" + jrnyExpln + '\'' + + ", remark='" + remark + '\'' + '}'; } @@ -81,46 +80,9 @@ public class JourneyInfo { - public static String convertObjectToXml(Object object) { - StringBuilder xmlBuilder = new StringBuilder("<" + object.getClass().getSimpleName() + ">"); - Field[] fields = object.getClass().getDeclaredFields(); - Map attributes = new LinkedHashMap<>(); - - try { - for (Field field : fields) { - field.setAccessible(true); - Object value = field.get(object); - if (value != null) { - String fieldName = field.getName(); - xmlBuilder.append("<").append(fieldName).append(">") - .append(value) - .append(""); - } - } - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - xmlBuilder.append(""); - return xmlBuilder.toString(); - } - - public static void main(String[] args) { - TravelToEsbBean textDocFileService = new TravelToEsbBean(); - textDocFileService.setAcsryNums("1"); - textDocFileService.setExpnsAmt("2"); - textDocFileService.setExpnsRsn("3"); - textDocFileService.setRemark("5"); - textDocFileService.setOperatorName("fjkgnvbhui"); - // 调用工具类将对象转换为 XML 字符串 - String xmlString = null; - xmlString = convertObjectToXml(textDocFileService); - - // 打印生成的 XML 字符串 - System.out.println(xmlString); - } } diff --git a/com/engine/custom/sl/entity/TravelToEsbBean.java b/com/engine/custom/sl/entity/TravelToEsbBean.java index 9cadf20..afc98ba 100644 --- a/com/engine/custom/sl/entity/TravelToEsbBean.java +++ b/com/engine/custom/sl/entity/TravelToEsbBean.java @@ -1,6 +1,13 @@ package com.engine.custom.sl.entity; +import weaver.general.StringUtil; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; public class TravelToEsbBean { private String oaTrvlBnsExpnsAcctNo; @@ -15,18 +22,26 @@ public class TravelToEsbBean { private List acsryArray; public String toXMLString() { - return - "" + oaTrvlBnsExpnsAcctNo +"" + - "" + operatorNo + "" + - "" + operatorName + "" + - "" + acsryNums + "" + - "" + expnsAmt + "" + - "" + expnsRsn +"" + - "" + remark + "" + - ", expndArray=" + expndArray + - ", jrnyInfoArray=" + jrnyInfoArray + - ", acsryArray=" + acsryArray; + StringBuilder xmlString = new StringBuilder( + "" + oaTrvlBnsExpnsAcctNo +"" + + "" + operatorNo + "" + + "" + operatorName + "" + + "" + acsryNums + "" + + "" + expnsAmt + "" + + "" + expnsRsn +"" + + "" + remark + "") ; + + for (ExpenseItem expenseItem : expndArray) { + xmlString.append(convertObjectToXml(expenseItem,"expndArray")); + } + for (JourneyInfo journeyInfo : jrnyInfoArray) { + xmlString.append(convertObjectToXml(journeyInfo,"jrnyInfoArray")); + } + for (acsryItem acsryItem : acsryArray) { + xmlString.append(convertObjectToXml(acsryItem,"acsryArray")); + } + return xmlString.toString(); } @@ -131,4 +146,34 @@ public class TravelToEsbBean { public void setJrnyInfoArray(List jrnyInfoArray) { this.jrnyInfoArray = jrnyInfoArray; } + + public static String convertObjectToXml(Object object , String RootName) { + ; + + StringBuilder xmlBuilder = new StringBuilder("<" + (StringUtil.isEmpty(RootName)?object.getClass().getSimpleName():RootName )+ ">"); + Field[] fields = object.getClass().getDeclaredFields(); + Map attributes = new LinkedHashMap<>(); + + try { + for (Field field : fields) { + field.setAccessible(true); + Object value = field.get(object); + if (value != null) { + String fieldName = field.getName(); + xmlBuilder.append("<").append(fieldName).append(">") + .append(value) + .append(""); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + xmlBuilder.append(""); + return xmlBuilder.toString(); + } + + public static void main(String[] args) throws IOException { + File tempFile = File.createTempFile("tempfile", ".tmp"); + System.out.println("临时文件路径: " + tempFile.getAbsolutePath()); + } } diff --git a/weaver/interfaces/workflow/action/javacode/Action20230911062023.java b/weaver/interfaces/workflow/action/javacode/Action20230911062023.java index fdf4fc1..da1a9ac 100644 --- a/weaver/interfaces/workflow/action/javacode/Action20230911062023.java +++ b/weaver/interfaces/workflow/action/javacode/Action20230911062023.java @@ -1,17 +1,18 @@ package weaver.interfaces.workflow.action.javacode; -import com.engine.custom.sl.entity.ExpenseItem; -import com.engine.custom.sl.entity.TravelToEsbBean; +import com.dcfs.fts.common.error.FtpException; +import com.engine.custom.hg.util.HgUtils; +import com.engine.custom.sl.entity.*; import com.weaver.general.Util; import weaver.conn.RecordSet; -import weaver.hrm.HrmUserVarify; -import weaver.hrm.User; +import weaver.file.ImageFileManager; import weaver.interfaces.workflow.action.Action; import weaver.general.BaseBean; import weaver.soa.workflow.request.RequestInfo; -import java.util.ArrayList; -import java.util.List; +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; /** * 推送商旅节点后附加操作(推送商旅节点后附加操作 @@ -32,52 +33,212 @@ public class Action20230911062023 extends BaseBean implements Action { //封装主表数据 RecordSet rs = new RecordSet(); String mainId = setMainForm(requestId, tablename, rs, toEsbBean); - setFormDt1(); + 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); + }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 main = ""; + String mainid = ""; + String fj = ""; + //表单数据 if (rs.next()) { - String mainid = rs.getString("id"); + mainid = rs.getString("id"); //OA差旅报销单单据编号 - toEsbBean.setOaTrvlBnsExpnsAcctNo(Util.null2String("djbh")); + toEsbBean.setOaTrvlBnsExpnsAcctNo(rs.getString(Util.null2String("djbh"))); //经办人工号 - toEsbBean.setOperatorNo(Util.null2String("jbrgh")); + toEsbBean.setOperatorNo(Util.null2String(rs.getString("jbrgh"))); //经办人姓名 id - toEsbBean.setOperatorName(Util.null2String("jbrxm")); + toEsbBean.setOperatorName(Util.null2String(rs.getString("jbrxm"))); //附件张数 - toEsbBean.setAcsryNums(Util.null2String("fjzs")); + toEsbBean.setAcsryNums(Util.null2String(rs.getString("fjzs"))); //报销金额 - toEsbBean.setExpnsAmt(Util.null2String("bxjedwf")); + toEsbBean.setExpnsAmt(Util.null2String(rs.getString("bxjedwf"))); //报销事由 - toEsbBean.setExpnsRsn(Util.null2String("bxsy")); + toEsbBean.setExpnsRsn(Util.null2String(rs.getString("bxsy"))); //备注 - toEsbBean.setRemark(Util.null2String("bz")); - + toEsbBean.setRemark(Util.null2String(rs.getString("bz"))); + fj = Util.null2String(rs.getString("fj")); // String formData = rs.getString("formData"); } - return main; + // 封装文件数组 + //现在是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) { + 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(Util.null2String("djbh")); + expenseItem.setExpndType(getpartyBuildCostCode(Util.getIntValue(rs.getString("zclx"),0))); //不含税金额 - expenseItem.setExclsvTaxAmt(); - //不含税金额 - expenseItem.setAcctingAbstct(); - expenseItem.setAcctingAbstct(); - expenseItem.setAcctingAbstct(); + 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) { + } + }