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(); } }