puzhibing
2 天以前 3e7932d378b607f75379b463ae4ae2f4f1ccfe12
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -8,6 +8,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.douyin.openapi.client.models.*;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
@@ -17,7 +18,6 @@
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.UserStatus;
import com.ruoyi.common.core.exception.ServiceException;
@@ -29,6 +29,8 @@
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.service.LotteryEventClient;
import com.ruoyi.order.config.WxPayConfiguration;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
@@ -48,6 +50,8 @@
import com.ruoyi.order.service.account.ProfitSharingService;
import com.ruoyi.order.service.order.*;
import com.ruoyi.order.util.HuiFuTianXiaUtil;
import com.ruoyi.order.util.douyin.OrderUtil;
import com.ruoyi.order.util.douyin.VerifyUtil;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.DelayTaskEnum;
import com.ruoyi.system.api.constant.SecurityConstant;
@@ -72,7 +76,6 @@
import lombok.extern.log4j.Log4j2;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -80,7 +83,6 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -154,18 +156,20 @@
    @Resource
    private OrderPaymentService orderPaymentService;
    @Resource
    private ProfitSharingService profitSharingService;
    @Resource
    private OrderRefundService orderRefundService;
    @Value("${wx.pay.callbackPath}")
    private String callbackPath;
    
    @Resource
    private LotteryEventClient lotteryEventClient;
    /**
     * @description: buyGoods
     * @param: appSureOrderDto
@@ -180,6 +184,7 @@
        if(shop!=null&&shop.getShopStatus()!=1){
            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
        }
        Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
        // 初始化订单对象
        AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
        // 初始化订单商品列表
@@ -265,6 +270,14 @@
            ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            if (shopGoods != null) {
                goodsPrice = shopGoods.getSalesPrice();
            } else {
                //经销商定制价格
                appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
                appShopGoodsGetDto.setShopId(belongShop.getShopId());
                shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
                if (1 == belongShop.getModifyPricePermission() && null != shopGoods) {
                    goodsPrice = shopGoods.getSalesPrice();
                }
            }
            appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
            buyNumBig = BigDecimal.valueOf(buyNum);
@@ -448,6 +461,16 @@
        ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
        if (shopGoods != null) {
            goodsPrice = shopGoods.getSalesPrice();
        } else {
            //经销商定制价格
            Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
            appShopGoodsGetDto = new AppShopGoodsGetDto();
            appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
            appShopGoodsGetDto.setShopId(belongShop.getShopId());
            shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            if (1 == belongShop.getModifyPricePermission() && null != shopGoods) {
                goodsPrice = shopGoods.getSalesPrice();
            }
        }
        appPanicBuyVo.setGoodsPrice(goodsPrice);
        buyNumBig = BigDecimal.valueOf(buyNum);
@@ -587,6 +610,18 @@
            if (shopGoods != null) {
                goodsPrice = shopGoods.getSalesPrice();
                serviceNum = shopGoods.getServiceNum();
            } else {
                //经销商定制价格
                Shop shop = remoteShopService.getShop(appPlaceOrderDto.getShopId()).getData();
                Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
                appShopGoodsGetDto = new AppShopGoodsGetDto();
                appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
                appShopGoodsGetDto.setShopId(belongShop.getShopId());
                shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
                if (1 == belongShop.getModifyPricePermission() && null != shopGoods) {
                    goodsPrice = shopGoods.getSalesPrice();
                    serviceNum = shopGoods.getServiceNum();
                }
            }
            appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
            // 计算商品总价
@@ -1544,6 +1579,13 @@
        appPlaceOrderVo.setPaySign(payArr[5]);
        appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId());
        // 返回AppPlaceOrderVo对象
        List<LotteryEvent> 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);
        } else {
            appPlaceOrderVo.setLotteryDraw(false);
        }
        return appPlaceOrderVo;
    }
@@ -1770,12 +1812,12 @@
        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
        merVerifyOrderVo.setPayType(order.getPayType());
        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
        if(order.getPayType()==1){
        if (order.getPayType() == 1) {
            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
        }else{
            if(order.getOfflinePayMoney()!=null){
        } else {
            if (order.getOfflinePayMoney() != null) {
                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
            }else{
            } else {
                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
            }
        }
@@ -1787,7 +1829,41 @@
        // 返回结果
        return merVerifyOrderVo;
    }
    @Override
    public MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId) {
        CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId);
        if (null == data) {
            throw new ServiceException("查询券信息失败");
        }
        List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates();
        if (null == itemList || itemList.isEmpty()) {
            throw new ServiceException("查询券信息失败");
        }
        CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0);
        //商品信息
        CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku();
        //次卡信息
        CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard();
        //券的状态
        Number status = certificatesItem.getStatus();
        // 创建返回对象
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        // 设置返回对象的属性值
        merVerifyOrderVo.setOrderId(orderId);
        merVerifyOrderVo.setOrderFrom(6);
        merVerifyOrderVo.setOrderStatus(status.intValue() == 1 ? 2 : 3);
        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>();
        AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo();
        orderGoodsPageVo.setGoodsName(sku.getTitle());
        appUserOrderGoodsPageVoList.add(orderGoodsPageVo);
        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
        merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed());
        // 返回结果
        return merVerifyOrderVo;
    }
    /**
     * 确认核销订单
     *
@@ -2029,17 +2105,222 @@
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
    }
    /**
     * @description  分账实现
     * @author  jqs
     * @date    2023/9/8 11:56
     * 核销抖音券
     *
     * @return
     */
    @Override
    @Transactional
    @GlobalTransactional(rollbackFor = Exception.class)
    public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) {
        String phone = merVerifyOrderDto.getPhone();
        String orderId = merVerifyOrderDto.getOrderId();
        Long shopId = merVerifyOrderDto.getShopId();
        //获取核销商户
        Shop shop = remoteShopService.getShop(shopId).getData();
        CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId);
        if (null == data) {
            throw new ServiceException("查询券信息失败");
        }
        List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates();
        if (null == itemList || itemList.isEmpty()) {
            throw new ServiceException("查询券信息失败");
        }
        CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0);
        Number status = certificatesItem.getStatus();
        if (status.intValue() == 2) {
            throw new ServiceException("该抖音券不能重复核销");
        }
        if (status.intValue() != 1) {
            throw new ServiceException("抖音券核销失败");
        }
        String encryptedCode = certificatesItem.getEncryptedCode();
        List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getPoiId(), new ArrayList<String>() {{
            add(encryptedCode);
        }});
        if (null == items || items.isEmpty()) {
            throw new ServiceException("抖音券核销失败");
        }
        Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrderId()));
        if (null != one) {
            throw new ServiceException("该抖音券不能重复核销");
        }
        TradeOrderQueryResponseData tradeOrderQueryResponseData = OrderUtil.queryOrderList(1, 10, data.getOrderId());
        //原始金额
        BigDecimal originAmount = BigDecimal.ZERO;
        //支付金额
        BigDecimal payAmount = BigDecimal.ZERO;
        //优惠金额
        BigDecimal payDiscountAmount = BigDecimal.ZERO;
        if (null != tradeOrderQueryResponseData) {
            TradeOrderQueryResponseDataOrdersItem ordersItem = tradeOrderQueryResponseData.getOrders().get(0);
            TradeOrderQueryResponseDataOrdersItemAmountInfo amountInfo = ordersItem.getAmountInfo();
            originAmount = BigDecimal.valueOf(amountInfo.getOriginAmount()).divide(new BigDecimal(100));
            payAmount = BigDecimal.valueOf(amountInfo.getPayAmount()).divide(new BigDecimal(100));
            payDiscountAmount = BigDecimal.valueOf(amountInfo.getPayDiscountAmount()).divide(new BigDecimal(100));
        }
        Date nowTime = new Date();
        Member member = remoteMemberService.getMemberByMobile(phone).getData();
        //开始添加订单数据
        Order order = new Order();
        order.setOrderId(IdUtils.fastSimpleUUID());
        order.setDelFlag(0);
        order.setOrderStatus(3);
        order.setOrderNo(CodeFactoryUtil.getShopOrderNo());
        order.setOrderFrom(6);
        order.setShopId(shopId);
        order.setUserId(member.getUserId());
        order.setOrderMoney(originAmount);
        order.setDiscountMoney(payDiscountAmount);
        order.setReceivableMoney(payAmount);
        order.setPayType(1);
        order.setPayMoney(payAmount);
        order.setOnlinePayMoney(payAmount);
        order.setOrderRemark("抖音订单");
        order.setCreateTime(nowTime);
        order.setPayTime(nowTime);
        order.setTripartiteOrderId(data.getOrderId());
        //绑定用户判断核销商户
        if (member.getBindingFlag() == 1) {
            if (!member.getRelationShopId().equals(shopId)) {
                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
            }
        }
        order.setUseTime(nowTime);
        order.setUseUserId(merVerifyOrderDto.getUserId());
        order.setCloseFlag(1);
        this.save(order);
        //创建服务商品
        //获取商品信息(商品简介,调理问题)
        //商品信息
        CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku();
        //次卡信息
        CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard();
        OrderGoods orderGoods = new OrderGoods();
        orderGoods.setOrderGoodsId(IdUtils.simpleUUID());
        orderGoods.setDelFlag(0);
        orderGoods.setOrderId(order.getOrderId());
        orderGoods.setBuyNum(timeCard.getTimesCount());
        orderGoods.setCycleNumFlag(1);
        orderGoods.setServiceNum(timeCard.getTimesCount());
        orderGoods.setGoodsType(2);
        orderGoods.setGoodsName(sku.getTitle());
        orderGoodsService.save(orderGoods);
        ConsumerGoods consumerGoods = new ConsumerGoods();
        consumerGoods.setConsumerGoodsId(IdUtils.simpleUUID());
        consumerGoods.setDelFlag(0);
        consumerGoods.setServiceStatus(1);
        consumerGoods.setShopId(order.getShopId());
        consumerGoods.setUserId(order.getUserId());
        consumerGoods.setOrderId(orderId);
        consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId());
        consumerGoods.setGoodsName(sku.getTitle());
        consumerGoods.setCycleNumFlag(1);
        consumerGoods.setServiceNum(timeCard.getTimesCount());
        consumerGoods.setCreateTime(nowTime);
        consumerGoods.setGoodsType(2);
        consumerGoods.setSourceFrom(1);
        consumerGoodsService.save(consumerGoods);
        //生成返回
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        merVerifyOrderVo.setOrderId(orderId);
        merVerifyOrderVo.setOrderNo(order.getOrderNo());
        merVerifyOrderVo.setOrderStatus(order.getOrderStatus());
        merVerifyOrderVo.setOrderFrom(order.getOrderFrom());
        merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
        merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
        merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
        merVerifyOrderVo.setPayMoney(order.getPayMoney());
        merVerifyOrderVo.setOrderRemark(order.getOrderRemark());
        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(new ArrayList<AppUserOrderGoodsPageVo>() {{
            add(new AppUserOrderGoodsPageVo() {{
                setOrderGoodsId(orderGoods.getOrderGoodsId());
                setGoodsName(orderGoods.getGoodsName());
                setGoodsType(orderGoods.getGoodsType());
                setBuyNum(orderGoods.getBuyNum());
            }});
        }});
        merVerifyOrderVo.setCreateTime(order.getCreateTime());
        merVerifyOrderVo.setPayTime(order.getPayTime());
        merVerifyOrderVo.setUseTime(order.getUseTime());
        merVerifyOrderVo.setPayType(order.getPayType());
        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
        //根据支付方式返回应收金额和已收金额
        if (order.getPayType() == 1) {
            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney()));
            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
        } else {
            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit()));
            if (order.getOfflinePayMoney() != null) {
                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
            } else {
                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
            }
        }
        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney()));
        merVerifyOrderVo.setUserId(order.getUserId());
        merVerifyOrderVo.setUserName(member.getRealName());
        merVerifyOrderVo.setUserMobile(member.getMobile());
        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
        //判断用户是否绑定  2023-09-05需求改变核销时绑定用户
        if (member.getBindingFlag() != 1) {
            //绑定商户
            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
            appMemberBindingDto.setShopId(order.getShopId());
            appMemberBindingDto.setUserId(order.getUserId());
            appMemberBindingDto.setBindingFlag(1);
            if (order.getOrderFrom() == 1) {
                appMemberBindingDto.setBindingType(1);
            } else if (order.getOrderFrom() == 2) {
                appMemberBindingDto.setBindingType(2);
            }
            remoteMemberService.updateMemberBinding(appMemberBindingDto);
            order.setNewMemberFlag(1);
        } else {
            order.setNewMemberFlag(0);
        }
        this.saveOrUpdate(order);
        //更新用户积分和消费统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
            BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0, BigDecimal.ROUND_HALF_UP);
            Integer integral = Integer.valueOf(integralBig.toString());
            if (integral > 0) {
                memberTotalChangeDto.setChangeIntegral(integral);
                memberTotalChangeDto.setTypeIntegral(1);
                memberTotalChangeDto.setOrderId(orderId);
                memberTotalChangeDto.setOrderNo(order.getOrderNo());
            }
        }
        //更新消费时间
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
    }
    /**
     * @param orderId
     * @param orderNo
     * @param shopId
     * @param orderMoney
     * @param orderFrom
     * @return  void
     * @return void
     * @description 分账实现
     * @author jqs
     * @date 2023/9/8 11:56
     */
    private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) {
        String sendMessage = "";
@@ -2405,20 +2686,20 @@
        Long shopId = shopRelUserVo.getShopId();
        Shop shop = remoteShopService.getShop(shopId).getData();
        //平台奖品判断
        if (memberGiftRecord.getGiftFrom() == 1) {
        if (memberGiftRecord.getGiftFrom() == 1 && memberGiftRecord.getPrizeFrom() == 1) {
            BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData();
            //判断生日活动状态
            if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){
            if (birthdayCard != null && birthdayCard.getCardStatus() == 1) {
                shop = remoteShopService.getShop(shopId).getData();
                //判断指定区域全部店铺
                if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){
                if (birthdayCard.getAreaFlag() == 2 && birthdayCard.getShopFlag() == 1 && !StringUtils.checkString(birthdayCard.getDesignatedArea(), shop.getShopCityCode())) {
                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                }
                //判断指定店铺
                if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){
                if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) {
                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                }
            }else{
            } else {
                throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR);
            }
        }
@@ -2427,29 +2708,35 @@
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getRealName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if (memberGiftRecord.getGiftFrom() == 1) {
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        if (memberGiftRecord.getPrizeFrom() == 1) {
            if (memberGiftRecord.getGiftFrom() == 1) {
                merVerifyAwardVo.setGiftFrom("平台生日卡");
            } else {
                merVerifyAwardVo.setGiftFrom("商户生日卡");
            }
        } else {
            merVerifyAwardVo.setGiftFrom("商户生日卡");
            merVerifyAwardVo.setGiftFrom("抽奖");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
        BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
        switch (memberGiftRecord.getGiftType()) {
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
                birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
                birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
                birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
                birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
                birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
                giftSendDtoList.add(birthdayGiftSendDto);
                remoteCouponService.sendCouponGift(giftSendDtoList);
                if (memberGiftRecord.getPrizeFrom() == 1) {
                    merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                    merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                    birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
                    birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
                    birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
                    birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
                    birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
                    birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
                    giftSendDtoList.add(birthdayGiftSendDto);
                    remoteCouponService.sendCouponGift(giftSendDtoList);
                }
                break;
            case 2:
                Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
@@ -2472,10 +2759,16 @@
                birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber());
                giftSendDtoList.add(birthdayGiftSendDto);
                consumerGoodsService.sendGoodsGift(giftSendDtoList);
                //抽奖奖品中的平台商品需要生成订单数据
                if (memberGiftRecord.getPrizeFrom() == 2) {
                    addOrder(memberGiftRecord.getShopId(), memberGiftRecord.getUserId(), goods, memberGiftRecord.getGoodsNumber(), memberGiftRecord.getGiftId());
                }
                break;
            case 3:
                merVerifyAwardVo.setGiftName("现金");
                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                if (memberGiftRecord.getPrizeFrom() == 1) {
                    merVerifyAwardVo.setGiftName("现金");
                    merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                }
                break;
            case 4:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
@@ -2503,8 +2796,65 @@
        merVerifyAwardVo.setVerifyStatus(2);
        return merVerifyAwardVo;
    }
    /**
     * 核销抽奖的平台商品生成订单
     *
     * @param shopId
     * @param userId
     * @param goods
     * @param goodsNum
     */
    public void addOrder(Long shopId, Long userId, Goods goods, Integer goodsNum, String giftId) {
        Order order = new Order();
        order.setOrderId(IdUtils.simpleUUID());
        order.setDelFlag(0);
        order.setOrderStatus(3);
        order.setOrderNo(CodeFactoryUtil.getShopOrderNo());
        order.setOrderFrom(4);
        order.setShopId(shopId);
        order.setUserId(userId);
        order.setOrderMoney(BigDecimal.ZERO);
        order.setCouponMoney(BigDecimal.ZERO);
        order.setDiscountMoney(BigDecimal.ZERO);
        order.setReceivableMoney(BigDecimal.ZERO);
        order.setPayType(1);
        order.setPayMoney(BigDecimal.ZERO);
        order.setOrderRemark("抽奖订单");
        order.setCreateTime(new Date());
        order.setPayTime(new Date());
        order.setUseTime(new Date());
        order.setUseUserId(userId);
        order.setGoodsNum(goodsNum);
        order.setReceivableDeposit(BigDecimal.ZERO);
        order.setCloseFlag(1);
        order.setActivityId(giftId);
        this.save(order);
        OrderGoods orderGoods = new OrderGoods();
        orderGoods.setOrderGoodsId(IdUtils.simpleUUID());
        orderGoods.setDelFlag(0);
        orderGoods.setOrderId(order.getOrderId());
        orderGoods.setGoodsId(goods.getGoodsId());
        orderGoods.setBuyNum(goodsNum);
        orderGoods.setGoodsPrice(goods.getSalesPrice());
        orderGoods.setGoodsDeposit(goods.getSubscription());
        orderGoods.setGoodsTotalMoney(goods.getSalesPrice().multiply(new BigDecimal(goodsNum)));
        orderGoods.setGoodsReceivableMoney(BigDecimal.ZERO);
        orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
        orderGoods.setServiceNum(goods.getServiceNum());
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsName(goods.getGoodsName());
        GoodsFile goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
        if (null != goodsFile) {
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
        }
        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
        orderGoods.setGoodsTag(goods.getGoodsTags());
        orderGoodsService.save(orderGoods);
    }
    /**
     * 收银未结清订单列表
     *
@@ -2521,14 +2871,14 @@
                if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                }
                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
                if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                }
            }
        }
        return merMemberNoClearOrderVoList;
    }
    /**
     * 结清订单
     *
@@ -2670,8 +3020,12 @@
            goodsRealPrice = goodsTotalPrice;
            //优惠券计算
            if (memberCouponId != null) {
                appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId);
                log.info("使用优惠券:{}", memberCouponId);
                appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId.toString());
                log.info("匹配的优惠券:{}", JSON.toJSONString(appMemberCouponVo));
                if (null != appMemberCouponVo && (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId))) {
                    log.info("可以使用优惠券:{}", JSON.toJSONString(appMemberCouponVo));
                    couponType = appMemberCouponVo.getCouponType();
                    couponType = appMemberCouponVo.getCouponType();
                    if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
                        moneyThreshold = appMemberCouponVo.getMoneyThreshold();
@@ -2841,6 +3195,7 @@
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        //减去优惠券
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            log.info("修改优惠券使用状态:{}", JSON.toJSONString(memberCouponSJ));
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //更新会员消费记录
@@ -2950,9 +3305,27 @@
                if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                }
                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
                if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                }
                List<MerCouponGoodsListVo> goodsList = new ArrayList<>();
                orderGoodsService.listByOrderId(merMemberNoClearOrderVo.getOrderId()).forEach(orderGoodsVo -> {
                    MerCouponGoodsListVo merCouponGoodsListVo = new MerCouponGoodsListVo();
                    merCouponGoodsListVo.setGoodsId(orderGoodsVo.getGoodsId());
                    merCouponGoodsListVo.setGoodsName(orderGoodsVo.getGoodsName());
                    merCouponGoodsListVo.setGoodsNum(orderGoodsVo.getBuyNum());
                    if (orderGoodsVo.getGoodsType() == 1) {
                        merCouponGoodsListVo.setGoodsType("周期");
                    } else if (orderGoodsVo.getGoodsType() == 2) {
                        merCouponGoodsListVo.setGoodsType("服务");
                    } else if (orderGoodsVo.getGoodsType() == 3) {
                        merCouponGoodsListVo.setGoodsType("体验");
                    } else if (orderGoodsVo.getGoodsType() == 4) {
                        merCouponGoodsListVo.setGoodsType("单品");
                    }
                    goodsList.add(merCouponGoodsListVo);
                });
                merMemberNoClearOrderVo.setGoodsList(goodsList);
            }
        }
        return merMemberNoClearOrderVoList;
@@ -4719,17 +5092,17 @@
        if (memberGiftRecord.getGiftFrom() == 1) {
            BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData();
            //判断生日活动状态
            if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){
            if (birthdayCard != null && birthdayCard.getCardStatus() == 1) {
                shop = remoteShopService.getShop(shopId).getData();
                //判断指定区域全部店铺
                if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){
                if (birthdayCard.getAreaFlag() == 2 && birthdayCard.getShopFlag() == 1 && !StringUtils.checkString(birthdayCard.getDesignatedArea(), shop.getShopCityCode())) {
                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                }
                //判断指定店铺
                if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){
                if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) {
                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                }
            }else{
            } else {
                throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR);
            }
        }
@@ -4737,16 +5110,20 @@
        if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        merVerifyAwardVo.setUserName(member.getRealName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if (memberGiftRecord.getGiftFrom() == 1) {
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        if (1 == memberGiftRecord.getPrizeFrom()) {
            if (memberGiftRecord.getGiftFrom() == 1) {
                merVerifyAwardVo.setGiftFrom("平台生日卡");
            } else {
                merVerifyAwardVo.setGiftFrom("商户生日卡");
            }
        } else {
            merVerifyAwardVo.setGiftFrom("商户生日卡");
            merVerifyAwardVo.setGiftFrom("平台抽奖");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        //礼物类型1优惠券2商品3现金4实物
        //礼物类型1优惠券2商品3现金4实物5积分
        switch (memberGiftRecord.getGiftType()) {
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());