diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java
index adb2b3c..4562fa2 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.paysdk.proxy;
 
+import com.supwisdom.dlpay.api.bean.DownloadShopBillParam;
 import com.supwisdom.dlpay.api.bean.OpenShopParam;
 import com.supwisdom.dlpay.api.bean.QueryShopParam;
 import com.supwisdom.dlpay.api.bean.ShopResponse;
@@ -17,4 +18,7 @@
 
   @GetMapping("/query")
   ShopResponse queryShop(@RequestBody QueryShopParam param);
+
+  @PostMapping("/downloadshopbill")
+  String downloadShopBill(@RequestBody DownloadShopBillParam param);
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
index c1dbf6a..157c81c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
@@ -13,6 +13,7 @@
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.system.service.DtlDataService
 import com.supwisdom.dlpay.util.ConstantUtil
+import org.apache.log4j.spi.ErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
@@ -85,23 +86,28 @@
      */
     @PostMapping("/downloadshopbill")
     fun downloadShopBill(@RequestBody param: DownloadShopBillParam, response: HttpServletResponse): ResponseEntity<Any> {
-        val outputStream = response.outputStream
         try {
             shopService.checkDownloadShopBillParam(param) //判断该天是否已结算，未结算直接报错
             val count = dtlDataService.getDownloadShopBillCount(param)
             if (count <= 0) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create().fail(TradeErrorCode.NO_DEAL_EEROR, "当天无交易记录"))
             }
-            parseFile(dtlDataService, param, count, outputStream)
-            return ResponseEntity.ok(outputStream)
+            val outputStream = response.outputStream
+            return try {
+                parseFile(dtlDataService, param, count, outputStream)
+                ResponseEntity.ok(outputStream)
+            } catch (eb: Exception) {
+                ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .exception(TradeErrorCode.BUSINESS_DEAL_ERROR, eb, "生成对账文件数据出错"))
+            } finally {
+                outputStream?.close()
+            }
         } catch (ex: RequestParamCheckException) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .requestException(ex, "请求参数错误"))
         } catch (et: TransactionException) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .transException(et, "业务处理错误"))
-        } finally {
-            outputStream?.close()
         }
     }
 
