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

Commit af8d1279 authored by 胡佳晨's avatar 胡佳晨

sweet luckDraw 抽奖

parent 9ea55fc3
...@@ -72,6 +72,8 @@ public class MQConst { ...@@ -72,6 +72,8 @@ public class MQConst {
public enum SweetQueue { public enum SweetQueue {
ARTISTS_RELATION("sweet:stream:rk.artists.relation", "group.artists.relation", "用户-关系"), ARTISTS_RELATION("sweet:stream:rk.artists.relation", "group.artists.relation", "用户-关系"),
ARTISTS_RELATION_MDSK("sweet:stream:rk.artists.mdsk.relation", "group.artists.mdsk.relation", "用户-关系"),
LUCK_DRAW("sweet:stream:rk.luckDraw", "group.luckDraw", "用户-抽奖"),
; ;
private final String key; private final String key;
......
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerSweetSqlLuckDrawRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerSweetSqlUserRelationMDSKRdsReceiver;
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.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
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.ARTISTS_RELATION_MDSK;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.LUCK_DRAW;
@Configuration
public class ConsumerSweetSqlLuckDrawRedisStreamConfig {
@Autowired
ConsumerSweetSqlLuckDrawRdsReceiver consumerSweetSqlLuckDrawRdsReceiver;
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);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlLuckDraw(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(LUCK_DRAW.getGroup(), LUCK_DRAW.name() + t),
StreamOffset.create(LUCK_DRAW.getKey(), ReadOffset.lastConsumed()), consumerSweetSqlLuckDrawRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlLuckDraw(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlLuckDraw(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlLuckDraw2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlLuckDraw(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlLuckDraw3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlLuckDraw(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerSweetSqlUserRelationMDSKRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerSweetSqlUserRelationRdsReceiver;
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.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
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.ARTISTS_RELATION;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.ARTISTS_RELATION_MDSK;
@Configuration
public class ConsumerSweetSqlUserRelationMDSKRedisStreamConfig {
@Autowired
ConsumerSweetSqlUserRelationMDSKRdsReceiver consumerSweetSqlUserRelationMDSKRdsReceiver;
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);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlUserRelation(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(ARTISTS_RELATION_MDSK.getGroup(), ARTISTS_RELATION_MDSK.name() + t),
StreamOffset.create(ARTISTS_RELATION_MDSK.getKey(), ReadOffset.lastConsumed()), consumerSweetSqlUserRelationMDSKRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlUserRelation(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlUserRelation(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlUserRelation2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlUserRelation(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlUserRelation3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlUserRelation(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerSweetSqlLuckDrawRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.LUCK_DRAW.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.LUCK_DRAW.getGroup();
}
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerSweetSqlUserRelationMDSKRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.ARTISTS_RELATION_MDSK.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.ARTISTS_RELATION_MDSK.getGroup();
}
}
...@@ -420,3 +420,20 @@ CREATE TABLE `sweet_user_relation_mdsk` ...@@ -420,3 +420,20 @@ CREATE TABLE `sweet_user_relation_mdsk`
ROW_FORMAT = DYNAMIC COMMENT '用户 收藏/喜欢等状态'; ROW_FORMAT = DYNAMIC COMMENT '用户 收藏/喜欢等状态';
-- 抽奖表
drop TABLE if exists `sweet_luck_draw`;
CREATE TABLE `sweet_luck_draw`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(200) NOT NULL DEFAULT '' COMMENT '用户id',
`luck_draw_num` varchar(200) NOT NULL DEFAULT '' COMMENT '抽奖编号',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1有资格 0无资格',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_wechat_user_user_id` (`user_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '抽奖表';
XADD sweet:stream:rk.artists.relation * 0 0 XADD sweet:stream:rk.artists.relation * 0 0
XGROUP CREATE sweet:stream:rk.artists.relation group.artists.relation 0 XGROUP CREATE sweet:stream:rk.artists.relation group.artists.relation 0
-- MDSK --
XADD sweet:stream:rk.artists.mdsk.relation * 0 0
XGROUP CREATE sweet:stream:rk.artists.mdsk.relation group.artists.mdsk.relation 0
-- 抽奖 --
XADD sweet:stream:rk.luckDraw * 0 0
XGROUP CREATE sweet:stream:rk.luckDraw group.luckDraw 0
\ No newline at end of file
...@@ -13,6 +13,7 @@ public class SweetConstant { ...@@ -13,6 +13,7 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_ARTISTS_RELATION = "sweet:artists:relation:uid:"; public final static String REDIS_KEY_SWEET_ARTISTS_RELATION = "sweet:artists:relation:uid:";
public final static String REDIS_KEY_SWEET_ARTISTS_DETAILS = "sweet:artists:details:"; public final static String REDIS_KEY_SWEET_ARTISTS_DETAILS = "sweet:artists:details:";
public final static String REDIS_KEY_SWEET_SHOP = "sweet:artists:shop:manual:"; public final static String REDIS_KEY_SWEET_SHOP = "sweet:artists:shop:manual:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:artists:luckDraw:uid:";
public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:"; public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:";
public static final String REDIS_KEY_SWEET_REMIND_ALL = "sweet:remind:unionId*"; public static final String REDIS_KEY_SWEET_REMIND_ALL = "sweet:remind:unionId*";
......
...@@ -239,9 +239,9 @@ public class SweetAppletController { ...@@ -239,9 +239,9 @@ public class SweetAppletController {
if (vo.getWatchList() != null) { if (vo.getWatchList() != null) {
watchSize = vo.getWatchList().size(); watchSize = vo.getWatchList().size();
} }
HashMap<String,Object> map = CollectionUtil.mapStringObject(); HashMap<String, Object> map = CollectionUtil.mapStringObject();
map.put("signSize",signSize); map.put("signSize", signSize);
map.put("watchSize",watchSize); map.put("watchSize", watchSize);
return ResponseDto.success(map); return ResponseDto.success(map);
} }
...@@ -319,4 +319,33 @@ public class SweetAppletController { ...@@ -319,4 +319,33 @@ public class SweetAppletController {
return ResponseDto.success(vo); return ResponseDto.success(vo);
} }
@GetMapping("luckDraw/status")
@ApiOperation("抽奖状态")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "uid", value = "用户id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "luckDrawNum", value = "抽奖编号", required = true),
})
public ResponseDto<Boolean> luckDrawStatus(@RequestParam String uid,
@RequestParam String luckDrawNum) {
if (uid.equalsIgnoreCase("0")) {
return ResponseDto.failure();
}
return ResponseDto.success(redisDataUtils.getLuckDrawStatus(uid, luckDrawNum));
}
@PostMapping("luckDraw")
@ApiOperation("抽奖")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "uid", value = "用户id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "luckDrawNum", value = "抽奖编号", required = true),
})
public ResponseDto<Boolean> luckDraw(@RequestParam String uid,
@RequestParam String luckDrawNum) {
if (uid.equalsIgnoreCase("0")) {
return ResponseDto.failure();
}
redisDataUtils.changeLuckDrawStatus(uid, luckDrawNum);
return ResponseDto.success();
}
} }
...@@ -227,7 +227,7 @@ public class RedisDataUtils { ...@@ -227,7 +227,7 @@ public class RedisDataUtils {
vo.getSignList().remove(artistsId); vo.getSignList().remove(artistsId);
sqls.add(SqlMapping.get("sweet_user_relation.delete")); sqls.add(SqlMapping.get("sweet_user_relation.delete"));
sqlsDataA.add(new Object[]{ sqlsDataA.add(new Object[]{
uid, artistsId, manualId,2 uid, artistsId, manualId, 2
}); });
} else { } else {
vo.getSignList().add(artistsId); vo.getSignList().add(artistsId);
...@@ -251,7 +251,7 @@ public class RedisDataUtils { ...@@ -251,7 +251,7 @@ public class RedisDataUtils {
vo.getWatchList().remove(artistsId); vo.getWatchList().remove(artistsId);
sqls.add(SqlMapping.get("sweet_user_relation.delete")); sqls.add(SqlMapping.get("sweet_user_relation.delete"));
sqlsDataA.add(new Object[]{ sqlsDataA.add(new Object[]{
uid, artistsId, manualId,1 uid, artistsId, manualId, 1
}); });
} else { } else {
vo.getWatchList().add(artistsId); vo.getWatchList().add(artistsId);
...@@ -309,6 +309,7 @@ public class RedisDataUtils { ...@@ -309,6 +309,7 @@ public class RedisDataUtils {
redisUtil.set(redisKey, sweetRemindVo); redisUtil.set(redisKey, sweetRemindVo);
} }
public void delSweetRemind(String unionId) { public void delSweetRemind(String unionId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_REMIND.concat(unionId); String redisKey = SweetConstant.REDIS_KEY_SWEET_REMIND.concat(unionId);
redisUtil.del(redisKey); redisUtil.del(redisKey);
...@@ -345,4 +346,26 @@ public class RedisDataUtils { ...@@ -345,4 +346,26 @@ public class RedisDataUtils {
return (SweetArtists) obj; return (SweetArtists) obj;
} }
} }
//获取抽奖状态
public Boolean getLuckDrawStatus(String uid, String luckDrawNum) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(uid).concat(":luckDrawNum:" + luckDrawNum);
return redisUtil.hasKey(redisKey);
}
//修改抽奖状态
public void changeLuckDrawStatus(String uid, String luckDrawNum) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(uid).concat(":luckDrawNum:" + luckDrawNum);
redisUtil.set(redisKey, 1);
sqls.add(SqlMapping.get("sweet_luck_draw.insert"));
sqlsDataA.add(new Object[]{
uid, luckDrawNum, now
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.LUCK_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
}
} }
...@@ -259,7 +259,7 @@ public class RedisMDSKDataUtils { ...@@ -259,7 +259,7 @@ public class RedisMDSKDataUtils {
} }
redisUtil.set(redisKey, vo); redisUtil.set(redisKey, vo);
queueUtils.sendMsgByRedis(MQConst.SweetQueue.ARTISTS_RELATION.getKey(), queueUtils.sendMsgByRedis(MQConst.SweetQueue.ARTISTS_RELATION_MDSK.getKey(),
SqlMapping.gets(sqls, sqlsDataA)); SqlMapping.gets(sqls, sqlsDataA));
} }
......
...@@ -53,3 +53,6 @@ kylin_order_refund_entities.overtimeRefund=INSERT INTO kylin_order_refund_entiti ...@@ -53,3 +53,6 @@ kylin_order_refund_entities.overtimeRefund=INSERT INTO kylin_order_refund_entiti
# ------------------------用户关系---------------------------- # ------------------------用户关系----------------------------
sweet_user_relation.insert=INSERT INTO sweet_user_relation (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation.insert=INSERT INTO sweet_user_relation (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?)
sweet_user_relation.delete=DELETE FROM sweet_user_relation WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? sweet_user_relation.delete=DELETE FROM sweet_user_relation WHERE user_id = ? and target_id = ? and manual_id = ? and type = ?
# ------------------------用户关系----------------------------
sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (user_id,luck_draw_num,status,created_at) VALUES (?,?,1,?)
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