记得上下班打卡 | git大法好,push需谨慎

Commit 668db859 authored by dongchun's avatar dongchun

Merge remote-tracking branch 'origin/dev_20211205' into dev_20211205

parents 0ac2842f bd723fd3
...@@ -26,6 +26,8 @@ public class AdamRedisConst { ...@@ -26,6 +26,8 @@ public class AdamRedisConst {
*/ */
public static final String INFO_CERTIFICATION_JUNK = PREFIX.concat("info:certification_junk:"); public static final String INFO_CERTIFICATION_JUNK = PREFIX.concat("info:certification_junk:");
public static final String INFO_MEMBER_CARDFACE = PREFIX.concat("info:member:cardface");
public static final String INFO_MEMBER_JOINUS = PREFIX.concat("info:member:joinus");
public static final String INFO_MEMBER_SIMPLE = PREFIX.concat("info:member:simple"); public static final String INFO_MEMBER_SIMPLE = PREFIX.concat("info:member:simple");
public static final String INFO_MEMBER_CATEGORY = PREFIX.concat("info:member:category:"); public static final String INFO_MEMBER_CATEGORY = PREFIX.concat("info:member:category:");
public static final String INFO_MEMBER_PRICE = PREFIX.concat("info:member:price:"); public static final String INFO_MEMBER_PRICE = PREFIX.concat("info:member:price:");
...@@ -55,6 +57,8 @@ public class AdamRedisConst { ...@@ -55,6 +57,8 @@ public class AdamRedisConst {
public static final String SWITCH_BUY_MEMBER = PREFIX.concat("switch:buy:member"); public static final String SWITCH_BUY_MEMBER = PREFIX.concat("switch:buy:member");
public static final String SERIAL_NUMBER_MEMBER = PREFIX.concat("serial_no:");
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
// public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no"; // public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no";
......
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "AdamMemberJoinusVo", description = "领取的会员卡详情")
@Data
public class AdamMemberJoinusVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -2346451755376200201L;
@ApiModelProperty(position = 10, value = "")
private String qrCode;
@ApiModelProperty(position = 11, value = "标题[50]", example = "摩登天空会员卡")
private String title;
@ApiModelProperty(position = 12, value = "副标题[50]", example = "摩登天空专属会员卡")
private String subTitle;
@ApiModelProperty(position = 13, value = "卡面[200]", example = "https://img.zhengzai.tv/member_card/member1.png")
private String cardface;
@ApiModelProperty(position = 14, value = "卡类型[0-非会员|10-普通会员|50-VIP会员]", example = "0")
private Integer type;
@ApiModelProperty(position = 15, value = "卡状态[0-未领取|1-已领取]", example = "0")
private Integer state;
@ApiModelProperty(position = 16, value = "权益详情[200]", example = "加入摩登天空会员您可享受到.....")
private String interestsDetail;
private static final AdamMemberJoinusVo obj = new AdamMemberJoinusVo();
public static AdamMemberJoinusVo getNew() {
try {
return (AdamMemberJoinusVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamMemberJoinusVo();
}
}
}
...@@ -120,9 +120,8 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable { ...@@ -120,9 +120,8 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
try { try {
return (AdamMemberVo) obj.clone(); return (AdamMemberVo) obj.clone();
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
e.printStackTrace(); return new AdamMemberVo();
} }
return new AdamMemberVo();
} }
public AdamMemberVo copy(AdamMember source) { public AdamMemberVo copy(AdamMember source) {
......
...@@ -64,4 +64,7 @@ public class SweetConstant { ...@@ -64,4 +64,7 @@ public class SweetConstant {
// 微信小程序用户相关 新 // 微信小程序用户相关 新
public final static String REDIS_KEY_SWEET_APPLET_USERS_PHONE = "sweet:user:applet:mobile:"; public final static String REDIS_KEY_SWEET_APPLET_USERS_PHONE = "sweet:user:applet:mobile:";
public final static String REDIS_KEY_SWEET_APPLET_USERS_UNIONID = "sweet:user:applet:unionid:"; public final static String REDIS_KEY_SWEET_APPLET_USERS_UNIONID = "sweet:user:applet:unionid:";
//2022草莓音乐节活动海报相关
public final static String REDIS_KEY_SWEET_STRAWBERRY_POSTER = "sweet:strawberry:poster";
} }
package com.liquidnet.service.sweet.dto.param.poster;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "SweetStrawMusicianParam", description = "音乐人")
@Data
public class SweetStrawListParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 10, required = true, value = "lineupNum", example = "lineupNum")
@NotBlank(message = "lineupNum不能为空")
private List<SweetStrawMusicianParam> lineup;
}
package com.liquidnet.service.sweet.dto.param.poster;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "SweetStrawMusicianParam", description = "音乐人")
@Data
public class SweetStrawMusicianParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 10, required = true, value = "lineupNum", example = "lineupNum")
@NotBlank(message = "lineupNum不能为空")
private String lineupNum;
@ApiModelProperty(position = 10, required = true, value = "musicianId", example = "musicianId")
@NotBlank(message = "musicianId不能为空")
private Integer musicianId;
@ApiModelProperty(position = 10, required = true, value = "musicianName", example = "musicianName")
@NotBlank(message = "musicianName不能为空")
private String musicianName;
}
package com.liquidnet.service.sweet.dto.param.poster;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "SweetStrawberryParam", description = "海报数据")
@Data
public class SweetStrawberryParam implements Serializable {
private static final long serialVersionUID = 9038992103808199663L;
@ApiModelProperty(position = 10, required = true, value = "openId", example = "openId")
@NotBlank(message = "openId不能为空")
private String openId;
@ApiModelProperty(position = 10, required = true, value = "unionId", example = "unionId")
@NotBlank(message = "unionId不能为空")
private String unionId;
@ApiModelProperty(position = 10, required = true, value = "nickname", example = "nickname")
@NotBlank(message = "nickname不能为空")
private String nickname;
@ApiModelProperty(position = 10, required = true, value = "cityName", example = "cityName")
@NotBlank(message = "cityName不能为空")
private String cityName;
@ApiModelProperty(position = 10, required = true, value = "cityCode", example = "cityCode")
@NotBlank(message = "cityCode不能为空")
private String cityCode;
@Valid
@ApiModelProperty(value = "阵容列表", example = "[{\"lineup\": [{\"lineupNum\": \"lineup1\", \"musicianId\": 9999, \"musicianName\": \"歌手1\"},\n" +
"{\"lineupNum\": \"lineup1\",\"musicianId\": 23233,\"musicianName\": \"歌手D\"}]},\n" +
"{\"lineup\": [{ \"lineupNum\": \"lineup2\",\"musicianId\": 1111,\"musicianName\": \"歌手2\"}]}]")
@NotNull(message = "musicianList")
private List<SweetStrawListParam> musicianList;
private static final SweetStrawberryParam obj = new SweetStrawberryParam();
public static SweetStrawberryParam getNew() {
try {
return (SweetStrawberryParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetStrawberryParam();
}
}
}
\ No newline at end of file
package com.liquidnet.service.sweet.service; package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.entity.SweetStrawberryPoster; import com.liquidnet.service.sweet.entity.SweetStrawberryPoster;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ISweetStrawberryPosterService extends IService<SweetStrawberryPoster> { public interface ISweetStrawberryPosterService extends IService<SweetStrawberryPoster> {
ResponseDto<Boolean> addUserLikeMusician(SweetStrawberryParam sweetStrawberry);
} }
...@@ -34,6 +34,7 @@ import org.springframework.util.CollectionUtils; ...@@ -34,6 +34,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -248,6 +249,32 @@ public class AdamMemberAdminController extends BaseController { ...@@ -248,6 +249,32 @@ public class AdamMemberAdminController extends BaseController {
@PostMapping("edit_coupon") @PostMapping("edit_coupon")
@ResponseBody @ResponseBody
public AjaxResult editCoupon(@RequestBody @Validated CandyMemberCouponMatchParam parameter) { public AjaxResult editCoupon(@RequestBody @Validated CandyMemberCouponMatchParam parameter) {
switch (parameter.getBusiType()) {// 券类别类型配置校验
case 0:
case 1:
if (!Arrays.asList(1, 2).contains(parameter.getCouType())) {
String msg = String.format("会员券类别【%s】", parameter.getBusiType() == 0 ? "全场" : "演出");
logger.warn("{}暂不支持所选券类型[{}]", msg, parameter.getCouType());
return this.error(AjaxResult.Type.WARN, String.format("%s暂不支持所选券类型", msg));
}
break;
case 2:
if (!Arrays.asList(1, 2, 3).contains(parameter.getCouType())) {
logger.warn("券类别【商品】暂不支持所选券类型[{}]", parameter.getCouType());
return this.error(AjaxResult.Type.WARN, "会员券类别【商品】暂不支持所选券类型");
}
break;
case 3:
if (101 != parameter.getCouType()) {
logger.warn("会员券类别【优先购买】暂不支持所选券类型[{}]", parameter.getCouType());
return this.error(AjaxResult.Type.WARN, "会员券类别【优先购买】暂不支持所选券类型");
}
break;
default:
logger.warn("Invalid argument[parameter.busiType={}]", parameter.getBusiType());
return this.error(AjaxResult.Type.WARN, "无效的券类别");
}
LambdaQueryWrapper<AdamMemberRights> memberRightsLambdaQueryWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<AdamMemberRights> memberRightsLambdaQueryWrapper = Wrappers.lambdaQuery();
memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getMrightsId, parameter.getMrightsId()); memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getMrightsId, parameter.getMrightsId());
memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getState, 1); memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getState, 1);
......
...@@ -228,6 +228,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -228,6 +228,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
mgtCouponOper.setEventType(2); mgtCouponOper.setEventType(2);
//mgtCouponOper.setEventLimit(); //mgtCouponOper.setEventLimit();
//mgtCouponOper.setEventAt(); //mgtCouponOper.setEventAt();
mgtCouponOper.setExclusively(1);
mgtCouponOper.setOperator(operator); mgtCouponOper.setOperator(operator);
mgtCouponOper.setCreatedAt(nowTime); mgtCouponOper.setCreatedAt(nowTime);
...@@ -298,6 +299,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -298,6 +299,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
mgtCouponOper.setState(10);// 发放状态[0-未发放|1-已发放|2-无效|9-发放中|10-会员礼包初始模版] mgtCouponOper.setState(10);// 发放状态[0-未发放|1-已发放|2-无效|9-发放中|10-会员礼包初始模版]
mgtCouponOper.setEventAmt(parameter.getEventAmt()); mgtCouponOper.setEventAmt(parameter.getEventAmt());
mgtCouponOper.setEventType(2); mgtCouponOper.setEventType(2);
mgtCouponOper.setExclusively(1);
mgtCouponOper.setOperator(operator); mgtCouponOper.setOperator(operator);
mgtCouponOper.setCreatedAt(nowTime); mgtCouponOper.setCreatedAt(nowTime);
......
...@@ -85,6 +85,8 @@ public class MQConst { ...@@ -85,6 +85,8 @@ public class MQConst {
SWEET_CITY_VOTE("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"), SWEET_CITY_VOTE("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"), SWEET_ANTIGENIC_QUESTION("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"), SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"),
SWEET_POSTER("sweet:stream:rk.userLikeMusician", "group.userLikeMusician", "用户喜欢的音乐人"),
; ;
private final String key; private final String key;
......
...@@ -101,6 +101,7 @@ global-auth: ...@@ -101,6 +101,7 @@ global-auth:
- ${liquidnet.info.context}/ts - ${liquidnet.info.context}/ts
- ${liquidnet.info.context}/send - ${liquidnet.info.context}/send
- ${liquidnet.info.context}/member/info - ${liquidnet.info.context}/member/info
- ${liquidnet.info.context}/member/joininfo
- ${liquidnet.info.context}/member/info/rights - ${liquidnet.info.context}/member/info/rights
- ${liquidnet.info.context}/member/onsale - ${liquidnet.info.context}/member/onsale
- ${liquidnet.info.context}/member/check/depth - ${liquidnet.info.context}/member/check/depth
......
...@@ -19,7 +19,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{ ...@@ -19,7 +19,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
private String title; private String title;
private String label; private String label;
private String notice; private String notice;
private Integer exclusive; //private Integer exclusive;
private Integer busiType; private Integer busiType;
private Integer couType; private Integer couType;
private Integer bindType; private Integer bindType;
...@@ -44,6 +44,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{ ...@@ -44,6 +44,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
private String ccouponId; private String ccouponId;
private String mcouponId; private String mcouponId;
//private String couponId; //private String couponId;
private Integer exclusive;
private Integer state; private Integer state;
private Integer ranged; private Integer ranged;
//private String operator; //private String operator;
...@@ -71,7 +72,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{ ...@@ -71,7 +72,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
this.setTitle(coupon.getTitle()); this.setTitle(coupon.getTitle());
this.setLabel(coupon.getLabel()); this.setLabel(coupon.getLabel());
this.setNotice(coupon.getNotice()); this.setNotice(coupon.getNotice());
this.setExclusive(coupon.getExclusive()); //this.setExclusive(coupon.getExclusive());
this.setBusiType(coupon.getBusiType()); this.setBusiType(coupon.getBusiType());
this.setCouType(coupon.getCouType()); this.setCouType(coupon.getCouType());
this.setBindType(coupon.getBindType()); this.setBindType(coupon.getBindType());
...@@ -90,6 +91,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{ ...@@ -90,6 +91,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
this.setCcouponId(commonCoupon.getCcouponId()); this.setCcouponId(commonCoupon.getCcouponId());
this.setMcouponId(commonCoupon.getMcouponId()); this.setMcouponId(commonCoupon.getMcouponId());
this.setExclusive(commonCoupon.getExclusive());
this.setState(commonCoupon.getState()); this.setState(commonCoupon.getState());
this.setRanged(commonCoupon.getRanged()); this.setRanged(commonCoupon.getRanged());
this.setCreatedAt(commonCoupon.getCreatedAt()); this.setCreatedAt(commonCoupon.getCreatedAt());
......
...@@ -19,7 +19,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable { ...@@ -19,7 +19,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
private String title; private String title;
private String label; private String label;
private String notice; private String notice;
private Integer exclusive; //private Integer exclusive;
private Integer busiType; private Integer busiType;
private Integer couType; private Integer couType;
private Integer bindType; private Integer bindType;
...@@ -45,6 +45,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable { ...@@ -45,6 +45,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
private String mcouponId; private String mcouponId;
private String uid; private String uid;
//private String couponId; //private String couponId;
private Integer exclusive;
private Integer state; private Integer state;
private String ccode; private String ccode;
private LocalDateTime bindAt; private LocalDateTime bindAt;
...@@ -77,7 +78,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable { ...@@ -77,7 +78,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setTitle(coupon.getTitle()); this.setTitle(coupon.getTitle());
this.setLabel(coupon.getLabel()); this.setLabel(coupon.getLabel());
this.setNotice(coupon.getNotice()); this.setNotice(coupon.getNotice());
this.setExclusive(coupon.getExclusive()); //this.setExclusive(coupon.getExclusive());
this.setBusiType(coupon.getBusiType()); this.setBusiType(coupon.getBusiType());
this.setCouType(coupon.getCouType()); this.setCouType(coupon.getCouType());
this.setBindType(coupon.getBindType()); this.setBindType(coupon.getBindType());
...@@ -95,6 +96,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable { ...@@ -95,6 +96,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setUcouponId(userCoupon.getUcouponId()); this.setUcouponId(userCoupon.getUcouponId());
this.setMcouponId(userCoupon.getMcouponId()); this.setMcouponId(userCoupon.getMcouponId());
this.setUid(userCoupon.getUid()); this.setUid(userCoupon.getUid());
this.setExclusive(userCoupon.getExclusive());
this.setState(userCoupon.getState()); this.setState(userCoupon.getState());
this.setCcode(userCoupon.getCcode()); this.setCcode(userCoupon.getCcode());
this.setBindAt(userCoupon.getBindAt()); this.setBindAt(userCoupon.getBindAt());
......
...@@ -37,6 +37,18 @@ public class CandyCommonCoupon implements Serializable { ...@@ -37,6 +37,18 @@ public class CandyCommonCoupon implements Serializable {
*/ */
private String couponId; private String couponId;
/**
* 专享标识[0-常规|1-会员专属]
* <p>
* 变更前:`candy_coupon.exclusive`用于根据会员有效期设置券有效期及标识用户端券分类(普通券、会员券等);
* 变更后:
* 原`candy_coupon.exclusive`废除
* 实际发放逻辑中,原标识"是否根据会员有效期设置券有效期"的`candy_coupon.exclusive`字段改为`candy_mgt_coupon.exclusively`
* 在`candy_user_coupon`及`candy_common_coupon`中添加`exclusive`字段,发放时直接由`candy_mgt_coupon.exclusively`赋值该属性
* </p>
*/
private Integer exclusive;
/** /**
* 公有券状态[1-可用|2-无效|3-已过期] * 公有券状态[1-可用|2-无效|3-已过期]
*/ */
......
...@@ -2,11 +2,12 @@ package com.liquidnet.service.candy.entity; ...@@ -2,11 +2,12 @@ package com.liquidnet.service.candy.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* 券发放管理 * 券发放管理
...@@ -59,8 +60,11 @@ public class CandyMgtCoupon implements Serializable { ...@@ -59,8 +60,11 @@ public class CandyMgtCoupon implements Serializable {
/** /**
* 专享标识[0-常规|1-会员专属] * 专享标识[0-常规|1-会员专属]
* <p> * <p>
* 同`candy_coupon.exclusive`,按实际需求场景灵活使用; * 变更前:`candy_coupon.exclusive`用于根据会员有效期设置券有效期及标识用户端券分类(普通券、会员券等);
* 目前`candy_coupon.exclusive`用于根据会员有效期设置券有效期; * 变更后:
* 原`candy_coupon.exclusive`废除
* 实际发放逻辑中,原标识"是否根据会员有效期设置券有效期"的`candy_coupon.exclusive`字段改为`candy_mgt_coupon.exclusively`
* 在`candy_user_coupon`及`candy_common_coupon`中添加`exclusive`字段,发放时直接由`candy_mgt_coupon.exclusively`赋值该属性
* </p> * </p>
*/ */
private Integer exclusively; private Integer exclusively;
......
...@@ -43,6 +43,18 @@ public class CandyUserCoupon implements Serializable,Cloneable { ...@@ -43,6 +43,18 @@ public class CandyUserCoupon implements Serializable,Cloneable {
*/ */
private String couponId; private String couponId;
/**
* 专享标识[0-常规|1-会员专属]
* <p>
* 变更前:`candy_coupon.exclusive`用于根据会员有效期设置券有效期及标识用户端券分类(普通券、会员券等);
* 变更后:
* 原`candy_coupon.exclusive`废除
* 实际发放逻辑中,原标识"是否根据会员有效期设置券有效期"的`candy_coupon.exclusive`字段改为`candy_mgt_coupon.exclusively`
* 在`candy_user_coupon`及`candy_common_coupon`中添加`exclusive`字段,发放时直接由`candy_mgt_coupon.exclusively`赋值该属性
* </p>
*/
private Integer exclusive;
/** /**
* 用户券状态[1-可用|2-无效|3-已过期|5-已使用] * 用户券状态[1-可用|2-无效|3-已过期|5-已使用]
*/ */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<result column="title" jdbcType="VARCHAR" property="title"/> <result column="title" jdbcType="VARCHAR" property="title"/>
<result column="label" jdbcType="VARCHAR" property="label"/> <result column="label" jdbcType="VARCHAR" property="label"/>
<result column="notice" jdbcType="VARCHAR" property="notice"/> <result column="notice" jdbcType="VARCHAR" property="notice"/>
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/> <!-- <result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>-->
<result column="busi_type" jdbcType="SMALLINT" property="busiType"/> <result column="busi_type" jdbcType="SMALLINT" property="busiType"/>
<result column="cou_type" jdbcType="SMALLINT" property="couType"/> <result column="cou_type" jdbcType="SMALLINT" property="couType"/>
<result column="bind_type" jdbcType="SMALLINT" property="bindType"/> <result column="bind_type" jdbcType="SMALLINT" property="bindType"/>
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
<result column="ccoupon_id" jdbcType="VARCHAR" property="ccouponId"/> <result column="ccoupon_id" jdbcType="VARCHAR" property="ccouponId"/>
<result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId"/> <result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId"/>
<!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />--> <!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />-->
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>
<result column="state" jdbcType="TINYINT" property="state"/> <result column="state" jdbcType="TINYINT" property="state"/>
<result column="ranged" jdbcType="TINYINT" property="ranged"/> <result column="ranged" jdbcType="TINYINT" property="ranged"/>
<!-- <result column="operator" jdbcType="VARCHAR" property="operator" />--> <!-- <result column="operator" jdbcType="VARCHAR" property="operator" />-->
...@@ -41,11 +42,11 @@ ...@@ -41,11 +42,11 @@
</resultMap> </resultMap>
<sql id="Rst_CommonCouponBasicDto_Column_List"> <sql id="Rst_CommonCouponBasicDto_Column_List">
cc.coupon_id, cc.title, cc.`label`, cc.notice, cc.`exclusive`, cc.busi_type, cc.cou_type, cc.bind_type, cc.coupon_id, cc.title, cc.`label`, cc.notice, cc.busi_type, cc.cou_type, cc.bind_type,
cc.discount, cc.val_face, cc.val_over, cc.val_minus, cc.`overlay`, cc.overlay_level, cc.discount, cc.val_face, cc.val_over, cc.val_minus, cc.`overlay`, cc.overlay_level,
cc.validity, cc.redeem_validity, cc.redeem_start, cc.redeem_stop, cc.effect_at, cc.expire_at, cc.validity, cc.redeem_validity, cc.redeem_start, cc.redeem_stop, cc.effect_at, cc.expire_at,
ccc.ccoupon_id, ccc.mcoupon_id, ccc.`state`, ccc.ranged, ccc.created_at ccc.ccoupon_id, ccc.mcoupon_id, ccc.`exclusive`, ccc.`state`, ccc.ranged, ccc.created_at
</sql> </sql>
<select id="selectMultiForCommonCouponBasicDto" resultMap="Rst_CommonCouponBasicDto"> <select id="selectMultiForCommonCouponBasicDto" resultMap="Rst_CommonCouponBasicDto">
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<result column="title" jdbcType="VARCHAR" property="title"/> <result column="title" jdbcType="VARCHAR" property="title"/>
<result column="label" jdbcType="VARCHAR" property="label"/> <result column="label" jdbcType="VARCHAR" property="label"/>
<result column="notice" jdbcType="VARCHAR" property="notice"/> <result column="notice" jdbcType="VARCHAR" property="notice"/>
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/> <!-- <result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>-->
<result column="busi_type" jdbcType="SMALLINT" property="busiType"/> <result column="busi_type" jdbcType="SMALLINT" property="busiType"/>
<result column="cou_type" jdbcType="SMALLINT" property="couType"/> <result column="cou_type" jdbcType="SMALLINT" property="couType"/>
<result column="bind_type" jdbcType="SMALLINT" property="bindType"/> <result column="bind_type" jdbcType="SMALLINT" property="bindType"/>
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
<!-- <result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId" />--> <!-- <result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId" />-->
<result column="uid" jdbcType="VARCHAR" property="uid"/> <result column="uid" jdbcType="VARCHAR" property="uid"/>
<!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />--> <!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />-->
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>
<result column="state" jdbcType="TINYINT" property="state"/> <result column="state" jdbcType="TINYINT" property="state"/>
<result column="ccode" jdbcType="VARCHAR" property="ccode"/> <result column="ccode" jdbcType="VARCHAR" property="ccode"/>
<result column="bind_at" jdbcType="TIMESTAMP" property="bindAt"/> <result column="bind_at" jdbcType="TIMESTAMP" property="bindAt"/>
...@@ -43,11 +44,11 @@ ...@@ -43,11 +44,11 @@
</resultMap> </resultMap>
<sql id="Rst_UserCouponBasicDto_Column_List"> <sql id="Rst_UserCouponBasicDto_Column_List">
cc.coupon_id, cc.title, cc.`label`, cc.notice, cc.`exclusive`, cc.busi_type, cc.cou_type, cc.bind_type, cc.coupon_id, cc.title, cc.`label`, cc.notice, cc.busi_type, cc.cou_type, cc.bind_type,
cc.discount, cc.val_face, cc.val_over, cc.val_minus, cc.`overlay`, cc.overlay_level, cc.discount, cc.val_face, cc.val_over, cc.val_minus, cc.`overlay`, cc.overlay_level,
cc.validity, cc.redeem_validity, cc.redeem_start, cc.redeem_stop, cc.validity, cc.redeem_validity, cc.redeem_start, cc.redeem_stop,
cuc.ucoupon_id, cuc.mcoupon_id, cuc.`uid`, cuc.`state`, cuc.ccode, cuc.bind_at, cuc.dued_at, cuc.used_at, cuc.used_for cuc.ucoupon_id, cuc.mcoupon_id, cuc.`uid`, cuc.`exclusive`, cuc.`state`, cuc.ccode, cuc.bind_at, cuc.dued_at, cuc.used_at, cuc.used_for
</sql> </sql>
<select id="selectMultiForUserCouponBasicDto" resultMap="Rst_UserCouponBasicDto"> <select id="selectMultiForUserCouponBasicDto" resultMap="Rst_UserCouponBasicDto">
......
...@@ -25,17 +25,17 @@ public class SweetStrawberryPoster implements Serializable { ...@@ -25,17 +25,17 @@ public class SweetStrawberryPoster implements Serializable {
private Long mid; private Long mid;
/** /**
* poster_id * poster_id 海报id
*/ */
private String posterId; private String posterId;
/** /**
* open_id * open_id 微信id
*/ */
private String openId; private String openId;
/** /**
* union_id * union_id 用户id
*/ */
private String unionId; private String unionId;
...@@ -48,7 +48,10 @@ public class SweetStrawberryPoster implements Serializable { ...@@ -48,7 +48,10 @@ public class SweetStrawberryPoster implements Serializable {
* 城市 * 城市
*/ */
private String cityName; private String cityName;
/**
* 城市code
*/
private String cityCode;
/** /**
* 创建时间 * 创建时间
*/ */
...@@ -59,5 +62,14 @@ public class SweetStrawberryPoster implements Serializable { ...@@ -59,5 +62,14 @@ public class SweetStrawberryPoster implements Serializable {
*/ */
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
private static final SweetStrawberryPoster obj = new SweetStrawberryPoster();
public static SweetStrawberryPoster getNew() {
try {
return (SweetStrawberryPoster) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetStrawberryPoster();
}
}
} }
...@@ -30,14 +30,14 @@ public class SweetStrawberryPosterLineup implements Serializable { ...@@ -30,14 +30,14 @@ public class SweetStrawberryPosterLineup implements Serializable {
private String lineupId; private String lineupId;
/** /**
* poster_id * poster_id 海报id
*/ */
private String posterId; private String posterId;
/** /**
* 阵容编号 * 阵容编号
*/ */
private Integer lineupNum; private String lineupNum;
/** /**
* 音乐人id * 音乐人id
...@@ -59,5 +59,13 @@ public class SweetStrawberryPosterLineup implements Serializable { ...@@ -59,5 +59,13 @@ public class SweetStrawberryPosterLineup implements Serializable {
*/ */
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
private static final SweetStrawberryPosterLineup obj = new SweetStrawberryPosterLineup();
public static SweetStrawberryPosterLineup getNew() {
try {
return (SweetStrawberryPosterLineup) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetStrawberryPosterLineup();
}
}
} }
...@@ -6,7 +6,10 @@ import com.liquidnet.commons.lang.util.CurrentUtil; ...@@ -6,7 +6,10 @@ import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.adam.dto.vo.*; import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.service.AdamRdmService; import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserMemberService; import com.liquidnet.service.adam.service.IAdamUserMemberService;
import com.liquidnet.service.adam.util.QueueUtils;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -27,6 +30,8 @@ import javax.validation.constraints.NotBlank; ...@@ -27,6 +30,8 @@ import javax.validation.constraints.NotBlank;
@RestController @RestController
@RequestMapping("member") @RequestMapping("member")
public class AdamMemberController { public class AdamMemberController {
@Autowired
QueueUtils queueUtils;
@Autowired @Autowired
AdamRdmService adamRdmService; AdamRdmService adamRdmService;
@Autowired @Autowired
...@@ -80,7 +85,7 @@ public class AdamMemberController { ...@@ -80,7 +85,7 @@ public class AdamMemberController {
return ResponseDto.success(adamRdmService.getMemberRightsDetailVoByRightsId(memberId, mrightsId)); return ResponseDto.success(adamRdmService.getMemberRightsDetailVoByRightsId(memberId, mrightsId));
} }
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 4)
@ApiOperation(value = "会员开售状态") @ApiOperation(value = "会员开售状态")
@GetMapping("onsale") @GetMapping("onsale")
public ResponseDto<Integer> onsale() { public ResponseDto<Integer> onsale() {
...@@ -92,6 +97,57 @@ public class AdamMemberController { ...@@ -92,6 +97,57 @@ public class AdamMemberController {
return ResponseDto.success(1); return ResponseDto.success(1);
} }
@ApiOperationSupport(order = 5)
@ApiOperation(value = "会员卡信息")
@GetMapping("joininfo")
public ResponseDto<AdamMemberJoinusVo> joininfo() {
String currentUid = CurrentUtil.getCurrentUid();
AdamMemberJoinusVo joinusVo = adamRdmService.getMemberJoinusVo();
AdamUserInfoVo userInfoVo = null;
if (!StringUtils.isEmpty(currentUid)) {
userInfoVo = adamRdmService.getUserInfoVoByUid(currentUid);
}
if (null == userInfoVo || StringUtils.startsWithIgnoreCase(userInfoVo.getQrCode(), "lN")) {
joinusVo.setState(0);
} else {
AdamUserMemberVo userMemberVo = adamRdmService.getUserMemberVoByUid(currentUid);
joinusVo.setState(1);
joinusVo.setType(null != userMemberVo && userMemberVo.isActive() ? 50 : 10);
joinusVo.setQrCode(userInfoVo.getQrCode());
joinusVo.setCardface(adamRdmService.getMemberCardface(joinusVo.getType()));
}
return ResponseDto.success(joinusVo);
}
@ApiOperationSupport(order = 6)
@ApiOperation(value = "领取会员卡")
@GetMapping("joinus")
public ResponseDto<AdamMemberJoinusVo> joinus() {
AdamMemberJoinusVo joinusVo = adamRdmService.getMemberJoinusVo();
String currentUid = CurrentUtil.getCurrentUid();
AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(currentUid);
final String oldQrCode = userInfoVo.getQrCode();
if (StringUtils.startsWithIgnoreCase(oldQrCode, "lN")) {// `lN`开头即未领取,这里做领取操作
userInfoVo.setQrCode(adamRdmService.generateMemberUniqueSerialNumber(userInfoVo.getMobile()));
adamRdmService.setUserInfoVoByUid(currentUid, userInfoVo);
log.info("领取会员卡[UID:{},MOBILE:{},QR_CODE:{},OLD_QR_CODE:{}]", currentUid, userInfoVo.getMobile(), userInfoVo.getQrCode(), oldQrCode);
queueUtils.sendMsgByRedis(MQConst.AdamQueue.SQL_UCENTER.getKey(),
SqlMapping.get("adam_user_info.update_qr_code", userInfoVo.getQrCode(), currentUid)
);
}
AdamUserMemberVo userMemberVo = adamRdmService.getUserMemberVoByUid(currentUid);
joinusVo.setType(null != userMemberVo && userMemberVo.isActive() ? 50 : 10);
joinusVo.setState(1);
joinusVo.setQrCode(userInfoVo.getQrCode());
joinusVo.setCardface(adamRdmService.getMemberCardface(joinusVo.getType()));
return ResponseDto.success(joinusVo);
}
/* ------------------------------------------------------------|@API:RSC */ /* ------------------------------------------------------------|@API:RSC */
@ApiOperationSupport(order = 99) @ApiOperationSupport(order = 99)
......
...@@ -17,6 +17,11 @@ import org.springframework.util.CollectionUtils; ...@@ -17,6 +17,11 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.Month;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalField;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -816,19 +821,51 @@ public class AdamRdmService { ...@@ -816,19 +821,51 @@ public class AdamRdmService {
return vo; return vo;
} }
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */
public String generateMemberUniqueSerialNumber(String mobile) {
LocalDateTime now = LocalDateTime.now();
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */ String snT = String.format("%s%sMS%s", now.getYear(), now.getMonthValue(), mobile.substring(7)).substring(2);
String sn = snT.replace("MS", String.valueOf(now.getLong(ChronoField.MILLI_OF_SECOND)));
Object o = redisUtil.get(AdamRedisConst.SERIAL_NUMBER_MEMBER.concat(sn));
while (null != o) {
String nano = String.valueOf(System.nanoTime());
sn = snT.replace("MS", nano.substring(nano.length() - 3));
o = redisUtil.get(AdamRedisConst.SERIAL_NUMBER_MEMBER.concat(sn));
}
LocalDateTime lastDayTime = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59);
redisUtil.set(sn, 1, ChronoUnit.SECONDS.between(now, lastDayTime));
return sn;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */
public String getMemberCardface(int type) {
return (String) redisUtil.get(AdamRedisConst.INFO_MEMBER_CARDFACE.concat(String.valueOf(type)));
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */
public AdamMemberJoinusVo getMemberJoinusVo() {
long s = System.currentTimeMillis();
AdamMemberJoinusVo vo = (AdamMemberJoinusVo) redisUtil.get(AdamRedisConst.INFO_MEMBER_JOINUS);
if (null == vo) {
vo = AdamMemberJoinusVo.getNew();
vo.setTitle("摩登天空会员卡");
vo.setSubTitle("摩登天空专属会员卡");
vo.setType(0);
vo.setState(0);
vo.setCardface(this.getMemberCardface(0));
vo.setInterestsDetail("1、加入登登登VIP俱乐部所获优惠及权益,不可向他人销售及转让\\r\\n2、如需在移动设备使用本商品,必须使用最新版APP\\r\\n3、做出不合适举动的用户将限制资格,或剥夺会员资格");
redisUtil.set(AdamRedisConst.INFO_MEMBER_JOINUS, vo);
}
log.debug("#RDM耗时:{}ms", System.currentTimeMillis() - s);
return vo;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */
......
...@@ -8,6 +8,7 @@ adam_user.close=UPDATE adam_user SET `state`=2, updated_at=?, closed_at=? WHERE ...@@ -8,6 +8,7 @@ adam_user.close=UPDATE adam_user SET `state`=2, updated_at=?, closed_at=? WHERE
adam_user_info.add=INSERT INTO adam_user_info (`uid`, nickname, avatar, qr_code) VALUES (?,?,?,?) adam_user_info.add=INSERT INTO adam_user_info (`uid`, nickname, avatar, qr_code) VALUES (?,?,?,?)
adam_user_info.edit=UPDATE adam_user_info SET nickname=?, sex=?, birthday=?, area=?, signature=?, avatar=?, background=?, tag_me=? WHERE uid=? adam_user_info.edit=UPDATE adam_user_info SET nickname=?, sex=?, birthday=?, area=?, signature=?, avatar=?, background=?, tag_me=? WHERE uid=?
adam_user_info.update_by_member=UPDATE adam_user_info SET birthday=?, area=? WHERE uid=? adam_user_info.update_by_member=UPDATE adam_user_info SET birthday=?, area=? WHERE uid=?
adam_user_info.update_qr_code=UPDATE adam_user_info SET qr_code=? WHERE uid=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_real_name.add=INSERT INTO adam_real_name (real_name_id, `uid`, `type`, `name`, id_card, `state`, created_at) VALUES (?,?,?,?,?,?,?) adam_real_name.add=INSERT INTO adam_real_name (real_name_id, `uid`, `type`, `name`, id_card, `state`, created_at) VALUES (?,?,?,?,?,?,?)
......
...@@ -13,6 +13,9 @@ public class TestAdam { ...@@ -13,6 +13,9 @@ public class TestAdam {
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
int dbs = scanner.nextInt(); int dbs = scanner.nextInt();
String[] keys = { String[] keys = {
"adam:info:member:cardface0",
"adam:info:member:cardface10",
"adam:info:member:cardface50",
"adam:incr:member_no", "adam:incr:member_no",
"adam:ad:info", "adam:ad:info",
"adam:blacklist:member:uid", "adam:blacklist:member:uid",
...@@ -44,6 +47,7 @@ public class TestAdam { ...@@ -44,6 +47,7 @@ public class TestAdam {
"adam:info:morder:331587681810022407979836", "adam:info:morder:331587681810022407979836",
"adam:info:member:simple", "adam:info:member:simple",
"adam:info:member:joinus",
"adam:info:member:category:1", "adam:info:member:category:1",
"adam:info:member:agreement", "adam:info:member:agreement",
"adam:info:member:rights:1", "adam:info:member:rights:1",
......
...@@ -151,8 +151,16 @@ create table candy_common_coupon ...@@ -151,8 +151,16 @@ create table candy_common_coupon
comment varchar(255) comment varchar(255)
) engine = InnoDB comment '公有券信息'; ) engine = InnoDB comment '公有券信息';
-- >>------------------------------------------------------------------------------------|20211125会员券发放调整 -- >>------------------------------------------------------------------------------------|20211125会员券发放调整
# `candy_coupon.exclusive`,按实际需求场景灵活使用,目前`candy_coupon.exclusive`用于根据会员有效期设置券有效期; # 专享标识[0-常规|1-会员专属]
alter table candy_mgt_coupon add exclusively int default 0 null comment '专享标识[0-常规|1-会员专属]' after event_at; # <p>
# 变更前:`candy_coupon.exclusive`用于根据会员有效期设置券有效期及标识用户端券分类(普通券、会员券等);
# 变更后:
# `candy_coupon.exclusive`废除
# 实际发放逻辑中,原标识"是否根据会员有效期设置券有效期"`candy_coupon.exclusive`字段改为`candy_mgt_coupon.exclusively`
# `candy_user_coupon``candy_common_coupon`中添加`exclusive`字段,发放时直接由`candy_mgt_coupon.exclusively`赋值该属性
alter table candy_mgt_coupon add exclusively smallint default 0 null comment '专享标识[0-常规|1-会员专属]' after event_at;
alter table candy_user_coupon add exclusive smallint null comment '专享标识[0-常规|1-会员礼包]' after coupon_id;
alter table candy_common_coupon add exclusive smallint null comment '专享标识[0-常规|1-会员礼包]' after coupon_id;
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerSweetPosterRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_POSTER;
@Configuration
public class ConsumerSweetPosterRdsReceiverConfig {
@Autowired
ConsumerSweetPosterRdsReceiver consumerSweetPosterRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/*
*
* */
private Subscription posterSqlRemind(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_POSTER.getGroup(), SWEET_POSTER.name() + t),
StreamOffset.create(SWEET_POSTER.getKey(), ReadOffset.lastConsumed()), consumerSweetPosterRdsReceiver
);
}
@Bean
public Subscription subscriptionSqlRemind(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = posterSqlRemind(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlRemind2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = posterSqlRemind(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlRemind3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = posterSqlRemind(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerSweetPosterRdsReceiver extends AbstractSqlRedisReceiver{
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_POSTER.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_POSTER.getGroup();
}
}
...@@ -161,6 +161,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -161,6 +161,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
commonCoupon.setCcouponId(IDGenerator.nextTimeId2()); commonCoupon.setCcouponId(IDGenerator.nextTimeId2());
commonCoupon.setMcouponId(mgtCoupon.getMcouponId()); commonCoupon.setMcouponId(mgtCoupon.getMcouponId());
commonCoupon.setCouponId(coupon.getCouponId()); commonCoupon.setCouponId(coupon.getCouponId());
commonCoupon.setExclusive(mgtCoupon.getExclusively());
commonCoupon.setState(1); commonCoupon.setState(1);
commonCoupon.setRanged(mgtCoupon.getEventType()); commonCoupon.setRanged(mgtCoupon.getEventType());
commonCoupon.setOperator("system"); commonCoupon.setOperator("system");
...@@ -211,7 +212,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -211,7 +212,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
log.info("发放券处理中:目标全体会员[总数:{},发放量:{}]", userMemberCount, eventAmt); log.info("发放券处理中:目标全体会员[总数:{},发放量:{}]", userMemberCount, eventAmt);
// 会员权益券失效时间duedAt需要同步会员到期时间expiryAt // 会员权益券失效时间duedAt需要同步会员到期时间expiryAt
boolean isMemberRightsCoupon = coupon.getExclusive() == 1; Integer exclusively = mgtCoupon.getExclusively();
boolean isMemberRightsCoupon = exclusively == 1;
queryWrapper.select(AdamUserMember::getUid).orderByAsc(AdamUserMember::getMid); queryWrapper.select(AdamUserMember::getUid).orderByAsc(AdamUserMember::getMid);
while (totalCount > 0) { while (totalCount > 0) {
initUserCouponList.clear(); initUserCouponList.clear();
...@@ -231,6 +233,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -231,6 +233,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setMcouponId(mgtCoupon.getMcouponId()); userCoupon.setMcouponId(mgtCoupon.getMcouponId());
userCoupon.setUid(userMember.getUid()); userCoupon.setUid(userMember.getUid());
userCoupon.setCouponId(coupon.getCouponId()); userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setExclusive(exclusively);
userCoupon.setState(1); userCoupon.setState(1);
userCoupon.setBindAt(coupon.getEffectAt()); userCoupon.setBindAt(coupon.getEffectAt());
// userCoupon.setDuedAt(coupon.getExpireAt()); // userCoupon.setDuedAt(coupon.getExpireAt());
...@@ -292,7 +295,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -292,7 +295,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil(); AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
// 指定手机号发放券中,会员权益券失效时间duedAt需要同步会员到期时间expiryAt // 指定手机号发放券中,会员权益券失效时间duedAt需要同步会员到期时间expiryAt
boolean isMemberRightsCoupon = coupon.getExclusive() == 1; Integer exclusively = mgtCoupon.getExclusively();
boolean isMemberRightsCoupon = exclusively == 1;
for (int i = 0; i < eventAmt; i++) { for (int i = 0; i < eventAmt; i++) {
for (String r : eventLimitArr) { for (String r : eventLimitArr) {
String uid = (String) redisAdamUtil.get(AdamRedisConst.IDENTITY_MOBILE.concat(r)); String uid = (String) redisAdamUtil.get(AdamRedisConst.IDENTITY_MOBILE.concat(r));
...@@ -303,6 +307,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -303,6 +307,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setMcouponId(mgtCoupon.getMcouponId()); userCoupon.setMcouponId(mgtCoupon.getMcouponId());
userCoupon.setUid(uid); userCoupon.setUid(uid);
userCoupon.setCouponId(coupon.getCouponId()); userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setExclusive(exclusively);
userCoupon.setState(1); userCoupon.setState(1);
userCoupon.setBindAt(coupon.getEffectAt()); userCoupon.setBindAt(coupon.getEffectAt());
......
...@@ -8,6 +8,7 @@ CREATE TABLE `sweet_strawberry_poster` ...@@ -8,6 +8,7 @@ CREATE TABLE `sweet_strawberry_poster`
`union_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'union_id', `union_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'union_id',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名', `nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
`city_name` varchar(255) NOT NULL DEFAULT '' COMMENT '城市', `city_name` varchar(255) NOT NULL DEFAULT '' COMMENT '城市',
`city_code` varchar(255) NOT NULL DEFAULT '' COMMENT '城市code',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`), PRIMARY KEY (`mid`),
...@@ -24,7 +25,7 @@ CREATE TABLE `sweet_strawberry_poster_lineup` ...@@ -24,7 +25,7 @@ CREATE TABLE `sweet_strawberry_poster_lineup`
`mid` bigint unsigned NOT NULL AUTO_INCREMENT, `mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`lineup_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'lineup_id', `lineup_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'lineup_id',
`poster_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'poster_id', `poster_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'poster_id',
`lineup_num` int NOT NULL DEFAULT 0 COMMENT '阵容编号', `lineup_num` varchar(255) NOT NULL DEFAULT 0 COMMENT '阵容编号',
`musician_id` int NOT NULL DEFAULT 0 COMMENT '音乐人id', `musician_id` int NOT NULL DEFAULT 0 COMMENT '音乐人id',
`musician_name` varchar(255) NOT NULL DEFAULT '' COMMENT '音乐人姓名', `musician_name` varchar(255) NOT NULL DEFAULT '' COMMENT '音乐人姓名',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
......
package com.liquidnet.service.sweet.controller; package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.service.ISweetStrawberryPosterService; import com.liquidnet.service.sweet.service.ISweetStrawberryPosterService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
/** /**
* <p> * <p>
...@@ -24,4 +25,11 @@ public class SweetStrawberryPosterController { ...@@ -24,4 +25,11 @@ public class SweetStrawberryPosterController {
@Autowired @Autowired
private ISweetStrawberryPosterService posterService; private ISweetStrawberryPosterService posterService;
@PostMapping("addUserLikeMusician")
@ApiOperation("用户添加喜爱音乐人")
public ResponseDto<Boolean> addUserLikeMusician(@RequestBody SweetStrawberryParam sweetStrawberryParam){
return posterService.addUserLikeMusician(sweetStrawberryParam);
}
} }
package com.liquidnet.service.sweet.service.impl; package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawListParam;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawMusicianParam;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.entity.SweetStrawberryPoster; import com.liquidnet.service.sweet.entity.SweetStrawberryPoster;
import com.liquidnet.service.sweet.mapper.SweetStrawberryPosterMapper; import com.liquidnet.service.sweet.mapper.SweetStrawberryPosterMapper;
import com.liquidnet.service.sweet.service.ISweetStrawberryPosterService; import com.liquidnet.service.sweet.service.ISweetStrawberryPosterService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
/** /**
* <p> * <p>
* 2021草莓音乐节海报活动表 服务实现类 * 2021草莓音乐节海报活动表 服务实现类
...@@ -17,4 +34,53 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +34,53 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SweetStrawberryPosterServiceImpl extends ServiceImpl<SweetStrawberryPosterMapper, SweetStrawberryPoster> implements ISweetStrawberryPosterService { public class SweetStrawberryPosterServiceImpl extends ServiceImpl<SweetStrawberryPosterMapper, SweetStrawberryPoster> implements ISweetStrawberryPosterService {
@Autowired
QueueUtils queueUtils;
@Autowired
private RedisDataUtils redisDataUtils;
@Autowired
StringRedisTemplate stringRedisTemplate;
@Override
public ResponseDto<Boolean> addUserLikeMusician(SweetStrawberryParam sweetStrawberry) {
String posterId = IDGenerator.nextSnowId(); //生成海报id
LocalDateTime localDateTime = DateUtil.asLocalDateTime(DateUtil.now()); //生成创建时间
String openId=sweetStrawberry.getOpenId();
String unionId = sweetStrawberry.getUnionId();
String nickname=sweetStrawberry.getNickname();
String cityCode=sweetStrawberry.getCityCode();
String cityName=sweetStrawberry.getCityName();
List<SweetStrawListParam> musicianList = sweetStrawberry.getMusicianList();
for (SweetStrawListParam sweetStrawListParam : musicianList) {
List<SweetStrawMusicianParam> lineup = sweetStrawListParam.getLineup();
for (SweetStrawMusicianParam param : lineup) {
String lineupNum = param.getLineupNum();
Integer musicianId = param.getMusicianId();
String musicianName = param.getMusicianName();
String lineupId=IDGenerator.nextSnowId();
//存sql
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_strawberry_poster_Musician"));
sqlsDataA.add(new Object[]{lineupId, posterId,lineupNum, musicianId, musicianName,localDateTime,null});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_POSTER.getKey(), SqlMapping.gets(sqls, sqlsDataA));
}
}
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_strawberry_poster_user"));
sqlsDataA.add(new Object[]{openId,posterId,unionId,nickname,cityName,cityCode,localDateTime,null});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_POSTER.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
//存reids
redisDataUtils.setSweetMusician(sweetStrawberry);
return ResponseDto.success();
}
} }
...@@ -11,6 +11,7 @@ import com.liquidnet.service.sweet.dto.SweetManualAppletDto; ...@@ -11,6 +11,7 @@ import com.liquidnet.service.sweet.dto.SweetManualAppletDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistList2Dto; import com.liquidnet.service.sweet.dto.SweetManualArtistList2Dto;
import com.liquidnet.service.sweet.dto.SweetManualArtistListDto; import com.liquidnet.service.sweet.dto.SweetManualArtistListDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistStageListDto; import com.liquidnet.service.sweet.dto.SweetManualArtistStageListDto;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.entity.*; import com.liquidnet.service.sweet.entity.*;
...@@ -428,6 +429,11 @@ public class RedisDataUtils { ...@@ -428,6 +429,11 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(sweetAnswerVo.getPhone()); String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(sweetAnswerVo.getPhone());
redisUtil.set(redisKey, sweetAnswerVo); redisUtil.set(redisKey, sweetAnswerVo);
} }
//草莓音乐节活动海报相关
public void setSweetMusician(SweetStrawberryParam sweetStrawberry) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_STRAWBERRY_POSTER.concat(sweetStrawberry.getUnionId());
redisUtil.set(redisKey, sweetStrawberry);
}
public SweetAnswerVo getSweetAnswer(String phone) { public SweetAnswerVo getSweetAnswer(String phone) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(phone); String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(phone);
......
...@@ -52,4 +52,8 @@ integral_activity_draw.update=UPDATE sweet_integral_activity_draw SET receiving_ ...@@ -52,4 +52,8 @@ integral_activity_draw.update=UPDATE sweet_integral_activity_draw SET receiving_
sweet_applet_users.insert=INSERT INTO sweet_applet_users (applet_user_id,user_id,open_id,union_id,phone_number,pure_phone_number,country_code,type) VALUES (?,?,?,?,?,?,?,?) sweet_applet_users.insert=INSERT INTO sweet_applet_users (applet_user_id,user_id,open_id,union_id,phone_number,pure_phone_number,country_code,type) VALUES (?,?,?,?,?,?,?,?)
# --------------------------微信用户信息表公众号-------------------------- # --------------------------微信用户信息表公众号--------------------------
sweet_wechat_users.insert=INSERT INTO sweet_wechat_users (wechat_user_id,type,open_id,union_id,nickname,sex_desc,sex,head_img_url,language,country,province,city,subscribe_time,subscribe_scene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) sweet_wechat_users.insert=INSERT INTO sweet_wechat_users (wechat_user_id,type,open_id,union_id,nickname,sex_desc,sex,head_img_url,language,country,province,city,subscribe_time,subscribe_scene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
sweet_wechat_users.delete=DELETE FROM sweet_wechat_users WHERE union_id = ? and type = ? sweet_wechat_users.delete=DELETE FROM sweet_wechat_users WHERE union_id = ? and type = ?
\ No newline at end of file
#---------------------------音乐节活动海报--------------------------------
sweet_strawberry_poster_user=INSERT INTO sweet_strawberry_poster(open_id,poster_id,union_id,nickname,city_name,city_code,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?)
sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(lineup_id,poster_id,lineup_num,musician_id,musician_name,created_at,updated_at) VALUES (?,?,?,?,?,?,?)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment