package com.yaochen.boss.commons;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import com.ycsoft.beans.core.bank.CBankAgree;
import com.ycsoft.beans.core.bank.CBankReturn;
import com.ycsoft.commons.helper.DateHelper;
/**
* 银行回扣文件解析类
* @author Tom
*/
public class BankFileParser {
private final String SPLIT_CHAR = "\\|";
public File[] listBankFiles(String local,String preName){
File file = new File(local);
File[] listFiles = file.listFiles(new DefaultFilenameFilter(preName));
Arrays.sort(listFiles);
return listFiles;
}
public File[] list25BankFiles(String local){
return listBankFiles(local, BankFileUtil.HISTORY_25_SUFFIX);
}
public File[] list26BankFiles(String local){
return listBankFiles(local, BankFileUtil.HISTORY_26_SUFFIX);
}
public File[] list08BankFiles(String local){
return listBankFiles(local, BankFileUtil.HISTORY_08_SUFFIX);
}
public List<CBankAgree> readAndParser26(File bankFile)throws IOException{
List<CBankAgree> bankList = new ArrayList<CBankAgree>();
FileInputStream fis = new FileInputStream(bankFile);
List<String> lines = IOUtils.readLines(fis, "GBK");
for (String line : lines) {
if(StringUtils.isEmpty(line)){
continue;
}
bankList.add(newCBankAgree(line,bankFile.getName()));
}
fis.close();
return bankList;
}
public List<CBankReturn> readAndParser25(File bankFile)throws IOException{
List<CBankReturn> bankList = new ArrayList<CBankReturn>();
FileInputStream fis = new FileInputStream(bankFile);
List<String> lines = IOUtils.readLines(fis, "GBK");
for (String line : lines) {
if(StringUtils.isEmpty(line)){
continue;
}
String[] params = line.split(SPLIT_CHAR);
bankList.add(newCBankReturn(params));
}
fis.close();
return bankList;
}
/**
* 将文件的参数按规定的下标获取参数并构造<code>CBankAgree</code>
*
* @param params
* @return
*/
private CBankAgree newCBankAgree(String line,String fileName){
String[] params = line.split(SPLIT_CHAR);
CBankAgree cba = new CBankAgree();
cba.setB_filename(fileName);
cba.setB_ognb(params[0]);
cba.setB_feid(params[1]);
cba.setB_asnb(params[2]);
cba.setB_name(params[3]);
cba.setB_bkno(params[4]);
cba.setB_acno(params[5]);
cba.setB_sqno(params[6]);
cba.setB_state(params[8]);
cba.setB_wkdt(params[9]);
cba.setFile_detail(line);
return cba;
}
private CBankReturn newCBankReturn(String[] params){
CBankReturn cbr = new CBankReturn();
cbr.setCompany_code(params[0]);
cbr.setBusi_type(params[1]);
cbr.setCust_no(params[2]);
cbr.setQc(params[3]);
cbr.setNeed_fee(Integer.parseInt(params[4]));
cbr.setBank_code(params[5]);
cbr.setBank_account(params[6]);
cbr.setXjfg(params[7]);
cbr.setBank_trans_sn(params[8]);
cbr.setTrans_sn(params[9]);
cbr.setReal_fee(Integer.parseInt(params[10]));
try {
cbr.setTrans_time(DateHelper.parseDate(params[11], "yyyyMMdd"));
} catch (Exception e) {
e.printStackTrace();
}
cbr.setIs_success(params[13]);
return cbr;
}
/**
* 检查数据的完整性
* @param params
* @return
*/
private boolean validParams( String[] params){
// TODO do valid
return false;
}
class DefaultFilenameFilter implements FilenameFilter{
String startWith;
public DefaultFilenameFilter(String startWith){
this.startWith = startWith;
}
public boolean accept(File dir, String name) {
return name.startsWith(startWith);
}
}
}