Browse Source

vip定制课

zouxuan 7 months ago
parent
commit
797806da5f

+ 1 - 16
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java

@@ -23,13 +23,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-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.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
@@ -65,9 +59,6 @@ public class ActivityPlanController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
-    /**
-     * 新增或修改
-     */
     @PostMapping("/submit")
     @ApiOperation(value = "新增或修改", notes = "传入activityPlan")
     @PreAuthorize("@pcs.hasPermissions('activityPlan/submit')")
@@ -78,12 +69,6 @@ public class ActivityPlanController extends BaseController {
         }
         activityPlan.setUserId(user.getId());
 
-        // 分享活动奖品校验
-        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()
-                && CollectionUtils.isEmpty(activityPlan.getRewardItems())) {
-            return failed("分享活动奖品信息为空");
-        }
-
         try {
             return HttpResponseResult.succeed(activityPlanService.submit(activityPlan));
         } catch (BizException e) {

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityTypeEnum.java

@@ -14,6 +14,7 @@ public enum ActivityTypeEnum implements BaseEnum<String, ActivityTypeEnum> {
     EVALUATION("评测活动"),
     STANDARD_GIFT("达标赠送"),
     SHARE("活动分享"),
+    MEMBER("会员购买"),
     ;
 
     @EnumValue

+ 2 - 33
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
-import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanStandard;
@@ -25,6 +24,7 @@ import java.util.Optional;
  * @Data: 2022-08-04 10:19:49
  */
 @ApiModel(value = "ActivityPlanDto对象", description = "活动计划表数据传输对象")
+@Data
 public class ActivityPlanDto extends ActivityPlan {
 	private static final long serialVersionUID = 1L;
 
@@ -36,41 +36,10 @@ public class ActivityPlanDto extends ActivityPlan {
 
 	@ApiModelProperty(value = "活动计划-达标赠送活动拓展")
 	private ActivityPlanStandard planStandard;
+
 	@ApiModelProperty(value = "分享活动-奖品信息")
 	private List<RewardItem> rewardItems;
 
-	public Long getUserId() {
-		return userId;
-	}
-
-	public void setUserId(Long userId) {
-		this.userId = userId;
-	}
-
-	public ActivityPlanEvaluation getPlanEvaluation() {
-		return planEvaluation;
-	}
-
-	public void setPlanEvaluation(ActivityPlanEvaluation planEvaluation) {
-		this.planEvaluation = planEvaluation;
-	}
-
-	public ActivityPlanStandard getPlanStandard() {
-		return planStandard;
-	}
-
-	public void setPlanStandard(ActivityPlanStandard planStandard) {
-		this.planStandard = planStandard;
-	}
-
-	public List<RewardItem> getRewardItems() {
-		return Optional.ofNullable(rewardItems).orElse(Lists.newArrayList());
-	}
-
-	public void setRewardItems(List<RewardItem> rewardItems) {
-		this.rewardItems = rewardItems;
-	}
-
 	/**
 	 * 分享活动-奖品信息
 	 */

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java

@@ -22,7 +22,7 @@ public class OrderSearch extends QueryInfo{
 	@ApiModelProperty("下单应用:STUDENT 学生端 TEACHER 老师端")
 	private String orderClient;
 
-	@ApiModelProperty("交易类型:  VIP、开通会员  SVIP、开通会员 PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名(多选用,分割)")
+	@ApiModelProperty("交易类型:  VIP、开通会员  SVIP、开通会员 PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名(多选用,分割)、VIP_COURSE VIP定制课")
 	private String orderType;
 
 	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败 (多选用,分割)")

+ 29 - 214
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
@@ -25,88 +26,110 @@ import java.util.Date;
  */
 @TableName("activity_plan")
 @ApiModel(value = "ActivityPlan对象", description = "活动计划表")
+@Data
 public class ActivityPlan implements Serializable {
     private static final long serialVersionUID = 1L;
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
+
     @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 STANDARD_GIFT 达标赠送 SHARE分享活动", required = true)
     @TableField(value = "activity_type_")
     @NotNull(message = "活动类型不能为空")
     private ActivityTypeEnum activityType;
+
     @ApiModelProperty(value = "活动应用:STUDENT 学生端 TEACHER 老师端", required = true)
     @TableField(value = "activity_client_")
     @NotNull(message = "活动应用不能为空")
     private ClientEnum activityClient;
+
     @ApiModelProperty("活动名称 ")
     @TableField(value = "activity_name_")
     @NotBlank(message = "活动名称不能为空")
     private String activityName;
+
     @ApiModelProperty("活动描述 ")
     @TableField(value = "describe_")
     @NotBlank(message = "活动描述不能为空")
     private String describe;
+
     @ApiModelProperty("规则描述 ")
     @TableField(value = "rule_describe_")
     private String ruleDescribe;
+
     @ApiModelProperty("主题图片 ")
     @TableField(value = "subject_url_")
     private String subjectUrl;
+
     @ApiModelProperty("平铺背景 ")
     @TableField(value = "background_url_")
     private String backgroundUrl;
+
     @ApiModelProperty("分享图片 ")
     @TableField(value = "share_url_")
     private String shareUrl;
+
     @ApiModelProperty("活动链接 ")
     @TableField(value = "activity_url_")
     private String activityUrl;
+
     @ApiModelProperty("活动时间-开始 ")
     @TableField(value = "activity_start_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @NotNull(message = "活动开始时间不能为空")
     private Date activityStart;
+
     @ApiModelProperty("活动时间-结束 ")
     @TableField(value = "activity_end_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @NotNull(message = "活动结束时间不能为空")
     private Date activityEnd;
+
     @ApiModelProperty("报名方式 FREE 免费 CHARGE 收费 ")
     @TableField(value = "registration_method_")
     private RegistrationMethodEnum registrationMethod;
     @ApiModelProperty("报名价格 ")
     @TableField(value = "registration_price_")
     private BigDecimal registrationPrice;
+
     @ApiModelProperty("分润比例 ")
     @TableField(value = "share_rate_")
     private BigDecimal shareRate;
+
     @ApiModelProperty("创建状态 0 正式 1 草稿 ")
     @TableField(value = "draft_flag_")
     private Integer draftFlag;
+
     @ApiModelProperty("活动状态 0 停用 1 启用 ")
     @TableField(value = "activity_state_")
     private Integer activityState;
+
     @ApiModelProperty("发奖状态(完成状态) 0 未发奖 1 已发奖 ")
     @TableField(value = "reward_flag_")
     private Integer rewardFlag;
+
     @ApiModelProperty(value = "活动分类类型, MUSIC_SHEET(曲谱) MUSIC(音乐) VIP(会员) VIDEO(视频) LIVE(直播) GOODS(商品)")
     @TableField(value = "share_type_")
     private String shareType;
+
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
+
     @ApiModelProperty("创建人 ")
     @TableField(value = "create_by_")
     private Long createBy;
+
     @ApiModelProperty("更新时间 ")
     @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
+
     @ApiModelProperty("更新人 ")
     @TableField(value = "update_by_")
     private Long updateBy;
@@ -127,219 +150,11 @@ public class ActivityPlan implements Serializable {
     @TableField(value = "ranking_score_")
     private Double rankingScore;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public ActivityTypeEnum getActivityType() {
-        return activityType;
-    }
-
-    public void setActivityType(ActivityTypeEnum activityType) {
-        this.activityType = activityType;
-    }
-
-    public String getActivityName() {
-        return activityName;
-    }
-
-    public void setActivityName(String activityName) {
-        this.activityName = activityName;
-    }
-
-    public String getDescribe() {
-        return describe;
-    }
-
-    public void setDescribe(String describe) {
-        this.describe = describe;
-    }
-
-    public String getRuleDescribe() {
-        return ruleDescribe;
-    }
-
-    public void setRuleDescribe(String ruleDescribe) {
-        this.ruleDescribe = ruleDescribe;
-    }
-
-    public String getSubjectUrl() {
-        return subjectUrl;
-    }
-
-    public void setSubjectUrl(String subjectUrl) {
-        this.subjectUrl = subjectUrl;
-    }
-
-    public String getBackgroundUrl() {
-        return backgroundUrl;
-    }
-
-    public void setBackgroundUrl(String backgroundUrl) {
-        this.backgroundUrl = backgroundUrl;
-    }
-
-    public Date getActivityStart() {
-        return activityStart;
-    }
-
-    public void setActivityStart(Date activityStart) {
-        this.activityStart = activityStart;
-    }
-
-    public Date getActivityEnd() {
-        return activityEnd;
-    }
-
-    public void setActivityEnd(Date activityEnd) {
-        this.activityEnd = activityEnd;
-    }
-
-    public RegistrationMethodEnum getRegistrationMethod() {
-        return registrationMethod;
-    }
-
-    public void setRegistrationMethod(RegistrationMethodEnum registrationMethod) {
-        this.registrationMethod = registrationMethod;
-    }
-
-    public BigDecimal getRegistrationPrice() {
-        return registrationPrice;
-    }
-
-    public void setRegistrationPrice(BigDecimal registrationPrice) {
-        this.registrationPrice = registrationPrice;
-    }
-
-    public Integer getDraftFlag() {
-        return draftFlag;
-    }
-
-    public void setDraftFlag(Integer draftFlag) {
-        this.draftFlag = draftFlag;
-    }
-
-    public Integer getActivityState() {
-        return activityState;
-    }
-
-    public void setActivityState(Integer activityState) {
-        this.activityState = activityState;
-    }
-
-    public String getShareType() {
-        return this.shareType;
-    }
-
-    public void setShareType(String shareType) {
-        this.shareType = shareType;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Long getCreateBy() {
-        return createBy;
-    }
-
-    public void setCreateBy(Long createBy) {
-        this.createBy = createBy;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Long getUpdateBy() {
-        return updateBy;
-    }
-
-    public void setUpdateBy(Long updateBy) {
-        this.updateBy = updateBy;
-    }
-
-    public String getActivityUrl() {
-        return activityUrl;
-    }
-
-    public void setActivityUrl(String activityUrl) {
-        this.activityUrl = activityUrl;
-    }
-
-    public String getShareUrl() {
-        return shareUrl;
-    }
-
-    public void setShareUrl(String shareUrl) {
-        this.shareUrl = shareUrl;
-    }
-
-    public BigDecimal getShareRate() {
-        return shareRate;
-    }
-
-    public void setShareRate(BigDecimal shareRate) {
-        this.shareRate = shareRate;
-    }
-
-    public Integer getRewardFlag() {
-        return rewardFlag;
-    }
-
-    public void setRewardFlag(Integer rewardFlag) {
-        this.rewardFlag = rewardFlag;
-    }
-
-    public ClientEnum getActivityClient() {
-        return activityClient;
-    }
-
-    public void setActivityClient(ClientEnum activityClient) {
-        this.activityClient = activityClient;
-    }
-
-    public Integer getRanking() {
-        return ranking;
-    }
-
-    public void setRanking(Integer ranking) {
-        this.ranking = ranking;
-    }
-
-    public ActivityRankingRuleEnum getRankingRule() {
-        return rankingRule;
-    }
-
-    public void setRankingRule(ActivityRankingRuleEnum rankingRule) {
-        this.rankingRule = rankingRule;
-    }
-
-    public ActivityRankingMethodEnum getRankingMethod() {
-        return rankingMethod;
-    }
-
-    public void setRankingMethod(ActivityRankingMethodEnum rankingMethod) {
-        this.rankingMethod = rankingMethod;
-    }
-
-    public Double getRankingScore() {
-        return rankingScore;
-    }
+    @ApiModelProperty("会员类型ID")
+    @TableField(value = "vip_card_id_")
+    private Long vipCardId;
 
-    public void setRankingScore(Double rankingScore) {
-        this.rankingScore = rankingScore;
-    }
+    @ApiModelProperty("拓展配置")
+    @TableField(value = "ext_config_")
+    private String extConfig;
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -20,6 +20,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     ACTI_REGIST("活动报名"),
     ALBUM("专辑购买"),
     TENANT_ALBUM("平台专辑"),
+    VIP_COURSE("VIP定制课"),
     ;
     @EnumValue
     private String code;

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/coupon/CouponCategoryEnum.java

@@ -24,6 +24,7 @@ public enum CouponCategoryEnum implements BaseEnum<String, CouponCategoryEnum> {
     SPARRING("陪练课购买券", "PRACTICE"),
     LIVE("直播课购买券", "LIVE"),
     VIDEO("视频课购买券", "VIDEO"),
+    VIP_COURSE("VIP定制课购买券", "VIP_COURSE"),
     ;
 
     @EnumValue

+ 31 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java

@@ -396,6 +396,16 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             if (detail.getActivityEnd().before(now)) {
                 return false;
             }
+            //其他的会员活动时间是否有交集
+            List<ActivityPlan> activityPlans = baseMapper.selectList(Wrappers.<ActivityPlan>lambdaQuery()
+                    .eq(ActivityPlan::getActivityType, ActivityTypeEnum.MEMBER)
+                    .eq(ActivityPlan::getActivityState, 1)
+                    .ne(ActivityPlan::getId, activityId)
+                    .lt(ActivityPlan::getActivityStart, activityPlan.getActivityEnd())
+                    .gt(ActivityPlan::getActivityEnd, activityPlan.getActivityStart()));
+            if(CollectionUtils.isNotEmpty(activityPlans)){
+                throw new BizException("会员买赠活动时间与其他会员活动时间有交集");
+            }
             if (detail.getActivityStart().after(now)) {
                 activityPlan.setActivityStart(now);
             }
@@ -438,7 +448,27 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         }
 
         if (!ActivityTypeEnum.STANDARD_GIFT.equals(activityPlan.getActivityType())) {
-
+            // 分享活动奖品校验
+            if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()
+                    && CollectionUtils.isEmpty(activityPlan.getRewardItems())) {
+                throw new BizException("分享活动奖品信息为空");
+            }
+            //会员买赠活动校验
+            if (ActivityTypeEnum.MEMBER == activityPlan.getActivityType()) {
+                if(activityPlan.getVipCardId() == null){
+                    throw new BizException("会员买赠活动会员卡信息为空");
+                }
+                //其他的会员活动时间是否有交集
+                List<ActivityPlan> activityPlans = baseMapper.selectList(Wrappers.<ActivityPlan>lambdaQuery()
+                        .eq(ActivityPlan::getActivityType, ActivityTypeEnum.MEMBER)
+                        .eq(ActivityPlan::getActivityState, 1)
+                        .ne(activityPlan.getId()!=null, ActivityPlan::getId, activityPlan.getId())
+                        .lt(ActivityPlan::getActivityStart, activityPlan.getActivityEnd())
+                        .gt(ActivityPlan::getActivityEnd, activityPlan.getActivityStart()));
+                if(CollectionUtils.isNotEmpty(activityPlans)){
+                    throw new BizException("会员买赠活动时间与其他会员活动时间有交集");
+                }
+            }
             if (null == activityPlan.getRegistrationMethod()) {
                 throw new BizException("报名缴费方式不能为空");
             }

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -24,6 +24,8 @@
             <result column="ranking_score_" property="rankingScore" />
 	        <result column="draft_flag_" property="draftFlag" />
 	        <result column="activity_state_" property="activityState" />
+	        <result column="vip_card_id_" property="vipCardId" />
+	        <result column="ext_config_" property="extConfig" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="create_by_" property="createBy" />
 	        <result column="update_time_" property="updateTime" />
@@ -54,6 +56,8 @@
         , t.ranking_score_ as rankingScore
         , t.draft_flag_ as draftFlag
         , if(t.activity_state_ = 1, 1, 0) as activityState
+        , t.vip_card_id_ as vipCardId
+        , t.ext_config_ as extConfig
         , t.create_time_ as createTime
         , t.create_by_ as createBy
         , t.update_time_ as updateTime
@@ -71,8 +75,6 @@
 		SELECT         
         	<include refid="baseColumns" />
 		    ,   u.username_ as updateByName
-		    /*,   (select count(1) from activity_registration r where t.id_ = r.activity_id_) as registrationNum*/
-		    /*,   (select count(distinct r.user_id_) from activity_user_reward r where t.id_ = r.activity_id_) as rewardNum*/
 		FROM activity_plan t
         LEFT JOIN  sys_user u on t.update_by_ = u.id_
         <where>