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