天天看點

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

    }

}

繼續閱讀