From 99d6166ab9c677b52187faba3295be0cf47f6c6b Mon Sep 17 00:00:00 2001 From: zhangjun Date: Wed, 19 Sep 2018 16:32:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=B5=84=E6=96=99=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/Tenwa/Comm/DocList/DocListMain.jsp | 2 +- WebContent/Tenwa/Comm/DocList/PayDocList.jsp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WebContent/Tenwa/Comm/DocList/DocListMain.jsp b/WebContent/Tenwa/Comm/DocList/DocListMain.jsp index 24c6a31ea..47d672065 100644 --- a/WebContent/Tenwa/Comm/DocList/DocListMain.jsp +++ b/WebContent/Tenwa/Comm/DocList/DocListMain.jsp @@ -40,7 +40,7 @@ var docList="<%=docList%>"; myleft.width=1; if("SingleRow"=="<%=type%>"){ - if("FundPaymentCarFlow"=="<%=sFlowNo%>"||"BusinessApplyFlow"=="<%=sFlowNo%>"||"MortgageFileFlow"=="<%=sFlowNo%>"||"ProjectCreditFlow"=="<%=sFlowNo%>"||"ContractSupportFlow"=="<%=sFlowNo%>"||"ProjectRecreditFlow"=="<%=sFlowNo%>"||"ProjectSupportFlow"=="<%=sFlowNo%>"||"ProjectApprovalFlow"=="<%=sFlowNo%>"||"FundPaymentFlow"=="<%=sFlowNo%>"){ + if("FundPaymentCarFlow"=="<%=sFlowNo%>"||"BusinessApplyFlow"=="<%=sFlowNo%>"||"MortgageFileFlow"=="<%=sFlowNo%>"||"ProjectCreditFlow"=="<%=sFlowNo%>"||"ContractSupportFlow"=="<%=sFlowNo%>"||"ProjectRecreditFlow"=="<%=sFlowNo%>"||"ProjectSupportFlow"=="<%=sFlowNo%>"||"ProjectApprovalFlow"=="<%=sFlowNo%>"||"FundPaymentFlow"=="<%=sFlowNo%>"||"ProjectCancelFlow"=="<%=sFlowNo%>"){ AsControl.OpenView("/Tenwa/Comm/DocList/PayDocList.jsp","docList="+docList,"right",""); }else{ AsControl.OpenView("/Tenwa/Comm/DocList/BussinessApproveDocList.jsp","docList="+docList,"right",""); diff --git a/WebContent/Tenwa/Comm/DocList/PayDocList.jsp b/WebContent/Tenwa/Comm/DocList/PayDocList.jsp index 8a284d218..fcebf0f5f 100644 --- a/WebContent/Tenwa/Comm/DocList/PayDocList.jsp +++ b/WebContent/Tenwa/Comm/DocList/PayDocList.jsp @@ -43,7 +43,9 @@ } String compClientID = request.getParameter("CompClientID"); - + if("ProjectRecreditFlow".equals(sObjectType)){ + sTempletNo = "FlowPayDocList" ; + } Map docParam=new HashMap(); Map other=new HashMap(); other.put("carAttributes", carAttributes); From d82a343c358863d9363ccabce8d4b0dd8eda8ab2 Mon Sep 17 00:00:00 2001 From: xiezhiwen Date: Wed, 19 Sep 2018 20:48:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=87=AD=E8=AF=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tenwa/Lease/voucher/voucherass_detail.jsp | 6 +- src_core/com/tenwa/util/SerialNumberUtil.java | 4 + .../service/VoucherSysJointNCService.java | 2 +- .../VoucherSysJointNCServiceImpl.java | 828 ++++++++++-------- 4 files changed, 450 insertions(+), 390 deletions(-) diff --git a/WebContent/Tenwa/Lease/voucher/voucherass_detail.jsp b/WebContent/Tenwa/Lease/voucher/voucherass_detail.jsp index 363c2f383..34358e1cc 100644 --- a/WebContent/Tenwa/Lease/voucher/voucherass_detail.jsp +++ b/WebContent/Tenwa/Lease/voucher/voucherass_detail.jsp @@ -37,11 +37,7 @@ function NCInterface(){ alert("传输开始"); var mes = RunJavaMethodTrans("com.tenwa.voucher.serviceImp.VoucherSysJointNCServiceImpl","sendVoucherData",""); - if("true"==mes){ - alert("传输成功"); - }else{ - alert("传输失败"); - } + alert("传输完成"); } function synVoucherCode(){ diff --git a/src_core/com/tenwa/util/SerialNumberUtil.java b/src_core/com/tenwa/util/SerialNumberUtil.java index 9005b54f1..04ae81e95 100644 --- a/src_core/com/tenwa/util/SerialNumberUtil.java +++ b/src_core/com/tenwa/util/SerialNumberUtil.java @@ -50,6 +50,10 @@ public class SerialNumberUtil { public static synchronized String getRentOutNoNumber(JBOTransaction tx) throws Exception{ return SerialNumberUtil.getSerialNumber("PR{year}{month}{maxOrderNumber}",4,null, "", null, tx); } + + public static synchronized String getVoucherPCNumber(JBOTransaction tx) throws Exception{ + return SerialNumberUtil.getSerialNumber("AP{year}{month}{day}-{maxOrderNumber}",3,null, "凭证接口批次", null, tx); + } /** * 通联代扣流水号 * @param tx diff --git a/src_core/com/tenwa/voucher/service/VoucherSysJointNCService.java b/src_core/com/tenwa/voucher/service/VoucherSysJointNCService.java index 956c3ea02..1e2d662c0 100644 --- a/src_core/com/tenwa/voucher/service/VoucherSysJointNCService.java +++ b/src_core/com/tenwa/voucher/service/VoucherSysJointNCService.java @@ -3,5 +3,5 @@ package com.tenwa.voucher.service; import com.amarsoft.are.jbo.JBOTransaction; public interface VoucherSysJointNCService { - public String sendVoucherData(JBOTransaction tx)throws Exception; + public void sendVoucherData(JBOTransaction tx)throws Exception; } diff --git a/src_core/com/tenwa/voucher/serviceImp/VoucherSysJointNCServiceImpl.java b/src_core/com/tenwa/voucher/serviceImp/VoucherSysJointNCServiceImpl.java index e7ef8e3a0..0fab376c3 100644 --- a/src_core/com/tenwa/voucher/serviceImp/VoucherSysJointNCServiceImpl.java +++ b/src_core/com/tenwa/voucher/serviceImp/VoucherSysJointNCServiceImpl.java @@ -22,7 +22,6 @@ import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; -import org.apache.jasper.tagplugins.jstl.core.ForEach; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; @@ -30,6 +29,7 @@ import org.dom4j.io.DocumentSource; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; +import org.junit.Test; import com.amarsoft.are.ARE; import com.amarsoft.are.jbo.BizObject; @@ -43,6 +43,7 @@ import com.amarsoft.awe.util.Transaction; import com.amarsoft.dict.als.manage.NameManager; import com.sun.istack.internal.logging.Logger; import com.tenwa.comm.util.jboutil.DataOperatorUtil; +import com.tenwa.util.SerialNumberUtil; import com.tenwa.voucher.service.VoucherSysJointNCService; import jbo.com.tenwa.entity.comm.own.OWN_INFO; import jbo.voucher.LV_STACTS_CONFIG; @@ -52,93 +53,57 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { /** * 调用生成xml的方法 */ - public String sendVoucherData(JBOTransaction tx){ - // 获取返回结果, 用于页面提示 - String trueOrFalse = getVoucherToXML(tx); - return trueOrFalse; - } - - /** - * 先获取V8视图中的凭证编号, 然后依次生成所需xml - * @param tx - */ - public static String getVoucherToXML(JBOTransaction tx) { - try { - Transaction Sqlca = null; - Sqlca = Transaction.createTransaction(tx); - Map map = new HashMap(); - // 获取vi_voucher_v8视图中的数据 - List> list= getDataList(Sqlca);// 获取所有凭证编号 - // 生成凭证信息xml文件 - DOM4JcreateToVoucher(Sqlca,list,map); - // 生成客户信息xml文件 - DOM4JcreateToCustomer(Sqlca); - // 生成经销商信息xml文件 - DOM4JcreateToSupplier(Sqlca); - // 生成辅助合同信息xml文件 - DOM4JcreateToDefdoc(Sqlca); - tx.commit(); - } catch (Exception e) { - try { - tx.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - return "false"; - }finally { - try { - if(tx !=null){ - tx.commit(); - } - } catch (Exception e2) { - e2.printStackTrace(); } - } - return "true"; - } - /** - * 获取数据库凭证信息表所有的待传F3凭证编号 - * @throws Exception - */ - private static List> getDataList(JBOTransaction tx) throws Exception{ - // 查询所有待传输的数据 - 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 F3 FROM VOUCHER_LOG WHERE FLAG = '1')"; - List> dataList = DataOperatorUtil.getDataBySql(tx, sql, null);// 将所有凭证号封装到list集合中 - return dataList; + public void sendVoucherData(JBOTransaction tx){ + // 生成凭证信息xml文件 + DOM4JcreateToVoucher(tx); + // 生成客户信息xml文件 + DOM4JcreateToCustomer(tx); + // 生成经销商信息xml文件 + DOM4JcreateToSupplier(tx); + // 生成辅助合同信息xml文件 + DOM4JcreateToDefdoc(tx); } /** * 凭证信息xml生成, 每1000条生成一个xml * @throws Exception */ - private static void DOM4JcreateToVoucher(Transaction Sqlca,List>list, Map map) throws Exception { + private static void DOM4JcreateToVoucher(JBOTransaction tx){ // 本地xml存放文件夹, 没有就创建 - /*File file2 = new File("D:\\voucherXml_NC"); - if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹 -*/ // 定义全局对象 + // File file2 = new File("D:\\voucherXml_NC"); + // if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹 + Transaction Sqlca = null; + try { + // 定义全局对象 + Sqlca = Transaction.createTransaction(tx); + Map map = new HashMap(); Document document=null; // xml文件头 File file=null; // 生成的xml文件路径 XMLWriter writer=null; // 输出对象 - String str=""; // xml主键id + String uuid=""; // xml主键id String SUBJECT_ID=null; // 获取科目id String OWNED_COMPANY = null; // 所属公司 String ACC_YEAR = null; // 会计期间/年 String ACC_MONTH = null; // 会计期间/月 - String tableName="VOUCHER_LOG"; // 表名 String insertSql=""; // 定义新增语句对象 - SqlObject sqlObject=null; // sqlObject对象 - Date time = new Date(); // 获取当前时间对象, 并格式化 - SimpleDateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");// 年月日时分秒 - SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年月日时分秒 - String year_month_day = formatter1.format(time); // 年月日时分秒 - String year_month_days = formatter2.format(time); // 年月日时分秒 + 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; i++) { + int count=0; // 记录当前批次传输总量 + Sqlca = Transaction.createTransaction(tx); document = DocumentHelper.createDocument(); // 创建Document对象 Element root = document.addElement("ufinterface"); // 设置xml头 - root.addAttribute("account", "0001"); // 设置xml头属性 + root.addAttribute("account", "q0225"); // 设置xml头属性 root.addAttribute("billtype", "vouchergl"); root.addAttribute("businessunitcode", "develop"); root.addAttribute("filename", ""); @@ -149,14 +114,17 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { 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 f7,f6,f5,f15,f63,f64,f73,f74,f75,f76 FROM VOUCHER_V8 WHERE F3=:F3 AND ENTRYDC='1'"; List> v1 = DataOperatorUtil.getDataBySql(Sqlca,sql1,map); + // 获取v8表贷方数据 String sql2 = "SELECT f8,f6,f5,f15,f63,f64,f73,f74,f75,f76,f49,f51,f52,f12 FROM VOUCHER_V8 WHERE F3=:F3 AND ENTRYDC='-1'"; List> v2 = DataOperatorUtil.getDataBySql(Sqlca,sql2,map); @@ -168,12 +136,15 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { 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");// 凭证主键/非空 - str=UUID.randomUUID().toString().replace("-", ""); - pkVoucher.setText(str); + 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");// 会计年度/非空 @@ -323,6 +294,7 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { Element pk_innercorp1 = cashFlow_item1.addElement("pk_innercorp");// 内部单位主键,最大长度为64,类型为:String pk_innercorp1.setText(""); } + // 循环贷方集合, 按照v8表数据中生成相应的借方item for (Map v8loan : v2) { // 根据科目id, 获取当前数据对应的科目信息 @@ -423,12 +395,14 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { Element pk_innercorp2 = cashflowitem2.addElement("pk_innercorp");// 内部单位主键,最大长度为64,类型为:String pk_innercorp2.setText(""); } - // 新增当条凭证信息如voucher_log表 - insertSql="INSERT INTO VOUCHER_LOG(BILLID,F3,FLAG,CREATE_TIME) VALUES('"+str+"','"+F3+"','1','"+year_month_days+"')"; + // 新增当条凭证信息入记录字表 + //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"; @@ -437,181 +411,196 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { writer.setEscapeText(false);// 字符是否转义,默认true writer.write(document); writer.close(); - InterActionToNC(Sqlca,URL,tableName); + InterActionToNC(Sqlca,URL,type,batch,count); + Sqlca.commit(); } + } catch (Exception e) { + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } } /** * 客户信息xml生成, 每1000条生成一个xml * @throws Exception * @throws Exception */ - private static void DOM4JcreateToCustomer(Transaction Sqlca) throws Exception{ - // 判断该文件夹是否存在, 如果不存在就创建 - /*File file2 = new File("D:\\voucherXml_NC"); - if(file2.exists()) {file2.mkdirs();} */ - // 定义全局对象 - // 生成xml的路劲 - File file=null; - // 输出对象 - XMLWriter writer=null; - // 表名 - String tableName="CUSTOMER_LOG"; + private static void DOM4JcreateToCustomer(JBOTransaction tx){ + Transaction Sqlca = null; + try { + Sqlca = Transaction.createTransaction(tx); + File file=null; // 定义文件对象 + XMLWriter writer=null; // 定义输出对象 + String type="customer"; // 定义xml类型对象 String insertSql=""; // 定义新增语句对象 - SqlObject sqlObject=null; // sqlObject对象 - // 获取时间对象, 格式为--年月日时分秒 - Date time = new Date(); // 获取当前时间对象, 并格式化 - SimpleDateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");// 年月日时分秒 - SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年月日时分秒 - String year_month_day = formatter1.format(time); // 年月日时分秒 - String year_month_days = formatter2.format(time); // 年月日时分秒 - String str=""; - String customer_num=""; - String customername=""; - String customertype=""; - // 查询未传入客户信息 - String sql="SELECT customer_num,customername,customertype,customerid FROM CUSTOMER_INFO WHERE customer_num NOT IN(SELECT CUSTOMER_NUM FROM CUSTOMER_LOG WHERE FLAG='1') "; + 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); - // 客户xml头 - Document document= DocumentHelper.createDocument(); // 生成每个xml的头 + + // 生成xml头 + Document document= DocumentHelper.createDocument(); Element root = document.addElement("ufinterface"); - root.addAttribute("account", "0001"); - root.addAttribute("billtype", "customer"); - root.addAttribute("businessunitcode", "develop"); - root.addAttribute("filename", ""); - root.addAttribute("groupcode", "001"); - root.addAttribute("isexchange", "Y"); - root.addAttribute("orgcode", ""); - root.addAttribute("receiver", "接收方业务单元编码"); - root.addAttribute("replace", "Y"); - root.addAttribute("roottag", ""); - root.addAttribute("sender", "001"); + root.addAttribute("account", "q0225"); + root.addAttribute("billtype", "customer"); + root.addAttribute("businessunitcode", "develop"); + root.addAttribute("filename", ""); + root.addAttribute("groupcode", "001"); + 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 至 删除,包括 Element item1 = finances.addElement("item"); @@ -741,15 +730,8 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { acclimitcontrol.setText("基于上级客户账期控制,最大长度为1,类型为:UFBoolean"); Element creditlevel = item4.addElement("creditlevel");// 信用等级,最大长度为20,类型为:String creditlevel.setText("信用等级,最大长度为20,类型为:String");*/ - /*cust_id=rs.get(i).get("customerid"); - updateSql="UPDATE CUSTOMER_INFO SET FLAG='0' WHERE CUSTOMERID='"+cust_id+"'"; - SqlObject updSql=new SqlObject(updateSql); - Sqlca.executeSQL(updSql);*/ - // 将客户xml信息写入状态表中 - insertSql="INSERT INTO CUSTOMER_LOG(BILLID,CUSTOMER_NUM,FLAG,CREATE_TIME) VALUES('"+str+"','"+customer_num+"','1','"+year_month_days+"')"; - //sqlObject = new SqlObject(insertSql); - //Sqlca.executeSQL(sqlObject); + insertSql="INSERT INTO NCXML_DETAIL_RECORDS(BILLID,XML_TYPE,TABLE_NUM,FLAG,CREATE_TIME,BATCH) VALUES('"+uuid+"','"+type+"','"+customer_num+"','1','"+year_month_days+"','"+batch+"')"; Sqlca.executeSQL(insertSql); logger.info("客户记录语句: "+insertSql); } @@ -760,21 +742,38 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { writer.setEscapeText(false);// 字符是否转义,默认true writer.write(document); writer.close(); - InterActionToNC(Sqlca,URL,tableName); + InterActionToNC(Sqlca,URL,type,batch,rs.size()); + Sqlca.commit(); + } catch (Exception e) { + try { + logger.debug("客户xml传输失败"); + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if (Sqlca!=null) { + try { + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } } /** * 供应商信息xml生成, 每1000条生成一个xml * @throws Exception * @throws Exception */ - private static void DOM4JcreateToSupplier(Transaction Sqlca) throws Exception{ - //File file2 = new File("D:\\voucherXml_NC"); - //if(file2==null || "".equals(file2)) { - // file2.mkdirs();//创建父文件夹 - //} - File file = null; - XMLWriter writer = null; - String tableName="DISTRIBUTOR_LOG"; // 表名 + private static void DOM4JcreateToSupplier(JBOTransaction tx) { + Transaction Sqlca = null; + try { + Sqlca = Transaction.createTransaction(tx); + File file = null; // 文件对象 + XMLWriter writer = null; // 输出对象 + String type="distributor"; // xml类别 String DISTRIBUTOR_NAME = ""; // 经销商名称 String DISTRIBUTOR_CODING = ""; // 经销商id String DISTRIBUTOR_ADDRESS=""; // 地区编码 @@ -788,187 +787,188 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { String TYPE=""; // 供应商基本分类 String BUSINESS_LICENSE_NO=""; // 组织机构代码 String DISTRIBUTOR_STATUS=""; // 启用状态 - String FAX_NUMBER=""; // 启用状态 - String E_MAIL=""; // 传真 + String FAX_NUMBER=""; // 传真 + String E_MAIL=""; // email String REGISTERED_ASSET=""; // 注册资金 String DISTRIBUTORER=""; // 法人 String URL=""; // 网址 String insertSql=""; // 新增语句 - SqlObject sqlObject=null; // 创建sqlObject对象 String uuid=""; // uuid String MBAFC_EARLYDISBURSEMENT_TYPE="";// 资金类型/支付类型 - // 获取时间对象, 格式为--年月日时分秒 - Date time = new Date(); // 获取当前时间对象, 并格式化 - SimpleDateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");// 年月日时分秒 - SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年月日时分秒 - String year_month_day = formatter1.format(time); // 年月日时分秒 - String year_month_days = formatter2.format(time); // 年月日时分秒 + + // 获取特定日期 + 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()); + // 设置xml标签头 - Document document = DocumentHelper.createDocument(); // 生成每个xml的头 + Document document = DocumentHelper.createDocument(); Element root = document.addElement("ufinterface"); - root.addAttribute("account", "0001"); - root.addAttribute("billtype", "supplier"); - root.addAttribute("filename", ""); - root.addAttribute("groupcode", "001"); - root.addAttribute("isexchange", "Y"); - root.addAttribute("receiver", "接收方业务单元编码"); - root.addAttribute("replace", "Y"); - root.addAttribute("roottag", ""); - root.addAttribute("sender", "001"); - 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 DISTRIBUTOR_CODING FROM DISTRIBUTOR_LOG WHERE FLAG ='1' ) "; + root.addAttribute("account", "q0225"); + root.addAttribute("billtype", "supplier"); + root.addAttribute("filename", ""); + root.addAttribute("groupcode", "001"); + root.addAttribute("isexchange", "Y"); + root.addAttribute("receiver", "接收方业务单元编码"); + root.addAttribute("replace", "Y"); + root.addAttribute("roottag", ""); + root.addAttribute("sender", "001"); + + // 获取未传输及以前传输失败的数据 + 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+"') "; List> rs = DataOperatorUtil.getDataBySql(Sqlca,sql,null); + + // 获取批次号 + String batch = SerialNumberUtil.getVoucherPCNumber(Sqlca); + + // 遍历要传输的结果集 for(int i=0; i> rs = DataOperatorUtil.getDataBySql(Sqlca,sql,null); + + // 获取批次号 + 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("自定义档案列表主键,最大长度为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 @@ -1044,8 +1074,7 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { Element memo = billhead.addElement("memo");// 备注,最大长度为200,类型为:String memo.setText(""); // 将记录写入辅助合同日志表 - insertSql="INSERT INTO SUBSIBIARY_CONTRACT_LOG(BILLID,CONTRACT_NUMBER,FLAG,CREATE_TIME) VALUES('"+uuid+"','"+contract_number+"','1','"+year_month_days+"')"; - //sqlObject= new SqlObject(insertSql); + 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); } @@ -1056,32 +1085,50 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { writer.setEscapeText(false);// 字符是否转义,默认true writer.write(document); writer.close(); - InterActionToNC(Sqlca,URL,tableName); + InterActionToNC(Sqlca,URL,type,batch,rs.size()); + Sqlca.commit(); + } catch (Exception e) { + 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 tableName) { + public static void InterActionToNC(Transaction Sqlca,String inputURL,String type,String batch,int count) { try { - // 定义全局变量 - String sql=""; - String resultcode=""; //返回状态 - String bdocid=""; //数据ID + String updateSql = ""; // 更新sql对象 + String insertSql = ""; // 新增SQL对象 + String deleteSql = ""; // 删除SQL对象 + String resultcode= ""; // 单条返回结果 + String bdocid = ""; // xml回执id String resultdescription=""; //错误信息 - SqlObject updSql; /** * 获取对方post连接 */ - String url = "http://172.16.0.19/service/XChangeServlet?account=00001&groupcode=001"; + String url = "http://47.93.227.86:8858/service/XChangeServlet?account=q0225&groupcode=001"; URL realURL = new URL(url); HttpURLConnection connection = (HttpURLConnection)realURL.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-type", "text/xml"); connection.setRequestMethod("POST"); + /** - * 读取本地生成的xml, 传输到NC + * 读取本方生成的xml, 传输到NC */ File file = new File(inputURL); BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream()); @@ -1093,8 +1140,9 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { } input.close(); out.close(); + /** - * 获取回执信息 + * 获取NC回执信息 */ InputStream inputStream = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(inputStream); @@ -1107,8 +1155,7 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { } input.close(); System.out.println("--------------------------" + xmlString); - String insertSql1="INSERT INTO LB_XZW_LOG(ID_,NAME_) VALUES('"+tableName+"','成功')"; - Sqlca.executeSQL(insertSql1); + /** * 将获取到的回执信息生成本地xml */ @@ -1119,15 +1166,17 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //设置文档的换行与缩进 transformer.setOutputProperty(OutputKeys.INDENT, "YES"); + // 将回执信息输出到本地 SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss"); - /*File file2 = new File("D:\\voucherXml_receipt"); - if (!file2.exists()) {file2.mkdirs();}// 判断是否存在, 如果不存在就创建该文件夹*/ - String resFile = "//data//files//apzl_leasing//tmp//WEN"+fmt.format(new Date())+".xml"; + 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); - String insertSql="INSERT INTO LB_XZW_LOG(ID_,NAME_) VALUES('2','成功')"; - Sqlca.executeSQL(insertSql); + /** * 解析xml, 根据回执信息更新状态 */ @@ -1139,28 +1188,39 @@ public class VoucherSysJointNCServiceImpl implements VoucherSysJointNCService { //后面对回执结果做判断,然后改变导入状态就行了 if(null != resSuc){ if(resSuc.equals("N")){ - logger.info("导入失败"); + logger.info("导入失败"); + // 导入失败, 将本次在明细表中存储的数据删除 + deleteSql = "DELETE FROM NCXML_DETAIL_RECORDS WHERE BATCH='"+batch+"' AND XML_TYPE = '"+type+"'"; + // 导入失败, 将失败数据记录入总记录表 + insertSql = "INSERT INTO NCXML_TOTAL_RECORDS(ID_,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(deleteSql); + Sqlca.executeSQL(insertSql); }else if(resSuc.equals("Y")){ logger.info("导入成功"); - /*sql="UPDATE "+tableName+" SET FLAG = '1' WHERE flag <> '1'"; - updSql = new SqlObject(sql); - Sqlca.executeSQL(updSql);*/ - List list1 = root.elements(); - for (Element element : list1) { - List list = element.elements(); - for (Element el : list) { + 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)) { - bdocid = el.element("bdocid").getStringValue();// xml回执id - resultdescription = el.element("resultdescription").getStringValue();// 错误信息 - //sql=" UPDATE "+tableName+" SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' "; - sql=" UPDATE "+tableName+" SET FLAG='2',ERR_DESCRIBE='"+resultdescription+"' WHERE BUILLID='"+bdocid+"' "; - //updSql = new SqlObject(sql); - Sqlca.executeSQL(sql); - logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+sql); + 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_,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,CREATETIME) VALUES('"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+failed_count+"','"+formatter2.format(new Date())+"')"; + Sqlca.executeSQL(insertSql1); }else{ logger.info("出现未知错误"); }