feat:购买商品统计

This commit is contained in:
dzc committed 2026-09-15 17:42:30 +08:00
1 parent bc2c7e2b06
commit 7d9c29e247
12 files changed
+1912

No files matched your search

@@ -0,0 +1,147 @@
package com.bsd.pjcloud.hard.api.dto.order;
import com.bsd.pjcloud.admin.api.vo.base.BaseUserIdentityQueryInterface;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 购物车商品记录管理端查询条件,以购物车商品明细为查询维度。
*
* <p>记录页一行对应一条购物车商品快照,商品条件作用于 hard_car,其余订单、用户、部门和时间条件
* 均通过关联的订单表过滤;身份条件交由 UPMS 用户接口转换为用户主键范围。</p>
*/
@Data
public class HardCarRecordDto implements BaseUserIdentityQueryInterface {
/**
* 商品主键筛选;来源于购物车快照 product_id,为空表示不限定商品。
*/
private Long productId;
/**
* 商品名称模糊筛选;作用于购物车快照的商品名称。
*/
private String productName;
/**
* 购物车商品行主键集合;列表勾选导出时优先限定这些明细行。
*/
private List<Long> carIds;
/**
* 订单业务号精确筛选。
*/
private String orderNo;
/**
* 订单类型协议编码;页面订单类型 Tab 使用单值,为空表示全部类型。
*/
private String orderType;
/**
* 订单状态协议编码集合;为空表示不限制订单状态。
*/
private List<String> orderStatusCodes;
/**
* 支付方式协议编码集合;为空表示不限制支付方式。
*/
private List<String> orderPayTypeCodes;
/**
* 用餐时间段协议编码集合;为空表示不限制餐段。
*/
private List<String> hourTypeCodes;
/**
* 页面选择的商户类型编码集合;与服务端注入的设备类型权限条件分别保留,最终按交集过滤。
*/
private List<String> merchantTypeCodes;
/**
* 服务端按当前用户设备类型权限注入的商户类型编码集合;与页面多选条件按交集过滤。
*/
private List<String> mchTypeCodes;
/**
* 设备类型协议编码集合;为空表示不限制设备类型。
*/
private List<String> hardTypeCodes;
/**
* 商户主键筛选;与商户多选条件叠加。
*/
private Long merchantId;
/**
* 商户主键集合;单商户时服务端会展开为自身加子商户范围。
*/
private List<Long> mchIds;
/**
* 单个购买用户主键筛选。
*/
private Long userId;
/**
* 购买用户主键集合;身份筛选转换结果也写入该字段。
*/
private List<Long> userIds;
/**
* 用户部门主键筛选(下拉选择部门)。
*/
private Long userDeptId;
/**
* 用户部门主键集合(左侧部门树勾选)。
*/
private List<Long> userDeptIds;
/**
* 部门树勾选是否包含子部门;控制 userDeptIds 使用 IN 或 NOT IN。
*/
private Boolean isInclude;
/**
* 订单下单时间范围。
*/
private LocalDateTime[] createTimeList;
/**
* 订单支付时间范围。
*/
private LocalDateTime[] payTimeList;
/**
* 订单核销时间范围。
*/
private LocalDateTime[] verificationTimeList;
/**
* 预计使用日期范围。
*/
private LocalDateTime[] apptUseDateTimeList;
/**
* 用户身份协议编码筛选集合;查询前转换为用户主键范围。
*/
private List<String> identityTypes;
/**
* 学生身份扩展筛选条件。
*/
private com.bsd.pjcloud.admin.api.dto.user.SysUserStudentDto studentInfo;
/**
* 老师身份扩展筛选条件。
*/
private com.bsd.pjcloud.admin.api.dto.user.SysUserTeacherDto teacherInfo;
/**
* 人脸录入状态筛选条件。
*/
private String hasFace;
}
@@ -0,0 +1,290 @@
package com.bsd.pjcloud.hard.api.vo.order;
import com.bsd.pjcloud.admin.api.dto.user.SysUserStudentDto;
import com.bsd.pjcloud.admin.api.dto.user.SysUserTeacherDto;
import com.bsd.pjcloud.admin.api.vo.base.BaseUserDeptInterface;
import com.bsd.pjcloud.admin.api.vo.base.BaseUserIdentityInterface;
import com.bsd.pjcloud.wallet.api.vo.base.BaseMchInterface;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 购物车商品记录管理端展示对象,一行对应一条购物车商品快照及其所属订单摘要。
*
* <p>商品列来源于 hard_car 快照,订单列通过父购物车关联 hard_order 得到;用户、身份和商户展示资料
* 由服务层批量装配。实现用户部门与身份展示契约后可直接复用通用身份装配器和前端身份组件。</p>
*/
@Data
public class HardCarRecordVo implements BaseUserDeptInterface, BaseUserIdentityInterface, BaseMchInterface {
/**
* 购物车商品行主键,即记录页的行主键。
*/
private Long id;
/**
* 父购物车主键,来源于 hard_car.parent_car_id。
*/
private Long parentCarId;
/* ************************************* 商品快照 ************************************* */
/**
* 商品主键,来源于购物车快照。
*/
private Long productId;
/**
* 商品来源详情 ID;每日菜谱等来源指向对应业务记录。
*/
private Long sourceProductId;
/**
* 商品名称快照。
*/
private String productName;
/**
* 商品图片快照。
*/
private String productPic;
/**
* 商品单价快照,单位为分。
*/
private Integer productPrice;
/**
* 商品性质协议编码。
*/
private String productNature;
/**
* 购买数量。
*/
private Integer productCount;
/**
* 商品重量。
*/
private java.math.BigDecimal productWeight;
/**
* 商品小计金额,单位为分。
*/
private Long totalPrice;
/**
* 购物车行创建时间。
*/
private LocalDateTime carCreateTime;
/* ************************************* 订单摘要 ************************************* */
/**
* 所属订单主键。
*/
private Long orderId;
/**
* 所属订单业务号。
*/
private String orderNo;
/**
* 订单类型协议编码。
*/
private String orderType;
/**
* 订单状态协议编码。
*/
private String orderStatus;
/**
* 支付方式协议编码。
*/
private String payType;
/**
* 用餐时间段协议编码。
*/
private String hourType;
/**
* 预约目标用餐日期。
*/
private LocalDate apptUseDate;
/**
* 核销时间。
*/
private LocalDateTime verificationTime;
/**
* 核销方式协议编码;'2' 表示自动核销。
*/
private String verificationType;
/**
* 订单下单时间。
*/
private LocalDateTime orderCreateTime;
/**
* 订单支付时间。
*/
private LocalDateTime payTime;
/**
* 订单商品总价,单位为分。
*/
private Integer orderTotalPrice;
/**
* 额外支付金额,单位为分。
*/
private Integer extraPrice;
/**
* 配送费金额,单位为分。
*/
private Integer deliveryPrice;
/**
* 订单实际支付金额,单位为分。
*/
private Integer payPrice;
/**
* 订单已退款金额,单位为分。
*/
private Integer refundPrice;
/**
* 退款状态协议编码。
*/
private String refundStatus;
/**
* 最近退款完成时间。
*/
private LocalDateTime refundTime;
/**
* 订单关联钱包主键。
*/
private Long walletId;
/**
* 付款人用户 ID,来源于订单关联的父购物车。
*/
private Long payerUserId;
/**
* 业务系统类型协议编码。
*/
private String sysType;
/**
* 是否线下补录订单协议编码;空值按非线下处理。
*/
private String isOfflineOrder;
/* ************************************* 商户与设备 ************************************* */
/**
* 商户主键。
*/
private Long merchantId;
/**
* 商户类型协议编码。
*/
private String merchantType;
/**
* 商户所属部门主键;数据权限拦截器依赖该列包装部门过滤。
*/
private Long merchantDeptId;
/**
* 设备主键。
*/
private Long hardId;
/**
* 设备名称,来源于设备表。
*/
private String hardName;
/**
* 设备类型协议编码,来源于设备表。
*/
private String hardType;
/**
* 商户名称,服务层批量装配。
*/
private String merchantName;
/**
* 商户 Logo 图片地址,服务层批量装配。
*/
private String logoPic;
/**
* 钱包类型唯一编码,服务层批量装配。
*/
private String walletTypeUniqueCode;
/* ************************************* 用户与身份展示 ************************************* */
/**
* 购买用户主键。
*/
private Long userId;
/**
* 用户姓名,UPMS 装配结果。
*/
private String username;
/**
* 用户手机号,UPMS 装配结果。
*/
private String userMobile;
/**
* 用户头像地址,UPMS 装配结果。
*/
private String userAvatar;
/**
* 用户部门主键,UPMS 装配结果。
*/
private Long userDeptId;
/**
* 用户部门名称,UPMS 装配结果。
*/
private String userDeptName;
/**
* 用户身份协议编码集合,UPMS 装配结果。
*/
private List<String> identityTypes;
/**
* 学生身份扩展资料,UPMS 装配结果。
*/
private SysUserStudentDto studentInfo;
/**
* 老师身份扩展资料,UPMS 装配结果。
*/
private SysUserTeacherDto teacherInfo;
}
@@ -0,0 +1,148 @@
package com.bsd.pjcloud.hard.api.vo.order.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentFontStyle;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.math.BigDecimal;
/**
* 购物车商品记录导出行,按商品业务域组织二级表头。
*
* <p>一行对应一条购物车商品快照及其所属订单摘要,仅保留业务核对所需的商品、用户、身份、
* 订单和时间信息,隐藏内部主键及审计字段;金额字段统一使用元。该对象仅用于导出展示,
* 不参与数据库持久化和接口入参。</p>
*/
@Data
@ColumnWidth(15)
@HeadRowHeight(15)
@HeadFontStyle(fontHeightInPoints = 10)
@ContentFontStyle(fontHeightInPoints = 10)
public class HardCarRecordExportExcelVo {
/** 当前商品记录在本次导出结果中的一基序号;合计行为空。 */
@ExcelProperty({"商品", "序号"})
private String lineNumber;
/** 购物车快照商品名称。 */
@ExcelProperty({"商品", "商品名称"})
@ColumnWidth(22)
private String productName;
/** 商品单价,单位为元并保留两位小数。 */
@ExcelProperty({"商品", "单价(元)"})
@NumberFormat("#,##0.00")
private BigDecimal productPrice;
/** 购买数量。 */
@ExcelProperty({"商品", "数量"})
private Integer productCount;
/** 商品小计金额,单位为元并保留两位小数。 */
@ExcelProperty({"商品", "小计(元)"})
@NumberFormat("#,##0.00")
private BigDecimal totalPrice;
/** 用户姓名,优先取 UPMS 姓名,其次取昵称、账号和历史快照。 */
@ExcelProperty({"用户", "姓名"})
private String userName;
/** 用户手机号;UPMS 资料缺失时回退历史快照。 */
@ExcelProperty({"用户", "手机号"})
private String phone;
/** 用户当前所属部门名称;UPMS 资料缺失时回退历史快照。 */
@ExcelProperty({"用户", "部门"})
private String deptName;
/** 用户拥有的身份中文名称,多个身份使用中文逗号分隔。 */
@ExcelProperty({"身份", "身份类型"})
private String identityTypeNames;
/** 学生身份学号;没有学生身份时为空。 */
@ExcelProperty({"身份", "学号"})
private String studentNo;
/** 学生身份学校名称;没有学生身份时为空。 */
@ExcelProperty({"身份", "学校"})
private String schoolName;
/** 学生身份班级名称;没有学生身份时为空。 */
@ExcelProperty({"身份", "班级"})
private String className;
/** 老师身份工号或学号;没有老师身份时为空。 */
@ExcelProperty({"身份", "老师学号"})
private String teacherNo;
/** 订单业务号。 */
@ExcelProperty({"订单", "订单号"})
@ColumnWidth(24)
private String orderNo;
/** 订单类型中文名称;未知历史编码保留原始值。 */
@ExcelProperty({"订单", "订单类型"})
private String orderType;
/** 订单状态中文名称;未知历史编码保留原始值。 */
@ExcelProperty({"订单", "订单状态"})
private String orderStatus;
/** 钱包服务返回的商户名称;历史商户不存在时回退快照名称。 */
@ExcelProperty({"订单", "商户"})
private String merchantName;
/** 订单关联设备名称;用于识别核销机器。 */
@ExcelProperty({"订单", "设备"})
private String hardName;
/** 实际关联设备的设备类型中文名称;未知历史编码保留原始值。 */
@ExcelProperty({"订单", "设备类型"})
private String hardType;
/** 支付方式中文名称;未知历史编码保留原始值。 */
@ExcelProperty({"订单", "支付方式"})
private String payType;
/** 用餐时间段中文名称;未知历史编码保留原始值。 */
@ExcelProperty({"订单", "用餐时段"})
private String hourType;
/** 订单创建时间,格式为 yyyy-MM-dd HH:mm:ss。 */
@ExcelProperty({"时间", "下单时间"})
@ColumnWidth(22)
private String createTime;
/** 支付完成时间,格式为 yyyy-MM-dd HH:mm:ss;未支付时为空。 */
@ExcelProperty({"时间", "支付时间"})
@ColumnWidth(22)
private String payTime;
/** 预约目标用餐日期;非预约订单可能为下单日期或空值。 */
@ExcelProperty({"时间", "预约时间"})
@ColumnWidth(22)
private String apptUseDate;
/** 订单实际核销完成时间,格式为 yyyy-MM-dd HH:mm:ss。 */
@ExcelProperty({"时间", "核销时间"})
@ColumnWidth(22)
private String verificationTime;
/** 订单退款状态中文名称;未记录时为空,未知历史编码保留原始值。 */
@ExcelProperty({"退款", "退款状态"})
private String refundStatus;
/** 所属订单已退款金额,单位为元并保留两位小数。 */
@ExcelProperty({"退款", "退款金额(元)"})
@NumberFormat("#,##0.00")
private BigDecimal refundPrice;
/** 退款完成时间,格式为 yyyy-MM-dd HH:mm:ss。 */
@ExcelProperty({"退款", "退款完成时间"})
@ColumnWidth(22)
private String refundTime;
}