package com.yaochen.boss.job.unuse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.yaochen.boss.commons.BankFileUtil; import com.yaochen.boss.commons.FtpUtil; import com.yaochen.boss.commons.FtpUtilBuilder; import com.yaochen.boss.job.component.BusiComponent; import com.yaochen.myquartz.Job2; import com.yaochen.myquartz.Job2ExecutionContext; import com.yaochen.myquartz.Task; import com.ycsoft.beans.core.bank.CBankGotodisk; import com.ycsoft.commons.helper.DateHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.core.DataHandler; /** * 创建银行扣费文件 * 任务支持 银行扣款(GO),银行退款两种模式(REFUND), * 为了程序的可读性,强行配置JobType,不使用Spring自动扫描机制 * * @author Tom */ public class CreateBankFeedsJob implements Job2{ private final static Logger logger = LoggerFactory.getLogger(CreateBankFeedsJob.class); private BusiComponent busiComponent; private FtpUtilBuilder ftpBuilder; private String jobType ; public CreateBankFeedsJob(){ } enum JobType{ REFUND, //退款 GO //扣款 } @Override public void execute(Job2ExecutionContext context) throws JobExecutionException { final String fileNo = BankFileUtil.gBankFeeDeductionFileName(); final String filePath = ftpBuilder.getLocalTempPath() + File.separator + fileNo; logger.info("创建银行"+ this.jobType +"文件任务处理 .."); try { DataHandler<CBankGotodisk> myHandler = new DataHandler<CBankGotodisk>() { @Override public void fetchRows(List<CBankGotodisk> results, int fetchCount) throws Exception { new CreateBankFeedsTask(results, filePath).execute(null, null); } }; // 扣款 if(this.jobType.equals(JobType.GO.name())){ busiComponent.saveBankGotodisk(fileNo); busiComponent.queryBankGotodisk(fileNo, myHandler); }else{ // 退款 busiComponent.saveBankRefundtodisk(fileNo); busiComponent.queryBankRefundtoDisk(fileNo, myHandler); } File file = new File(filePath); if(file.exists()){ FtpUtil ftp = ftpBuilder.buildFtpUtil(); ftp.login(); ftp.uploadFile(filePath, ftpBuilder.getRemoteUploadPath()); ftp.logout(); //移除到历史目录 BankFileUtil.moveTo08History(file, ftpBuilder.getLocalHistoryPath()); } } catch (Exception e) { e.printStackTrace(); } } public void setBusiComponent(BusiComponent busiComponent) { this.busiComponent = busiComponent; } public void setFtpBuilder(FtpUtilBuilder ftpBuilder) { this.ftpBuilder = ftpBuilder; } public void setJobType(String jobType) { this.jobType = jobType; } static class CreateBankFeedsTask implements Task{ private List<CBankGotodisk> results; private String bankFile; public CreateBankFeedsTask(List<CBankGotodisk> results, String bankFile){ this.results = results; this.bankFile = bankFile; } @Override public void execute(Job2 parentJob, Job2ExecutionContext context) throws JobExecutionException { Collection<String> lines = new ArrayList<String>(); List<String> transSn = new ArrayList<String>(); for (CBankGotodisk disk : this.results) { lines.add(parserLine(disk)); transSn.add(disk.getTrans_sn()); } FileOutputStream fos = null; try { File file = new File(bankFile); if(!file.exists()){ file.createNewFile(); logger.info("创建文件" + bankFile); } fos = new FileOutputStream(file, true); IOUtils.writeLines(lines, IOUtils.LINE_SEPARATOR, fos, "GBK"); } catch (Exception e) { logger.error("追加文件内容出错", e); }finally{ try { if(null != fos){ fos.close(); } } catch (IOException e) { } } } private String parserLine(CBankGotodisk disk){ StringBuffer sb = new StringBuffer(); sb.append("D301|"); sb.append(disk.getBusi_type()); sb.append("|"); sb.append(disk.getCust_no()); sb.append("|"); sb.append(DateHelper.format(disk.getCreate_time(), "yyyyMMdd")); sb.append("|"); sb.append(substr(disk.getCust_name(), 20)); sb.append("||"); // 用户地址 sb.append(DateHelper.format(disk.getStart_date(), "yyyyMMdd")); sb.append("|"); sb.append(DateHelper.format(disk.getEnd_date(), "yyyyMMdd")); sb.append("|"); sb.append(DateHelper.format(disk.getCreate_time(), "yyyyMMdd")); sb.append("|"); sb.append(disk.getTrans_sn()); sb.append("|"); //sb.append(StringHelper.isEmpty(disk.getBank_trans_sn()) ? "" : disk.getBank_trans_sn()); sb.append("|"); sb.append(disk.getFee()); sb.append("|0|");// 滞纳金 sb.append(disk.getBank_fee_name()); sb.append("|"); sb.append(disk.getBank_account()); sb.append("|"); sb.append(disk.getBank_code()); sb.append("|0|0|0|0|0|0|0|0|0|0"); return sb.toString(); } private String substr(String src, int length){ if(StringUtils.isEmpty(src)){ return ""; } if(src.length() > length){ return src.substring(0, length); }else{ return src; } } } }