using Newtonsoft.Json; using System; using System.Collections.Generic; using WPFCommon.Models; namespace _29WxOrderWpf.Ctrls.Statistics.Models { /// /// 店铺营收统计 - 查询参数。 /// 对应新接口 shop_revenue_statistics/get_shop_order_amount 与 /// shop_revenue_statistics/get_shop_stats_details 的请求体(StartDate / EndDate / ShopIds)。 /// public class ShopRevenueStatisticsQuery { /// 开始日期 public DateTime StartDate { get; set; } /// 结束日期 public DateTime EndDate { get; set; } /// /// 选中的店铺 ERP 店铺ID(ShopLoginInfo.ErpShopId)列表; /// 空/Null 表示全部店铺(服务层会取全部店铺的 ErpShopId)。 /// public List ShopIds { get; set; } } /// /// 店铺统计记录(接口返回)。 /// 接口返回结构: /// shop_revenue_statistics/GetShopStats -> Result<Dictionary<string, List<ShopStatsResponse>>> /// Key = 店铺ID,Value = 该店铺按 聚合后的记录列表 /// (汇总=1 条;天/周/月=每个自然日/自然周/自然月各 1 条)。 /// 注意:接口只返回按 GroupType 聚合后的记录,不返回“整段汇总”, /// 页面上的汇总卡片由客户端对返回记录自行合计(GroupType=Summary 时每店铺一条,直接相加即可)。 /// 金额字段单位均为“分”,显示时需除以 100 转为元。 /// public class ShopStatsResponse { /// /// 店铺ID /// public string ShopId { get; set; } /// /// 销售订单创建日期 /// public DateTime StatDate { get; set; } /// /// 订单数(有效订单,不含退款订单) /// public int OrderCount { get; set; } /// /// 销售总额(分) /// public long SalesAmount { get; set; } /// /// 利润(分) /// public long ProfitAmount { get; set; } /// /// 平台佣金(分) /// public long PlatformFee { get; set; } /// /// 退款订单数 /// public int RefundOrderCount { get; set; } /// /// 已成功退款金额(分,店铺端已退款成功) /// public long RefundDone { get; set; } /// /// 退款处理中金额(分,店铺端退款中) /// public long RefundPending { get; set; } /// /// 采购单数 /// public int PurchaseCount { get; set; } /// /// 总花费金额(分,买手号采购付款金额) /// public long TotalPurchase { get; set; } /// /// 售后中买手总金额(分) /// public long TotalRefund => DoneRefund + PendingRefund + RejectedRefund; /// /// 已成功退款金额(分,买手号采购退款成功) /// public long DoneRefund { get; set; } /// /// 未退回金额(分) /// public long PendingRefund { get; set; } /// /// 被拒绝金额(分) /// public long RejectedRefund { get; set; } } /// /// 销售趋势记录(接口返回):跨店铺合计后的按天趋势,供综合统计页的销售趋势折线图使用。 /// 接口返回结构: /// shop_revenue_statistics/GetShopStatsTrend /// -> Result<List<ShopStatsTrendResponse>> /// 请求参数:StartDate / EndDate / ShopIds(不需要 GroupType,固定按天返回)。 /// 金额字段单位为“分”,显示时需除以 100 转为元。 /// public class ShopStatsTrendResponse { /// /// 统计日期(天) /// public DateTime StatDate { get; set; } /// /// 销售额(分) /// public long SalesAmount { get; set; } /// /// 订单数 /// public int OrderCount { get; set; } } /// /// 订单明细(接口返回):订单列表弹窗 ShowOrderDialogView 的数据行。 /// 接口返回结构: /// shop_revenue_statistics/GetShopOrderDetails /// -> Result<List<ShopOrderDetailResponse>> /// 请求参数:StartDate / EndDate / ShopIds / OrderType(见 )。 /// 金额字段单位均为“分”,显示时需除以 100 转为元。 /// public class ShopOrderDetailResponse { /// /// 店铺ID /// public long ShopId { get; set; } /// /// 店铺名称 /// public string ShopName { get; set; } /// /// 商铺订单号 /// public string OrderId { get; set; } /// /// 订单创建时间 /// public DateTime CreateTime { get; set; } /// /// 订单金额(分) /// public int OrderPrice { get; set; } /// /// 订单退款金额(分),即商铺订单商品明细的退款金额之和;有效订单为 0 /// public int OrderRefundAmount { get; set; } /// /// 利润 /// public long ProfitAmount { get; set; } /// /// 平台佣金 /// public long PlatformFee { get; set; } /// /// 外采金额(分),即该订单下所有买手订单的购买金额之和 /// public int OutAmount { get; set; } /// /// 买手未退回金额(分),即买手订单中退款未成功的退款金额之和;无售后时为 0 /// public int UnrefundedAmount { get; set; } /// /// 买手订单信息(一个订单号对应多个买手订单) /// public List BuyerOrders { get; set; } = new List(); } /// /// 买手订单信息(订单明细下的子项,一个商铺订单可对应多个买手订单) /// public class BuyerOrderInfo { /// /// 买手订单ID /// public long Id { get; set; } /// /// 仓库类型 0,1直发 /// public int PurchaseType { get; set; } /// /// 外部订单(买手订单)号 /// public string OutOrderSn { get; set; } /// /// 金额(分) /// public int OutAmount { get; set; } public long RefundId { get; set; } /// /// 退款金额(分) /// public int RefundAmount { get; set; } /// /// 退款状态 /// public string RefundStatusText { get; set; } public DateTime CreateTime { get; set; } public string Remark { get; set; } } /// /// 顶部汇总卡片数据(金额单位:元) /// public class ShopRevenueSummary { /// 销售额(最终有效销售额) public decimal SalesAmount { get; set; } /// 有效订单数(已扣除退款订单) public int ValidOrderCount { get; set; } /// 利润(实际利润) public decimal Profit { get; set; } /// 退款金额(统计期间店铺端退款:已成功 + 处理中) public decimal RefundAmount { get; set; } /// 退款订单数 public int RefundOrderCount { get; set; } /// 平台服务费总额(元) public decimal PlatformFeeTotal { get; set; } /// /// 达人佣金(元)。 /// 新接口未提供该字段,固定为 0,保留属性与页面展示,待后端补充字段后直接接上。 /// public decimal Commission { get; set; } /// 客单价(平均每单金额) public decimal AvgOrderAmount { get; set; } /// 退款率(退款订单占比,百分数,如 2.31 表示 2.31%) public decimal RefundRate { get; set; } /// 平均利润率(利润 / 采购金额,百分数,如 12.34 表示 12.34%) public decimal AverageProfitRate { get; set; } /// 买手号付款金额(采购金额,元) public decimal BuyerPaymentAmount { get; set; } /// 买手号退款金额(采购退款金额,元) public decimal BuyerRefundAmount { get; set; } /// 买手号退款成功金额(采购退款金额,元) public decimal BuyerRefundSuccessedAmount { get; set; } /// 买手号剩余退款金额(尚未成功退款的金额,元) public decimal BuyerRefundRemainingAmount => BuyerRefundAmount - BuyerRefundSuccessedAmount; } /// /// 销售趋势数据点(金额单位:元) /// public class RevenueTrendPoint { /// 日期 public DateTime Date { get; set; } /// 日期文本(MM-dd) public string DateText { get { return Date.ToString("MM-dd"); } } /// 当日销售额(元) public decimal SalesAmount { get; set; } /// 当日有效订单数 public int OrderCount { get; set; } } /// /// 店铺销售占比数据(金额单位:元) /// public class ShopSalesProportionItem { /// 店铺名称 public string ShopName { get; set; } /// 销售额(元) public decimal SalesAmount { get; set; } /// 占比(0~100) public double Percentage { get; set; } } /// /// 店铺统计表格行(金额单位:元) /// public class ShopStatisticsItem { /// 店铺名称 public string ShopName { get; set; } /// 订单数(有效订单,不含退款订单) public int OrderCount { get; set; } /// 销售额(元) public decimal SalesAmount { get; set; } /// 采购金额(元) public decimal BuyerPaymentAmount { get; set; } /// 利润(元) public decimal Profit { get; set; } /// 退款金额(元) public decimal RefundAmount { get; set; } /// 平台服务费总额(元) public decimal PlatformFeeTotal { get; set; } /// 达人佣金(元)。新接口未提供该字段,固定为 0。 public decimal Commission { get; set; } /// 客单价(元) public decimal AvgOrderAmount { get; set; } /// 平均利润率(利润 / 采购金额,百分数,如 12.34 表示 12.34%) public decimal AverageProfitRate { get; set; } } /// /// 统计周期类型:天 / 周 / 月 /// public enum PeriodStatisticType { /// 按天统计 Day = 0, /// 按周统计(周一起始) Week = 1, /// 按月统计 Month = 2 } /// /// 接口聚合方式(请求参数 GroupType,按数字传值)。 /// 每种方式都返回 Dictionary<店铺ID, List<ShopStatsResponse>>: /// 汇总时每个店铺 1 条,天/周/月时每个店铺每个周期 1 条。 /// public enum ShopStatsGroupType { /// /// 汇总:每个商铺只返回一条(整个查询范围合计) /// Summary = 0, /// /// 天:按自然日聚合,每个商铺每天一条 /// Day = 1, /// /// 周:按自然周聚合(周一为一周开始),每个商铺每周一条 /// Week = 2, /// /// 月:按自然月聚合,每个商铺每月一条 /// Month = 3 } /// /// 订单明细类型(订单列表弹窗的入口类型,对应接口参数 OrderType,按数字传值)。 /// 数值与后端枚举保持一致:有效订单=1、退款订单=2、买手未退回金额的订单=3 /// (后端枚举里的“全部订单 All=0”本页不使用,故不定义)。 /// public enum ShopOrderDetailType { /// 有效订单:没有发生售后的订单(对应统计里的订单数 / 销售额 / 利润口径) Valid = 1, /// 退款订单:发生过售后的订单(对应统计里的退款订单数口径) Refund = 2, /// 买手未退回金额的订单:退款订单中买手款项还没退回的(对应统计里的未退回金额口径) BuyerUnrefunded = 3, /// /// 利润订单 有效订单+退款订单利润>0 /// Profit = 4, } /// /// 天/周/月周期统计表格行(金额单位:元)。 /// 按所选店铺(或全部店铺)统计:天统计每天一行;周统计每周一行;月统计每月一行。 /// public class ShopPeriodStatisticsItem { /// 周期开始日期(用于排序) public DateTime PeriodStart { get; set; } /// 周期显示文本(天:yyyy-MM-dd;周:yyyy-MM-dd ~ yyyy-MM-dd;月:yyyy-MM) public string Period { get; set; } /// 订单数(有效订单,不含退款订单) public int OrderCount { get; set; } /// 销售额(元) public decimal SalesAmount { get; set; } /// 买手号付款金额(采购金额,元) public decimal BuyerPaymentAmount { get; set; } /// 利润(元) public decimal Profit { get; set; } /// 退款金额(元) public decimal RefundAmount { get; set; } /// 平台服务费总额(元) public decimal PlatformFeeTotal { get; set; } /// 达人佣金(元)。新接口未提供该字段,固定为 0。 public decimal Commission { get; set; } /// 平均利润率(利润 / 采购金额,百分数,如 12.34 表示 12.34%) public decimal AverageProfitRate { get; set; } /// 客户数 public int CustomerCount { get; set; } /// 客单价(元) public decimal AvgOrderAmount { get; set; } } /// /// 店铺营收统计 - 一次查询的全部聚合结果(综合统计页使用)。 /// 由两次请求组成: /// shop_revenue_statistics/GetShopStats(GroupType=Summary)-> 卡片/店铺统计表/销售占比(每店铺一条,与区间长度无关) /// shop_revenue_statistics/GetShopStatsTrend -> 销售趋势(跨店铺合计的按天序列) /// public class ShopRevenueStatisticsResult { /// 汇总卡片数据 public ShopRevenueSummary Summary { get; set; } /// 销售趋势(按天,缺失日期补 0) public List Trend { get; set; } /// 店铺销售占比(饼图) public List ShopProportions { get; set; } /// 店铺统计表格 public List ShopStatistics { get; set; } } /// /// 店铺营收统计 - 天/周/月周期统计查询结果(周期统计页使用)。 /// 接口不返回整段汇总,Summary 由返回的周期数据在客户端合计得出。 /// public class ShopPeriodStatisticsResult { /// 汇总卡片数据(整个查询时间段,客户端合计) public ShopRevenueSummary Summary { get; set; } /// 周期统计表格(天/周/月各一行) public List Items { get; set; } } /// /// 店铺下拉选项 /// public class ShopOption { /// 店铺ID(ShopLoginInfo.ShopId) public string ShopId { get; set; } /// ERP 店铺ID(ShopLoginInfo.ErpShopId),统计接口的 ShopIds 使用该字段 public string ErpShopId { get; set; } /// 店铺名称 public string ShopName { get; set; } } /// /// 时间范围下拉选项 /// public class TimeRangeOption { /// 显示文本(如:今天、昨天、本周、本月、最近10天、自定义) public string Text { get; set; } /// 值(today / yesterday / week / month / last10 / custom) public string Value { get; set; } } }