diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardCanteenReservationDateBasisEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardCanteenReservationDateBasisEnum.java new file mode 100644 index 00000000..8faa27ff --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardCanteenReservationDateBasisEnum.java @@ -0,0 +1,14 @@ +package com.bsd.pjcloud.hard.api.constant.order; + +/** + * 食堂销售统计中已核销预约的日期归属口径,仅用于查询协议,不持久化到订单表。 + * 线下购买始终按支付时间统计,不受此枚举影响。 + */ +public enum HardCanteenReservationDateBasisEnum { + + /** 按实际核销时间统计;未传口径或显式传空时沿用此历史行为。 */ + VERIFICATION_TIME, + + /** 仅保留已核销订单,按预约用餐日期统计;预约日期为空时不计入。 */ + APPT_USE_DATE +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardSaleSourceEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardSaleSourceEnum.java index 293faed0..b378b3bb 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardSaleSourceEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardSaleSourceEnum.java @@ -16,7 +16,7 @@ public enum HardSaleSourceEnum { /** 订单类型 1 的线下购买,统计时间取订单支付时间。 */ OFFLINE_PURCHASE("OFFLINE_PURCHASE", "线下购买"), - /** 订单类型 2 且已完成核销的预约,统计时间取订单核销时间。 */ + /** 订单类型 2 且已完成核销的预约;默认按核销时间统计,也可由查询口径指定预约用餐日期。 */ RESERVATION_VERIFIED("RESERVATION_VERIFIED", "预约核销"); /** 统计接口和前端标签页使用的来源编码。 */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java index 37a48164..046949a7 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.api.dto.order; import com.bsd.pjcloud.admin.api.vo.base.BaseIsDeepDeptTreeInterface; import com.bsd.pjcloud.admin.api.vo.base.BaseIsIncludeTreeInterface; +import com.bsd.pjcloud.hard.api.constant.order.HardCanteenReservationDateBasisEnum; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import lombok.Data; @@ -37,9 +38,12 @@ public class HardCarDto extends HardCarEntity implements BaseIsIncludeTreeInterf /** 预计使用日期范围。 */ private LocalDateTime[] apptUseDateTimeList; - /** 菜品销售统计日期范围,线下按支付时间、预约按核销时间过滤;不落库。 */ + /** 菜品销售统计日期闭区间,线下按支付时间、已核销预约按 reservationDateBasis 选择的日期过滤,不落库。 */ private LocalDateTime[] statisticsDateTimeList; + /** 已核销预约的统计日期归属;默认或空值按核销时间,APPT_USE_DATE 按预约用餐日期,不落库。 */ + private HardCanteenReservationDateBasisEnum reservationDateBasis = HardCanteenReservationDateBasisEnum.VERIFICATION_TIME; + /** 菜品销售统计来源编码集合,取值来自 HardSaleSourceEnum;为空表示全部来源。 */ private List saleSourceCodes; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java index f978819f..743d5f18 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java @@ -5,6 +5,7 @@ import com.bsd.pjcloud.admin.api.vo.base.BaseUserIdentityQueryInterface; import com.bsd.pjcloud.admin.api.dto.user.SysUserStudentDto; import com.bsd.pjcloud.admin.api.dto.user.SysUserTeacherDto; import com.bsd.pjcloud.common.core.constant.enums.DateRangeTypeEnum; +import com.bsd.pjcloud.hard.api.constant.order.HardCanteenReservationDateBasisEnum; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import lombok.Data; @@ -54,10 +55,13 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn private LocalDateTime[] payTimeList; /** - * 食堂销售统计日期范围,线下来源按支付时间、预约来源按核销时间过滤;不落库。 + * 食堂销售统计日期闭区间;线下按支付时间,已核销预约按 reservationDateBasis 选择的日期过滤,不落库。 */ private LocalDateTime[] statisticsDateTimeList; + /** 已核销预约的统计日期归属;默认或空值按核销时间,APPT_USE_DATE 按预约用餐日期,不落库。 */ + private HardCanteenReservationDateBasisEnum reservationDateBasis = HardCanteenReservationDateBasisEnum.VERIFICATION_TIME; + /** * 食堂销售统计来源编码集合,取值来自 HardSaleSourceEnum;为空表示同时查询两种来源。 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java index aa750f30..148377ab 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java @@ -32,6 +32,7 @@ import com.bsd.pjcloud.common.excel.stream.BatchExcelExportTemplate; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.hard.api.constant.order.HardCanteenStatisticsLevelEnum; +import com.bsd.pjcloud.hard.api.constant.order.HardCanteenReservationDateBasisEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.order.HardSaleSourceEnum; import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum; @@ -124,6 +125,9 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { */ private static final String DEPARTMENT_SALES_EXPORT_TASK_NAME = "食堂菜品部门统计导出"; + /** 预约用餐日口径的导出文件前缀及任务展示名称,避免与核销日口径的文件混淆。 */ + private static final String DINING_DATE_EXPORT_NAME = "食堂用餐日期统计"; + /** * 异步导出提交时使用的占位总数,后台开始后会替换为实际日期批次数。 */ @@ -773,15 +777,17 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { } /** - * 提交部门统计异步分批导出任务。 + * 提交部门统计异步分批导出任务;预约用餐日口径使用独立的展示名称和文件前缀。 * - * @param dto 页面当前的统计日期、来源、餐段、食堂和部门筛选条件 + * @param dto 页面当前的统计日期、预约日期口径、来源、餐段、食堂和部门筛选条件 * @return 可供页面轮询的初始任务进度 */ @Override public AsyncTaskProgressVO submitDepartmentSalesExport(HardOrderDto dto) { - return submitSalesExport(dto, DEPARTMENT_SALES_EXPORT_REDIS_KEY, DEPARTMENT_SALES_EXPORT_TASK_NAME, - "食堂菜品部门统计", DEPARTMENT_SALES_EXPORT_FILE_TYPE); + boolean diningDateBasis = dto != null && dto.getReservationDateBasis() == HardCanteenReservationDateBasisEnum.APPT_USE_DATE; + return submitSalesExport(dto, DEPARTMENT_SALES_EXPORT_REDIS_KEY, + diningDateBasis ? DINING_DATE_EXPORT_NAME + "导出" : DEPARTMENT_SALES_EXPORT_TASK_NAME, + diningDateBasis ? DINING_DATE_EXPORT_NAME : "食堂菜品部门统计", DEPARTMENT_SALES_EXPORT_FILE_TYPE); } /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml index 754e6067..c2d7cf8e 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml @@ -119,7 +119,7 @@ @@ -176,8 +176,16 @@ + + + + o.appt_use_date + o.verification_time + + + @@ -196,7 +204,7 @@ and o.hour_type is not null and o.hour_type not in ('-1') where refund_item.del_flag = '0' - and o.verification_time between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} + and between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} group by refund_item.parent_car_id, refund_item.product_id @@ -204,7 +212,7 @@ @@ -242,8 +250,8 @@ union all - select DATE_FORMAT(o.verification_time, '%Y-%m-%d') as stat_date, - o.verification_time as stat_time, + select DATE_FORMAT(, '%Y-%m-%d') as stat_date, + as stat_time, o.id as order_id, o.user_id, o.merchant_id as mch_id, @@ -271,18 +279,18 @@ and refund_car.product_id = a.product_id where a.del_flag = '0' - and o.verification_time between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} + and between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} group by o.id, o.user_id, o.merchant_id, o.user_dept_id, o.dept_id, o.merchant_dept_id, - o.hour_type, o.verification_time, a.product_id, refund_car.product_count, refund_car.total_price + o.hour_type, , a.product_id, refund_car.product_count, refund_car.total_price having sum(ifnull(a.product_count, 0)) > ifnull(refund_car.product_count, 0) - + and sale_stats.stat_time between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index b2dd6283..df3ce235 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -287,7 +287,7 @@ or a.refund_status is null) - + and @@ -302,7 +302,7 @@ and (a.appt_id is not null or a.appt_rule_id is not null) and a.order_status = '20' and a.verification_time is not null - and a.verification_time between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} + and between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]} ) @@ -314,13 +314,21 @@ and (a.appt_id is not null or a.appt_rule_id is not null) and a.order_status = '20' and a.verification_time is not null - and a.verification_time between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]}) + and between #{dto.statisticsDateTimeList[0]} and #{dto.statisticsDateTimeList[1]}) ) + + + + a.appt_use_date + a.verification_time + + +