Browse Source

创建营销活动

cup 2 years ago
parent
commit
99b73e88a1

+ 41 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/MarketingMgrController.java

@@ -0,0 +1,41 @@
+package com.qs.mp.web.controller.api.admin;
+
+import com.qs.mp.admin.domain.param.MarketingCreateParam;
+import com.qs.mp.admin.service.IMarketingService;
+import com.qs.mp.common.annotation.Log;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 营销活动管理相关接口
+ * @author Cup
+ * @date 2022/5/16
+ */
+@RestController
+@RequestMapping("/api/v1/mp/admin/marketing")
+@Api(tags = "营销活动管理相关接口")
+public class MarketingMgrController {
+
+    @Autowired
+    private IMarketingService marketingService;
+
+    @Log(title = "营销活动新增", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "营销活动新增")
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:marketing:add')")
+    public AjaxResult create(@Validated @RequestBody MarketingCreateParam marketingCreateParam) {
+
+        marketingService.createMarketing(marketingCreateParam);
+        return AjaxResult.success();
+    }
+
+}

+ 5 - 6
mp-service/src/main/java/com/qs/mp/admin/domain/MarketingAwards.java

@@ -64,6 +64,11 @@ public class MarketingAwards implements Serializable {
     @TableField("quantity")
     private Integer quantity;
 
+
+    @ApiModelProperty("内定数量")
+    @TableField("inside_num")
+    private Integer insideNum;
+
     /**
      * 奖项描述
      */
@@ -71,12 +76,6 @@ public class MarketingAwards implements Serializable {
     @TableField("memo")
     private String memo;
 
-    /**
-     * 中奖率
-     */
-    @ApiModelProperty("中奖率")
-    @TableField("hit_rate")
-    private BigDecimal hitRate;
 
     /**
      * 创建时间

+ 5 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/MarketingAwardsPrize.java

@@ -1,5 +1,7 @@
 package com.qs.mp.admin.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 
@@ -12,6 +14,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -73,8 +76,9 @@ public class MarketingAwardsPrize implements Serializable {
      * 奖品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包
      */
     @ApiModelProperty("奖品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
     @TableField("prize_type")
-    private String prizeType;
+    private TicketPrizeTypeEnum prizeType;
 
     /**
      * 奖品数

+ 41 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/MarketingAwardsParam.java

@@ -0,0 +1,41 @@
+package com.qs.mp.admin.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel(value= "营销活动奖级入参类")
+@Data
+public class MarketingAwardsParam {
+
+    @ApiModelProperty("奖项ID")
+    private Long id;
+
+    @NotEmpty(message = "奖品列表不能为空")
+    @ApiModelProperty(value = "奖品列表",required=true)
+    List<MarketingAwardsPrizeParam> prizeList;
+
+    @NotNull(message = "奖级名称不能为空")
+    @ApiModelProperty(value = "奖级名称",required=true)
+    private String name;
+
+    @NotNull(message = "奖级数量不能为空")
+    @ApiModelProperty(value = "奖级数量",required=true)
+    private Integer quantity;
+
+    @NotNull(message = "内定数量不能为空")
+    @ApiModelProperty(value = "内定数量",required = true)
+    private Integer insideNum;
+
+    @NotNull(message = "奖级顺序不能为空")
+    @ApiModelProperty(value = "奖级顺序",required=true)
+    private Integer sort;
+}

+ 35 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/MarketingAwardsPrizeParam.java

@@ -0,0 +1,35 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动奖级对应奖品入参类")
+@Data
+public class MarketingAwardsPrizeParam {
+
+    @ApiModelProperty("奖品id")
+    private Long id;
+
+    @NotNull(message = "奖品关联ID不能为空")
+    @ApiModelProperty(value = "奖品关联ID",required=true)
+    private String refId;
+
+    @NotNull(message = "奖品类型不能为空")
+    @ApiModelProperty(value = "奖品类型",required=true)
+    private TicketPrizeTypeEnum prizeType;
+
+    @NotNull(message = "奖品数量不能为空")
+    @ApiModelProperty(value = "奖品数量",required=true)
+    private Integer quantity;
+
+    @ApiModelProperty(value = "奖品价值",required=true)
+    private Integer value;
+}

+ 49 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/MarketingCreateParam.java

@@ -0,0 +1,49 @@
+package com.qs.mp.admin.domain.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 营销活动创建入参类
+ *
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动创建入参类")
+@Data
+public class MarketingCreateParam {
+
+    @ApiModelProperty(value = "活动标题", required = true)
+    @NotBlank(message = "活动标题不能为空")
+    private String title;
+
+    @ApiModelProperty(value = "活动主图", required = true)
+    @NotBlank(message = "活动主图不能为空")
+    private String picUrl;
+
+    @ApiModelProperty(value = "初始人数", required = true)
+    private Integer fakeNum;
+
+    @ApiModelProperty(value = "开始时间", required = true)
+    @NotNull(message = "开始时间不能为空")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间", required = true)
+    @NotNull(message = "结束时间不能为空")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动描述",required = false)
+    private String description;
+
+    @NotEmpty(message = "奖级列表不能为空")
+    @ApiModelProperty(value = "奖级列表", required = true)
+    List<MarketingAwardsParam> awardsList;
+}

+ 6 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IMarketingService.java

@@ -2,6 +2,7 @@ package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.Marketing;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.param.MarketingCreateParam;
 
 /**
  * <p>
@@ -13,4 +14,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IMarketingService extends IService<Marketing> {
 
+    /**
+     * 创建营销活动
+     * @param marketingCreateParam
+     */
+    void createMarketing(MarketingCreateParam marketingCreateParam);
 }

+ 93 - 2
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -1,10 +1,21 @@
 package com.qs.mp.admin.service.impl;
 
-import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.*;
+import com.qs.mp.admin.domain.param.*;
 import com.qs.mp.admin.mapper.MarketingMapper;
-import com.qs.mp.admin.service.IMarketingService;
+import com.qs.mp.admin.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.utils.bean.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +28,84 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing> implements IMarketingService {
 
+    @Autowired
+    private IGoodsService goodsService;
+
+    @Autowired
+    private ICouponService couponService;
+
+    @Autowired
+    private ICouponPkgService couponPkgService;
+
+    @Autowired
+    private IMarketingAwardsService marketingAwardsService;
+
+    @Autowired
+    private IMarketingAwardsPrizeService marketingAwardsPrizeService;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void createMarketing(MarketingCreateParam marketingCreateParam) {
+        // 保存营销活动
+        Marketing marketing = new Marketing();
+        BeanUtils.copyProperties(marketingCreateParam, marketing);
+        this.save(marketing);
+
+        // 创建奖级
+        List<MarketingAwardsPrize> marketingAwardsPrizeList = new ArrayList<>();
+        for (int i = 0; i < marketingCreateParam.getAwardsList().size(); i ++) {
+            MarketingAwardsParam awardsParam = marketingCreateParam.getAwardsList().get(i);
+
+            if (awardsParam.getInsideNum() > awardsParam.getQuantity()) {
+                throw new ServiceException("内定数量不能大于奖品数量");
+            }
+
+            MarketingAwards marketingAwards = new MarketingAwards();
+            BeanUtils.copyProperties(awardsParam, marketingAwards);
+            marketingAwards.setId(null);
+            // 设置活动id
+            marketingAwards.setMarketingId(marketing.getId());
+            marketingAwardsService.save(marketingAwards);
+
+            if (awardsParam.getPrizeList().size() > 1) {
+                throw new ServiceException("奖品目前暂时不能超过1个");
+            }
+
+            for (MarketingAwardsPrizeParam prizeParam : awardsParam.getPrizeList()) {
+                MarketingAwardsPrize awardsPrize = new MarketingAwardsPrize();
+                BeanUtils.copyProperties(prizeParam, awardsPrize);
+                awardsPrize.setId(null);
+                awardsPrize.setMarketingId(marketing.getId());
+                awardsPrize.setAwardsId(marketingAwards.getId());
+                if (null == awardsPrize.getQuantity() || 0 == awardsPrize.getQuantity()) {
+                    // 页面没设置奖品的具体数量,则默认为整个奖项的数量
+                    awardsPrize.setQuantity(marketingAwards.getQuantity());
+                }
+                if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
+                    Goods goods = goodsService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(goods.getTitle());
+                    awardsPrize.setPicUrl(goods.getPicUrl());
+                    awardsPrize.setValue(goods.getValue());
+                } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
+                    Coupon coupon = couponService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(coupon.getTitle());
+                    awardsPrize.setPicUrl(coupon.getPicUrl());
+                    awardsPrize.setValue(coupon.getDiscount());
+                } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
+                    CouponPkg couponPkg = couponPkgService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(couponPkg.getTitle());
+                    awardsPrize.setValue(couponPkg.getFacePrice());
+                    awardsPrize.setPicUrl(couponPkg.getPicUrl());
+                } else {
+                    awardsPrize.setTitle("盲豆");
+                    awardsPrize.setPicUrl("md.jpeg");
+                }
+                marketingAwardsPrizeList.add(awardsPrize);
+            }
+        }
+        marketingAwardsPrizeService.saveBatch(marketingAwardsPrizeList);
+    }
+
+
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/user/domain/MarketingHitPrize.java

@@ -30,7 +30,7 @@ public class MarketingHitPrize implements Serializable {
     /**
      * 主键
      */
-    @ApiModelProperty("主键")
+    @ApiModelProperty("中奖记录id")
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;