Skip to content

读文件之汇总读

quhongwei edited this page Mar 28, 2018 · 1 revision

在读取文件过程中会累加配置的汇总字段, 一般用于校验文件总笔数,总金额是否正确

一:文件内容

总笔数:2|总金额:22.10
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
seq_0|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_1|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
OFDCFEND|20131109|22.10

二:数据定义模板

{
 	"head":[
	     "totalCount|总笔数|Required|Integer",
	     "totalAmount|总金额|BigDecimal|Required"
 	],
 	"body":[
	     "seq|流水号",
	     "instSeq|基金公司订单号|Required",
	     "gmtApply|订单申请时间|Date:yyyy-MM-dd HH:mm:ss",
	     "date|普通日期|Date:yyyyMMdd",
	     "dateTime|普通日期时间|Date:yyyyMMdd HH:mm:ss",
	     "applyNumber|普通数字|BigDecimal",
	     "amount|金额|BigDecimal",
	     "age|年龄|Integer",
	     "longN|长整型|Long",
	     "bol|布尔值|Boolean",
	     "memo|备注"
    ],
    "tail": [
    	"fileEnd|数据文件尾部字符",
    	"date|普通日期|Date:yyyyMMdd",
    	"tailAmount|总金额|BigDecimal"
    ],
    "protocol":"DE",
    "summaryColumnPairs":[
    	"totalAmount|amount",
    	"tailAmount|amount"
    ]
}

三:协议布局模板

DE组件内置协议

四:代码示例

FileConfig config = new FileConfig(“文件路径”, "数据定义模板路径", new StorageConfig("nas"));
config.setSummaryEnable(true); // 开启汇总字段汇总功能
FileReader fileReader = FileFactory.createReader(config);
try {    
      Map<String, Object> head = fileReader.readHead(HashMap.class);
      BigDecimal  totalAmount = (BigDecimal)head.get("totalAmount");
      Map<String, Object> tail = fileReader.readTail(HashMap.class);
      BigDecimal  tailAmount = (BigDecimal)tail.get("tailAmount");
      Map<String, Object> row = null;
      while (null != (row = fileReader.readRow(HashMap.class)) {
         // 处理业务
     }
     Summary  summary = fileReader.getSummary();
     for (SummaryPair  pair : summary.getHeadSummaryPairs()) { 
          BigDecimal  summaryValue = pair.getSummaryValue(); //数据字段汇总后的值
          BigDecimal headValue = pair.getHeadValue(); //文件头中的汇总值
          pair.isSummaryEquals(); // 汇总的值是否一致
     }
      
     for (SummaryPair  pair : summary.getTailSummaryPairs()) { 
         BigDecimal  summaryValue = pair.getSummaryValue(); //数据字段汇总后的值
         BigDecimal tailValue = pair.getTailValue(); //文件尾中的汇总值
         pair.isSummaryEquals(); // 汇总的值是否一致
      }
} finally {
    fileReader.close();
}
Clone this wiki locally