Pu Zhibing
17 小时以前 981aacc8d5de2638a0f5b3eb2585e64cfaf2807d
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -29,7 +29,7 @@
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.api.domain.TLotteryEvent;
import com.ruoyi.goods.api.service.LotteryEventClient;
import com.ruoyi.order.config.WxPayConfiguration;
import com.ruoyi.order.domain.dto.*;
@@ -72,7 +72,6 @@
import com.ruoyi.system.api.model.QwH5LoginVo;
import com.ruoyi.system.api.model.QwUserDetailDto;
import com.ruoyi.system.api.service.*;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.log4j.Log4j2;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
@@ -184,7 +183,7 @@
        if(shop!=null&&shop.getShopStatus()!=1){
            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
        }
        Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
//        Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
        // 初始化订单对象
        AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
        // 初始化订单商品列表
@@ -268,15 +267,20 @@
            appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
            appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId());
            ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            //商户是否定制价格
            if (shopGoods != null) {
                goodsPrice = shopGoods.getSalesPrice();
            } else {
            }
            //是否绑定经销商
            if(shop.getBelongShopId()!=null &&shop.getShopType()==2){
                //经销商定制价格
                appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
                appShopGoodsGetDto.setShopId(belongShop.getShopId());
                shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
                AppShopGoodsGetDto shopGoodsGetDto=new AppShopGoodsGetDto();
                shopGoodsGetDto.setGoodsId(goods.getGoodsId());
                shopGoodsGetDto.setShopId(shop.getBelongShopId());
                Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
                shopGoods = remoteGoodsService.getShopGoods(shopGoodsGetDto).getData();
                if (1 == belongShop.getModifyPricePermission() && null != shopGoods) {
                    goodsPrice = shopGoods.getSalesPrice();
                    goodsPrice=shopGoods.getSalesPrice();
                }
            }
            appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
@@ -461,7 +465,9 @@
        ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
        if (shopGoods != null) {
            goodsPrice = shopGoods.getSalesPrice();
        } else {
        }
        //是否绑定经销商
        if(shop.getBelongShopId()!=null &&shop.getShopType()==2){
            //经销商定制价格
            Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
            appShopGoodsGetDto = new AppShopGoodsGetDto();
@@ -503,8 +509,8 @@
     * @return
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
    @Transactional   // todo  放开分布式事务注解
//    @GlobalTransactional(rollbackFor = Exception.class)
    public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
        // 获取用户ID
        Long userId = appPlaceOrderDto.getUserId();
@@ -577,6 +583,10 @@
        //使用优惠券
        StringJoiner memberCouponSJ = new StringJoiner(",");
        List<String> goodsNameList = new ArrayList<>();
        Shop shop = remoteShopService.getShop(appPlaceOrderDto.getShopId()).getData();
        if(shop!=null&&shop.getShopStatus()!=1){
            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
        }
        // 遍历购买的商品列表
        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
            appSureOrderGoodsVo = new AppSureOrderGoodsVo();
@@ -610,9 +620,10 @@
            if (shopGoods != null) {
                goodsPrice = shopGoods.getSalesPrice();
                serviceNum = shopGoods.getServiceNum();
            } else {
            }
            //是否绑定经销商
            if(shop.getBelongShopId()!=null &&shop.getShopType()==2){
                //经销商定制价格
                Shop shop = remoteShopService.getShop(appPlaceOrderDto.getShopId()).getData();
                Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
                appShopGoodsGetDto = new AppShopGoodsGetDto();
                appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
@@ -1027,7 +1038,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
        Long userId = appPlaceActivityDto.getUserId();
        Member member = remoteMemberService.getMember(userId).getData();
@@ -1503,6 +1514,7 @@
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        appUserOrderGetVo.setCancelType(order.getCancelType());
        return appUserOrderGetVo;
    }
@@ -1521,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);
        }
@@ -1579,10 +1591,13 @@
        appPlaceOrderVo.setPaySign(payArr[5]);
        appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId());
        // 返回AppPlaceOrderVo对象
        List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData();
        List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData();
        if (data.size() > 0) {
            long count = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).count();
            appPlaceOrderVo.setLotteryDraw(count > 0);
            List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).collect(Collectors.toList());
            appPlaceOrderVo.setLotteryDraw(collect.size() > 0);
            if (collect.size() > 0) {
                appPlaceOrderVo.setLotteryEventId(collect.get(0).getId());
            }
        } else {
            appPlaceOrderVo.setLotteryDraw(false);
        }
