Răsfoiți Sursa

服务器迁移119.45.113.139并修复会务导出上传异常

1. 132.232.92.186->119.45.113.139,仅换IP保留端口,含连接串/BaseUrl/硬编码URL/Redis

2. ConferenceAffairsFileDown加异常捕获,Save前自建目录去只读,占用时换时间戳文件名重试

3. ConferenceAffairsChildImageUpload异常增强,返回异常类型加堆栈

4. 恢复全局异常中间件,InvokeAsync改为内部按需取SqlSugarClient

5. RecordAPIOperationMiddleware跳过multipart预读,FormOptions内存缓冲绕开系统TEMP
Lyyyi 20 ore în urmă
părinte
comite
80643a5ea1

+ 1 - 1
OASystem/EntitySync/Program.cs

@@ -5,7 +5,7 @@ using SqlSugar;
 
 var db = new SqlSugarClient(new ConnectionConfig()
 {
-    ConnectionString = "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;Encrypt=True;TrustServerCertificate=True;",
+    ConnectionString = "server=119.45.113.139;uid=sa;pwd=Yjx@158291;database=OA2023DB;Encrypt=True;TrustServerCertificate=True;",
     DbType = DbType.SqlServer,
     IsAutoCloseConnection = true,
     InitKeyType = InitKeyType.Attribute

+ 56 - 12
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -4958,7 +4958,7 @@ FROM
             string group_unique_name = $"{groupInfo.TeamName}_{Guid.NewGuid().ToString("N").Substring(0, 10)}";
 
             //访问路径
-            var serverPath = $"http://132.232.92.186:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
+            var serverPath = $"http://119.45.113.139:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
 
             //模板存储位置
             var tempPath = $"D:/FTP/File/OA2023/Office/Word/VisaClientData/Template/";
@@ -8464,7 +8464,7 @@ FROM
             string group_unique_name = $"{visaBasicData.groupInfo.TeamName}";
 
             //访问路径
-            var serverPath = $"http://132.232.92.186:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
+            var serverPath = $"http://119.45.113.139:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
 
             // 服务器存储文件位置
             var fileServerPath = $"D:/FTP/File/OA2023/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
@@ -8592,7 +8592,7 @@ FROM
             string group_unique_name = $"{visaBasicData.groupInfo.TeamName}";
 
             //访问路径
-            var serverPath = $"http://132.232.92.186:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
+            var serverPath = $"http://119.45.113.139:24/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
 
             // 服务器存储文件位置
             var fileServerPath = $"D:/FTP/File/OA2023/Office/Word/VisaClientData/Downloads/{group_unique_name}/";
@@ -9541,7 +9541,7 @@ FROM
             }
 
             // 文件下载地址
-            downloadUrl = saveUrl.Replace(@"\", @"/").Replace("D:/FTP/File/OA2023", "http://132.232.92.186:24");
+            downloadUrl = saveUrl.Replace(@"\", @"/").Replace("D:/FTP/File/OA2023", "http://119.45.113.139:24");
             return (true, saveUrl, downloadUrl);
         }
 
@@ -9843,7 +9843,7 @@ FROM
             var groupName = dataBody.groupInfo?.TeamName ?? $"";
 
             //访问路径
-            var serverPath = $"http://132.232.92.186:24/Office/Word/VisaClientData/Downloads/{groupName}/派遣函/";
+            var serverPath = $"http://119.45.113.139:24/Office/Word/VisaClientData/Downloads/{groupName}/派遣函/";
 
             // 服务器存储文件位置
             var fileServerPath = $"D:/FTP/File/OA2023/Office/Word/VisaClientData/Downloads/{groupName}/派遣函/";
@@ -9856,7 +9856,7 @@ FROM
             // 转换为下载地址
             string downloadUrl = fullPath
                 .Replace(@"\", "/")
-                .Replace("D:/FTP/File/OA2023", "http://132.232.92.186:24", StringComparison.OrdinalIgnoreCase);
+                .Replace("D:/FTP/File/OA2023", "http://119.45.113.139:24", StringComparison.OrdinalIgnoreCase);
 
             return (true, fullPath, downloadUrl);
         }
@@ -11743,7 +11743,7 @@ FROM
                             Grp_DecreasePayments gdpRes = _DecreasePayments.Where(s => s.Id == entity.CId).FirstOrDefault();
                             if (gdpRes != null)
                             {
-                                //var urlBase = $"http://132.232.92.186:24/Office/GrpFile/http://132.232.92.186:24/Office/GrpFile/%E5%9B%A2%E7%BB%84%E5%A2%9E%E5%87%8F%E6%AC%BE%E9%A1%B9%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6/";
+                                //var urlBase = $"http://119.45.113.139:24/Office/GrpFile/http://119.45.113.139:24/Office/GrpFile/%E5%9B%A2%E7%BB%84%E5%A2%9E%E5%87%8F%E6%AC%BE%E9%A1%B9%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6/";
                                 //if (!string.IsNullOrEmpty(gdpRes.FilePath))
                                 //{
                                 //    _detail.FileUrl = $"{urlBase}{gdpRes.FilePath}";
@@ -12266,7 +12266,7 @@ FROM
         public async Task<IActionResult> FeeAuditOtherFileDownlaod([Range(1, int.MaxValue, ErrorMessage = "请传入有效的ID")] int id)
         {
             //网站域名
-            const string baseUrl = "http://132.232.92.186:24/Office/GrpFile/%E5%9B%A2%E7%BB%84%E5%A2%9E%E5%87%8F%E6%AC%BE%E9%A1%B9%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6/";
+            const string baseUrl = "http://119.45.113.139:24/Office/GrpFile/%E5%9B%A2%E7%BB%84%E5%A2%9E%E5%87%8F%E6%AC%BE%E9%A1%B9%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6/";
 
             var otherInfo = await _decreasePaymentsRep._sqlSugar
                 .Queryable<Grp_DecreasePayments>()
@@ -27429,7 +27429,7 @@ end as 'country'
                 var io = new IOOperatorHelper();
                 var byts = io.ConvertZipStream(Zips);
                 io.ByteToFile(byts, AppSettingsHelper.Get("ExcelBasePath") + $"\\ExportLocalGuidePriceDetail\\{group.TeamName}_地接费用明细.zip");
-                //http://132.232.92.186:24/Office/Word/EnterExitCost/File/
+                //http://119.45.113.139:24/Office/Word/EnterExitCost/File/
                 jw = JsonView(true, "success", new { url = AppSettingsHelper.Get("OfficeBaseUrl") + $"\\Office\\Excel\\ExportLocalGuidePriceDetail\\{group.TeamName}_地接费用明细.zip" });
             }
             else
@@ -38780,7 +38780,8 @@ ORDER BY
             }
             catch (Exception ex)
             {
-                return Ok(JsonView(false, $"上传失败:{ex.Message}"));
+                _logger.LogError(ex, "ConferenceAffairsChildImageUpload失败 | childId={ChildId} FileCount={FileCount}", Dto?.childId, Dto?.Files?.Count);
+                return Ok(JsonView(false, $"上传失败:{ex.GetType().Name}: {ex.Message}", new { StackTrace = ex.ToString() }));
             }
         }
 
@@ -39671,6 +39672,8 @@ ORDER BY
         [HttpPost]
         public async Task<IActionResult> ConferenceAffairsFileDown(ConferenceAffairsFileDownDto Dto)
         {
+            try
+            {
             var FileType = new[]
             {
                 new { Id = 0 , Name = "成本下载" },
@@ -39781,15 +39784,56 @@ ORDER BY
             designer.SetDataSource(dt1);
 
             designer.Process();
-            designer.Workbook.Save(outputPath);
+
+            // 确保输出目录存在(如 total/ 未创建会导致保存失败)
+            var outputDir = Path.GetDirectoryName(outputPath);
+            if (!string.IsNullOrEmpty(outputDir) && !Directory.Exists(outputDir))
+            {
+                Directory.CreateDirectory(outputDir);
+            }
+
+            // 目标文件若为只读则先清除只读属性,否则 Save 会报 UnauthorizedAccessException
+            var outputFileName = $"{di.TeamName}_{fileTypeName}.xlsx";
+            if (System.IO.File.Exists(outputPath) && (System.IO.File.GetAttributes(outputPath) & FileAttributes.ReadOnly) != 0)
+            {
+                System.IO.File.SetAttributes(outputPath, System.IO.File.GetAttributes(outputPath) & ~FileAttributes.ReadOnly);
+            }
+
+            try
+            {
+                designer.Workbook.Save(outputPath);
+            }
+            catch (UnauthorizedAccessException saveEx)
+            {
+                // 常见原因:同名文件正被 Excel 打开占用。
+                // 降级:改用带时间戳的文件名另存,保证本次导出可用;响应结构保持 FileName/FilePath 不变,FilePath 仍为可访问 URL。
+                outputFileName = $"{di.TeamName}_{fileTypeName}_{DateTime.Now:yyyyMMddHHmmss}.xlsx";
+                outputPath = $"{AppSettingsHelper.Get("ExcelBasePath")}ConferenceAffairs/output/total/{outputFileName}";
+                networkPath = outputPath.Replace(AppSettingsHelper.Get("ExcelBasePath"), AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath"));
+                try
+                {
+                    designer.Workbook.Save(outputPath);
+                }
+                catch (Exception retryEx)
+                {
+                    throw new UnauthorizedAccessException(
+                        $"无权写入导出目录/文件:{outputPath}。请检查 IIS 应用池对 ExcelBasePath 的写入权限,或确认同名文件未被 Excel 打开占用。原始错误:{saveEx.Message};重试错误:{retryEx.Message}", retryEx);
+                }
+            }
 
             jw = JsonView(true, "操作成功!", new
             {
-                FileName = $"{di.TeamName}_{fileTypeName}.xlsx",
+                FileName = outputFileName,
                 FilePath = networkPath
             });
 
             return Ok(jw);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "ConferenceAffairsFileDown失败 | GroupId={GroupId} FileTypeId={FileTypeId}", Dto?.GroupId, Dto?.FileTypeId);
+                return Ok(JsonView(false, $"导出失败:{ex.GetType().Name}: {ex.Message}", new { StackTrace = ex.ToString() }));
+            }
         }
 
         /// <summary>

+ 1 - 1
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -3580,7 +3580,7 @@ GROUP BY
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> CarDataSouceExcelTemp()
         {
-            var url = $"http://132.232.92.186:24/Office/Excel/CarDataSouceImportFile/op地接供应商资料收集模板.xlsx";
+            var url = $"http://119.45.113.139:24/Office/Excel/CarDataSouceImportFile/op地接供应商资料收集模板.xlsx";
             return Ok(JsonView(true, url));
         }
 

+ 13 - 3
OASystem/OASystem.Api/Middlewares/ExceptionHandlingMiddleware.cs

@@ -28,9 +28,8 @@ namespace OASystem.API.Middlewares
         /// 执行中间件
         /// </summary>
         /// <param name="httpContext"></param>
-        /// <param name="db"></param>
         /// <returns></returns>
-        public async Task InvokeAsync(HttpContext httpContext, SqlSugarClient db)
+        public async Task InvokeAsync(HttpContext httpContext)
         {
             try
             {
@@ -38,6 +37,17 @@ namespace OASystem.API.Middlewares
             }
             catch (Exception ex)
             {
+                // 按需从请求作用域取 db:取不到只记日志,不影响异常兜底响应
+                SqlSugarClient? db = null;
+                try
+                {
+                    db = httpContext.RequestServices.GetService<SqlSugarClient>();
+                }
+                catch (Exception resolveEx)
+                {
+                    _logger.LogDebug(resolveEx, "Resolve SqlSugarClient failed, skip transaction rollback");
+                }
+
                 await HandleExceptionAsync(httpContext, ex, db); // 捕获异常了 在HandleExceptionAsync中处理
             }
         }
@@ -49,7 +59,7 @@ namespace OASystem.API.Middlewares
         /// <param name="exception">捕获的异常</param>
         /// <param name="db">SqlSugar客户端</param>
         /// <returns></returns>
-        private async Task HandleExceptionAsync(HttpContext context, Exception exception, SqlSugarClient db)
+        private async Task HandleExceptionAsync(HttpContext context, Exception exception, SqlSugarClient? db)
         {
             // ========== 1. 事务回滚(恢复并优化) ==========
             try

+ 13 - 5
OASystem/OASystem.Api/Middlewares/RecordAPIOperationMiddleware.cs

@@ -56,11 +56,19 @@ namespace OASystem.API.Middlewares
                 return;
             }
 
-            // 启用请求体流的缓冲,允许多次读取
-            context.Request.EnableBuffering();
-
-            // 读取请求体内容
-            var requestBodyText = await ReadRequestBody(context.Request);
+            // multipart/form-data(文件上传)不预读请求体:
+            // 预读会消费/破坏表单流,导致后续模型绑定抛 Memory stream is not expandable
+            var contentType = context.Request.ContentType ?? string.Empty;
+            var isMultipart = contentType.StartsWith("multipart/", StringComparison.OrdinalIgnoreCase);
+
+            // 启用请求体流的缓冲,允许多次读取(仅非上传请求)
+            string requestBodyText = string.Empty;
+            if (!isMultipart)
+            {
+                context.Request.EnableBuffering();
+                // 读取请求体内容
+                requestBodyText = await ReadRequestBody(context.Request);
+            }
 
             // 检查控制器方法是否使用了自定义属性
             var endpoint = context.GetEndpoint();

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/PerformanceJob.cs

@@ -34,7 +34,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
 
             try
             {
-                string baseUrl = "http://132.232.92.186:8888/";
+                string baseUrl = "http://119.45.113.139:8888/";
                 baseUrl = baseUrl.TrimEnd('/');
 
                 // 创建HttpClient

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/WeeklyFridayJob.cs

@@ -41,7 +41,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
                 // startDate = new DateTime(2026, 3, 16);
                 // endDate = new DateTime(2026, 3, 21);
 
-                string baseUrl = "http://132.232.92.186:8888";//"http://localhost:5256";
+                string baseUrl = "http://119.45.113.139:8888";//"http://localhost:5256";
                 var createUserId = 4;
 
                 var sqSetting = _sqlSugar.Queryable<Sys_SetData>().First(x => x.Id == 1417);

+ 17 - 7
OASystem/OASystem.Api/Program.cs

@@ -121,7 +121,7 @@ builder.Services.AddCors(options =>
     //        //    // 定义允许的来源列表
     //        //    var allowedOrigins = new List<string>
     //        //        {
-    //        //           "http://132.232.92.186:9002",
+    //        //           "http://119.45.113.139:9002",
     //        //           "http://oa.pan-american-intl.com:4399"
     //        //        };
 
@@ -163,6 +163,13 @@ builder.Services.Configure<FormOptions>(options =>
     options.ValueLengthLimit = int.MaxValue;
     options.MultipartBodyLengthLimit = int.MaxValue;
     options.MultipartHeadersLengthLimit = int.MaxValue;
+    // 表单缓冲超 64KB 后会落盘为临时文件(FileBufferingReadStream.CreateTempFile,
+    // 默认 C:\WINDOWS\TEMP\ASPNETCORE_*.tmp,IIS 应用池常无写入权限)。
+    // 阈值设为 int.MaxValue 让表单常驻内存,避免上传稍大文件时报
+    // Access to the path 'C:\WINDOWS\TEMP\ASPNETCORE_*.tmp' is denied。
+    // 注意:单文件仍受 MultipartBodyLengthLimit 约束,本处已放开。
+    options.MemoryBufferThreshold = int.MaxValue;
+    options.BufferBody = true;
 });
 
 builder.Services.Configure<KestrelServerOptions>(options =>
@@ -352,8 +359,8 @@ Log.Logger = new LoggerConfiguration()
 
 #region 出入境费用明细 专用记录器
 
-// 出入境费用明细 专用记录器
-var logDirectory = @"D:\OASystem\Logs\EnterExitCost";
+// 出入境费用明细 专用记录器(项目根目录下 Logs/EnterExitCost)
+var logDirectory = Path.Combine(basePath, "Logs", "EnterExitCost");
 
 // 自动创建目录(如果不存在)
 try
@@ -376,8 +383,8 @@ var eec_TextLogger = new LoggerConfiguration()
 
 #region 分组步骤操作 专用记录器
 
-// 指定磁盘绝对路径(示例:D盘的AppLogs文件夹)
-var groupLogDir = @"D:\OASystem\Logs\GroupStepOP";
+// 项目根目录下 Logs/GroupStepOP
+var groupLogDir = Path.Combine(basePath, "Logs", "GroupStepOP");
 
 // 自动创建目录(如果不存在)
 try
@@ -407,8 +414,8 @@ var groupStepOP_TextLogger = new LoggerConfiguration()
 
 #region 任务分配操作 专用记录器
 
-// 指定磁盘绝对路径(示例:D盘的AppLogs文件夹)
-var taskLogDir = @"D:\OASystem\Logs\TaskAllocation";
+// 项目根目录下 Logs/TaskAllocation
+var taskLogDir = Path.Combine(basePath, "Logs", "TaskAllocation");
 
 // 自动创建目录(如果不存在)
 try
@@ -638,6 +645,9 @@ app.UseCors("Cors");  //Cors
 
 //app.UseMiddleware<FixedPromptMiddleware>();
 
+// 全局异常兜底(放管道最前,异常时尝试回滚当前请求事务;db 取不到仅记日志不影响响应)
+app.UseMiddleware<ExceptionHandlingMiddleware>();
+
 // 定义允许 API 访问的时间范围
 //var startTime = DateTime.Parse(_config["ApiAccessTime:StartTime"]);
 //var endTime = DateTime.Parse(_config["ApiAccessTime:EndTime"]);

+ 30 - 30
OASystem/OASystem.Api/appsettings.json

@@ -1,7 +1,7 @@
 {
   "ConnectionStrings": {
-    "OA2023DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;Connect Timeout=30;Encrypt=True;TrustServerCertificate=True;Pooling=true;Max Pool Size=100;Min Pool Size=0;Connection Lifetime=1800;",
-    "OA2014DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2014;MultipleActiveResultSets=True;Connect Timeout=30;Encrypt=True;TrustServerCertificate=True;Pooling=true;Max Pool Size=100;Min Pool Size=0;Connection Lifetime=1800;"
+    "OA2023DB": "server=119.45.113.139;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;Connect Timeout=30;Encrypt=True;TrustServerCertificate=True;Pooling=true;Max Pool Size=100;Min Pool Size=0;Connection Lifetime=1800;",
+    "OA2014DB": "server=119.45.113.139;uid=sa;pwd=Yjx@158291;database=OA2014;MultipleActiveResultSets=True;Connect Timeout=30;Encrypt=True;TrustServerCertificate=True;Pooling=true;Max Pool Size=100;Min Pool Size=0;Connection Lifetime=1800;"
   },
   "ApiAccessTime": {
     "StartTime": "2025-01-09 15:00:00",
@@ -136,45 +136,45 @@
       "CurrencyCode": "ZAR"
     }
   ],
-  "ExcelBaseUrl": "http://132.232.92.186:24/",
-  "ExcelBasePath": "D:/FTP/File/OA2023/Office/Excel/",
+  "ExcelBaseUrl": "http://119.45.113.139:24/",
+  "ExcelBasePath": "C:/FTP/File/OA2023/Office/Excel/",
   "ExcelFtpPath": "Office/Excel/",
-  "OfficeBaseUrl": "http://132.232.92.186:24/",
-  "OfficeTempBasePath": "D:/FTP/File/OA2023/Office/",
-  "WordBaseUrl": "http://132.232.92.186:24/",
-  "WordBasePath": "D:/FTP/File/OA2023/Office/Word/",
+  "OfficeBaseUrl": "http://119.45.113.139:24/",
+  "OfficeTempBasePath": "C:/FTP/File/OA2023/Office/",
+  "WordBaseUrl": "http://119.45.113.139:24/",
+  "WordBasePath": "C:/FTP/File/OA2023/Office/Word/",
   "WordFtpPath": "Office/Word/",
-  "GrpFileBaseUrl": "http://132.232.92.186:24/",
-  "GrpFileBasePath": "D:/FTP/File/OA2023/Office/GrpFile/",
+  "GrpFileBaseUrl": "http://119.45.113.139:24/",
+  "GrpFileBasePath": "C:/FTP/File/OA2023/Office/GrpFile/",
   "GrpFileFtpPath": "Office/GrpFile/",
-  "ShareFileBaseUrl": "http://132.232.92.186:24/",
-  "ShareFileBasePath": "D:/FTP/File/OA2023/Office/ShareFile/",
+  "ShareFileBaseUrl": "http://119.45.113.139:24/",
+  "ShareFileBasePath": "C:/FTP/File/OA2023/Office/ShareFile/",
   "ShareFileFtpPath": "Office/ShareFile/",
-  "TaskFileBaseUrl": "http://132.232.92.186:24/",
-  "TaskFileBasePath": "D:/FTP/File/OA2023/Office/TaskFile/",
+  "TaskFileBaseUrl": "http://119.45.113.139:24/",
+  "TaskFileBasePath": "C:/FTP/File/OA2023/Office/TaskFile/",
   "TaskFileFtpPath": "Office/TaskFile/",
-  "ExcelTempPath": "D:/FTP/File/OA2023/Office/Excel/Template/",
-  "GrpListFileBasePath": "D:/FTP/File/OA2023/Office/GrpFile/GroupList/",
+  "ExcelTempPath": "C:/FTP/File/OA2023/Office/Excel/Template/",
+  "GrpListFileBasePath": "C:/FTP/File/OA2023/Office/GrpFile/GroupList/",
   "GrpListFileFtpPath": "Office/GrpFile/GroupList/",
-  // D:\FTP\File\OA2023\Office\GrpFile
-  "VisaProgressImageBaseUrl": "http://132.232.92.186:24/",
-  "VisaProgressImageBasePath": "D:/FTP/File/OA2023/Image/Visa/",
+  // C:\FTP\File\OA2023\Office\GrpFile
+  "VisaProgressImageBaseUrl": "http://119.45.113.139:24/",
+  "VisaProgressImageBasePath": "C:/FTP/File/OA2023/Image/Visa/",
   "VisaProgressImageFtpPath": "Image/Visa/",
-  "ConferenceCostImageBaseUrl": "http://132.232.92.186:24/",
-  "ConferenceCostImageBasePath": "D:/FTP/File/OA2023/Image/ConferenceCost/",
+  "ConferenceCostImageBaseUrl": "http://119.45.113.139:24/",
+  "ConferenceCostImageBasePath": "C:/FTP/File/OA2023/Image/ConferenceCost/",
   "ConferenceCostImageFtpPath": "Image/ConferenceCost/",
-  "WageSheetExcelBaseUrl": "http://132.232.92.186:24/",
-  "WageSheetExcelFptPath": "D:/FTP/File/OA2023/Office/WageSheetFile/",
-  "WageSheetTaxExcelBaseUrl": "http://132.232.92.186:24/",
-  "WageSheetTaxExcelFptPath": "D:/FTP/File/OA2023/Office/Excel/WageSheetTaxFile/",
+  "WageSheetExcelBaseUrl": "http://119.45.113.139:24/",
+  "WageSheetExcelFptPath": "C:/FTP/File/OA2023/Office/WageSheetFile/",
+  "WageSheetTaxExcelBaseUrl": "http://119.45.113.139:24/",
+  "WageSheetTaxExcelFptPath": "C:/FTP/File/OA2023/Office/Excel/WageSheetTaxFile/",
   // 收款账单 - 文件路径配置
-  "ReceivablesUploadFileBasePath": "D:/FTP/File/OA2023/Office/Word/ForeignReceivables/UploadFile",
+  "ReceivablesUploadFileBasePath": "C:/FTP/File/OA2023/Office/Word/ForeignReceivables/UploadFile",
   "ReceivablesUploadFileFtpPath": "Office/Word/ForeignReceivables/UploadFile",
   // 商邀资料 AI 文件路径配置
-  "InvitationAIAssistBasePath": "D:/FTP/File/OA2023/Office/Word/InvitationAIAssist/",
+  "InvitationAIAssistBasePath": "C:/FTP/File/OA2023/Office/Word/InvitationAIAssist/",
   "InvitationAIAssistFtpPath": "Office/Word/InvitationAIAssist/",
   // op地接资料 AI 文件配置路径
-  "OpLocalServiceAIAssistBasePath": "D:/FTP/File/OA2023/Office/Word/OpLocalServiceAIAssist/",
+  "OpLocalServiceAIAssistBasePath": "C:/FTP/File/OA2023/Office/Word/OpLocalServiceAIAssist/",
   "OpLocalServiceAIAssistFtpPath": "Office/Word/OpLocalServiceAIAssist/",
   "CTableCorrelationPageDatas": [
     {
@@ -490,8 +490,8 @@
   },
   "DouBao": {
     "BaseAddress": "https://ark.cn-beijing.volces.com/api/v3/",
-    "ApiKey": "df7914ea-578d-4545-8f3e-9fd8a1e61cb5",
-    "endpointId": "ep-20260224163259-4bvfq"
+    "ApiKey": "ark-b56c4c81-3335-4601-be37-1126c00e818e-cb98c",
+    "endpointId": "ep-20260918145304-ldctn"
   },
   "OverspendAuditUser": [
     {

+ 1 - 1
OASystem/OASystem.Domain/Entities/Groups/Grp_VisaProcessSteps.cs

@@ -138,7 +138,7 @@ namespace OASystem.Domain.Entities.Groups
             {
                 if (!string.IsNullOrEmpty(AttachUrl))
                 {
-                    string rootRrl = "http://132.232.92.186:24/Office/";
+                    string rootRrl = "http://119.45.113.139:24/Office/";
                     var result = JsonSerializer.Deserialize<List<string>>(AttachUrl);
 
                     for (int i = 0; i < result.Count; i++)

+ 1 - 1
OASystem/OASystem.Domain/ViewModels/Resource/InvitationOfficialActivityDataView.cs

@@ -179,7 +179,7 @@ namespace OASystem.Domain.ViewModels.Resource
                 var urls = new List<string>();
                 if (string.IsNullOrEmpty(SndFileName)) return urls.ToArray();
 
-                var filePath = @$"http://132.232.92.186:24/Office/GrpFile/商邀相关文件/";
+                var filePath = @$"http://119.45.113.139:24/Office/GrpFile/商邀相关文件/";
                 try
                 {
                     var strs = JsonSerializer.Deserialize<List<string>>(SndFileName);

+ 1 - 1
OASystem/OASystem.Domain/ViewModels/Resource/OfficialActivitiesView.cs

@@ -29,7 +29,7 @@ namespace OASystem.Domain.ViewModels.Resource
                 List<string> urls1 = new List<string>();
                 urls.ForEach(x =>
                 {
-                    urls1.Add("http://132.232.92.186:24/" + x);
+                    urls1.Add("http://119.45.113.139:24/" + x);
                 });
                 return urls1;
             }

+ 1 - 1
OASystem/OASystem.Domain/ViewModels/Resource/TranslatorLibraryView.cs

@@ -98,7 +98,7 @@ namespace OASystem.Domain.ViewModels.Resource
                             files1.Add(new FileInfoView()
                             {
                                 FileName = files[i].ToString(),
-                                FilePathName = $"http://132.232.92.186:24/Office/GrpFile/TranslatorLibrary/{files[i].ToString()}"
+                                FilePathName = $"http://119.45.113.139:24/Office/GrpFile/TranslatorLibrary/{files[i].ToString()}"
                             });
                         }
                     }

+ 4 - 4
OASystem/OASystem.RedisRepository/Config/RedisClientConfig.cs

@@ -8,8 +8,8 @@ namespace OASystem.RedisRepository.Config
 {
     internal class RedisClientConfig
     {
-        //private static string _server = ConfigHelper.Get("RedisServer", "132.232.92.186");
-        private static string _server = "132.232.92.186";
+        //private static string _server = ConfigHelper.Get("RedisServer", "119.45.113.139");
+        private static string _server = "119.45.113.139";
         /// <summary>
         /// 腾讯云Redis节点IP
         /// </summary>
@@ -30,8 +30,8 @@ namespace OASystem.RedisRepository.Config
             set { _port = value; }
         }
 
-        //private static string _slaveServer = ConfigHelper.Get("SlaveServer", "132.232.92.186");
-        private static string _slaveServer = "132.232.92.186";
+        //private static string _slaveServer = ConfigHelper.Get("SlaveServer", "119.45.113.139");
+        private static string _slaveServer = "119.45.113.139";
         /// <summary>
         /// 节点IP
         /// </summary>

+ 1 - 1
OASystem/OpWin/Home.cs

@@ -26,7 +26,7 @@ namespace OpWin
     {
         static List<Grp_DelegationInfo> soure = null;
 
-        const string OA2023DB = "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;";
+        const string OA2023DB = "server=119.45.113.139;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;";
 
         SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
         {