From c4a3d5aed9a9ac778a87a286007e29b962c7b92b Mon Sep 17 00:00:00 2001 From: xiezhiwen Date: Fri, 4 Jan 2019 17:57:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=AD=E8=AF=81=E7=9B=B8=E5=85=B3--NC?= =?UTF-8?q?=E4=BC=A0=E8=BE=93xml=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VoucherToNCforAssistContract.java | 282 +++++++++ .../serviceImp/VoucherToNCforCustomer.java | 337 +++++++++++ .../serviceImp/VoucherToNCforDistributor.java | 425 +++++++++++++ .../serviceImp/VoucherToNCforVoucherPZ.java | 560 ++++++++++++++++++ 4 files changed, 1604 insertions(+) create mode 100644 src_core/com/tenwa/voucher/serviceImp/VoucherToNCforAssistContract.java create mode 100644 src_core/com/tenwa/voucher/serviceImp/VoucherToNCforCustomer.java create mode 100644 src_core/com/tenwa/voucher/serviceImp/VoucherToNCforDistributor.java create mode 100644 src_core/com/tenwa/voucher/serviceImp/VoucherToNCforVoucherPZ.java diff --git a/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforAssistContract.java b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforAssistContract.java new file mode 100644 index 000000000..81e67cf36 --- /dev/null +++ b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforAssistContract.java @@ -0,0 +1,282 @@ +package com.tenwa.voucher.serviceImp; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; + +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.DocumentSource; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import com.amarsoft.are.ARE; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.amarsoft.are.log.Log; +import com.amarsoft.awe.util.Transaction; +import com.base.util.QuartzUtil; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.comm.util.jboutil.DataOperatorUtil; +import com.tenwa.util.SerialNumberUtil; + +public class VoucherToNCforAssistContract implements Job{ + private static Log logger=ARE.getLog(); + // 客商信息传输 + public void execute(JobExecutionContext arg0) throws JobExecutionException { + String plan_date = DateAssistant.getToday(); + Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); + String curUserId = userId == null? "system" : userId.toString(); + JBOTransaction tx=null; + Transaction Sqlca = null; + try { + tx= JBOFactory.createJBOTransaction(); + Sqlca = Transaction.createTransaction(tx); + File file=null; // 文件对象 + XMLWriter writer=null; // 输出对象 + String uuid=""; // xml传输id + String insertSql=""; // 插入sql对象 + String contract_number=""; // 合同编码对象 + String contract_name=""; // 合同名称对象 + String type="contract"; // xml类别 + String ID=""; // xml类别 + + // 获取特定的日期 + String year_month_day = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());// 年月日时分秒 + String year_month_days = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());// 年月日时分秒 + + // 获取未传输及之前传输失败的数据 + String sql="SELECT CONTRACT_NUMBER,PRODUCT_NAME,ID FROM LB_CONTRACT_INFO WHERE CONTRACT_NUMBER NOT IN(SELECT TABLE_NUM FROM NCXML_DETAIL_RECORDS WHERE FLAG = '1' AND XML_TYPE='"+type+"')"; + List> rs = DataOperatorUtil.getDataBySql(Sqlca,sql,null); + if(rs!=null && rs.size()>0) { + // 生成xml头 + Document document = DocumentHelper.createDocument(); // 生成每个xml的头 + Element root = document.addElement("ufinterface"); + root.addAttribute("account","8"); + root.addAttribute("billtype","defdoc(自定义档案)"); + root.addAttribute("businessunitcode",""); + root.addAttribute("filename",""); + root.addAttribute("groupcode","06"); + root.addAttribute("isexchange","Y"); + root.addAttribute("orgcode",""); + root.addAttribute("receiver","接收方业务单元编码"); + root.addAttribute("replace","Y"); + root.addAttribute("roottag",""); + root.addAttribute("sender","001"); + // 获取批次号 + String batch = SerialNumberUtil.getVoucherPCNumber(Sqlca); + // 遍历结果集 + for (Map map : rs) { + contract_number=(map.get("CONTRACT_NUMBER")==null)?"":map.get("CONTRACT_NUMBER"); + contract_name=(map.get("PRODUCT_NAME")==null)?"":map.get("PRODUCT_NAME"); + ID=(map.get("ID")==null)?"":map.get("ID"); + Element bill = root.addElement("bill"); + uuid=UUID.randomUUID().toString().replace("-", ""); + bill.addAttribute("id", uuid); + Element billhead = bill.addElement("billhead"); + Element pk_defdoclist = billhead.addElement("pk_defdoclist");// 自定义档案列表主键,最大长度为20,类型为:String + pk_defdoclist.setText(ID); + Element pk_defdoc = billhead.addElement("pk_defdoc");// + pk_defdoc.setText(""); + Element pk_group = billhead.addElement("pk_group");// 所属集团,最大长度为20,类型为:String + pk_group.setText("06"); + Element pk_org = billhead.addElement("pk_org");// 所属组织,最大长度为20,类型为:String + pk_org.setText("安鹏租赁业务单元编码"); + Element code = billhead.addElement("code");// 档案编码,最大长度为40,类型为:String + code.setText(contract_number); + Element name = billhead.addElement("name");// 档案名称,最大长度为200,类型为:String + name.setText((contract_name==null)?"":contract_name); + Element shortname = billhead.addElement("shortname");// 简称,最大长度为200,类型为:String + shortname.setText(contract_name); + Element mnecode = billhead.addElement("mnecode");// 助记码,最大长度为50,类型为:String + mnecode.setText(""); + Element pid = billhead.addElement("pid");// 上级档案,最大长度为20,类型为:String + pid.setText(""); + Element memo = billhead.addElement("memo");// 备注,最大长度为200,类型为:String + memo.setText(""); + // 将记录写入辅助合同日志表 + insertSql="INSERT INTO NCXML_DETAIL_RECORDS(BILLID,XML_TYPE,TABLE_NUM,FLAG,CREATE_TIME,BATCH) VALUES('"+uuid+"','"+type+"','"+contract_number+"','1','"+year_month_days+"','"+batch+"')"; + Sqlca.executeSQL(insertSql); + logger.info("辅助合同记录语句: " + insertSql); + } + // String URL="//data//files//apzl_leasing//tmp//XZW//APleasing_Defdoc_"+year_month_day+".xml"; + String URL="D:\\voucherXml_NC\\APleasing_Defdoc_"+year_month_day+".xml"; + file=new File(URL); + writer = new XMLWriter(new FileOutputStream(file), OutputFormat.createPrettyPrint()); + writer.setEscapeText(false);// 字符是否转义,默认true + writer.write(document); + writer.close(); + // InterActionToNC(Sqlca,URL,type,batch,rs.size()); + Sqlca.commit(); + } + QuartzUtil.insertLog(plan_date,"com.tenwa.voucher.serviceImp.VoucherToNCforAssistContract", "success", "成功",curUserId); + } catch (Exception e) { + QuartzUtil.insertLog(plan_date,"com.tenwa.voucher.serviceImp.VoucherToNCforAssistContract", "error", "失败",curUserId); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + + /** + * 像NC传输xml, 获取NC回执xml信息, 根据回执信息更改状态 + */ + public static void InterActionToNC(Transaction Sqlca,String inputURL,String type,String batch,int count) { + try { + String updateSql = ""; // 更新sql对象 + String insertSql = ""; // 新增SQL对象 + String deleteSql = ""; // 删除SQL对象 + String resultcode= ""; // 单条返回结果 + String bdocid = ""; // xml回执id + String resultdescription=""; //错误信息 + + /** + * 获取对方post连接 + */ + //String url = "http://47.93.227.86:8858/service/XChangeServlet?account=q0225&groupcode=001"; + String url = "http://47.93.227.86:8858/service/XChangeServlet?account=8&groupcode=06"; + URL realURL = new URL(url); + HttpURLConnection connection = (HttpURLConnection)realURL.openConnection(); + connection.setDoOutput(true); + connection.setRequestProperty("Content-type", "text/xml"); + connection.setRequestMethod("POST"); + + /** + * 读取本方生成的xml, 传输到NC + */ + File file = new File(inputURL); + BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream()); + BufferedInputStream input = new BufferedInputStream(new FileInputStream(file)); + int length; + byte[] buffer = new byte[1000]; + while ((length = input.read(buffer, 0, 1000)) != -1) { + out.write(buffer, 0, length); + } + input.close(); + out.close(); + + /** + * 获取NC回执信息 + */ + InputStream inputStream = connection.getInputStream(); + InputStreamReader isr = new InputStreamReader(inputStream); + BufferedReader bufreader = new BufferedReader(isr); + String xmlString = ""; + int c; + while ((c = bufreader.read()) != -1) { + System.out.print((char) c); + xmlString += (char) c; + } + input.close(); + System.out.println("--------------------------" + xmlString); + + /** + * 将获取到的回执信息生成本地xml + */ + Document resDoc = DocumentHelper.parseText(xmlString); + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + DocumentSource source = new DocumentSource(resDoc); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + //设置文档的换行与缩进 + transformer.setOutputProperty(OutputKeys.INDENT, "YES"); + + // 将回执信息输出到本地 + SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年月日时分秒 + // File file2 = new File("D:\\VOUCHER_RECEIPT"); + // if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹 + String resFile = "//data//files//apzl_leasing//tmp//WEN//APleasing_"+type+""+fmt.format(new Date())+".xml"; + // String resFile = "D:\\VOUCHER_RECEIPT\\APleasing_"+type+""+fmt.format(new Date())+".xml"; + StreamResult result = new StreamResult(new File(resFile)); + transformer.transform(source,result); + + /** + * 解析xml, 根据回执信息更新状态 + */ + SAXReader sr = new SAXReader(); + Document doc = sr.read(resFile); + Element root= doc.getRootElement(); + //获取根元素,得到导入用友是否成功successful的值,值为Y:成功 N:失败 + String resSuc = root.attributeValue("successful"); + //后面对回执结果做判断,然后改变导入状态就行了 + if(null != resSuc){ + if(resSuc.equals("N")){ + logger.info("导入失败"); + // 导入失败, 将本次在明细表中存储的数据删除 + deleteSql = "DELETE FROM NCXML_DETAIL_RECORDS WHERE BATCH='"+batch+"' AND XML_TYPE = '"+type+"'"; + // 导入失败, 将失败数据记录入总记录表 + insertSql = "INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','0','"+count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(deleteSql); + Sqlca.executeSQL(insertSql); + }else if(resSuc.equals("Y")){ + logger.info("导入成功"); + List list = root.elements(); + int failed_count=0; // 失败记录数 + for (Element element : list) { + List list2 = element.elements(); + for (Element el : list2) { + logger.info("111111111111111111"); + // 获取单条回执状态 + resultcode = el.element("resultcode").getStringValue(); + if(!"1".equals(resultcode)) { + logger.info("22222222222222"); + bdocid = el.element("bdocid").getStringValue(); // xml回执id + resultdescription = el.element("resultdescription").getStringValue(); // 错误信息 + + // 如果回执状态不等于1, 说明有误, 更新到记录字表并记录错误信息 + updateSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'"; + Sqlca.executeSQL(updateSql); + logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+updateSql); + failed_count++; + } + } + } + // 将本批次传输总量及 失败数量记录入记录总表 + String insertSql1="INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+failed_count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(insertSql1); + }else{ + logger.info("出现未知错误"); + } + }else{ + logger.info("未找到successful属性"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforCustomer.java b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforCustomer.java new file mode 100644 index 000000000..c69d47976 --- /dev/null +++ b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforCustomer.java @@ -0,0 +1,337 @@ +package com.tenwa.voucher.serviceImp; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; + +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.DocumentSource; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import com.amarsoft.are.ARE; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.amarsoft.are.log.Log; +import com.amarsoft.awe.util.Transaction; +import com.base.util.QuartzUtil; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.comm.util.jboutil.DataOperatorUtil; +import com.tenwa.util.SerialNumberUtil; + +public class VoucherToNCforCustomer implements Job{ + private static Log logger=ARE.getLog(); + /** + * 客户信息xml生成, 每1000条生成一个xml + * @throws Exception + * @throws Exception + */ + public void execute(JobExecutionContext arg0) throws JobExecutionException { + String plan_date = DateAssistant.getToday(); + Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); + String curUserId = userId == null? "system" : userId.toString(); + JBOTransaction tx=null; + Transaction Sqlca = null; + try { + tx= JBOFactory.createJBOTransaction(); + Sqlca = Transaction.createTransaction(tx); + File file=null; // 定义文件对象 + XMLWriter writer=null; // 定义输出对象 + String type="customer"; // 定义xml类型对象 + String insertSql=""; // 定义新增语句对象 + String uuid=""; // 定义xml传输id对象 + String customer_num=""; // 定义客户编号对象 + String customername=""; // 定义客户名称对象 + String customertype=""; // 定义客户类型对象 + + // 获取特定格式日期 + String year_month_day = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String year_month_days = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + + // 查询为传输或之前传输失败的数据 + String sql="SELECT customer_num,customername,customertype,customerid FROM CUSTOMER_INFO WHERE customer_num NOT IN(SELECT TABLE_NUM FROM NCXML_DETAIL_RECORDS WHERE FLAG='1' AND XML_TYPE='"+type+"') "; + List> rs = DataOperatorUtil.getDataBySql(Sqlca,sql,null); + if(rs != null && rs.size()>0) { + // 生成xml头 + Document document= DocumentHelper.createDocument(); + Element root = document.addElement("ufinterface"); + root.addAttribute("account", "8"); + root.addAttribute("billtype", "customer(客户)"); + root.addAttribute("businessunitcode", "develop"); + root.addAttribute("filename", ""); + root.addAttribute("groupcode", "06"); + root.addAttribute("isexchange", "Y"); + root.addAttribute("orgcode", ""); + root.addAttribute("receiver", "接收方业务单元编码"); + root.addAttribute("replace", "Y"); + root.addAttribute("roottag", ""); + root.addAttribute("sender", "001"); + + String batch = SerialNumberUtil.getVoucherPCNumber(Sqlca);// 生成批次号 + + // 遍历要传输的结果集 + for(int i=0;i list = root.elements(); + int failed_count=0; // 失败记录数 + for (Element element : list) { + List list2 = element.elements(); + for (Element el : list2) { + logger.info("111111111111111111"); + // 获取单条回执状态 + resultcode = el.element("resultcode").getStringValue(); + if(!"1".equals(resultcode)) { + logger.info("22222222222222"); + bdocid = el.element("bdocid").getStringValue(); // xml回执id + resultdescription = el.element("resultdescription").getStringValue(); // 错误信息 + + // 如果回执状态不等于1, 说明有误, 更新到记录字表并记录错误信息 + updateSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'"; + Sqlca.executeSQL(updateSql); + logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+updateSql); + failed_count++; + } + } + } + // 将本批次传输总量及 失败数量记录入记录总表 + String insertSql1="INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+failed_count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(insertSql1); + }else{ + logger.info("出现未知错误"); + } + }else{ + logger.info("未找到successful属性"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforDistributor.java b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforDistributor.java new file mode 100644 index 000000000..8c3c2dc10 --- /dev/null +++ b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforDistributor.java @@ -0,0 +1,425 @@ +package com.tenwa.voucher.serviceImp; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; + +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.DocumentSource; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import com.amarsoft.are.ARE; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.amarsoft.are.log.Log; +import com.amarsoft.awe.util.Transaction; +import com.amarsoft.dict.als.manage.NameManager; +import com.base.util.QuartzUtil; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.comm.util.jboutil.DataOperatorUtil; +import com.tenwa.util.SerialNumberUtil; + +public class VoucherToNCforDistributor implements Job{ + private static Log logger=ARE.getLog(); + /** + * 供应商信息xml生成, 每1000条生成一个xml + * @throws Exception + * @throws Exception + */ + public void execute(JobExecutionContext arg0) throws JobExecutionException { + String plan_date = DateAssistant.getToday(); + Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); + String curUserId = userId == null? "system" : userId.toString(); + JBOTransaction tx=null; + Transaction Sqlca = null; + try { + tx= JBOFactory.createJBOTransaction(); + Sqlca = Transaction.createTransaction(tx); + File file = null; // 文件对象 + XMLWriter writer = null; // 输出对象 + String type="distributor"; // xml类别 + String DISTRIBUTOR_NAME = ""; // 经销商名称 + String DISTRIBUTOR_CODING = ""; // 经销商id + String DISTRIBUTOR_ADDRESS=""; // 地区编码 + String REGISTERED_ADDR=""; // 注册地址 + String POSTCODE=""; // 邮编 + String FACT_ADDR=""; // 企业地址 + String region=""; // 地区 + String PROVINCES=""; // 省份 + String BUSINESS_SCOPE=""; // 经营范围 + String SUBSIDIARY_COMPANY=""; // 母公司 + String TYPE=""; // 供应商基本分类 + String BUSINESS_LICENSE_NO=""; // 组织机构代码 + String DISTRIBUTOR_STATUS=""; // 启用状态 + String FAX_NUMBER=""; // 传真 + String E_MAIL=""; // email + String REGISTERED_ASSET=""; // 注册资金 + String DISTRIBUTORER=""; // 法人 + String URL=""; // 网址 + String insertSql=""; // 新增语句 + String uuid=""; // uuid + String MBAFC_EARLYDISBURSEMENT_TYPE="";// 资金类型/支付类型 + + // 获取特定日期 + String year_month_day = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String year_month_days = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + // 获取未传输及以前传输失败的数据 + String sql="SELECT DISTRIBUTOR_NAME,DISTRIBUTOR_CODING,DISTRIBUTOR_ADDRESS,FACT_ADDR,PROVINCES,POSTCODE,REGISTERED_ADDR,BUSINESS_SCOPE,SUBSIDIARY_COMPANY,TYPE,BUSINESS_LICENSE_NO,DISTRIBUTOR_STATUS,E_MAIL,FAX_NUMBER,REGISTERED_ASSET,DISTRIBUTORER,MBAFC_EARLYDISBURSEMENT_TYPE,URL FROM DISTRIBUTOR_INFO WHERE (DISTRIBUTOR_CODING NOT IN(SELECT TABLE_NUM FROM NCXML_DETAIL_RECORDS WHERE FLAG ='1' AND XML_TYPE='"+type+"') and DISTRIBUTOR_CODING not in(SELECT cust_id FROM customer_list)) and DISTRIBUTOR_STATUS='distributor_status04' "; + List> rs = DataOperatorUtil.getDataBySql(Sqlca,sql,null); + if(rs !=null && rs.size()>0) { + // 设置xml标签头 + Document document = DocumentHelper.createDocument(); + Element root = document.addElement("ufinterface"); + root.addAttribute("account", "8"); + root.addAttribute("billtype", "supplier(供应商)"); + root.addAttribute("filename", ""); + root.addAttribute("groupcode", "06"); + root.addAttribute("isexchange", "Y"); + root.addAttribute("receiver", "接收方业务单元编码"); + root.addAttribute("replace", "Y"); + root.addAttribute("roottag", ""); + root.addAttribute("sender", "001"); + // 获取批次号 + String batch = SerialNumberUtil.getVoucherPCNumber(Sqlca); + + // 遍历要传输的结果集 + for(int i=0; i list = root.elements(); + int failed_count=0; // 失败记录数 + for (Element element : list) { + List list2 = element.elements(); + for (Element el : list2) { + logger.info("111111111111111111"); + // 获取单条回执状态 + resultcode = el.element("resultcode").getStringValue(); + if(!"1".equals(resultcode)) { + logger.info("22222222222222"); + bdocid = el.element("bdocid").getStringValue(); // xml回执id + resultdescription = el.element("resultdescription").getStringValue(); // 错误信息 + + // 如果回执状态不等于1, 说明有误, 更新到记录字表并记录错误信息 + updateSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'"; + Sqlca.executeSQL(updateSql); + logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+updateSql); + failed_count++; + } + } + } + // 将本批次传输总量及 失败数量记录入记录总表 + String insertSql1="INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+failed_count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(insertSql1); + }else{ + logger.info("出现未知错误"); + } + }else{ + logger.info("未找到successful属性"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforVoucherPZ.java b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforVoucherPZ.java new file mode 100644 index 000000000..51a8c7c72 --- /dev/null +++ b/src_core/com/tenwa/voucher/serviceImp/VoucherToNCforVoucherPZ.java @@ -0,0 +1,560 @@ +package com.tenwa.voucher.serviceImp; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.DocumentSource; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import com.amarsoft.are.ARE; +import com.amarsoft.are.jbo.BizObject; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.amarsoft.are.log.Log; +import com.amarsoft.awe.util.Transaction; +import com.base.util.QuartzUtil; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.comm.util.jboutil.DataOperatorUtil; +import com.tenwa.util.SerialNumberUtil; + +import jbo.com.tenwa.entity.comm.own.OWN_INFO; +import jbo.voucher.LV_STACTS_CONFIG; + +public class VoucherToNCforVoucherPZ implements Job{ + private static Log logger=ARE.getLog(); + // 凭证信息传输 + public void execute(JobExecutionContext arg0) throws JobExecutionException { + String plan_date = DateAssistant.getToday(); + Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); + String curUserId = userId == null? "system" : userId.toString(); + String ss = DOM4JcreateToVoucher(); + if("true".equals(ss)) { + QuartzUtil.insertLog(plan_date,"com.tenwa.voucher.serviceImp.VoucherToNCforVoucherPZ", "success", "成功",curUserId); + }else { + QuartzUtil.insertLog(plan_date,"com.tenwa.voucher.serviceImp.VoucherToNCforVoucherPZ", "error", "失败",curUserId); + } + + } + + /* + * 页面执行xml传输 + * */ + public String sendVoucherData(JBOTransaction tx) { + String ss = DOM4JcreateToVoucher(); + return ss; + } + + /** + * 凭证信息xml生成, 每1000条生成一个xml + * @throws Exception + */ + private static String DOM4JcreateToVoucher(){ + // 本地xml存放文件夹, 没有就创建 + File file2 = new File("D:\\voucherXml_NC"); + if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹 + JBOTransaction tx=null; + Transaction Sqlca = null; + String returns="true"; + try { + // 定义全局对象 + tx= JBOFactory.createJBOTransaction(); + Sqlca = Transaction.createTransaction(tx); + Map map = new HashMap(); + Document document=null; // xml文件头 + File file=null; // 生成的xml文件路径 + XMLWriter writer=null; // 输出对象 + String uuid=""; // xml主键id + String SUBJECT_ID=null; // 获取科目id + String OWNED_COMPANY = null; // 所属公司 + String ACC_YEAR = null; // 会计期间/年 + String ACC_MONTH = null; // 会计期间/月 + String insertSql=""; // 定义新增语句对象 + String type="voucher"; // 记录表类别 + String timeAll = ""; // 制单日期 + + String year_month_day = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String year_month_days = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + + // 查询凭证视图, 获取每条凭证 + String sql = "SELECT F3,F60,ID,MODULE_NAME,DEPT_NAME,F1,F15,V8_STATUS,F5,GENERATE_DATE FROM VI_VOUCHER_V8 WHERE F3 NOT IN(SELECT TABLE_NUM FROM NCXML_DETAIL_RECORDS WHERE FLAG = '1' AND XML_TYPE='"+type+"')"; + List> list = DataOperatorUtil.getDataBySql(Sqlca, sql, null);// 将所有凭证号封装到list集合中 + + int a = list.size(); // v8视图总数据量/ xml中生成的总条数 + int b=1000; // 设置当前xml生成的条数 + int c = (int)(a / b); // 获取生成xml文件的数量, 最大循环值=c+1 + for (int i = 0; i <=c && a>0; i++) { + int count=0; // 记录当前批次传输总量 + Sqlca = Transaction.createTransaction(tx); + document = DocumentHelper.createDocument(); // 创建Document对象 + Element root = document.addElement("ufinterface"); // 设置xml头 + root.addAttribute("account", "8"); // 设置xml头属性 + root.addAttribute("billtype", "vouchergl(凭证)"); + root.addAttribute("businessunitcode", "develop"); + root.addAttribute("filename", ""); + root.addAttribute("groupcode", "06"); + root.addAttribute("isexchange", "Y"); + root.addAttribute("orgcode", ""); + root.addAttribute("receiver", "接收方业务单元编码"); + root.addAttribute("replace", "Y"); + root.addAttribute("roottag", ""); + root.addAttribute("sender", "001"); + String batch = SerialNumberUtil.getVoucherPCNumber(Sqlca); + for (int x = i * b; x < (i + 1) * b && x < a; x++) { // 决定当前xml生成的数据量 + // 获取凭证编号 + String F3=list.get(x).get("F3"); + map.clear(); + map.put("F3",F3); + + // 获取v8表借方数据 + String sql1 = "SELECT f5,f6,f7,f15,f59,f60,f65,f73,f74,f75 FROM VOUCHER_V8 WHERE F3=:F3 AND ENTRYDC='1'"; + List> v1 = DataOperatorUtil.getDataBySql(Sqlca,sql1,map); + + // 获取v8表贷方数据 + String sql2 = "SELECT f5,f6,f8,f15,f51,f52,f59,f60,f65,f73,f74,f75 FROM VOUCHER_V8 WHERE F3=:F3 AND ENTRYDC='-1'"; + List> v2 = DataOperatorUtil.getDataBySql(Sqlca,sql2,map); + + // 获取v8表公共信息 + for (Map map2 : v2) { + //OWNED_COMPANY=map2.get("f49"); // 本方id + ACC_YEAR = map2.get("f51"); // 会计期间/年 + ACC_MONTH =map2.get("f52"); // 会计期间/月 + timeAll =map2.get("f15"); // 制单时间 + } + + // 获取本方信息 + //BizObject own = JBOFactory.createBizObjectQuery(OWN_INFO.CLASS_NAME, "id=:OWNED_COMPANY").setParameter("OWNED_COMPANY", OWNED_COMPANY).getSingleResult(false); + + Element voucher = root.addElement("voucher"); + Element voucherHead = voucher.addElement("voucher_head"); + Element pkVoucher = voucherHead.addElement("pk_voucher");// 凭证主键/非空 + uuid=UUID.randomUUID().toString().replace("-", ""); + pkVoucher.setText(uuid); + Element pk_vouchertype = voucherHead.addElement("pk_vouchertype");// 凭证类别, 默认01/非空 + pk_vouchertype.setText("1");//---------------------------------------------------------------------- + Element year = voucherHead.addElement("year");// 会计年度/非空 + year.setText((ACC_YEAR==null)?"":ACC_YEAR); + Element pk_system = voucherHead.addElement("pk_system");// 来源系统/非空 + //pk_system.setText((own.getAttribute("OWN_NAME")==null)? "":own.getAttribute("OWN_NAME").getString());//---------------------------------------- + pk_system.setText("安鹏租赁零售性融资业务系统");//---------------------------------------- + Element voucherkind = voucherHead.addElement("voucherkind");// 凭证类型值/非空 + voucherkind.setText("0"); + Element pk_accountingbook = voucherHead.addElement("pk_accountingbook");// 核算核算账簿/非空 + pk_accountingbook.setText("安鹏租赁核算账簿编码"); + Element discardflag = voucherHead.addElement("discardflag");// 作废标志/可空 + discardflag.setText(""); + Element period = voucherHead.addElement("period");// 会计期间/非空 + period.setText((ACC_MONTH==null)?"":ACC_MONTH);//-------------------------------------------------------------- + Element no = voucherHead.addElement("no");// 凭证号为空自动分配/非空 + no.setText(F3); + Element attachment = voucherHead.addElement("attachment");// 附单据数/可空 + attachment.setText(""); + Element prepareddate = voucherHead.addElement("prepareddate");// 制单日期/非空 + prepareddate.setText(timeAll);//--------------------------------------------------- + Element pk_prepared = voucherHead.addElement("pk_prepared");// 制单人/非空 + pk_prepared.setText("制单人/非空");//------------------------------------------- + Element pk_casher = voucherHead.addElement("pk_casher");// 出纳 + pk_casher.setText("");//------------------------------------------ + Element signflag = voucherHead.addElement("signflag");// 签字标志 + signflag.setText("");//----------------------------------------------------- + Element pk_checked = voucherHead.addElement("pk_checked");// 审核人 + pk_checked.setText("");//-------------------------------------------------- + Element tallydate = voucherHead.addElement("tallydate");// 记账日期 + tallydate.setText(timeAll);//-------------------------- + Element pk_manager = voucherHead.addElement("pk_manager");// 记账人 + pk_manager.setText(""); + Element memo1 = voucherHead.addElement("memo1"); + memo1.setText(""); + Element memo2 = voucherHead.addElement("memo2"); + memo2.setText(""); + Element reserve1 = voucherHead.addElement("reserve1"); + reserve1.setText(""); + Element reserve2 = voucherHead.addElement("reserve2"); + reserve2.setText(""); + Element siscardflag = voucherHead.addElement("siscardflag"); + siscardflag.setText("");//-------------------------------------------------------- + Element pk_org = voucherHead.addElement("pk_org");// 所属组织/非空 + pk_org.setText("安鹏租赁业务单元编码");//--------------------------------------------------------- + Element pk_org_v = voucherHead.addElement("pk_org_v");// 所属组织版本/可空 + pk_org_v.setText("");//------------------------------------------------------- + Element pk_group = voucherHead.addElement("pk_group");// 所属集团 如果不输集团取当前登陆集团 + pk_group.setText("06"); + Element details = voucherHead.addElement("details"); + // 循环借方集合, 按照v8表数据中生成相应的借方item + for (Map v8Lend : v1) { + // 根据科目id, 获取当前数据对应的科目信息 + SUBJECT_ID=v8Lend.get("f6"); + BizObject subject = JBOFactory.createBizObjectQuery(LV_STACTS_CONFIG.CLASS_NAME, "ID=:ID").setParameter("ID", SUBJECT_ID).getSingleResult(false); + Element item1 = details.addElement("item"); // 借方 + Element detailindex1 = item1.addElement("detailindex");// 分录号/非空 + detailindex1.setText((v8Lend.get("f59")==null)?"":v8Lend.get("f59"));//------------------------------------ + Element explanation1 = item1.addElement("explanation");// 摘要/非空 + explanation1.setText((v8Lend.get("f5")==null)?"":v8Lend.get("f5")); + Element verifydate1 = item1.addElement("verifydate");// 业务日期/可空 + verifydate1.setText(""); + Element price1 = item1.addElement("price");// 单价/可空 + price1.setText(""); + Element excrate21 = item1.addElement("excrate2");// 折本汇率/可空 + excrate21.setText("");//----------------------------- + Element debitquantity1 = item1.addElement("debitquantity");// 借方数量/可空 + debitquantity1.setText(v1.size()+""); + Element debitamount1 = item1.addElement("debitamount");// 原币借方金额/可空 + debitamount1.setText((v8Lend.get("f7")==null)?"":v8Lend.get("f7"));//-------------------------------------------------- + Element localdebitamount1 = item1.addElement("localdebitamount");// 本币借方金额/可空 + localdebitamount1.setText("");//------------------------------------------- + Element groupdebitamount1 = item1.addElement("groupdebitamount");// 集团本币借方金额/可空 + groupdebitamount1.setText("");//----------------------------------------- + Element globaldebitamount1 = item1.addElement("globaldebitamount");// 全局本币借方金额/可空 + globaldebitamount1.setText("");//------------------------------------------- + Element pk_currtype1 = item1.addElement("pk_currtype");// 币种/非空 + pk_currtype1.setText("CNY");// + Element pk_accasoa1 = item1.addElement("pk_accasoa");// 科目/非空 + pk_accasoa1.setText((subject.getAttribute("SUBJECTS_NAME").getString()==null)?"":subject.getAttribute("SUBJECTS_NAME").getString()); + Element pk_unit1 = item1.addElement("pk_unit");// 所属二级核算单位/可空 + pk_unit1.setText("");//--------------------------------------------------- + Element pk_unit_v1 = item1.addElement("pk_unit_v");// 所属二级核算单位/版本可空 + pk_unit_v1.setText("");//------------------------------------------------- + Element ass1 = item1.addElement("ass");// 金额必须有一方不为空 + /*// 客商辅助核算 + if(v8Lend.get("f65")!=null && !"".equals(v8Lend.get("f65"))) { + Element ass_item1 = ass1.addElement("item"); + Element pk_Checktype1 = ass_item1.addElement("pk_Checktype"); + pk_Checktype1.setText("客商辅助核算"); + Element pk_Checkvalue1 = ass_item1.addElement("pk_Checkvalue"); + pk_Checkvalue1.setText((v8Lend.get("f65")==null)?"":v8Lend.get("f65")); + } + // 合同号辅助核算 + if(v8Lend.get("f60")!=null && !"".equals(v8Lend.get("f60"))) {// 部门名称 + Element ass_item2 = ass1.addElement("item"); + Element pk_Checktype2 = ass_item2.addElement("pk_Checktype"); + pk_Checktype2.setText("合同号辅助核算"); + Element pk_Checkvalue2 = ass_item2.addElement("pk_Checkvalue"); + pk_Checkvalue2.setText((v8Lend.get("f60")==null)?"":v8Lend.get("f60")); + } + // 主营类型辅助核算 + if(v8Lend.get("f73")!=null && !"".equals(v8Lend.get("f73"))) { + Element ass_item3 = ass1.addElement("item"); + Element pk_Checktype3 = ass_item3.addElement("pk_Checktype"); + pk_Checktype3.setText("融资租赁收益类型"); + Element pk_Checkvalue3 = ass_item3.addElement("pk_Checkvalue"); + pk_Checkvalue3.setText((v8Lend.get("f73")==null)?"":v8Lend.get("f73")); + } + //现金流量项目辅助核算 + if(v8Lend.get("f74")!=null && !"".equals(v8Lend.get("f74"))) { + Element ass_item4 = ass1.addElement("item"); + Element pk_Checktype4 = ass_item4.addElement("pk_Checktype"); + pk_Checktype4.setText("资金类型"); + Element pk_Checkvalue4 = ass_item4.addElement("pk_Checkvalue"); + pk_Checkvalue4.setText((v8Lend.get("f74")==null)?"":v8Lend.get("f74")); + } + //银行账户辅助核算 + if(v8Lend.get("f75")!=null && !"".equals(v8Lend.get("f75"))) { + Element ass_item5 = ass1.addElement("item"); + Element pk_Checktype5 = ass_item5.addElement("pk_Checktype"); + pk_Checktype5.setText("主营类型"); + Element pk_Checkvalue5 = ass_item5.addElement("pk_Checkvalue"); + pk_Checkvalue5.setText((v8Lend.get("f75")==null)?"":v8Lend.get("f75")); + }*/ + Element cashFlow = item1.addElement("cashFlow"); + Element cashFlow_item1 = cashFlow.addElement("item"); + Element m_pk_currtype1 = cashFlow_item1.addElement("m_pk_currtype");// 币种,最大长度为64,类型为:String + m_pk_currtype1.setText("CNY"); + Element money1 = cashFlow_item1.addElement("money");// 原币,最大长度为64,类型为:Double + money1.setText(""); + Element moneymoneyglobal1 = cashFlow_item1.addElement("moneyglobal");// 全局本币,最大长度为64,类型为:Double + moneymoneyglobal1.setText(""); + Element moneygroup1 = cashFlow_item1.addElement("moneygroup");// 集团本币,最大长度为64,类型为:Double + moneygroup1.setText(""); + Element moneymain1 = cashFlow_item1.addElement("moneymain");// 本币,最大长度为64,类型为:Double + moneymain1.setText(""); + Element pk_cashflow1 = cashFlow_item1.addElement("pk_cashflow");// 现金主键,最大长度为64,类型为:String + pk_cashflow1.setText(""); + Element pk_innercorp1 = cashFlow_item1.addElement("pk_innercorp");// 内部单位主键,最大长度为64,类型为:String + pk_innercorp1.setText(""); + } + + // 循环贷方集合, 按照v8表数据中生成相应的借方item + for (Map v8loan : v2) { + // 根据科目id, 获取当前数据对应的科目信息 + SUBJECT_ID=v8loan.get("f6"); + BizObject subject = JBOFactory.createBizObjectQuery(LV_STACTS_CONFIG.CLASS_NAME, "ID=:ID").setParameter("ID", SUBJECT_ID).getSingleResult(false); + Element item2 = details.addElement("item"); // 贷方金额 + Element creditquantity2 = item2.addElement("creditquantity");// 贷方数量 可空 + creditquantity2.setText(v2.size()+""); + Element creditamount2 = item2.addElement("creditamount"); // 原币贷方金额 可空 + creditamount2.setText((v8loan.get("f8")==null)?"":v8loan.get("f8")); + Element localcreditamount2 = item2.addElement("localcreditamount");// 本币贷方金额 可空 + localcreditamount2.setText(""); + Element groupcreditamount2 = item2.addElement("groupcreditamount");// 集团本币贷方金额 可空 + groupcreditamount2.setText(""); + Element globalcreditamount2 = item2.addElement("globalcreditamount");// 全局本币贷方金额 可空 + globalcreditamount2.setText(""); + Element detailindex2 = item2.addElement("detailindex");// 分录号 非空 + detailindex2.setText((v8loan.get("f59")==null)?"":v8loan.get("f59"));//------------------------------------- + Element explanation2 = item2.addElement("explanation");// 摘要 非空 + explanation2.setText((v8loan.get("f5")==null)?"":v8loan.get("f5")); + Element verifydate2 = item2.addElement("verifydate");// 业务日期 可空 + verifydate2.setText(timeAll); + Element price2 = item2.addElement("price");// 单价 可空 + price2.setText(""); + Element excrate22 = item2.addElement("excrate2");// 折本汇率 可空 + excrate22.setText("");//------------------------------------------- + Element pk_currtype2 = item2.addElement("pk_currtype");// 币种 非空 + pk_currtype2.setText("CNY"); + Element pk_accasoa2 = item2.addElement("pk_accasoa");// 科目 非空 + pk_accasoa2.setText((subject.getAttribute("SUBJECTS_NAME").getString()==null)?"":subject.getAttribute("SUBJECTS_NAME").getString()); + Element pk_unit2 = item2.addElement("pk_unit");// 所属二级核算单位 可空 (组织) + pk_unit2.setText("");//------------------------------------------ + Element pk_unit_v2 = item2.addElement("pk_unit_v");// 所属二级核算单位 版本可空 (组织) + pk_unit_v2.setText("");//----------------------------------------------- + Element ass2 = item2.addElement("ass");// + /*// 客商辅助核算 + if(v8loan.get("f65")!=null && !"".equals(v8loan.get("f65"))) { + Element ass_item1 = ass2.addElement("item"); + Element pk_Checktype1 = ass_item1.addElement("pk_Checktype"); + pk_Checktype1.setText("客商辅助核算"); + Element pk_Checkvalue1 = ass_item1.addElement("pk_Checkvalue"); + pk_Checkvalue1.setText((v8loan.get("f65")==null)?"":v8loan.get("f65")); + } + // 合同号辅助核算 + if(v8loan.get("f60")!=null && !"".equals(v8loan.get("f60"))) {// 部门名称 + Element ass_item2 = ass2.addElement("item"); + Element pk_Checktype2 = ass_item2.addElement("pk_Checktype"); + pk_Checktype2.setText("合同号辅助核算"); + Element pk_Checkvalue2 = ass_item2.addElement("pk_Checkvalue"); + pk_Checkvalue2.setText((v8loan.get("f60")==null)?"":v8loan.get("f60")); + } + // 主营类型辅助核算 + if(v8loan.get("f73")!=null && !"".equals(v8loan.get("f73"))) { + Element ass_item3 = ass2.addElement("item"); + Element pk_Checktype3 = ass_item3.addElement("pk_Checktype"); + pk_Checktype3.setText("融资租赁收益类型"); + Element pk_Checkvalue3 = ass_item3.addElement("pk_Checkvalue"); + pk_Checkvalue3.setText((v8loan.get("f73")==null)?"":v8loan.get("f73")); + } + //现金流量项目辅助核算 + if(v8loan.get("f74")!=null && !"".equals(v8loan.get("f74"))) { + Element ass_item4 = ass2.addElement("item"); + Element pk_Checktype4 = ass_item4.addElement("pk_Checktype"); + pk_Checktype4.setText("资金类型"); + Element pk_Checkvalue4 = ass_item4.addElement("pk_Checkvalue"); + pk_Checkvalue4.setText((v8loan.get("f74")==null)?"":v8loan.get("f74")); + } + //银行账户辅助核算 + if(v8loan.get("f75")!=null && !"".equals(v8loan.get("f75"))) { + Element ass_item5 = ass2.addElement("item"); + Element pk_Checktype5 = ass_item5.addElement("pk_Checktype"); + pk_Checktype5.setText("主营类型"); + Element pk_Checkvalue5 = ass_item5.addElement("pk_Checkvalue"); + pk_Checkvalue5.setText((v8loan.get("f75")==null)?"":v8loan.get("f75")); + }*/ + Element item2_cashFlow = item2.addElement("cashFlow"); + Element cashflowitem2 = item2_cashFlow.addElement("item"); + Element m_pk_currtype2 = cashflowitem2.addElement("m_pk_currtype");// 币种,最大长度为64,类型为:String + m_pk_currtype2.setText("CNY"); + Element money2 = cashflowitem2.addElement("money");// 原币,最大长度为64,类型为:Double + money2.setText(""); + Element moneyglobal2 = cashflowitem2.addElement("moneyglobal");// 全局本币,最大长度为64,类型为:Double + moneyglobal2.setText(""); + Element moneygroup2 = cashflowitem2.addElement("moneygroup");// 集团本币,最大长度为64,类型为:Double + moneygroup2.setText(""); + Element moneymain2 = cashflowitem2.addElement("moneymain");// 本币,最大长度为64,类型为:Double + moneymain2.setText(""); + Element pk_cashflow2 = cashflowitem2.addElement("pk_cashflow");// 现金主键,最大长度为64,类型为:String + pk_cashflow2.setText(""); + Element pk_innercorp2 = cashflowitem2.addElement("pk_innercorp");// 内部单位主键,最大长度为64,类型为:String + pk_innercorp2.setText(""); + } + // 新增当条凭证信息入记录字表 + //insertSql="INSERT INTO VOUCHER_LOG(BILLID,F3,FLAG,CREATE_TIME,BATCH) VALUES('"+str+"','"+F3+"','1','"+year_month_days+"','"+batch+"')"; + insertSql="INSERT INTO NCXML_DETAIL_RECORDS(BILLID,XML_TYPE,TABLE_NUM,FLAG,CREATE_TIME,BATCH) VALUES('"+uuid+"','"+type+"','"+F3+"','1','"+year_month_days+"','"+batch+"')"; + //sqlObject = new SqlObject(insertSql); + //Sqlca.executeSQL(sqlObject); + Sqlca.executeSQL(insertSql); + logger.info("凭证记录表插入语句: "+insertSql); + count++; + } + // String URL="//data//files//apzl_leasing//tmp//XZW//APleasing_VOUCHER_"+year_month_day+".xml"; + String URL="D:\\voucherXml_NC\\APleasing_VOUCHER_"+year_month_day+".xml"; + file=new File(URL); + writer = new XMLWriter(new FileOutputStream(file), OutputFormat.createPrettyPrint()); + writer.setEscapeText(false);// 字符是否转义,默认true + writer.write(document); + writer.close(); + // InterActionToNC(Sqlca,URL,type,batch,count); + Sqlca.commit(); + } + } catch (Exception e) { + returns="false"; + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + return returns; + } + + + /** + * 像NC传输xml, 获取NC回执xml信息, 根据回执信息更改状态 + */ + public static void InterActionToNC(Transaction Sqlca,String inputURL,String type,String batch,int count) { + try { + String updateSql = ""; // 更新sql对象 + String insertSql = ""; // 新增SQL对象 + String deleteSql = ""; // 删除SQL对象 + String resultcode= ""; // 单条返回结果 + String bdocid = ""; // xml回执id + String resultdescription=""; //错误信息 + + /** + * 获取对方post连接 + */ + //String url = "http://47.93.227.86:8858/service/XChangeServlet?account=q0225&groupcode=001"; + String url = "http://47.93.227.86:8858/service/XChangeServlet?account=8&groupcode=06"; + URL realURL = new URL(url); + HttpURLConnection connection = (HttpURLConnection)realURL.openConnection(); + connection.setDoOutput(true); + connection.setRequestProperty("Content-type", "text/xml"); + connection.setRequestMethod("POST"); + + /** + * 读取本方生成的xml, 传输到NC + */ + File file = new File(inputURL); + BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream()); + BufferedInputStream input = new BufferedInputStream(new FileInputStream(file)); + int length; + byte[] buffer = new byte[1000]; + while ((length = input.read(buffer, 0, 1000)) != -1) { + out.write(buffer, 0, length); + } + input.close(); + out.close(); + + /** + * 获取NC回执信息 + */ + InputStream inputStream = connection.getInputStream(); + InputStreamReader isr = new InputStreamReader(inputStream); + BufferedReader bufreader = new BufferedReader(isr); + String xmlString = ""; + int c; + while ((c = bufreader.read()) != -1) { + System.out.print((char) c); + xmlString += (char) c; + } + input.close(); + System.out.println("--------------------------" + xmlString); + + /** + * 将获取到的回执信息生成本地xml + */ + Document resDoc = DocumentHelper.parseText(xmlString); + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + DocumentSource source = new DocumentSource(resDoc); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + //设置文档的换行与缩进 + transformer.setOutputProperty(OutputKeys.INDENT, "YES"); + + // 将回执信息输出到本地 + SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年月日时分秒 + // File file2 = new File("D:\\VOUCHER_RECEIPT"); + // if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹 + String resFile = "//data//files//apzl_leasing//tmp//WEN//APleasing_"+type+""+fmt.format(new Date())+".xml"; + // String resFile = "D:\\VOUCHER_RECEIPT\\APleasing_"+type+""+fmt.format(new Date())+".xml"; + StreamResult result = new StreamResult(new File(resFile)); + transformer.transform(source,result); + + /** + * 解析xml, 根据回执信息更新状态 + */ + SAXReader sr = new SAXReader(); + Document doc = sr.read(resFile); + Element root= doc.getRootElement(); + //获取根元素,得到导入用友是否成功successful的值,值为Y:成功 N:失败 + String resSuc = root.attributeValue("successful"); + //后面对回执结果做判断,然后改变导入状态就行了 + if(null != resSuc){ + if(resSuc.equals("N")){ + logger.info("导入失败"); + // 导入失败, 将本次在明细表中存储的数据删除 + deleteSql = "DELETE FROM NCXML_DETAIL_RECORDS WHERE BATCH='"+batch+"' AND XML_TYPE = '"+type+"'"; + // 导入失败, 将失败数据记录入总记录表 + insertSql = "INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','0','"+count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(deleteSql); + Sqlca.executeSQL(insertSql); + }else if(resSuc.equals("Y")){ + logger.info("导入成功"); + List list = root.elements(); + int failed_count=0; // 失败记录数 + for (Element element : list) { + List list2 = element.elements(); + for (Element el : list2) { + logger.info("111111111111111111"); + // 获取单条回执状态 + resultcode = el.element("resultcode").getStringValue(); + if(!"1".equals(resultcode)) { + logger.info("22222222222222"); + bdocid = el.element("bdocid").getStringValue(); // xml回执id + resultdescription = el.element("resultdescription").getStringValue(); // 错误信息 + + // 如果回执状态不等于1, 说明有误, 更新到记录字表并记录错误信息 + updateSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'"; + Sqlca.executeSQL(updateSql); + logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+updateSql); + failed_count++; + } + } + } + // 将本批次传输总量及 失败数量记录入记录总表 + String insertSql1="INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+failed_count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(insertSql1); + }else{ + logger.info("出现未知错误"); + } + }else{ + logger.info("未找到successful属性"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +}