设为首页 收藏本站
查看: 1802|回复: 0

[经验分享] FTP下载和解析

[复制链接]

尚未签到

发表于 2016-6-8 10:42:50 | 显示全部楼层 |阅读模式
FTP服务器地址:192.168.0.80
文件名称:ZJDX_BANK_POS_TRADE_DETAIL_|(yyyyMMdd)|_*
临时文件路径:D:\data\ABC\|date|
FTP服务器文件路径:\data\ABC

package com.skysz.app.cmcs.zjt.bankpos.task;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import com.skysz.app.cmcs.zjt.bankpos.domain.TradeDetailPos;
import com.skysz.app.cmcs.zjt.bankpos.service.TradeDetailPosService;
import com.skysz.framework.action.ActionResponse;
import com.skysz.framework.action.ResponseType;
import com.skysz.framework.file.FileUtils;
import com.skysz.framework.ftpConfig.domain.FTPParam;
import com.skysz.framework.ftpConfig.domain.FtpSolution;
import com.skysz.framework.ftpConfig.domain.FtpSolutionLine;
import com.skysz.framework.ftpConfig.service.FtpSolutionService;
import com.skysz.framework.schedule.Task;
import com.skysz.framework.utils.CollectionUtils;
import com.skysz.framework.utils.StringUtils;
import com.skysz.framework.utils.date.DateFormator;
import com.skysz.framework.utils.date.DateUtils;
public class TradeDetailPosTask extends Task {
public static final String SEPARATOR = "\\|"; // 分割符
protected TradeDetailPosService<TradeDetailPos> tradeDetailPosService;
protected FtpSolutionService<FtpSolution> ftpSolutionService;
public void setTradeDetailPosService(
TradeDetailPosService<TradeDetailPos> tradeDetailPosService) {
this.tradeDetailPosService = tradeDetailPosService;
}
public void setFtpSolutionService(
FtpSolutionService<FtpSolution> ftpSolutionService) {
this.ftpSolutionService = ftpSolutionService;
}
@Override
public ActionResponse task(final String... arg0) {
return TradeDetailPosTask.this.taskOperate(arg0);
}
public ActionResponse taskOperate(String... param) {
ActionResponse ar = new ActionResponse(ResponseType.FAILURE);
TradeDetailPosTaskForABC abc = new TradeDetailPosTaskForABC(ftpSolutionService,tradeDetailPosService);
ar = abc.task(param);
if (!ar.getResponseType().equals(ResponseType.SUCCESS)) {
return ar;
}
TradeDetailPosTaskForCCB ccb = new TradeDetailPosTaskForCCB(ftpSolutionService,tradeDetailPosService);
ar = ccb.task(param);
if (!ar.getResponseType().equals(ResponseType.SUCCESS)) {
return ar;
}
TradeDetailPosTaskForICBC icbc = new TradeDetailPosTaskForICBC(ftpSolutionService,tradeDetailPosService);
ar = icbc.task(param);
if (!ar.getResponseType().equals(ResponseType.SUCCESS)) {
return ar;
}
ar.setResponseType(ResponseType.SUCCESS);
return ar;
}
public String loginFtpAndDownload(String ftp_code, FTPParam param) {
return this.ftpSolutionService.operate(ftp_code, param);
}
/**
* 获取配置的ftp配置信息
*
* @param ftp_code
* @return
*/
public FtpSolutionLine getFtpConfig(String ftp_code) {
List<FtpSolutionLine> list = this.tradeDetailPosService
.findByFTPCode(ftp_code);
if (!CollectionUtils.isEmpty(list)) {
return list.get(0);
}
return null;
}
/**
* 解析下载后的文件
*
* @author zhuzj
* @param filePath
*            下载文件的存放路径(此路径必须包含"|date|",具体请看FtpSolutionService里面operate方法实现)
* @param date 子目录
* @return
*/
public List<String[]> analysisFileByDownload(String filePath) {
List<String[]> tdpList = new ArrayList<String[]>();
String path = filePath.replace("|date|", DateUtils.toString(DateUtils.now(),DateFormator.YEAR_MONTH_DAY));
File file = new File(path);
// 得到下载目录下的所有文件名
String[] fileNames = file.list();
BufferedReader bufReader = null;
InputStreamReader isr = null;
try {
for (int i = 0; i < fileNames.length; i++) {
// 得到要读取的文件完整路径
String realPath = path + FileUtils.getFileSeparator()
+ FileUtils.getFileSeparator() + fileNames;
isr = new InputStreamReader(new FileInputStream(realPath));
bufReader = new BufferedReader(isr);
while (bufReader.ready()) {
// 1. 得到每一条数据
String dataLine = bufReader.readLine();
// log.info("================"+dataLine+"============================");
String[] dataArray = StringUtils.split(dataLine, SEPARATOR);
// 3.验证
tdpList.add(dataArray);
}
}
} catch (Exception e) {
log.info("--------------------解析文件异常---------------------");
}
return tdpList;
}
}



