Pu Zhibing
11 小时以前 981aacc8d5de2638a0f5b3eb2585e64cfaf2807d
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1514,6 +1514,7 @@
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        appUserOrderGetVo.setCancelType(order.getCancelType());
        return appUserOrderGetVo;
    }
@@ -1532,10 +1533,10 @@
            //删除待支付超时取消延时任务
            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId);
            this.autoCancelOrder(orderId);
            this.autoCancelOrder(orderId, 3);
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销 -> 订单退款
            this.refundOrder(orderId);
            this.refundOrder(orderId, 3);
        } else {
            throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
        }
@@ -1690,12 +1691,12 @@
        shopId = merHomeShopTotalVo.getShopId();
        
        //获取今日到店
        Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
        List<Integer> todayShop = userServiceRecordService.countShopServicePerson(shopId);
        //获取待处理订单和营业额
        merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
        //获取服务统计
        MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId);
        merHomeShopTotalVo.setTodayShop(todayShop);
        merHomeShopTotalVo.setTodayShop(todayShop.size());
        merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp());
        merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp());
        return merHomeShopTotalVo;
@@ -3255,7 +3256,7 @@
            Long userId;
            Member member;
            Integer orderFrom;
            String orderFromDesc;
            String orderFromDesc = "";
            BigDecimal zeroBig = new BigDecimal("0.00");
            StringJoiner userIdSj = new StringJoiner(",");
            // 遍历订单列表
@@ -3269,8 +3270,16 @@
                        orderFromDesc = "商城订单";
                    } else if (orderFrom == 2) {
                        orderFromDesc = "平台秒杀活动(" + merOrderPageVo.getActivityName() + ")";
                    } else {
                    } else if(orderFrom == 3) {
                        orderFromDesc = "线下创建";
                    }else if(orderFrom == 4) {
                        orderFromDesc = "抽奖";
                    }else if(orderFrom == 5) {
                        orderFromDesc = "美团";
                    }else if(orderFrom == 6) {
                        orderFromDesc = "抖音";
                    }else if(orderFrom == 7) {
                        orderFromDesc = "快手";
                    }
                } else {
                    orderFromDesc = "商城订单";
@@ -5575,11 +5584,12 @@
    @Override
    @Transactional
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public void autoCancelOrder(String orderId) {
    public void autoCancelOrder(String orderId, Integer cancelType) {
        //更新订单信息
        Order order = this.getById(orderId);
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        order.setCancelType(cancelType);
        this.saveOrUpdate(order);
        //活动订单回退库存
        if (order.getOrderFrom() == 2) {
@@ -5791,11 +5801,12 @@
    @Override
    @Transactional
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public void refundOrder(String orderId) {
    public void refundOrder(String orderId, Integer cancelType) {
        // 更新订单信息
        Order order = this.getById(orderId);
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        order.setCancelType(cancelType);
        this.saveOrUpdate(order);
        OrderRefund orderRefund = new OrderRefund();
        String refundId = IdUtils.simpleUUID();
@@ -6534,64 +6545,39 @@
        }
    }
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    private void autoTimeCancelOrder(Order order) {
        String orderId = order.getOrderId();
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        this.saveOrUpdate(order);
        //活动订单回退库存
        if (order.getOrderFrom() == 2) {
            List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                for (OrderGoods orderGoods : orderGoodsList) {
                    //redis库存控制极简版
                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try {
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
                        if(null == surpNum){
                            surpNum = 0;
                        }
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
                    } finally {
                        redissonLock.unlock();
                    }
                    //改变活动库存
                    AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
                    agStockChangeDto.setActivityId(order.getActivityId());
                    agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
                    agStockChangeDto.setChangeType(1);
                    agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
                    agStockChangeDto.setShopId(order.getShopId());
                    agStockChangeDto.setUserId(order.getUserId());
                    remoteActivityService.changeActivityStock(agStockChangeDto);
                    //删除活动记录
                    ActivityRecord activityRecord = new ActivityRecord();
                    activityRecord.setActivityId(order.getActivityId());
                    activityRecord.setGoodsId(orderGoods.getGoodsId());
                    activityRecord.setUserId(order.getUserId());
                    activityRecord.setOrderTime(order.getCreateTime());
                    remoteActivityService.delActivityRecord(activityRecord);
                }
            }
        } else {
            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                //回退优惠券
                List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                    StringJoiner memberCouponSJ = new StringJoiner(",");
                    for (OrderGoods orderGoods : orderGoodsList) {
                        memberCouponSJ.add(orderGoods.getCouponId());
                    }
                    if (memberCouponSJ != null) {
                        remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
                    }
                }
            }
    /**
     * 后台取消订单
     * 订单状态变为已取消 不退款
     * @param dto
     */
    @Override
    public R cancelOrderBySys(CancelOrderDTO dto) {
        Order order = this.getById(dto.getOrderId());
        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
        if(null == order || order.getDelFlag() == -1){
            return R.fail("订单不存在");
        }
        if (order.getOrderStatus() == 0) {
            return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER);
        } else if (order.getOrderStatus() == 1) {
            //删除待支付超时取消延时任务
            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+order.getOrderId());
            order.setOrderStatus(0);
            order.setCancelTime(new Date());
            order.setCancelType(1);
            this.saveOrUpdate(order);
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销
            order.setOrderStatus(0);
            order.setCancelTime(new Date());
            order.setCancelType(1);
            this.saveOrUpdate(order);
        } else {
            return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER);
        }
        return R.ok();
    }
    /**
@@ -6732,38 +6718,6 @@
        }
        return new ArrayList<>();
    }
    /**
     * 后台取消订单
     * 订单状态变为已取消 不退款
     * @param dto
     */
    @Override
    public R cancelOrderBySys(CancelOrderDTO dto) {
        Order order = this.getById(dto.getOrderId());
        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
        if(null == order || order.getDelFlag() == -1){
            return R.fail("订单不存在");
        }
        if (order.getOrderStatus() == 0) {
            return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER);
        } else if (order.getOrderStatus() == 1) {
            //删除待支付超时取消延时任务
            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+order.getOrderId());
            order.setOrderStatus(0);
            order.setCancelTime(new Date());
            this.saveOrUpdate(order);
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销
            order.setOrderStatus(0);
            order.setCancelTime(new Date());
            this.saveOrUpdate(order);
        } else {
            return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER);
        }
        return R.ok();
    }
    @Override
    public R refundOrderBySys(CancelOrderDTO dto) {
@@ -6778,10 +6732,10 @@
            //删除待支付超时取消延时任务
            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+ order.getOrderId());
            this.autoCancelOrder( order.getOrderId());
            this.autoCancelOrder( order.getOrderId(), 1);
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销 -> 订单退款
            this.refundOrder( order.getOrderId());
            this.refundOrder( order.getOrderId(), 1);
        } else {
            return R.fail("已核销订单不能退款");
        }
