700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 与NC对接传输凭证等数据 xml格式文件传输

与NC对接传输凭证等数据 xml格式文件传输

时间:2020-01-21 13:56:06

相关推荐

与NC对接传输凭证等数据  xml格式文件传输

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

/**

* 凭证信息页面NC传输调用此方法

* @param tx

* @return

*/

public String sendVoucherData(JBOTransaction tx) {

String ss = DOM4JcreateToVoucher();

return ss;

}

/**

* 凭证信息xml生成, 每1000条生成一个xml

* @throws Exception

*/

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

pk_Checkvalue1.setText((v8Lend.get("f65")==null)?"APZL000000":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("APZL000000");

pk_Checkvalue1.setText((v8loan.get("f65")==null)?"APZL000000":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);

mit();

}

} 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. 执行传输的方法:

/**

* 像NC传输xml, 获取NC回执xml信息, 根据回执信息更改状态

*/

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"); //回执信息存放路径

/**

* 获取对方post连接

*/

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

/**

* 读取本方生成的xml, 传输到NC

*/

File file = new File(inputURL);

BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());

BufferedInputStream input = new BufferedInputStream(new FileInputStream(file));

int length;

byte[] buffer = new byte[1000];

while ((length = input.read(buffer, 0, 1000)) != -1) {

out.write(buffer, 0, length);

}

input.close();

out.close();

/**

* 获取NC回执信息

*/

InputStream inputStream = connection.getInputStream();

InputStreamReader isr = new InputStreamReader(inputStream,"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();

/**

* 将获取到的回执信息生成本地xml

*/

Document resDoc = DocumentHelper.parseText(xmlString);

TransformerFactory tFactory = TransformerFactory.newInstance();

Transformer transformer = tFactory.newTransformer();

DocumentSource source = new DocumentSource(resDoc);

transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

//设置文档的换行与缩进

transformer.setOutputProperty(OutputKeys.INDENT, "YES");

// 文件拼接名称

SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");

// 表数据记录日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// 回执信息存放路径

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

/**

* 解析xml, 根据回执信息更新状态

*/

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

}

}

/*// 查询不是本批次号的bdocid, 如果有值说明是之前传输错误的数据

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 || !"".equals(old_record)) {

// 如果状态为1, 说明已经变更, 传输成功. 执行upddate操作, 变更记录状态

if(resultcode=="1" || "1".equals(resultcode)) {

updSql=" UPDATE NCXML_DETAIL_RECORDS SET FLAG='"+resultcode+"',ERR_DESCRIBE=null,CREATE_TIME='"+formatter2+"' WHERE BILLID='"+bdocid+"' AND XML_TYPE= '"+type+"'";

}

}*/

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

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配置文件方法类

/**

* 读取配置文件

* @author xiezhiwen

*

*/

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

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。