package com.skysz.app.cmcs.zjt.bankpos.task;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.skysz.app.cb.bank.domain.CbBank;
import com.skysz.app.cmcs.zjt.bankpos.domain.TradeDetailPos;
import com.skysz.app.cmcs.zjt.bankpos.lock.TradeDetailPosLock;
import com.skysz.app.cmcs.zjt.bankpos.lock.TradeDetailPosLockEntity;
import com.skysz.app.cmcs.zjt.bankpos.service.TradeDetailPosService;
import com.skysz.framework.action.ActionResponse;
import com.skysz.framework.action.ActionUtils;
import com.skysz.framework.action.ResponseType;
import com.skysz.framework.ftpConfig.domain.FTPParam;
import com.skysz.framework.ftpConfig.domain.FtpSolution;
import com.skysz.framework.ftpConfig.domain.FtpSolutionLine;
import com.skysz.framework.ftpConfig.service.FtpSolutionService;
import com.skysz.framework.lock.ActionLockCallback;
import com.skysz.framework.lock.Lock;
import com.skysz.framework.lock.LockHandler;
import com.skysz.framework.utils.CollectionUtils;
import com.skysz.framework.utils.StringUtils;
import com.skysz.framework.utils.date.DateUtils;
public class TradeDetailPosTaskForABC extends TradeDetailPosTask {
private final static String FTP_CODE = "ftpForABC";
public TradeDetailPosTaskForABC() {
}
public TradeDetailPosTaskForABC(
FtpSolutionService<FtpSolution> ftpSolutionService,
TradeDetailPosService<TradeDetailPos> tradeDetailPosService) {
this.ftpSolutionService = ftpSolutionService;
this.tradeDetailPosService = tradeDetailPosService;
}
@Override
public ActionResponse task(final String... arg0) {
// 加锁
LockHandler handler = new LockHandler();
return (ActionResponse) handler.execute(new ActionLockCallback() {
public Lock prepare() {
Lock lock = TradeDetailPosLock.getLock(
new TradeDetailPosLockEntity(1L),
TradeDetailPosLock.getLockInfo());
lock.lock();
return lock;
}
public Object validHandler(Lock lock) {
// 成功得到对象锁后 需要做的一些处理
return TradeDetailPosTaskForABC.this.taskOperate(arg0);
}
});
}
public ActionResponse taskOperate(String... params) {
ActionResponse ar = new ActionResponse(ResponseType.FAILURE);
log.info("------------------农行POS交易明细数据接口计划任务start---------------------");
Date startDate = DateUtils.preDays(DateUtils.now(), 1);// 默认前一天日期
if (params.length > 0) {// 大于0表示手动执行
if (!StringUtils.isNullOrBlank(params[0])) {
startDate = DateUtils.toDate(params[0]);
startDate = DateUtils.preDays(startDate, 1);
}
}
FTPParam param = new FTPParam();
param.setFileDate(startDate);
// 1.登录Ftp 并下载文件
String result = loginFtpAndDownload(FTP_CODE, param);
if (!"succ".equals(result)) {
log.info("文件下载失败,请检查FTP方案配置");
ar.setResponseType(ResponseType.WARNING, "文件下载失败,请检查FTP方案配置.");
return ar;
}
// 得到Ftp配置
FtpSolutionLine fl = getFtpConfig(FTP_CODE);
// 2.解析下载后的数据
List<String[]> strList = analysisFileByDownload(fl.getToPath());
// 3.组数据
List<TradeDetailPos> tdpList = new ArrayList<TradeDetailPos>();
for (String[] str : strList) {
TradeDetailPos tdp = new TradeDetailPos();
if (StringUtils.isNullOrBlank(str[0])) {
continue;
}
if (StringUtils.isNullOrBlank(str[1])) {
continue;
}
if (StringUtils.isNullOrBlank(str[2])) {
continue;
}
if (StringUtils.isNullOrBlank(str[6])) {
continue;
}
if (StringUtils.isNullOrBlank(str[7])) {
continue;
}
if (StringUtils.isNullOrBlank(str[9])) {
continue;
}
if (str[0].length() > 200) {
tdp.setPosMerchNo(str[0].substring(0, 200));
} else {
tdp.setPosMerchNo(str[0]);
}
if (str[1].length() > 200) {
tdp.setPosTerminalNo(str[1].substring(0, 200));
} else {
tdp.setPosTerminalNo(str[1]);
}
tdp.setBank(new CbBank(2L));
tdp.setPosAmount(Double.parseDouble(str[2]));
tdp.setPosFee(Double.parseDouble(str[3]));
if (StringUtils.isNullOrBlank(str[4])) {
tdp.setPosFeeInstalment(0.00d);
} else {
tdp.setPosFeeInstalment(Double.parseDouble(str[4]));
}
tdp.setPosSerialNo(str[5]);
tdp.setPosCardNo(str[6]);
tdp.setPosDate(DateUtils.toDate(str[7], "yyyyMMdd"));
if (StringUtils.isNullOrBlank(str[8])) {
tdp.setPosTime(DateUtils.toDate(str[7] + " " + str[8],
"yyyyMMdd HHmmss"));
}
tdp.setTradeType(str[9]);
tdp.setCancelNo(str[10]);
ActionUtils.setWho(tdp);
tdp.setEnable(true);
tdpList.add(tdp);
}
// 保存
if (CollectionUtils.isNotEmpty(tdpList)) {
this.tradeDetailPosService.insertAll(tdpList);
}
ar.setResponseType(ResponseType.SUCCESS);
log.info("------------------农行POS交易明细数据接口计划任务end---------------------");
return ar;
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-227764-1-1.html 上篇帖子: DOS FTP 命令大全 下篇帖子: ftp 文件上传 文件损坏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表