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