package com.ruoyi.member.service.impl.coupon;
|
|
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.DateUtils;
|
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.common.redis.service.RedisService;
|
import com.ruoyi.member.domain.dto.*;
|
import com.ruoyi.member.domain.pojo.coupon.*;
|
import com.ruoyi.member.domain.vo.*;
|
import com.ruoyi.member.mapper.coupon.CouponMapper;
|
import com.ruoyi.member.service.coupon.*;
|
import com.ruoyi.member.service.member.MemberCouponService;
|
import com.ruoyi.member.service.member.MemberService;
|
import com.ruoyi.system.api.constant.AppErrorConstant;
|
import com.ruoyi.system.api.constant.DelayTaskEnum;
|
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;
|
import com.ruoyi.system.api.service.RemoteShopService;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 优惠券 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-04-25
|
*/
|
@Service
|
public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements CouponService {
|
|
@Resource
|
private CouponRelUserService couponRelUserService;
|
|
@Resource
|
private CouponRelGoodsService couponRelGoodsService;
|
|
@Resource
|
private CouponMapper couponMapper;
|
|
@Resource
|
private RemoteGoodsService remoteGoodsService;
|
|
@Resource
|
private CouponTotalService couponTotalService;
|
|
@Resource
|
private MemberService memberService;
|
|
@Resource
|
private MemberCouponService memberCouponService;
|
|
@Resource
|
private RemoteActivityService remoteActivityService;
|
|
@Resource
|
private MemberCouponRecordService memberCouponRecordService;
|
|
@Resource
|
private RemoteShopService remoteShopService;
|
|
@Resource
|
private RedisService redisService;
|
|
@Resource
|
private RemoteConfigService remoteConfigService;
|
|
/**
|
* @description 平台获取优惠券列表
|
* @author jqs
|
* @date 2023/6/13 11:06
|
* @param page
|
* @param mgtCouponPageDto
|
* @return List<MgtCouponPageVo>
|
*/
|
@Override
|
public List<MgtCouponPageVo> pageMgtCoupon(Page page, MgtCouponPageDto mgtCouponPageDto){
|
List<MgtCouponPageVo> mgtCouponPageVoList = couponMapper.pageMgtCoupon(page, mgtCouponPageDto);
|
//处理使用限制和有效期
|
if(mgtCouponPageVoList!=null&&!mgtCouponPageVoList.isEmpty()){
|
String couponType;
|
Integer validTimeType;
|
Date validStartTime;
|
Date validEndTime;
|
Integer validDay;
|
String validTime = "";
|
BigDecimal moneyThreshold;
|
BigDecimal discountMoney;
|
BigDecimal discountPercent;
|
String useLimit = "";
|
for(MgtCouponPageVo mgtCouponPageVo : mgtCouponPageVoList){
|
useLimit = null;
|
//处理使用限制
|
couponType = mgtCouponPageVo.getCouponType();
|
if(couponType.equals("满减")){
|
moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
|
discountMoney = mgtCouponPageVo.getDiscountMoney();
|
useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
|
}
|
if(couponType.equals("折扣")){
|
moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
|
discountPercent = mgtCouponPageVo.getDiscountPercent();
|
useLimit = discountPercent.toString() + "折";
|
}
|
if(couponType.equals("代金")){
|
discountMoney = mgtCouponPageVo.getDiscountMoney();
|
useLimit = discountMoney.toString();
|
}
|
mgtCouponPageVo.setUseLimit(useLimit);
|
//处理有效期
|
validTimeType = mgtCouponPageVo.getValidTimeType();
|
if(validTimeType==1){
|
validStartTime = mgtCouponPageVo.getValidStartTime();
|
validEndTime = mgtCouponPageVo.getValidEndTime();
|
validTime = DateUtils.parseDateToStr("yyyy-MM-dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy-MM-dd",validEndTime);
|
}else if(validTimeType==2){
|
validDay = mgtCouponPageVo.getValidDay();
|
validTime = "领取之日起" + validDay.toString() + "天";
|
}
|
mgtCouponPageVo.setValidTime(validTime);
|
}
|
}
|
return mgtCouponPageVoList;
|
}
|
|
/**
|
* @description 平台获取优惠券编辑信息
|
* @author jqs
|
* @date 2023/6/13 14:29
|
* @param couponId
|
* @return MgtCouponGetVo
|
*/
|
@Override
|
public MgtCouponGetVo getMgtCouponVo(String couponId){
|
MgtCouponGetVo mgtCouponGetVo = new MgtCouponGetVo();
|
Coupon coupon = this.getById(couponId);
|
BeanUtils.copyProperties(coupon, mgtCouponGetVo);
|
//判断优惠券是否为指定商品
|
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());
|
mgtCouponGoodsListVo.setGoodsType(goods.getGoodsType());
|
//商品类型1周期2服务3体验4单品
|
switch (goods.getGoodsType()){
|
case 1:
|
mgtCouponGoodsListVo.setGoodsTypeName("周期");
|
break;
|
case 2:
|
mgtCouponGoodsListVo.setGoodsTypeName("服务");
|
break;
|
case 3:
|
mgtCouponGoodsListVo.setGoodsTypeName("体验");
|
break;
|
case 4:
|
mgtCouponGoodsListVo.setGoodsTypeName("单品");
|
break;
|
default:
|
break;
|
}
|
mgtCouponGoodsListVo.setSalesPrice(goods.getSalesPrice());
|
relGoodsList.add(mgtCouponGoodsListVo);
|
}
|
mgtCouponGetVo.setRelGoodsList(relGoodsList);
|
}
|
}
|
}
|
//判断优惠券是否指定发放用户
|
if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
|
//获取优惠券发放用户
|
List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
|
mgtCouponGetVo.setRelUserList(relUserList);
|
}
|
return mgtCouponGetVo;
|
}
|
|
/**
|
* @description 平台获取优惠券编辑信息
|
* @author jqs
|
* @date 2023/6/13 14:29
|
* @param merBaseGetDto
|
* @return MgtCouponGetVo
|
*/
|
@Override
|
public MerCouponGetVo getMerCouponVo(MerBaseGetDto merBaseGetDto){
|
MerCouponGetVo merCouponGetVo = new MerCouponGetVo();
|
Coupon coupon = this.getById(merBaseGetDto.getId());
|
BeanUtils.copyProperties(coupon, merCouponGetVo);
|
//判断优惠券是否为指定商品
|
if(coupon.getUseScope()==2){
|
String relGoodsIds = coupon.getRelGoodsIds();
|
if(StringUtils.isNotBlank(relGoodsIds)){
|
//获取指定商品列表
|
MerGoodsPriceListDto merGoodsPriceListDto = new MerGoodsPriceListDto();
|
merGoodsPriceListDto.setGoodsIds(relGoodsIds);
|
merGoodsPriceListDto.setShopId(merBaseGetDto.getShopId());
|
List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(merGoodsPriceListDto).getData();
|
if(goodsList!=null&&!goodsList.isEmpty()){
|
merCouponGetVo.setRelGoodsList(goodsList);
|
}
|
}
|
}
|
//判断优惠券是否指定发放用户
|
if(coupon.getSendTarget()==5&&coupon.getRelationType()==1){
|
//获取优惠券发放用户
|
List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
|
merCouponGetVo.setRelUserList(relUserList);
|
}
|
return merCouponGetVo;
|
}
|
|
/**
|
* @description 平台编辑优惠券
|
* @author jqs
|
* @date 2023/6/13 16:50
|
* @param mgtCouponEditDto
|
* @return void
|
*/
|
@Override
|
public void editMgtCoupon(MgtCouponEditDto mgtCouponEditDto){
|
//编辑优惠券
|
Coupon coupon;
|
CouponTotal couponTotal;
|
if(StringUtils.isNotBlank(mgtCouponEditDto.getCouponId())){
|
coupon = this.getById(mgtCouponEditDto.getCouponId());
|
couponTotal = couponTotalService.getById(mgtCouponEditDto.getCouponId());
|
if(couponTotal.getSendCount()!=null&&couponTotal.getSendCount()>0){
|
throw new ServiceException(AppErrorConstant.COUPON_SENT_EDIT);
|
}
|
couponRelUserService.deleteCouponRelByCouponId(coupon.getCouponId());
|
couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId());
|
}else{
|
coupon = new Coupon();
|
String couponId = IdUtils.simpleUUID();
|
coupon.setCouponId(couponId);
|
coupon.setDelFlag(0);
|
coupon.setCouponStatus(1);
|
coupon.setCreateTime(new Date());
|
coupon.setCreateUserId(mgtCouponEditDto.getUserId());
|
coupon.setCouponFrom(1);
|
coupon.setAuditStatus(2);
|
coupon.setLimitNumber(1);
|
coupon.setSendFlag(0);
|
//创建优惠券统计
|
couponTotal = new CouponTotal();
|
couponTotal.setCouponId(couponId);
|
couponTotal.setSendCount(0);
|
couponTotal.setSendUserCount(0);
|
couponTotalService.save(couponTotal);
|
}
|
//优惠券赋值
|
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());
|
coupon.setDiscountMoney(mgtCouponEditDto.getDiscountMoney());
|
coupon.setDiscountPercent(mgtCouponEditDto.getDiscountPercent());
|
coupon.setUseScope(mgtCouponEditDto.getUseScope());
|
coupon.setValidTimeType(mgtCouponEditDto.getValidTimeType());
|
coupon.setValidStartTime(mgtCouponEditDto.getValidStartTime());
|
coupon.setValidEndTime(mgtCouponEditDto.getValidEndTime());
|
coupon.setValidDay(mgtCouponEditDto.getValidDay());
|
coupon.setUpdateTime(new Date());
|
coupon.setUpdateUserId(mgtCouponEditDto.getUserId());
|
coupon.setRelationType(mgtCouponEditDto.getRelationType());
|
coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType());
|
coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId());
|
coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster());
|
//判断是否指定商品
|
if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){
|
List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList();
|
List<CouponRelGoods> couponRelGoodsList = relGoodsIdList.stream()
|
.map(str -> {
|
CouponRelGoods couponRelGoods = new CouponRelGoods();
|
couponRelGoods.setDelFlag(0);
|
couponRelGoods.setCouponId(coupon.getCouponId());
|
couponRelGoods.setGoodsId(str);
|
return couponRelGoods;
|
})
|
.collect(Collectors.toList());
|
couponRelGoodsService.saveBatch(couponRelGoodsList);
|
String relGoodsIds = relGoodsIdList.stream().collect(Collectors.joining(","));
|
coupon.setRelGoodsIds(relGoodsIds);
|
}
|
//判断是否指定用户
|
List<Long> relUserIdList = null;
|
if(coupon.getSendTarget()==5&&coupon.getRelationType()==1&&!mgtCouponEditDto.getRelUserIdList().isEmpty()){
|
relUserIdList = mgtCouponEditDto.getRelUserIdList();
|
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.getSendType()==2&&coupon.getSendTimeType()==1){
|
sendCoupon(coupon,relUserIdList);
|
coupon.setSendFlag(1);
|
this.saveOrUpdate(coupon);
|
}else{
|
this.saveOrUpdate(coupon);
|
}
|
}
|
|
/**
|
* @description 发送优惠券
|
* @author jqs
|
* @date 2023/6/13 18:45
|
* @param coupon
|
* @param relUserIdList
|
* @return void
|
*/
|
@Async
|
protected void sendCoupon(Coupon coupon, List<Long> relUserIdList){
|
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
|
Date nowTime = new Date();
|
Integer sendTarget = coupon.getSendTarget();
|
List<Long> userIdList = new ArrayList<>();
|
Long shopId = null;
|
if(coupon.getCouponFrom()==2 && sendTarget==3){
|
shopId = coupon.getShopId();
|
}
|
if(sendTarget >= 2 && sendTarget <= 4){
|
userIdList = memberService.listIdBySendType(sendTarget,shopId);
|
}else if(sendTarget == 5){
|
//关联类型1.用户管理筛选2.活动管理筛选
|
if(coupon.getRelationType()==2){
|
Integer relationActivityType = coupon.getRelationActivityType();
|
//关联活动类型1秒杀活动
|
switch(relationActivityType){
|
case 1:
|
userIdList = remoteActivityService.listUserIdByActivityId(coupon.getRelationActivityId()).getData();
|
break;
|
default:
|
break;
|
}
|
}else if(coupon.getRelationType()==1){
|
userIdList = relUserIdList;
|
}
|
}
|
if(userIdList!=null&&!userIdList.isEmpty()){
|
List<MemberCoupon> memberCouponList = new ArrayList<>();
|
MemberCoupon memberCoupon;
|
Integer sendTotal = 0;
|
Integer sendPerson = 0;
|
String memberCouponId;
|
Integer sendUserTotal;
|
for(Long userId : userIdList){
|
if(coupon.getCouponFrom()==2){
|
for(int i=0;i<coupon.getLimitNumber();i++){
|
memberCouponId = IdUtils.simpleUUID();
|
memberCoupon = new MemberCoupon();
|
memberCoupon.setId(memberCouponId);
|
memberCoupon.setDelFlag(0);
|
memberCoupon.setCouponId(coupon.getCouponId());
|
memberCoupon.setUserId(userId);
|
memberCoupon.setShopId(coupon.getShopId());
|
memberCoupon.setCouponType(coupon.getCouponType());
|
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());
|
memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
|
memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
|
memberCoupon.setUseScope(coupon.getUseScope());
|
memberCoupon.setValidTimeType(coupon.getValidTimeType());
|
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.领取之日起
|
if(coupon.getValidTimeType()==1){
|
memberCoupon.setDeadlineTime(coupon.getValidEndTime());
|
}else if(coupon.getValidTimeType()==2){
|
memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
|
}
|
memberCouponList.add(memberCoupon);
|
sendTotal = sendTotal + 1;
|
if(coupon.getSendType()==1){
|
sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
|
if(sendUserTotal!=null&&sendUserTotal>0){
|
}else{
|
sendPerson = sendPerson + 1;
|
}
|
}
|
memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
|
}
|
}else{
|
memberCouponId = IdUtils.simpleUUID();
|
memberCoupon = new MemberCoupon();
|
memberCoupon.setId(memberCouponId);
|
memberCoupon.setDelFlag(0);
|
memberCoupon.setCouponId(coupon.getCouponId());
|
memberCoupon.setUserId(userId);
|
//memberCoupon.setShopId(coupon.getShopId());
|
memberCoupon.setCouponType(coupon.getCouponType());
|
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());
|
memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
|
memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
|
memberCoupon.setUseScope(coupon.getUseScope());
|
memberCoupon.setValidTimeType(coupon.getValidTimeType());
|
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.领取之日起
|
if(coupon.getValidTimeType()==1){
|
memberCoupon.setDeadlineTime(coupon.getValidEndTime());
|
}else if(coupon.getValidTimeType()==2){
|
memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
|
}
|
memberCouponList.add(memberCoupon);
|
sendTotal = sendTotal + 1;
|
if(coupon.getSendType()==1){
|
sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
|
if(sendUserTotal!=null&&sendUserTotal>0){
|
}else{
|
sendPerson = sendPerson + 1;
|
}
|
}
|
memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
|
}
|
}
|
memberCouponService.saveBatch(memberCouponList);
|
//处理优惠券统计
|
if(sendTotal>0){
|
couponMapper.updateCouponTotal(coupon.getCouponId(),sendTotal,sendPerson);
|
}
|
}
|
}
|
|
|
private void sendCouponNow(Coupon coupon, List<Long> relUserIdList){
|
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
|
Date nowTime = new Date();
|
Integer sendTarget = coupon.getSendTarget();
|
List<Long> userIdList = new ArrayList<>();
|
Long shopId = null;
|
if(coupon.getCouponFrom()==2 && sendTarget==3){
|
shopId = coupon.getShopId();
|
}
|
if(sendTarget >= 2 && sendTarget <= 4){
|
userIdList = memberService.listIdBySendType(sendTarget,shopId);
|
}else if(sendTarget == 5){
|
//关联类型1.用户管理筛选2.活动管理筛选
|
if(coupon.getRelationType()==2){
|
Integer relationActivityType = coupon.getRelationActivityType();
|
//关联活动类型1秒杀活动
|
switch(relationActivityType){
|
case 1:
|
userIdList = remoteActivityService.listUserIdByActivityId(coupon.getRelationActivityId()).getData();
|
break;
|
default:
|
break;
|
}
|
}else if(coupon.getRelationType()==1){
|
userIdList = relUserIdList;
|
}
|
}
|
if(relUserIdList!=null&&!relUserIdList.isEmpty()){
|
List<MemberCoupon> memberCouponList = new ArrayList<>();
|
MemberCoupon memberCoupon;
|
Integer sendTotal = 0;
|
Integer sendPerson = 0;
|
String memberCouponId;
|
Integer sendUserTotal;
|
for(Long userId : userIdList){
|
memberCouponId = IdUtils.simpleUUID();
|
memberCoupon = new MemberCoupon();
|
memberCoupon.setId(memberCouponId);
|
memberCoupon.setDelFlag(0);
|
memberCoupon.setCouponId(coupon.getCouponId());
|
memberCoupon.setUserId(userId);
|
if(coupon.getCouponFrom()==2){
|
memberCoupon.setShopId(coupon.getShopId());
|
}
|
memberCoupon.setCouponType(coupon.getCouponType());
|
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());
|
memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
|
memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
|
memberCoupon.setUseScope(coupon.getUseScope());
|
memberCoupon.setValidTimeType(coupon.getValidTimeType());
|
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.领取之日起
|
if(coupon.getValidTimeType()==1){
|
memberCoupon.setDeadlineTime(coupon.getValidEndTime());
|
}else if(coupon.getValidTimeType()==2){
|
memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
|
}
|
memberCouponList.add(memberCoupon);
|
sendTotal = sendTotal + 1;
|
if(coupon.getSendType()==1){
|
sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
|
if(sendUserTotal!=null&&sendUserTotal>0){
|
}else{
|
sendPerson = sendPerson + 1;
|
}
|
}
|
memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
|
}
|
memberCouponService.saveBatch(memberCouponList);
|
//处理优惠券统计
|
if(sendTotal>0){
|
couponMapper.updateCouponTotal(coupon.getCouponId(),sendTotal,sendPerson);
|
}
|
}
|
}
|
|
/**
|
* @description 平台删除优惠券
|
* @author jqs
|
* @date 2023/6/13 18:50
|
* @param mgtBaseGetDto
|
* @return void
|
*/
|
@Override
|
public void deleteMgtCoupon(MgtBaseGetDto mgtBaseGetDto){
|
Coupon coupon = this.getById(mgtBaseGetDto.getId());
|
CouponTotal couponTotal = couponTotalService.getById(mgtBaseGetDto.getId());
|
if(couponTotal.getSendCount()!=null&&couponTotal.getSendCount()>0){
|
throw new ServiceException(AppErrorConstant.COUPON_SENT_DEL);
|
}
|
coupon.setCouponStatus(-1);
|
coupon.setDelFlag(1);
|
coupon.setUpdateUserId(mgtBaseGetDto.getUserId());
|
coupon.setUpdateTime(new Date());
|
this.saveOrUpdate(coupon);
|
}
|
|
/**
|
* @description 定时发送优惠券
|
* @author jqs
|
* @date 2023/6/14 9:40
|
* @param
|
* @return void
|
*/
|
@Override
|
public void timingSendCoupon(){
|
//获取1小时内需要发送的优惠券
|
LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(Coupon::getDelFlag,0);
|
queryWrapper.eq(Coupon::getCouponStatus,1);
|
queryWrapper.eq(Coupon::getSendTimeType,2);
|
queryWrapper.eq(Coupon::getAuditStatus,2);
|
queryWrapper.eq(Coupon::getSendFlag,0);
|
Date checkTime = DateUtils.addMinutes(new Date(),61);
|
queryWrapper.le(Coupon::getSendTime, checkTime);
|
List<Coupon> couponList = couponMapper.selectList(queryWrapper);
|
if(couponList!=null&&!couponList.isEmpty()){
|
for(Coupon coupon : couponList) {
|
String couponId = coupon.getCouponId();
|
Date sendTime = coupon.getSendTime();
|
long currentTimeMillis = System.currentTimeMillis();
|
long timeDifference = currentTimeMillis - sendTime.getTime();
|
DelayTask delayTask = remoteConfigService.getDelayTask(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode()+"-"+couponId).getData();
|
if(delayTask==null){
|
//创建延时任务控制优惠券定时发放
|
redisService.setCacheObject(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode()+"-"+couponId,sendTime,timeDifference, TimeUnit.MILLISECONDS);
|
delayTask = new DelayTask();
|
delayTask.setDelFlag(0);
|
delayTask.setCreateTime(new Date());
|
delayTask.setEndTime(sendTime);
|
delayTask.setRedisKey(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode()+"-"+couponId);
|
remoteConfigService.addDelayTask(delayTask);
|
}
|
}
|
}
|
}
|
|
/**
|
* @description 定时发送优惠券
|
* @author jqs
|
* @date 2023/7/12 12:01
|
* @param couponId
|
* @return void
|
*/
|
@Override
|
public void autoTimeSendCoupon(String couponId){
|
List<CouponRelUser> couponRelUserList;
|
List<Long> userIdList = new ArrayList<>();
|
Coupon coupon = this.getById(couponId);
|
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()
|
.map(CouponRelUser::getUserId)
|
.collect(Collectors.toList());
|
}else{
|
userIdList = new ArrayList<>();
|
}
|
}
|
//发送优惠券
|
sendCouponNow(coupon, userIdList);
|
}
|
|
/**
|
* @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 = "";
|
HashSet<Long> shopIdSet = new HashSet<>();
|
for(MgtCouponAuditPageVo mgtCouponAuditPageVo : mgtCouponAuditPageVoList){
|
//处理有效期
|
validTimeType = mgtCouponAuditPageVo.getValidTimeType();
|
if(validTimeType==1){
|
validStartTime = mgtCouponAuditPageVo.getValidStartTime();
|
validEndTime = mgtCouponAuditPageVo.getValidEndTime();
|
validTime = DateUtils.parseDateToStr("yyyy-MM-dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy-MM-dd",validEndTime);
|
}else if(validTimeType==2){
|
validDay = mgtCouponAuditPageVo.getValidDay();
|
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;
|
}
|
|
/**
|
* @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());
|
mgtCouponGoodsListVo.setGoodsType(goods.getGoodsType());
|
//商品类型1周期2服务3体验4单品
|
switch (goods.getGoodsType()){
|
case 1:
|
mgtCouponGoodsListVo.setGoodsTypeName("周期");
|
break;
|
case 2:
|
mgtCouponGoodsListVo.setGoodsTypeName("服务");
|
break;
|
case 3:
|
mgtCouponGoodsListVo.setGoodsTypeName("体验");
|
break;
|
case 4:
|
mgtCouponGoodsListVo.setGoodsTypeName("单品");
|
break;
|
default:
|
break;
|
}
|
mgtCouponGoodsListVo.setSalesPrice(goods.getSalesPrice());
|
relGoodsList.add(mgtCouponGoodsListVo);
|
}
|
mgtCouponAuditGetVo.setRelGoodsList(relGoodsList);
|
}
|
}
|
}
|
//判断优惠券是否指定发放用户
|
if(coupon.getSendTarget()==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.getAuditStatus()!=1){
|
throw new ServiceException(AppErrorConstant.COUPON_AUDIT_DOUBLE);
|
}
|
coupon.setAuditStatus(mgtCouponAuditDto.getAuditStatus());
|
coupon.setAuditReason(mgtCouponAuditDto.getAuditReason());
|
coupon.setUpdateTime(new Date());
|
coupon.setUpdateUserId(mgtCouponAuditDto.getUserId());
|
//审核通过后判断是否立即发放
|
if(coupon.getAuditStatus()==2&&coupon.getSendType()==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);
|
coupon.setSendFlag(1);
|
}
|
this.saveOrUpdate(coupon);
|
}
|
|
/**
|
* @description 平台获取优惠券列表
|
* @author jqs
|
* @date 2023/6/30 16:53
|
* @param page
|
* @param merPageDto
|
* @return List<MerCouponPageVo>
|
*/
|
@Override
|
public List<MerCouponPageVo> pagePlatformMerCoupon(Page page, MerPageDto merPageDto){
|
List<MerCouponPageVo> couponPageVoList = couponMapper.pagePlatformMerCoupon(page, merPageDto);
|
//处理使用限制和有效期
|
if(couponPageVoList!=null&&!couponPageVoList.isEmpty()){
|
Integer couponType;
|
Integer validTimeType;
|
Date validStartTime;
|
Date validEndTime;
|
Integer validDay;
|
String validTime = "";
|
BigDecimal moneyThreshold;
|
BigDecimal discountMoney;
|
BigDecimal discountPercent;
|
String useLimit = "";
|
for(MerCouponPageVo merCouponPageVo : couponPageVoList){
|
//处理使用限制
|
couponType = merCouponPageVo.getCouponType();
|
switch (couponType){
|
case 1:
|
moneyThreshold = merCouponPageVo.getMoneyThreshold();
|
discountMoney = merCouponPageVo.getDiscountMoney();
|
useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
|
break;
|
case 2:
|
break;
|
case 3:
|
break;
|
case 4:
|
break;
|
default:
|
break;
|
}
|
merCouponPageVo.setUseLimit(useLimit);
|
//处理有效期
|
validTimeType = merCouponPageVo.getValidTimeType();
|
if(validTimeType==1){
|
validStartTime = merCouponPageVo.getValidStartTime();
|
validEndTime = merCouponPageVo.getValidEndTime();
|
validTime = DateUtils.parseDateToStr("yyyy.MM.dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy.MM.dd",validEndTime);
|
}else if(validTimeType==2){
|
validDay = merCouponPageVo.getValidDay();
|
validTime = "领取之日起" + validDay.toString() + "天";
|
}
|
merCouponPageVo.setValidTime(validTime);
|
merCouponPageVo.setCouponCode("https://hongruitang.oss-cn-beijing.aliyuncs.com/2023/8/3/couponCode.jpg");
|
}
|
}
|
return couponPageVoList;
|
}
|
|
/**
|
* @description 获取商户优惠券列表
|
* @author jqs
|
* @date 2023/6/30 16:53
|
* @param page
|
* @param merPageDto
|
* @return List<MerCouponPageVo>
|
*/
|
@Override
|
public List<MerCouponPageVo> pageShopMerCoupon(Page page, MerCouponPageDto merPageDto){
|
List<MerCouponPageVo> couponPageVoList = couponMapper.pageShopMerCoupon(page, merPageDto);
|
//处理使用限制和有效期
|
if(couponPageVoList!=null&&!couponPageVoList.isEmpty()){
|
Integer couponType;
|
Integer validTimeType;
|
Date validStartTime;
|
Date validEndTime;
|
Integer validDay;
|
String validTime = "";
|
BigDecimal moneyThreshold;
|
BigDecimal discountMoney;
|
BigDecimal discountPercent;
|
String useLimit = "";
|
for(MerCouponPageVo merCouponPageVo : couponPageVoList){
|
//处理使用限制
|
couponType = merCouponPageVo.getCouponType();
|
switch (couponType){
|
case 1:
|
moneyThreshold = merCouponPageVo.getMoneyThreshold();
|
discountMoney = merCouponPageVo.getDiscountMoney();
|
useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
|
break;
|
case 2:
|
break;
|
case 3:
|
break;
|
case 4:
|
break;
|
default:
|
break;
|
}
|
merCouponPageVo.setUseLimit(useLimit);
|
//处理有效期
|
validTimeType = merCouponPageVo.getValidTimeType();
|
if(validTimeType==1){
|
validStartTime = merCouponPageVo.getValidStartTime();
|
validEndTime = merCouponPageVo.getValidEndTime();
|
validTime = DateUtils.parseDateToStr("yyyy.MM.dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy.MM.dd",validEndTime);
|
}else if(validTimeType==2){
|
validDay = merCouponPageVo.getValidDay();
|
validTime = "领取之日起" + validDay.toString() + "天";
|
}
|
merCouponPageVo.setValidTime(validTime);
|
}
|
}
|
return couponPageVoList;
|
}
|
|
|
/**
|
* @description 商户编辑优惠券
|
* @author jqs
|
* @date 2023/7/3 9:21
|
* @param merCouponEditDto
|
* @return void
|
*/
|
@Override
|
public void editMerCoupon(MerCouponEditDto merCouponEditDto){
|
//编辑优惠券
|
Coupon coupon;
|
CouponTotal couponTotal;
|
if(StringUtils.isNotBlank(merCouponEditDto.getCouponId())){
|
coupon = this.getById(merCouponEditDto.getCouponId());
|
if(coupon.getAuditStatus()!=3){
|
throw new ServiceException(AppErrorConstant.COUPON_AUDIT_EDIT);
|
}
|
couponRelUserService.deleteCouponRelByCouponId(coupon.getCouponId());
|
couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId());
|
coupon.setCouponStatus(1);
|
}else{
|
coupon = new Coupon();
|
String couponId = IdUtils.simpleUUID();
|
coupon.setCouponId(couponId);
|
coupon.setDelFlag(0);
|
coupon.setShopId(merCouponEditDto.getShopId());
|
coupon.setCouponStatus(1);
|
coupon.setCreateTime(new Date());
|
coupon.setCreateUserId(merCouponEditDto.getUserId());
|
coupon.setCouponFrom(2);
|
coupon.setSendFlag(0);
|
coupon.setLimitNumber(merCouponEditDto.getLimitNumber());
|
//创建优惠券统计
|
couponTotal = new CouponTotal();
|
couponTotal.setCouponId(couponId);
|
couponTotal.setSendCount(0);
|
couponTotal.setSendUserCount(0);
|
couponTotalService.save(couponTotal);
|
}
|
//优惠券赋值
|
coupon.setAuditStatus(1);
|
coupon.setCouponType(merCouponEditDto.getCouponType());
|
coupon.setCouponName(merCouponEditDto.getCouponName());
|
coupon.setSendType(merCouponEditDto.getSendType());
|
coupon.setSendTarget(merCouponEditDto.getSendTarget());
|
//商户端默认立即发放
|
coupon.setSendTimeType(1);
|
coupon.setSendTime(merCouponEditDto.getSendTime());
|
coupon.setMoneyThreshold(merCouponEditDto.getMoneyThreshold());
|
coupon.setDiscountMoney(merCouponEditDto.getDiscountMoney());
|
coupon.setDiscountPercent(merCouponEditDto.getDiscountPercent());
|
coupon.setUseScope(merCouponEditDto.getUseScope());
|
coupon.setValidTimeType(merCouponEditDto.getValidTimeType());
|
coupon.setValidStartTime(merCouponEditDto.getValidStartTime());
|
coupon.setValidEndTime(merCouponEditDto.getValidEndTime());
|
coupon.setLimitNumber(merCouponEditDto.getLimitNumber());
|
coupon.setValidDay(merCouponEditDto.getValidDay());
|
coupon.setUpdateTime(new Date());
|
coupon.setUpdateUserId(merCouponEditDto.getUserId());
|
coupon.setRelationType(1);
|
coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster());
|
//判断是否指定商品
|
if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){
|
List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList();
|
List<CouponRelGoods> couponRelGoodsList = relGoodsIdList.stream()
|
.map(str -> {
|
CouponRelGoods couponRelGoods = new CouponRelGoods();
|
couponRelGoods.setDelFlag(0);
|
couponRelGoods.setCouponId(coupon.getCouponId());
|
couponRelGoods.setGoodsId(str);
|
return couponRelGoods;
|
})
|
.collect(Collectors.toList());
|
couponRelGoodsService.saveBatch(couponRelGoodsList);
|
String relGoodsIds = relGoodsIdList.stream().collect(Collectors.joining(","));
|
coupon.setRelGoodsIds(relGoodsIds);
|
}
|
//判断是否指定用户
|
List<Long> relUserIdList = null;
|
if(coupon.getSendTarget()==5&&coupon.getRelationType()==1&&!merCouponEditDto.getRelUserIdList().isEmpty()){
|
relUserIdList = merCouponEditDto.getRelUserIdList();
|
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);
|
}
|
|
/**
|
* @description 商户删除优惠券
|
* @author jqs
|
* @date 2023/7/3 15:04
|
* @param merBaseGetDto
|
* @return void
|
*/
|
@Override
|
public void deleteMerCoupon(MerBaseGetDto merBaseGetDto){
|
Coupon coupon = this.getById(merBaseGetDto.getId());
|
coupon.setCouponStatus(-1);
|
coupon.setDelFlag(1);
|
coupon.setUpdateUserId(merBaseGetDto.getUserId());
|
coupon.setUpdateTime(new Date());
|
this.saveOrUpdate(coupon);
|
}
|
|
/**
|
* @description 发送用户优惠券礼物
|
* @author jqs
|
* @date 2023/7/7 19:54
|
* @param giftSendDtoList
|
* @return void
|
*/
|
@Override
|
public void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList){
|
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;
|
for(BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList){
|
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();
|
memberCoupon.setId(memberCouponId);
|
memberCoupon.setDelFlag(0);
|
memberCoupon.setCouponId(couponId);
|
memberCoupon.setUserId(userId);
|
memberCoupon.setShopId(shopId);
|
memberCoupon.setCouponType(coupon.getCouponType());
|
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());
|
memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
|
memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
|
memberCoupon.setUseScope(coupon.getUseScope());
|
memberCoupon.setValidTimeType(coupon.getValidTimeType());
|
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){
|
memberCoupon.setDeadlineTime(coupon.getValidEndTime());
|
}else if(coupon.getValidTimeType()==2){
|
memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay()));
|
}
|
memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
|
memberCouponList.add(memberCoupon);
|
}
|
memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber());
|
}
|
memberCouponService.saveBatch(memberCouponList);
|
}
|
|
/**
|
* @description 用户分页获取可领取优惠券列表
|
* @author jqs
|
* @date 2023/7/9 16:16
|
* @param page
|
* @param appPageDto
|
* @return List<AppUnGetCouponPageVo>
|
*/
|
@Override
|
public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Member member){
|
//获取当前已领取完优惠券
|
List<String> unGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId());
|
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("全场通用");
|
}
|
}
|
appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
|
}
|
|
}
|
return getAbleCouponPageVoList;
|
}
|
|
|
|
|
/**
|
* @description 用户领取优惠券
|
* @author jqs
|
* @date 2023/7/11 15:04
|
* @param couponId
|
* @param shopId
|
* @return void
|
*/
|
@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);
|
}
|
MemberCoupon memberCoupon = new MemberCoupon();
|
String memberCouponId = IdUtils.simpleUUID();
|
memberCoupon.setId(memberCouponId);
|
memberCoupon.setDelFlag(0);
|
memberCoupon.setCouponId(couponId);
|
memberCoupon.setUserId(userId);
|
if(coupon.getCouponFrom()==2){
|
memberCoupon.setShopId(shopId);
|
}
|
memberCoupon.setCouponType(coupon.getCouponType());
|
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());
|
memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
|
memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
|
memberCoupon.setUseScope(coupon.getUseScope());
|
memberCoupon.setValidTimeType(coupon.getValidTimeType());
|
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){
|
memberCoupon.setDeadlineTime(coupon.getValidEndTime());
|
}else if(coupon.getValidTimeType()==2){
|
memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay()));
|
}
|
memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
|
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;
|
}
|
}
|