Administrator
3 days ago d3844ee25fbb06b656b5521978f083695d194b07
feat(mall): 添加门票核销功能

- 新增核销门票-详细信息接口和核销门票
- 确认核销接口
- 实现核销门票的后端逻辑,包括检查用户权限和更新订单状态
- 优化现有接口,增加对已核销订单的处理
3 files modified
53 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 39 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java
@@ -120,7 +120,7 @@
        return happyActivityService.orderDelete(id);
    }
    @ApiOperation(value = "核销门票", notes = "核销门票")
    @ApiOperation(value = "核销门票-详细信息", notes = "核销门票-详细信息")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiCheckOrderVo.class)
    })
@@ -130,6 +130,16 @@
        return happyActivityService.checkOrder(dto);
    }
    @ApiOperation(value = "核销门票-确认核销", notes = "核销门票-确认核销")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiCheckOrderVo.class)
    })
    @PostMapping(value = "/insureOrder")
    public FebsResponse insureOrder(@RequestBody @Validated ApiCheckOrderDto dto) {
        return happyActivityService.insureOrder(dto);
    }
    @ApiOperation(value = "我的报名-评价", notes = "我的报名-评价")
    @PostMapping(value = "/addComment")
    public FebsResponse addComment(@RequestBody @Validated ApiPayOrderAddCommentDto dto) {
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -70,6 +70,8 @@
    FebsResponse checkOrder(ApiCheckOrderDto dto);
    FebsResponse insureOrder(ApiCheckOrderDto dto);
    void checkActivityItem(Long orderId);
    void overtimeJob();
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -903,11 +903,10 @@
                .last("limit 1")
        );
        if(happyActivityOrderItem != null){
            happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode());
            happyActivityOrderItem.setTransferItemId(memberId);
            happyActivityOrderItemMapper.updateById(happyActivityOrderItem);
            agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId());
            if(StateUpDownEnum.UP.getCode() == happyActivityOrderItem.getState()){
                throw new FebsException("该票号已核销!");
            }
            HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId());
            ApiCheckOrderVo apiCheckOrderVo = new ApiCheckOrderVo();
@@ -926,6 +925,38 @@
        return new FebsResponse().fail().message("核销失败!");
    }
    @Override
    public FebsResponse insureOrder(ApiCheckOrderDto dto) {
        // 获取当前登录用户的ID
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        if(StateUpDownEnum.UP.getCode() != mallMember.getCheckOrder()){
            throw new FebsException("您不是核销员!");
        }
        String orderItemCode = dto.getOrderItemCode();
        HappyActivityOrderItem happyActivityOrderItem = happyActivityOrderItemMapper.selectOne(
                new LambdaQueryWrapper<HappyActivityOrderItem>()
                        .eq(HappyActivityOrderItem::getCode, orderItemCode)
                        .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode())
                        .last("limit 1")
        );
        if(happyActivityOrderItem != null){
            if(StateUpDownEnum.UP.getCode() == happyActivityOrderItem.getState()){
                throw new FebsException("该票号已核销!");
            }
            happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode());
            happyActivityOrderItem.setTransferItemId(memberId);
            happyActivityOrderItemMapper.updateById(happyActivityOrderItem);
            agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId());
        }
        return new FebsResponse().success().message("操作成功");
    }
    /**
     * 检查活动订单项的状态
     * 当指定订单的所有活动订单项都不处于"未使用"状态时,将订单状态更新为"已使用"