using System.Text; using AdminService.GameConfigs; using Common; using CommonDomain; using CommonDomain.BaseModel; using CommonInfrastructure; using Microsoft.AspNetCore.Mvc; using NewLife; using RedisService; using XAct; namespace AdminApi.GameConfigs { [ApiController, Route("adminapi/[controller]")] public class ActivityConfigController : BaseController { private readonly IActivityConfigService _activityConfigService; private readonly IRedisService _redisService; public ActivityConfigController(IActivityConfigService activityConfigService, IRedisService redisService) { _activityConfigService = activityConfigService; _redisService = redisService; } /// /// 获取活动配置 /// [HttpGet] /// /// 获取活动配置 /// [HttpGet("Get")] public async Task> Get() { var config = await _activityConfigService.Get(); if (config != null) return this.ToResult(config); else return this.ToFailResult("配置不存在"); } /// /// 更新活动配置 /// [HttpPost("Update")] public async Task> Update(ActivityConfig config) { var res = await _activityConfigService.Update(config); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 删除活动配置 /// [HttpPost("Delete")] public async Task> Delete() { var res = await _activityConfigService.Delete(); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新战令配置 /// [HttpPost("UpdateBattleOrder")] public async Task> UpdateBattleOrder(BattleOrderConfig config) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.BattleOrderConfig = config; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新救济金配置 /// [HttpPost("UpdateRelief")] public async Task> UpdateRelief(ReliefConfig config) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.ReliefConfig = config; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新签到池配置 /// [HttpPost("UpdateSign")] public async Task> UpdateSign(SignActivityConfig config) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.SignActivityConfig = config; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新金币商城配置 /// [HttpPost("UpdateGoldShop")] public async Task> UpdateGoldShop(List configs) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.GoldShopConfigs = configs; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新钻石商城配置 /// [HttpPost("UpdateDiamondShop")] public async Task> UpdateDiamondShop(List configs) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.DiamondShopConfigs = configs; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新注册配置 /// [HttpPost("UpdateRegister")] public async Task> UpdateRegister(RegisterConfig config) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.RegisterConfig = config; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 更新捕鱼返金币活动配置 /// [HttpPost("UpdateFishingReturn")] public async Task> UpdateFishingReturn(FishingReturnConfig config) { var activityConfig = await _activityConfigService.Get() ?? new ActivityConfig(); activityConfig.FishingReturnConfig = config; var res = await _activityConfigService.Update(activityConfig); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 获取捕鱼返金币活动配置 /// [HttpGet("GetFishingReturn")] public async Task> GetFishingReturn() { var config = await _activityConfigService.Get(); if (config?.FishingReturnConfig != null) return this.ToResult(config.FishingReturnConfig); else return this.ToFailResult("配置不存在"); } /// /// 保存指定板块到 activityconfig.json(将当前 MongoDB 配置写回初始化文件) /// [HttpGet("SaveSection/{sectionName}")] public async Task> SaveSection(string sectionName) { var prop = typeof(ActivityConfig).GetProperty(sectionName); if (prop == null) return this.ToFailResult($"板块 {sectionName} 不存在"); var config = await _activityConfigService.Get(); if (config == null) return this.ToFailResult("配置不存在"); var sectionValue = prop.GetValue(config); if (sectionValue == null) return this.ToFailResult($"板块 {sectionName} 数据为空"); var jsonPath = global::System.IO.Path.Combine(AppContext.BaseDirectory, "Config", "activityconfig.json"); try { await _activityConfigService.Update(config); ActivityConfig fileConfig; if (global::System.IO.File.Exists(jsonPath)) { var json = await global::System.IO.File.ReadAllTextAsync(jsonPath, global::System.Text.Encoding.UTF8); fileConfig = global::System.Text.Json.JsonSerializer.Deserialize(json, new global::System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true, ReadCommentHandling = global::System.Text.Json.JsonCommentHandling.Skip }) ?? new ActivityConfig(); } else { fileConfig = new ActivityConfig(); } prop.SetValue(fileConfig, sectionValue); var outJson = global::System.Text.Json.JsonSerializer.Serialize(fileConfig, new global::System.Text.Json.JsonSerializerOptions { WriteIndented = true, Encoder = global::System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); await global::System.IO.File.WriteAllTextAsync(jsonPath, outJson, global::System.Text.Encoding.UTF8); return this.ToResult($"{sectionName} 已保存到 activityconfig.json"); } catch (Exception ex) { return this.ToFailResult($"保存失败: {ex.Message}"); } } /// /// 导出活动配置指定板块为 JSON 文件 /// [HttpGet("ExportSection/{sectionName}")] public async Task ExportSection(string sectionName) { var config = await _activityConfigService.Get(); if (config == null) return NotFound("配置不存在"); var prop = typeof(ActivityConfig).GetProperty(sectionName); if (prop == null) return NotFound($"板块 {sectionName} 不存在"); var data = prop.GetValue(config); if (data == null) return NotFound($"板块 {sectionName} 数据为空"); var json = global::System.Text.Json.JsonSerializer.Serialize(data, new global::System.Text.Json.JsonSerializerOptions { WriteIndented = true, Encoder = global::System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); return File(global::System.Text.Encoding.UTF8.GetBytes(json), "application/json", $"{sectionName}.json"); } } }