From a22af1da254b90c79fd3e1433ed98f51c0a39a65 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 19 十二月 2025 18:57:08 +0800
Subject: [PATCH] feat:开发

---
 ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayDownloadEreceiptRequest.cs         |   24 ---
 ApiTools.Core/Utils/NongYePayUtils/NongYePayOptions.cs                                |   10 +
 ApiTools.Web.Entry/appsettings.json                                                   |    8 
 ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayRealTimeDownloadEreceiptRequest.cs |   12 -
 ApiTools.Core/Utils/NongYePayUtils/Models/DownloadFileCommand.cs                      |   21 +++
 ApiTools.Core/Utils/NongYePayUtils/NongYePayUtils.cs                                  |  191 ++++++++++++++++----------
 ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs           |   46 +++++-
 ApiTools.Core/ApiTools.Core.xml                                                       |   67 ++++++--
 ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayBaseRequest.cs                     |   32 ++++
 9 files changed, 270 insertions(+), 141 deletions(-)

diff --git a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
index bb82540..562c537 100644
--- a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
@@ -1,6 +1,8 @@
 锘縰sing Aop.Api.Domain;
 using ApiTools.Core;
+using Baidu.Aip;
 using Consul;
+using Furion.DistributedIDGenerator;
 using Furion.FriendlyException;
 using Furion.UnifyResult;
 using Mapster;
@@ -13,6 +15,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace ApiTools.Application
 {
@@ -301,21 +304,42 @@
             //    }
             //});
 
-            //var res6 = await nongYePayUtils.GetTransferDetails(new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequest
-            //{
-            //    Corp = new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequestCorp
-            //    {
-            //        StartDate = "20251217",
-            //        EndDate = "20251217",
+            var res6 = await nongYePayUtils.GetTransferDetails(new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequest
+            {
+                Corp = new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequestCorp
+                {
+                    StartDate = "20251217",
+                    EndDate = "20251217",
 
-            //    },
-            //    Cmp = new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequestCmp
+                },
+                Cmp = new Core.Utils.NongYePayUtils.Models.NongYePayGetTransferDetailsRequestCmp
+                {
+                    DbProv = "14",
+                    DbAccNo = "314101046433493",
+                    DbCur = "01",
+                }
+            });
+
+            //var res9 = await nongYePayUtils.DownloadEreceipt(new Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptRequest
+            //{
+            //    Corp = new Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptRequestCorp
             //    {
-            //        DbProv = "14",
-            //        DbAccNo = "314101046433493",
-            //        DbCur = "01",
+            //        StartDate = "20251218",
+            //        AlterFlag = "1"
             //    }
             //});
+            //foreach (var item in res9.Items)
+            //{
+            //    var url = AliyunOSSUtils.Upload(
+            //        "NongYePay",
+            //        item.Stream,
+            //        $"鐢靛瓙鍥炲崟-{IDGen.NextID()}.pdf")
+            //        .Url;
+            //    url = AliyunOSSUtils.GetUrl(url);
+            //    Console.WriteLine();
+            //}
+            Console.WriteLine();
+
             //var a = res6.Items.FirstOrDefault().TrJrn;
 
             //var res8 = await nongYePayUtils.RealTimeDownloadEreceipt(new Core.Utils.NongYePayUtils.Models.NongYePayRealTimeDownloadEreceiptRequest
diff --git a/ApiTools.Core/ApiTools.Core.xml b/ApiTools.Core/ApiTools.Core.xml
index 95f4f75..46a1fa8 100644
--- a/ApiTools.Core/ApiTools.Core.xml
+++ b/ApiTools.Core/ApiTools.Core.xml
@@ -5138,6 +5138,16 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.DownloadFileCommand.Scene">
+            <summary>
+            鍦烘櫙
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.DownloadFileCommand.Path">
+            <summary>
+            鍦板潃
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayBaseRequest">
             <summary>
             鍐滀笟閾惰鏀粯鍩虹璇锋眰
@@ -5193,6 +5203,16 @@
             鏁板瓧绛惧悕锛堢┖鑺傜偣锛孖CT鑷姩琛ュ厖锛�
             </summary>
         </member>
+        <member name="T:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayZipResponse">
+            <summary>
+            鍐滀笟閾惰鏀粯鍩虹鍥炶皟
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayZipResponse.FileFlag">
+            <summary>
+            鏂囦欢鏍囪瘑
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayBaseResponse`1">
             <summary>
             鍐滀笟閾惰鏀粯鍩虹鍥炶皟
@@ -5268,6 +5288,16 @@
             杩斿洖鏂囦欢鍚�
             </summary>
         </member>
+        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayResponseZipFile.FileName">
+            <summary>
+            鏂囦欢鍚�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayResponseZipFile.Stream">
+            <summary>
+            娴�
+            </summary>
+        </member>
         <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptRequestCorp.StartDate">
             <summary>
             鏌ヨ鏂囦欢鍖呮棩鏈�
@@ -5282,21 +5312,6 @@
             鍏朵粬-浼佷笟涓�у寲绾﹀畾
             </summary>
         </member>
-        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptResponse.FileFlag">
-            <summary>
-            鏂囦欢鏍囪瘑
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptResponseItem.FileName">
-            <summary>
-            鏂囦欢鍚�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayDownloadEreceiptResponseItem.Stream">
-            <summary>
-            娴�
-            </summary>
-        </member>
         <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayGetBalanceRequest.Cmp">
             <summary>
             涓氬姟鏁版嵁
@@ -6177,11 +6192,6 @@
             鏃ュ織鍙�
             </summary>
         </member>
-        <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayRealTimeDownloadEreceiptResponse.FileFlag">
-            <summary>
-            鏂囦欢鏍囪瘑
-            </summary>
-        </member>
         <member name="P:ApiTools.Core.Utils.NongYePayUtils.Models.NongYePaySingleCorporateTransferRequest.Amt">
             <summary>
             閲戦
@@ -6437,6 +6447,16 @@
             鏂囦欢鐩綍
             </summary>
         </member>
+        <member name="P:ApiTools.Core.NongYePayOptions.RemoteFileUrl">
+            <summary>
+            杩滅▼鏂囦欢鎺ュ彛
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.NongYePayOptions.RemoteFilePrivateKey">
+            <summary>
+            杩滅▼鏂囦欢鎺ュ彛绉侀挜
+            </summary>
+        </member>
         <member name="M:ApiTools.Core.NongYePayUtils.GetBalance(ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayGetBalanceRequest)">
             <summary>
             鏌ヨ璐︽埛浣欓
@@ -6478,6 +6498,13 @@
             <param name="request"></param>
             <returns></returns>
         </member>
+        <member name="M:ApiTools.Core.NongYePayUtils.RealTimeDownloadEreceipt(ApiTools.Core.Utils.NongYePayUtils.Models.NongYePayRealTimeDownloadEreceiptRequest)">
+            <summary>
+            瀹炴椂涓嬭浇鐢靛瓙鍥炲崟
+            </summary>
+            <param name="request"></param>
+            <returns></returns>
+        </member>
         <member name="M:ApiTools.Core.NongYePayUtils.GetBankAreas">
             <summary>
             鑾峰彇閾惰鍦板尯
diff --git a/ApiTools.Core/Utils/NongYePayUtils/Models/DownloadFileCommand.cs b/ApiTools.Core/Utils/NongYePayUtils/Models/DownloadFileCommand.cs
new file mode 100644
index 0000000..81193df
--- /dev/null
+++ b/ApiTools.Core/Utils/NongYePayUtils/Models/DownloadFileCommand.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core.Utils.NongYePayUtils.Models
+{
+    public class DownloadFileCommand
+    {
+        /// <summary>
+        /// 鍦烘櫙
+        /// </summary>
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 鍦板潃
+        /// </summary>
+        public string Path { get; set; }
+    }
+}
diff --git a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayBaseRequest.cs b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayBaseRequest.cs
index db0d925..beff33d 100644
--- a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayBaseRequest.cs
+++ b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayBaseRequest.cs
@@ -1,6 +1,7 @@
 锘縰sing Org.BouncyCastle.Ocsp;
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -69,6 +70,24 @@
     /// 鍐滀笟閾惰鏀粯鍩虹鍥炶皟
     /// </summary>
     [XmlRoot("ap")]
+    public abstract class NongYePayZipResponse : NongYePayBaseResponse
+    {
+        /// <summary>
+        /// 鏂囦欢鏍囪瘑
+        /// </summary>
+        public string FileFlag { get; set; }
+
+        public NongYePayGetEreceiptResponseCmp Cmp { get; set; }
+
+        public List<NongYePayResponseZipFile> Items { get; set; } = [];
+
+        public string ZipFileName { get; set; }
+    }
+
+    /// <summary>
+    /// 鍐滀笟閾惰鏀粯鍩虹鍥炶皟
+    /// </summary>
+    [XmlRoot("ap")]
     public abstract class NongYePayBaseResponse<T> : NongYePayBaseResponse
     {
         /// <summary>
@@ -154,4 +173,17 @@
         /// </summary>
         public string BatchFileName { get; set; }
     }
+
+    public class NongYePayResponseZipFile
+    {
+        /// <summary>
+        /// 鏂囦欢鍚�
+        /// </summary>
+        public string FileName { get; set; }
+
+        /// <summary>
+        /// 娴�
+        /// </summary>
+        public MemoryStream Stream { get; set; }
+    }
 }
diff --git a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayDownloadEreceiptRequest.cs b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayDownloadEreceiptRequest.cs
index c15191e..0b0d476 100644
--- a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayDownloadEreceiptRequest.cs
+++ b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayDownloadEreceiptRequest.cs
@@ -37,31 +37,9 @@
     }
 
     [XmlRoot("ap")]
-    public class NongYePayDownloadEreceiptResponse : NongYePayBaseResponse
+    public class NongYePayDownloadEreceiptResponse : NongYePayZipResponse
     {
-        /// <summary>
-        /// 鏂囦欢鏍囪瘑
-        /// </summary>
-        public string FileFlag { get; set; }
-
-        public NongYePayGetEreceiptResponseCmp Cmp { get; set; }
-
-        public List<NongYePayDownloadEreceiptResponseItem> Items { get; set; } = [];
-
-        public string ZipFileName { get; set; }
 
     }
 
-    public class NongYePayDownloadEreceiptResponseItem
-    {
-        /// <summary>
-        /// 鏂囦欢鍚�
-        /// </summary>
-        public string FileName { get; set; }
-
-        /// <summary>
-        /// 娴�
-        /// </summary>
-        public MemoryStream Stream { get; set; }
-    }
 }
diff --git a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayRealTimeDownloadEreceiptRequest.cs b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayRealTimeDownloadEreceiptRequest.cs
index 8e33955..2da76a7 100644
--- a/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayRealTimeDownloadEreceiptRequest.cs
+++ b/ApiTools.Core/Utils/NongYePayUtils/Models/NongYePayRealTimeDownloadEreceiptRequest.cs
@@ -67,17 +67,7 @@
     }
 
     [XmlRoot("ap")]
-    public class NongYePayRealTimeDownloadEreceiptResponse : NongYePayBaseResponse
+    public class NongYePayRealTimeDownloadEreceiptResponse : NongYePayZipResponse
     {
-        /// <summary>
-        /// 鏂囦欢鏍囪瘑
-        /// </summary>
-        public string FileFlag { get; set; }
-
-        public NongYePayGetEreceiptResponseCmp Cmp { get; set; }
-
-        public List<NongYePayDownloadEreceiptResponseItem> Items { get; set; } = [];
-
-        public string ZipFileName { get; set; }
     }
 }
diff --git a/ApiTools.Core/Utils/NongYePayUtils/NongYePayOptions.cs b/ApiTools.Core/Utils/NongYePayUtils/NongYePayOptions.cs
index 01f027a..a178d2d 100644
--- a/ApiTools.Core/Utils/NongYePayUtils/NongYePayOptions.cs
+++ b/ApiTools.Core/Utils/NongYePayUtils/NongYePayOptions.cs
@@ -33,5 +33,15 @@
         /// 鏂囦欢鐩綍
         /// </summary>
         public string FilePath { get; set; }
+
+        /// <summary>
+        /// 杩滅▼鏂囦欢鎺ュ彛
+        /// </summary>
+        public string RemoteFileUrl { get; set; }
+
+        /// <summary>
+        /// 杩滅▼鏂囦欢鎺ュ彛绉侀挜
+        /// </summary>
+        public string RemoteFilePrivateKey { get; set; }
     }
 }
diff --git a/ApiTools.Core/Utils/NongYePayUtils/NongYePayUtils.cs b/ApiTools.Core/Utils/NongYePayUtils/NongYePayUtils.cs
index 163b90d..3a7fc7a 100644
--- a/ApiTools.Core/Utils/NongYePayUtils/NongYePayUtils.cs
+++ b/ApiTools.Core/Utils/NongYePayUtils/NongYePayUtils.cs
@@ -4,9 +4,11 @@
 using Azure.Core;
 using Furion;
 using Furion.DatabaseAccessor;
+using Furion.DataEncryption.Extensions;
 using Furion.DependencyInjection;
 using Furion.DistributedIDGenerator;
 using Furion.FriendlyException;
+using Furion.HttpRemote;
 using Microsoft.Extensions.Options;
 using NetTopologySuite.Algorithm;
 using Org.BouncyCastle.Asn1.Ocsp;
@@ -25,10 +27,12 @@
 namespace ApiTools.Core
 {
     public class NongYePayUtils(
+            IHttpRemoteService httpRemoteService,
             IOptions<NongYePayOptions> options,
             IRepository<ThreeResourceLog, LogDbContextLocator> repThreeResourceLog
         ) : ITransient
     {
+        private readonly IHttpRemoteService httpRemoteService = httpRemoteService;
         private readonly IOptions<NongYePayOptions> options = options;
         private readonly IRepository<ThreeResourceLog, LogDbContextLocator> repThreeResourceLog = repThreeResourceLog;
 
@@ -88,74 +92,17 @@
         /// <returns></returns>
         public async Task<NongYePayDownloadEreceiptResponse> DownloadEreceipt(NongYePayDownloadEreceiptRequest request)
         {
-            var response = await Send<NongYePayDownloadEreceiptRequest, NongYePayDownloadEreceiptResponse>(request);
-            if (response != null
-                && response.RespSource == "0"
-                && response.Cmp != null
-                && response.Cmp.BatchFileName.IsNotNull())
-            {
-                response.ZipFileName = $"{options.Value.FilePath}{response.Cmp.BatchFileName}";
-                if (File.Exists(response.ZipFileName))
-                {
-                    using (var archive = ZipFile.OpenRead(response.ZipFileName))
-                    {
-                        foreach (var entry in archive.Entries)
-                        {
-                            if (entry.FullName.EndsWith(".pdf"))
-                            {
-                                using (var stream = entry.Open())
-                                {
-                                    var ms = new MemoryStream();
-                                    stream.CopyTo(ms);
-                                    ms.Position = 0;
-                                    response.Items.Add(new NongYePayDownloadEreceiptResponseItem
-                                    {
-                                        FileName = entry.FullName,
-                                        Stream = ms
-                                    });
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return response;
+            return await SendWithZip<NongYePayDownloadEreceiptRequest, NongYePayDownloadEreceiptResponse>(request);
         }
 
+        /// <summary>
+        /// 瀹炴椂涓嬭浇鐢靛瓙鍥炲崟
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
         public async Task<NongYePayRealTimeDownloadEreceiptResponse> RealTimeDownloadEreceipt(NongYePayRealTimeDownloadEreceiptRequest request)
         {
-            var response = await Send<NongYePayRealTimeDownloadEreceiptRequest, NongYePayRealTimeDownloadEreceiptResponse>(request);
-            if (response != null
-                && response.RespSource == "0"
-                && response.Cmp != null
-                && response.Cmp.BatchFileName.IsNotNull())
-            {
-                response.ZipFileName = $"{options.Value.FilePath}{response.Cmp.BatchFileName}";
-                if (File.Exists(response.ZipFileName))
-                {
-                    using (var archive = ZipFile.OpenRead(response.ZipFileName))
-                    {
-                        foreach (var entry in archive.Entries)
-                        {
-                            if (entry.FullName.EndsWith(".pdf"))
-                            {
-                                using (var stream = entry.Open())
-                                {
-                                    var ms = new MemoryStream();
-                                    stream.CopyTo(ms);
-                                    ms.Position = 0;
-                                    response.Items.Add(new NongYePayDownloadEreceiptResponseItem
-                                    {
-                                        FileName = entry.FullName,
-                                        Stream = ms
-                                    });
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return response;
+            return await SendWithZip<NongYePayRealTimeDownloadEreceiptRequest, NongYePayRealTimeDownloadEreceiptResponse>(request);
         }
 
         /// <summary>
@@ -228,6 +175,69 @@
             return $"{now:yyyyMMddHHmmssfff}{random}";
         }
 
+        private async Task<List<NongYePayResponseZipFile>> GetZipFiles(NongYePayZipResponse response)
+        {
+            var list = new List<NongYePayResponseZipFile>();
+            if (response != null
+                && response.RespSource == "0"
+                && response.Cmp != null
+                && response.Cmp.BatchFileName.IsNotNull())
+            {
+                var memoryStream = new MemoryStream();
+                if (options.Value.RemoteFileUrl.IsNotNull())
+                {
+                    response.ZipFileName = response.Cmp.BatchFileName;
+                    var url = $"{options.Value.RemoteFileUrl}/api/file/download";
+                    var command = new DownloadFileCommand
+                    {
+                        Scene = "NongYePay",
+                        Path = response.Cmp.BatchFileName
+                    };
+                    var timestamp = DateTime.Now.ToTimeStamp(true);
+                    var sign = $"POST|/api/file/download|{command.ToJson()}|{options.Value.RemoteFilePrivateKey}|{timestamp}".ToMD5Encrypt();
+                    using var stream = await httpRemoteService.PostAsStreamAsync(url,
+                        builder => builder
+                            .SetJsonContent(command)
+                            .WithHeader("x-timestamp", timestamp, replace: true)
+                            .WithHeader("x-sign", sign, replace: true));
+                    stream.CopyTo(memoryStream);
+                    memoryStream.Position = 0;
+                }
+                else if (options.Value.FilePath.IsNotNull())
+                {
+                    response.ZipFileName = $"{options.Value.FilePath}{response.Cmp.BatchFileName}";
+                    if (File.Exists(response.ZipFileName))
+                    {
+                        using var stream = File.OpenRead(response.ZipFileName);
+                        stream.CopyTo(memoryStream);
+                        memoryStream.Position = 0;
+                    }
+                }
+
+                using (var archive = new ZipArchive(memoryStream))
+                {
+                    foreach (var entry in archive.Entries)
+                    {
+                        if (entry.FullName.EndsWith(".pdf"))
+                        {
+                            using (var stream = entry.Open())
+                            {
+                                var ms = new MemoryStream();
+                                stream.CopyTo(ms);
+                                ms.Position = 0;
+                                list.Add(new NongYePayResponseZipFile
+                                {
+                                    FileName = entry.FullName,
+                                    Stream = ms
+                                });
+                            }
+                        }
+                    }
+                }
+            }
+            return list;
+        }
+
         private async Task<List<T>> GetList<T>(NongYePayBaseResponse<T> response, ThreeResourceLog log)
             where T : class, new()
         {
@@ -236,11 +246,37 @@
                 && response.FileFlag == "1"
                 && response.Cmp.BatchFileName.IsNotNull())
             {
-                var fileName = $"{options.Value.FilePath}{response.Cmp.BatchFileName}";
-                if (File.Exists(fileName))
+                var lines = new List<string>();
+                if (options.Value.RemoteFileUrl.IsNotNull())
+                {
+                    var url = $"{options.Value.RemoteFileUrl}/api/file/download";
+                    var command = new DownloadFileCommand
+                    {
+                        Scene = "NongYePay",
+                        Path = response.Cmp.BatchFileName
+                    };
+                    var timestamp = DateTime.Now.ToTimeStamp(true);
+                    var sign = $"POST|/api/file/download|{command.ToJson()}|{options.Value.RemoteFilePrivateKey}|{timestamp}".ToMD5Encrypt();
+                    var buffer = await httpRemoteService.PostAsByteArrayAsync(url,
+                       builder => builder
+                           .SetJsonContent(command)
+                           .WithHeader("x-timestamp", timestamp, replace: true)
+                           .WithHeader("x-sign", sign, replace: true));
+                    var text = Encoding.GetEncoding("GBK").GetString(buffer);
+                    lines = text.Split("\n").Where(it => it.IsNotNull()).ToList();
+                }
+                else if (options.Value.FilePath.IsNotNull())
+                {
+                    var fileName = $"{options.Value.FilePath}{response.Cmp.BatchFileName}";
+                    if (File.Exists(fileName))
+                    {
+                        var array = await File.ReadAllLinesAsync(fileName, Encoding.GetEncoding("GBK"));
+                        lines = array.ToList();
+                    }
+                }
+                if (lines.IsNotNull())
                 {
                     var props = typeof(T).GetProperties();
-                    var lines = await File.ReadAllLinesAsync(fileName, Encoding.GetEncoding("GBK"));
                     foreach (var line in lines)
                     {
                         var item = new T();
@@ -251,12 +287,12 @@
                         }
                         list.Add(item);
                     }
-
-                    log.UpdatedTime = DateTimeOffset.Now;
-                    var json = list.ToJson();
-                    log.Response += $"\n{json}";
-                    await repThreeResourceLog.UpdateNowAsync(log);
                 }
+
+                log.UpdatedTime = DateTimeOffset.Now;
+                var json = list.ToJson();
+                log.Response += $"\n{json}";
+                await repThreeResourceLog.UpdateNowAsync(log);
             }
             return list;
         }
@@ -267,7 +303,16 @@
             where TResponseItem : class, new()
         {
             var response = await SendWithLog<TRequest, TResponse>(request);
-            response.response.Items = await GetList<TResponseItem>(response.response, response.log);
+            response.response.Items = await GetList(response.response, response.log);
+            return response.response;
+        }
+
+        private async Task<TResponse> SendWithZip<TRequest, TResponse>(TRequest request)
+            where TRequest : NongYePayBaseRequest
+            where TResponse : NongYePayZipResponse, new()
+        {
+            var response = await SendWithLog<TRequest, TResponse>(request);
+            response.response.Items = await GetZipFiles(response.response);
             return response.response;
         }
 
diff --git a/ApiTools.Web.Entry/appsettings.json b/ApiTools.Web.Entry/appsettings.json
index e563143..e9961f1 100644
--- a/ApiTools.Web.Entry/appsettings.json
+++ b/ApiTools.Web.Entry/appsettings.json
@@ -97,11 +97,13 @@
     "MrChCode": "0040107980000NBCS000"
   },
   "NongYePay": {
-    "Ip": "127.0.0.1",
-    "Port": 15999,
+    "Ip": "120.26.58.240",
+    "Port": 15998,
     "CorpNo": "14314153600000025",
     "OpNo": "0004",
-    "FilePath": "C:\\Program Files (x86)\\涓浗鍐滀笟閾惰\\涓浗鍐滀笟閾惰閾朵紒閫氬钩鍙癨\detail\\"
+    "FilePath": "C:\\Program Files (x86)\\涓浗鍐滀笟閾惰\\涓浗鍐滀笟閾惰閾朵紒閫氬钩鍙癨\detail\\",
+    "RemoteFileUrl": "http://120.26.58.240:50300",
+    "RemoteFilePrivateKey": "78e9f45d87a2b9c4e6f879a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0"
   },
   "ChengLiYeSms": {
     "UserName": "nbcsxx",

--
Gitblit v1.10.0