bug
jiangqs
2023-09-18 4b759541dfa1de220f176b5688e0e46b3414e388
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -23,7 +23,6 @@
import com.ruoyi.system.api.domain.poji.goods.Goods;
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.shop.Shop;
import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.service.RemoteActivityService;
@@ -120,7 +119,6 @@
                    useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
                }
                if(couponType.equals("折扣")){
                    moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
                    discountPercent = mgtCouponPageVo.getDiscountPercent();
                    useLimit = discountPercent.toString() + "折";
                }
@@ -301,6 +299,8 @@
        coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType());
        coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId());
        coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster());
        coupon.setSendLimitNumber(mgtCouponEditDto.getSendLimitNumber());
        coupon.setSendLimitFlag(mgtCouponEditDto.getSendLimitFlag());
        //判断是否指定商品
        if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){
            List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList();
@@ -986,6 +986,7 @@
            couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId());
            coupon.setCouponStatus(1);
        }else{
            //初始化新优惠券
            coupon = new Coupon();
            String couponId = IdUtils.simpleUUID();
            coupon.setCouponId(couponId);
@@ -1026,6 +1027,8 @@
        coupon.setUpdateUserId(merCouponEditDto.getUserId());
        coupon.setRelationType(1);
        coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster());
        coupon.setSendLimitNumber(merCouponEditDto.getSendLimitNumber());
        coupon.setSendLimitFlag(merCouponEditDto.getSendLimitFlag());
        //判断是否指定商品
        if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){
            List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList();
@@ -1089,19 +1092,27 @@
     */
    @Override
    public void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList){
        // 获取第一个用户和商店的ID
        Long userId = giftSendDtoList.get(0).getUserId();
        Long shopId = giftSendDtoList.get(0).getShopId();
        // 初始化变量
        String couponId;
        Coupon coupon;
        List<MemberCoupon> memberCouponList = new ArrayList<>();
        MemberCoupon memberCoupon;
        String memberCouponId;
        // 遍历生日礼物发送DTO列表
        for(BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList){
            // 获取优惠券ID并查询优惠券信息
            couponId = birthdayGiftSendDto.getCouponId();
            coupon = this.getById(couponId);
            // 判断优惠券是否存在或已失效
            if(coupon==null||coupon.getCouponStatus()!=1){
                throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR);
            }
            // 根据优惠券数量生成会员优惠券列表
            for(int i=0;i<birthdayGiftSendDto.getCouponNumber();i++){
                memberCoupon = new MemberCoupon();
                memberCouponId = IdUtils.simpleUUID();
@@ -1110,6 +1121,7 @@
                memberCoupon.setCouponId(couponId);
                memberCoupon.setUserId(userId);
                memberCoupon.setShopId(shopId);
                // 根据优惠券类型设置会员优惠券信息
                if(coupon.getCouponType()==1){
                    memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                    memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
@@ -1127,6 +1139,7 @@
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setUseScope(coupon.getUseScope());
                // 如果优惠券适用范围为指定商品,则设置关联商品ID
                if(memberCoupon.getUseScope()==2){
                    memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                }
@@ -1136,7 +1149,7 @@
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setCouponFrom(coupon.getCouponFrom());
                memberCoupon.setReceiveTime(new Date());
                //有效期处理1.时间段2.领取之日起
                // 根据有效期类型设置会员优惠券的截止时间
                if(coupon.getValidTimeType()==1){
                    memberCoupon.setDeadlineTime(coupon.getValidEndTime());
                }else if(coupon.getValidTimeType()==2){
@@ -1144,8 +1157,10 @@
                }
                memberCouponList.add(memberCoupon);
            }
            // 更新会员优惠券记录
            memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber());
        }
        // 批量保存会员优惠券列表
        memberCouponService.saveBatch(memberCouponList);
    }
