记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
a6aba19f
Commit
a6aba19f
authored
Oct 26, 2021
by
胡佳晨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交 代码 消费和做任务接口
parent
cb4bbe8a
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
1055 additions
and
17 deletions
+1055
-17
IStoneScoreLogsService.java
...quidnet/service/stone/service/IStoneScoreLogsService.java
+2
-1
MQConst.java
...ain/java/com/liquidnet/service/base/constant/MQConst.java
+30
-0
liquidnet-service-consumer-stone-dev.yml
...liquidnet-config/liquidnet-service-consumer-stone-dev.yml
+25
-0
liquidnet-service-consumer-stone-test.yml
...iquidnet-config/liquidnet-service-consumer-stone-test.yml
+25
-0
liquidnet-service-consumer-stone.yml
...fig/liquidnet-config/liquidnet-service-consumer-stone.yml
+111
-0
pom.xml
...ice-consumer-all/liquidnet-service-consumer-stone/pom.xml
+30
-0
ServiceConsumerStoneApplication.java
...com/liquidnet/servce/ServiceConsumerStoneApplication.java
+44
-0
IBaseDao.java
...com/liquidnet/servce/consumer/stone/service/IBaseDao.java
+40
-0
ConsumerStoneLogsRedisStreamConfig.java
...ne/service/config/ConsumerStoneLogsRedisStreamConfig.java
+78
-0
ConsumerStoneOrderRedisStreamConfig.java
...e/service/config/ConsumerStoneOrderRedisStreamConfig.java
+76
-0
ConsumerStoneUserRedisStreamConfig.java
...ne/service/config/ConsumerStoneUserRedisStreamConfig.java
+76
-0
BaseDao.java
...liquidnet/servce/consumer/stone/service/impl/BaseDao.java
+137
-0
AbstractRedisReceiver.java
...onsumer/stone/service/receiver/AbstractRedisReceiver.java
+101
-0
RedisInsertLogReceiver.java
...nsumer/stone/service/receiver/RedisInsertLogReceiver.java
+20
-0
RedisInsertOrderReceiver.java
...umer/stone/service/receiver/RedisInsertOrderReceiver.java
+20
-0
RedisInsertUserReceiver.java
...sumer/stone/service/receiver/RedisInsertUserReceiver.java
+20
-0
bootstrap-dev.yml
...rvice-consumer-stone/src/main/resources/bootstrap-dev.yml
+14
-0
bootstrap-prod.yml
...vice-consumer-stone/src/main/resources/bootstrap-prod.yml
+14
-0
bootstrap-service-consumer-stone.yml
...e/src/main/resources/bootstrap-service-consumer-stone.yml
+17
-0
bootstrap-test.yml
...vice-consumer-stone/src/main/resources/bootstrap-test.yml
+18
-0
bootstrap.yml
...t-service-consumer-stone/src/main/resources/bootstrap.yml
+5
-0
pom.xml
liquidnet-bus-service/liquidnet-service-consumer-all/pom.xml
+1
-0
mongo_db.sql
...vice-stone/liquidnet-service-stone-impl/docu/mongo_db.sql
+26
-0
redis_queue_create.txt
.../liquidnet-service-stone-impl/docu/redis_queue_create.txt
+8
-0
StoneUserController.java
...quidnet/service/stone/controller/StoneUserController.java
+2
-1
StoneScoreLogsServiceImpl.java
...service/stone/service/impl/StoneScoreLogsServiceImpl.java
+27
-9
StoneScoreOrderServiceImpl.java
...ervice/stone/service/impl/StoneScoreOrderServiceImpl.java
+28
-5
StoneScoreUserServiceImpl.java
...service/stone/service/impl/StoneScoreUserServiceImpl.java
+11
-1
QueueUtils.java
...ain/java/com/liquidnet/service/stone/util/QueueUtils.java
+41
-0
sqlmap.properties
...t-service-stone-impl/src/main/resources/sqlmap.properties
+8
-0
No files found.
liquidnet-bus-api/liquidnet-service-stone-api/src/main/java/com/liquidnet/service/stone/service/IStoneScoreLogsService.java
View file @
a6aba19f
...
...
@@ -6,6 +6,7 @@ import com.liquidnet.service.stone.entity.StoneScoreLogs;
import
com.liquidnet.service.stone.vo.StoneLogsListVo
;
import
com.liquidnet.service.stone.vo.StoneUserVo
;
import
java.util.HashMap
;
import
java.util.List
;
/**
...
...
@@ -56,7 +57,7 @@ public interface IStoneScoreLogsService {
* ]
* @return
*/
ResponseDto
<
String
>
doTask
(
Integer
taskId
);
ResponseDto
<
HashMap
<
String
,
Object
>
>
doTask
(
Integer
taskId
);
ResponseDto
<
StoneUserVo
>
taskDetail
();
...
...
liquidnet-bus-common/liquidnet-common-service-base/src/main/java/com/liquidnet/service/base/constant/MQConst.java
View file @
a6aba19f
...
...
@@ -139,4 +139,34 @@ public class MQConst {
return
desc
;
}
}
public
enum
StoneQueue
{
STONE_INSERT_LOGS
(
"stone:stream:rk.logs.insert"
,
"group.stone.logs.insert"
,
"积分日志-添加"
),
STONE_INSERT_USER
(
"stone:stream:rk.user.insert"
,
"group.stone.user.insert"
,
"积分用户-添加"
),
// STONE_COUPON_SEED("stone:stream:rk.coupon.send", "group.stone.coupon.send", "购买券-发放"),
STONE_ORDER_COUPON
(
"stone:stream:rk.order.pay"
,
"group.stone.order.pay"
,
"下订单-发放券"
),
;
private
final
String
key
;
private
final
String
group
;
private
final
String
desc
;
StoneQueue
(
String
key
,
String
group
,
String
desc
)
{
this
.
key
=
key
;
this
.
group
=
group
;
this
.
desc
=
desc
;
}
public
String
getKey
()
{
return
key
;
}
public
String
getGroup
()
{
return
group
;
}
public
String
getDesc
()
{
return
desc
;
}
}
}
liquidnet-bus-config/liquidnet-config/liquidnet-service-consumer-stone-dev.yml
0 → 100644
View file @
a6aba19f
liquidnet
:
system
:
updating
:
switch
:
false
info
:
port
:
9995
context
:
# context: /service-consumer
name
:
liquidnet-service-consumer-stone
logfile
:
path
:
/data/logs
name
:
service-consumer-stone
config
:
classpath:logback-spring.xml
file-max-size
:
200MB
pattern-file
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{96}:%line]
-
%msg%n'
pattern-console
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{96}:%line]
-
%msg%n'
pattern-rolling-file-name
:
${liquidnet.logfile.path}/${liquidnet.logfile.name}-%d{yyyy-MM-dd}.%i.log
level-root
:
debug
mysql
:
database-name
:
dev_ln_scene
mongodb
:
sslEnabled
:
false
database
:
dev_ln_scene
#以下为spring各环境个性配置
\ No newline at end of file
liquidnet-bus-config/liquidnet-config/liquidnet-service-consumer-stone-test.yml
0 → 100644
View file @
a6aba19f
liquidnet
:
system
:
updating
:
switch
:
false
info
:
port
:
9995
context
:
# context: /service-consumer
name
:
liquidnet-service-consumer-stone
logfile
:
path
:
/data/logs
name
:
service-consumer-stone
config
:
classpath:logback-spring.xml
file-max-size
:
200MB
pattern-file
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{96}:%line]
-
%msg%n'
pattern-console
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{96}:%line]
-
%msg%n'
pattern-rolling-file-name
:
${liquidnet.logfile.path}/${liquidnet.logfile.name}-%d{yyyy-MM-dd}.%i.log
level-root
:
debug
mysql
:
database-name
:
test_ln_scene
mongodb
:
sslEnabled
:
false
database
:
test_ln_scene
#以下为spring各环境个性配置
liquidnet-bus-config/liquidnet-config/liquidnet-service-consumer-stone.yml
0 → 100644
View file @
a6aba19f
server
:
port
:
${liquidnet.info.port}
tomcat
:
uri-encoding
:
UTF-8
servlet
:
context-path
:
${liquidnet.info.context}
# -----------------------------------------------------------
knife4j
:
production
:
${liquidnet.knife4j.disable}
basic
:
enable
:
true
username
:
${liquidnet.security.username}
password
:
${liquidnet.security.password}
# -----------------------------------------------------------
logging
:
# config: ${liquidnet.logfile.config}
file
:
name
:
${liquidnet.logfile.path}/${liquidnet.logfile.name}.log
max-size
:
200MB
pattern
:
file
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{26}:%line]
-
%msg%n'
console
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
[
%-5level]
%thread
[%logger{26}:%line]
-
%msg%n'
rolling-file-name
:
${liquidnet.logfile.path}/${liquidnet.logfile.name}-%d{yyyy-MM-dd}.%i.log
level
:
root
:
info
#以下是为指定包设置日志级别
com
:
liquidnet
:
${liquidnet.logfile.level-root}
# -----------------------------------------------------------
eureka
:
# client:
# register-with-eureka: true
# fetch-registry: true
# serviceUrl:
# defaultZone: http://${liquidnet.security.username}:${liquidnet.security.password}@${liquidnet.eureka.host}/eureka-server/eureka
instance
:
hostname
:
${spring.cloud.client.ip-address}
lease-expiration-duration-in-seconds
:
15
#服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除
lease-renewal-interval-in-seconds
:
5
#服务刷新时间配置,每隔这个时间会主动心跳一次
prefer-ip-address
:
true
instance-id
:
${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
# -----------------------------------------------------------
#actuator/info
info
:
app
:
name
:
${liquidnet.info.name}
company
:
name
:
lightnet.io
build
:
groupId
:
'
@project.groupId@'
artifactId
:
'
@project.artifactId@'
version
:
'
@project.version@'
# -----------------------------------------------------------
spring
:
application
:
name
:
${liquidnet.info.name}
profiles
:
include
:
common-service
#这里加载management相关公共配置
redis
:
database
:
${liquidnet.redis.database}
dbs
:
${liquidnet.redis.dbs}
port
:
${liquidnet.redis.port}
host
:
${liquidnet.redis.host}
password
:
${liquidnet.redis.password}
lettuce
:
pool
:
max-active
:
8
max-wait
:
-1
max-idle
:
8
min-idle
:
0
redisson
:
singleServerConfig
:
address
:
redis://${liquidnet.redis.host}:${liquidnet.redis.port}
password
:
${liquidnet.redis.password}
clientName
:
null
database
:
7
#选择使用哪个数据库0~15
idleConnectionTimeout
:
10000
connectTimeout
:
10000
timeout
:
3000
retryAttempts
:
3
retryInterval
:
1500
subscriptionsPerConnection
:
5
subscriptionConnectionMinimumIdleSize
:
1
subscriptionConnectionPoolSize
:
50
connectionMinimumIdleSize
:
32
connectionPoolSize
:
64
dnsMonitoringInterval
:
5000
threads
:
16
nettyThreads
:
32
codec
:
class
:
"
org.redisson.codec.JsonJacksonCodec"
transportMode
:
"
NIO"
data
:
mongodb
:
uri
:
mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=2000&waitQueueMultiple=100
sslEnabled
:
${liquidnet.mongodb.sslEnabled}
database
:
${liquidnet.mongodb.database}
datasource
:
name
:
${liquidnet.mysql.database-name}
url
:
jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username
:
${liquidnet.mysql.username}
password
:
${liquidnet.mysql.password}
# type: org.apache.tomcat.jdbc.pool.DataSource
driver-class-name
:
com.mysql.cj.jdbc.Driver
hikari
:
maximum-pool-size
:
45
minimum-idle
:
10
connection-test-query
:
SELECT 1
# -----------------------------------------------------------
# -----------------------------------------------------------
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/pom.xml
0 → 100644
View file @
a6aba19f
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
liquidnet-service-consumer-all
</artifactId>
<groupId>
com.liquidnet
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
liquidnet-service-consumer-stone
</artifactId>
<dependencies>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-web
</artifactId>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-cache-redisson
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-service-stone-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/ServiceConsumerStoneApplication.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
;
import
lombok.extern.slf4j.Slf4j
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.core.env.Environment
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.util.Arrays
;
@Slf4j
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
@MapperScan
(
basePackages
=
{
"com.liquidnet.service.sweet.mapper"
})
public
class
ServiceConsumerStoneApplication
implements
CommandLineRunner
{
@Autowired
private
Environment
environment
;
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ServiceConsumerStoneApplication
.
class
,
args
);
}
@Override
public
void
run
(
String
...
strings
)
throws
Exception
{
try
{
log
.
info
(
"\n----------------------------------------------------------\n\t"
+
"Application '{}' is running! Access URLs:\n\t"
+
"Local: \t\thttp://127.0.0.1:{}\n\t"
+
"External: \thttp://{}:{}{}/doc.html\n\t"
+
"Profile(s): \t{}\n----------------------------------------------------------"
,
environment
.
getProperty
(
"spring.application.name"
),
environment
.
getProperty
(
"server.port"
),
InetAddress
.
getLocalHost
().
getHostAddress
(),
environment
.
getProperty
(
"server.port"
),
environment
.
getProperty
(
"server.servlet.context-path"
),
Arrays
.
toString
(
environment
.
getActiveProfiles
()));
}
catch
(
UnknownHostException
e
)
{
e
.
printStackTrace
();
}
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/IBaseDao.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
;
import
java.util.LinkedList
;
public
interface
IBaseDao
{
/**
* 批量执行sql
*
* @param sql
* @param values
* @return
*/
Boolean
batchSql
(
String
sql
,
LinkedList
<
Object
[]>
values
);
/**
* 批量执行不定量sql
*
* @param sql
* @param values
* @return
*/
Boolean
batchSqls
(
LinkedList
<
String
>
sql
,
LinkedList
<
Object
[]>...
values
);
/**
* 执行sql语句 无 参数
*
* @param sql
* @return
*/
Boolean
batchSqlNoArgs
(
LinkedList
<
String
>
sql
);
/**
* xs 新增一条记录且返回主键Id
*
* @param sql 新增待执行sql
* @param param 参数
* @return 主键ID
*/
int
insertSqlAndReturnKeyId
(
final
String
sql
,
final
Object
[]
param
);
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/config/ConsumerStoneLogsRedisStreamConfig.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
config
;
import
com.liquidnet.servce.consumer.stone.service.receiver.RedisInsertLogReceiver
;
import
com.liquidnet.service.base.constant.MQConst
;
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
.
CandyQueue
.
COUPON_USE
;
@Configuration
public
class
ConsumerStoneLogsRedisStreamConfig
{
@Autowired
RedisInsertLogReceiver
redisInsertLogReceiver
;
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
receiveSqlStoneInsertLog
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getGroup
(),
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
name
()
+
t
),
StreamOffset
.
create
(
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getKey
(),
ReadOffset
.
lastConsumed
()),
redisInsertLogReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlStoneInsertLog
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertLog
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertLog2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertLog
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertLog3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertLog
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/config/ConsumerStoneOrderRedisStreamConfig.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
config
;
import
com.liquidnet.servce.consumer.stone.service.receiver.RedisInsertOrderReceiver
;
import
com.liquidnet.service.base.constant.MQConst
;
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
;
@Configuration
public
class
ConsumerStoneOrderRedisStreamConfig
{
@Autowired
RedisInsertOrderReceiver
redisInsertOrderReceiver
;
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
receiveSqlStoneInsertOrder
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
getGroup
(),
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
name
()
+
t
),
StreamOffset
.
create
(
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
getKey
(),
ReadOffset
.
lastConsumed
()),
redisInsertOrderReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlStoneInsertOrder
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertOrder
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertOrder2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertOrder
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertOrder3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertOrder
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/config/ConsumerStoneUserRedisStreamConfig.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
config
;
import
com.liquidnet.servce.consumer.stone.service.receiver.RedisInsertUserReceiver
;
import
com.liquidnet.service.base.constant.MQConst
;
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
;
@Configuration
public
class
ConsumerStoneUserRedisStreamConfig
{
@Autowired
RedisInsertUserReceiver
redisInsertUserReceiver
;
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
receiveSqlStoneInsertUser
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
getGroup
(),
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
name
()
+
t
),
StreamOffset
.
create
(
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
getKey
(),
ReadOffset
.
lastConsumed
()),
redisInsertUserReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlStoneInsertUser
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertUser
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertUser2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertUser
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlStoneInsertUser3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlStoneInsertUser
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/impl/BaseDao.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
impl
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.servce.consumer.stone.service.IBaseDao
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.PreparedStatementCreator
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.jdbc.support.GeneratedKeyHolder
;
import
org.springframework.jdbc.support.KeyHolder
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.support.TransactionCallback
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
javax.annotation.Resource
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.LinkedList
;
@Service
public
class
BaseDao
implements
IBaseDao
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
BaseDao
.
class
);
@Resource
public
JdbcTemplate
jdbcTemplate
;
@Resource
(
name
=
"transactionManager"
)
public
DataSourceTransactionManager
transactionManager
;
@Override
public
Boolean
batchSql
(
final
String
sql
,
final
LinkedList
<
Object
[]>
values
)
{
TransactionCallback
<
Boolean
>
callback
=
new
TransactionCallback
<
Boolean
>()
{
@Override
public
Boolean
doInTransaction
(
final
TransactionStatus
transactionStatus
)
{
if
(
values
.
size
()
>
0
)
{
int
[]
ints
=
jdbcTemplate
.
batchUpdate
(
sql
,
values
);
}
return
true
;
}
};
try
{
TransactionTemplate
tt
=
new
TransactionTemplate
(
transactionManager
);
return
tt
.
execute
(
callback
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"###\nSQL.Preparing:{}\nParameters:{}"
,
JsonUtils
.
toJson
(
sql
),
JsonUtils
.
toJson
(
values
),
ex
);
return
false
;
}
}
@Override
public
Boolean
batchSqls
(
final
LinkedList
<
String
>
sql
,
final
LinkedList
<
Object
[]>...
values
)
{
try
{
TransactionCallback
<
Boolean
>
callback
=
new
TransactionCallback
<
Boolean
>()
{
@Override
public
Boolean
doInTransaction
(
final
TransactionStatus
transactionStatus
)
{
int
i
=
0
;
for
(
LinkedList
<
Object
[]>
o
:
values
)
{
if
(
sql
.
size
()
<
i
+
1
)
{
break
;
}
if
(!
o
.
isEmpty
())
{
jdbcTemplate
.
batchUpdate
(
sql
.
get
(
i
),
o
);
}
i
++;
}
return
true
;
}
};
TransactionTemplate
tt
=
new
TransactionTemplate
(
transactionManager
);
return
tt
.
execute
(
callback
);
}
catch
(
Exception
ex
)
{
// if (ex instanceof LiquidnetServiceException) {
// log.error("###Error.Code:{} - {}", ((LiquidnetServiceException) ex).getCode(), ex.getMessage());
// } else {
log
.
error
(
"###Error.Sqls:{}\nParameters:{},Ex:{}"
,
JsonUtils
.
toJson
(
sql
),
JsonUtils
.
toJson
(
values
),
ex
.
getMessage
());
// }
return
false
;
}
}
@Override
public
Boolean
batchSqlNoArgs
(
final
LinkedList
<
String
>
sql
)
{
try
{
TransactionCallback
<
Boolean
>
callback
=
new
TransactionCallback
<
Boolean
>()
{
@Override
public
Boolean
doInTransaction
(
final
TransactionStatus
transactionStatus
)
{
for
(
String
o
:
sql
)
{
jdbcTemplate
.
execute
(
o
);
}
return
true
;
}
};
TransactionTemplate
tt
=
new
TransactionTemplate
(
transactionManager
);
return
tt
.
execute
(
callback
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"###Error.Sqls:{}\nParameters:{},Ex:{}"
,
sql
);
return
false
;
}
}
/**
* xs 新增一条记录且返回主键Id
*
* @param sql 新增待执行sql
* @param param 参数
* @return 主键ID
*/
public
int
insertSqlAndReturnKeyId
(
final
String
sql
,
final
Object
[]
param
)
{
final
String
innersql
=
sql
;
final
Object
[]
innerO
=
param
;
KeyHolder
keyHolder
=
new
GeneratedKeyHolder
();
try
{
jdbcTemplate
.
update
(
new
PreparedStatementCreator
()
{
@Override
public
PreparedStatement
createPreparedStatement
(
final
Connection
con
)
throws
SQLException
{
PreparedStatement
ps
=
con
.
prepareStatement
(
innersql
,
Statement
.
RETURN_GENERATED_KEYS
);
for
(
int
i
=
0
;
i
<
innerO
.
length
;
i
++)
{
ps
.
setObject
(
i
+
1
,
innerO
[
i
]);
}
return
ps
;
}
},
keyHolder
);
}
catch
(
Exception
e
)
{
log
.
error
(
"###\nSQL.Preparing:{}\nParameters:{}"
,
sql
,
JsonUtils
.
toJson
(
param
),
e
);
}
return
keyHolder
.
getKey
().
intValue
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/receiver/AbstractRedisReceiver.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
receiver
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.servce.consumer.stone.service.IBaseDao
;
import
com.liquidnet.service.base.SqlMapping
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.connection.stream.MapRecord
;
import
org.springframework.data.redis.connection.stream.StreamRecords
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.stream.StreamListener
;
import
java.util.HashMap
;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @class: AbstractRedisReceiver
* @Package com.liquidnet.service.consumer.dragon.receiver
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/22 20:28
*/
@Slf4j
public
abstract
class
AbstractRedisReceiver
implements
StreamListener
<
String
,
MapRecord
<
String
,
String
,
String
>>
{
@Autowired
private
IBaseDao
baseDao
;
@Autowired
StringRedisTemplate
stringRedisTemplate
;
@Override
public
void
onMessage
(
MapRecord
<
String
,
String
,
String
>
message
)
{
log
.
info
(
"接受到来自redis PAY key:{} 的消息"
,
getRedisStreamKey
());
log
.
info
(
"message id "
+
message
.
getId
());
log
.
info
(
"stream "
+
message
.
getStream
());
log
.
info
(
"body "
+
message
.
getValue
());
boolean
result
=
this
.
consumerSqlDaoHandler
(
message
.
getValue
().
get
(
"message"
));
// if(result){
// 消费成功确认,消息删除和消息确认是一个事务
log
.
info
(
"consumer success delete message messageId:{} "
,
message
.
getId
());
try
{
// stringRedisTemplate.multi();
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
// stringRedisTemplate.exec();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"delete redis queue message error messageId:{} errMsg:{}"
,
message
.
getId
(),
e
.
getMessage
());
}
finally
{
try
{
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
}
catch
(
Exception
e
)
{
log
.
error
(
"error: {}"
,
e
);
}
}
// }
}
private
boolean
consumerSqlDaoHandler
(
String
msg
)
{
try
{
SqlMapping
.
SqlMessage
sqlMessage
=
JsonUtils
.
fromJson
(
msg
,
SqlMapping
.
SqlMessage
.
class
);
log
.
debug
(
"CONSUMER SQL ==> Preparing:{}"
,
JsonUtils
.
toJson
(
sqlMessage
.
getSqls
()));
log
.
debug
(
"CONSUMER SQL ==> Parameters:{}"
,
JsonUtils
.
toJson
(
sqlMessage
.
getArgs
()));
Boolean
rstBatchSqls
=
baseDao
.
batchSqls
(
sqlMessage
.
getSqls
(),
sqlMessage
.
getArgs
());
log
.
debug
(
"CONSUMER SQL result of execution:{}"
,
rstBatchSqls
);
if
(
rstBatchSqls
)
{
return
true
;
}
else
{
sendMySqlRedis
(
msg
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"CONSUMER SQL Exception error:{}"
,
e
);
}
return
false
;
}
/**
* 给 REDIS 队列发送消息 数据库相关
*
* @param msg 接收到的内容
* @return
*/
private
boolean
sendMySqlRedis
(
String
msg
)
{
try
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"message"
,
msg
);
MapRecord
<
String
,
String
,
String
>
record
=
StreamRecords
.
mapBacked
(
map
).
withStreamKey
(
getRedisStreamKey
());
stringRedisTemplate
.
opsForStream
().
add
(
record
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
protected
abstract
String
getRedisStreamKey
();
protected
abstract
String
getRedisStreamGroup
();
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/receiver/RedisInsertLogReceiver.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
@Slf4j
@Component
public
class
RedisInsertLogReceiver
extends
AbstractRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/receiver/RedisInsertOrderReceiver.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
@Slf4j
@Component
public
class
RedisInsertOrderReceiver
extends
AbstractRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/java/com/liquidnet/servce/consumer/stone/service/receiver/RedisInsertUserReceiver.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
servce
.
consumer
.
stone
.
service
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
@Slf4j
@Component
public
class
RedisInsertUserReceiver
extends
AbstractRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/resources/bootstrap-dev.yml
0 → 100644
View file @
a6aba19f
# begin-dev-这里是配置信息基本值
liquidnet
:
cloudConfig
:
profile
:
dev
security
:
username
:
user
password
:
user123
eureka
:
host
:
127.0.0.1:7001
# end-dev-这里是配置信息基本值
spring
:
profiles
:
include
:
service-consumer-stone
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/resources/bootstrap-prod.yml
0 → 100644
View file @
a6aba19f
# begin-prod-这里是配置信息基本值
liquidnet
:
cloudConfig
:
profile
:
prod
security
:
username
:
user
password
:
user123
eureka
:
host
:
172.17.207.189:7001
# end-prod-这里是配置信息基本值
spring
:
profiles
:
include
:
service-consumer-stone
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/resources/bootstrap-service-consumer-stone.yml
0 → 100644
View file @
a6aba19f
#eurekaServer配置
eureka
:
client
:
register-with-eureka
:
true
fetch-registry
:
true
serviceUrl
:
defaultZone
:
http://${liquidnet.security.username}:${liquidnet.security.password}@${liquidnet.eureka.host}/eureka-server/eureka
#configServer配置
spring
:
cloud
:
config
:
# uri: http://39.106.122.201:7002/support-config
profile
:
${liquidnet.cloudConfig.profile}
name
:
${spring.application.name}
#默认为spring.application.name
discovery
:
enabled
:
true
service-id
:
liquidnet-support-config
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/resources/bootstrap-test.yml
0 → 100644
View file @
a6aba19f
# begin-test-这里是配置信息基本值
liquidnet
:
cloudConfig
:
profile
:
test
security
:
username
:
user
password
:
user123
eureka
:
#host: 172.17.207.177:7001
instance
:
prefer-ip-address
:
true
host
:
eureka-test-0.eureka-test-svc.zhengzai-test:7001/eureka-server/eureka,eureka-test-1.eureka-test-svc.zhengzai-test:7001/eureka-server/eureka,eureka-test-2.eureka-test-svc.zhengzai-test:7001/eureka-server/eureka
# end-test-这里是配置信息基本值
spring
:
profiles
:
include
:
service-consumer-stone
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-stone/src/main/resources/bootstrap.yml
0 → 100644
View file @
a6aba19f
spring
:
application
:
name
:
liquidnet-service-consumer-stone
profiles
:
active
:
dev
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/pom.xml
View file @
a6aba19f
...
...
@@ -15,6 +15,7 @@
<module>
liquidnet-service-consumer-adam
</module>
<module>
liquidnet-service-consumer-dragon
</module>
<module>
liquidnet-service-consumer-sweet
</module>
<module>
liquidnet-service-consumer-stone
</module>
</modules>
<dependencies>
...
...
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/docu/mongo_db.sql
0 → 100644
View file @
a6aba19f
use
prod_ln_scene
;
#
创建集合
db
.
createCollection
(
"StoneOrderListVo"
);
db
.
createCollection
(
"StoneScoreItems"
);
db
.
createCollection
(
"StoneScoreLogs"
);
db
.
createCollection
(
"StoneUserVo"
);
#
创建索引
db
.
StoneOrderListVo
.
createIndex
(
{
uid
:
"hashed"
}
);
db
.
StoneScoreItems
.
createIndex
(
{
itemId
:
"hashed"
}
);
db
.
StoneScoreItems
.
createIndex
(
{
status
:
"hashed"
}
);
db
.
StoneScoreItems
.
createIndex
(
{
startTime
:
"hashed"
}
);
db
.
StoneScoreItems
.
createIndex
(
{
endTime
:
"hashed"
}
);
db
.
StoneScoreLogs
.
createIndex
(
{
uid
:
"hashed"
}
);
db
.
StoneUserVo
.
createIndex
(
{
uid
:
"hashed"
}
);
#
创建分片
sh
.
enableSharding
(
"prod_ln_scene"
);
sh
.
shardCollection
(
"prod_ln_scene.StoneOrderListVo"
,
{
"orderId"
:
"hashed"
}
);
sh
.
shardCollection
(
"prod_ln_scene.StoneScoreItems"
,
{
"itemId"
:
"hashed"
}
);
sh
.
shardCollection
(
"prod_ln_scene.StoneScoreLogs"
,
{
"logsId"
:
"hashed"
}
);
sh
.
shardCollection
(
"prod_ln_scene.StoneUserVo"
,
{
"uid"
:
"hashed"
}
);
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/docu/redis_queue_create.txt
0 → 100644
View file @
a6aba19f
XADD stone:stream:rk.logs.insert * 0 0
XGROUP CREATE stone:stream:rk.logs.insert group.stone.logs.insert 0
XADD stone:stream:rk.user.insert * 0 0
XGROUP CREATE stone:stream:rk.user.insert group.stone.user.insert 0
XADD stone:stream:rk.order.pay * 0 0
XGROUP CREATE stone:stream:rk.order.pay group.stone.order.pay 0
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/java/com/liquidnet/service/stone/controller/StoneUserController.java
View file @
a6aba19f
...
...
@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -39,7 +40,7 @@ public class StoneUserController {
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"Integer"
,
name
=
"taskId"
,
value
=
"任务ID[0-每日任务:签到|1-每日任务:购买演出|2-每日任务:购买商品|3-每日任务:划卡|4-一次性任务:关注公众号|5-一次性任务:完善信息|6-一次性任务:完善头像|7-一次性任务:打开消息推送|8-一次性任务:体验在场]"
,
example
=
""
),
})
public
ResponseDto
<
String
>
doTask
(
@RequestParam
(
value
=
"taskId"
,
required
=
true
)
Integer
taskId
)
{
public
ResponseDto
<
HashMap
<
String
,
Object
>
>
doTask
(
@RequestParam
(
value
=
"taskId"
,
required
=
true
)
Integer
taskId
)
{
return
stoneScoreLogsService
.
doTask
(
taskId
);
}
...
...
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/java/com/liquidnet/service/stone/service/impl/StoneScoreLogsServiceImpl.java
View file @
a6aba19f
package
com
.
liquidnet
.
service
.
stone
.
service
.
impl
;
import
com.github.pagehelper.PageInfo
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
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.UserPathDto
;
import
com.liquidnet.service.
stone.entity.StoneScoreItems
;
import
com.liquidnet.service.
base.constant.MQConst
;
import
com.liquidnet.service.stone.entity.StoneScoreLogs
;
import
com.liquidnet.service.stone.service.IStoneScoreLogsService
;
import
com.liquidnet.service.stone.util.ObjectUtils
;
import
com.liquidnet.service.stone.util.QueueUtils
;
import
com.liquidnet.service.stone.util.StoneMongoUtils
;
import
com.liquidnet.service.stone.util.StoneRedisUtils
;
import
com.liquidnet.service.stone.vo.StoneItemListVo
;
import
com.liquidnet.service.stone.vo.StoneLogsListVo
;
import
com.liquidnet.service.stone.vo.StoneTaskVo
;
import
com.liquidnet.service.stone.vo.StoneUserVo
;
...
...
@@ -42,6 +44,8 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
StoneRedisUtils
stoneRedisUtils
;
@Autowired
StoneMongoUtils
stoneMongoUtils
;
@Autowired
QueueUtils
queueUtils
;
@Override
public
String
deScore
(
String
uid
,
Integer
score
,
Integer
TaskId
,
String
reason
)
{
...
...
@@ -72,12 +76,14 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
}
@Override
public
ResponseDto
<
String
>
doTask
(
Integer
taskId
)
{
public
ResponseDto
<
HashMap
<
String
,
Object
>
>
doTask
(
Integer
taskId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
StoneUserVo
vo
=
stoneRedisUtils
.
getUserData
(
uid
);
List
<
StoneTaskVo
>
taskList
=
vo
.
getTask
();
boolean
isIn
=
false
;
//标示是否操作
//增加积分
int
score
=
0
;
int
count
=
0
;
for
(
int
i
=
0
;
i
<
taskList
.
size
();
i
++)
{
StoneTaskVo
item
=
taskList
.
get
(
i
);
//判断任务
...
...
@@ -87,8 +93,6 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
}
else
if
(
item
.
getTaskType
().
equals
(
2
)
&&
item
.
getTaskCount
()
>=
1
)
{
return
ResponseDto
.
failure
(
"该任务已完成"
);
}
else
{
//增加积分
int
score
=
0
;
//记录完成任务
if
(
taskId
==
0
)
{
//每日签到
if
(
DateUtil
.
intervalDays
(
DateUtil
.
parse
(
item
.
getTaskTime
(),
"yyyy-MM-dd"
),
...
...
@@ -109,6 +113,7 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
item
.
setTaskCount
(
1
);
score
=
10
;
}
count
=
item
.
getTaskCount
();
item
.
setTaskTime
(
DateUtil
.
getNowTime
(
DateUtil
.
DATE_SMALL_STR
));
taskList
.
set
(
i
,
item
);
vo
.
setTask
(
taskList
);
...
...
@@ -123,7 +128,14 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
}
}
}
return
isIn
?
ResponseDto
.
success
(
"成功"
)
:
ResponseDto
.
failure
(
"任务不存在"
);
if
(
isIn
){
HashMap
<
String
,
Object
>
map
=
CollectionUtil
.
mapStringObject
();
map
.
put
(
"score"
,
score
);
map
.
put
(
"count"
,
count
);
return
ResponseDto
.
success
(
map
);
}
else
{
return
ResponseDto
.
failure
(
"任务不存在"
);
}
}
@Override
...
...
@@ -193,7 +205,10 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
logs
.
setScore
(
BigDecimal
.
valueOf
(
score
));
logs
.
setCreatedAt
(
LocalDateTime
.
now
());
stoneMongoUtils
.
logCreate
(
logs
);
//TODO mysql
//mysql 入库 积分日志
queueUtils
.
sendMsgByRedis
(
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getKey
(),
SqlMapping
.
get
(
"stone_score_logs.insert"
,
logs
.
getLogsId
(),
logs
.
getUid
(),
logs
.
getScore
(),
logs
.
getContent
(),
logs
.
getReason
(),
LocalDateTime
.
now
())
);
}
private
void
changeUse
(
String
uid
,
Integer
score
,
String
reason
,
String
content
)
{
...
...
@@ -209,6 +224,9 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
logs
.
setScore
(
BigDecimal
.
valueOf
(
score
));
logs
.
setCreatedAt
(
LocalDateTime
.
now
());
stoneMongoUtils
.
logCreate
(
logs
);
//TODO mysql
//mysql 入库 积分日志
queueUtils
.
sendMsgByRedis
(
MQConst
.
StoneQueue
.
STONE_INSERT_LOGS
.
getKey
(),
SqlMapping
.
get
(
"stone_score_logs.insert"
,
logs
.
getLogsId
(),
logs
.
getUid
(),
logs
.
getScore
().
negate
(),
logs
.
getContent
(),
logs
.
getReason
(),
LocalDateTime
.
now
())
);
}
}
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/java/com/liquidnet/service/stone/service/impl/StoneScoreOrderServiceImpl.java
View file @
a6aba19f
package
com
.
liquidnet
.
service
.
stone
.
service
.
impl
;
import
com.github.pagehelper.PageInfo
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.UserPathDto
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.stone.entity.StoneScoreItems
;
import
com.liquidnet.service.stone.entity.StoneScoreOrder
;
import
com.liquidnet.service.stone.service.IStoneScoreOrderService
;
import
com.liquidnet.service.stone.util.QueueUtils
;
import
com.liquidnet.service.stone.util.StoneMongoUtils
;
import
com.liquidnet.service.stone.util.StoneRedisUtils
;
import
com.liquidnet.service.stone.vo.StoneOrderListVo
;
...
...
@@ -19,10 +23,7 @@ import org.springframework.stereotype.Service;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* <p>
...
...
@@ -40,6 +41,8 @@ public class StoneScoreOrderServiceImpl implements IStoneScoreOrderService {
StoneRedisUtils
stoneRedisUtils
;
@Autowired
StoneMongoUtils
stoneMongoUtils
;
@Autowired
QueueUtils
queueUtils
;
@Override
public
ResponseDto
<
String
>
order
(
String
itemId
,
Integer
number
)
{
...
...
@@ -99,7 +102,27 @@ public class StoneScoreOrderServiceImpl implements IStoneScoreOrderService {
stoneRedisUtils
.
addOrderList
(
uid
,
listVo
);
//mongo
stoneMongoUtils
.
orderCreate
(
listVo
);
//TODO mysql
//mysql 订单创建
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"stone_score_order.insert"
));
sqlsDataA
.
add
(
new
Object
[]{
order
.
getOrderId
(),
order
.
getUid
(),
order
.
getUserName
(),
order
.
getUserMobile
(),
order
.
getItemId
(),
order
.
getTargetTitle
(),
order
.
getOrderCode
(),
order
.
getNumber
(),
order
.
getPrice
(),
order
.
getScore
(),
order
.
getPriceExpress
(),
order
.
getPriceActual
(),
order
.
getPayType
(),
order
.
getPaymentType
(),
order
.
getPaymentId
(),
order
.
getTimePay
(),
order
.
getPayCountdownMinute
(),
order
.
getStatus
(),
order
.
getCreatedAt
()
});
//mysql 发送券
LinkedList
<
Object
[]>
sqlsDataB
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"stone_candy_mgt_coupon.add_for_member"
));
sqlsDataB
.
add
(
new
Object
[]{
IDGenerator
.
nextTimeId2
(),
data
.
getTargetId
(),
number
,
order
.
getUserMobile
(),
order
.
getCreatedAt
(),
"SCORE_BUY_COUPON"
,
order
.
getCreatedAt
()
});
// 执行sql
String
sqlData
=
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
StoneQueue
.
STONE_ORDER_COUPON
.
getKey
(),
sqlData
);
return
ResponseDto
.
success
(
"下单成功"
);
}
...
...
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/java/com/liquidnet/service/stone/service/impl/StoneScoreUserServiceImpl.java
View file @
a6aba19f
...
...
@@ -2,10 +2,14 @@ package com.liquidnet.service.stone.service.impl;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.service.adam.dto.vo.AdamUserInfoSimpleVo
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.stone.dto.StoneScoreListDto
;
import
com.liquidnet.service.stone.service.IStoneScoreUserService
;
import
com.liquidnet.service.stone.util.InnerUtils
;
import
com.liquidnet.service.stone.util.QueueUtils
;
import
com.liquidnet.service.stone.util.StoneMongoUtils
;
import
com.liquidnet.service.stone.util.StoneRedisUtils
;
import
com.liquidnet.service.stone.vo.StoneTaskVo
;
...
...
@@ -31,6 +35,8 @@ public class StoneScoreUserServiceImpl implements IStoneScoreUserService {
StoneRedisUtils
redisUtils
;
@Autowired
StoneMongoUtils
mongoUtils
;
@Autowired
QueueUtils
queueUtils
;
@Override
public
StoneScoreListDto
stoneUserInfo
()
{
...
...
@@ -40,14 +46,18 @@ public class StoneScoreUserServiceImpl implements IStoneScoreUserService {
AdamUserInfoSimpleVo
userVo
=
InnerUtils
.
getUserInfo
();
StoneUserVo
userTaskVo
=
redisUtils
.
getUserData
(
uid
);
if
(
userTaskVo
==
null
)
{
//TODO mysql 创建用户积分表数据
userTaskVo
=
StoneUserVo
.
getNew
();
userTaskVo
.
getTask
();
userTaskVo
.
setUid
(
uid
);
userTaskVo
.
setStatus
(
1
);
//redis
redisUtils
.
setUserData
(
uid
,
userTaskVo
);
//mongo
mongoUtils
.
userCreate
(
userTaskVo
);
//mysql 创建用户积分表数据
queueUtils
.
sendMsgByRedis
(
MQConst
.
StoneQueue
.
STONE_INSERT_USER
.
getKey
(),
SqlMapping
.
get
(
"stone_score_user.insert"
,
IDGenerator
.
nextTimeId2
(),
userTaskVo
.
getUid
(),
userTaskVo
.
getStatus
(),
LocalDateTime
.
now
())
);
}
int
rest
=
redisUtils
.
getUserScoreRest
(
uid
);
int
use
=
redisUtils
.
getUserScoreUse
(
uid
);
...
...
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/java/com/liquidnet/service/stone/util/QueueUtils.java
0 → 100644
View file @
a6aba19f
package
com
.
liquidnet
.
service
.
stone
.
util
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.connection.stream.StreamRecords
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
@Component
public
class
QueueUtils
{
// @Autowired
// private RabbitTemplate rabbitTemplate;
@Autowired
StringRedisTemplate
stringRedisTemplate
;
/**
* 发送消息 - RABBIT
*
* @param exchange 交换机
* @param routeKey 路径
* @param jsonMsg Json字符串
*/
// public void sendSqlRabbit(String exchange, String routeKey, String jsonMsg) {
// rabbitTemplate.convertAndSend(exchange, routeKey, jsonMsg);
// }
/**
* 发送消息 - REDIS
*
* @param streamKey Redis消费Key
* @param jsonMsg Json字符串
*/
public
void
sendMsgByRedis
(
String
streamKey
,
String
jsonMsg
)
{
HashMap
<
String
,
String
>
map
=
CollectionUtil
.
mapStringString
();
map
.
put
(
"message"
,
jsonMsg
);
stringRedisTemplate
.
opsForStream
().
add
(
StreamRecords
.
mapBacked
(
map
).
withStreamKey
(
streamKey
));
}
}
liquidnet-bus-service/liquidnet-service-stone/liquidnet-service-stone-impl/src/main/resources/sqlmap.properties
View file @
a6aba19f
# ---- 添加日志纪录 ----
stone_score_logs.insert
=
INSERT INTO `stone_score_logs`(`logs_id` ,`uid` ,`score` ,`content` ,`reason` ,`created_at`)VALUES(? ,? ,? ,? ,? ,? );
#---- 添加用户积分表信息 ----
stone_score_user.insert
=
INSERT INTO `stone_score_user`(`score_id` ,`uid` ,`status` ,`created_at`)VALUES(? ,? ,? ,? );
#---- 生成订单 ----
stone_score_order.insert
=
INSERT INTO `stone_score_order`(`order_id` ,`uid` ,`user_name` ,`user_mobile`,`item_id`,`target_title`,`order_code`,`number`,`price`,`score`,`price_express`,`price_actual`,`pay_type`,`payment_type`,`payment_id`,`time_pay`,`pay_countdown_minute`,`status`,`pay_status`,`created_at`) VALUES(? ,? ,? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? );
#---- 发券 ----
stone_candy_mgt_coupon.add_for_member
=
INSERT INTO candy_mgt_coupon (mcoupon_id, coupon_id, `state`, event_amt, event_type, event_limit, event_at, `operator`, created_at) VALUES (?, ?, 0, ?, 2, ?, ?, ?, ?)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment