记得上下班打卡 | 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
602e9445
Commit
602e9445
authored
Oct 25, 2021
by
张国柄
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+service:consumer.candy;
parent
503d2f66
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
913 additions
and
1 deletion
+913
-1
pom.xml
...ice-consumer-all/liquidnet-service-consumer-candy/pom.xml
+52
-0
ServiceConsumerCandyApplication.java
...om/liquidnet/service/ServiceConsumerCandyApplication.java
+41
-0
ConsumerCandyCouponBackRedisStreamConfig.java
...andy/config/ConsumerCandyCouponBackRedisStreamConfig.java
+78
-0
ConsumerCandyCouponOrderBackRedisStreamConfig.java
...config/ConsumerCandyCouponOrderBackRedisStreamConfig.java
+78
-0
ConsumerCandyCouponReceiveRedisStreamConfig.java
...y/config/ConsumerCandyCouponReceiveRedisStreamConfig.java
+77
-0
ConsumerCandyCouponUseRedisStreamConfig.java
...candy/config/ConsumerCandyCouponUseRedisStreamConfig.java
+77
-0
AbstractCouponOrderBackRedisReceiver.java
.../candy/receiver/AbstractCouponOrderBackRedisReceiver.java
+122
-0
AbstractSqlRedisReceiver.java
...ice/consumer/candy/receiver/AbstractSqlRedisReceiver.java
+72
-0
ConsumerCandyCouponBackRdsReceiver.java
...er/candy/receiver/ConsumerCandyCouponBackRdsReceiver.java
+17
-0
ConsumerCandyCouponOrderBackRdsReceiver.java
...ndy/receiver/ConsumerCandyCouponOrderBackRdsReceiver.java
+17
-0
ConsumerCandyCouponReceiveRdsReceiver.java
...candy/receiver/ConsumerCandyCouponReceiveRdsReceiver.java
+17
-0
ConsumerCandyCouponUseRdsReceiver.java
...mer/candy/receiver/ConsumerCandyCouponUseRdsReceiver.java
+17
-0
IBaseDao.java
...om/liquidnet/service/consumer/candy/service/IBaseDao.java
+40
-0
BaseDao.java
...iquidnet/service/consumer/candy/service/impl/BaseDao.java
+137
-0
bootstrap-dev.yml
...rvice-consumer-candy/src/main/resources/bootstrap-dev.yml
+14
-0
bootstrap-prod.yml
...vice-consumer-candy/src/main/resources/bootstrap-prod.yml
+14
-0
bootstrap-service-consumer-candy.yml
...y/src/main/resources/bootstrap-service-consumer-candy.yml
+17
-0
bootstrap-test.yml
...vice-consumer-candy/src/main/resources/bootstrap-test.yml
+18
-0
bootstrap.yml
...t-service-consumer-candy/src/main/resources/bootstrap.yml
+5
-0
pom.xml
liquidnet-bus-service/liquidnet-service-consumer-all/pom.xml
+3
-1
No files found.
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/pom.xml
0 → 100644
View file @
602e9445
<?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-candy
</artifactId>
<properties>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.target>
8
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-cache-redis
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</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-candy-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>
src/main/resources
</directory>
<filtering>
true
</filtering>
</resource>
</resources>
</build>
</project>
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/ServiceConsumerCandyApplication.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
;
import
lombok.extern.slf4j.Slf4j
;
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.util.Arrays
;
@Slf4j
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
public
class
ServiceConsumerCandyApplication
implements
CommandLineRunner
{
@Autowired
private
Environment
environment
;
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ServiceConsumerCandyApplication
.
class
,
args
);
}
@Override
public
void
run
(
String
...
strings
)
{
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
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/config/ConsumerCandyCouponBackRedisStreamConfig.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
config
;
import
com.liquidnet.service.consumer.candy.receiver.ConsumerCandyCouponBackRdsReceiver
;
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_BACK
;
@Configuration
public
class
ConsumerCandyCouponBackRedisStreamConfig
{
@Autowired
ConsumerCandyCouponBackRdsReceiver
consumerCandyCouponBackRdsReceiver
;
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
receiveSqlCandyCouponBack
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
COUPON_BACK
.
getGroup
(),
COUPON_BACK
.
name
()
+
t
),
StreamOffset
.
create
(
COUPON_BACK
.
getKey
(),
ReadOffset
.
lastConsumed
()),
consumerCandyCouponBackRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlCandyCouponBack
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponBack2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponBack3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/config/ConsumerCandyCouponOrderBackRedisStreamConfig.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
config
;
import
com.liquidnet.service.consumer.candy.receiver.ConsumerCandyCouponOrderBackRdsReceiver
;
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_ORDER_BACK
;
@Configuration
public
class
ConsumerCandyCouponOrderBackRedisStreamConfig
{
@Autowired
ConsumerCandyCouponOrderBackRdsReceiver
consumerCandyCouponOrderBackRdsReceiver
;
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
receiveSqlCandyCouponBack
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
COUPON_ORDER_BACK
.
getGroup
(),
COUPON_ORDER_BACK
.
name
()
+
t
),
StreamOffset
.
create
(
COUPON_ORDER_BACK
.
getKey
(),
ReadOffset
.
lastConsumed
()),
consumerCandyCouponOrderBackRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlCandyCouponOrderBack
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponOrderBack2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponOrderBack3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponBack
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/config/ConsumerCandyCouponReceiveRedisStreamConfig.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
config
;
import
com.liquidnet.service.consumer.candy.receiver.ConsumerCandyCouponReceiveRdsReceiver
;
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_RECEIVE
;
@Configuration
public
class
ConsumerCandyCouponReceiveRedisStreamConfig
{
@Autowired
ConsumerCandyCouponReceiveRdsReceiver
consumerCandyCouponReceiveRdsReceiver
;
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
receiveSqlCandyCouponReceive
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
COUPON_RECEIVE
.
getGroup
(),
COUPON_RECEIVE
.
name
()
+
t
),
StreamOffset
.
create
(
COUPON_RECEIVE
.
getKey
(),
ReadOffset
.
lastConsumed
()),
consumerCandyCouponReceiveRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlCandyCouponReceive
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponReceive
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponReceive2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponReceive
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponReceive3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponReceive
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/config/ConsumerCandyCouponUseRedisStreamConfig.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
config
;
import
com.liquidnet.service.consumer.candy.receiver.ConsumerCandyCouponUseRdsReceiver
;
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
ConsumerCandyCouponUseRedisStreamConfig
{
@Autowired
ConsumerCandyCouponUseRdsReceiver
consumerCandyCouponUseRdsReceiver
;
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
receiveSqlCandyCouponUse
(
StreamMessageListenerContainer
<
String
,
MapRecord
<
String
,
String
,
String
>>
listenerContainer
,
int
t
)
{
return
listenerContainer
.
receiveAutoAck
(
Consumer
.
from
(
COUPON_USE
.
getGroup
(),
COUPON_USE
.
name
()
+
t
),
StreamOffset
.
create
(
COUPON_USE
.
getKey
(),
ReadOffset
.
lastConsumed
()),
consumerCandyCouponUseRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public
Subscription
subscriptionSqlCandyCouponUse
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponUse
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponUse2
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponUse
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
@Bean
public
Subscription
subscriptionSqlCandyCouponUse3
(
RedisConnectionFactory
factory
)
{
var
listenerContainer
=
this
.
buildStreamMessageListenerContainer
(
factory
);
var
subscription
=
receiveSqlCandyCouponUse
(
listenerContainer
,
1
);
listenerContainer
.
start
();
return
subscription
;
}
/* -------------------------------------------------------- | */
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/AbstractCouponOrderBackRedisReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.OrderCloseMapping
;
import
com.liquidnet.service.candy.constant.CandyRedisConst
;
import
com.liquidnet.service.candy.dto.CandyUserCouponBasicDto
;
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.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
@Slf4j
public
abstract
class
AbstractCouponOrderBackRedisReceiver
implements
StreamListener
<
String
,
MapRecord
<
String
,
String
,
String
>>
{
@Autowired
StringRedisTemplate
stringRedisTemplate
;
@Autowired
private
RedisUtil
redisUtil
;
@Override
public
void
onMessage
(
MapRecord
<
String
,
String
,
String
>
message
)
{
log
.
debug
(
"CONSUMER SQL[streamKey:{},messageId:{},stream:{},body:{}]"
,
this
.
getRedisStreamKey
(),
message
.
getId
(),
message
.
getStream
(),
message
.
getValue
());
boolean
result
=
this
.
consumerSqlOperationCouponOrderBackHandler
(
message
.
getValue
().
get
(
"message"
));
log
.
info
(
"CONSUMER SQL RESULT:{} ==> MESSAGE_ID:{}"
,
result
,
message
.
getId
());
try
{
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
}
catch
(
Exception
e
)
{
log
.
error
(
"#CONSUMER SQL RESULT:{} ==> DEL_REDIS_QUEUE_MSG_EXCEPTION[MESSAGE_ID:{},MSG:{}]"
,
result
,
message
.
getId
(),
JsonUtils
.
toJson
(
message
),
e
);
}
finally
{
try
{
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
}
catch
(
Exception
ignored
)
{
}
}
}
private
boolean
consumerSqlOperationCouponOrderBackHandler
(
String
msg
)
{
boolean
aBoolean
=
false
;
try
{
OrderCloseMapping
.
orderCloseMessage
mqMessage
=
JsonUtils
.
fromJson
(
msg
,
OrderCloseMapping
.
orderCloseMessage
.
class
);
//这里是 uCouponId和uid 懒。所以没新写方法
for
(
int
x
=
0
;
x
<
mqMessage
.
getOrderTicketIds
().
size
();
x
++)
{
String
t
=
mqMessage
.
getOrderTicketIds
().
get
(
x
);
String
uCouponId
=
t
.
split
(
","
)[
0
];
String
uid
=
t
.
split
(
","
)[
1
];
ArrayList
<
String
>
uCouponIdList
=
CollectionUtil
.
arrayListString
();
uCouponIdList
.
add
(
uCouponId
);
List
<
CandyUserCouponBasicDto
>
dtoList
=
backCoupon
(
getCouponByUid
(
uid
),
uCouponIdList
);
setCouponByUid
(
uid
,
dtoList
);
}
aBoolean
=
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"CONSUMER SQL FAIL ==> {}"
,
e
.
getMessage
(),
e
);
}
finally
{
if
(!
aBoolean
)
{
HashMap
<
String
,
String
>
map
=
CollectionUtil
.
mapStringString
();
map
.
put
(
"message"
,
msg
);
stringRedisTemplate
.
opsForStream
().
add
(
StreamRecords
.
mapBacked
(
map
).
withStreamKey
(
this
.
getRedisStreamKey
()));
}
}
return
aBoolean
;
}
private
List
<
CandyUserCouponBasicDto
>
getCouponByUid
(
String
uid
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_USER_COUPON
.
concat
(
uid
);
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
//降级
return
new
ArrayList
();
}
else
{
return
(
List
<
CandyUserCouponBasicDto
>)
obj
;
}
}
// 覆盖 CandyUserCouponBasicDto数组 根据用户id
private
void
setCouponByUid
(
String
uid
,
List
<
CandyUserCouponBasicDto
>
dtoList
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_USER_COUPON
.
concat
(
uid
);
redisUtil
.
set
(
redisKey
,
dtoList
);
}
/**
* 回退券
*
* @param dtoList CouponBaseDtoList
* @param uCouponIdList 券唯一id list
* @return List<CandyUserCouponBasicDto>
*/
private
List
<
CandyUserCouponBasicDto
>
backCoupon
(
List
<
CandyUserCouponBasicDto
>
dtoList
,
ArrayList
<
String
>
uCouponIdList
)
{
boolean
isHas
=
false
;
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(
uCouponIdList
.
contains
(
dtoItem
.
getUcouponId
()))
{
if
(
dtoItem
.
getState
().
equals
(
5
))
{
dtoItem
.
setState
(
1
);
isHas
=
true
;
//券存在
}
else
{
}
}
}
if
(!
isHas
)
{
return
null
;
//券不存在
}
return
dtoList
;
}
protected
abstract
String
getRedisStreamKey
();
protected
abstract
String
getRedisStreamGroup
();
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/AbstractSqlRedisReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.consumer.candy.service.IBaseDao
;
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
;
@Slf4j
public
abstract
class
AbstractSqlRedisReceiver
implements
StreamListener
<
String
,
MapRecord
<
String
,
String
,
String
>>
{
@Autowired
private
IBaseDao
baseDao
;
@Autowired
StringRedisTemplate
stringRedisTemplate
;
@Autowired
private
RedisUtil
redisUtil
;
@Override
public
void
onMessage
(
MapRecord
<
String
,
String
,
String
>
message
)
{
log
.
debug
(
"CONSUMER SQL[streamKey:{},messageId:{},stream:{},body:{}]"
,
this
.
getRedisStreamKey
(),
message
.
getId
(),
message
.
getStream
(),
message
.
getValue
());
boolean
result
=
this
.
consumerSqlDaoHandler
(
message
.
getValue
().
get
(
"message"
));
log
.
info
(
"CONSUMER SQL RESULT:{} ==> MESSAGE_ID:{}"
,
result
,
message
.
getId
());
try
{
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
}
catch
(
Exception
e
)
{
log
.
error
(
"#CONSUMER SQL RESULT:{} ==> DEL_REDIS_QUEUE_MSG_EXCEPTION[MESSAGE_ID:{},MSG:{}]"
,
result
,
message
.
getId
(),
JsonUtils
.
toJson
(
message
),
e
);
}
finally
{
try
{
stringRedisTemplate
.
opsForStream
().
acknowledge
(
getRedisStreamGroup
(),
message
);
stringRedisTemplate
.
opsForStream
().
delete
(
this
.
getRedisStreamKey
(),
message
.
getId
());
}
catch
(
Exception
ignored
)
{
}
}
}
private
boolean
consumerSqlDaoHandler
(
String
msg
)
{
Boolean
aBoolean
=
false
;
try
{
SqlMapping
.
SqlMessage
sqlMessage
=
JsonUtils
.
fromJson
(
msg
,
SqlMapping
.
SqlMessage
.
class
);
if
(
sqlMessage
==
null
)
{
aBoolean
=
true
;
}
else
{
aBoolean
=
baseDao
.
batchSqls
(
sqlMessage
.
getSqls
(),
sqlMessage
.
getArgs
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"CONSUMER SQL FAIL ==> {}"
,
e
.
getMessage
(),
e
);
}
finally
{
if
(!
aBoolean
)
{
HashMap
<
String
,
String
>
map
=
CollectionUtil
.
mapStringString
();
map
.
put
(
"message"
,
msg
);
stringRedisTemplate
.
opsForStream
().
add
(
StreamRecords
.
mapBacked
(
map
).
withStreamKey
(
this
.
getRedisStreamKey
()));
}
}
return
aBoolean
;
}
protected
abstract
String
getRedisStreamKey
();
protected
abstract
String
getRedisStreamGroup
();
}
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/ConsumerCandyCouponBackRdsReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
org.springframework.stereotype.Component
;
@Component
public
class
ConsumerCandyCouponBackRdsReceiver
extends
AbstractSqlRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
CandyQueue
.
COUPON_BACK
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
CandyQueue
.
COUPON_BACK
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/ConsumerCandyCouponOrderBackRdsReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
org.springframework.stereotype.Component
;
@Component
public
class
ConsumerCandyCouponOrderBackRdsReceiver
extends
AbstractCouponOrderBackRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
CandyQueue
.
COUPON_ORDER_BACK
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
CandyQueue
.
COUPON_ORDER_BACK
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/ConsumerCandyCouponReceiveRdsReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
org.springframework.stereotype.Component
;
@Component
public
class
ConsumerCandyCouponReceiveRdsReceiver
extends
AbstractSqlRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
CandyQueue
.
COUPON_RECEIVE
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
CandyQueue
.
COUPON_RECEIVE
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/receiver/ConsumerCandyCouponUseRdsReceiver.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
receiver
;
import
com.liquidnet.service.base.constant.MQConst
;
import
org.springframework.stereotype.Component
;
@Component
public
class
ConsumerCandyCouponUseRdsReceiver
extends
AbstractSqlRedisReceiver
{
@Override
protected
String
getRedisStreamKey
()
{
return
MQConst
.
CandyQueue
.
COUPON_USE
.
getKey
();
}
@Override
protected
String
getRedisStreamGroup
()
{
return
MQConst
.
CandyQueue
.
COUPON_USE
.
getGroup
();
}
}
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/java/com/liquidnet/service/consumer/candy/service/IBaseDao.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
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-candy/src/main/java/com/liquidnet/service/consumer/candy/service/impl/BaseDao.java
0 → 100644
View file @
602e9445
package
com
.
liquidnet
.
service
.
consumer
.
candy
.
service
.
impl
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.consumer.candy.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-candy/src/main/resources/bootstrap-dev.yml
0 → 100644
View file @
602e9445
# 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-candy
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/resources/bootstrap-prod.yml
0 → 100644
View file @
602e9445
# 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-candy
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/resources/bootstrap-service-consumer-candy.yml
0 → 100644
View file @
602e9445
#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-candy/src/main/resources/bootstrap-test.yml
0 → 100644
View file @
602e9445
# 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-candy
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/liquidnet-service-consumer-candy/src/main/resources/bootstrap.yml
0 → 100644
View file @
602e9445
spring
:
application
:
name
:
liquidnet-service-consumer-candy
profiles
:
active
:
dev
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-consumer-all/pom.xml
View file @
602e9445
...
@@ -15,12 +15,14 @@
...
@@ -15,12 +15,14 @@
<module>
liquidnet-service-consumer-adam
</module>
<module>
liquidnet-service-consumer-adam
</module>
<module>
liquidnet-service-consumer-dragon
</module>
<module>
liquidnet-service-consumer-dragon
</module>
<module>
liquidnet-service-consumer-sweet
</module>
<module>
liquidnet-service-consumer-sweet
</module>
<module>
liquidnet-service-consumer-candy
</module>
</modules>
</modules>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-web
</artifactId>
<artifactId>
liquidnet-common-service-base
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
...
...
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