Files
2026-10-29 11:34:35 +08:00

331 lines
15 KiB
C#

using System.Text.Json;
using MAX.Framework.Conventions;
using MAX.Framework.Dtos;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Store.Shops.Dtos;
using Store.Shops.Services;
namespace Store.Shops.Controllers;
/// <summary>统一店铺接口:微信、拼多多、微店及相关物流业务;使用当前认证、JSON DTO和ApiResult响应。</summary>
[ApiController]
[Authorize]
[DefaultHttpPost]
[Route("v{version:apiVersion}/shop/[action]")]
public sealed class ShopController(ShopService shops, ShopManagementService pddShops) : ControllerBase
{
/// <summary>查询本人或直属主账号分配的微信店铺。</summary>
[EndpointSummary("查询本人或直属主账号分配的微信店铺")]
public Task<ShopPage<ShopDetailsInfo>> GetShops(ShopQueryRequest request, CancellationToken ct)
=> shops.Search(request, ct: ct);
/// <summary>查询授权店铺的ERP商户余额。</summary>
[EndpointSummary("查询授权店铺的ERP商户余额")]
public Task<ShopPage<ErpAccountInfo>> GetErpMerchants(ErpRequest request, CancellationToken ct)
=> shops.ErpMerchants(request, ct);
/// <summary>查询登录名下的授权店铺。</summary>
[EndpointSummary("查询登录名下的授权店铺")]
public Task<IReadOnlyList<ShopDetailsInfo>> GetShopsByLoginName(LoginRequest request, CancellationToken ct)
=> shops.ByLogin(request, ct);
/// <summary>批量读取授权店铺Cookie。</summary>
[EndpointSummary("批量读取授权店铺Cookie")]
public Task<IReadOnlyList<ShopCookieInfo>> GetShopCookies(ShopIdsRequest request, CancellationToken ct)
=> shops.Cookies(request, ct);
/// <summary>主账号新增微信店铺,重复记录拒绝创建。</summary>
[EndpointSummary("主账号新增微信店铺,重复记录拒绝创建")]
public async Task<ApiResult> AddShop(ShopSaveRequest request, CancellationToken ct)
{
await shops.Save(request, true, false, ct);
return ApiResult.Ok();
}
/// <summary>删除本人所属的店铺记录。</summary>
[EndpointSummary("删除本人所属的店铺记录")]
public async Task<ApiResult> DeleteShop(LoginRequest request, CancellationToken ct)
{
await shops.Delete(request, false, ct);
return ApiResult.Ok();
}
/// <summary>部分更新授权微信店铺。</summary>
[EndpointSummary("部分更新授权微信店铺")]
public async Task<ApiResult> UpdateShop(ShopSaveRequest request, CancellationToken ct)
{
await shops.Save(request, false, false, ct);
return ApiResult.Ok();
}
/// <summary>按登录名刷新授权店铺Cookie与状态。</summary>
[EndpointSummary("按登录名刷新授权店铺Cookie与状态")]
public async Task<ApiResult> UpdateShopLogin(CookieRequest request, CancellationToken ct)
{
await shops.UpdateCookies(request, ct);
return ApiResult.Ok();
}
/// <summary>管理员分页查询全部店铺。</summary>
[EndpointSummary("管理员分页查询全部店铺")]
public Task<ShopPage<ShopDetailsInfo>> GetAllShops(ShopQueryRequest request, CancellationToken ct)
=> shops.Search(request, admin: true, ct: ct);
/// <summary>管理员按选品操作员查询店铺并刷新月度额度。</summary>
[EndpointSummary("管理员按选品操作员查询店铺并刷新月度额度")]
public Task<ShopPage<ShopDetailsInfo>> GetSelectionShops(ShopQueryRequest request, CancellationToken ct)
=> shops.Search(request, selection: true, ct: ct);
/// <summary>管理员批量设置店铺上传剩余额度。</summary>
[EndpointSummary("管理员批量设置店铺上传剩余额度")]
public async Task<ApiResult> UpdateShopQuota(QuotaRequest request, CancellationToken ct)
{
await shops.UpdateQuota(request, ct);
return ApiResult.Ok();
}
/// <summary>管理员修改指定账号的店铺。</summary>
[EndpointSummary("管理员修改指定账号的店铺")]
public async Task<ApiResult> AdminUpdateShop(ShopSaveRequest request, CancellationToken ct)
{
await shops.Save(request, false, true, ct);
return ApiResult.Ok();
}
/// <summary>管理员为指定账号新增店铺。</summary>
[EndpointSummary("管理员为指定账号新增店铺")]
public async Task<ApiResult> AdminAddShop(ShopSaveRequest request, CancellationToken ct)
{
await shops.Save(request, true, true, ct);
return ApiResult.Ok();
}
/// <summary>管理员删除指定账号店铺。</summary>
[EndpointSummary("管理员删除指定账号店铺")]
public async Task<ApiResult> AdminDeleteShop(LoginRequest request, CancellationToken ct)
{
await shops.Delete(request, true, ct);
return ApiResult.Ok();
}
/// <summary>管理员批量分配或解除选品操作员。</summary>
[EndpointSummary("管理员批量分配或解除选品操作员")]
public async Task<ApiResult> AssignShopOperator(AssignRequest request, CancellationToken ct)
{
await shops.Assign(request, ct);
return ApiResult.Ok();
}
/// <summary>向当前账号导入未使用运单。</summary>
[EndpointSummary("向当前账号导入未使用运单")]
public async Task<ApiResult> AddWaybill(WaybillAddRequest request, CancellationToken ct)
{
await shops.AddWaybill(request, ct);
return ApiResult.Ok();
}
/// <summary>删除本人尚未预占的运单。</summary>
[EndpointSummary("删除本人尚未预占的运单")]
public async Task<ApiResult> DeleteWaybills(WaybillDeleteRequest request, CancellationToken ct)
{
await shops.DeleteWaybills(request, ct);
return ApiResult.Ok();
}
/// <summary>分页查询本人运单。</summary>
[EndpointSummary("分页查询本人运单")]
public Task<ShopPage<WaybillInfo>> GetWaybills(WaybillSearchRequest request, CancellationToken ct)
=> shops.Waybills(request, false, ct);
/// <summary>管理员按订单跨账号查询运单。</summary>
[EndpointSummary("管理员按订单跨账号查询运单")]
public Task<ShopPage<WaybillInfo>> GetAllWaybills(WaybillSearchRequest request, CancellationToken ct)
=> shops.Waybills(request, true, ct);
/// <summary>在同一事务中选择并确认使用运单。</summary>
[EndpointSummary("在同一事务中选择并确认使用运单")]
public async Task<ApiResult> SelectAndUseWaybill(WaybillSelectRequest request, CancellationToken ct)
{
await shops.SelectWaybill(request, true, ct);
return ApiResult.Ok();
}
/// <summary>为授权订单预占运单,优先匹配绑定订单。</summary>
[EndpointSummary("为授权订单预占运单,优先匹配绑定订单")]
public Task<WaybillInfo> ReserveWaybill(WaybillSelectRequest request, CancellationToken ct)
=> shops.SelectWaybill(request, false, ct);
/// <summary>确认使用或释放本人预占运单。</summary>
[EndpointSummary("确认使用或释放本人预占运单")]
public async Task<ApiResult> UpdateWaybillUsage(WaybillUseRequest request, CancellationToken ct)
{
await shops.UseWaybill(request, ct);
return ApiResult.Ok();
}
/// <summary>保存授权订单物流优化结果。</summary>
[EndpointSummary("保存授权订单物流优化结果")]
public async Task<ApiResult> SaveExpressOptimizeResult(OptimizeResultRequest request, CancellationToken ct)
{
await shops.SaveOptimizeResult(request, ct);
return ApiResult.Ok();
}
/// <summary>查询授权店铺物流优化结果。</summary>
[EndpointSummary("查询授权店铺物流优化结果")]
public Task<ShopPage<OptimizeResultInfo>> GetExpressOptimizeResults(OrderSearchRequest request, CancellationToken ct)
=> shops.OptimizeResults(request, ct);
/// <summary>保存或清空授权订单物流备注。</summary>
[EndpointSummary("保存或清空授权订单物流备注")]
public async Task<ApiResult> SaveExpressOptimizeRemark(OptimizeRemarkRequest request, CancellationToken ct)
{
await shops.SaveOptimizeRemark(request, ct);
return ApiResult.Ok();
}
/// <summary>查询授权店铺物流备注。</summary>
[EndpointSummary("查询授权店铺物流备注")]
public Task<ShopPage<OptimizeRemarkInfo>> GetExpressOptimizeRemarks(OrderSearchRequest request, CancellationToken ct)
=> shops.OptimizeRemarks(request, ct);
/// <summary>维护本人的店铺默认售后地址。</summary>
[EndpointSummary("维护本人的店铺默认售后地址")]
public async Task<ApiResult> SaveShopDefaultAddress(AddressRequest request, CancellationToken ct)
{
await shops.SaveDefaultAddress(request, ct);
return ApiResult.Ok();
}
/// <summary>查询本人的店铺默认地址。</summary>
[EndpointSummary("查询本人的店铺默认地址")]
public Task<ShopPage<DefaultAddressInfo>> GetShopDefaultAddresses(AddressSearchRequest request, CancellationToken ct)
=> shops.DefaultAddresses(request, ct);
/// <summary>批量删除本人的默认地址。</summary>
[EndpointSummary("批量删除本人的默认地址")]
public async Task<ApiResult> DeleteShopDefaultAddresses(ShopIdsRequest request, CancellationToken ct)
{
await shops.DeleteDefaultAddresses(request, ct);
return ApiResult.Ok();
}
/// <summary>保存授权店铺订单解密地址。</summary>
[EndpointSummary("保存授权店铺订单解密地址")]
public async Task<ApiResult> SaveOrderAddress(OrderAddressRequest request, CancellationToken ct)
{
await shops.SaveOrderAddress(request, ct);
return ApiResult.Ok();
}
/// <summary>查询授权店铺订单解密地址。</summary>
[EndpointSummary("查询授权店铺订单解密地址")]
public Task<ShopPage<OrderAddressInfo>> GetOrderAddresses(OrderSearchRequest request, CancellationToken ct)
=> shops.OrderAddresses(request, ct);
/// <summary>维护当前主账号共享采购备注。</summary>
[EndpointSummary("维护当前主账号共享采购备注")]
public async Task<ApiResult> SaveBuyUrlNote(NoteRequest request, CancellationToken ct)
{
await shops.SaveBuyNote(request, ct);
return ApiResult.Ok();
}
/// <summary>查询当前主账号共享采购备注。</summary>
[EndpointSummary("查询当前主账号共享采购备注")]
public Task<ShopPage<BuyUrlNoteInfo>> GetBuyUrlNotes(NoteSearchRequest request, CancellationToken ct)
=> shops.BuyNotes(request, ct);
/// <summary>导入或更新微信业务下的拼多多店铺资料。</summary>
[EndpointSummary("导入或更新微信业务下的拼多多店铺资料")]
public async Task<ApiResult> SavePddShop(PddSaveRequest request, CancellationToken ct)
{
await shops.SavePdd(request, ct);
return ApiResult.Ok();
}
/// <summary>刷新微信侧拼多多店铺Cookie与状态。</summary>
[EndpointSummary("刷新微信侧拼多多店铺Cookie与状态")]
public async Task<ApiResult> UpdatePddShopLogin(CookieRequest request, CancellationToken ct)
{
await shops.UpdatePddCookies(request, ct);
return ApiResult.Ok();
}
/// <summary>删除本人微信侧拼多多店铺。</summary>
[EndpointSummary("删除本人微信侧拼多多店铺")]
public async Task<ApiResult> DeletePddShop(LoginRequest request, CancellationToken ct)
{
await shops.DeletePdd(request, ct);
return ApiResult.Ok();
}
/// <summary>查询授权微信侧拼多多店铺。</summary>
[EndpointSummary("查询授权微信侧拼多多店铺")]
public Task<ShopPage<ShopInfo>> GetPddShops(ShopSearchRequest request, CancellationToken ct)
=> shops.PddShops(request, ct);
/// <summary>管理员读取共享微信令牌列表缓存。</summary>
[EndpointSummary("管理员读取共享微信令牌列表缓存")]
public Task<TokensInfo> GetTokens(TokenRequest request, CancellationToken ct)
=> shops.TokenList(request, ct);
/// <summary>获取授权微信店铺的e57令牌。</summary>
[EndpointSummary("获取授权微信店铺的e57令牌")]
public Task<JsonElement> GetShopToken(ShopIdRequest request, CancellationToken ct)
=> shops.ShopToken(request, ct);
/// <summary>获取部署配置中的拼多多应用信息。</summary>
[EndpointSummary("获取部署配置中的拼多多应用信息")]
public Task<IReadOnlyList<PddClientInfo>> GetPddClients() => pddShops.GetPddClients();
/// <summary>查询本人或分配店铺的拼多多授权资料,读取bxx.shop_api_auth。</summary>
[EndpointSummary("查询本人或分配店铺的拼多多授权资料,读取bxx.shop_api_auth")]
public Task<ShopPage<ShopClientInfo>> GetPddShopClients(ShopClientSearchRequest request, CancellationToken ct)
=> pddShops.GetShopClientInfo(request, ct);
/// <summary>检查bxx.shop归属后获取拼多多商城令牌。</summary>
[EndpointSummary("检查bxx.shop归属后获取拼多多商城令牌")]
public Task<JsonElement> GetPddShopToken(PddTokenRequest request, CancellationToken ct)
=> pddShops.GetPddToken(request, ct);
/// <summary>管理员查询bxx.shop店铺并维护共享月度额度。</summary>
[EndpointSummary("管理员查询bxx.shop店铺并维护共享月度额度")]
public Task<ShopPage<ShopInfo>> GetAllPddShops(ShopSearchRequest request, CancellationToken ct)
=> pddShops.GetAdminShops(request, ct);
/// <summary>新增微店店铺,重复导入时更新资料。</summary>
[EndpointSummary("新增微店店铺,重复导入时更新资料")]
public async Task<ApiResult> AddWeidianShop(WeidianSaveRequest request, CancellationToken ct)
{
await pddShops.SaveWeidian(request, true, ct);
return ApiResult.Ok();
}
/// <summary>部分更新本人或已分配微店店铺。</summary>
[EndpointSummary("部分更新本人或已分配微店店铺")]
public async Task<ApiResult> UpdateWeidianShop(WeidianSaveRequest request, CancellationToken ct)
{
await pddShops.SaveWeidian(request, false, ct);
return ApiResult.Ok();
}
/// <summary>更新授权微店店铺的Cookie与登录状态。</summary>
[EndpointSummary("更新授权微店店铺的Cookie与登录状态")]
public async Task<ApiResult> UpdateWeidianShopLogin(WeidianCookieRequest request, CancellationToken ct)
{
await pddShops.UpdateWeidianCookie(request, ct);
return ApiResult.Ok();
}
/// <summary>删除当前账号拥有的微店店铺。</summary>
[EndpointSummary("删除当前账号拥有的微店店铺")]
public async Task<ApiResult> DeleteWeidianShop(ShopIdRequest request, CancellationToken ct)
{
await pddShops.DeleteWeidian(request, ct);
return ApiResult.Ok();
}
}