创建优惠券活动
This commit is contained in:
parent
16498a6850
commit
8924981556
@ -8,11 +8,12 @@ import lombok.Data;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 优惠券活动实体类
|
||||
*
|
||||
* @author Chopper
|
||||
* @author Bulbasaur
|
||||
* @date 2020-03-19 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@ -22,13 +23,15 @@ import javax.persistence.Table;
|
||||
@ApiModel(value = "优惠券活动实体类")
|
||||
public class CouponActivity extends BasePromotion {
|
||||
|
||||
@NotNull(message = "优惠券活动类型不能为空")
|
||||
@ApiModelProperty(value = "优惠券活动类型")
|
||||
private String couponActivityType;
|
||||
|
||||
@NotNull(message = "请选择活动范围")
|
||||
@ApiModelProperty(value = "活动范围", allowableValues = "ALL:全部会员,DESIGNATED:指定会员")
|
||||
private String activityScope;
|
||||
|
||||
@ApiModelProperty(value = "活动范围")
|
||||
@ApiModelProperty(value = "活动范围详情")
|
||||
private String activityScopeInfo;
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ import javax.persistence.Table;
|
||||
/**
|
||||
* 优惠券活动实体类
|
||||
*
|
||||
* @author Chopper
|
||||
* @author Bulbasaur
|
||||
* @date 2020-03-19 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
|
@ -0,0 +1,21 @@
|
||||
package cn.lili.modules.promotion.entity.dto;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动DTO
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/21 7:16 下午
|
||||
*/
|
||||
@Data
|
||||
public class CouponActivityDTO extends CouponActivity {
|
||||
|
||||
@ApiModelProperty(value = "优惠券列表")
|
||||
private List<CouponActivityItem> couponActivityItems;
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package cn.lili.modules.promotion.entity.enums;
|
||||
|
||||
/**
|
||||
* 优惠券活动范围枚举
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/20 6:05 下午
|
||||
*/
|
||||
public enum ActivityRangeEnum {
|
||||
|
||||
ALL("新人赠券"),
|
||||
DESIGNATED("精确发券");
|
||||
|
||||
private final String description;
|
||||
|
||||
ActivityRangeEnum(String str) {
|
||||
this.description = str;
|
||||
}
|
||||
|
||||
public String description() {
|
||||
return description;
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cn.lili.modules.promotion.entity.vos;
|
||||
|
||||
import cn.lili.common.utils.BeanUtil;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动VO
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/21 7:01 下午
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class CouponActivityVO extends CouponActivity {
|
||||
|
||||
@ApiModelProperty(value = "优惠券活动下的优惠券列表")
|
||||
private List<CouponActivityItem> couponActivityItems;
|
||||
|
||||
public CouponActivityVO(CouponActivity couponActivity, List<CouponActivityItem> couponActivityItems) {
|
||||
BeanUtil.copyProperties(couponActivity, this);
|
||||
this.couponActivityItems = couponActivityItems;
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package cn.lili.modules.promotion.mapper;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
* @date: 2021/5/20 6:11 下午
|
||||
*
|
||||
*/
|
||||
public interface CouponActivityItemMapper extends BaseMapper<CouponActivity> {
|
||||
public interface CouponActivityItemMapper extends BaseMapper<CouponActivityItem> {
|
||||
|
||||
|
||||
}
|
@ -3,6 +3,8 @@ package cn.lili.modules.promotion.service;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动-优惠券业务层
|
||||
*
|
||||
@ -10,4 +12,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
* @date: 2021/5/20 6:10 下午
|
||||
*/
|
||||
public interface CouponActivityItemService extends IService<CouponActivityItem> {
|
||||
|
||||
/**
|
||||
* 获取优惠券活动关联优惠券列表
|
||||
*
|
||||
* @param activityId 优惠券活动ID
|
||||
* @return 优惠券关联优惠券列表
|
||||
*/
|
||||
List<CouponActivityItem> getCouponActivityList(String activityId);
|
||||
}
|
||||
|
@ -1,8 +1,12 @@
|
||||
package cn.lili.modules.promotion.service;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dto.CouponActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponActivityVO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动业务层
|
||||
*
|
||||
@ -11,7 +15,41 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface CouponActivityService extends IService<CouponActivity> {
|
||||
|
||||
//创建优惠券活动--精准发券、新人赠券、会员等级赠券
|
||||
/**
|
||||
* 创建优惠券活动--精准发券、新人赠券
|
||||
* @param couponActivityDTO 优惠券活动DTO
|
||||
*/
|
||||
CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO);
|
||||
|
||||
/**
|
||||
* 修改优惠券活动--精准发券、新人赠券
|
||||
* @param couponActivityDTO 优惠券活动DTO
|
||||
*/
|
||||
CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO);
|
||||
|
||||
/**
|
||||
* 获取优惠券活动VO
|
||||
* 包含优惠券活动信息以及优惠券关联优惠券列表
|
||||
*
|
||||
* @param couponActivityId 优惠券活动ID
|
||||
* @return 优惠券VO
|
||||
*/
|
||||
CouponActivityVO getCouponActivityVO(String couponActivityId);
|
||||
|
||||
/**
|
||||
* 精准发券
|
||||
*
|
||||
* @param couponActivityId 优惠券活动ID
|
||||
*/
|
||||
void specify(String couponActivityId);
|
||||
|
||||
/**
|
||||
* 注册赠券
|
||||
*
|
||||
* @param couponActivityIds 优惠券活动ID
|
||||
* @param memberId
|
||||
*/
|
||||
void registered(List<String> couponActivityIds, String memberId);
|
||||
|
||||
//编辑优惠券活动
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import cn.lili.modules.promotion.mapper.CouponActivityItemMapper;
|
||||
import cn.lili.modules.promotion.service.CouponActivityItemService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动关联优惠券业务层实现
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/21 6:42 下午
|
||||
*/
|
||||
@Service
|
||||
public class CouponActivityItemServiceImpl extends ServiceImpl<CouponActivityItemMapper, CouponActivityItem> implements CouponActivityItemService {
|
||||
@Override
|
||||
public List<CouponActivityItem> getCouponActivityList(String activityId) {
|
||||
return this.list(this.lambdaQuery().eq(CouponActivityItem::getActivityId, activityId));
|
||||
}
|
||||
}
|
@ -1,9 +1,30 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.utils.DateUtil;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import cn.lili.modules.promotion.entity.dos.Coupon;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
||||
import cn.lili.modules.promotion.entity.dto.CouponActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponActivityVO;
|
||||
import cn.lili.modules.promotion.mapper.CouponActivityMapper;
|
||||
import cn.lili.modules.promotion.service.CouponActivityItemService;
|
||||
import cn.lili.modules.promotion.service.CouponActivityService;
|
||||
import cn.lili.modules.promotion.service.CouponService;
|
||||
import cn.lili.modules.promotion.service.MemberCouponService;
|
||||
import cn.lili.modules.promotion.tools.PromotionTools;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import groovy.util.logging.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 优惠券活动业务层实现
|
||||
@ -11,5 +32,168 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/20 6:10 下午
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class CouponActivityServiceImpl extends ServiceImpl<CouponActivityMapper, CouponActivity> implements CouponActivityService {
|
||||
|
||||
@Autowired
|
||||
private CouponService couponService;
|
||||
@Autowired
|
||||
private MemberCouponService memberCouponService;
|
||||
@Autowired
|
||||
private CouponActivityItemService couponActivityItemService;
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Override
|
||||
public CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO) {
|
||||
//检测优惠券活动是否可以添加
|
||||
this.checkParam(couponActivityDTO);
|
||||
//添加优惠券活动
|
||||
this.save(couponActivityDTO);
|
||||
//添加优惠券活动优惠券
|
||||
this.addCouponActivityItems(couponActivityDTO);
|
||||
//发送促销活动开始的延时任务
|
||||
return couponActivityDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO) {
|
||||
//检测优惠券活动是否可以修改
|
||||
this.checkParam(couponActivityDTO);
|
||||
//修改优惠券活动
|
||||
this.updateById(couponActivityDTO);
|
||||
//删除优惠券活动关联的优惠券
|
||||
couponActivityItemService.remove(new LambdaQueryWrapper<CouponActivityItem>()
|
||||
.eq(CouponActivityItem::getActivityId,couponActivityDTO.getId()));
|
||||
//重新添加优惠券活动关联优惠券
|
||||
this.addCouponActivityItems(couponActivityDTO);
|
||||
//更新促销活动的延时任务
|
||||
return couponActivityDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CouponActivityVO getCouponActivityVO(String couponActivityId) {
|
||||
CouponActivity couponActivity = this.getById(couponActivityId);
|
||||
CouponActivityVO couponActivityVO = new CouponActivityVO(couponActivity, couponActivityItemService.getCouponActivityList(couponActivityId));
|
||||
return couponActivityVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void specify(String couponActivityId) {
|
||||
//获取优惠券
|
||||
CouponActivity couponActivity = this.getById(couponActivityId);
|
||||
//获取活动优惠券发送范围
|
||||
List<Map<String, Object>> memberList = this.getMemberList(couponActivity);
|
||||
//优惠优惠券活动的优惠券列表
|
||||
List<CouponActivityItem> couponActivityItems = couponActivityItemService.getCouponActivityList(couponActivity.getId());
|
||||
//发送优惠券
|
||||
sendCoupon(memberList, couponActivityItems);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registered(List<String> couponActivityIds, String memberId) {
|
||||
for (String couponActivityId : couponActivityIds) {
|
||||
//获取优惠券
|
||||
CouponActivity couponActivity = this.getById(couponActivityId);
|
||||
//获取会员信息
|
||||
List<Map<String, Object>> memberList = new ArrayList<>();
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("id", memberId);
|
||||
map.put("nick_name", memberService.getById(memberId).getNickName());
|
||||
memberList.add(map);
|
||||
|
||||
//优惠优惠券活动的优惠券列表
|
||||
List<CouponActivityItem> couponActivityItems = couponActivityItemService.getCouponActivityList(couponActivity.getId());
|
||||
|
||||
//发送优惠券
|
||||
sendCoupon(memberList, couponActivityItems);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送优惠券
|
||||
*
|
||||
* @param memberList 用户列表
|
||||
* @param couponActivityItems 优惠券列表
|
||||
*/
|
||||
private void sendCoupon(List<Map<String, Object>> memberList, List<CouponActivityItem> couponActivityItems) {
|
||||
|
||||
for (CouponActivityItem couponActivityItem : couponActivityItems) {
|
||||
//获取优惠券
|
||||
Coupon coupon = couponService.getCouponDetailFromMongo(couponActivityItem.getCouponId());
|
||||
//判断优惠券是否存在
|
||||
if (coupon != null) {
|
||||
List<MemberCoupon> memberCouponList = new LinkedList<>();
|
||||
//循环会员列表,添加优惠券
|
||||
for (Map<String, Object> map : memberList) {
|
||||
MemberCoupon memberCoupon = new MemberCoupon(coupon);
|
||||
memberCoupon.setMemberId(map.get("id").toString());
|
||||
memberCoupon.setMemberName(map.get("nick_name").toString());
|
||||
memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name());
|
||||
memberCoupon.setIsPlatform(coupon.getStoreId().equals("platform"));
|
||||
//循环优惠券的领取数量
|
||||
for (int i = 1; i <= couponActivityItem.getNum(); i++) {
|
||||
memberCouponList.add(memberCoupon);
|
||||
}
|
||||
}
|
||||
//批量添加优惠券
|
||||
memberCouponService.saveBatch(memberCouponList);
|
||||
//添加优惠券已领取数量
|
||||
couponService.receiveCoupon(couponActivityItem.getCouponId(), memberCouponList.size() * couponActivityItem.getNum());
|
||||
} else {
|
||||
log.error("赠送优惠券失败,当前优惠券不存在:" + couponActivityItem.getCouponId());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测优惠券活动参数
|
||||
*
|
||||
* @param couponActivity 优惠券活动
|
||||
*/
|
||||
private void checkParam(CouponActivity couponActivity) {
|
||||
|
||||
//检测活动时间超过当前时间不能进行操作
|
||||
long nowTime = DateUtil.getDateline() * 1000;
|
||||
if (couponActivity.getStartTime().getTime() < nowTime && couponActivity.getEndTime().getTime() > nowTime) {
|
||||
throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作");
|
||||
}
|
||||
//活动时间需超过当前时间
|
||||
PromotionTools.checkPromotionTime(couponActivity.getStartTime().getTime(), couponActivity.getEndTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券的范围范围
|
||||
* 此方法用于精准发券
|
||||
*
|
||||
* @param couponActivity 优惠券活动
|
||||
* @return 获取优惠券的会员列表
|
||||
*/
|
||||
private List<Map<String, Object>> getMemberList(CouponActivity couponActivity) {
|
||||
//判断优惠券的发送范围,获取会员列表
|
||||
if (couponActivity.getActivityScope().equals("ALL")) {
|
||||
return memberService.listMaps(new QueryWrapper<Member>()
|
||||
.select("id")
|
||||
.select("nick_name"));
|
||||
} else {
|
||||
return memberService.listMaps(new QueryWrapper<Member>()
|
||||
.select("id")
|
||||
.select("nick_name")
|
||||
.in("id", couponActivity.getActivityScopeInfo()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加优惠券活动关联优惠券
|
||||
* @param couponActivityDTO 优惠券活动DTO
|
||||
*/
|
||||
private void addCouponActivityItems(CouponActivityDTO couponActivityDTO){
|
||||
//创建优惠券活动子列表
|
||||
for(CouponActivityItem couponActivityItem:couponActivityDTO.getCouponActivityItems()){
|
||||
couponActivityItem.setActivityId(couponActivityDTO.getId());
|
||||
}
|
||||
couponActivityItemService.saveBatch(couponActivityDTO.getCouponActivityItems());
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
package cn.lili.controller.promotion;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.utils.PageUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dto.CouponActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponActivityVO;
|
||||
import cn.lili.modules.promotion.service.CouponActivityService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 优惠券活动
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/21 7:11 下午
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "管理端,优惠券接口")
|
||||
@RequestMapping("/manager/promotion/coupon")
|
||||
public class CouponActivityManagerController {
|
||||
|
||||
@Autowired
|
||||
private CouponActivityService couponActivityService;
|
||||
|
||||
@ApiOperation(value = "获取优惠券活动分页")
|
||||
@GetMapping
|
||||
public ResultMessage<IPage<CouponActivity>> getCouponActivityPage(PageVO page) {
|
||||
return ResultUtil.data(couponActivityService.page(PageUtil.initPage(page)));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取优惠券活动")
|
||||
@ApiImplicitParam(name = "couponActivityId", value = "优惠券活动ID", required = true, paramType = "path")
|
||||
@GetMapping("/getCouponActivity/{couponActivityId}")
|
||||
public ResultMessage<CouponActivityVO> getCouponActivity(@PathVariable String couponActivityId) {
|
||||
return ResultUtil.data(couponActivityService.getCouponActivityVO(couponActivityId));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "添加优惠券活动")
|
||||
@PostMapping("/add")
|
||||
public ResultMessage<CouponActivity> addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) {
|
||||
return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user