feat:迁移hard和wallet模块的定时任务

feat:增加订餐预约时间管理
This commit is contained in:
dzc committed 2026-10-08 11:48:24 +08:00
1 parent 03e1c65560
commit 940e457930
51 files changed
+1876 -942

No files matched your search

@@ -1,47 +0,0 @@
package com.bsd.pjcloud.hard.api.constant;
import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 硬件预约时间类型
*/
@AllArgsConstructor
@Getter
public enum HardApptTimeTypeEnum {
YESTERDAY("1", -1, "昨天"),
TODAY("2", 0, "今天"),
TOMORROW("3", 1, "明天"),
AFTER_TOMORROW("4", 2, "后天"),
;
private final String type;
private final Integer day;
private final String description;
public static HardApptTimeTypeEnum valueOfByType(String type) {
if (ObjectUtil.isEmpty(type)) return null;
return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().orElse(null);
}
public static HardApptTimeTypeEnum valueOfByTypeOrToday(String type) {
if (ObjectUtil.isEmpty(type)) {
return HardApptTimeTypeEnum.TODAY;
}
return valueOfByType(type);
}
public static HardApptTimeTypeEnum valueOfByDay(int day) {
return Arrays.stream(values()).filter(value -> value.getDay() == day).findFirst().orElse(null);
}
public static boolean isReservationDateType(String type) {
HardApptTimeTypeEnum value = valueOfByType(type);
return value != null && value.getDay() >= 0;
}
}
@@ -5,9 +5,12 @@ import lombok.Data;
import java.util.List;
/**
* 动态时间窗预约规则入参:一条规则携带多个开放窗口,每窗口携带日期×餐段目标集合。
*/
@Data
public class HardApptDto extends HardApptEntity {
private List<String> reserveTimeList;
private List<HardApptWindowDto> windowList;
}
@@ -0,0 +1,20 @@
package com.bsd.pjcloud.hard.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
/**
* 动态时间窗可预约目标项:目标用餐日期 × 餐段。
*/
@Data
@Schema(description = "动态时间窗可预约目标项")
public class HardApptItemDto {
@Schema(description = "目标用餐日期")
private LocalDate targetDate;
@Schema(description = "餐段字典值(daily_menu)")
private String hourType;
}
@@ -0,0 +1,30 @@
package com.bsd.pjcloud.hard.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 动态时间窗开放窗口:一次性绝对时间窗(支持跨天)及其可预约目标集合。
*/
@Data
@Schema(description = "动态时间窗开放窗口")
public class HardApptWindowDto {
@Schema(description = "窗口ID;规则新增/整单重建时为空,窗口级编辑时必填")
private Long id;
@Schema(description = "开始预约时间")
private LocalDateTime startTime;
@Schema(description = "结束预约时间")
private LocalDateTime endTime;
@Schema(description = "免审退款申请截止时间(闭区间);空则按开放预约结束时间处理,须在(start_time,end_time]范围内")
private LocalDateTime autoRefundTime;
@Schema(description = "可预约目标集合(日期×餐段)")
private List<HardApptItemDto> itemList;
}
@@ -74,11 +74,6 @@ public class HardAppCreateDailyMenuReserveOrdersDto {
*/
private String hourType;
/**
* 预约时间类型,沿用预约列表返回的协议值并参与预约有效性校验。
*/
private String apptTimeType;
/**
* 实际用餐日期,精确到日,并用于同日同餐段重复预约校验。
*/
@@ -58,10 +58,7 @@ public class HardAppCreateOrderDto {
// 餐端;周期预约必传,动态时间窗由 apptId 对应规则确定
private String hourType;
// 预约时间类型
private String apptTimeType;
// 实际预约日期;新客户端必须传递,apptTimeType 仅用于兼容旧客户端
// 实际预约日期;动态/周期预约均必须传递
private LocalDate apptDate;
// 地址
@@ -38,7 +38,5 @@ public class HardAppCreateReserveOrdersDto {
private String hourType;
private String apptTimeType;
private LocalDate apptDate;
}
@@ -7,18 +7,17 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
* 设备预约管理
* 动态时间窗预约规则(多窗口模型的规则头)。
* 开放时间窗见 {@link HardApptWindowEntity},窗口内可预约明细见 {@link HardApptItemEntity}。
*/
@Data
@TenantTable
@TableName("hard_appt")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "设备预约管理")
@Schema(description = "动态时间窗预约规则")
public class HardApptEntity extends Model<HardApptEntity> {
@@ -35,54 +34,6 @@ public class HardApptEntity extends Model<HardApptEntity> {
@Schema(description = "商户id")
private Long mchId;
/**
* 标题
*/
@Schema(description = "标题")
private String title;
/**
* 开始时间
*/
@Schema(description = "开始时间")
private LocalTime startTime;
/**
* 开始时间类型
*/
@Schema(description = "开始时间类型")
private String startTimeType;
/**
* 结束时间
*/
@Schema(description = "结束时间")
private LocalTime endTime;
/**
* 结束时间
*/
@Schema(description = "结束时间")
private String endTimeType;
/**
* 预约限制模式
*/
@Schema(description = "预约限制模式(TIME_WINDOW动态时间窗,WEEKLY_CYCLE按周集中预约)")
private String reserveMode;
/**
* 预约时间段
*/
@Schema(description = "预约时间段")
private String hourType;
/**
* 排序
*/
@Schema(description = "排序")
private Integer sort;
/**
* 状态
*/
@@ -1,91 +1,67 @@
package com.bsd.pjcloud.hard.api.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.bsd.pjcloud.common.core.util.TenantTable;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 设备预约时间管理
* 动态时间窗窗口内的可预约明细:目标用餐日期 × 餐段。
*/
@Data
@TenantTable
@TableName("hard_appt_time")
@TableName("hard_appt_item")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "设备预约时间管理")
public class HardApptTimeEntity extends Model<HardApptTimeEntity> {
@Schema(description = "动态时间窗可预约明细(日期×餐段)")
public class HardApptItemEntity extends Model<HardApptItemEntity> {
/**
* 编号
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "编号")
private Long id;
/**
* 商户ID
*/
@Schema(description = "预约窗口ID(hard_appt_window.id)")
private Long windowId;
@Schema(description = "商户ID")
private Long mchId;
/**
* appt_id
*/
@Schema(description = "appt_id")
private Long apptId;
@Schema(description = "目标用餐日期")
private LocalDate targetDate;
/**
* 预约时间类型(昨天、今天、明天、自定义)
*
* @see com.bsd.pjcloud.hard.api.constant.HardApptTimeTypeEnum
*/
@Schema(description = "预约时间类型(昨天、今天、明天、自定义)")
private String type;
@Schema(description = "餐段字典值(daily_menu)")
private String hourType;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
/**
* 删除标记
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
/**
* 租户ID
*/
@Schema(description = "租户ID")
private Long tenantId;
}
}
@@ -0,0 +1,69 @@
package com.bsd.pjcloud.hard.api.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.bsd.pjcloud.common.core.util.TenantTable;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 动态时间窗预约的开放窗口:一次性绝对时间窗(支持跨天),订单 appt_id 指向本表。
*/
@Data
@TenantTable
@TableName("hard_appt_window")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "动态时间窗预约开放窗口")
public class HardApptWindowEntity extends Model<HardApptWindowEntity> {
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "编号")
private Long id;
@Schema(description = "预约规则ID(hard_appt.id)")
private Long apptId;
@Schema(description = "商户ID")
private Long mchId;
@Schema(description = "开始预约时间")
private LocalDateTime startTime;
@Schema(description = "结束预约时间")
private LocalDateTime endTime;
@Schema(description = "免审退款申请截止时间(闭区间),空=开放预约结束时间;须在(start_time,end_time]范围内")
private LocalDateTime autoRefundTime;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
@Schema(description = "租户ID")
private Long tenantId;
}
@@ -14,8 +14,5 @@ public class HardApptDateOptionsVo {
/** 实际用餐日期。 */
private LocalDate apptDate;
/** 当日期属于旧版今天/明天/后天范围时返回,用于平滑升级。 */
private String apptTimeType;
private List<HardApptOptionVo> apptList;
}
@@ -0,0 +1,20 @@
package com.bsd.pjcloud.hard.api.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
/**
* 动态时间窗可预约目标项展示:目标用餐日期 × 餐段。
*/
@Data
@Schema(description = "动态时间窗可预约目标项展示")
public class HardApptItemVo {
@Schema(description = "目标用餐日期")
private LocalDate targetDate;
@Schema(description = "餐段字典值(daily_menu)")
private String hourType;
}
@@ -1,24 +1,41 @@
package com.bsd.pjcloud.hard.api.vo;
import com.bsd.pjcloud.hard.api.entity.HardApptEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* App 订餐预约餐段选项。
* App 订餐预约餐段选项。动态时间窗 id 为窗口 ID(订单 appt_id 提交该值);周期预约 apptRuleId 为规则 ID。
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class HardApptOptionVo extends HardApptEntity {
@Schema(description = "App 订餐预约餐段选项")
public class HardApptOptionVo {
/** 动态时间窗窗口ID;周期预约为 null。 */
private Long id;
/** 周期预约规则ID;动态时间窗为 null。 */
private Long apptRuleId;
/** 周期预约直接使用餐端名称;动态时间窗继续使用 hard_appt.title。 */
/** 预约限制模式:TIME_WINDOW / WEEKLY_CYCLE。 */
private String reserveMode;
/** 餐段编码(daily_menu)。 */
private String hourType;
/** 餐段名称。 */
private String hourTypeName;
/** 选项标题,默认取餐段名称。 */
private String title;
/** 动态时间窗窗口起止时间;周期预约为 null。 */
private LocalDateTime startTime;
/** 动态时间窗窗口起止时间;周期预约为 null。 */
private LocalDateTime endTime;
/** 当前时刻是否允许提交该日期和餐段。 */
private Boolean available;
@@ -1,18 +0,0 @@
package com.bsd.pjcloud.hard.api.vo;
import com.bsd.pjcloud.hard.api.entity.HardApptEntity;
import lombok.Data;
import java.time.LocalDate;
import java.util.List;
@Data
public class HardApptTimeCascadeVo {
private String apptTimeType;
private LocalDate apptTimeWeekStr;
private List<HardApptEntity> apptList;
}
@@ -1,12 +0,0 @@
package com.bsd.pjcloud.hard.api.vo;
import lombok.Data;
@Data
public class HardApptTimeTypeVo {
private Long mchId;
private Long type;
}
@@ -5,9 +5,12 @@ import lombok.Data;
import java.util.List;
/**
* 动态时间窗预约规则展示:含全部开放窗口及窗口内可预约明细。
*/
@Data
public class HardApptVo extends HardApptEntity {
private List<String> reserveTimeList;
private List<HardApptWindowVo> windowList;
}
@@ -0,0 +1,30 @@
package com.bsd.pjcloud.hard.api.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 动态时间窗开放窗口展示:一次性绝对时间窗及其可预约目标集合。
*/
@Data
@Schema(description = "动态时间窗开放窗口展示")
public class HardApptWindowVo {
@Schema(description = "窗口ID(订单 appt_id 指向该值)")
private Long id;
@Schema(description = "开始预约时间")
private LocalDateTime startTime;
@Schema(description = "结束预约时间")
private LocalDateTime endTime;
@Schema(description = "免审退款申请截止时间(闭区间),空=开放预约结束时间")
private LocalDateTime autoRefundTime;
@Schema(description = "可预约目标集合(日期×餐段)")
private List<HardApptItemVo> itemList;
}
@@ -12,7 +12,7 @@ import com.bsd.pjcloud.wallet.api.vo.base.BaseWalletInterface;
import com.bsd.pjcloud.wallet.api.vo.base.BaseWalletTypeInterface;
import lombok.Data;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.util.List;
/** 硬件订单管理端展示对象,包含公共用户主资料、部门及身份信息。 */
@@ -102,9 +102,9 @@ public class HardOrderVo extends HardOrderEntity implements BaseUserDeptInterfac
private String apptReserveMode;
private LocalTime apptStartTime;
private LocalDateTime apptStartTime;
private LocalTime apptEndTime;
private LocalDateTime apptEndTime;
/**
* 外卖订单的期望送达配置,来源于 hard_take_out_appt;非外卖或历史未记录时为空。