天天看点

与NC对接传输凭证等数据, xml格式文件传输1.  生成xml, 记录并调用传输方法2. 执行传输的方法:3. 读取properties配置文件方法类

1.  生成xml, 记录并调用传输方法

    public String sendVoucherData(JBOTransaction tx) {

        String ss = DOM4JcreateToVoucher();

        return ss;

    }

    private static String DOM4JcreateToVoucher(){

        // 定义事物

        JBOTransaction tx=null;

        Transaction Sqlca = null;

        String returns="true";

        // 获取配置文件的输入流

        FileInputStream in=null;

    try {

        // 定义全局对象

        tx= JBOFactory.createJBOTransaction();

        Sqlca = Transaction.createTransaction(tx);

        Map<String, String> map = new HashMap<String, String>(); 

        //创建Properties对象

        //Properties properties = new Properties();

        //获取配置文件输入流

        //in = new FileInputStream("/vouchers.properties");

        //in = new FileInputStream("//data/config//vouchers.properties");

        //通过Properties对象读取配置文件

        //properties.load(in);

        // 获取配置文件数据

        // 账套

        String account = VouchersPropertiesUtil.get("voucher_account");

        // 单据类型

        String billtype = VouchersPropertiesUtil.get("voucher_billtype");

        // 集团编码

        String groupcode = VouchersPropertiesUtil.get("voucher_groupcode");

        // 系统参数

        String isexchange = VouchersPropertiesUtil.get("voucher_isexchange");

        // 接收方

        String receiver = VouchersPropertiesUtil.get("voucher_receiver");

        // 外系统编码

        String sender = VouchersPropertiesUtil.get("voucher_sender");

        // 系统参数

        String replace = VouchersPropertiesUtil.get("voucher_replace");

        // 凭证类别

        String pk_vouchertype = VouchersPropertiesUtil.get("voucher_pk_vouchertype");

        // 来源系统

        String pk_system = VouchersPropertiesUtil.get("voucher_pk_system");

        // 凭证类型值

        String voucherkind = VouchersPropertiesUtil.get("voucher_voucherkind");

        // 核算账簿

        String pk_accountingbook = VouchersPropertiesUtil.get("voucher_pk_accountingbook");

        // 制单人

        String pk_prepared = VouchersPropertiesUtil.get("voucher_pk_prepared");

        // 所属组织

        String pk_org = VouchersPropertiesUtil.get("voucher_pk_org");

        // 所属集团

        String pk_group = VouchersPropertiesUtil.get("voucher_pk_group");

        // 币种

        String pk_currtype = VouchersPropertiesUtil.get("voucher_pk_currtype");

        // 传输xml文件存放路径

        String LOCALHOST_URL = VouchersPropertiesUtil.get("LOCALHOST_URL");

        // xml文件头

        Document document=null; 

        // 生成的xml文件路径

        File file=null;                

        // 输出对象

        XMLWriter writer=null;            

        // 记录表类别

        String type="voucher";    

        // xml主键id

        String uuid="";        

        // 获取科目id

        String SUBJECT_ID=null; 

        // 会计期间/年

        String ACC_YEAR = null; 

        // 会计期间/月

        String ACC_MONTH = null;    

        // 制单日期

        String timeAll = "";    

        // 摘要

        String f5="";                    

        // 定义新增语句对象

        String insertSql="";

        // 用于文件名凭借

        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 id,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+"') AND DATE_FORMAT(f1,'%Y-%m')>DATE_FORMAT('2019-02-11','%Y-%m')";

        List<Map<String, String>>  list = DataOperatorUtil.getDataBySql(Sqlca, sql, null);// 将所有凭证号封装到list集合中

        // v8视图总数据量/ xml中生成的总条数

        int a = list.size();     

        // 设置当前xml生成的条数

        int b=1000;        

        // 获取生成xml文件的数量, 最大循环值=c+1

        int c = (int)(a / b);             

         for (int i = 0; i <=c && a>0; i++) {  

             // 批次号

             String batch="";

             // 记录当前批次传输总量

             int count=0;        

             // 记录历史批次号

             List<String> batchList= new ArrayList<String>();

             document = DocumentHelper.createDocument(); // 创建Document对象

                 // 设置xml头

                Element root = document.addElement("ufinterface");            

                        root.addAttribute("account", account);                

                        root.addAttribute("billtype", billtype);

                        root.addAttribute("businessunitcode", "develop");

                        root.addAttribute("filename", "");

                        root.addAttribute("groupcode", groupcode);

                        root.addAttribute("isexchange", isexchange);

                        root.addAttribute("orgcode", "");

                        root.addAttribute("receiver", receiver);

                        root.addAttribute("replace", replace);

                        root.addAttribute("roottag", "");

                        root.addAttribute("sender", sender);

             for (int x = i * b; x < (i + 1) * b && x < a; x++) {            // 决定当前xml生成的数据量

                 // 获取凭证编号

                 String F3=list.get(x).get("f3");

                 String F60=list.get(x).get("f60");

                 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<Map<String, String>> v1 = DataOperatorUtil.getDataBySql(Sqlca,sql1,map);

                 // 获取v8表贷方数据

                 String sql2 = "SELECT f1,f5,f6,f8,f15,f51,f52,f59,f60,f65,f73,f74,f75 FROM VOUCHER_V8 WHERE F3=:F3 AND ENTRYDC='-1'";

                 List<Map<String, String>> v2 = DataOperatorUtil.getDataBySql(Sqlca,sql2,map);

                 // 获取v8表公共信息

                 for (Map<String, String> map2 : v2) {

                     //OWNED_COMPANY=map2.get("f49"); // 本方id

                     ACC_YEAR = map2.get("f51");    // 会计期间/年

                     ACC_MONTH =map2.get("f52");    // 会计期间/月

                     timeAll =map2.get("f1");        // 制单时间

                 }

                 // 获取本方信息

                 //BizObject own = JBOFactory.createBizObjectQuery(OWN_INFO.CLASS_NAME, "id=:OWNED_COMPANY").setParameter("OWNED_COMPANY", OWNED_COMPANY).getSingleResult(false);

                 //uuid=UUID.randomUUID().toString().replace("-", "");

                 uuid=list.get(x).get("id");

                 Element voucher = root.addElement("voucher");

                     voucher.addAttribute("id",uuid);

                    Element voucherHead = voucher.addElement("voucher_head");

                        Element pkVoucher = voucherHead.addElement("pk_voucher");// 凭证主键/非空

                            // pkVoucher.setText(uuid);

                            pkVoucher.setText("");

                        Element pk_vouchertype1 = voucherHead.addElement("pk_vouchertype");// 凭证类别, 默认01/非空

                            pk_vouchertype1.setText(pk_vouchertype);//----------------------------------------------------------------------

                        Element year = voucherHead.addElement("year");// 会计年度/非空

                            year.setText((ACC_YEAR==null)?"":ACC_YEAR);

                        Element pk_system1 = voucherHead.addElement("pk_system");// 来源系统/非空

                            pk_system1.setText(pk_system);//----------------------------------------

                        Element voucherkind1 = voucherHead.addElement("voucherkind");// 凭证类型值/非空

                            voucherkind1.setText(voucherkind);

                        Element pk_accountingbook1 = voucherHead.addElement("pk_accountingbook");// 核算核算账簿/非空

                            pk_accountingbook1.setText(pk_accountingbook);

                        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("");

                        Element attachment = voucherHead.addElement("attachment");// 附单据数/可空

                            attachment.setText("");

                        Element prepareddate = voucherHead.addElement("prepareddate");// 制单日期/非空

                            prepareddate.setText(timeAll);//---------------------------------------------------    

                        Element pk_prepared1 = voucherHead.addElement("pk_prepared");// 制单人/非空

                            pk_prepared1.setText(pk_prepared);//-------------------------------------------

                        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("");//--------------------------

                        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_org1 = voucherHead.addElement("pk_org");// 所属组织/非空

                            pk_org1.setText(pk_org);//---------------------------------------------------------

                        Element pk_org_v = voucherHead.addElement("pk_org_v");// 所属组织版本/可空

                            pk_org_v.setText("");//-------------------------------------------------------    

                        Element pk_group1 = voucherHead.addElement("pk_group");// 所属集团 如果不输集团取当前登陆集团

                            pk_group1.setText(pk_group);

                        Element details = voucherHead.addElement("details");

                            // 循环借方集合, 按照v8表数据中生成相应的借方item

                            for (Map<String, String> v8Lend : v1) {

                                String f7 = v8Lend.get("f7");

                                double money = Double.parseDouble(f7);

                                if(money >0) {

                                    // 根据科目id, 获取当前数据对应的科目信息

                                    SUBJECT_ID=v8Lend.get("f6");

                                    f5 = v8Lend.get("f5");

                                    BizObject subject = JBOFactory.createBizObjectQuery(LV_STACTS_CONFIG.CLASS_NAME, "ID=:ID").setParameter("ID", SUBJECT_ID).getSingleResult(false);

                                    // 获取辅助核算id

                                    String ids=subject.getAttribute("AUXILIARY_TYPE").getString();

                                    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(F3+"-"+f5+"66");    

                                    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()+"");

                                    debitquantity1.setText("");

                                    Element debitamount1 = item1.addElement("debitamount");// 原币借方金额/可空

                                    debitamount1.setText(f7);//--------------------------------------------------                    

                                    Element localdebitamount1 = item1.addElement("localdebitamount");// 本币借方金额/可空

                                    localdebitamount1.setText(f7);//-------------------------------------------                    

                                    Element groupdebitamount1 = item1.addElement("groupdebitamount");// 集团本币借方金额/可空

                                    groupdebitamount1.setText("");//-----------------------------------------                

                                    Element globaldebitamount1 = item1.addElement("globaldebitamount");// 全局本币借方金额/可空

                                    globaldebitamount1.setText("");//-------------------------------------------                    

                                    Element pk_currtype1 = item1.addElement("pk_currtype");// 币种/非空

                                    pk_currtype1.setText(pk_currtype);//            

                                    Element pk_accasoa1 = item1.addElement("pk_accasoa");// 科目/非空

                                    pk_accasoa1.setText((subject.getAttribute("SUBJECTS_CODE").getString()==null)?"":subject.getAttribute("SUBJECTS_CODE").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(ids.contains("185b89e22dba458491306a647468d2a5")) {

                                        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("APZL0201000000");

                                        pk_Checkvalue1.setText((v8Lend.get("f65")==null)?"APZL0201000000":v8Lend.get("f65"));

                                    }

                                    // 合同号辅助核算

                                    if(ids.contains("1869733a51f1486a97df402e8d899980")) {

                                        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("ap0000");

                                        pk_Checkvalue2.setText((v8Lend.get("f60")==null)?"ap0000":v8Lend.get("f60"));

                                    }

                                    // 主营类型辅助核算

                                    if(ids.contains("1c981e6e47c24d069f9a2e08db819c4c")) {

                                        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(ids.contains("3f0177c4295d4ed99ef18adb37c3e79f")) {

                                        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(ids.contains("5d241cc0d2794ef7943df15c5f97976a")) {

                                        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<String, String> v8loan : v2) {

                                String f8 = v8loan.get("f8");

                                double money = Double.parseDouble(f8);

                                if(money>0) {

                                    // 根据科目id, 获取当前数据对应的科目信息

                                    SUBJECT_ID=v8loan.get("f6");

                                    BizObject subject = JBOFactory.createBizObjectQuery(LV_STACTS_CONFIG.CLASS_NAME, "ID=:ID").setParameter("ID", SUBJECT_ID).getSingleResult(false);

                                    // 获取辅助核算id

                                    String ids=subject.getAttribute("AUXILIARY_TYPE").getString();

                                    Element item2 = details.addElement("item"); // 贷方金额

                                    Element creditquantity2 = item2.addElement("creditquantity");// 贷方数量 可空

                                    creditquantity2.setText(v2.size()+"");

                                    Element creditamount2 = item2.addElement("creditamount"); // 原币贷方金额 可空

                                    creditamount2.setText(f8);

                                    Element localcreditamount2 = item2.addElement("localcreditamount");// 本币贷方金额 可空

                                    localcreditamount2.setText(f8);

                                    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(F3+"-"+f5+"66");

                                    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_CODE").getString()==null)?"":subject.getAttribute("SUBJECTS_CODE").getString());

                                    // pk_accasoa2.setText("");

                                    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(ids.contains("185b89e22dba458491306a647468d2a5")) {

                                        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("APZL0201000000");

                                            pk_Checkvalue1.setText((v8loan.get("f65")==null)?"APZL0201000000":v8loan.get("f65"));

                                        }

                                    }

                                    // 合同号辅助核算

                                    if(ids.contains("1869733a51f1486a97df402e8d899980")) {

                                        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("ap0000");

                                        pk_Checkvalue2.setText((v8loan.get("f60")==null)?"ap0000":v8loan.get("f60"));

                                    }

                                    // 主营类型辅助核算

                                    if(ids.contains("1c981e6e47c24d069f9a2e08db819c4c")) {

                                        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(ids.contains("3f0177c4295d4ed99ef18adb37c3e79f")) {

                                        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(ids.contains("5d241cc0d2794ef7943df15c5f97976a")) {

                                        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("");

                                }

                            }

                    // 根据id查询记录表是否已经记录过, 没有记录过使用当前批次号记录, 如果已经记录了, 则不操作

                    BizObject record=JBOFactory.createBizObjectQuery(NCXML_DETAIL_RECORDS.CLASS_NAME, "BILLID='"+uuid+"'").getSingleResult(false);

                    if(record==null || "".equals(record)) {

                        // 有新数据, 当前批次批次号为空才会生成

                        if("".equals(batch)) {

                            batch = SerialNumberUtil.getVoucherPCNumber(Sqlca);

                        }

                        // 等于null说明新数据, 新增入记录表

                        insertSql="INSERT INTO NCXML_DETAIL_RECORDS(BILLID,XML_TYPE,TABLE_NUM,FLAG,CREATE_TIME,BATCH) VALUES('"+uuid+"','"+type+"','"+F3+"','1','"+year_month_days+"','"+batch+"')";

                        Sqlca.executeSQL(insertSql);

                        logger.info("凭证记录表插入语句: "+insertSql);

                        count++;

                    }else {

                        String updSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='1',ERR_DESCRIBE=null,CREATE_TIME='"+year_month_days+"' WHERE BILLID='"+uuid+"' AND XML_TYPE= '"+type+"'";

                        Sqlca.executeSQL(updSql);

                        logger.info("旧批次号记录: "+updSql);

                        String batch1= record.getAttribute("BATCH").getString();

                        if(batchList.indexOf(batch1) == -1) {

                            batchList.add(batch1);

                        }

                    }

             }

                 String URL=LOCALHOST_URL+"APleasing_VOUCHER_"+year_month_day+".xml";

                  //String URL="D:\\voucherXml_NC\\APleasing_VOUCHER_"+year_month_day+".xml";

                 file=new File(URL);

                 System.out.println("存放传输文件路径: "+file);

                 writer = new XMLWriter(new FileOutputStream(file), OutputFormat.createPrettyPrint());

                 writer.setEscapeText(false);// 字符是否转义,默认true

                 writer.write(document);

                 writer.close();

                 InterActionToNC(Sqlca,URL,type,batch,count,batchList);

                 Sqlca.commit();

            }

        } catch (Exception e) {

                logger.info("凭证xml传输失败");

                try {

                    Sqlca.rollback();

                } catch (JBOException e1) {

                    e1.printStackTrace();

                }

                e.printStackTrace();

            returns="false";

        }finally {

            if(Sqlca!=null) {

                try {

                    Sqlca.disConnect();

                } catch (JBOException e) {

                    e.printStackTrace();

                }

            }

        }

        return returns;

    }

2. 执行传输的方法:

    public static void InterActionToNC(Transaction Sqlca,String inputURL,String type,String batch,int count,List<String> batchList) throws Exception {

            String updSql="";        // 更新历史记录

            String updateSql = "";    // 更新sql对象

            String insertSql = "";    // 新增SQL对象

            String resultcode= "";     // 单条返回结果

            String bdocid = "";     // xml回执id

            String resultdescription=""; //错误信息

            String NC_URL = VouchersPropertiesUtil.get("NC_URL");// ip地址及端口号

            String account = VouchersPropertiesUtil.get("account");

            String groupcode = VouchersPropertiesUtil.get("groupcode");

            String RECEIVE_URL = VouchersPropertiesUtil.get("RECEIVE_URL"); //回执信息存放路径

            //String url = "http://172.16.0.88:9990/service/XChangeServlet?account=8&groupcode=06";

            String url = NC_URL+"service/XChangeServlet?account="+account+"&groupcode="+groupcode;

            URL realURL = new URL(url);

            HttpURLConnection connection = (HttpURLConnection)realURL.openConnection();

            connection.setDoOutput(true);

            connection.setRequestProperty("Content-type", "text/xml");

            connection.setRequestMethod("POST");

            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();

            InputStream inputStream = connection.getInputStream();  

            InputStreamReader isr = new InputStreamReader(inputStream,"UTF-8");

            BufferedReader bufreader = new BufferedReader(isr);

            String xmlString = "";

            String b=null;

            while((b=bufreader.readLine()) !=null) {

                xmlString+=b;

                xmlString+="\r\n";

            }

            System.out.println(xmlString);

            bufreader.close();

            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");

            // 回执信息存放路径

            String resFile = RECEIVE_URL+"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));

            // 将回执信息转化为xml

            transformer.transform(source,result);

            SAXReader sr = new SAXReader();

            Document doc = sr.read(new File(resFile));

            Element  root= doc.getRootElement();

            // 根据successful判断是否有失败的, 有则为N, 全部成功为Y

            String resSuc = root.attributeValue("successful");

            // 创建

            if(null != resSuc){

                // 状态为N说明本批次传输有失败的

                if("N".equals(resSuc)){

                    // 失败记录数

                    int failed_count=0;    

                    List<Element> list = root.elements();

                    // 遍历list, 获取所有回执信息

                    System.out.println(list.size());

                    for (Element element : list) {

                        String names = element.getName();

                        String value = element.getStringValue();

                            // 获取单条回执信息的详细信息

                            List<Element> list2 = element.elements();

                            for (Element el : list2) {

                                // 获取标签名

                                String s = el.getName();

                                // xml回执id

                                if("bdocid".equals(s)) {

                                    bdocid = el.getStringValue();                            

                                }

                                // 回执状态: 1=成功, <>1 =失败

                                if("resultcode".equals(s)) {

                                    resultcode = el.getStringValue();

                                }

                                // 回执信息

                                if("resultdescription".equals(s)) {

                                    resultdescription = el.getStringValue();

                                }

                            }   

                            // 判断, 若失败, 更新错误录入明细表

                            if(!"1".equals(resultcode)) {

                                // 如果回执状态不等于1, 说明有误, 更新到记录字表并记录错误信息

                                updateSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE='"+resultdescription+"' WHERE BILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'";

                                Sqlca.executeSQL(updateSql);

                                logger.info("根据回执信息, 修改传输失败状态, 记录错误信息"+updateSql);

                                BizObject old_record=JBOFactory.createBizObjectQuery(NCXML_DETAIL_RECORDS.CLASS_NAME, "BILLID='"+bdocid+"' AND BATCH <> '"+batch+"' AND XML_TYPE= '"+type+"'").getSingleResult(false);

                                if(old_record ==null) {

                                    failed_count++;

                                }

                            }

                    }

                    // 判断集合为否为null, 不为空遍历集合, 获取旧数据的批次号

                    if(batchList != null || batchList.size()>0) {

                        // 定义当前批次, 错误记录数

                        for (String old_batch : batchList) {

                            int con=0;

                            // 查询集合, 获取旧批次的失败总数

                            String selectSql="SELECT BATCH,COUNT(BILLID) CON FROM ncxml_detail_records WHERE flag !=1 AND xml_type='"+type+"' AND BATCH='"+old_batch+"' GROUP BY BATCH";

                            List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, selectSql,null);

                            if(dataList!=null && dataList.size()>0) {

                                con=Integer.valueOf(dataList.get(0).get("CON"));

                            }

                            if(con==0) {

                                updateSql="UPDATE NCXML_TOTAL_RECORDS SET FLAG_='Y',FAILED_COUNT='0',CREATETIME='"+formatter2.format(new Date())+"' WHERE XML_TYPE='"+type+"' AND BATCH='"+old_batch+"'";

                            }else {

                                updateSql="UPDATE NCXML_TOTAL_RECORDS SET FAILED_COUNT='"+con+"',CREATETIME='"+formatter2.format(new Date())+"' WHERE XML_TYPE='"+type+"' AND BATCH='"+old_batch+"'";

                            }

                            Sqlca.executeSQL(updateSql);

                        }

                    }

                    // 如果count不等于0, 说明有新数据, 判断是否全部传输成功做相应新增操作

                    if(count != 0 ) {

                        int con=0;

                        // 查询本批次错误数据

                        String selectSql="SELECT BATCH,COUNT(BILLID) CON FROM ncxml_detail_records WHERE flag !=1 AND xml_type='"+type+"' AND BATCH='"+batch+"' GROUP BY BATCH;";

                        List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, selectSql,null);

                        // 如果有数据, 统计, 失败记录

                        if(dataList!=null && dataList.size()>0) {

                            con=Integer.valueOf(dataList.get(0).get("CON"));

                        }

                        // 如果con等于0, 说明没有失败记录, 插入成功记录

                        if(con==0) {

                            insertSql = "INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,ERR_DESCRIBE,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','Y','"+count+"','"+con+"','导入成功 !','"+formatter2.format(new Date())+"')";

                            Sqlca.executeSQL(insertSql);

                            logger.info("本批次传输成功!");

                        // 如果con不等于0, 记录含失败记录的数据如总表

                        }else {

                            insertSql = "INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,ERR_DESCRIBE,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','"+con+"','含失败记录 !','"+formatter2.format(new Date())+"')";

                            Sqlca.executeSQL(insertSql);

                            logger.info("本批次包含失败数据 !");

                        }

                    }

                // 状态为Y表示, 本次导入全部成功

                }else if(resSuc.equals("Y")){

                    logger.info("导入成功");

                    // count不等于0说明有新数据, 否则就只有旧的错误数据, 不需要新增

                    if(count != 0 ) {

                        // 将本次导入信息记录入记录总表

                        String insertSql1="INSERT INTO NCXML_TOTAL_RECORDS(ID,BATCH,XML_TYPE,FLAG_,COUNT_,FAILED_COUNT,ERR_DESCRIBE,CREATETIME) VALUES('"+UUID.randomUUID().toString().replace("-", "")+"','"+batch+"','"+type+"','"+resSuc+"','"+count+"','0','导入成功 !','"+formatter2.format(new Date())+"')";

                        Sqlca.executeSQL(insertSql1);

                    }

                    // 判断集合为否为null, 不为空遍历集合, 获取旧数据的批次号

                    if(batchList != null) {

                        // 定义当前批次, 错误记录数

                        for (String old_batch : batchList) {

                            int con=0;

                            // 查询集合, 获取旧批次的失败总数

                            String selectSql="SELECT BATCH,COUNT(BILLID) CON FROM ncxml_detail_records WHERE flag !=1 AND xml_type='"+type+"' AND BATCH='"+old_batch+"' GROUP BY BATCH;";

                            List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, selectSql,null);

                            if(dataList!=null && dataList.size()>0) {

                                con=Integer.valueOf(dataList.get(0).get("CON"));

                            }

                            if(con==0) {

                                updateSql="UPDATE NCXML_TOTAL_RECORDS SET FLAG_='Y',FAILED_COUNT='0',CREATETIME='"+formatter2.format(new Date())+"' WHERE XML_TYPE='"+type+"' AND BATCH='"+old_batch+"'";

                            }else {

                                updateSql="UPDATE NCXML_TOTAL_RECORDS SET FAILED_COUNT='"+con+"',CREATETIME='"+formatter2.format(new Date())+"' WHERE XML_TYPE='"+type+"' AND BATCH='"+old_batch+"'";

                            }

                            Sqlca.executeSQL(updateSql);

                        }

                    }

                }else{

                    logger.info("出现未知错误"); 

                }

            }else{

                logger.info("未找到successful属性");

            }

    }

3. 读取properties配置文件方法类

public class VouchersPropertiesUtil {

    // 定义全局map, 存储配置文件信息

    private static Map<String, String> attributes;

    public static void load() {

        attributes = new ConcurrentHashMap<String, String>();

        // 创建Properties对象

        Properties prop = new Properties();

        try {

            // 加载根路径配置文件; 本地:config, 服务器在classes路径下

            prop.load(VouchersPropertiesUtil.class.getResourceAsStream("/vouchers.properties"));

            // 遍历结果, 封装如map集合中

            for(Entry<Object, Object> entry : prop.entrySet()) {

                // 判断是否有null值

                if(entry.getKey() == null || entry.getValue() == null) {

                    continue;

                }

                // 没有null值, put入map集合

                attributes.put(entry.getKey().toString(), entry.getValue().toString());

            }

        } catch (IOException e) {

            e.printStackTrace();

            ARE.getLog().error("init QuartzPropertiesUtil info failed");

        }

        ARE.getLog().info("init QuartzPropertiesUtil info success");

    }

    public static void destroy() {

        if(attributes != null) attributes.clear();

    }

    public static String get(String propName) {

        if(attributes == null) load();

        return attributes.get(propName);

    }

}

继续阅读