bug
jiangqs
2023-08-31 dbff53150cdc807faa56c0d1a947d24b69f372b9
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -1,21 +1,34 @@
package com.ruoyi.member.service.impl.member;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.member.domain.dto.AppMemberCouponPageDto;
import com.ruoyi.member.domain.dto.MemberSelectCouponDto;
import com.ruoyi.member.domain.dto.MerGoodsCouponListDto;
import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
import com.ruoyi.member.mapper.member.MemberCouponMapper;
import com.ruoyi.member.service.member.MemberCouponService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -34,6 +47,9 @@
    @Resource
    private RemoteGoodsService remoteGoodsService;
    @Resource
    private RemoteShopService remoteShopService;
    /**
     * @description: TODO
@@ -42,8 +58,8 @@
     * @version 1.0
     */
    @Override
    public List<AppMemberCouponVo> listVoMemberCouponByUserId(Long userId){
        List<AppMemberCouponVo> appMemberCouponVoList = memberCouponMapper.listVoMemberCouponByUserId(userId);
    public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto){
        List<AppMemberCouponVo> appMemberCouponVoList = memberCouponMapper.listVoMemberCouponByUserId(merBaseDto);
        return appMemberCouponVoList;
    }
@@ -67,7 +83,7 @@
            throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
        } else if (couponStatus == 2) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        } else if (couponStatus != 0) {
        } else if (couponStatus != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        // 检查优惠券类型
@@ -109,7 +125,7 @@
            throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
        }else if(memberCoupon.getCouponStatus()==2){
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }else if(memberCoupon.getCouponStatus()!=0){
        }else if(memberCoupon.getCouponStatus()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        if(memberCoupon.getCouponType()!=4){
@@ -129,6 +145,7 @@
            merVerifyCouponGetVo.setCouponFrom("平台");
        }
        memberCoupon.setCouponStatus(2);
        memberCoupon.setUseTime(new Date());
        this.saveOrUpdate(memberCoupon);
        merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
@@ -151,4 +168,160 @@
        Integer total = this.count(queryWrapper);
        return total;
    }
    /**
     * @description 用户分页获取已领取优惠券列表
     * @author  jqs
     * @date    2023/7/11 16:25
     * @param page
     * @param appMemberCouponPageDto
     * @return  List<AppMemberCouponPageVo>
     */
    @Override
    public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto){
        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponMapper.pageAppUserGetCoupon(page, appMemberCouponPageDto);
        if(!memberCouponPageVoList.isEmpty()){
            String relGoodsIds;
            List<Goods> goodsList;
            List<String> goodsLimitList = null;
            HashSet<Long> shopIdSet = new HashSet<>();
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    shopIdSet.add(appGetAbleCouponPageVo.getShopId());
                }
                if(appGetAbleCouponPageVo.getCouponType()==4){
                    appGetAbleCouponPageVo.setVerifyCode("2-"+appGetAbleCouponPageVo.getMemberCouponId());
                }
            }
            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()));
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                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){
                        goodsLimitList.add(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"通用");
                    }else{
                        goodsLimitList.add("全场通用");
                    }
                }
                appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    appGetAbleCouponPageVo.setVerifyShopName(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName());
                }
            }
        }
        return memberCouponPageVoList;
    }
    /**
     * @description  定时检查优惠券过期
     * @author  jqs
     * @date    2023/7/12 19:19
     * @param
     * @return  void
     */
    @Override
    public void timingCheckMemberCoupon(){
        memberCouponMapper.timingCheckMemberCoupon();
    }
    /**
     * @description  使用优惠券
     * @author  jqs
     * @date    2023/7/13 19:38
     * @param memberCouponIds
     * @return  void
     */
    @Override
    public void useMemberCoupon(String memberCouponIds){
        memberCouponMapper.useMemberCoupon(memberCouponIds);
    }
    /**
     * @description  使用优惠券
     * @author  jqs
     * @date    2023/7/13 19:38
     * @param memberCouponIds
     * @return  void
     */
    @Override
    public void backMemberCoupon(String memberCouponIds){
        memberCouponMapper.backMemberCoupon(memberCouponIds);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/7/19 17:35
     * @param
     * @return  List<MerMemberCouponVo>
     */
    @Override
    public List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(MerGoodsCouponListDto merGoodsCouponListDto){
        List<MerMemberCouponVo> merMemberCouponVoList = memberCouponMapper.listMerShopGoodsMemberCoupon(merGoodsCouponListDto);
        if(merMemberCouponVoList!=null&&merMemberCouponVoList.size()>0){
            List<MemberSelectCouponDto> goodsCpuponList = merGoodsCouponListDto.getGoodsCpuponList();
            List<String> selectCouponList =  new ArrayList<>();
            Map<String, String>  selectCouponMap = new HashMap<>();
            Boolean checkSelect = false;
            if(merGoodsCouponListDto.getGoodsCpuponList()!=null&&merGoodsCouponListDto.getGoodsCpuponList().size()>0) {
                for (MemberSelectCouponDto couponDto : goodsCpuponList) {
                    selectCouponList.add(couponDto.getMemberCouponId());
                    selectCouponMap.put(couponDto.getMemberCouponId(), couponDto.getGoodsId());
                }
                checkSelect = true;
            }
            Iterator<MerMemberCouponVo> iterator = merMemberCouponVoList.iterator();
            while (iterator.hasNext()) {
                MerMemberCouponVo couponVo = iterator.next();
                log.debug("couponVo"+couponVo.toString());
                if(checkSelect){
                    if (selectCouponList.contains(couponVo.getMemberCouponId()) && selectCouponMap.containsKey(couponVo.getMemberCouponId())) {
                        String goodsId = selectCouponMap.get(couponVo.getMemberCouponId());
                        if (!merGoodsCouponListDto.getGoodsId().equals(goodsId)) {
                            iterator.remove();
                            continue;
                        }
                    }
                }
                if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){
                    if(couponVo.getCouponType()==1){
                        BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString()));
                        if(goodsMoney.compareTo(couponVo.getMoneyThreshold())<0){
                            iterator.remove();
                        }
                    }
                }
            }
        }
        return merMemberCouponVoList;
    }
    /**
     * @description  确认核销优惠券
     * @author  jqs
     * @date    2023/8/15 11:21
     * @param memberCouponId
     * @param shopId
     * @return  void
     */
    @Override
    public void sureMemberCoupon(String memberCouponId,Long shopId){
        memberCouponMapper.sureMemberCoupon(memberCouponId, shopId);
    }
}