jiangqs
2023-07-12 f26537e926d7ad2d725e059700142ba14c0c2b1f
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.dto.*;
@@ -22,12 +23,14 @@
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.SecurityConstant;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
@@ -89,6 +92,9 @@
    @Resource
    private UserServiceRecordMapper userServiceRecordMapper;
    @Resource
    private RedisService redisService;
    /**
     * @description: buyGoods
@@ -526,6 +532,13 @@
        String activityId = appPlaceActivityDto.getActivityId();
        String goodsId = appPlaceActivityDto.getGoodsId();
        Integer buyNum = appPlaceActivityDto.getBuyNum();
        //redis库存控制极简版
        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
        if(surpNum==null||surpNum<buyNum){
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }else{
            redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum);
        }
        // 定义购买数量,服务数量,商品数量
        BigDecimal buyNumBig;
        Integer serviceNum;
@@ -559,6 +572,9 @@
            throw new ServiceException(AppErrorConstant.ACTIVITY_END);
        }
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        if (buyNum < activityGoodsGetVo.getAvailableBuyNum()) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        // 创建订单ID和订单号
@@ -976,12 +992,23 @@
        merVerifyCouponVo.setUserName(member.getNickName());
        merVerifyCouponVo.setUserMobile(member.getMobile());
        merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
        merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
        merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime());
        // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                .map(goods -> {
                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
                    merCouponGoods.setGoodsId(goods.getGoodsId());
                    merCouponGoods.setGoodsName(goods.getGoodsName());
                    if (goods.getGoodsType() == 1) {
                        merCouponGoods.setGoodsType("周期");
                    } else if (goods.getGoodsType() == 2) {
                        merCouponGoods.setGoodsType("服务");
                    } else if (goods.getGoodsType() == 3) {
                        merCouponGoods.setGoodsType("体验");
                    } else if (goods.getGoodsType() == 4) {
                        merCouponGoods.setGoodsType("单品");
                    }
                    // 设置其他属性
                    return merCouponGoods;
                })
@@ -1029,8 +1056,99 @@
            consumerGoodsList.add(consumerGoods);
        }
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        merVerifyCouponVo.setVerifyStatus(2);
        return merVerifyCouponVo;
    }
    /**
     * @description  确认核销奖品
     * @author  jqs
     * @date    2023/7/9 9:54
     * @param merVerifyPrizeDto
     * @return  MerVerifyAwardVo
     */
    @Override
    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getNickName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if(memberGiftRecord.getGiftFrom()==1){
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        }else{
            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);
                break;
            case 2:
                Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
                if (goods.getGoodsType() == 1) {
                    merVerifyAwardVo.setGiftRemark("周期");
                } else if (goods.getGoodsType() == 2) {
                    merVerifyAwardVo.setGiftRemark("服务");
                } else if (goods.getGoodsType() == 3) {
                    merVerifyAwardVo.setGiftRemark("体验");
                } else if (goods.getGoodsType() == 4) {
                    merVerifyAwardVo.setGiftRemark("单品");
                }
                birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
                birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
                birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
                birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
                birthdayGiftSendDto.setGoodsId(memberGiftRecord.getGoodsId());
                birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber());
                giftSendDtoList.add(birthdayGiftSendDto);
                consumerGoodsService.sendGoodsGift(giftSendDtoList);
                break;
            case 3:
                merVerifyAwardVo.setGiftName("现金");
                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                break;
            case 4:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
                break;
            default:
                break;
        }
        merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
        memberGiftRecord.setVerifyStatus(2);
        memberGiftRecord.setVerifyTime(new Date());
        if(member.getBindingFlag()!=1){
            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
            appMemberBindingDto.setBindingFlag(1);
            appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId());
            Shop shop = remoteShopService.getShop(merVerifyPrizeDto.getShopId()).getData();
            appMemberBindingDto.setShopName(shop.getShopName());
            appMemberBindingDto.setUserId(merVerifyPrizeDto.getUserId());
            remoteMemberService.updateMemberBinding(appMemberBindingDto);
        }
        merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId());
        merVerifyAwardVo.setVerifyStatus(2);
        return merVerifyAwardVo;
    }
    /**
     * 收银未结清订单列表
@@ -2312,19 +2430,95 @@
        merVerifyCouponVo.setUserName(member.getNickName());
        merVerifyCouponVo.setUserMobile(member.getMobile());
        merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
        merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
        merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime());
        // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                .map(goods -> {
                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
                    merCouponGoods.setGoodsId(goods.getGoodsId());
                    merCouponGoods.setGoodsName(goods.getGoodsName());
                    if (goods.getGoodsType() == 1) {
                        merCouponGoods.setGoodsType("周期");
                    } else if (goods.getGoodsType() == 2) {
                        merCouponGoods.setGoodsType("服务");
                    } else if (goods.getGoodsType() == 3) {
                        merCouponGoods.setGoodsType("体验");
                    } else if (goods.getGoodsType() == 4) {
                        merCouponGoods.setGoodsType("单品");
                    }
                    // 设置其他属性
                    return merCouponGoods;
                })
                .collect(Collectors.toList());
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        merVerifyCouponVo.setVerifyStatus(1);
        return merVerifyCouponVo;
    }
    /**
     * @description  获取核销奖品
     * @author  jqs
     * @date    2023/7/8 17:46
     * @param verifyCode
     * @param shopId
     * @return  MerVerifyAwardVo
     */
    @Override
    public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData();
        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getNickName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if(memberGiftRecord.getGiftFrom()==1){
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        }else{
            merVerifyAwardVo.setGiftFrom("商户生日卡");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        switch(memberGiftRecord.getGiftType()){
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                break;
            case 2:
                Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
                if (goods.getGoodsType() == 1) {
                    merVerifyAwardVo.setGiftRemark("周期");
                } else if (goods.getGoodsType() == 2) {
                    merVerifyAwardVo.setGiftRemark("服务");
                } else if (goods.getGoodsType() == 3) {
                    merVerifyAwardVo.setGiftRemark("体验");
                } else if (goods.getGoodsType() == 4) {
                    merVerifyAwardVo.setGiftRemark("单品");
                }
                break;
            case 3:
                merVerifyAwardVo.setGiftName("现金");
                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                break;
            case 4:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
                break;
            default:
                break;
        }
        merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
        merVerifyAwardVo.setVerifyStatus(1);
        merVerifyAwardVo.setPrizeId(verifyCode);
        return merVerifyAwardVo;
    }
    /**
@@ -2360,6 +2554,13 @@
            merTotalDto.setShopId(null);
        }
        MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto);
        MerOrderTotalVo goodsTypeVo = orderMapper.getMerTotalOrderTotalGoodsType(merTotalDto);
        orderTotalVo.setCycleTotal(goodsTypeVo.getCycleTotal());
        orderTotalVo.setCycleMoney(goodsTypeVo.getCycleMoney());
        orderTotalVo.setExperienceTotal(goodsTypeVo.getExperienceTotal());
        orderTotalVo.setExperienceMoney(goodsTypeVo.getExperienceMoney());
        orderTotalVo.setServiceTotal(goodsTypeVo.getServiceTotal());
        orderTotalVo.setServiceMoney(goodsTypeVo.getServiceMoney());
        return orderTotalVo;
    }