feat:重构"食堂菜品购买统计"+"食堂菜品部门统计"菜单统计预约核销订单+线下购买订单
feat:增加机器的每日菜谱库存扣款 feat:增加订单"退回到核销前"按钮
This commit is contained in:
1 parent
8d31f20cec
commit
d1cd86dfa4
92 files changed
+9628
-454
No files matched your search
+44
@@ -0,0 +1,44 @@
|
||||
package com.bsd.pjcloud.hard.api.constant.order;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 食堂销售统计展示层级协议。
|
||||
*
|
||||
* <p>该编码仅用于接口返回和管理端组织多维统计行,不对应数据库字段;调用方不得将名称作为稳定判断条件。</p>
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum HardCanteenStatisticsLevelEnum {
|
||||
|
||||
/** 按自然日汇总全部餐段和当前来源筛选范围。 */
|
||||
DATE_TOTAL("DATE_TOTAL", "当日合计"),
|
||||
|
||||
/** 按自然日和餐段汇总当前来源筛选范围。 */
|
||||
HOUR_TOTAL("HOUR_TOTAL", "餐段合计"),
|
||||
|
||||
/** 按自然日拆分来源,供当日合计行横向比较。 */
|
||||
DATE_SOURCE("DATE_SOURCE", "当日来源"),
|
||||
|
||||
/** 按自然日、餐段拆分来源,供餐段合计行横向比较。 */
|
||||
HOUR_SOURCE("HOUR_SOURCE", "餐段来源");
|
||||
|
||||
/** 前后端接口使用的稳定层级编码,不写入数据库。 */
|
||||
private final String code;
|
||||
|
||||
/** 层级的中文展示名称,仅用于界面说明。 */
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* 根据接口层级编码查找枚举。
|
||||
*
|
||||
* @param code 管理端统计接口返回的层级编码;为空或未知时不匹配
|
||||
* @return 匹配的层级枚举,未匹配时返回 {@code null}
|
||||
*/
|
||||
public static HardCanteenStatisticsLevelEnum valueOfCode(String code) {
|
||||
return Arrays.stream(values()).filter(value -> value.code.equals(code)).findFirst().orElse(null);
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.bsd.pjcloud.hard.api.constant.order;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 食堂销售统计来源。
|
||||
*
|
||||
* <p>编码只用于统计查询和管理端展示,不写入订单表;来源由订单类型、预约关联、订单状态以及对应业务时间计算得到。</p>
|
||||
*/
|
||||
@Getter
|
||||
public enum HardSaleSourceEnum {
|
||||
|
||||
/** 订单类型 1 的线下购买,统计时间取订单支付时间。 */
|
||||
OFFLINE_PURCHASE("OFFLINE_PURCHASE", "线下购买"),
|
||||
|
||||
/** 订单类型 2 且已完成核销的预约,统计时间取订单核销时间。 */
|
||||
RESERVATION_VERIFIED("RESERVATION_VERIFIED", "预约核销");
|
||||
|
||||
/** 统计接口和前端标签页使用的来源编码。 */
|
||||
private final String code;
|
||||
|
||||
/** 来源中文名称。 */
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* 创建稳定的统计来源协议项;编码只用于接口筛选,不对应数据库持久化值。
|
||||
*
|
||||
* @param code 前后端共同使用的来源编码
|
||||
* @param description 管理端与导出使用的中文名称
|
||||
*/
|
||||
HardSaleSourceEnum(String code, String description) {
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回全部可筛选来源编码。
|
||||
*
|
||||
* @return 来源编码列表,顺序与管理端标签页一致
|
||||
*/
|
||||
public static List<String> getCodes() {
|
||||
return Arrays.stream(values()).map(HardSaleSourceEnum::getCode).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 按统计来源编码解析枚举。
|
||||
*
|
||||
* @param code 统计接口传入的来源编码
|
||||
* @return 匹配的来源;为空或未知编码返回 {@code null}
|
||||
*/
|
||||
public static HardSaleSourceEnum valueOfCode(String code) {
|
||||
return Arrays.stream(values()).filter(item -> item.code.equals(code)).findFirst().orElse(null);
|
||||
}
|
||||
}
|
||||
+6
@@ -37,6 +37,12 @@ public class HardCarDto extends HardCarEntity implements BaseIsIncludeTreeInterf
|
||||
/** 预计使用日期范围。 */
|
||||
private LocalDateTime[] apptUseDateTimeList;
|
||||
|
||||
/** 菜品销售统计日期范围,线下按支付时间、预约按核销时间过滤;不落库。 */
|
||||
private LocalDateTime[] statisticsDateTimeList;
|
||||
|
||||
/** 菜品销售统计来源编码集合,取值来自 HardSaleSourceEnum;为空表示全部来源。 */
|
||||
private List<String> saleSourceCodes;
|
||||
|
||||
/**
|
||||
* 前端树搜索
|
||||
*/
|
||||
|
||||
+10
@@ -46,6 +46,16 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn
|
||||
|
||||
private LocalDateTime[] payTimeList;
|
||||
|
||||
/**
|
||||
* 食堂销售统计日期范围,线下来源按支付时间、预约来源按核销时间过滤;不落库。
|
||||
*/
|
||||
private LocalDateTime[] statisticsDateTimeList;
|
||||
|
||||
/**
|
||||
* 食堂销售统计来源编码集合,取值来自 HardSaleSourceEnum;为空表示同时查询两种来源。
|
||||
*/
|
||||
private List<String> saleSourceCodes;
|
||||
|
||||
private LocalDateTime[] refundTimeList;
|
||||
|
||||
/** 预计使用日期范围。 */
|
||||
|
||||
+22
@@ -42,9 +42,31 @@ public class HardCanteenProductTotalVo {
|
||||
@Schema(description = "购买次数")
|
||||
private Long timeCount;
|
||||
|
||||
/** 统计来源编码,来源于 HardSaleSourceEnum,不对应数据库字段。 */
|
||||
private String saleSource;
|
||||
|
||||
/** 统计来源名称,用于管理端和导出展示,不对应数据库字段。 */
|
||||
private String saleSourceName;
|
||||
|
||||
/**
|
||||
* 统计展示层级,取值来自 HardCanteenStatisticsLevelEnum,不对应数据库字段。
|
||||
* 空值表示兼容旧统计接口返回结构。
|
||||
*/
|
||||
private String statisticsLevel;
|
||||
|
||||
/** 统计展示层级中文名称,用于管理端说明当前行为日期合计或餐段合计。 */
|
||||
private String statisticsLevelName;
|
||||
|
||||
/**
|
||||
* 当前合计行的来源拆分结果;管理端用它在同一行比较线下购买与预约核销。
|
||||
* 空集合表示当前筛选范围没有来源明细或属于旧统计接口。
|
||||
*/
|
||||
private List<HardCanteenProductTotalVo> sourceRows;
|
||||
|
||||
@Schema(description = "用餐部门总数")
|
||||
private Integer deptCount;
|
||||
|
||||
/** 菜品统计中承载餐段合计行,部门统计中承载部门餐段行;空值表示无下一级统计。 */
|
||||
private List<HardCanteenProductTotalVo> children;
|
||||
|
||||
}
|
||||
+6
@@ -9,6 +9,12 @@ import lombok.Data;
|
||||
@Data
|
||||
public class HardCarVo extends HardCarEntity {
|
||||
|
||||
/** 统计明细来源编码,来源于 HardSaleSourceEnum,不对应购物车持久化字段。 */
|
||||
private String saleSource;
|
||||
|
||||
/** 统计明细来源名称,用于管理端展示,不对应购物车持久化字段。 */
|
||||
private String saleSourceName;
|
||||
|
||||
/** 超市商品 SPU ID,仅超市统计和展示场景赋值。 */
|
||||
private Long spuId;
|
||||
|
||||
|
||||
+6
@@ -13,6 +13,12 @@ import java.util.List;
|
||||
|
||||
@Data
|
||||
public class HardOrderVo extends HardOrderEntity implements BaseUserDeptInterface, BaseMchInterface, BaseHardInterface {
|
||||
/** 统计明细来源编码;线下订单为 OFFLINE_PURCHASE,预约已核销订单为 RESERVATION_VERIFIED。 */
|
||||
private String saleSource;
|
||||
|
||||
/** 统计明细来源名称,用于管理端明确区分支付和核销来源。 */
|
||||
private String saleSourceName;
|
||||
|
||||
/**
|
||||
* 用户相关
|
||||
*/
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
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 lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 食堂菜品部门销售统计导出行,按日期、食堂、来源、部门和餐段拆分。
|
||||
*/
|
||||
@Data
|
||||
@ColumnWidth(20)
|
||||
public class HardCanteenDeptTotalExcelVo {
|
||||
|
||||
/** 业务发生日期;线下取支付日期,预约取核销日期。 */
|
||||
@ExcelProperty("日期")
|
||||
private LocalDate statisticsDate;
|
||||
|
||||
/** 当前用户商户权限范围内的食堂名称。 */
|
||||
@ExcelProperty("食堂")
|
||||
private String merchantName;
|
||||
|
||||
/** 销售来源中文名称,取值为线下购买或预约核销。 */
|
||||
@ExcelProperty("来源")
|
||||
private String saleSourceName;
|
||||
|
||||
/** 下单用户所属部门名称;无法解析时为空。 */
|
||||
@ExcelProperty("部门")
|
||||
private String userDeptName;
|
||||
|
||||
/** 餐段字典名称,来源于 daily_menu。 */
|
||||
@ExcelProperty("餐段")
|
||||
private String hourTypeName;
|
||||
|
||||
/** 当前部门餐段内去重后的交易用户数量,单位为人。 */
|
||||
@ExcelProperty("交易人数")
|
||||
private Long payUserCount;
|
||||
|
||||
/** 当前部门餐段内去重后的订单数量,单位为次。 */
|
||||
@ExcelProperty("交易次数")
|
||||
private Long timeCount;
|
||||
|
||||
/** 退款扣减口径下的有效商品数量,单位为份。 */
|
||||
@ExcelProperty("商品数量")
|
||||
private Long payCount;
|
||||
|
||||
/** 有效商品总金额,单位由分转换为元。 */
|
||||
@ExcelProperty("总价(元)")
|
||||
@NumberFormat("#,##0.00")
|
||||
private BigDecimal totalPrice;
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
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 lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 食堂菜品销售统计导出行,按统计日期、餐段和销售来源拆分。
|
||||
*/
|
||||
@Data
|
||||
@ColumnWidth(20)
|
||||
public class HardCanteenProductTotalExcelVo {
|
||||
|
||||
/** 业务发生日期;线下取支付日期,预约取核销日期。 */
|
||||
@ExcelProperty("日期")
|
||||
private LocalDate statisticsDate;
|
||||
|
||||
/** 餐段字典名称,来源于 daily_menu。 */
|
||||
@ExcelProperty("餐段")
|
||||
private String hourTypeName;
|
||||
|
||||
/** 销售来源中文名称,取值为线下购买或预约核销。 */
|
||||
@ExcelProperty("来源")
|
||||
private String saleSourceName;
|
||||
|
||||
/** 来源内去重后的交易用户数量,单位为人。 */
|
||||
@ExcelProperty("交易人数")
|
||||
private Long payUserCount;
|
||||
|
||||
/** 来源内去重后的订单数量,单位为次。 */
|
||||
@ExcelProperty("交易次数")
|
||||
private Long timeCount;
|
||||
|
||||
/** 退款扣减口径下的有效商品数量,单位为份。 */
|
||||
@ExcelProperty("商品数量")
|
||||
private Long payCount;
|
||||
|
||||
/** 有效商品总金额,单位由分转换为元。 */
|
||||
@ExcelProperty("总价(元)")
|
||||
@NumberFormat("#,##0.00")
|
||||
private BigDecimal totalPrice;
|
||||
}
|
||||
Reference in new issue
Block a user