Files
BuYuHouDuan/AdminSrc/AdminApi/GameConfigs/ActivityConfigController.cs
T

267 lines
10 KiB
C#

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;
}
/// <summary>
/// 获取活动配置
/// </summary>
[HttpGet]
/// <summary>
/// 获取活动配置
/// </summary>
[HttpGet("Get")]
public async Task<BaseResponse<ActivityConfig>> Get()
{
var config = await _activityConfigService.Get();
if (config != null)
return this.ToResult(config);
else
return this.ToFailResult<ActivityConfig>("配置不存在");
}
/// <summary>
/// 更新活动配置
/// </summary>
[HttpPost("Update")]
public async Task<BaseResponse<string>> Update(ActivityConfig config)
{
var res = await _activityConfigService.Update(config);
if (res.isok)
return this.ToResult(res.msg);
else
return this.ToFailResult<string>(res.msg);
}
/// <summary>
/// 删除活动配置
/// </summary>
[HttpPost("Delete")]
public async Task<BaseResponse<string>> Delete()
{
var res = await _activityConfigService.Delete();
if (res.isok)
return this.ToResult(res.msg);
else
return this.ToFailResult<string>(res.msg);
}
/// <summary>
/// 更新战令配置
/// </summary>
[HttpPost("UpdateBattleOrder")]
public async Task<BaseResponse<string>> 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<string>(res.msg);
}
/// <summary>
/// 更新救济金配置
/// </summary>
[HttpPost("UpdateRelief")]
public async Task<BaseResponse<string>> 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<string>(res.msg);
}
/// <summary>
/// 更新签到池配置
/// </summary>
[HttpPost("UpdateSign")]
public async Task<BaseResponse<string>> 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<string>(res.msg);
}
/// <summary>
/// 更新金币商城配置
/// </summary>
[HttpPost("UpdateGoldShop")]
public async Task<BaseResponse<string>> UpdateGoldShop(List<GoldShopConfig> 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<string>(res.msg);
}
/// <summary>
/// 更新钻石商城配置
/// </summary>
[HttpPost("UpdateDiamondShop")]
public async Task<BaseResponse<string>> UpdateDiamondShop(List<DiamondShopConfig> 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<string>(res.msg);
}
/// <summary>
/// 更新注册配置
/// </summary>
[HttpPost("UpdateRegister")]
public async Task<BaseResponse<string>> 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<string>(res.msg);
}
/// <summary>
/// 更新捕鱼返金币活动配置
/// </summary>
[HttpPost("UpdateFishingReturn")]
public async Task<BaseResponse<string>> 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<string>(res.msg);
}
/// <summary>
/// 获取捕鱼返金币活动配置
/// </summary>
[HttpGet("GetFishingReturn")]
public async Task<BaseResponse<FishingReturnConfig>> GetFishingReturn()
{
var config = await _activityConfigService.Get();
if (config?.FishingReturnConfig != null)
return this.ToResult(config.FishingReturnConfig);
else
return this.ToFailResult<FishingReturnConfig>("配置不存在");
}
/// <summary>
/// 保存指定板块到 activityconfig.json(将当前 MongoDB 配置写回初始化文件)
/// </summary>
[HttpGet("SaveSection/{sectionName}")]
public async Task<BaseResponse<string>> SaveSection(string sectionName)
{
var prop = typeof(ActivityConfig).GetProperty(sectionName);
if (prop == null)
return this.ToFailResult<string>($"板块 {sectionName} 不存在");
var config = await _activityConfigService.Get();
if (config == null)
return this.ToFailResult<string>("配置不存在");
var sectionValue = prop.GetValue(config);
if (sectionValue == null)
return this.ToFailResult<string>($"板块 {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<ActivityConfig>(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<string>($"保存失败: {ex.Message}");
}
}
/// <summary>
/// 导出活动配置指定板块为 JSON 文件
/// </summary>
[HttpGet("ExportSection/{sectionName}")]
public async Task<IActionResult> 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");
}
}
}