puzhibing
2024-02-28 10f1422bc8f401b06b1e55ee63b23016d74abce8
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -15,6 +15,7 @@
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.Member;
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;
@@ -23,6 +24,8 @@
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -178,13 +181,13 @@
     * @return  List<AppMemberCouponPageVo>
     */
    @Override
    public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto){
    public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto, Member member){
        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponMapper.pageAppUserGetCoupon(page, appMemberCouponPageDto);
        if(!memberCouponPageVoList.isEmpty()){
            String relGoodsIds;
            List<Goods> goodsList;
            List<String> goodsLimitList = null;
            HashSet<Long> shopIdSet = new HashSet<>();
            HashSet<String> goodsIdSet = new HashSet<>();
            String[] goodsIdArr;
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    shopIdSet.add(appGetAbleCouponPageVo.getShopId());
@@ -192,33 +195,63 @@
                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("全场通用");
                if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())){
                    relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                    goodsIdArr = relGoodsIds.split(",");
                    for(String str : goodsIdArr){
                        goodsIdSet.add(str);
                    }
                }
                appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
            }
            //获取关联商户和商品信息并转换为Map
            String shopJoinedString;
            Map<Long, MgtSimpleShopVo> shopMap = null;
            if(shopIdSet!=null&&!shopIdSet.isEmpty()) {
                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();
                shopMap = simpleShopVoList.stream()
                        .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
            }
            String goodsJoinedString = null;
            if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){
                goodsJoinedString = String.join(",", goodsIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            }
            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;
            StringJoiner goodsNameSj;
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                goodsLimit = null;
                goodsNameSj = new StringJoiner(",");
                //商户限制
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用";
                }
                appGetAbleCouponPageVo.setShopLimit(shopLimit);
                //商品限制
                relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)){
                    relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                    goodsIdArr = relGoodsIds.split(",");
                    for(String goodsIs : goodsIdArr){
                        if(goodsMap.get(goodsIs)!=null){
                            goodsNameSj.add(goodsMap.get(goodsIs).getGoodsName());
                        }else{
                            log.debug("用户优惠券未找到关联商品"+appGetAbleCouponPageVo.getMemberCouponId()+"-"+appGetAbleCouponPageVo.getRelGoodsIds());
                        }
                    }
                    goodsLimit = goodsNameSj.toString();
                }
                appGetAbleCouponPageVo.setGoodsLimit(goodsLimit);
                //核销商店
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    appGetAbleCouponPageVo.setVerifyShopName(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName());
                }
@@ -247,6 +280,7 @@
     * @return  void
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void useMemberCoupon(String memberCouponIds){
        memberCouponMapper.useMemberCoupon(memberCouponIds);
    }
@@ -288,7 +322,7 @@
            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());
@@ -298,6 +332,7 @@
                        }
                    }
                }
                //处理满减卷门槛过滤
                if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){
                    if(couponVo.getCouponType()==1){
                        BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString()));