@@ -1676,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;
@@ -1872,7 +1887,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) {
        String orderId = merVerifyOrderDto.getOrderId();
        BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
@@ -2114,7 +2129,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) {
        String phone = merVerifyOrderDto.getPhone();
        String orderId = merVerifyOrderDto.getOrderId();
@@ -2535,7 +2550,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
        R<MerVerifyCouponGetVo> verifyCoupon = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId());
        if(verifyCoupon.getCode() != 200){
@@ -2675,7 +2690,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) {
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
@@ -2914,7 +2929,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public void createNewOrder(MerNewOrderDto merNewOrderDto) {
        Long userId = merNewOrderDto.getBuyUserId();
        Date nowTime = new Date();
@@ -3241,7 +3256,7 @@
            Long userId;
            Member member;
            Integer orderFrom;
            String orderFromDesc;
            String orderFromDesc = "";
            BigDecimal zeroBig = new BigDecimal("0.00");
            StringJoiner userIdSj = new StringJoiner(",");
            // 遍历订单列表
@@ -3255,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 = "商城订单";
@@ -4372,6 +4395,12 @@
        mgtTotalOrderTotalVo.setExperienceTotal(0);
        mgtTotalOrderTotalVo.setServiceTotal(0);
        mgtTotalOrderTotalVo.setItemTotal(0);
        mgtTotalOrderTotalVo.setMeituan(0);
        mgtTotalOrderTotalVo.setDouyin(0);
        mgtTotalOrderTotalVo.setKuaishou(0);
        mgtTotalOrderTotalVo.setMeituanAmount(new BigDecimal("0"));
        mgtTotalOrderTotalVo.setDouyinAmount(new BigDecimal("0"));
        mgtTotalOrderTotalVo.setKuaishouAmount(new BigDecimal("0"));
        mgtTotalOrderTotalVo.setOrderMoney(new BigDecimal("0"));
        mgtTotalOrderTotalVo.setOnlineMoney(new BigDecimal("0"));
        mgtTotalOrderTotalVo.setOfflineMoney(new BigDecimal("0"));
@@ -4409,6 +4438,12 @@
        mgtTotalOrderTotalVo.setOnlineMoney(totalOrderTotalVo.getOnlineMoney());
        mgtTotalOrderTotalVo.setOfflineMoney(totalOrderTotalVo.getOfflineMoney());
        mgtTotalOrderTotalVo.setActivityMoney(totalOrderTotalVo.getActivityMoney());
        mgtTotalOrderTotalVo.setMeituan(totalOrderTotalVo.getMeituan());
        mgtTotalOrderTotalVo.setDouyin(totalOrderTotalVo.getDouyin());
        mgtTotalOrderTotalVo.setKuaishou(totalOrderTotalVo.getKuaishou());
        mgtTotalOrderTotalVo.setMeituanAmount(totalOrderTotalVo.getMeituanAmount());
        mgtTotalOrderTotalVo.setDouyinAmount(totalOrderTotalVo.getDouyinAmount());
        mgtTotalOrderTotalVo.setKuaishouAmount(totalOrderTotalVo.getKuaishouAmount());
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -5548,12 +5583,13 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
    public void autoCancelOrder(String orderId) {
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    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) {
@@ -5618,7 +5654,7 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    public void payBack(PartnerTransactionsResult transaction, BigDecimal feeAmount) {
        log.info("订单支付回调---"+transaction.toString());
        // 更新订单状态 outTradeNo
@@ -5764,12 +5800,13 @@
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
    public void refundOrder(String orderId) {
//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
    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();
@@ -6508,64 +6545,39 @@
        }
    }
    @GlobalTransactional(rollbackFor = Exception.class)
    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();
    }
    /**
@@ -6706,4 +6718,198 @@
        }
        return new ArrayList<>();
    }
    @Override
    public R refundOrderBySys(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());
            this.autoCancelOrder( order.getOrderId(), 1);
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销 -> 订单退款
            this.refundOrder( order.getOrderId(), 1);
        } else {
            return R.fail("已核销订单不能退款");
        }
        return R.ok();
    }
//    @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
        if (StringUtils.isNotBlank(dto.getKeyword()) || StringUtils.isNotBlank(dto.getShopProvinceCode()) || StringUtils.isNotBlank(dto.getShopCityCode()) || StringUtils.isNotBlank(dto.getShopAreaCode())) {
            MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto();
            mgtShopIdByCodeDto.setShopProvinceCode(dto.getShopProvinceCode());
            mgtShopIdByCodeDto.setShopCityCode(dto.getShopCityCode());
            mgtShopIdByCodeDto.setShopAreaCode(dto.getShopAreaCode());
            MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData();
            if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) {
                dto.setShopIds(mgtShopIdByCodeVo.getShopIds());
            }
        }
        //如果关键词不为null获取对应的用户id
        if (StringUtils.isNotBlank(dto.getKeyword())) {
            MgtUserIdByKeywordDto mgtUserIdByKeywordDto = new MgtUserIdByKeywordDto();
            mgtUserIdByKeywordDto.setKeyword(dto.getKeyword());
            MgtUserIdByKeywordVo mgtUserIdByKeywordVo = remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData();
            if (StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())) {
                dto.setUserIds(mgtUserIdByKeywordVo.getUserIds());
            }
        }
        //数据权限
        List<Long> userId = remoteUserService.getScopeOfAuthorityUserId();
        BoardMemberTotalDto boardMemberTotalDto = new BoardMemberTotalDto();
        boardMemberTotalDto.setUserIds(userId);
        List<Shop> shops = remoteShopService.getShopBySysUserIds(boardMemberTotalDto);
        if (!shops.isEmpty()) {
            List<Long> collect = shops.stream().map(Shop::getShopId).collect(Collectors.toList());
            String join = collect.stream().map(Object::toString).collect(Collectors.joining(","));
            String shopIds = dto.getShopIds();
            if(StringUtils.isNotEmpty(shopIds)){
                shopIds = shopIds + "," + join;
            }else{
                shopIds = join;
            }
            dto.setShopIds(shopIds);
        }
        // 从数据库中获取第三方订单列表
        List<MgtThirdOrderPageVo> thirdOrderPageVoList = orderMapper.pageMgtThirdOrder(page, dto);
        // 如果列表不为空
        if (!thirdOrderPageVoList.isEmpty()) {
            // 定义变量
            HashSet<Long> shopIdSet = new HashSet<>();
            BigDecimal zeroBig = new BigDecimal("0.00");
            // 遍历列表,获取店铺 ID 和用户 ID
            for (MgtThirdOrderPageVo mgtActivityOrderPageVo : thirdOrderPageVoList) {
                if(mgtActivityOrderPageVo.getShopId()!=null){
                    shopIdSet.add(mgtActivityOrderPageVo.getShopId());
                }
            }
            // 将店铺 ID 和用户 ID 转换为逗号分隔的字符串
            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            // 从远程服务获取店铺和用户信息
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(shopJoinedString);
            List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
            Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
            mgtBaseBathDto = new MgtBaseBathDto();
            // 遍历列表,设置店铺名称
            for (MgtThirdOrderPageVo mgtActivityOrderPageVo : thirdOrderPageVoList) {
                if(mgtActivityOrderPageVo.getShopId()!=null){
                    MgtSimpleShopVo mgtSimpleShopVo = shopMap.get(mgtActivityOrderPageVo.getShopId());
                    mgtActivityOrderPageVo.setShopName(null == mgtSimpleShopVo ? "" : mgtSimpleShopVo.getShopName());
                }
            }
        }
        return thirdOrderPageVoList;
    }
    @Override
    public MgtPlTotalThirdOrderStaticsVO getPlTotalThirdOrderStatics(MgtBasePlatformDto mgtBasePlatformDto) {
        MgtPlTotalThirdOrderStaticsVO vo = new MgtPlTotalThirdOrderStaticsVO();
        //数据权限
        List<Long> userIdList = mgtBasePlatformDto.getUserIdList();
        List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId();
        if(null != userIds){
            if(null != userIdList){
                userIdList.addAll(userIds);
            }else{
                userIdList = userIds;
            }
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        if (mgtBasePlatformDto.getUserId() != null || StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) {
            if(shopIdList==null||shopIdList.isEmpty()){
                return vo;
            }
        }
        if(mgtBasePlatformDto.getShopId()!=null){
            shopIdList = new ArrayList<>();
            shopIdList.add(mgtBasePlatformDto.getShopId());
        }
        mgtBasePlatformDto.setShopIdList(shopIdList);
        // 从数据库中获取第三方订单统计
         vo = orderMapper.getPlTotalThirdOrderStatics(mgtBasePlatformDto);
        return vo;
    }
    @Override
    public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) {
        return orderGoodsService.getGoodsSellStatic(goodsIdList);
    }
}