bug
jiangqs
2023-07-29 95be57d7842d54c7043a5cdc448b1938e5ece058
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -21,9 +21,11 @@
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.config.DelayTask;
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;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteGoodsService;
@@ -33,10 +35,9 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -187,7 +188,7 @@
            }
        }
        //判断优惠券是否指定发放用户
        if(coupon.getSendType()==5&&coupon.getRelationType()==1){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
            //获取优惠券发放用户
            List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
            mgtCouponGetVo.setRelUserList(relUserList);
@@ -207,10 +208,6 @@
        MerCouponGetVo merCouponGetVo = new MerCouponGetVo();
        Coupon coupon = this.getById(couponId);
        BeanUtils.copyProperties(coupon, merCouponGetVo);
        if(merCouponGetVo.getSendType()>1){
            merCouponGetVo.setSendType(2);
            merCouponGetVo.setSendTarget(merCouponGetVo.getSendType());
        }
        //判断优惠券是否为指定商品
        if(coupon.getUseScope()==2){
            String relGoodsIds = coupon.getRelGoodsIds();
@@ -223,7 +220,7 @@
            }
        }
        //判断优惠券是否指定发放用户
        if(coupon.getSendType()==5&&coupon.getRelationType()==1){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
            //获取优惠券发放用户
            List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
            merCouponGetVo.setRelUserList(relUserList);
@@ -274,6 +271,7 @@
        coupon.setCouponType(mgtCouponEditDto.getCouponType());
        coupon.setCouponName(mgtCouponEditDto.getCouponName());
        coupon.setSendType(mgtCouponEditDto.getSendType());
        coupon.setSendTarget(mgtCouponEditDto.getSendTarget());
        coupon.setSendTimeType(mgtCouponEditDto.getSendTimeType());
        coupon.setSendTime(mgtCouponEditDto.getSendTime());
        coupon.setMoneyThreshold(mgtCouponEditDto.getMoneyThreshold());
@@ -307,21 +305,24 @@
        }
        //判断是否指定用户
        List<Long> relUserIdList = null;
        if(coupon.getSendType()==5&&coupon.getRelationType()==1&&!mgtCouponEditDto.getRelUserIdList().isEmpty()){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1&&!mgtCouponEditDto.getRelUserIdList().isEmpty()){
            relUserIdList = mgtCouponEditDto.getRelUserIdList();
            List<CouponRelUser> couponRelUserList = relUserIdList.stream()
                    .map(str -> {
                        CouponRelUser couponRelUser = new CouponRelUser();
                        couponRelUser.setDelFlag(0);
                        couponRelUser.setCouponId(coupon.getCouponId());
                        couponRelUser.setUserId(str);
                        return couponRelUser;
                    })
                    .collect(Collectors.toList());
            List<CouponRelUser> couponRelUserList = new ArrayList<>();
            CouponRelUser couponRelUser;
            StringJoiner userIdSj = new StringJoiner(",");
            for(Long userId : relUserIdList){
                couponRelUser = new CouponRelUser();
                couponRelUser.setDelFlag(0);
                couponRelUser.setCouponId(coupon.getCouponId());
                couponRelUser.setUserId(userId);
                couponRelUserList.add(couponRelUser);
                userIdSj.add(userId.toString());
            }
            couponRelUserService.saveBatch(couponRelUserList);
            coupon.setRelUserIds(userIdSj.toString());
        }
        //处理优惠券发放
        if(coupon.getSendTimeType()==1){
        if(coupon.getSendType()==2&&coupon.getSendTimeType()==1){
            sendCoupon(coupon,relUserIdList);
            coupon.setSendFlag(1);
            this.saveOrUpdate(coupon);
@@ -342,15 +343,15 @@
    protected void sendCoupon(Coupon coupon, List<Long> relUserIdList){
        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
        Date nowTime = new Date();
        Integer sendType = coupon.getSendType();
        Integer sendTarget = coupon.getSendTarget();
        List<Long> userIdList = new ArrayList<>();
        Long shopId = null;
        if(coupon.getCouponFrom()==2 && sendType==3){
        if(coupon.getCouponFrom()==2 && sendTarget==3){
            shopId = coupon.getShopId();
        }
        if(sendType >= 2 && sendType <= 4){
            userIdList = memberService.listIdBySendType(sendType,shopId);
        }else if(sendType == 5){
        if(sendTarget >= 2 && sendTarget <= 4){
            userIdList = memberService.listIdBySendType(sendTarget,shopId);
        }else if(sendTarget == 5){
            //关联类型1.用户管理筛选2.活动管理筛选
            if(coupon.getRelationType()==2){
                Integer relationActivityType = coupon.getRelationActivityType();
@@ -366,7 +367,7 @@
                userIdList = relUserIdList;
            }
        }
        if(relUserIdList!=null&&!relUserIdList.isEmpty()){
        if(userIdList!=null&&!userIdList.isEmpty()){
            List<MemberCoupon> memberCouponList = new ArrayList<>();
            MemberCoupon memberCoupon;
            Integer sendTotal = 0;
@@ -385,6 +386,7 @@
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
                memberCoupon.setSendType(coupon.getSendType());
                memberCoupon.setSendTarget(coupon.getSendTarget());
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
@@ -395,6 +397,7 @@
                memberCoupon.setValidStartTime(coupon.getValidStartTime());
                memberCoupon.setValidEndTime(coupon.getValidEndTime());
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setCouponFrom(coupon.getCouponFrom());
                memberCoupon.setReceiveTime(nowTime);
                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                //有效期处理1.时间段2.领取之日起
@@ -426,15 +429,15 @@
    private void sendCouponNow(Coupon coupon, List<Long> relUserIdList){
        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
        Date nowTime = new Date();
        Integer sendType = coupon.getSendType();
        Integer sendTarget = coupon.getSendTarget();
        List<Long> userIdList = new ArrayList<>();
        Long shopId = null;
        if(coupon.getCouponFrom()==2 && sendType==3){
        if(coupon.getCouponFrom()==2 && sendTarget==3){
            shopId = coupon.getShopId();
        }
        if(sendType >= 2 && sendType <= 4){
            userIdList = memberService.listIdBySendType(sendType,shopId);
        }else if(sendType == 5){
        if(sendTarget >= 2 && sendTarget <= 4){
            userIdList = memberService.listIdBySendType(sendTarget,shopId);
        }else if(sendTarget == 5){
            //关联类型1.用户管理筛选2.活动管理筛选
            if(coupon.getRelationType()==2){
                Integer relationActivityType = coupon.getRelationActivityType();
@@ -469,6 +472,7 @@
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
                memberCoupon.setSendType(coupon.getSendType());
                memberCoupon.setSendTarget(coupon.getSendTarget());
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
@@ -479,6 +483,7 @@
                memberCoupon.setValidStartTime(coupon.getValidStartTime());
                memberCoupon.setValidEndTime(coupon.getValidEndTime());
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setCouponFrom(coupon.getCouponFrom());
                memberCoupon.setReceiveTime(nowTime);
                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                //有效期处理1.时间段2.领取之日起
@@ -579,7 +584,7 @@
        List<CouponRelUser> couponRelUserList;
        List<Long> userIdList = new ArrayList<>();
        Coupon coupon = this.getById(couponId);
        if(coupon.getSendType()==5&&coupon.getRelationType()==1){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
            couponRelUserList = couponRelUserService.list(new LambdaQueryWrapper<CouponRelUser>().eq(CouponRelUser::getDelFlag,0).eq(CouponRelUser::getCouponId,coupon.getCouponId()));
            if(couponRelUserList!=null&&!couponRelUserList.isEmpty()){
                userIdList = couponRelUserList.stream()
@@ -627,6 +632,7 @@
            Date validEndTime;
            Integer validDay;
            String validTime = "";
            HashSet<Long> shopIdSet = new HashSet<>();
            for(MgtCouponAuditPageVo mgtCouponAuditPageVo : mgtCouponAuditPageVoList){
                //处理有效期
                validTimeType = mgtCouponAuditPageVo.getValidTimeType();
@@ -639,6 +645,20 @@
                    validTime = "领取之日起" + validDay.toString() + "天";
                }
                mgtCouponAuditPageVo.setValidTime(validTime);
                if(mgtCouponAuditPageVo.getShopId()!=null){
                    shopIdSet.add(mgtCouponAuditPageVo.getShopId());
                }
            }
            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(MgtCouponAuditPageVo mgtCouponAuditPageVo : mgtCouponAuditPageVoList){
                if(mgtCouponAuditPageVo.getShopId()!=null){
                    mgtCouponAuditPageVo.setShopName(shopMap.get(mgtCouponAuditPageVo.getShopId()).getShopName());
                }
            }
        }
        return mgtCouponAuditPageVoList;
@@ -696,7 +716,7 @@
            }
        }
        //判断优惠券是否指定发放用户
        if(coupon.getSendType()==5&&coupon.getRelationType()==1){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
            //获取优惠券发放用户
            List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
            mgtCouponAuditGetVo.setRelUserList(relUserList);
@@ -785,7 +805,7 @@
                if(validTimeType==1){
                    validStartTime = merCouponPageVo.getValidStartTime();
                    validEndTime = merCouponPageVo.getValidEndTime();
                    validTime = DateUtils.dateTime(validStartTime) + '-' +  DateUtils.dateTime(validEndTime);
                    validTime = DateUtils.parseDateToStr("yyyy.MM.dd",validStartTime) + '-' +  DateUtils.parseDateToStr("yyyy.MM.dd",validEndTime);
                }else if(validTimeType==2){
                    validDay = merCouponPageVo.getValidDay();
                    validTime = "领取之日起" + validDay.toString() + "天";
@@ -843,7 +863,7 @@
                if(validTimeType==1){
                    validStartTime = merCouponPageVo.getValidStartTime();
                    validEndTime = merCouponPageVo.getValidEndTime();
                    validTime = DateUtils.dateTime(validStartTime) + '-' +  DateUtils.dateTime(validEndTime);
                    validTime = DateUtils.parseDateToStr("yyyy.MM.dd",validStartTime) + '-' +  DateUtils.parseDateToStr("yyyy.MM.dd",validEndTime);
                }else if(validTimeType==2){
                    validDay = merCouponPageVo.getValidDay();
                    validTime = "领取之日起" + validDay.toString() + "天";
@@ -899,10 +919,9 @@
        coupon.setCouponType(merCouponEditDto.getCouponType());
        coupon.setCouponName(merCouponEditDto.getCouponName());
        coupon.setSendType(merCouponEditDto.getSendType());
        if(merCouponEditDto.getSendType()!=1){
            coupon.setSendType(merCouponEditDto.getSendTarget());
        }
        coupon.setSendTimeType(merCouponEditDto.getSendTimeType());
        coupon.setSendTarget(merCouponEditDto.getSendTarget());
        //商户端默认立即发放
        coupon.setSendTimeType(1);
        coupon.setSendTime(merCouponEditDto.getSendTime());
        coupon.setMoneyThreshold(merCouponEditDto.getMoneyThreshold());
        coupon.setDiscountMoney(merCouponEditDto.getDiscountMoney());
@@ -933,18 +952,21 @@
        }
        //判断是否指定用户
        List<Long> relUserIdList = null;
        if(coupon.getSendType()==5&&coupon.getRelationType()==1&&!merCouponEditDto.getRelUserIdList().isEmpty()){
        if(coupon.getSendTarget()==5&&coupon.getRelationType()==1&&!merCouponEditDto.getRelUserIdList().isEmpty()){
            relUserIdList = merCouponEditDto.getRelUserIdList();
            List<CouponRelUser> couponRelUserList = relUserIdList.stream()
                    .map(str -> {
                        CouponRelUser couponRelUser = new CouponRelUser();
                        couponRelUser.setDelFlag(0);
                        couponRelUser.setCouponId(coupon.getCouponId());
                        couponRelUser.setUserId(str);
                        return couponRelUser;
                    })
                    .collect(Collectors.toList());
            List<CouponRelUser> couponRelUserList = new ArrayList<>();
            CouponRelUser couponRelUser;
            StringJoiner userIdSj = new StringJoiner(",");
            for(Long userId : relUserIdList){
                couponRelUser = new CouponRelUser();
                couponRelUser.setDelFlag(0);
                couponRelUser.setCouponId(coupon.getCouponId());
                couponRelUser.setUserId(userId);
                couponRelUserList.add(couponRelUser);
                userIdSj.add(userId.toString());
            }
            couponRelUserService.saveBatch(couponRelUserList);
            coupon.setRelUserIds(userIdSj.toString());
        }
        this.saveOrUpdate(coupon);
    }
@@ -997,6 +1019,7 @@
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
                memberCoupon.setSendType(coupon.getSendType());
                memberCoupon.setSendTarget(coupon.getSendTarget());
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
@@ -1007,6 +1030,7 @@
                memberCoupon.setValidStartTime(coupon.getValidStartTime());
                memberCoupon.setValidEndTime(coupon.getValidEndTime());
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setCouponFrom(coupon.getCouponFrom());
                memberCoupon.setReceiveTime(new Date());
                //有效期处理1.时间段2.领取之日起
                if(coupon.getValidTimeType()==1){
@@ -1031,10 +1055,10 @@
     * @return  List<AppUnGetCouponPageVo>
     */
    @Override
    public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Long shopId){
    public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Member member){
        //获取当前已领取完优惠券
        List<String> unGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId());
        List<AppGetAbleCouponPageVo> getAbleCouponPageVoList = couponMapper.getAbleCouponPageVoList(page, shopId, unGetList);
        List<AppGetAbleCouponPageVo> getAbleCouponPageVoList = couponMapper.getAbleCouponPageVoList(page, member.getRelationShopId(),member.getUserId(),member.getBindingFlag(), unGetList);
        //处理商品限制
        if(!getAbleCouponPageVoList.isEmpty()){
            String relGoodsIds;
@@ -1045,7 +1069,7 @@
                relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)){
                    goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
                    if(!goodsList.isEmpty()){
                    if(goodsList!=null&&!goodsList.isEmpty()){
                        goodsLimitList = goodsList.stream().map(goods -> {
                            String goodsName = goods.getGoodsName();
                            goodsName = "限制" + goodsName + "适用";
@@ -1103,6 +1127,7 @@
        memberCoupon.setCouponStatus(coupon.getCouponStatus());
        memberCoupon.setCouponName(coupon.getCouponName());
        memberCoupon.setSendType(coupon.getSendType());
        memberCoupon.setSendTarget(coupon.getSendTarget());
        memberCoupon.setSendTimeType(coupon.getSendTimeType());
        memberCoupon.setSendTime(coupon.getSendTime());
        memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
@@ -1113,6 +1138,7 @@
        memberCoupon.setValidStartTime(coupon.getValidStartTime());
        memberCoupon.setValidEndTime(coupon.getValidEndTime());
        memberCoupon.setValidDay(coupon.getValidDay());
        memberCoupon.setCouponFrom(coupon.getCouponFrom());
        memberCoupon.setReceiveTime(new Date());
        //有效期处理1.时间段2.领取之日起
        if(coupon.getValidTimeType()==1){
@@ -1124,4 +1150,33 @@
        memberCouponService.save(memberCoupon);
        memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
    }
    /**
     * @description  获取商户优惠券审核统计
     * @author  jqs
     * @date    2023/7/28 11:30
     * @param shopId
     * @return  MetAuditCouponTotalVo
     */
    @Override
    public MetAuditCouponTotalVo getMetAuditCouponTotal(Long shopId){
        MetAuditCouponTotalVo metAuditCouponTotalVo = new MetAuditCouponTotalVo();
        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Coupon::getDelFlag,0);
        queryWrapper.eq(Coupon::getCouponFrom,2);
        queryWrapper.eq(Coupon::getShopId,shopId);
        queryWrapper.eq(Coupon::getCouponStatus,1);
        queryWrapper.eq(Coupon::getAuditStatus,1);
        Integer unAuditTotal = this.count(queryWrapper);
        queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Coupon::getDelFlag,0);
        queryWrapper.eq(Coupon::getCouponFrom,2);
        queryWrapper.eq(Coupon::getShopId,shopId);
        queryWrapper.eq(Coupon::getCouponStatus,1);
        queryWrapper.eq(Coupon::getAuditStatus,3);
        Integer refuseTotal = this.count(queryWrapper);
        metAuditCouponTotalVo.setUnAuditTotal(unAuditTotal);
        metAuditCouponTotalVo.setRefuseTotal(refuseTotal);
        return metAuditCouponTotalVo;
    }
}