记得上下班打卡 | 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 {
*/
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_CATEGORY = PREFIX.concat("info:member:category:");
public static final String INFO_MEMBER_PRICE = PREFIX.concat("info:member:price:");
......@@ -55,6 +57,8 @@ public class AdamRedisConst {
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";
......
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,10 +120,9 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
try {
return (AdamMemberVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new AdamMemberVo();
}
}
public AdamMemberVo copy(AdamMember source) {
if (null == source) return this;
......
......@@ -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_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;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.entity.SweetStrawberryPoster;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISweetStrawberryPosterService extends IService<SweetStrawberryPoster> {
ResponseDto<Boolean> addUserLikeMusician(SweetStrawberryParam sweetStrawberry);
}
......@@ -34,6 +34,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -248,6 +249,32 @@ public class AdamMemberAdminController extends BaseController {
@PostMapping("edit_coupon")
@ResponseBody
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();
memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getMrightsId, parameter.getMrightsId());
memberRightsLambdaQueryWrapper.eq(AdamMemberRights::getState, 1);
......
......@@ -228,6 +228,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
mgtCouponOper.setEventType(2);
//mgtCouponOper.setEventLimit();
//mgtCouponOper.setEventAt();
mgtCouponOper.setExclusively(1);
mgtCouponOper.setOperator(operator);
mgtCouponOper.setCreatedAt(nowTime);
......@@ -298,6 +299,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
mgtCouponOper.setState(10);// 发放状态[0-未发放|1-已发放|2-无效|9-发放中|10-会员礼包初始模版]
mgtCouponOper.setEventAmt(parameter.getEventAmt());
mgtCouponOper.setEventType(2);
mgtCouponOper.setExclusively(1);
mgtCouponOper.setOperator(operator);
mgtCouponOper.setCreatedAt(nowTime);
......
......@@ -85,6 +85,8 @@ public class MQConst {
SWEET_CITY_VOTE("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"),
SWEET_POSTER("sweet:stream:rk.userLikeMusician", "group.userLikeMusician", "用户喜欢的音乐人"),
;
private final String key;
......
......@@ -101,6 +101,7 @@ global-auth:
- ${liquidnet.info.context}/ts
- ${liquidnet.info.context}/send
- ${liquidnet.info.context}/member/info
- ${liquidnet.info.context}/member/joininfo
- ${liquidnet.info.context}/member/info/rights
- ${liquidnet.info.context}/member/onsale
- ${liquidnet.info.context}/member/check/depth
......
......@@ -19,7 +19,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
private String title;
private String label;
private String notice;
private Integer exclusive;
//private Integer exclusive;
private Integer busiType;
private Integer couType;
private Integer bindType;
......@@ -44,6 +44,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
private String ccouponId;
private String mcouponId;
//private String couponId;
private Integer exclusive;
private Integer state;
private Integer ranged;
//private String operator;
......@@ -71,7 +72,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
this.setTitle(coupon.getTitle());
this.setLabel(coupon.getLabel());
this.setNotice(coupon.getNotice());
this.setExclusive(coupon.getExclusive());
//this.setExclusive(coupon.getExclusive());
this.setBusiType(coupon.getBusiType());
this.setCouType(coupon.getCouType());
this.setBindType(coupon.getBindType());
......@@ -90,6 +91,7 @@ public class CandyCommonCouponBasicDto implements Serializable ,Cloneable{
this.setCcouponId(commonCoupon.getCcouponId());
this.setMcouponId(commonCoupon.getMcouponId());
this.setExclusive(commonCoupon.getExclusive());
this.setState(commonCoupon.getState());
this.setRanged(commonCoupon.getRanged());
this.setCreatedAt(commonCoupon.getCreatedAt());
......
......@@ -19,7 +19,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
private String title;
private String label;
private String notice;
private Integer exclusive;
//private Integer exclusive;
private Integer busiType;
private Integer couType;
private Integer bindType;
......@@ -45,6 +45,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
private String mcouponId;
private String uid;
//private String couponId;
private Integer exclusive;
private Integer state;
private String ccode;
private LocalDateTime bindAt;
......@@ -77,7 +78,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setTitle(coupon.getTitle());
this.setLabel(coupon.getLabel());
this.setNotice(coupon.getNotice());
this.setExclusive(coupon.getExclusive());
//this.setExclusive(coupon.getExclusive());
this.setBusiType(coupon.getBusiType());
this.setCouType(coupon.getCouType());
this.setBindType(coupon.getBindType());
......@@ -95,6 +96,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setUcouponId(userCoupon.getUcouponId());
this.setMcouponId(userCoupon.getMcouponId());
this.setUid(userCoupon.getUid());
this.setExclusive(userCoupon.getExclusive());
this.setState(userCoupon.getState());
this.setCcode(userCoupon.getCcode());
this.setBindAt(userCoupon.getBindAt());
......
......@@ -37,6 +37,18 @@ public class CandyCommonCoupon implements Serializable {
*/
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-已过期]
*/
......
......@@ -2,11 +2,12 @@ package com.liquidnet.service.candy.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 券发放管理
......@@ -59,8 +60,11 @@ public class CandyMgtCoupon implements Serializable {
/**
* 专享标识[0-常规|1-会员专属]
* <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>
*/
private Integer exclusively;
......
......@@ -43,6 +43,18 @@ public class CandyUserCoupon implements Serializable,Cloneable {
*/
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-已使用]
*/
......
......@@ -8,7 +8,7 @@
<result column="title" jdbcType="VARCHAR" property="title"/>
<result column="label" jdbcType="VARCHAR" property="label"/>
<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="cou_type" jdbcType="SMALLINT" property="couType"/>
<result column="bind_type" jdbcType="SMALLINT" property="bindType"/>
......@@ -32,6 +32,7 @@
<result column="ccoupon_id" jdbcType="VARCHAR" property="ccouponId"/>
<result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId"/>
<!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />-->
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>
<result column="state" jdbcType="TINYINT" property="state"/>
<result column="ranged" jdbcType="TINYINT" property="ranged"/>
<!-- <result column="operator" jdbcType="VARCHAR" property="operator" />-->
......@@ -41,11 +42,11 @@
</resultMap>
<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.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>
<select id="selectMultiForCommonCouponBasicDto" resultMap="Rst_CommonCouponBasicDto">
......
......@@ -8,7 +8,7 @@
<result column="title" jdbcType="VARCHAR" property="title"/>
<result column="label" jdbcType="VARCHAR" property="label"/>
<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="cou_type" jdbcType="SMALLINT" property="couType"/>
<result column="bind_type" jdbcType="SMALLINT" property="bindType"/>
......@@ -33,6 +33,7 @@
<!-- <result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId" />-->
<result column="uid" jdbcType="VARCHAR" property="uid"/>
<!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />-->
<result column="exclusive" jdbcType="SMALLINT" property="exclusive"/>
<result column="state" jdbcType="TINYINT" property="state"/>
<result column="ccode" jdbcType="VARCHAR" property="ccode"/>
<result column="bind_at" jdbcType="TIMESTAMP" property="bindAt"/>
......@@ -43,11 +44,11 @@
</resultMap>
<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.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>
<select id="selectMultiForUserCouponBasicDto" resultMap="Rst_UserCouponBasicDto">
......
......@@ -25,17 +25,17 @@ public class SweetStrawberryPoster implements Serializable {
private Long mid;
/**
* poster_id
* poster_id 海报id
*/
private String posterId;
/**
* open_id
* open_id 微信id
*/
private String openId;
/**
* union_id
* union_id 用户id
*/
private String unionId;
......@@ -48,7 +48,10 @@ public class SweetStrawberryPoster implements Serializable {
* 城市
*/
private String cityName;
/**
* 城市code
*/
private String cityCode;
/**
* 创建时间
*/
......@@ -59,5 +62,14 @@ public class SweetStrawberryPoster implements Serializable {
*/
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 {
private String lineupId;
/**
* poster_id
* poster_id 海报id
*/
private String posterId;
/**
* 阵容编号
*/
private Integer lineupNum;
private String lineupNum;
/**
* 音乐人id
......@@ -59,5 +59,13 @@ public class SweetStrawberryPosterLineup implements Serializable {
*/
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;
import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.service.AdamRdmService;
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.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -27,6 +30,8 @@ import javax.validation.constraints.NotBlank;
@RestController
@RequestMapping("member")
public class AdamMemberController {
@Autowired
QueueUtils queueUtils;
@Autowired
AdamRdmService adamRdmService;
@Autowired
......@@ -80,7 +85,7 @@ public class AdamMemberController {
return ResponseDto.success(adamRdmService.getMemberRightsDetailVoByRightsId(memberId, mrightsId));
}
@ApiOperationSupport(order = 1)
@ApiOperationSupport(order = 4)
@ApiOperation(value = "会员开售状态")
@GetMapping("onsale")
public ResponseDto<Integer> onsale() {
......@@ -92,6 +97,57 @@ public class AdamMemberController {
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 */
@ApiOperationSupport(order = 99)
......
......@@ -17,6 +17,11 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
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.Arrays;
import java.util.List;
......@@ -816,19 +821,51 @@ public class AdamRdmService {
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
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.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 (?,?,?,?,?,?,?)
......
......@@ -13,6 +13,9 @@ public class TestAdam {
Scanner scanner = new Scanner(System.in);
int dbs = scanner.nextInt();
String[] keys = {
"adam:info:member:cardface0",
"adam:info:member:cardface10",
"adam:info:member:cardface50",
"adam:incr:member_no",
"adam:ad:info",
"adam:blacklist:member:uid",
......@@ -44,6 +47,7 @@ public class TestAdam {
"adam:info:morder:331587681810022407979836",
"adam:info:member:simple",
"adam:info:member:joinus",
"adam:info:member:category:1",
"adam:info:member:agreement",
"adam:info:member:rights:1",
......
......@@ -151,8 +151,16 @@ create table candy_common_coupon
comment varchar(255)
) engine = InnoDB comment '公有券信息';
-- >>------------------------------------------------------------------------------------|20211125会员券发放调整
# `candy_coupon.exclusive`,按实际需求场景灵活使用,目前`candy_coupon.exclusive`用于根据会员有效期设置券有效期;
alter table candy_mgt_coupon add exclusively int default 0 null comment '专享标识[0-常规|1-会员专属]' after event_at;
# 专享标识[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`赋值该属性
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
commonCoupon.setCcouponId(IDGenerator.nextTimeId2());
commonCoupon.setMcouponId(mgtCoupon.getMcouponId());
commonCoupon.setCouponId(coupon.getCouponId());
commonCoupon.setExclusive(mgtCoupon.getExclusively());
commonCoupon.setState(1);
commonCoupon.setRanged(mgtCoupon.getEventType());
commonCoupon.setOperator("system");
......@@ -211,7 +212,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
log.info("发放券处理中:目标全体会员[总数:{},发放量:{}]", userMemberCount, eventAmt);
// 会员权益券失效时间duedAt需要同步会员到期时间expiryAt
boolean isMemberRightsCoupon = coupon.getExclusive() == 1;
Integer exclusively = mgtCoupon.getExclusively();
boolean isMemberRightsCoupon = exclusively == 1;
queryWrapper.select(AdamUserMember::getUid).orderByAsc(AdamUserMember::getMid);
while (totalCount > 0) {
initUserCouponList.clear();
......@@ -231,6 +233,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setMcouponId(mgtCoupon.getMcouponId());
userCoupon.setUid(userMember.getUid());
userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setExclusive(exclusively);
userCoupon.setState(1);
userCoupon.setBindAt(coupon.getEffectAt());
// userCoupon.setDuedAt(coupon.getExpireAt());
......@@ -292,7 +295,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
// 指定手机号发放券中,会员权益券失效时间duedAt需要同步会员到期时间expiryAt
boolean isMemberRightsCoupon = coupon.getExclusive() == 1;
Integer exclusively = mgtCoupon.getExclusively();
boolean isMemberRightsCoupon = exclusively == 1;
for (int i = 0; i < eventAmt; i++) {
for (String r : eventLimitArr) {
String uid = (String) redisAdamUtil.get(AdamRedisConst.IDENTITY_MOBILE.concat(r));
......@@ -303,6 +307,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setMcouponId(mgtCoupon.getMcouponId());
userCoupon.setUid(uid);
userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setExclusive(exclusively);
userCoupon.setState(1);
userCoupon.setBindAt(coupon.getEffectAt());
......
......@@ -8,6 +8,7 @@ CREATE TABLE `sweet_strawberry_poster`
`union_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'union_id',
`nickname` 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 '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
......@@ -24,7 +25,7 @@ CREATE TABLE `sweet_strawberry_poster_lineup`
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`lineup_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'lineup_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_name` varchar(255) NOT NULL DEFAULT '' COMMENT '音乐人姓名',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
......
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* <p>
......@@ -24,4 +25,11 @@ public class SweetStrawberryPosterController {
@Autowired
private ISweetStrawberryPosterService posterService;
@PostMapping("addUserLikeMusician")
@ApiOperation("用户添加喜爱音乐人")
public ResponseDto<Boolean> addUserLikeMusician(@RequestBody SweetStrawberryParam sweetStrawberryParam){
return posterService.addUserLikeMusician(sweetStrawberryParam);
}
}
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.mapper.SweetStrawberryPosterMapper;
import com.liquidnet.service.sweet.service.ISweetStrawberryPosterService;
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 java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
* 2021草莓音乐节海报活动表 服务实现类
......@@ -17,4 +34,53 @@ import org.springframework.stereotype.Service;
@Service
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;
import com.liquidnet.service.sweet.dto.SweetManualArtistList2Dto;
import com.liquidnet.service.sweet.dto.SweetManualArtistListDto;
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.IntegralActivityVo;
import com.liquidnet.service.sweet.entity.*;
......@@ -428,6 +429,11 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(sweetAnswerVo.getPhone());
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) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(phone);
......
......@@ -53,3 +53,7 @@ sweet_applet_users.insert=INSERT INTO sweet_applet_users (applet_user_id,user_id
# --------------------------微信用户信息表公众号--------------------------
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_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