记得上下班打卡 | 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
57d69834
Commit
57d69834
authored
Oct 25, 2021
by
anjiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新建merchant
parent
66cd5672
Changes
31
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
2231 additions
and
0 deletions
+2231
-0
liquidnet-service-merchant-dev.yml
...onfig/liquidnet-config/liquidnet-service-merchant-dev.yml
+22
-0
liquidnet-service-merchant-test.yml
...nfig/liquidnet-config/liquidnet-service-merchant-test.yml
+29
-0
liquidnet-service-merchant.yml
...us-config/liquidnet-config/liquidnet-service-merchant.yml
+103
-0
db_ln_candy_initialdata.sql
...et-service-merchant-impl/docu/db_ln_candy_initialdata.sql
+159
-0
redis_queue_create.txt
...quidnet-service-merchant-impl/docu/redis_queue_create.txt
+16
-0
pom.xml
...-service-merchant/liquidnet-service-merchant-impl/pom.xml
+55
-0
ServiceCandyApplication.java
...n/java/com/liquidnet/service/ServiceCandyApplication.java
+48
-0
CandyWebMvcConfig.java
...com/liquidnet/service/candy/config/CandyWebMvcConfig.java
+19
-0
CandyCouponCodeController.java
...t/service/candy/controller/CandyCouponCodeController.java
+20
-0
CandyCouponController.java
...idnet/service/candy/controller/CandyCouponController.java
+343
-0
CandyCouponRuleController.java
...t/service/candy/controller/CandyCouponRuleController.java
+20
-0
CandyMgtCouponController.java
...et/service/candy/controller/CandyMgtCouponController.java
+20
-0
CandyUserCouponController.java
...t/service/candy/controller/CandyUserCouponController.java
+20
-0
CandyCouponCodeServiceImpl.java
...ervice/candy/service/impl/CandyCouponCodeServiceImpl.java
+17
-0
CandyCouponRuleServiceImpl.java
...ervice/candy/service/impl/CandyCouponRuleServiceImpl.java
+17
-0
CandyCouponServiceImpl.java
...et/service/candy/service/impl/CandyCouponServiceImpl.java
+544
-0
CandyMgtCouponServiceImpl.java
...service/candy/service/impl/CandyMgtCouponServiceImpl.java
+17
-0
CandyUserCouponServiceImpl.java
...ervice/candy/service/impl/CandyUserCouponServiceImpl.java
+17
-0
CouponBaseUtil.java
...java/com/liquidnet/service/candy/util/CouponBaseUtil.java
+374
-0
ObjectUtil.java
...ain/java/com/liquidnet/service/candy/util/ObjectUtil.java
+37
-0
QueueUtils.java
...ain/java/com/liquidnet/service/candy/util/QueueUtils.java
+28
-0
RedisDataUtils.java
...java/com/liquidnet/service/candy/util/RedisDataUtils.java
+130
-0
bootstrap-dev.yml
...ervice-merchant-impl/src/main/resources/bootstrap-dev.yml
+14
-0
bootstrap-prod.yml
...rvice-merchant-impl/src/main/resources/bootstrap-prod.yml
+14
-0
bootstrap-service-merchant.yml
...nt-impl/src/main/resources/bootstrap-service-merchant.yml
+17
-0
bootstrap-test.yml
...rvice-merchant-impl/src/main/resources/bootstrap-test.yml
+18
-0
bootstrap.yml
...et-service-merchant-impl/src/main/resources/bootstrap.yml
+5
-0
errors.properties
...ervice-merchant-impl/src/main/resources/errors.properties
+79
-0
sqlmap.properties
...ervice-merchant-impl/src/main/resources/sqlmap.properties
+9
-0
pom.xml
liquidnet-bus-service/liquidnet-service-merchant/pom.xml
+19
-0
pom.xml
liquidnet-bus-service/pom.xml
+1
-0
No files found.
liquidnet-bus-config/liquidnet-config/liquidnet-service-merchant-dev.yml
0 → 100644
View file @
57d69834
liquidnet
:
system
:
updating
:
switch
:
false
info
:
port
:
9013
context
:
/candy
name
:
liquidnet-service-candy
logfile
:
path
:
/data/logs
name
:
service-candy
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
:
debug
mysql
:
database-name
:
dev_ln_scene
mongodb
:
sslEnabled
:
false
database
:
dev_ln_scene
liquidnet-bus-config/liquidnet-config/liquidnet-service-merchant-test.yml
0 → 100644
View file @
57d69834
liquidnet
:
system
:
updating
:
switch
:
false
info
:
port
:
9013
context
:
/adam
name
:
liquidnet-service-adam
logfile
:
path
:
/data/logs
name
:
service-adam
config
:
classpath:logback-spring.xml
file-max-size
:
200MB
level
:
debug
mysql
:
database-name
:
test_ln_scene
mongodb
:
sslEnabled
:
false
database
:
test_ln_scene
url-pay
:
pay
:
${liquidnet.service.adam.url-pay.pay}
check
:
${liquidnet.service.adam.url-pay.check}
callback
:
${liquidnet.service.adam.url-pay.callback}
reviewer
:
app-login
:
mobile
:
13724286255
user-info
:
false
#以下为spring各环境个性配置
liquidnet-bus-config/liquidnet-config/liquidnet-service-merchant.yml
0 → 100644
View file @
57d69834
server
:
port
:
${liquidnet.info.port}
tomcat
:
uri-encoding
:
UTF-8
maxThreads
:
2000
#默认200
minSpareThreads
:
2000
#默认10
maxConnections
:
20000
#默认10000
acceptCount
:
5000
#默认100
processorCache
:
-1
#默认200
servlet
:
context-path
:
${liquidnet.info.context}
# -----------------------------------------------------------
knife4j
:
enable
:
true
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
:
${liquidnet.logfile.file-max-size}
pattern
:
file
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
%-5level
%X{lnsTranceId}
[%logger{96}:%line]
-
%msg%n'
console
:
'
%d{yyyy-MM-dd
HH:mm:ss.SSS}
%-5level
%X{lnsTranceId}
[%logger{96}:%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}
# -----------------------------------------------------------
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@'
# -----------------------------------------------------------
mybatis-plus
:
mapper-locations
:
classpath:com.liquidnet.service.candy.mapper/*Mapper.xml
# -----------------------------------------------------------
spring
:
application
:
name
:
${liquidnet.info.name}
servlet
:
multipart
:
max-file-size
:
5MB
max-request-size
:
10MB
profiles
:
include
:
common-service
#这里加载management相关公共配置
autoconfigure
:
exclude
:
-
org.springframework.cloud.bus.BusAutoConfiguration
-
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis
:
database
:
15
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
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}
# -----------------------------------------------------------
# -----------------------------------------------------------
global-auth
:
exclude-url-pattern
:
-
${liquidnet.info.context}/doc.html
-
${liquidnet.info.context}/webjars/**
-
${liquidnet.info.context}/swagger-resources/**
-
${liquidnet.info.context}/v2/api-docs*
-
${liquidnet.info.context}/candy-coupon/useBack
-
${liquidnet.info.context}/candy-coupon/useBackJxl
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/docu/db_ln_candy_initialdata.sql
0 → 100644
View file @
57d69834
#
create
database
if
not
exists
ln_scene
character
set
utf8mb4
collate
utf8mb4_unicode_ci
;
#
use
ln_scene
;
#
-- >>------------------------------------------------------------------------------------ |20210817会员与券改版
#
券发放管理
drop
table
if
exists
candy_mgt_coupon
;
create
table
candy_mgt_coupon
(
mid
bigint
unsigned
auto_increment
primary
key
,
mcoupon_id
varchar
(
64
)
not
null
,
coupon_id
varchar
(
64
)
not
null
comment
'~candy_coupon.coupon_id'
,
state
tinyint
comment
'发放状态[0-未发放|1-已发放|2-无效|3-已取消|9-发放中|10-会员礼包初始模版]'
,
#
bind_type
smallint
comment
'领取方式[0-用户输入兑换|1-发放至用户]'
,
event_amt
int
comment
'发放量'
,
event_type
tinyint
comment
'发放类型[0-保留|1-会员|2-手机号|10-全体用户]'
,
event_limit
text
comment
'`发放类型`为2-手机号时发放手机号以,分隔'
,
event_at
datetime
(
3
)
comment
'发放时间(立即-当前时间+3分钟|预约-点选时间)'
,
operator
varchar
(
64
)
not
null
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
comment
text
)
engine
InnoDB
comment
'券发放管理'
;
create
index
idx_candy_mgt_coupon_id
on
candy_mgt_coupon
(
mcoupon_id
);
#
券基础信息
drop
table
if
exists
candy_coupon
;
create
table
candy_coupon
(
mid
bigint
unsigned
auto_increment
primary
key
,
coupon_id
varchar
(
64
)
not
null
,
state
tinyint
comment
'券状态[0-INIT|1-NORMAL|2-INVALID]'
,
title
varchar
(
50
)
not
null
comment
'券标题'
,
label
varchar
(
50
)
comment
'标注'
,
notice
varchar
(
200
)
comment
'注意/须知'
,
exclusive
smallint
comment
'专享标识[0-常规|1-会员礼包]'
,
busi_type
smallint
comment
'业务类别[0-全场|1-演出|2-商品|3-优先购]'
,
cou_type
smallint
comment
'券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]'
,
bind_type
smallint
comment
'领取方式[0-用户输入兑换|1-发放至用户]'
,
discount
decimal
(
8
,
2
)
comment
'折扣[8折即0.8]'
,
val_face
decimal
(
8
,
2
)
comment
'面值'
,
val_over
decimal
(
8
,
2
)
comment
'满减~满'
,
val_minus
decimal
(
8
,
2
)
comment
'满减~减'
,
overlay
tinyint
default
0
comment
'叠加限制[0-限制|1-叠加]'
,
overlay_level
tinyint
default
0
comment
'#同类别券叠加适用'
,
validity
int
comment
'有效期(单位天)'
,
redeem_validity
int
comment
'兑换有效期(单位天)'
,
redeem_start
datetime
(
3
)
comment
'兑换开放时间'
,
redeem_stop
datetime
(
3
)
comment
'兑换停止时间'
,
effect_at
datetime
(
3
)
comment
'生效时间'
,
expire_at
datetime
(
3
)
comment
'过期时间'
,
operator
varchar
(
64
)
not
null
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'券基础信息'
;
create
unique
index
uidx_candy_coupon_id
on
candy_coupon
(
coupon_id
);
#
券适用规则
drop
table
if
exists
candy_coupon_rule
;
create
table
candy_coupon_rule
(
mid
bigint
unsigned
auto_increment
primary
key
,
crule_id
varchar
(
64
)
not
null
,
coupon_id
varchar
(
64
)
not
null
,
use_scope
smallint
comment
'适用范围[100-全场|90-演出|80-商品]'
,
busi_name
varchar
(
64
)
comment
'适用名称'
,
busi_id
varchar
(
64
)
comment
'适用ID'
,
state
tinyint
comment
'0-INIT,1-NORMAL,2-INVALID'
,
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'券适用规则'
;
create
unique
index
uidx_candy_coupon_rule_id
on
candy_coupon_rule
(
crule_id
);
#
券码信息
drop
table
if
exists
candy_coupon_code
;
create
table
candy_coupon_code
(
mid
bigint
unsigned
auto_increment
primary
key
,
ccode
varchar
(
64
)
not
null
comment
'券码'
,
coupon_id
varchar
(
64
)
not
null
comment
'~candy_coupon.coupon_id'
,
state
tinyint
comment
'状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]'
,
ucoupon_id
varchar
(
64
)
comment
'~candy_user_coupon.ucoupon_id'
,
redeem_uid
varchar
(
64
)
comment
'兑换用户UID'
,
redeem_mobile
varchar
(
64
)
comment
'兑换用户手机号'
,
redeem_at
datetime
(
3
)
comment
'兑换时间'
,
redeem_start
datetime
(
3
)
comment
'兑换开放时间'
,
redeem_stop
datetime
(
3
)
comment
'兑换停止时间'
,
operator
varchar
(
64
)
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'券码信息'
;
create
unique
index
uidx_candy_coupon_code_id
on
candy_coupon_code
(
ccode
,
coupon_id
);
#
用户券信息
drop
table
if
exists
candy_user_coupon
;
create
table
candy_user_coupon
(
mid
bigint
unsigned
auto_increment
primary
key
,
ucoupon_id
varchar
(
64
)
not
null
,
mcoupon_id
varchar
(
64
)
comment
'~candy_mgt_coupon.mcoupon_id'
,
uid
varchar
(
64
)
not
null
comment
'~adam_user.uid'
,
coupon_id
varchar
(
64
)
not
null
comment
'~candy_coupon.coupon_id'
,
state
tinyint
comment
'用户券状态[1-可用|2-无效|3-已过期|5-已使用]'
,
ccode
varchar
(
64
)
comment
'券码~candy_coupon_code.ccode'
,
bind_at
datetime
(
3
)
comment
'激活时间'
,
dued_at
datetime
(
3
)
comment
'到期时间'
,
used_at
datetime
(
3
)
comment
'使用时间'
,
used_for
varchar
(
255
)
comment
'用于记录购买的内容'
,
operator
varchar
(
64
)
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'用户券信息'
;
create
unique
index
uidx_candy_user_coupon_id
on
candy_user_coupon
(
ucoupon_id
);
create
index
idx_candy_ucoupon_uid_state
on
candy_user_coupon
(
uid
,
state
);
#
公有券信息
drop
table
if
exists
candy_common_coupon
;
create
table
candy_common_coupon
(
mid
bigint
unsigned
auto_increment
primary
key
,
ccoupon_id
varchar
(
64
)
not
null
,
mcoupon_id
varchar
(
64
)
not
null
comment
'~candy_mgt_coupon.mcoupon_id'
,
coupon_id
varchar
(
64
)
not
null
comment
'~candy_coupon.coupon_id'
,
state
tinyint
comment
'公有券状态[1-可用|2-无效|3-已过期]'
,
ranged
tinyint
comment
'公有券范围(~candy_mgt_coupon.event_type)'
,
operator
varchar
(
64
)
not
null
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'公有券信息'
;
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/docu/redis_queue_create.txt
0 → 100644
View file @
57d69834
-- 使用 --
XADD merchant:stream:rk.coupon.use * 0 0
XGROUP CREATE merchant:stream:rk.coupon.use group.coupon.use 0
-- 回退 --
XADD merchant:stream:rk.coupon.back * 0 0
XGROUP CREATE merchant:stream:rk.coupon.back group.coupon.back 0
-- 领取 --
XADD merchant:stream:rk.coupon.receive * 0 0
XGROUP CREATE merchant:stream:rk.coupon.receive group.coupon.receive 0
-- 票务订单回退 --
XADD merchant:stream:rk.coupon.order.back * 0 0
XGROUP CREATE merchant:stream:rk.coupon.order.back group.coupon.order.back 0
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/pom.xml
0 → 100644
View file @
57d69834
<?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-merchant
</artifactId>
<groupId>
com.liquidnet
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
liquidnet-service-merchant-impl
</artifactId>
<properties>
<bitwalker.version>
1.19
</bitwalker.version>
</properties>
<dependencies>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-swagger
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-web
</artifactId>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-common-cache-redis
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-service-merchant-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.liquidnet
</groupId>
<artifactId>
liquidnet-api-feign-platform
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/ServiceCandyApplication.java
0 → 100644
View file @
57d69834
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.cloud.openfeign.EnableFeignClients
;
import
org.springframework.core.env.Environment
;
import
java.net.InetAddress
;
import
java.util.Arrays
;
@Slf4j
@EnableFeignClients
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
public
class
ServiceCandyApplication
implements
CommandLineRunner
{
@Autowired
private
Environment
environment
;
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ServiceCandyApplication
.
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
();
}
}
// @Bean
// MongoTransactionManager transactionManager(MongoDbFactory factory){
// return new MongoTransactionManager(factory);
// }
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/config/CandyWebMvcConfig.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
config
;
import
com.liquidnet.common.web.config.WebMvcConfig
;
import
com.liquidnet.common.web.filter.GlobalAuthorityInterceptor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
@Configuration
public
class
CandyWebMvcConfig
extends
WebMvcConfig
{
@Autowired
GlobalAuthorityInterceptor
globalAuthorityInterceptor
;
@Override
protected
void
addInterceptors
(
InterceptorRegistry
registry
)
{
registry
.
addInterceptor
(
globalAuthorityInterceptor
).
addPathPatterns
(
"/**"
);
super
.
addInterceptors
(
registry
);
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/controller/CandyCouponCodeController.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 券码信息 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@RestController
@RequestMapping
(
"/merchant-coupon-code"
)
public
class
CandyCouponCodeController
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/controller/CandyCouponController.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
controller
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.merchant.param.BackCouponParam
;
import
com.liquidnet.service.merchant.service.ICandyCouponService
;
import
com.liquidnet.service.merchant.util.ObjectUtil
;
import
com.liquidnet.service.merchant.vo.CandyCouponPreVo
;
import
com.liquidnet.service.merchant.vo.CandyCouponVo
;
import
com.liquidnet.service.merchant.vo.CandyMyCouponListVo
;
import
com.liquidnet.service.merchant.vo.CandyUseResultVo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
/**
* <p>
* 券基础信息 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Api
(
tags
=
"券相关接口"
)
@RestController
@Validated
@RequestMapping
(
"/merchant-coupon"
)
public
class
CandyCouponController
{
@Autowired
private
ICandyCouponService
candyCouponService
;
//我的券列表
@GetMapping
(
"my"
)
@ApiOperation
(
"我的券列表"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"Integer"
,
name
=
"type"
,
value
=
"类型 1可用 2过期/已使用 "
,
required
=
true
),
})
public
ResponseDto
<
CandyMyCouponListVo
>
myCoupon
(
@RequestParam
(
"type"
)
@NotNull
Integer
type
,
@RequestParam
(
required
=
false
,
name
=
"page"
)
Integer
page
)
{
CandyMyCouponListVo
vo
=
candyCouponService
.
myCoupon
(
type
);
// List<CandyCouponVo> list = vo.getMyCoupon();
// List<CandyCouponVo> listVo = ObjectUtil.getCandyCouponVoArrayList();
// if (page == null || page == 0) {
// page = 1;
// }
// int size = 40;
// int initSize = (page - 1) * size;
// int forSize = page * size;
// if (forSize >= list.size()) {
// forSize = list.size();
// }
// for (int i = initSize; i < forSize; i++) {
// listVo.add(list.get(i));
// }
// vo.setMyCoupon(listVo);
return
ResponseDto
.
success
(
vo
);
}
//我的会员权益券统计
@GetMapping
(
"member-pre"
)
@ApiOperation
(
"会员权益券统计"
)
public
ResponseDto
<
List
<
CandyCouponPreVo
>>
myCouponPre
()
{
return
ResponseDto
.
success
(
candyCouponService
.
memberCouponPre
(
CurrentUtil
.
getCurrentUid
()));
}
//我的会员权益券列表
@GetMapping
(
"member"
)
@ApiOperation
(
"会员权益券列表"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"mCouponId"
,
value
=
"mCouponId"
,
required
=
true
),
})
public
ResponseDto
<
List
<
CandyCouponVo
>>
myCoupon
(
@RequestParam
(
"mCouponId"
)
@NotNull
@NotBlank
String
mCouponId
)
{
return
ResponseDto
.
success
(
candyCouponService
.
memberCoupon
(
mCouponId
));
}
//要使用券列表 - 演出
@GetMapping
(
"preUse/performance"
)
@ApiOperation
(
"要使用券列表 - 演出"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"BigDecimal"
,
name
=
"priceTotal"
,
value
=
"待支付总金额"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"performanceId"
,
value
=
"演出id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"timeId"
,
value
=
"场次id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"ticketId"
,
value
=
"票id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"Integer"
,
name
=
"type"
,
value
=
"类型 1可用 2过期/已使用 "
,
required
=
true
),
})
public
ResponseDto
<
CandyMyCouponListVo
>
preUsePerformanceCoupon
(
@RequestParam
(
"priceTotal"
)
@NotNull
BigDecimal
priceTotal
,
@RequestParam
(
"performanceId"
)
@NotNull
@NotBlank
String
performanceId
,
@RequestParam
(
"timeId"
)
@NotNull
@NotBlank
String
timeId
,
@RequestParam
(
"ticketId"
)
@NotNull
@NotBlank
String
ticketId
,
@RequestParam
(
"type"
)
@NotNull
Integer
type
,
@RequestParam
(
required
=
false
,
name
=
"page"
)
Integer
page
)
{
CandyMyCouponListVo
vo
=
candyCouponService
.
preUsePerformanceCoupon
(
priceTotal
,
performanceId
,
timeId
,
ticketId
,
type
);
List
<
CandyCouponVo
>
list
=
vo
.
getMyCoupon
();
List
<
CandyCouponVo
>
listVo
=
ObjectUtil
.
getCandyCouponVoArrayList
();
if
(
page
==
null
||
page
==
0
)
{
page
=
1
;
}
int
size
=
10
;
int
initSize
=
(
page
-
1
)
*
size
;
int
forSize
=
page
*
size
;
if
(
forSize
>=
list
.
size
())
{
forSize
=
list
.
size
();
}
for
(
int
i
=
initSize
;
i
<
forSize
;
i
++)
{
listVo
.
add
(
list
.
get
(
i
));
}
vo
.
setMyCoupon
(
listVo
);
return
ResponseDto
.
success
(
vo
);
}
// 是否可用券演出
@GetMapping
(
"preCanUse/performance"
)
@ApiOperation
(
"是否可用券 - 演出"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"BigDecimal"
,
name
=
"priceTotal"
,
value
=
"待支付总金额"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"performanceId"
,
value
=
"演出id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"timeId"
,
value
=
"场次id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"ticketId"
,
value
=
"票id"
,
required
=
true
),
})
public
ResponseDto
<
HashMap
<
String
,
Integer
>>
preCanUsePerformanceCoupon
(
@RequestParam
(
"priceTotal"
)
@NotNull
BigDecimal
priceTotal
,
@RequestParam
(
"performanceId"
)
@NotNull
@NotBlank
String
performanceId
,
@RequestParam
(
"timeId"
)
@NotNull
@NotBlank
String
timeId
,
@RequestParam
(
"ticketId"
)
@NotNull
@NotBlank
String
ticketId
)
{
HashMap
<
String
,
Integer
>
hashMap
=
CollectionUtil
.
mapStringInteger
();
hashMap
.
put
(
"canUse"
,
candyCouponService
.
preCanUsePerformanceCoupon
(
priceTotal
,
performanceId
,
timeId
,
ticketId
));
return
ResponseDto
.
success
(
hashMap
);
}
//要使用券列表 - 商品
@PostMapping
(
"preUse/goods"
)
@ApiOperation
(
"要使用券列表 - 商品"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"BigDecimal"
,
name
=
"priceTotal"
,
value
=
"待支付总金额"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"goodId"
,
value
=
"商品id(逗号隔开的字符串)"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"Integer"
,
name
=
"type"
,
value
=
"类型 1可用 2过期/已使用 "
,
required
=
true
),
})
public
ResponseDto
<
CandyMyCouponListVo
>
preUseGoodCoupon
(
@RequestParam
(
"priceTotal"
)
@NotNull
BigDecimal
priceTotal
,
@RequestParam
(
"goodId"
)
@NotNull
@NotBlank
String
goodId
,
@RequestParam
(
"type"
)
@NotNull
Integer
type
,
@RequestParam
(
required
=
false
,
name
=
"page"
)
Integer
page
)
{
CandyMyCouponListVo
vo
=
candyCouponService
.
preUseGoodCoupon
(
priceTotal
,
goodId
,
type
);
List
<
CandyCouponVo
>
list
=
vo
.
getMyCoupon
();
List
<
CandyCouponVo
>
listVo
=
ObjectUtil
.
getCandyCouponVoArrayList
();
if
(
page
==
null
||
page
==
0
)
{
page
=
1
;
}
int
size
=
10
;
int
initSize
=
(
page
-
1
)
*
size
;
int
forSize
=
page
*
size
;
if
(
forSize
>=
list
.
size
())
{
forSize
=
list
.
size
();
}
for
(
int
i
=
initSize
;
i
<
forSize
;
i
++)
{
listVo
.
add
(
list
.
get
(
i
));
}
vo
.
setMyCoupon
(
listVo
);
return
ResponseDto
.
success
(
vo
);
}
//是否可用券 - 商品
@PostMapping
(
"preCanUse/goods"
)
@ApiOperation
(
"是否可用券 - 商品"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"BigDecimal"
,
name
=
"priceTotal"
,
value
=
"待支付总金额"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"goodId"
,
value
=
"商品id(逗号隔开的字符串)"
,
required
=
true
)
})
public
ResponseDto
<
HashMap
<
String
,
Integer
>>
preCanUseGoodCoupon
(
@RequestParam
(
"priceTotal"
)
@NotNull
BigDecimal
priceTotal
,
@RequestParam
(
"goodId"
)
@NotNull
@NotBlank
String
goodId
)
{
HashMap
<
String
,
Integer
>
hashMap
=
CollectionUtil
.
mapStringInteger
();
hashMap
.
put
(
"canUse"
,
candyCouponService
.
preCanUseGoodCoupon
(
priceTotal
,
goodId
));
return
ResponseDto
.
success
(
hashMap
);
}
//要使用券列表 - 演出提前
@GetMapping
(
"my/advance"
)
@ApiOperation
(
"提前券列表"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"performanceId"
,
value
=
"演出id"
,
required
=
true
)
})
public
ResponseDto
<
List
<
CandyCouponVo
>>
myAdvanceCoupon
(
@RequestParam
(
"performanceId"
)
@NotNull
@NotBlank
String
performanceId
,
@RequestParam
(
required
=
false
,
name
=
"page"
)
Integer
page
)
{
List
<
CandyCouponVo
>
list
=
candyCouponService
.
myAdvanceCoupon
(
performanceId
);
List
<
CandyCouponVo
>
listVo
=
ObjectUtil
.
getCandyCouponVoArrayList
();
if
(
page
==
null
||
page
==
0
)
{
page
=
1
;
}
int
size
=
10
;
int
initSize
=
(
page
-
1
)
*
size
;
int
forSize
=
page
*
size
;
if
(
forSize
>=
list
.
size
())
{
forSize
=
list
.
size
();
}
for
(
int
i
=
initSize
;
i
<
forSize
;
i
++)
{
listVo
.
add
(
list
.
get
(
i
));
}
return
ResponseDto
.
success
(
listVo
);
}
// //判断券是否可用
// @GetMapping("state")
// @ApiOperation("券是否可用")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", dataType = "String", name = "uCouponId", value = "券唯一表示id", required = true),
// })
// public ResponseDto<HashMap<String, Integer>> stateCoupon(@RequestParam("uCouponId") @NotNull @NotBlank String uCouponId) {
// Integer result = candyCouponService.stateCoupon(uCouponId);
// if (result == null) {
// return ResponseDto.failure();
// }
// HashMap<String, Integer> hashMap = CollectionUtil.mapStringInteger();
// hashMap.put("state", result);
// return ResponseDto.success(hashMap);
// }
//判断券是否可用并使用
@PostMapping
(
"use"
)
@ApiOperation
(
"券使用"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"uCouponId"
,
value
=
"券唯一表示id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"content"
,
value
=
"消费内容"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"totalPrice"
,
value
=
"消费价格"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"goodId"
,
value
=
"商品id(逗号隔开的字符串) 没有传-1"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"performanceId"
,
value
=
"演出id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"timeId"
,
value
=
"场次id"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"ticketId"
,
value
=
"票id"
,
required
=
true
),
})
public
ResponseDto
<
CandyUseResultVo
>
useCoupon
(
@RequestParam
(
"uCouponId"
)
@NotNull
@NotBlank
String
uCouponId
,
@RequestParam
(
"content"
)
@NotNull
@NotBlank
String
content
,
@RequestParam
(
"totalPrice"
)
@NotNull
String
totalPrice
,
@RequestParam
(
"goodId"
)
@NotNull
@NotBlank
String
goodId
,
@RequestParam
(
"performanceId"
)
@NotNull
@NotBlank
String
performanceId
,
@RequestParam
(
"timeId"
)
@NotNull
@NotBlank
String
timeId
,
@RequestParam
(
"ticketId"
)
@NotNull
@NotBlank
String
ticketId
)
{
CandyUseResultVo
result
=
candyCouponService
.
useCoupon
(
uCouponId
,
content
,
totalPrice
,
performanceId
,
timeId
,
ticketId
,
goodId
);
if
(
result
==
null
)
{
return
ResponseDto
.
failure
();
}
result
.
setValue
(
result
.
getValue
().
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
return
ResponseDto
.
success
(
result
);
}
//回退券
@PostMapping
(
"useBack"
)
@ApiOperation
(
"回退券"
)
public
ResponseDto
<
Boolean
>
useBackCoupon
(
@RequestBody
@Valid
List
<
BackCouponParam
>
backCouponParam
)
{
if
(
backCouponParam
.
size
()
>
100
)
{
return
ResponseDto
.
failure
(
"数据量不得大于100"
);
}
candyCouponService
.
useBackCoupon
(
backCouponParam
);
return
ResponseDto
.
success
();
}
@PostMapping
(
"useBackJxl"
)
@ApiOperation
(
"回退券jxl"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"uCouponIds"
,
value
=
"uCouponIds"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"uid"
,
value
=
"uid"
,
required
=
true
),
})
public
ResponseDto
<
Boolean
>
useBackCoupon
(
@RequestParam
(
"uCouponIds"
)
@NotNull
@NotBlank
String
uCouponIds
,
@RequestParam
(
"uid"
)
@NotNull
@NotBlank
String
uid
)
{
BackCouponParam
aNew
=
BackCouponParam
.
getNew
();
aNew
.
setuCouponIds
(
uCouponIds
);
aNew
.
setUid
(
uid
);
List
<
BackCouponParam
>
backCouponParam
=
new
ArrayList
<>();
backCouponParam
.
add
(
aNew
);
if
(
backCouponParam
.
size
()
>
100
)
{
return
ResponseDto
.
failure
(
"数据量不得大于100"
);
}
candyCouponService
.
useBackCoupon
(
backCouponParam
);
return
ResponseDto
.
success
();
}
//兑换券
@PostMapping
(
"receive"
)
@ApiOperation
(
"领取券"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"ccode"
,
value
=
"兑换码"
,
required
=
true
),
})
public
ResponseDto
<
String
>
receiveCoupon
(
@RequestParam
(
"ccode"
)
@NotNull
@NotBlank
String
ccode
)
{
return
candyCouponService
.
receiveCoupon
(
ccode
);
// if (result) {
// return ResponseDto.success();
// } else {
// return ResponseDto.failure();
// }
}
//兑换券详情
@PostMapping
(
"receive/details"
)
@ApiOperation
(
"领取券详情"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"ccode"
,
value
=
"兑换码"
,
required
=
true
),
})
public
ResponseDto
<
CandyCouponVo
>
receiveCouponDetails
(
@RequestParam
(
"ccode"
)
@NotNull
@NotBlank
String
ccode
)
{
return
candyCouponService
.
receiveCouponDetails
(
ccode
);
// if (result != null) {
// return ResponseDto.success(result);
// } else {
// return ResponseDto.failure();
// }
}
//根据券id获取券详情
@PostMapping
(
"receive/ListById"
)
@ApiOperation
(
"根据券id获取券详情"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"uCouponIds"
,
value
=
"券id(逗号隔开的字符串)"
,
required
=
true
),
})
public
ResponseDto
<
List
<
CandyCouponVo
>>
couponListById
(
@RequestParam
(
"uCouponIds"
)
@NotNull
@NotBlank
String
uCouponIds
)
{
return
candyCouponService
.
couponListById
(
uCouponIds
);
// if (result != null) {
// return ResponseDto.success(result);
// } else {
// return ResponseDto.failure();
// }
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/controller/CandyCouponRuleController.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 券适用规则 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@RestController
@RequestMapping
(
"/merchant-coupon-rule"
)
public
class
CandyCouponRuleController
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/controller/CandyMgtCouponController.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 券发放管理 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@RestController
@RequestMapping
(
"/merchant-mgt-coupon"
)
public
class
CandyMgtCouponController
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/controller/CandyUserCouponController.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 用户券信息 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@RestController
@RequestMapping
(
"/merchant-user-coupon"
)
public
class
CandyUserCouponController
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/service/impl/CandyCouponCodeServiceImpl.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
service
.
impl
;
import
com.liquidnet.service.merchant.service.ICandyCouponCodeService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 券码信息 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Service
public
class
CandyCouponCodeServiceImpl
implements
ICandyCouponCodeService
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/service/impl/CandyCouponRuleServiceImpl.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
service
.
impl
;
import
com.liquidnet.service.merchant.service.ICandyCouponRuleService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 券适用规则 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Service
public
class
CandyCouponRuleServiceImpl
implements
ICandyCouponRuleService
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/service/impl/CandyCouponServiceImpl.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
service
.
impl
;
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.constant.MQConst
;
import
com.liquidnet.service.merchant.dto.CandyCouponCodeDto
;
import
com.liquidnet.service.merchant.dto.CandyCouponInfoDto
;
import
com.liquidnet.service.merchant.dto.CandyCouponRuleDto
;
import
com.liquidnet.service.merchant.dto.CandyUserCouponBasicDto
;
import
com.liquidnet.service.merchant.param.BackCouponParam
;
import
com.liquidnet.service.merchant.service.ICandyCouponService
;
import
com.liquidnet.service.merchant.util.CouponBaseUtil
;
import
com.liquidnet.service.merchant.util.ObjectUtil
;
import
com.liquidnet.service.merchant.util.QueueUtils
;
import
com.liquidnet.service.merchant.util.RedisDataUtils
;
import
com.liquidnet.service.merchant.vo.CandyCouponPreVo
;
import
com.liquidnet.service.merchant.vo.CandyCouponVo
;
import
com.liquidnet.service.merchant.vo.CandyMyCouponListVo
;
import
com.liquidnet.service.merchant.vo.CandyUseResultVo
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* <p>
* 券基础信息 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Service
public
class
CandyCouponServiceImpl
implements
ICandyCouponService
{
@Autowired
private
RedisDataUtils
redisDataUtils
;
@Autowired
private
QueueUtils
queueUtils
;
@Override
public
CandyMyCouponListVo
myCoupon
(
Integer
type
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
CandyMyCouponListVo
vo
=
CandyMyCouponListVo
.
getNew
();
List
<
CandyCouponVo
>
memberCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
List
<
CandyCouponVo
>
myCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getBaseCouponUserVo
(
dtoItem
);
if
(
type
==
1
)
{
if
(
baseVo
.
getState
().
equals
(
3
)
||
dtoItem
.
getState
().
equals
(
5
))
{
continue
;
}
}
else
if
(
type
==
2
)
{
if
(
baseVo
.
getState
().
equals
(
1
))
{
continue
;
}
}
if
(
dtoItem
.
getExclusive
().
equals
(
1
))
{
//会员券
memberCoupon
.
add
(
baseVo
);
}
else
{
//非会员券
myCoupon
.
add
(
baseVo
);
}
}
//排序 可用->金额->类型->过期时间
memberCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
myCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
vo
.
setMemberCoupon
(
memberCoupon
);
vo
.
setMyCoupon
(
myCoupon
);
return
vo
;
}
@Override
public
List
<
CandyCouponPreVo
>
memberCouponPre
(
String
uid
)
{
ArrayList
<
CandyCouponPreVo
>
voArrayList
=
ObjectUtil
.
getCandyCouponPreVoArrayList
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
if
(!
CollectionUtil
.
isEmpty
(
dtoList
))
{
Map
<
String
,
Long
>
mCouponCountMap
=
dtoList
.
stream
()
.
filter
(
r
->
(
r
.
getExclusive
()
==
1
&&
r
.
getState
()
==
1
))
.
collect
(
Collectors
.
groupingBy
(
CandyUserCouponBasicDto:
:
getMcouponId
,
Collectors
.
counting
()));
mCouponCountMap
.
forEach
((
mCouponId
,
ct
)
->
voArrayList
.
add
(
CandyCouponPreVo
.
getNew
().
setMcouponId
(
mCouponId
).
setAvailableCt
(
ct
)));
}
return
voArrayList
;
}
@Override
public
List
<
CandyCouponVo
>
memberCoupon
(
String
mCouponId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
List
<
CandyCouponVo
>
memberCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(!
mCouponId
.
equals
(
dtoItem
.
getMcouponId
()))
{
continue
;
}
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getBaseCouponUserVo
(
dtoItem
);
if
(
dtoItem
.
getExclusive
().
equals
(
1
))
{
//会员券
memberCoupon
.
add
(
baseVo
);
}
}
//排序 可用->金额->类型->过期时间
memberCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
return
memberCoupon
;
}
@Override
public
CandyMyCouponListVo
preUsePerformanceCoupon
(
BigDecimal
priceTotal
,
String
performanceId
,
String
timeId
,
String
ticketId
,
Integer
type
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
CandyMyCouponListVo
vo
=
CandyMyCouponListVo
.
getNew
();
List
<
CandyCouponVo
>
memberCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
List
<
CandyCouponVo
>
myCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getPerformanceCouponUserVo
(
dtoItem
,
priceTotal
,
performanceId
,
timeId
,
ticketId
);
if
(
type
==
1
)
{
if
(
baseVo
.
getState
().
equals
(
3
)
||
dtoItem
.
getState
().
equals
(
5
))
{
continue
;
}
}
else
if
(
type
==
2
)
{
if
(
baseVo
.
getState
().
equals
(
1
))
{
continue
;
}
}
if
(
baseVo
.
getCouType
().
equals
(
101
))
{
continue
;
}
if
(
dtoItem
.
getExclusive
().
equals
(
1
))
{
//会员券
memberCoupon
.
add
(
baseVo
);
}
else
{
//非会员券
myCoupon
.
add
(
baseVo
);
}
}
//排序
memberCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
myCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
vo
.
setMemberCoupon
(
memberCoupon
);
vo
.
setMyCoupon
(
myCoupon
);
return
vo
;
}
@Override
public
Integer
preCanUsePerformanceCoupon
(
BigDecimal
priceTotal
,
String
performanceId
,
String
timeId
,
String
ticketId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
int
canUse
=
0
;
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getPerformanceCouponUserVo
(
dtoItem
,
priceTotal
,
performanceId
,
timeId
,
ticketId
);
if
(
baseVo
.
getCouType
().
equals
(
101
)
||
baseVo
.
getBusiType
()
==
2
)
{
continue
;
}
if
(
baseVo
.
getState
().
equals
(
1
))
{
//可用
canUse
=
1
;
break
;
}
else
{
//不可用
continue
;
}
}
return
canUse
;
}
@Override
public
CandyMyCouponListVo
preUseGoodCoupon
(
BigDecimal
priceTotal
,
String
goodId
,
Integer
type
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
CandyMyCouponListVo
vo
=
CandyMyCouponListVo
.
getNew
();
List
<
CandyCouponVo
>
memberCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
List
<
CandyCouponVo
>
myCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getGoodCouponUserVo
(
dtoItem
,
priceTotal
,
goodId
,
dtoList
.
size
());
if
(
type
==
1
)
{
if
(
baseVo
.
getState
().
equals
(
3
)
||
dtoItem
.
getState
().
equals
(
5
))
{
continue
;
}
}
else
if
(
type
==
2
)
{
if
(
baseVo
.
getState
().
equals
(
1
))
{
continue
;
}
}
if
(
baseVo
.
getCouType
().
equals
(
101
))
{
continue
;
}
if
(
dtoItem
.
getExclusive
().
equals
(
1
))
{
//会员券
memberCoupon
.
add
(
baseVo
);
}
else
{
//非会员券
myCoupon
.
add
(
baseVo
);
}
}
//排序
memberCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
myCoupon
.
sort
(
Comparator
.
comparing
(
CandyCouponVo:
:
getState
));
vo
.
setMemberCoupon
(
memberCoupon
);
vo
.
setMyCoupon
(
myCoupon
);
return
vo
;
}
@Override
public
Integer
preCanUseGoodCoupon
(
BigDecimal
priceTotal
,
String
goodId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
int
canUse
=
0
;
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getGoodCouponUserVo
(
dtoItem
,
priceTotal
,
goodId
,
dtoList
.
size
());
if
(
baseVo
.
getCouType
().
equals
(
101
)
||
baseVo
.
getBusiType
()
==
1
||
baseVo
.
getBusiType
()
==
3
)
{
continue
;
}
if
(
baseVo
.
getState
().
equals
(
1
))
{
//可用
canUse
=
1
;
break
;
}
else
{
//不可用
continue
;
}
}
return
canUse
;
}
@Override
public
List
<
CandyCouponVo
>
myAdvanceCoupon
(
String
performanceId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
List
<
CandyCouponVo
>
advanceCoupon
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(
dtoItem
.
getBusiType
().
equals
(
3
))
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getPerformanceCouponUserVo
(
dtoItem
,
BigDecimal
.
ZERO
,
performanceId
,
"-1"
,
"-1"
);
if
(
baseVo
.
getState
().
equals
(
1
))
{
advanceCoupon
.
add
(
baseVo
);
}
else
{
continue
;
}
}
else
{
continue
;
}
}
return
advanceCoupon
;
}
@Override
public
Integer
stateCoupon
(
String
uCouponId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
CandyUserCouponBasicDto
dto
=
CouponBaseUtil
.
getSingleDtoByUCouponId
(
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
),
uCouponId
);
if
(
dto
==
null
)
{
return
null
;
//券不存在
}
return
CouponBaseUtil
.
getCouponState
(
LocalDateTime
.
now
(),
dto
.
getDuedAt
(),
dto
.
getBindAt
(),
dto
.
getState
());
}
@Override
public
CandyUseResultVo
useCoupon
(
String
uCouponId
,
String
content
,
String
totalPrice
,
String
performanceId
,
String
timesId
,
String
ticketId
,
String
goodId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
CandyUseResultVo
vo
=
CandyUseResultVo
.
getNew
();
List
<
CandyUserCouponBasicDto
>
dtoList
=
CouponBaseUtil
.
useCoupon
(
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
),
uCouponId
,
content
);
if
(
dtoList
==
null
)
{
vo
.
setCouType
(-
1
);
vo
.
setValue
(
BigDecimal
.
ZERO
);
}
else
{
CandyUserCouponBasicDto
dto
=
CouponBaseUtil
.
getSingleDtoByUCouponId
(
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
),
uCouponId
);
if
(
dto
.
getBusiType
().
equals
(
3
))
{
dto
.
setCouType
(
101
);
}
else
{
dto
.
setCouType
(
dto
.
getCouType
());
}
vo
.
setCouType
(
dto
.
getCouType
());
switch
(
dto
.
getCouType
())
{
//券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]
case
1
:
vo
.
setValue
(
dto
.
getValFace
());
break
;
case
2
:
if
(
dto
.
getValOver
().
compareTo
(
new
BigDecimal
(
totalPrice
))
<=
0
)
{
vo
.
setValue
(
dto
.
getValMinus
());
}
else
{
vo
.
setCouType
(-
1
);
vo
.
setValue
(
BigDecimal
.
ZERO
);
}
break
;
case
3
:
vo
.
setValue
(
new
BigDecimal
(
totalPrice
));
break
;
case
4
:
vo
.
setValue
(
dto
.
getDiscount
());
break
;
default
:
vo
.
setValue
(
BigDecimal
.
valueOf
(
0
));
break
;
}
Boolean
isTarget
=
false
;
for
(
CandyCouponRuleDto
ruleItem
:
dto
.
getUseRules
())
{
switch
(
ruleItem
.
getUseScope
())
{
case
80
:
//商品
isTarget
=
CouponBaseUtil
.
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dto
.
getCouType
(),
goodId
,
new
BigDecimal
(
totalPrice
),
dto
.
getValOver
());
break
;
case
90
:
//演出
isTarget
=
CouponBaseUtil
.
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dto
.
getCouType
(),
performanceId
,
new
BigDecimal
(
totalPrice
),
dto
.
getValOver
());
break
;
case
91
:
//场次
isTarget
=
CouponBaseUtil
.
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dto
.
getCouType
(),
timesId
,
new
BigDecimal
(
totalPrice
),
dto
.
getValOver
());
break
;
case
92
:
//票
isTarget
=
CouponBaseUtil
.
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dto
.
getCouType
(),
ticketId
,
new
BigDecimal
(
totalPrice
),
dto
.
getValOver
());
break
;
case
100
:
//票
isTarget
=
true
;
break
;
default
:
isTarget
=
false
;
break
;
}
if
(
dto
.
getUseRules
().
size
()
>
1
&&
dto
.
getCouType
().
equals
(
4
))
{
isTarget
=
false
;
}
}
if
(
dto
.
getBusiType
().
equals
(
0
))
{
isTarget
=
true
;
}
if
(!
isTarget
)
{
vo
.
setCouType
(-
1
);
vo
.
setValue
(
BigDecimal
.
ZERO
);
}
if
(
vo
.
getCouType
()
!=
-
1
)
{
redisDataUtils
.
setCouponByUid
(
uid
,
dtoList
);
LocalDateTime
now
=
LocalDateTime
.
now
();
//入库
if
(
dto
.
getCcouponId
()
==
null
||
(
null
!=
dto
.
getCcouponId
()
&&
dto
.
getUsedAt
()
!=
null
))
{
// 是公有券且为使用后退回的券,则更新
queueUtils
.
sendMsgByRedis
(
MQConst
.
CandyQueue
.
COUPON_USE
.
getKey
(),
SqlMapping
.
get
(
"candy_coupon.use"
,
now
,
content
,
uid
,
uCouponId
)
);
}
else
{
queueUtils
.
sendMsgByRedis
(
MQConst
.
CandyQueue
.
COUPON_USE
.
getKey
(),
SqlMapping
.
get
(
"candy_coupon.use_insert"
,
uCouponId
,
uid
,
dto
.
getCouponId
(),
dto
.
getBindAt
(),
dto
.
getDuedAt
(),
now
,
content
,
now
)
);
}
}
}
return
vo
;
}
@Override
public
Boolean
useBackCoupon
(
List
<
BackCouponParam
>
backCouponParams
)
{
for
(
BackCouponParam
item
:
backCouponParams
)
{
String
uid
=
item
.
getUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
ArrayList
<
String
>
uCouponIdList
=
new
ArrayList
(
Arrays
.
asList
(
item
.
getuCouponIds
().
split
(
","
)));
List
<
CandyUserCouponBasicDto
>
dtoList
=
CouponBaseUtil
.
backCoupon
(
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
),
uCouponIdList
);
if
(
dtoList
==
null
)
{
return
false
;
}
else
{
redisDataUtils
.
setCouponByUid
(
uid
,
dtoList
);
//入库
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"candy_coupon.back"
));
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
for
(
String
uCouponId
:
uCouponIdList
)
{
sqlsDataA
.
add
(
new
Object
[]{
uid
,
uCouponId
});
}
String
sqlData
=
SqlMapping
.
gets
(
sqls
,
sqlsDataA
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
CandyQueue
.
COUPON_BACK
.
getKey
(),
sqlData
);
}
}
return
true
;
}
@Override
public
ResponseDto
<
String
>
receiveCoupon
(
String
ccode
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
String
mobile
=
(
String
)
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_MOBILE
);
CandyCouponCodeDto
dto
=
redisDataUtils
.
getCouponByCode
(
ccode
);
LocalDateTime
now
=
LocalDateTime
.
now
();
if
(
dto
==
null
)
{
return
ResponseDto
.
failure
(
"兑换码有误,请重新输入"
);
}
else
if
(
dto
.
getState
().
equals
(
0
))
{
//判断可领
CandyCouponInfoDto
infoDto
=
redisDataUtils
.
getCouponInfo
(
dto
.
getCouponId
());
if
(!
CouponBaseUtil
.
CandyCanReceive
(
infoDto
))
{
return
ResponseDto
.
failure
(
"兑换码不可用"
);
}
String
uCouponId
=
IDGenerator
.
get32UUID
();
//构建baseDto
CandyUserCouponBasicDto
baseDto
=
CandyUserCouponBasicDto
.
getNew
().
copyToRedisBaseCoupon
(
uCouponId
,
uid
,
ccode
,
infoDto
,
infoDto
.
getExpireAt
());
//删除code redis
redisDataUtils
.
delCouponByCode
(
ccode
);
//添加baseDto -> baseDtoList
redisDataUtils
.
addCouponByUid
(
uid
,
baseDto
,
userCreateTime
);
//入库
LinkedList
<
String
>
toMqSqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
objsUserCoupon
=
CollectionUtil
.
linkedListObjectArr
(),
objsCouponCode
=
CollectionUtil
.
linkedListObjectArr
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_coupon.receive"
));
objsUserCoupon
.
add
(
new
Object
[]{
uCouponId
,
uid
,
1
,
infoDto
.
getCouponId
(),
ccode
,
infoDto
.
getEffectAt
(),
now
,
infoDto
.
getExpireAt
()});
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_coupon_code.receive"
));
// state:状态[0-可用|1-已用]
objsCouponCode
.
add
(
new
Object
[]{
1
,
uCouponId
,
uid
,
mobile
,
now
,
now
,
dto
.
getCouponId
(),
ccode
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
CandyQueue
.
COUPON_RECEIVE
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
objsUserCoupon
,
objsCouponCode
)
);
return
ResponseDto
.
success
(
uCouponId
);
}
else
if
(
dto
.
getState
().
equals
(
1
))
{
return
ResponseDto
.
failure
(
"兑换已使用"
);
}
else
{
return
ResponseDto
.
failure
(
"兑换失败,请稍后再试"
);
}
}
@Override
public
ResponseDto
<
CandyCouponVo
>
receiveCouponDetails
(
String
ccode
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
CandyCouponCodeDto
dto
=
redisDataUtils
.
getCouponByCode
(
ccode
);
if
(
dto
==
null
)
{
return
ResponseDto
.
failure
(
"兑换码有误,请重新输入"
);
}
else
if
(
dto
.
getState
().
equals
(
0
))
{
//判断可领
CandyCouponInfoDto
infoDto
=
redisDataUtils
.
getCouponInfo
(
dto
.
getCouponId
());
if
(!
CouponBaseUtil
.
CandyCanReceive
(
infoDto
))
{
return
ResponseDto
.
failure
(
"兑换码不可用"
);
}
String
uCouponId
=
IDGenerator
.
get32UUID
();
//构建baseDto
CandyUserCouponBasicDto
baseDto
=
CandyUserCouponBasicDto
.
getNew
().
copyToRedisBaseCoupon
(
uCouponId
,
uid
,
ccode
,
infoDto
,
LocalDateTime
.
now
().
plusDays
(
infoDto
.
getRedeemValidity
()));
return
ResponseDto
.
success
(
CouponBaseUtil
.
getBaseCouponUserVo
(
baseDto
));
}
else
{
return
ResponseDto
.
failure
(
"兑换失败,请稍后再试"
);
}
}
@Override
public
ResponseDto
<
List
<
CandyCouponVo
>>
couponListById
(
String
uCouponIds
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
userCreateTime
;
try
{
userCreateTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
CurrentUtil
.
getTokenClaims
().
get
(
CurrentUtil
.
TOKEN_UCREATED
).
toString
());
}
catch
(
Exception
e
)
{
userCreateTime
=
null
;
}
ArrayList
<
String
>
uCouponIdList
=
new
ArrayList
(
Arrays
.
asList
(
uCouponIds
.
split
(
","
)));
List
<
CandyUserCouponBasicDto
>
dtoList
=
redisDataUtils
.
getCouponByUid
(
uid
,
userCreateTime
);
List
<
CandyCouponVo
>
vo
=
ObjectUtil
.
getCandyCouponVoArrayList
();
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(
uCouponIdList
.
contains
(
dtoItem
.
getUcouponId
()))
{
CandyCouponVo
baseVo
=
CouponBaseUtil
.
getBaseCouponUserVo
(
dtoItem
);
vo
.
add
(
baseVo
);
}
else
{
continue
;
}
}
return
ResponseDto
.
success
(
vo
);
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/service/impl/CandyMgtCouponServiceImpl.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
service
.
impl
;
import
com.liquidnet.service.merchant.service.ICandyMgtCouponService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 券发放管理 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Service
public
class
CandyMgtCouponServiceImpl
implements
ICandyMgtCouponService
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/service/impl/CandyUserCouponServiceImpl.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
service
.
impl
;
import
com.liquidnet.service.merchant.service.ICandyUserCouponService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 用户券信息 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
@Service
public
class
CandyUserCouponServiceImpl
implements
ICandyUserCouponService
{
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/util/CouponBaseUtil.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
util
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.merchant.dto.CandyCouponInfoDto
;
import
com.liquidnet.service.merchant.dto.CandyCouponRuleDto
;
import
com.liquidnet.service.merchant.dto.CandyUserCouponBasicDto
;
import
com.liquidnet.service.merchant.vo.CandyCouponRulesVo
;
import
com.liquidnet.service.merchant.vo.CandyCouponVo
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
public
class
CouponBaseUtil
{
/**
* 获取 基础券vo
*
* @param dtoItem CandyUserCouponBasicDto
* @return
*/
public
static
CandyCouponVo
getBaseCouponUserVo
(
CandyUserCouponBasicDto
dtoItem
)
{
LocalDateTime
now
=
LocalDateTime
.
now
();
CandyCouponVo
vo
=
CandyCouponVo
.
getNew
();
List
<
CandyCouponRulesVo
>
rulesVoList
=
ObjectUtil
.
getCandyCouponRulesVos
();
vo
.
setTitle
(
dtoItem
.
getTitle
());
vo
.
setExpireAt
(
DateUtil
.
format
(
dtoItem
.
getDuedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setDiscount
(
dtoItem
.
getDiscount
());
vo
.
setValFace
(
dtoItem
.
getValFace
());
vo
.
setBusiType
(
dtoItem
.
getBusiType
());
vo
.
setValOver
(
dtoItem
.
getValOver
());
vo
.
setValMinus
(
dtoItem
.
getValMinus
());
vo
.
setBindType
(
dtoItem
.
getBindType
());
vo
.
setLabel
(
dtoItem
.
getLabel
());
vo
.
setNotice
(
dtoItem
.
getNotice
());
vo
.
setUcouponId
(
dtoItem
.
getUcouponId
());
vo
.
setUsedAt
(
DateUtil
.
format
(
dtoItem
.
getUsedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setUsedFor
(
dtoItem
.
getUsedFor
());
//适用范围 规则
if
(
dtoItem
.
getUseRules
()
!=
null
)
{
for
(
CandyCouponRuleDto
ruleItem
:
dtoItem
.
getUseRules
())
{
CandyCouponRulesVo
voRules
=
CandyCouponRulesVo
.
getNew
();
voRules
.
setUseScope
(
ruleItem
.
getUseScope
());
voRules
.
setBusiId
(
ruleItem
.
getBusiId
());
voRules
.
setBusiName
(
ruleItem
.
getBusiName
());
rulesVoList
.
add
(
voRules
);
}
}
//券类别
if
(
dtoItem
.
getBusiType
().
equals
(
3
))
{
vo
.
setCouType
(
101
);
}
else
{
vo
.
setCouType
(
dtoItem
.
getCouType
());
}
vo
.
setState
(
getCouponState
(
now
,
dtoItem
.
getDuedAt
(),
dtoItem
.
getBindAt
(),
dtoItem
.
getState
()));
vo
.
setUseRules
(
rulesVoList
);
return
vo
;
}
/**
* 获取 演出维度 券列表
*
* @param dtoItem CandyUserCouponBasicDto
* @return
*/
public
static
CandyCouponVo
getPerformanceCouponUserVo
(
CandyUserCouponBasicDto
dtoItem
,
BigDecimal
priceTotal
,
String
performanceId
,
String
timeId
,
String
ticketId
)
{
boolean
isTarget
=
false
;
LocalDateTime
now
=
LocalDateTime
.
now
();
CandyCouponVo
vo
=
CandyCouponVo
.
getNew
();
List
<
CandyCouponRulesVo
>
rulesVoList
=
ObjectUtil
.
getCandyCouponRulesVos
();
vo
.
setTitle
(
dtoItem
.
getTitle
());
vo
.
setExpireAt
(
DateUtil
.
format
(
dtoItem
.
getDuedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setValFace
(
dtoItem
.
getValFace
());
vo
.
setDiscount
(
dtoItem
.
getDiscount
());
vo
.
setValOver
(
dtoItem
.
getValOver
());
vo
.
setValMinus
(
dtoItem
.
getValMinus
());
vo
.
setBindType
(
dtoItem
.
getBindType
());
vo
.
setLabel
(
dtoItem
.
getLabel
());
vo
.
setNotice
(
dtoItem
.
getNotice
());
vo
.
setUcouponId
(
dtoItem
.
getUcouponId
());
vo
.
setUsedAt
(
DateUtil
.
format
(
dtoItem
.
getUsedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setUsedFor
(
dtoItem
.
getUsedFor
());
vo
.
setBusiType
(
dtoItem
.
getBusiType
());
//适用范围 规则
if
(
dtoItem
.
getBusiType
().
equals
(
0
))
{
isTarget
=
true
;
}
else
if
(
dtoItem
.
getBusiType
().
equals
(
2
))
{
isTarget
=
false
;
}
else
{
for
(
CandyCouponRuleDto
ruleItem
:
dtoItem
.
getUseRules
())
{
CandyCouponRulesVo
voRules
=
CandyCouponRulesVo
.
getNew
();
voRules
.
setUseScope
(
ruleItem
.
getUseScope
());
voRules
.
setBusiId
(
ruleItem
.
getBusiId
());
voRules
.
setBusiName
(
ruleItem
.
getBusiName
());
rulesVoList
.
add
(
voRules
);
switch
(
ruleItem
.
getUseScope
())
{
case
90
:
//演出
isTarget
=
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dtoItem
.
getCouType
(),
performanceId
,
priceTotal
,
dtoItem
.
getValOver
());
break
;
case
91
:
//场次
isTarget
=
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dtoItem
.
getCouType
(),
timeId
,
priceTotal
,
dtoItem
.
getValOver
());
break
;
case
92
:
//票
isTarget
=
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dtoItem
.
getCouType
(),
ticketId
,
priceTotal
,
dtoItem
.
getValOver
());
break
;
case
100
:
//全场
if
(
dtoItem
.
getCouType
().
equals
(
2
))
{
if
(
priceTotal
.
compareTo
(
dtoItem
.
getValOver
())
>=
0
)
{
isTarget
=
true
;
}
else
{
isTarget
=
false
;
}
}
else
{
isTarget
=
true
;
}
break
;
default
:
isTarget
=
false
;
break
;
}
if
(
dtoItem
.
getUseRules
().
size
()
>
1
&&
dtoItem
.
getCouType
().
equals
(
4
))
{
isTarget
=
false
;
}
}
if
(
dtoItem
.
getUseRules
().
size
()
==
0
&&
!
dtoItem
.
getBusiType
().
equals
(
0
))
{
isTarget
=
false
;
}
}
//券类别
if
(
dtoItem
.
getBusiType
().
equals
(
3
))
{
vo
.
setCouType
(
101
);
}
else
{
vo
.
setCouType
(
dtoItem
.
getCouType
());
}
int
state
=
getCouponState
(
now
,
dtoItem
.
getDuedAt
(),
dtoItem
.
getBindAt
(),
dtoItem
.
getState
());
if
(
isTarget
)
{
vo
.
setState
(
state
);
}
else
{
vo
.
setState
(
state
==
1
?
21
:
state
);
//不在目标范围 如果可用改为不可用21
}
vo
.
setUseRules
(
rulesVoList
);
return
vo
;
}
/**
* 获取 商品维度 券列表
*
* @param dtoItem CandyUserCouponBasicDto
* @return
*/
public
static
CandyCouponVo
getGoodCouponUserVo
(
CandyUserCouponBasicDto
dtoItem
,
BigDecimal
priceTotal
,
String
goodId
,
Integer
size
)
{
boolean
isTarget
=
false
;
LocalDateTime
now
=
LocalDateTime
.
now
();
CandyCouponVo
vo
=
CandyCouponVo
.
getNew
();
List
<
CandyCouponRulesVo
>
rulesVoList
=
ObjectUtil
.
getCandyCouponRulesVos
();
vo
.
setTitle
(
dtoItem
.
getTitle
());
vo
.
setExpireAt
(
DateUtil
.
format
(
dtoItem
.
getDuedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setValFace
(
dtoItem
.
getValFace
());
vo
.
setValOver
(
dtoItem
.
getValOver
());
vo
.
setDiscount
(
dtoItem
.
getDiscount
());
vo
.
setValMinus
(
dtoItem
.
getValMinus
());
vo
.
setBindType
(
dtoItem
.
getBindType
());
vo
.
setLabel
(
dtoItem
.
getLabel
());
vo
.
setNotice
(
dtoItem
.
getNotice
());
vo
.
setUcouponId
(
dtoItem
.
getUcouponId
());
vo
.
setUsedAt
(
DateUtil
.
format
(
dtoItem
.
getUsedAt
(),
DateUtil
.
Formatter
.
yyyy_MM_dd
));
vo
.
setUsedFor
(
dtoItem
.
getUsedFor
());
vo
.
setBusiType
(
dtoItem
.
getBusiType
());
//适用范围 规则
if
(
dtoItem
.
getBusiType
().
equals
(
0
))
{
isTarget
=
true
;
}
else
if
(
dtoItem
.
getBusiType
().
equals
(
1
)
||
dtoItem
.
getBusiType
().
equals
(
3
))
{
isTarget
=
false
;
}
else
{
for
(
CandyCouponRuleDto
ruleItem
:
dtoItem
.
getUseRules
())
{
CandyCouponRulesVo
voRules
=
CandyCouponRulesVo
.
getNew
();
voRules
.
setUseScope
(
ruleItem
.
getUseScope
());
voRules
.
setBusiId
(
ruleItem
.
getBusiId
());
voRules
.
setBusiName
(
ruleItem
.
getBusiName
());
rulesVoList
.
add
(
voRules
);
switch
(
ruleItem
.
getUseScope
())
{
case
80
:
//商品
isTarget
=
isTargetCoupon
(
ruleItem
.
getBusiId
(),
dtoItem
.
getCouType
(),
goodId
,
priceTotal
,
dtoItem
.
getValOver
());
break
;
case
81
:
//款式
// isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), produceId, priceTotal, dtoItem.getValOver());
break
;
case
100
:
//全场
if
(
dtoItem
.
getCouType
().
equals
(
2
))
{
if
(
priceTotal
.
compareTo
(
dtoItem
.
getValOver
())
>=
0
)
{
isTarget
=
true
;
}
else
{
isTarget
=
false
;
}
}
else
{
isTarget
=
true
;
}
break
;
default
:
isTarget
=
false
;
break
;
}
}
if
(
dtoItem
.
getUseRules
().
size
()
==
0
&&
!
dtoItem
.
getBusiType
().
equals
(
0
))
{
isTarget
=
false
;
}
}
//券类别
if
(
dtoItem
.
getBusiType
().
equals
(
3
))
{
vo
.
setCouType
(
101
);
}
else
{
vo
.
setCouType
(
dtoItem
.
getCouType
());
}
int
state
=
getCouponState
(
now
,
dtoItem
.
getDuedAt
(),
dtoItem
.
getBindAt
(),
dtoItem
.
getState
());
if
(
isTarget
)
{
vo
.
setState
(
state
);
}
else
{
vo
.
setState
(
state
==
1
?
21
:
state
);
//不在目标范围 如果可用改为不可用21
}
vo
.
setUseRules
(
rulesVoList
);
return
vo
;
}
/**
* @param busiId 适用id
* @param targetId 目标id(例如 演出id,场次id,票种id)
* @param priceTotal 待支付总金额
* @param valOver 满减~满
* @return
*/
public
static
Boolean
isTargetCoupon
(
String
busiId
,
Integer
couType
,
String
targetId
,
BigDecimal
priceTotal
,
BigDecimal
valOver
)
{
boolean
isTarget
=
false
;
ArrayList
<
String
>
targetIdList
=
new
ArrayList
(
Arrays
.
asList
(
targetId
.
split
(
","
)));
if
(
targetIdList
.
contains
(
busiId
))
{
//判断id 对应
if
(
couType
.
equals
(
2
))
{
if
(
priceTotal
.
compareTo
(
valOver
)
>=
0
)
{
isTarget
=
true
;
}
}
else
{
isTarget
=
true
;
}
}
return
isTarget
;
}
/**
* 获取券状态
*
* @param currentTime 当前服务器时间
* @param expireAt 券过期时间
* @param state 券状态
* @return 判断过后的券状态
*/
public
static
Integer
getCouponState
(
LocalDateTime
currentTime
,
LocalDateTime
expireAt
,
LocalDateTime
effectAt
,
Integer
state
)
{
//券状态
Integer
data
;
if
(
state
.
equals
(
1
))
{
if
(
currentTime
.
isAfter
(
expireAt
))
{
data
=
3
;
}
else
if
(
currentTime
.
isBefore
(
effectAt
))
{
data
=
31
;
}
else
{
data
=
state
;
}
}
else
{
data
=
state
;
}
return
data
;
}
/**
* 根据券id获取Dto
*
* @param dtoList CouponBaseDtoList
* @param uCouponId 券唯一id
* @return CandyUserCouponBasicDto
*/
public
static
CandyUserCouponBasicDto
getSingleDtoByUCouponId
(
List
<
CandyUserCouponBasicDto
>
dtoList
,
String
uCouponId
)
{
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(
dtoItem
.
getUcouponId
().
equals
(
uCouponId
))
{
return
dtoItem
;
}
}
return
null
;
}
/**
* 使用券
*
* @param dtoList CouponBaseDtoList
* @param uCouponId 券唯一id
* @return List<CandyUserCouponBasicDto>
*/
public
static
List
<
CandyUserCouponBasicDto
>
useCoupon
(
List
<
CandyUserCouponBasicDto
>
dtoList
,
String
uCouponId
,
String
content
)
{
boolean
isHas
=
false
;
for
(
CandyUserCouponBasicDto
dtoItem
:
dtoList
)
{
if
(
dtoItem
.
getUcouponId
().
equals
(
uCouponId
))
{
if
(
dtoItem
.
getState
().
equals
(
1
))
{
dtoItem
.
setState
(
5
);
dtoItem
.
setUsedAt
(
LocalDateTime
.
now
());
dtoItem
.
setUsedFor
(
content
);
isHas
=
true
;
//券存在
}
else
{
return
null
;
//券不可用
}
break
;
}
}
if
(!
isHas
)
{
return
null
;
//券不存在
}
return
dtoList
;
}
/**
* 回退券
*
* @param dtoList CouponBaseDtoList
* @param uCouponIdList 券唯一id list
* @return List<CandyUserCouponBasicDto>
*/
public
static
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
);
dtoItem
.
setUsedFor
(
""
);
dtoItem
.
setUsedAt
(
null
);
isHas
=
true
;
//券存在
}
else
{
}
}
}
if
(!
isHas
)
{
return
null
;
//券不存在
}
return
dtoList
;
}
/**
* 判断券是否在可兑换时间范围
*
* @param dto
* @return
*/
public
static
boolean
CandyCanReceive
(
CandyCouponInfoDto
dto
)
{
LocalDateTime
now
=
LocalDateTime
.
now
();
LocalDateTime
startTime
=
dto
.
getRedeemStart
();
LocalDateTime
endTime
=
dto
.
getRedeemStop
();
if
(
now
.
isAfter
(
startTime
)
&&
now
.
isBefore
(
endTime
))
{
return
true
;
}
else
{
return
false
;
}
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/util/ObjectUtil.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
util
;
import
com.liquidnet.service.merchant.dto.CandyCommonCouponBasicDto
;
import
com.liquidnet.service.merchant.dto.CandyUserCouponBasicDto
;
import
com.liquidnet.service.merchant.vo.CandyCouponPreVo
;
import
com.liquidnet.service.merchant.vo.CandyCouponRulesVo
;
import
com.liquidnet.service.merchant.vo.CandyCouponVo
;
import
java.util.ArrayList
;
public
class
ObjectUtil
{
private
static
final
ArrayList
<
CandyUserCouponBasicDto
>
candyUserCouponBasicDtoArrayList
=
new
ArrayList
<>();
private
static
final
ArrayList
<
CandyCommonCouponBasicDto
>
candyCommonCouponBasicDtoArrayList
=
new
ArrayList
<>();
private
static
final
ArrayList
<
CandyCouponVo
>
candyCouponVoArrayList
=
new
ArrayList
<>();
private
static
final
ArrayList
<
CandyCouponPreVo
>
candyCouponPreVoArrayList
=
new
ArrayList
<>();
private
static
final
ArrayList
<
CandyCouponRulesVo
>
candyCouponRulesVos
=
new
ArrayList
<>();
public
static
ArrayList
<
CandyUserCouponBasicDto
>
getCandyUserCouponBasicDtoArrayList
()
{
return
(
ArrayList
<
CandyUserCouponBasicDto
>)
candyUserCouponBasicDtoArrayList
.
clone
();
}
public
static
ArrayList
<
CandyCommonCouponBasicDto
>
getCandyCommonCouponBasicDtoArrayList
()
{
return
(
ArrayList
<
CandyCommonCouponBasicDto
>)
candyCommonCouponBasicDtoArrayList
.
clone
();
}
public
static
ArrayList
<
CandyCouponVo
>
getCandyCouponVoArrayList
()
{
return
(
ArrayList
<
CandyCouponVo
>)
candyCouponVoArrayList
.
clone
();
}
public
static
ArrayList
<
CandyCouponPreVo
>
getCandyCouponPreVoArrayList
()
{
return
(
ArrayList
<
CandyCouponPreVo
>)
candyCouponPreVoArrayList
.
clone
();
}
public
static
ArrayList
<
CandyCouponRulesVo
>
getCandyCouponRulesVos
()
{
return
(
ArrayList
<
CandyCouponRulesVo
>)
candyCouponRulesVos
.
clone
();
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/util/QueueUtils.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
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
StringRedisTemplate
stringRedisTemplate
;
/**
* 发送消息 - 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-merchant/liquidnet-service-merchant-impl/src/main/java/com/liquidnet/service/candy/util/RedisDataUtils.java
0 → 100644
View file @
57d69834
package
com
.
liquidnet
.
service
.
merchant
.
util
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.merchant.constant.CandyRedisConst
;
import
com.liquidnet.service.merchant.dto.CandyCommonCouponBasicDto
;
import
com.liquidnet.service.merchant.dto.CandyCouponCodeDto
;
import
com.liquidnet.service.merchant.dto.CandyCouponInfoDto
;
import
com.liquidnet.service.merchant.dto.CandyUserCouponBasicDto
;
import
com.liquidnet.service.feign.platform.api.FeignPlatformCandyDemoteClient
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Component
@Slf4j
public
class
RedisDataUtils
{
@Autowired
RedisUtil
redisUtil
;
@Autowired
FeignPlatformCandyDemoteClient
feignPlatformCandyDemoteClient
;
// 获取 CandyUserCouponBasicDto数组 根据用户id
public
List
<
CandyUserCouponBasicDto
>
getCouponByUid
(
String
uid
,
LocalDateTime
userCreateTime
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_USER_COUPON
.
concat
(
uid
);
String
publicRedisKey
=
CandyRedisConst
.
BASIC_COMMON_COUPON
;
Object
obj
=
redisUtil
.
get
(
redisKey
);
Object
obj2
=
redisUtil
.
get
(
publicRedisKey
);
List
<
CandyUserCouponBasicDto
>
userDto
;
List
<
CandyCommonCouponBasicDto
>
pubDto
;
if
(
obj
==
null
)
{
//降级
// userDto = new ArrayList();
// ResponseDto<Object> responseDto = feignPlatformCandyDemoteClient.queryForUserCouponBasicDto(uid);
// if (responseDto.isSuccess()) {
// userDto = (List<CandyUserCouponBasicDto>) responseDto.getData();
// } else {
userDto
=
ObjectUtil
.
getCandyUserCouponBasicDtoArrayList
();
// }
}
else
{
userDto
=
(
List
<
CandyUserCouponBasicDto
>)
obj
;
}
if
(
obj2
==
null
)
{
//降级
// ResponseDto<Object> responseDto = feignPlatformCandyDemoteClient.queryForCommonCouponBasicDto(DateUtil.Formatter.yyyyMMddHHmmss.format(userCreateTime));
// if (responseDto.isSuccess()) {
// pubDto = (List<CandyCommonCouponBasicDto>) responseDto.getData();
// } else {
pubDto
=
ObjectUtil
.
getCandyCommonCouponBasicDtoArrayList
();
// }
}
else
{
pubDto
=
(
List
<
CandyCommonCouponBasicDto
>)
obj2
;
}
boolean
needSet
=
false
;
if
(
userCreateTime
==
null
)
{
userCreateTime
=
LocalDateTime
.
MIN
;
}
List
<
String
>
userIds
=
userDto
.
stream
().
map
(
CandyUserCouponBasicDto:
:
getCcouponId
).
collect
(
Collectors
.
toList
());
if
(
userIds
!=
null
&&
userIds
.
size
()
>
0
)
{
for
(
CandyCommonCouponBasicDto
item
:
pubDto
)
{
if
(
userIds
.
contains
(
item
.
getCcouponId
())
||
userCreateTime
.
isAfter
(
item
.
getCreatedAt
()))
{
continue
;
}
else
{
CandyUserCouponBasicDto
userCouponBasicDto
=
CandyUserCouponBasicDto
.
getNew
().
copyToRedisCommonBaseCoupon
(
IDGenerator
.
get32UUID
(),
uid
,
item
);
userDto
.
add
(
userCouponBasicDto
);
needSet
=
true
;
}
}
}
if
(
needSet
)
{
setCouponByUid
(
uid
,
userDto
);
}
return
userDto
;
}
// 覆盖 CandyUserCouponBasicDto数组 根据用户id
public
void
setCouponByUid
(
String
uid
,
List
<
CandyUserCouponBasicDto
>
dtoList
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_USER_COUPON
.
concat
(
uid
);
redisUtil
.
set
(
redisKey
,
dtoList
);
}
// 添加 CandyUserCouponBasicDto数组 item
public
void
addCouponByUid
(
String
uid
,
CandyUserCouponBasicDto
dto
,
LocalDateTime
userCreateTime
)
{
List
<
CandyUserCouponBasicDto
>
dtoList
=
getCouponByUid
(
uid
,
userCreateTime
);
dtoList
.
add
(
dto
);
setCouponByUid
(
uid
,
dtoList
);
}
//获取 CandyCouponCodeDto 根据 ccode
public
CandyCouponCodeDto
getCouponByCode
(
String
ccode
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_COUPON_CODE
.
concat
(
ccode
);
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
//降级
return
null
;
}
else
{
return
(
CandyCouponCodeDto
)
obj
;
}
}
//删除 CandyCouponCodeDto 根据 ccode
public
void
delCouponByCode
(
String
ccode
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_COUPON_CODE
.
concat
(
ccode
);
redisUtil
.
del
(
redisKey
);
}
//获取 CandyCouponInfoDto 根据 couponId
public
CandyCouponInfoDto
getCouponInfo
(
String
couponId
)
{
String
redisKey
=
CandyRedisConst
.
BASIC_COUPON_INFO
.
concat
(
couponId
);
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
//降级
return
null
;
}
else
{
return
(
CandyCouponInfoDto
)
obj
;
}
}
}
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/bootstrap-dev.yml
0 → 100644
View file @
57d69834
# begin-dev-这里是配置信息基本值
liquidnet
:
cloudConfig
:
profile
:
dev
security
:
username
:
user
password
:
user123
eureka
:
host
:
127.0.0.1:7001
# end-dev-这里是配置信息基本值
spring
:
profiles
:
include
:
service-merchant
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/bootstrap-prod.yml
0 → 100644
View file @
57d69834
# begin-prod-这里是配置信息基本值
liquidnet
:
cloudConfig
:
profile
:
prod
security
:
username
:
user
password
:
user123
eureka
:
host
:
172.17.207.189:7001
# end-prod-这里是配置信息基本值
spring
:
profiles
:
include
:
service-merchant
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/bootstrap-service-merchant.yml
0 → 100644
View file @
57d69834
#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://127.0.0.1:7002/support-config
profile
:
${liquidnet.cloudConfig.profile}
name
:
${spring.application.name}
#默认为spring.application.name
discovery
:
enabled
:
true
service-id
:
liquidnet-support-config
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/bootstrap-test.yml
0 → 100644
View file @
57d69834
# 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-merchant
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/bootstrap.yml
0 → 100644
View file @
57d69834
spring
:
application
:
name
:
liquidnet-service-merchant
profiles
:
active
:
dev
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/errors.properties
0 → 100644
View file @
57d69834
40001
=
登录信息有误
40002
=
账号已在另一台设备登录
40003
=
登录已过期
# ------------------------ 4开头错误码作系统保留
10000
=
操作过于频繁,请稍后再试
10001
=
授权失败
10002
=
验证码发送失败
10003
=
请输入正确手机号
10004
=
请输入正确验证码
10005
=
手机号获取失败,请更换登录方式
10006
=
第三方账号未注册
10007
=
该第三方账号已经被其他用户绑定
10008
=
已经绑定过该类型的第三方账号
10009
=
手机号已经注册
10010
=
该手机号已被其它账号绑定
10011
=
性别标签无效
10012
=
音乐风格标签无效
10013
=
账号与密码不匹配
10014
=
10015
=
入场人ID不能为空
10016
=
收货地址ID不能为空
10017
=
入场人不存在,请核实
10018
=
收货地址不存在,请核实
10019
=
入场人已存在,请核实
10101
=
姓名或身份证件号无效
10102
=
身份证号与姓名不符
10103
=
已超出姓名长度限制
10104
=
身份证号码不合规
10105
=
入场人不存在
10106
=
收获地址不存在
10107
=
港澳居民来往内地通行证号码不合规
10108
=
台湾居民来往大陆通行证号码不合规
10109
=
不支持中国大陆护照
10110
=
护照号码不合规
10111
=
军官证号不合规
10200
=
仅限从未购买过会员的用户使用
10201
=
会员卡信息有误,请核实
10202
=
会员卡价格有误,请核实
10203
=
支付信息有误,请联系客服
10204
=
微信支付OPENID必传
10205
=
支付宝支付回调URL必传
10206
=
苹果支付商品标识必传
10207
=
兑换码不存在,请核实
10208
=
兑换码已使用,请核实
10209
=
兑换码不可用,请核实
10210
=
创建订单失败,请联系客服
10211
=
订单不存在
10212
=
订单状态查询失败
10213
=
感谢您选择登登登。距您上一次离开不足一年,登登登还没准备好再次邀您加入。不如我们给彼此多一些时间,有缘再相见。
10214
=
兑换失败
10215
=
本次摩登天空会员购买名额已满
10216
=
10301
=
10401
=
10500
=
10501
=
会员订单回调处理失败,该订单不存在
10502
=
会员订单回调处理失败,该订单已处理
10503
=
会员订单回调处理失败,订单金额有误
10504
=
会员订单回调处理失败,会员价格信息不存在
10505
=
会员订单回调处理异常
liquidnet-bus-service/liquidnet-service-merchant/liquidnet-service-merchant-impl/src/main/resources/sqlmap.properties
0 → 100644
View file @
57d69834
# -- 使用券 --
candy_coupon.use
=
UPDATE candy_user_coupon SET state = 5 ,used_at = ? , used_for = ? WHERE uid = ? AND ucoupon_id = ?
#candy_coupon.use_insert=INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , used_at , used_for ) VALUE ( ? , ? , 3 , ? , ? ,? )
candy_coupon.use_insert
=
INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , bind_at, dued_at, used_at , used_for, created_at) VALUE ( ? , ? , 5 , ? , ? , ?, ?, ?, ?)
# -- 回退券 --
candy_coupon.back
=
UPDATE candy_user_coupon SET state = 1 WHERE uid = ? AND ucoupon_id = ?
# -- 领取券 --
candy_coupon.receive
=
INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , ccode , bind_at , created_at , dued_at) VALUE ( ? , ? , ? , ? , ? , ? , ? , ?)
candy_coupon_code.receive
=
UPDATE candy_coupon_code SET state=?,ucoupon_id=?,redeem_uid=?,redeem_mobile=?,redeem_at=?,updated_at=? WHERE coupon_id=? AND ccode=?
liquidnet-bus-service/liquidnet-service-merchant/pom.xml
0 → 100644
View file @
57d69834
<?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-bus-service
</artifactId>
<groupId>
com.liquidnet
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
liquidnet-service-merchant
</artifactId>
<packaging>
pom
</packaging>
<modules>
<module>
liquidnet-service-merchant-impl
</module>
</modules>
</project>
\ No newline at end of file
liquidnet-bus-service/pom.xml
View file @
57d69834
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
<module>
liquidnet-service-sweet
</module>
<module>
liquidnet-service-sweet
</module>
<module>
liquidnet-service-chime
</module>
<module>
liquidnet-service-chime
</module>
<module>
liquidnet-service-candy
</module>
<module>
liquidnet-service-candy
</module>
<module>
liquidnet-service-merchant
</module>
<!-- <module>liquidnet-service-example</module>-->
<!-- <module>liquidnet-service-example</module>-->
<!-- <module>liquidnet-service-sequence</module>-->
<!-- <module>liquidnet-service-sequence</module>-->
<!-- <module>liquidnet-service-account</module>-->
<!-- <module>liquidnet-service-account</module>-->
...
...
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