feat: 新增宠物进化分组接口、OSS图片搬运功能及配置更新

1. 新增皮肤按进化阶段分组的输出DTO
2. 新增宠物相关便捷查询接口并实现对应控制器
3. 新增OSS图片搬运辅助类,实现临时文件迁移逻辑
4. 为商品、宠物相关服务添加OSS图片自动迁移功能
5. 调整微信授权同步逻辑移除异步等待
6. 更新配置文件中的微信密钥和OSS存储信息
7. 注册SDK服务到DI容器
This commit is contained in:
glz
2026-06-09 18:02:26 +08:00
parent badf68a8f8
commit 296d87b245
9 changed files with 421 additions and 10 deletions

View File

@ -491,4 +491,75 @@ public class PetManageController : BaseController
return BaseResponse<List<PetSkinImageOutput>>.Fail("获取皮肤图片列表失败,请稍后重试");
}
}
// ==================== 便捷查询接口 ====================
/// <summary>
/// 根据模板Id获取进化链列表非分页
/// </summary>
[HttpGet("evolutions/{templateId}")]
public async Task<BaseResponse<List<PetEvolutionOutput>>> GetEvolutionsByTemplateIdAsync(long templateId)
{
try
{
var result = await _petService.GetEvolutionsByTemplateIdAsync(templateId);
return Success(result);
}
catch (BusinessException ex)
{
_logger.LogWarning(ex, "获取进化链列表业务异常: {Message}", ex.Message);
return BaseResponse<List<PetEvolutionOutput>>.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取进化链列表系统异常TemplateId{TemplateId}", templateId);
return BaseResponse<List<PetEvolutionOutput>>.Fail("获取进化链列表失败,请稍后重试");
}
}
/// <summary>
/// 根据模板Id获取皮肤列表非分页
/// </summary>
[HttpGet("skins/{templateId}")]
public async Task<BaseResponse<List<PetSkinOutput>>> GetSkinsByTemplateIdAsync(long templateId)
{
try
{
var result = await _petService.GetSkinsByTemplateIdAsync(templateId);
return Success(result);
}
catch (BusinessException ex)
{
_logger.LogWarning(ex, "获取皮肤列表业务异常: {Message}", ex.Message);
return BaseResponse<List<PetSkinOutput>>.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取皮肤列表系统异常TemplateId{TemplateId}", templateId);
return BaseResponse<List<PetSkinOutput>>.Fail("获取皮肤列表失败,请稍后重试");
}
}
/// <summary>
/// 根据皮肤Id获取各阶段图片列表按进化阶段分组含阶段基本信息
/// </summary>
[HttpGet("skin-images-grouped/{skinId}")]
public async Task<BaseResponse<List<SkinEvolutionStageOutput>>> GetSkinImagesGroupedBySkinIdAsync(long skinId)
{
try
{
var result = await _petService.GetSkinImagesGroupedBySkinIdAsync(skinId);
return Success(result);
}
catch (BusinessException ex)
{
_logger.LogWarning(ex, "获取分组皮肤图片业务异常: {Message}", ex.Message);
return BaseResponse<List<SkinEvolutionStageOutput>>.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取分组皮肤图片系统异常SkinId{SkinId}", skinId);
return BaseResponse<List<SkinEvolutionStageOutput>>.Fail("获取分组皮肤图片失败,请稍后重试");
}
}
}

View File

@ -13,6 +13,7 @@ using QYZH.InteractiveMagazine.Infrastructure.Context;
using QYZH.InteractiveMagazine.Infrastructure.Extensions;
using QYZH.InteractiveMagazine.Infrastructure.Middleware;
using QYZH.InteractiveMagazine.Infrastructure.Redis;
using QYZH.InteractiveMagazine.Infrastructure.SDK;
using QYZH.InteractiveMagazine.Models.Entity;
using QYZH.InteractiveMagazine.Models.Enum;
using QYZH.InteractiveMagazine.Models.Settings;
@ -162,6 +163,7 @@ builder.Services.AddCors(options =>
.AllowAnyHeader();
});
});
builder.Services.AddSDKService(builder.Configuration);
#region

View File

@ -21,8 +21,8 @@
"VirtualHost": "InteractiveMagazine"
},
"WeChatSettings": {
"AppId": "your-wechat-appid",
"AppSecret": "your-wechat-appsecret"
"AppId": "wx7922cc9b6023f3ac",
"AppSecret": "95a1d61b7be03d1dab81fe19b7483dcf"
},
"Serilog": {
"MinimumLevel": {
@ -50,12 +50,12 @@
"AccessKeyID": "LTAI5tEBXGewpHSLiSxyx6Bf",
"AccessKeySecret": "w29b8wkw6XQVL8GWXgp3ZesgYeDKvf",
"VodBucketName": "outin-5277bbb52bec11f08dbd00163e169e2b.oss-cn-beijing.aliyuncs.com",
"BucketName": "qyzh-qb",
"BucketName": "qyzh2025test",
"Region": "beijing",
"RoleArn": "acs:ram::1064745380176636:role/aliyunosstokengeneratorrole",
"DurationSeconds": 3600, //过期时间(秒)
"Endpoint": "oss-cn-beijing.aliyuncs.com",
"ProjectName": "QuestionBank",
"Domain": "https://qyzh-qb.oss-cn-beijing.aliyuncs.com/"
"ProjectName": "InteractiveMagazine",
"Domain": "https://oss.test.qyzhjy.com/"
}
}