diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
index 508b297..9775635 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
@@ -466,7 +466,7 @@
           fileHeader.setPayCount(fileHeader.getPayCount() - 1);
           fileHeader.setPayAmount(fileHeader.getPayAmount() - record.getAmount());
         } else if (FLAG_REFUND.equals(record.getFlag())) {
-          amount = +record.getAmount();
+          amount = -record.getAmount();
           flag = Constant.FLAG_REFUND;
           fileHeader.setRefundCount(fileHeader.getRefundCount() - 1);
           fileHeader.setRefundAmount(fileHeader.getRefundAmount() - record.getAmount());
@@ -489,9 +489,10 @@
   }
 
   @GetMapping("/download")
-  public void downloadFile(@RequestParam("file") String file, HttpServletResponse response) throws IOException {
+  public void downloadFile(@RequestParam("filename") String filename, HttpServletResponse response) throws IOException {
     try {
-      parseFile(file, response.getOutputStream());
+      String loaclfile = ynrccApiService.getChkfilePath(filename);
+      parseFile(loaclfile, response.getOutputStream());
     } catch (Exception e) {
       e.printStackTrace();
       response.sendError(HttpStatus.SERVICE_UNAVAILABLE.value(), e.getMessage());
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccApiService.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccApiService.java
index 78241a1..a17cb6c 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccApiService.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccApiService.java
@@ -5,4 +5,6 @@
 
 public interface YnrccApiService {
   DlpayResp sendToYnrcc(String optype, DlpayReq req) throws Exception;
+
+  String getChkfilePath(String filename) throws Exception;
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
index 94eb9f7..87fd35e 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
@@ -8,11 +8,15 @@
 import com.supwisdom.agent.api.bean.DlpayResp;
 import com.supwisdom.agent.api.service.YnrccApiService;
 import com.supwisdom.agent.config.YnrccSocketConfig;
+import org.apache.commons.net.ftp.FTP;
+import org.apache.commons.net.ftp.FTPClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.*;
+
 @Service
 public class YnrccApiServiceImpl implements YnrccApiService {
   @Autowired
@@ -78,4 +82,57 @@
     }
   }
 
+  @Override
+  public String getChkfilePath(String filename) throws Exception {
+    //本地服务器上
+    if (!ynrccSocketConfig.getChkfileIsftp()) {
+      String localFilePath = ynrccSocketConfig.getChkfilePath();
+      if (localFilePath.endsWith("/")) {
+        return localFilePath + filename;
+      } else {
+        return localFilePath + "/" + filename;
+      }
+    }
+
+    //ftp取对账文件
+    String ftpIp = ynrccSocketConfig.getFtpIp();
+    Integer ftpPort = ynrccSocketConfig.getFtpPort();
+    String ftpUsername = ynrccSocketConfig.getFtpUsername();
+    String ftpUserpwd = ynrccSocketConfig.getFtpPassword();
+    String targetPath = ynrccSocketConfig.getFtpTargetPath();
+    String localFilePath = ynrccSocketConfig.getChkfilePath();
+    if (StringUtil.isEmpty(ftpIp) || null == ftpPort || StringUtil.isEmpty(ftpUsername) || StringUtil.isEmpty(ftpUserpwd) || StringUtil.isEmpty(targetPath)) {
+      throw new Exception("ftp参数未配置");
+    }
+
+    FTPClient ftpClient = new FTPClient();
+    try {
+      ftpClient.connect(ftpIp, ftpPort);
+      ftpClient.login(ftpUsername, ftpUserpwd);
+      ftpClient.enterLocalPassiveMode();
+      ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+
+      String savePath = localFilePath.endsWith("/") ? (localFilePath + filename) : (localFilePath + "/" + filename);
+      String targetFile = targetPath.endsWith("/") ? (targetPath + filename) : (targetPath + "/" + filename);
+      //本地文件
+      File localFile = new File(savePath);
+      File parentDir = localFile.getParentFile();
+      if (!parentDir.exists()) {
+        parentDir.mkdir();
+      }
+
+      OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(localFile));
+      boolean success = ftpClient.retrieveFile(targetFile, outputStream);
+      outputStream.close();
+
+      if (success) {
+        return savePath;
+      }
+    } catch (IOException ex) {
+      ex.printStackTrace();
+    }
+
+    throw new Exception("获取对账文件失败！");
+  }
+
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/config/YnrccSocketConfig.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/config/YnrccSocketConfig.java
index e11398c..240f133 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/config/YnrccSocketConfig.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/config/YnrccSocketConfig.java
@@ -7,13 +7,37 @@
 public class YnrccSocketConfig {
   @Value("${ynrcc.socket.ip}")
   private String ip;
+
   @Value("${ynrcc.socket.port}")
   private Integer port;
+
   @Value("${ynrcc.socket.timeout}")
   private int timeout = 10;
+
   @Value("${ynrcc.md5.key}")
   private String md5Key;
 
+  @Value("${ynrcc.chkfile.ftp.enabled}")
+  private Boolean chkfileIsftp;
+
+  @Value("${ynrcc.chkfile.ftp.ip}")
+  private String ftpIp;
+
+  @Value("${ynrcc.chkfile.ftp.port}")
+  private Integer ftpPort;
+
+  @Value("${ynrcc.chkfile.local.path}")
+  private String chkfilePath;
+
+  @Value("${ynrcc.chkfile.ftp.username}")
+  private String ftpUsername;
+
+  @Value("${ynrcc.chkfile.ftp.userpwd}")
+  private String ftpPassword;
+
+  @Value("${ynrcc.chkfile.ftp.targetpath}")
+  private String ftpTargetPath;
+
   public String getIp() {
     return ip;
   }
@@ -29,4 +53,32 @@
   public String getMd5Key() {
     return md5Key;
   }
+
+  public Boolean getChkfileIsftp() {
+    return chkfileIsftp;
+  }
+
+  public String getFtpIp() {
+    return ftpIp;
+  }
+
+  public Integer getFtpPort() {
+    return ftpPort;
+  }
+
+  public String getChkfilePath() {
+    return chkfilePath;
+  }
+
+  public String getFtpUsername() {
+    return ftpUsername;
+  }
+
+  public String getFtpPassword() {
+    return ftpPassword;
+  }
+
+  public String getFtpTargetPath() {
+    return ftpTargetPath;
+  }
 }
diff --git a/ynrcc-agent/src/main/resources/application.properties b/ynrcc-agent/src/main/resources/application.properties
index 167f4ac..18f790d 100644
--- a/ynrcc-agent/src/main/resources/application.properties
+++ b/ynrcc-agent/src/main/resources/application.properties
@@ -13,7 +13,6 @@
 #spring.redis.port=16379
 #spring.redis.password=kingstar
 #spring.redis.database=0
-
 # logging
 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
 logging.level.org.hibernate.SQL=debug
@@ -27,10 +26,18 @@
 ##################################################
 ## quartz task scheduler
 #dayend.settletask.cron = 0 0/2 * * * ?
-
 ############# YNRCC SOCKET ###############
 ynrcc.socket.ip=127.0.0.1
 ynrcc.socket.port=8089
 ## 超时时间(分钟)
-ynrcc.socket.timeout = 10
+ynrcc.socket.timeout=10
 ynrcc.md5.key=80816b7947ed016bff8079557735006e
+ynrcc.chkfile.ftp.enabled=false
+ynrcc.chkfile.local.path=/opt/supwisdom/chkfile
+ynrcc.chkfile.ftp.ip=
+ynrcc.chkfile.ftp.port=
+ynrcc.chkfile.ftp.username=
+ynrcc.chkfile.ftp.userpwd=
+ynrcc.chkfile.ftp.targetpath=/
+
+
