jiangqs
2023-06-15 a262dee3a122f081a2d31d86b851ce3df0680d1a
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -8,17 +8,13 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.member.domain.dto.MgtCouponEditDto;
import com.ruoyi.member.domain.dto.MgtCouponPageDto;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.ruoyi.member.domain.pojo.coupon.CouponRelGoods;
import com.ruoyi.member.domain.pojo.coupon.CouponRelUser;
import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
import com.ruoyi.member.domain.pojo.member.MemberCoupon;
import com.ruoyi.member.domain.vo.MgtCouponGetVo;
import com.ruoyi.member.domain.vo.MgtCouponGoodsListVo;
import com.ruoyi.member.domain.vo.MgtCouponMemberListVo;
import com.ruoyi.member.domain.vo.MgtCouponPageVo;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.coupon.CouponMapper;
import com.ruoyi.member.service.coupon.CouponRelGoodsService;
import com.ruoyi.member.service.coupon.CouponRelUserService;
@@ -421,4 +417,147 @@
            }
        }
    }
    /**
     * @description  获取优惠券选择列表
     * @author  jqs
     * @date    2023/6/15 14:59
     * @param mgtCouponListDto
     * @return  List<MgtCouponSimpleListVo>
     */
    @Override
    public List<MgtCouponSimpleListVo> listMgtCouponSimpleVo(MgtCouponListDto mgtCouponListDto){
        if(mgtCouponListDto.getShopId()!=null&&mgtCouponListDto.getShopId()==0){
            mgtCouponListDto.setShopId(null);
        }
        return couponMapper.listMgtCouponSimpleVo(mgtCouponListDto);
    }
    /**
     * @description  获取商户优惠券审核列表
     * @author  jqs
     * @date    2023/6/15 16:20
     * @param page
     * @param mgtCouponAuditPageDto
     * @return  List<MgtCouponAuditPageVo>
     */
    @Override
    public List<MgtCouponAuditPageVo> pageMgtAuditCoupon(Page page, MgtCouponAuditPageDto mgtCouponAuditPageDto){
        List<MgtCouponAuditPageVo> mgtCouponAuditPageVoList = couponMapper.pageMgtAuditCoupon(page, mgtCouponAuditPageDto);
        //处理使用限制和有效期
        if(mgtCouponAuditPageVoList!=null&&!mgtCouponAuditPageVoList.isEmpty()){
            Integer couponType;
            Integer validTimeType;
            Date validStartTime;
            Date validEndTime;
            Integer validDay;
            String validTime = "";
            for(MgtCouponAuditPageVo mgtCouponAuditPageVo : mgtCouponAuditPageVoList){
                //处理有效期
                validTimeType = mgtCouponAuditPageVo.getValidTimeType();
                if(validTimeType==1){
                    validStartTime = mgtCouponAuditPageVo.getValidStartTime();
                    validEndTime = mgtCouponAuditPageVo.getValidEndTime();
                    validTime = DateUtils.dateTime(validStartTime) + '-' +  DateUtils.dateTime(validEndTime);
                }else if(validTimeType==2){
                    validDay = mgtCouponAuditPageVo.getValidDay();
                    validTime = "领取之日起" + validDay.toString() + "天";
                }
                mgtCouponAuditPageVo.setValidTime(validTime);
            }
        }
        return mgtCouponAuditPageVoList;
    }
    /**
     * @description  获取优惠券审核信息
     * @author  jqs
     * @date    2023/6/15 16:36
     * @param couponId
     * @return  MgtCouponAuditGetVo
     */
    @Override
    public MgtCouponAuditGetVo getMgtCouponAuditVo(String couponId){
        MgtCouponAuditGetVo mgtCouponAuditGetVo = new MgtCouponAuditGetVo();
        Coupon coupon = this.getById(couponId);
        //判断优惠券是否为指定商品
        if(coupon.getUseScope()==2){
            String relGoodsIds = coupon.getRelGoodsIds();
            if(StringUtils.isNotBlank(relGoodsIds)){
                //获取指定商品列表
                List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
                if(!goodsList.isEmpty()){
                    //转换为返回对象
                    List<MgtCouponGoodsListVo> relGoodsList = new ArrayList<>();
                    MgtCouponGoodsListVo mgtCouponGoodsListVo;
                    for(Goods goods : goodsList){
                        mgtCouponGoodsListVo = new MgtCouponGoodsListVo();
                        mgtCouponGoodsListVo.setGoodsId(goods.getGoodsId());
                        mgtCouponGoodsListVo.setGoodsName(goods.getGoodsName());
                        mgtCouponGoodsListVo.setGoodsNo(goods.getGoodsNo());
                        //商品类型1周期2服务3体验4单品
                        switch (goods.getGoodsType()){
                            case 1:
                                mgtCouponGoodsListVo.setGoodsType("周期");
                                break;
                            case 2:
                                mgtCouponGoodsListVo.setGoodsType("服务");
                                break;
                            case 3:
                                mgtCouponGoodsListVo.setGoodsType("体验");
                                break;
                            case 4:
                                mgtCouponGoodsListVo.setGoodsType("单品");
                                break;
                            default:
                                break;
                        }
                        mgtCouponGoodsListVo.setSalesPrice(goods.getSalesPrice());
                        relGoodsList.add(mgtCouponGoodsListVo);
                    }
                    mgtCouponAuditGetVo.setRelGoodsList(relGoodsList);
                }
            }
        }
        //判断优惠券是否指定发放用户
        if(coupon.getSendType()==5&&coupon.getRelationType()==1){
            //获取优惠券发放用户
            List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
            mgtCouponAuditGetVo.setRelUserList(relUserList);
        }
        return mgtCouponAuditGetVo;
    }
    /**
     * @description  审核优惠券
     * @author  jqs
     * @date    2023/6/15 16:46
     * @param mgtCouponAuditDto
     * @return  void
     */
    @Override
    public void auditMgtCoupon(MgtCouponAuditDto mgtCouponAuditDto){
        Coupon coupon = this.getById(mgtCouponAuditDto.getCouponId());
        //判断优惠券是否审核
        if(coupon.getCouponStatus()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_AUDIT_DOUBLE);
        }
        coupon.setAuditStatus(mgtCouponAuditDto.getAuditStatus());
        coupon.setAuditReason(mgtCouponAuditDto.getAuditReason());
        coupon.setUpdateTime(new Date());
        coupon.setUpdateUserId(mgtCouponAuditDto.getUserId());
        this.saveOrUpdate(coupon);
        //审核通过后判断是否立即发放
        if(coupon.getCouponStatus()==2&&coupon.getSendTimeType()==1){
            List<CouponRelUser> couponRelUserList = couponRelUserService.list(new LambdaQueryWrapper<CouponRelUser>().eq(CouponRelUser::getDelFlag,0).eq(CouponRelUser::getCouponId,coupon.getCouponId()));
            List<Long> userIdList = new ArrayList<>();
            if(couponRelUserList!=null&&!couponRelUserList.isEmpty()){
                userIdList = couponRelUserList.stream()
                        .map(CouponRelUser::getUserId)
                        .collect(Collectors.toList());
            }
            //发放优惠券
            sendCoupon(coupon, userIdList);
        }
    }
}