增加Shop API

This commit is contained in:
chfei committed 2026-10-29 11:34:35 +08:00
1 parent 3769193696
commit 5d017740c6
83 files changed
+4451 -696

No files matched your search

@@ -0,0 +1,164 @@
namespace Store.Shops.Dtos;
/// <summary>用户店铺默认售后地址的接口输出。</summary>
public sealed class DefaultAddressInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>软件账号。</summary>
public string UserId { get; set; } = "";
/// <summary>店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>省份。</summary>
public string ProvinceName { get; set; } = "";
/// <summary>城市。</summary>
public string CityName { get; set; } = "";
/// <summary>区县。</summary>
public string CountyName { get; set; } = "";
/// <summary>详细地址。</summary>
public string DetailInfo { get; set; } = "";
/// <summary>收件人电话。</summary>
public string TelNumber { get; set; } = "";
/// <summary>收件人姓名。</summary>
public string Receiver { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime MdyTime { get; set; }
}
/// <summary>订单解密地址的接口输出。</summary>
public sealed class OrderAddressInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>订单ID。</summary>
public string OrderId { get; set; } = "";
/// <summary>解密后的地址内容。</summary>
public string OrderAddress { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime MdyTime { get; set; }
}
/// <summary>主账号共享采购备注的接口输出。</summary>
public sealed class BuyUrlNoteInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>所属主账号。</summary>
public string UserName { get; set; } = "";
/// <summary>商品编码。</summary>
public string SpuCode { get; set; } = "";
/// <summary>采购链接备注。</summary>
public string BuyUrlNotes { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime MdyTime { get; set; }
}
/// <summary>运单库存及分配状态的接口输出。</summary>
public sealed class WaybillInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>运单所属账号。</summary>
public string UserName { get; set; } = "";
/// <summary>物流公司编码。</summary>
public string DeliveryId { get; set; } = "";
/// <summary>物流公司名称。</summary>
public string DeliveryName { get; set; } = "";
/// <summary>运单号。</summary>
public string WaybillId { get; set; } = "";
/// <summary>预绑定订单ID。</summary>
public string BindOrderId { get; set; } = "";
/// <summary>分配订单ID。</summary>
public string OrderId { get; set; } = "";
/// <summary>使用店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>0未使用,1已预占,2已使用。</summary>
public int Status { get; set; }
/// <summary>入库时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>正式使用时间。</summary>
public DateTime? UseTime { get; set; }
/// <summary>揽收时间。</summary>
public DateTime? WaybillPickupTime { get; set; }
}
/// <summary>订单物流优化结果的接口输出。</summary>
public sealed class OptimizeResultInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>订单ID。</summary>
public string OrderId { get; set; } = "";
/// <summary>补发处理结果。</summary>
public string OptimizeRst { get; set; } = "";
/// <summary>运单号。</summary>
public string WaybillId { get; set; } = "";
/// <summary>物流公司名称。</summary>
public string DeliveryName { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime MdyTime { get; set; }
}
/// <summary>订单物流优化备注的接口输出。</summary>
public sealed class OptimizeRemarkInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>订单ID。</summary>
public string OrderId { get; set; } = "";
/// <summary>备注内容,允许清空。</summary>
public string Remark { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime MdyTime { get; set; }
}
/// <summary>ERP商户余额的接口输出。</summary>
public sealed class ErpAccountInfo
{
/// <summary>账户ID。</summary>
public long Id { get; set; }
/// <summary>ERP用户ID。</summary>
public long UserId { get; set; }
/// <summary>账户名称。</summary>
public string AccountName { get; set; } = "";
/// <summary>账户状态。</summary>
public int AccountStatus { get; set; }
/// <summary>账户类型。</summary>
public int AccountType { get; set; }
/// <summary>可用余额。</summary>
public decimal Balance { get; set; }
/// <summary>冻结金额。</summary>
public decimal FrozenAmount { get; set; }
/// <summary>累计充值。</summary>
public decimal RechargeAmountTotal { get; set; }
/// <summary>已提现金额。</summary>
public decimal WithdrawnAmount { get; set; }
/// <summary>提现账户图片。</summary>
public string WithdrawAccountImageUrl { get; set; } = "";
/// <summary>创建人。</summary>
public long? CreateBy { get; set; }
/// <summary>修改人。</summary>
public long? UpdateBy { get; set; }
/// <summary>创建时间。</summary>
public DateTime? CreateTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime? UpdateTime { get; set; }
}
@@ -0,0 +1,284 @@
using System.ComponentModel.DataAnnotations;
namespace Store.Shops.Dtos;
/// <summary>分页与统计选项。</summary>
public class PageRequest
{
/// <summary>页码,从1开始。</summary>
public int Page { get; set; } = 1;
/// <summary>每页数量,上限500。</summary>
public int PageSize { get; set; } = 50;
/// <summary>是否跳过总数统计,跳过时总数为-1。</summary>
public bool NotCount { get; set; }
}
/// <summary>微信店铺查询。</summary>
public class ShopQueryRequest : ShopSearchRequest
{
/// <summary>是否补充ERP店铺和商户编号。</summary>
public bool IsGetErpShopId { get; set; }
/// <summary>兼容旧调用的标志,到期信息始终返回。</summary>
public bool IsShowExpire { get; set; }
}
/// <summary>按登录名定位店铺。</summary>
public class LoginRequest
{
/// <summary>店铺登录名。</summary>
[Required(ErrorMessage = "店铺登录名不能为空")]
public string LoginName { get; set; } = "";
/// <summary>可选原店铺ID。</summary>
public string? ShopId { get; set; }
/// <summary>管理员操作的目标账号,普通调用忽略。</summary>
public string? ShopUserName { get; set; }
}
/// <summary>微信店铺新增或部分更新;null保留,空串清空。</summary>
public class ShopSaveRequest : LoginRequest
{
/// <summary>登录密码。</summary>
public string? LoginPass { get; set; }
/// <summary>登录Cookie。</summary>
public string? Cookie { get; set; }
/// <summary>第二组Cookie。</summary>
public string? Cookie2 { get; set; }
/// <summary>风控参数。</summary>
public string? AntiContents { get; set; }
/// <summary>更新后的店铺ID。</summary>
public string? NewShopId { get; set; }
/// <summary>店铺名称。</summary>
public string? ShopAccount { get; set; }
/// <summary>逗号分隔的直属子账号。</summary>
public string? SubUserName { get; set; }
/// <summary>店铺分组。</summary>
public string? GroupName { get; set; }
/// <summary>备注。</summary>
public string? Notes { get; set; }
/// <summary>登录状态。</summary>
public string? LoginStatus { get; set; }
}
/// <summary>同登录名下授权店铺的登录状态更新。</summary>
public class CookieRequest
{
/// <summary>店铺登录名。</summary>
[Required(ErrorMessage = "店铺登录名不能为空")]
public string LoginName { get; set; } = "";
/// <summary>登录Cookie。</summary>
public string? Cookie { get; set; }
/// <summary>第二组Cookie。</summary>
public string? Cookie2 { get; set; }
/// <summary>登录状态。</summary>
public string? LoginStatus { get; set; }
/// <summary>第二组登录状态。</summary>
public string? LoginStatus2 { get; set; }
/// <summary>微信OpenId。</summary>
public string? Openid { get; set; }
/// <summary>拼多多用户ID。</summary>
public string? PddId { get; set; }
}
/// <summary>店铺ID批量请求。</summary>
public class ShopIdsRequest
{
/// <summary>店铺ID数组。</summary>
[Required(ErrorMessage = "店铺ID数组不能为空")]
public string[] ShopIds { get; set; } = [];
}
/// <summary>设置共享上传额度。</summary>
public class QuotaRequest : ShopIdsRequest
{
/// <summary>剩余额度,不得小于0。</summary>
public int RemainCount { get; set; }
}
/// <summary>批量分配选品操作员。</summary>
public class AssignRequest
{
/// <summary>记录ID数组,优先于登录名。</summary>
public int[]? DbIds { get; set; }
/// <summary>店铺登录名数组。</summary>
public string[]? ShopLoginNames { get; set; }
/// <summary>操作员账号,空串表示解除分配。</summary>
[Required(AllowEmptyStrings = true, ErrorMessage = "操作员账号不能为null,解除分配请传空串")]
public string OperateSubSaName { get; set; } = "";
}
/// <summary>查询授权店铺相关ERP商户。</summary>
public class ErpRequest : PageRequest
{
/// <summary>可选店铺ID。</summary>
public string? ShopId { get; set; }
/// <summary>公司账号ID。</summary>
public long? CorporateAccountUserId { get; set; }
/// <summary>管理账号ID。</summary>
public long? ManageUserId { get; set; }
}
/// <summary>维护当前用户的店铺默认地址。</summary>
public class AddressRequest : ShopIdRequest
{
/// <summary>省份。</summary>
[Required(ErrorMessage = "省份不能为空")]
public string ProvinceName { get; set; } = "";
/// <summary>城市。</summary>
[Required(ErrorMessage = "城市不能为空")]
public string CityName { get; set; } = "";
/// <summary>区县。</summary>
[Required(ErrorMessage = "区县不能为空")]
public string CountyName { get; set; } = "";
/// <summary>详细地址。</summary>
[Required(ErrorMessage = "详细地址不能为空")]
public string DetailInfo { get; set; } = "";
/// <summary>收件人电话。</summary>
[Required(ErrorMessage = "收件人电话不能为空")]
public string TelNumber { get; set; } = "";
/// <summary>收件人姓名。</summary>
[Required(ErrorMessage = "收件人姓名不能为空")]
public string Receiver { get; set; } = "";
}
/// <summary>查询本人默认地址。</summary>
public class AddressSearchRequest : PageRequest
{
/// <summary>可选店铺ID数组。</summary>
public string[]? ShopIds { get; set; }
}
/// <summary>保存订单解密地址。</summary>
public class OrderAddressRequest : ShopIdRequest
{
/// <summary>订单ID。</summary>
[Required(ErrorMessage = "订单ID不能为空")]
public string OrderId { get; set; } = "";
/// <summary>解密地址内容。</summary>
[Required(ErrorMessage = "解密地址内容不能为空")]
public string OrderAddress { get; set; } = "";
}
/// <summary>按订单查询授权店铺的数据。</summary>
public class OrderSearchRequest : PageRequest
{
/// <summary>订单ID数组,地址查询必填。</summary>
public string[]? OrderIds { get; set; }
}
/// <summary>维护主账号共享采购备注。</summary>
public class NoteRequest
{
/// <summary>商品编码。</summary>
[Required(ErrorMessage = "商品编码不能为空")]
public string SpuCode { get; set; } = "";
/// <summary>采购备注。</summary>
[Required(ErrorMessage = "采购备注不能为空")]
public string BuyUrlNotes { get; set; } = "";
/// <summary>可选目标主账号,必须匹配当前主账号。</summary>
public string? MainUserName { get; set; }
}
/// <summary>查询主账号采购备注。</summary>
public class NoteSearchRequest : PageRequest
{
/// <summary>商品编码数组。</summary>
[Required(ErrorMessage = "商品编码数组不能为空")]
public string[] SpuCodes { get; set; } = [];
/// <summary>可选目标主账号。</summary>
public string? MainUserName { get; set; }
}
/// <summary>微信侧拼多多店铺资料。</summary>
public class PddSaveRequest : ShopSaveRequest
{
/// <summary>拼多多商城ID。</summary>
public string? MallId { get; set; }
}
/// <summary>查询运单库存。</summary>
public class WaybillSearchRequest : OrderSearchRequest
{
/// <summary>状态数组:0未使用、1预占、2已使用。</summary>
public int[]? Status { get; set; }
}
/// <summary>新增本人运单库存。</summary>
public class WaybillAddRequest
{
/// <summary>物流公司编码。</summary>
[Required(ErrorMessage = "物流公司编码不能为空")]
public string DeliveryId { get; set; } = "";
/// <summary>物流公司名称。</summary>
[Required(ErrorMessage = "物流公司名称不能为空")]
public string DeliveryName { get; set; } = "";
/// <summary>运单号。</summary>
[Required(ErrorMessage = "运单号不能为空")]
public string WaybillId { get; set; } = "";
/// <summary>预绑定订单ID。</summary>
public string? BindOrderId { get; set; }
/// <summary>揽收时间,与绑定订单至少填写一个。</summary>
public DateTime? WaybillPickupTime { get; set; }
}
/// <summary>删除未使用运单。</summary>
public class WaybillDeleteRequest
{
/// <summary>运单号数组。</summary>
[Required(ErrorMessage = "运单号数组不能为空")]
public string[] WaybillIds { get; set; } = [];
}
/// <summary>为授权店铺订单分配运单。</summary>
public class WaybillSelectRequest : ShopIdRequest
{
/// <summary>订单ID。</summary>
[Required(ErrorMessage = "订单ID不能为空")]
public string OrderId { get; set; } = "";
/// <summary>订单时间,按次日揽收范围选择。</summary>
public DateTime? OrderTime { get; set; }
}
/// <summary>确认使用或释放预占运单。</summary>
public class WaybillUseRequest : WaybillSelectRequest
{
/// <summary>运单号。</summary>
[Required(ErrorMessage = "运单号不能为空")]
public string WaybillId { get; set; } = "";
/// <summary>为true时释放,仅允许预占状态释放。</summary>
public bool IsRollback { get; set; }
}
/// <summary>保存授权订单的物流优化结果。</summary>
public class OptimizeResultRequest : ShopIdRequest
{
/// <summary>订单ID。</summary>
[Required(ErrorMessage = "订单ID不能为空")]
public string OrderId { get; set; } = "";
/// <summary>补发结果。</summary>
[Required(ErrorMessage = "补发结果不能为空")]
public string OptimizeRst { get; set; } = "";
/// <summary>运单号,null保留。</summary>
public string? WaybillId { get; set; }
/// <summary>物流公司名称,null保留。</summary>
public string? DeliveryName { get; set; }
}
/// <summary>保存订单物流备注。</summary>
public class OptimizeRemarkRequest : ShopIdRequest
{
/// <summary>订单ID。</summary>
[Required(ErrorMessage = "订单ID不能为空")]
public string OrderId { get; set; } = "";
/// <summary>备注内容,空串可清空,null不允许。</summary>
[Required(AllowEmptyStrings = true, ErrorMessage = "备注不能为null,清空请传空串")]
public string Remark { get; set; } = null!;
}
/// <summary>读取共享微信令牌缓存,仅管理员可调用。</summary>
public class TokenRequest
{
/// <summary>缓存分组ID,默认1。</summary>
public int DbId { get; set; } = 1;
}
@@ -0,0 +1,67 @@
using System.Text.Json;
namespace Store.Shops.Dtos;
/// <summary>微信店铺业务资料;列表不输出密码与Cookie。</summary>
public sealed class ShopDetailsInfo
{
/// <summary>记录ID。</summary>
public int Id { get; set; }
/// <summary>店铺登录名。</summary>
public string LoginName { get; set; } = "";
/// <summary>店铺ID。</summary>
public string ShopId { get; set; } = "";
/// <summary>店铺名称。</summary>
public string ShopAccount { get; set; } = "";
/// <summary>所属账号。</summary>
public string UserName { get; set; } = "";
/// <summary>分配子账号。</summary>
public string SubUserName { get; set; } = "";
/// <summary>店铺分组。</summary>
public string GroupName { get; set; } = "";
/// <summary>公司名称。</summary>
public string CompanyName { get; set; } = "";
/// <summary>备注。</summary>
public string Notes { get; set; } = "";
/// <summary>登录状态。</summary>
public string LoginStatus { get; set; } = "";
/// <summary>第二组登录状态。</summary>
public string LoginStatus2 { get; set; } = "";
/// <summary>选品操作员。</summary>
public string OperateSubSaName { get; set; } = "";
/// <summary>创建时间。</summary>
public DateTime? AddTime { get; set; }
/// <summary>修改时间。</summary>
public DateTime? MdyTime { get; set; }
/// <summary>操作员分配时间。</summary>
public DateTime? AddSubSaTime { get; set; }
/// <summary>微信OpenId。</summary>
public string Openid { get; set; } = "";
/// <summary>永久有效标志。</summary>
public bool NeverExpires { get; set; }
/// <summary>剩余上传额度。</summary>
public int AddProductRemaining { get; set; }
/// <summary>额度所属月份。</summary>
public byte AddProductMonth { get; set; }
/// <summary>到期Unix秒数。</summary>
public int ExpireTime { get; set; }
/// <summary>充值用户店铺是否已过期。</summary>
public bool IsPointShopExpire { get; set; }
/// <summary>ERP店铺ID。</summary>
public long? ErpShopId { get; set; }
/// <summary>ERP公司账号ID。</summary>
public long? ErpCorporateAccountUserId { get; set; }
/// <summary>ERP管理账号ID。</summary>
public long? ErpManageUserId { get; set; }
}
/// <summary>专用Cookie接口响应,仅返回已授权店铺的登录凭据。</summary>
/// <param name="ShopId">微信店铺AppId。</param>
/// <param name="Cookies">指定店铺的Cookie内容。</param>
public sealed record ShopCookieInfo(string ShopId, string Cookies);
/// <summary>共享令牌列表和实际缓存刷新时间,仅管理员可读取。</summary>
/// <param name="Tokens">上游返回的令牌列表JSON数组。</param>
/// <param name="MdyTime">数据库缓存的最近刷新时间。</param>
public sealed record TokensInfo(JsonElement Tokens, DateTime MdyTime);
+63
View File
@@ -0,0 +1,63 @@
using System.ComponentModel.DataAnnotations;
namespace Store.Shops.Dtos;
public class ShopSearchRequest
{
public int Page { get; set; } = 1;
public int PageSize { get; set; } = 50;
public string? SearchId { get; set; }
public string? SearchUserName { get; set; }
public string? SearchLoginName { get; set; }
public string? SearchNotes { get; set; }
public string? SearchName { get; set; }
public string? OperateSubSaName { get; set; }
public string[]? ShopIds { get; set; }
public string[]? ShopNames { get; set; }
public string[]? ShopNotes { get; set; }
}
public sealed class ShopClientSearchRequest
{
public int Page { get; set; } = 1;
public int PageSize { get; set; } = 500;
public string[]? ShopIds { get; set; }
}
public class ShopIdRequest
{
[Required(ErrorMessage = "店铺ID不能为空")]
public string ShopId { get; set; } = "";
}
public sealed class PddTokenRequest
{
[Required(ErrorMessage = "拼多多商城ID不能为空")]
public string MallId { get; set; } = "";
}
/// <summary>更新时 null 保留原值,空串清空;归属账号只从当前身份获取。</summary>
public sealed class WeidianSaveRequest
{
[Required(ErrorMessage = "店铺登录名不能为空")]
public string LoginName { get; set; } = "";
public string? ShopId { get; set; }
public string? NewShopId { get; set; }
public string? LoginPass { get; set; }
public string? Cookie { get; set; }
public string? Cookie2 { get; set; }
public string? WdToken { get; set; }
public string? MallId { get; set; }
public string? ShopAccount { get; set; }
public string? SubUserName { get; set; }
public string? GroupName { get; set; }
public string? Notes { get; set; }
public string? LoginStatus { get; set; }
}
public sealed class WeidianCookieRequest : ShopIdRequest
{
public string? Cookie { get; set; }
public string? WdToken { get; set; }
public string? LoginStatus { get; set; }
}
+47
View File
@@ -0,0 +1,47 @@
namespace Store.Shops.Dtos;
public sealed record ShopPage<T>(IReadOnlyList<T> Items, long Total);
/// <summary>列表只返回业务资料,登录密码、Cookie 和令牌不进入列表响应。</summary>
public sealed class ShopInfo
{
public int Id { get; set; }
public string LoginName { get; set; } = "";
public string ShopId { get; set; } = "";
public string MallId { get; set; } = "";
public string PddId { get; set; } = "";
public string ShopAccount { get; set; } = "";
public string UserName { get; set; } = "";
public string SubUserName { get; set; } = "";
public string CompanyName { get; set; } = "";
public string Notes { get; set; } = "";
public string LoginStatus { get; set; } = "";
public string LoginStatus2 { get; set; } = "";
public string OperateSubSaName { get; set; } = "";
public int AddProductRemaining { get; set; }
public int AddProductMonth { get; set; }
}
/// <summary>专用授权接口响应,仅允许读取本人或明确分配店铺的凭据。</summary>
public sealed class ShopClientInfo
{
public string ShopId { get; set; } = "";
public string AppKey { get; set; } = "";
public string AppSecret { get; set; } = "";
public string AccessToken { get; set; } = "";
public string RefreshToken { get; set; } = "";
public string ApiAuthStatus { get; set; } = "";
public DateTime? ExpiresTime { get; set; }
public DateTime? UpdateTime { get; set; }
}
/// <summary>供授权客户端使用的拼多多应用配置,通过部署配置注入。</summary>
public sealed class PddClientInfo
{
public string Describe { get; set; } = "";
public string ClientId { get; set; } = "";
public string ClientSecret { get; set; } = "";
public int MarketId { get; set; }
public string RedirectUri { get; set; } = "";
public bool IsCurrent { get; set; }
}