记得上下班打卡 | 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
7e93a6b4
Commit
7e93a6b4
authored
Oct 26, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev_stone' into dev_stone
parents
8ba6d93e
22534669
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 @
7e93a6b4
...
...
@@ -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 @
7e93a6b4
...
...
@@ -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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
<?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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
# 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 @
7e93a6b4
# 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 @
7e93a6b4
#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 @
7e93a6b4
# 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 @
7e93a6b4
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 @
7e93a6b4
...
...
@@ -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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
...
...
@@ -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 @
7e93a6b4
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 @
7e93a6b4
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 @
7e93a6b4
...
...
@@ -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 @
7e93a6b4
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 @
7e93a6b4
# ---- 添加日志纪录 ----
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