@@ -6789,6 +6743,67 @@
    }
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    private void autoTimeCancelOrder(Order order) {
        String orderId = order.getOrderId();
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        order.setCancelType(1);
        this.saveOrUpdate(order);
        //活动订单回退库存
        if (order.getOrderFrom() == 2) {
            List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                for (OrderGoods orderGoods : orderGoodsList) {
                    //redis库存控制极简版
                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try {
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
                        if(null == surpNum){
                            surpNum = 0;
                        }
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
                    } finally {
                        redissonLock.unlock();
                    }
                    //改变活动库存
                    AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
                    agStockChangeDto.setActivityId(order.getActivityId());
                    agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
                    agStockChangeDto.setChangeType(1);
                    agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
                    agStockChangeDto.setShopId(order.getShopId());
                    agStockChangeDto.setUserId(order.getUserId());
                    remoteActivityService.changeActivityStock(agStockChangeDto);
                    //删除活动记录
                    ActivityRecord activityRecord = new ActivityRecord();
                    activityRecord.setActivityId(order.getActivityId());
                    activityRecord.setGoodsId(orderGoods.getGoodsId());
                    activityRecord.setUserId(order.getUserId());
                    activityRecord.setOrderTime(order.getCreateTime());
                    remoteActivityService.delActivityRecord(activityRecord);
                }
            }
        } else {
            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                //回退优惠券
                List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                    StringJoiner memberCouponSJ = new StringJoiner(",");
                    for (OrderGoods orderGoods : orderGoodsList) {
                        memberCouponSJ.add(orderGoods.getCouponId());
                    }
                    if (memberCouponSJ != null) {
                        remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
                    }
                }
            }
        }
    }
    @Override
    public List<MgtThirdOrderPageVo> pageMgtThirdOrder(Page<MgtThirdOrderPageVo> page, MgtThirdOrderPageDto dto) {
        //如果区域代码不为null获取对应的商户id