Administrator
4 days ago 966ccdfcdf7aff42801d93667dd7712136ce8b89
feat(mall): 添加活动订单失效时间和状态处理

- 在 HappyActivityOrder 模型中添加 failTime 字段,用于记录订单失效时间
- 在创建订单时设置失效时间为当前时间加 30 分钟
- 修改订单查询逻辑,使用 failTime 判断订单是否失效
- 在 StateUpDownEnum 枚举中添加 ORDER_OVERTIME 和 ORDER_STATE_OVERTIME 值
- 优化支付失败提示和订单状态更新逻辑
3 files modified
21 ■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java 9 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOrder.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java
@@ -4,7 +4,11 @@
@Getter
public enum StateUpDownEnum {
    /**
     * 活动订单失效时间
     *  分钟
     */
    ORDER_OVERTIME(30),
    /**
     * 来源类型 1-活动 2-社区圈子发布
@@ -27,7 +31,7 @@
    VOTE_OPTION_STATE_AUDIT_REFUSE(2),
    /**
     * 订单状态 1-待支付 2-待使用 3-已使用 4-售后 5-已评价  6-删除
     * 订单状态 1-待支付 2-待使用 3-已使用 4-售后 5-已评价  6-删除 7-已失效
     */
    ORDER_STATE_WAIT_PAY(1),
    ORDER_STATE_WAIT_USE(2),
@@ -35,6 +39,7 @@
    ORDER_STATE_AFTER_SALE(4),
    ORDER_STATE_COMMENT(5),
    ORDER_STATE_DELETE(6),
    ORDER_STATE_OVERTIME(7),
    /**
     * 支付状态 0-待支付 1-支付成功 2-支付失败
src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOrder.java
@@ -27,6 +27,7 @@
     `pay_order_no` text COMMENT '支付订单号',
     `wx_order_no` varchar(100) DEFAULT NULL COMMENT '微信订单编号',
     `state` int(11) DEFAULT '1' COMMENT '订单状态 1-待支付 2-待使用 3-已使用 4-售后',
     `fail_time` datetime DEFAULT NULL COMMENT '失效时间',
     */
@@ -43,6 +44,8 @@
    private String payOrderNo;
    private String wxOrderNo;
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date failTime;
    @TableField(exist = false)
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -504,6 +504,7 @@
        if(amount.compareTo(BigDecimal.ZERO) < 0){
            throw new FebsException("支付金额错误");
        }
        DateTime failTime = DateUtil.offsetMinute(new Date(), StateUpDownEnum.ORDER_OVERTIME.getCode());
        HappyActivityOrder happyActivityOrder = new HappyActivityOrder();
        happyActivityOrder.setOrderNo(MallUtils.getOrderNum());
        happyActivityOrder.setMemberId(memberId);
@@ -512,6 +513,7 @@
        happyActivityOrder.setNumCnt(dto.getNumCnt());
        happyActivityOrder.setAmount(amount);
        happyActivityOrder.setPayState(StateUpDownEnum.PAY_STATE_NOT_PAY.getCode());
        happyActivityOrder.setFailTime(failTime);
        happyActivityOrderMapper.insert(happyActivityOrder);
        for(Long connectId : connectIds){
@@ -535,6 +537,7 @@
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("orderId",happyActivityOrder.getId());
        stringObjectHashMap.put("amount",amount);
        stringObjectHashMap.put("failTime",failTime);
        return new FebsResponse().success().data(stringObjectHashMap);
    }
@@ -598,8 +601,6 @@
            log.error("支付失败,订单ID:{},支付类型:{}", orderId, payType, e);
            throw new FebsException("支付失败:" + e.getMessage());
        }
        // todo 支付失败要把对应的人数加回来
        // 构造返回结果,包含支付相关信息
        Map<String, Object> map = new HashMap<>();
@@ -918,7 +919,7 @@
        List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(
                new LambdaQueryWrapper<HappyActivityOrder>()
                        .eq(HappyActivityOrder::getState, StateUpDownEnum.ORDER_STATE_WAIT_PAY.getCode())
                        .lt(HappyActivityOrder::getCreatedTime, DateUtil.offsetMinute(new Date(), -10))
                        .lt(HappyActivityOrder::getFailTime, new Date())
        );
        if(CollUtil.isNotEmpty(happyActivityOrders)){
            happyActivityOrders.forEach(happyActivityOrder -> {
@@ -927,7 +928,7 @@
                Integer numCnt = happyActivityOrder.getNumCnt();
                this.baseMapper.updateHappyActivitySurplusCnt(activityId,numCnt);
                happyActivityOrder.setDeleteFlag(StateUpDownEnum.UP.getCode());
                happyActivityOrder.setState(StateUpDownEnum.ORDER_STATE_OVERTIME.getCode());
                happyActivityOrderMapper.updateById(happyActivityOrder);
            });
        }