feat:商品预约导出
feat:个人菜谱预约统计 feat:预定扣库存 feat:过期订单自动退款
This commit is contained in:
1 parent
e1cf5d5b90
commit
e4d8b4f354
11 files changed
+637
No files matched your search
+33
@@ -0,0 +1,33 @@
|
||||
package com.bsd.pjcloud.hard.api.constant.refund;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 自动退款任务场景;编码持久化到任务表并用于区分不同的配置和售后创建规则。
|
||||
*/
|
||||
@Getter
|
||||
public enum HardAutoRefundTaskTypeEnum {
|
||||
|
||||
/** 用户申请免审退款后创建的技术自动退款任务。 */
|
||||
AFTER_SALE("10", "售后申请自动退款"),
|
||||
|
||||
/** 每日菜谱预约餐段结束后创建的系统过期退款任务。 */
|
||||
EXPIRED_RESERVE("20", "过期预约自动退款");
|
||||
|
||||
/** 数据库存储的稳定任务场景编码。 */
|
||||
private final String type;
|
||||
|
||||
/** 管理端展示名称。 */
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* 构造任务场景协议项。
|
||||
*
|
||||
* @param type 数据库存储编码
|
||||
* @param description 展示名称
|
||||
*/
|
||||
HardAutoRefundTaskTypeEnum(String type, String description) {
|
||||
this.type = type;
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 食堂预约菜品导出聚合记录。
|
||||
*
|
||||
* <p>同一模型承载商户部门聚合和商品聚合两种查询结果,商品聚合时额外填充商品字段;金额统一使用分。</p>
|
||||
*/
|
||||
@Data
|
||||
public class HardCanteenProductApptExportRecord {
|
||||
|
||||
/** 预约使用日期,格式为 yyyy-MM-dd。 */
|
||||
private String apptDate;
|
||||
|
||||
/** 用餐时间段协议编码。 */
|
||||
private String hourType;
|
||||
|
||||
/** 食堂商户主键。 */
|
||||
private Long merchantId;
|
||||
|
||||
/** 预约用户所属部门主键。 */
|
||||
private Long userDeptId;
|
||||
|
||||
/** 商品主键;商户部门聚合记录为空。 */
|
||||
private Long productId;
|
||||
|
||||
/** 订单快照中的商品名称;商户部门聚合记录为空。 */
|
||||
private String productName;
|
||||
|
||||
/** 去重预约人数。 */
|
||||
private Long payUserCount;
|
||||
|
||||
/** 去重预约次数。 */
|
||||
private Long timeCount;
|
||||
|
||||
/** 预约商品总数量。 */
|
||||
private Long payCount;
|
||||
|
||||
/** 预约商品总价,单位为分。 */
|
||||
private Long totalPrice;
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 指定用餐日期的用户预约统计。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(description = "食堂用户每日预约统计")
|
||||
public class HardCanteenUserApptDailyStatisticsVo extends HardCanteenUserApptStatisticsSummaryVo {
|
||||
|
||||
/** 统计对应的用餐日期,格式由接口序列化器输出为 yyyy-MM-dd。 */
|
||||
@Schema(description = "用餐日期")
|
||||
private LocalDate date;
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户预约按餐段和菜品快照聚合的统计数据。
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "食堂用户预约菜品统计")
|
||||
public class HardCanteenUserApptDishStatisticsVo {
|
||||
|
||||
/** 餐段字典编码,空值表示历史订单未记录餐段。 */
|
||||
@Schema(description = "餐段编码")
|
||||
private String hourType;
|
||||
|
||||
/** 下单时固化的菜品名称;历史空值由服务层归一为未命名菜品。 */
|
||||
@Schema(description = "菜品名称")
|
||||
private String productName;
|
||||
|
||||
/** 菜品快照的总份数。 */
|
||||
@Schema(description = "菜品份数")
|
||||
private Long productCount = 0L;
|
||||
|
||||
/** 包含该菜品的去重预约订单数。 */
|
||||
@Schema(description = "涉及订单数")
|
||||
private Long orderCount = 0L;
|
||||
|
||||
/** 该菜品快照总价,单位为分。 */
|
||||
@Schema(description = "菜品总价,单位为分")
|
||||
private Long totalPrice = 0L;
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户预约按餐段聚合的统计数据。
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "食堂用户预约餐段统计")
|
||||
public class HardCanteenUserApptMealStatisticsVo {
|
||||
|
||||
/** 餐段字典编码,属于 PC、App 与后端共用协议。 */
|
||||
@Schema(description = "餐段编码")
|
||||
private String hourType;
|
||||
|
||||
/** 该餐段去重后的用户-用餐日期数;每日表示人数,范围总计表示可与每日相加的订餐人次。 */
|
||||
@Schema(description = "预约人数或人次")
|
||||
private Long reservedUserCount = 0L;
|
||||
|
||||
/** 该餐段的有效预约订单数。 */
|
||||
@Schema(description = "预约订单数")
|
||||
private Long orderCount = 0L;
|
||||
|
||||
/** 该餐段购物车快照中的菜品总份数。 */
|
||||
@Schema(description = "菜品份数")
|
||||
private Long dishCount = 0L;
|
||||
|
||||
/** 该餐段有效预约商品总价,单位为分。 */
|
||||
@Schema(description = "预约总价,单位为分")
|
||||
private Long totalPrice = 0L;
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户预约统计的通用汇总数据。
|
||||
*
|
||||
* <p>金额字段统一使用分;用户数量按“用户-用餐日期”记录累计,避免多日查询把同一用户重复隐藏。</p>
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "食堂用户预约统计汇总")
|
||||
public class HardCanteenUserApptStatisticsSummaryVo {
|
||||
|
||||
/** 当前统计范围内的用户-用餐日期记录数。 */
|
||||
@Schema(description = "用户日期记录数")
|
||||
private Long userCount = 0L;
|
||||
|
||||
/** 当前统计范围内去重后的用户数。 */
|
||||
@Schema(description = "去重用户数")
|
||||
private Long uniqueUserCount = 0L;
|
||||
|
||||
/** 有效预约记录的用户-用餐日期数。 */
|
||||
@Schema(description = "已订餐记录数")
|
||||
private Long reservedUserCount = 0L;
|
||||
|
||||
/** 没有有效预约记录的用户-用餐日期数。 */
|
||||
@Schema(description = "未订餐记录数")
|
||||
private Long unreservedUserCount = 0L;
|
||||
|
||||
/** 有效预约订单数。 */
|
||||
@Schema(description = "预约订单数")
|
||||
private Long orderCount = 0L;
|
||||
|
||||
/** 购物车快照中的菜品总份数。 */
|
||||
@Schema(description = "菜品总份数")
|
||||
private Long dishCount = 0L;
|
||||
|
||||
/** 有效预约订单商品总价,单位为分。 */
|
||||
@Schema(description = "预约总价,单位为分")
|
||||
private Long totalPrice = 0L;
|
||||
|
||||
/** 按餐段聚合的预约人数、订单数和菜品份数。 */
|
||||
@Schema(description = "餐段统计")
|
||||
private List<HardCanteenUserApptMealStatisticsVo> meals = new ArrayList<>();
|
||||
|
||||
/** 按餐段和菜品名称聚合的菜品份数。 */
|
||||
@Schema(description = "菜品统计")
|
||||
private List<HardCanteenUserApptDishStatisticsVo> dishes = new ArrayList<>();
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户预约统计响应,包含查询范围总计和逐日统计。
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "食堂用户预约统计")
|
||||
public class HardCanteenUserApptStatisticsVo {
|
||||
|
||||
/** 当前查询条件下所有用餐日期的汇总结果。 */
|
||||
@Schema(description = "查询范围总计")
|
||||
private HardCanteenUserApptStatisticsSummaryVo total = new HardCanteenUserApptStatisticsSummaryVo();
|
||||
|
||||
/** 当前查询条件下按用餐日期升序排列的每日结果。 */
|
||||
@Schema(description = "每日统计")
|
||||
private List<HardCanteenUserApptDailyStatisticsVo> daily = new ArrayList<>();
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.order.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.format.NumberFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 食堂预约菜品统计自定义导出行。
|
||||
*
|
||||
* <p>一组日期和餐段按汇总行、商户部门行、商品明细行组织;不同层级只填写所属列,配合自定义合并处理器形成树形报表。</p>
|
||||
*/
|
||||
@Data
|
||||
public class HardCanteenProductApptExcelVo {
|
||||
|
||||
/** 日期餐段汇总中的预约日期。 */
|
||||
@ExcelProperty({"日期餐段汇总", "预约时间"})
|
||||
private LocalDate summaryDate;
|
||||
|
||||
/** 日期餐段汇总中的餐段编码或字典名称。 */
|
||||
@ExcelProperty({"日期餐段汇总", "预约时间段"})
|
||||
private String summaryHourType;
|
||||
|
||||
/** 日期餐段汇总中的去重预约人数。 */
|
||||
@ExcelProperty({"日期餐段汇总", "预约人数"})
|
||||
private Long summaryPayUserCount;
|
||||
|
||||
/** 日期餐段汇总中的预约次数。 */
|
||||
@ExcelProperty({"日期餐段汇总", "预约次数"})
|
||||
private Long summaryTimeCount;
|
||||
|
||||
/** 日期餐段汇总中的商品总数量。 */
|
||||
@ExcelProperty({"日期餐段汇总", "预约商品数量"})
|
||||
private Long summaryPayCount;
|
||||
|
||||
/** 日期餐段汇总中的总价,单位为元。 */
|
||||
@ExcelProperty({"日期餐段汇总", "总价"})
|
||||
@NumberFormat("#,##0.00")
|
||||
private BigDecimal summaryTotalPrice;
|
||||
|
||||
/** 商户部门统计中的食堂名称。 */
|
||||
@ExcelProperty({"商户部门统计", "商户"})
|
||||
private String merchantName;
|
||||
|
||||
/** 商户部门统计中的用户部门名称。 */
|
||||
@ExcelProperty({"商户部门统计", "部门"})
|
||||
private String departmentName;
|
||||
|
||||
/** 商户部门统计中的预约日期。 */
|
||||
@ExcelProperty({"商户部门统计", "预约时间"})
|
||||
private LocalDate merchantDate;
|
||||
|
||||
/** 商户部门统计中的餐段名称。 */
|
||||
@ExcelProperty({"商户部门统计", "预约时间段"})
|
||||
private String merchantHourType;
|
||||
|
||||
/** 商户部门统计中的去重预约人数。 */
|
||||
@ExcelProperty({"商户部门统计", "预约人数"})
|
||||
private Long merchantPayUserCount;
|
||||
|
||||
/** 商户部门统计中的预约次数。 */
|
||||
@ExcelProperty({"商户部门统计", "预约次数"})
|
||||
private Long merchantTimeCount;
|
||||
|
||||
/** 商户部门统计中的商品总数量。 */
|
||||
@ExcelProperty({"商户部门统计", "预约商品数量"})
|
||||
private Long merchantPayCount;
|
||||
|
||||
/** 商户部门统计中的总价,单位为元。 */
|
||||
@ExcelProperty({"商户部门统计", "总价"})
|
||||
@NumberFormat("#,##0.00")
|
||||
private BigDecimal merchantTotalPrice;
|
||||
|
||||
/** 商品明细中的商品名称。 */
|
||||
@ExcelProperty({"商品明细", "商品"})
|
||||
private String productName;
|
||||
|
||||
/** 商品明细中的商品数量。 */
|
||||
@ExcelProperty({"商品明细", "数量"})
|
||||
private Long productCount;
|
||||
|
||||
/** 商品明细中的商品总价,单位为元。 */
|
||||
@ExcelProperty({"商品明细", "总价"})
|
||||
@NumberFormat("#,##0.00")
|
||||
private BigDecimal productTotalPrice;
|
||||
|
||||
/** 导出行层级,仅供合并处理器识别,不写入 Excel。 */
|
||||
@ExcelIgnore
|
||||
private String rowLevel;
|
||||
}
|
||||
Reference in new issue
Block a user