@@ -1159,41 +1174,64 @@
     */
    @Override
    public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Member member){
        //获取用户当前已领取完优惠券
        List<String> unUserGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId());
        //获取当前已领取完优惠券
        List<String> unGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId());
        List<String> unGetList = couponMapper.listUnGetCoupon();
        //合并不可领取优惠券列表
        HashSet<String> mergedList = new HashSet<>();
        mergedList.addAll(unUserGetList);
        mergedList.addAll(unGetList);
        unGetList = new ArrayList<>(mergedList);
        List<AppGetAbleCouponPageVo> getAbleCouponPageVoList = couponMapper.getAbleCouponPageVoList(page, member.getRelationShopId(),member.getUserId(),member.getBindingFlag(), unGetList);
        //处理商品限制
        if(!getAbleCouponPageVoList.isEmpty()){
            String relGoodsIds;
            List<Goods> goodsList;
            List<String> goodsLimitList = null;
            Shop shop = null;
            for(AppGetAbleCouponPageVo appGetAbleCouponPageVo : getAbleCouponPageVoList){
                relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)){
                    goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
                    if(goodsList!=null&&!goodsList.isEmpty()){
                        goodsLimitList = goodsList.stream().map(goods -> {
                            String goodsName = goods.getGoodsName();
                            goodsName = "限制" + goodsName + "适用";
                            return goodsName;
                        }).collect(Collectors.toList());
                    }
                }else{
                    goodsLimitList = new ArrayList<>();
                    if(appGetAbleCouponPageVo.getShopId()!=null){
                        if(shop!=null&&shop.getShopId().equals(appGetAbleCouponPageVo.getShopId())){
                        }else{
                            shop = remoteShopService.getShop(appGetAbleCouponPageVo.getShopId()).getData();
                        }
                        goodsLimitList.add(shop.getShopName()+"通用");
                    }else{
                        goodsLimitList.add("全场通用");
            HashSet<Long> shopIdSet = new HashSet<>();
            HashSet<Long> goodsIdSet = new HashSet<>();
            for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){
                if(getAbleCouponPageVo.getShopId()!=null){
                    shopIdSet.add(getAbleCouponPageVo.getShopId());
                }
                if(StringUtils.isNotBlank(getAbleCouponPageVo.getRelGoodsIds())&&!getAbleCouponPageVo.getRelGoodsIds().contains(",")){
                    goodsIdSet.add(Long.valueOf(getAbleCouponPageVo.getRelGoodsIds()));
                }
            }
            //获取关联商户和商品信息并转换为Map
            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            String goodsJoinedString = null;
            if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){
                goodsJoinedString = String.join(",", goodsIdSet.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()));
            Map<String, Goods> goodsMap = null;
            if(goodsJoinedString!=null){
                List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsJoinedString).getData();
                goodsMap = goodsList.stream()
                        .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
            }
            //处理返回信息
            String shopLimit = "全场通用";
            String goodsLimit = null;
            for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){
                //商户限制
                if(getAbleCouponPageVo.getShopId()!=null){
                    if(!member.getRelationShopId().equals(getAbleCouponPageVo.getShopId())){
                        shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用";
                    }
                }
                appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
                getAbleCouponPageVo.setShopLimit(shopLimit);
                //商品限制
                relGoodsIds = getAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){
                    goodsLimit = goodsMap.get(relGoodsIds).getGoodsName();
                }
                getAbleCouponPageVo.setGoodsLimit(goodsLimit);
            }
        }
        return getAbleCouponPageVoList;
    }
@@ -1212,13 +1250,23 @@
    @Override
    public void appGetCoupon(String couponId,Long userId,Long shopId){
        Coupon coupon = this.getById(couponId);
        //判断优惠券状态
        if(coupon==null||coupon.getDelFlag()==1||coupon.getCouponStatus()!=1||coupon.getSendType()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR);
        }
        //判断优惠券用户领取状态
        MemberCouponRecord memberCouponRecord = memberCouponRecordService.getByCouponIdAndUserId(couponId,userId);
        if(memberCouponRecord!=null&&memberCouponRecord.getLimitFlag()==1){
            throw new ServiceException(AppErrorConstant.COUPON_GET_ALL);
        }
        //判断优惠券发放状态
        if(coupon.getSendLimitFlag()==1&&coupon.getSendLimitNumber()>0){
            CouponTotal couponTotal = couponTotalService.getById(couponId);
            if(couponTotal.getSendCount()>=coupon.getSendLimitNumber()){
                throw new ServiceException(AppErrorConstant.COUPON_GET_ALL);
            }
        }
        //生成用户优惠券
        MemberCoupon memberCoupon = new MemberCoupon();
        String memberCouponId = IdUtils.simpleUUID();
        memberCoupon.setId(memberCouponId);