Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
extend
Overview
Overview
Details
Activity
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
park
extend
Commits
e7fd618f
Commit
e7fd618f
authored
Jun 24, 2020
by
xieshixiang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
472d4187
07384b3e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
53 additions
and
14 deletions
+53
-14
api/pom.xml
+15
-0
api/src/main/java/com/hikcreate/edl/pub/web/mobile/api/controller/BindInfoControlller.java
+10
-1
domain/pom.xml
+6
-0
domain/src/main/java/com/hikcreate/edl/pub/web/mobile/domain/impl/BindServiceImpl.java
+22
-13
No files found.
api/pom.xml
View file @
e7fd618f
...
...
@@ -49,6 +49,21 @@
<artifactId>
orika
</artifactId>
<version>
${parent.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-aop
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
3.8.1
</version>
</dependency>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.9.1
</version>
</dependency>
</dependencies>
<build>
...
...
api/src/main/java/com/hikcreate/edl/pub/web/mobile/api/controller/BindInfoControlller.java
View file @
e7fd618f
...
...
@@ -3,6 +3,8 @@ package com.hikcreate.edl.pub.web.mobile.api.controller;
import
com.hikcreate.common.orika.DefaultConverter
;
import
com.hikcreate.common.sdk.response.apiparam.Response
;
import
com.hikcreate.common.sdk.response.apiparam.ResponseGenerator
;
import
com.hikcreate.common.sdk.response.statuscode.StatusCode
;
import
com.hikcreate.edl.common.distributed.lock.exception.DistributedLockException
;
import
com.hikcreate.edl.pub.web.mobile.domain.IBindService
;
import
com.hikcreate.edl.pub.web.mobile.infra.core.annotatiion.BodyDecryptAnnotation
;
import
com.hikcreate.edl.pub.web.mobile.infra.core.annotatiion.ResponseEncryptAnnotation
;
...
...
@@ -53,7 +55,14 @@ public class BindInfoControlller extends BaseController {
public
Response
<
BindInfoRes
>
bindInfo
(
@RequestBody
@Validated
BindInfoReq
req
)
{
ParkBindInfo
bindInfo
=
new
ParkBindInfo
();
defaultConverter
.
getMapperFacade
().
map
(
req
,
bindInfo
);
return
service
.
bind
(
bindInfo
);
Response
response
=
null
;
try
{
response
=
service
.
bind
(
bindInfo
);
}
catch
(
DistributedLockException
e
)
{
log
.
error
(
"分布式锁超时"
);
return
ResponseGenerator
.
fail
(
StatusCode
.
REPEAT_SUBMIT
);
}
return
response
;
}
...
...
domain/pom.xml
View file @
e7fd618f
...
...
@@ -26,6 +26,12 @@
<artifactId>
sdk
</artifactId>
<version>
${parent.version}
</version>
</dependency>
<dependency>
<groupId>
com.hikcreate.edl.common
</groupId>
<artifactId>
distributed-lock-starter
</artifactId>
<version>
${parent.version}
</version>
</dependency>
</dependencies>
</project>
domain/src/main/java/com/hikcreate/edl/pub/web/mobile/domain/impl/BindServiceImpl.java
View file @
e7fd618f
...
...
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import
com.hikcreate.common.sdk.response.apiparam.Response
;
import
com.hikcreate.common.sdk.response.apiparam.ResponseGenerator
;
import
com.hikcreate.common.sdk.response.statuscode.StatusCode
;
import
com.hikcreate.edl.common.distributed.lock.annotation.DistributedLock
;
import
com.hikcreate.edl.pub.web.mobile.domain.IBindService
;
import
com.hikcreate.edl.pub.web.mobile.infra.core.util.UnqIdUtil
;
import
com.hikcreate.edl.pub.web.mobile.infra.data.cache.BindCache
;
...
...
@@ -79,9 +80,16 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
*/
@Value
(
"${biz.unbind.time:720}"
)
Integer
unBindTime
;
/**
* 解绑限制次数
*/
@Value
(
"${biz.unbind.limit.count:10}"
)
Integer
unBindCount
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@DistributedLock
(
key
=
"'park:extend:bind:lock:userId:'+#info.userId+':timestamp:'+#info.timestamp"
,
expireTime
=
3000
,
waitTime
=
2000
,
retryTimes
=
50
)
public
Response
bind
(
ParkBindInfo
info
)
{
//判断规则1:用户已绑定的车辆不超过3辆,包括已解绑但未过一个月的车辆
QueryWrapper
<
ParkBindInfo
>
boundQuery
=
new
QueryWrapper
();
...
...
@@ -91,6 +99,17 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
if
(
list
!=
null
&&
list
.
size
()
>=
3
)
{
return
ResponseGenerator
.
fail
(
StatusCode
.
BUSINESS_ERROR
,
"同一用户下,最多绑定3辆车"
);
}
/**
* 规则:30天内,同一客户解绑超过10次不能再进行绑定
*/
QueryWrapper
<
ParkBindInfo
>
unbindQuery
=
new
QueryWrapper
<>();
unbindQuery
.
eq
(
"user_id"
,
info
.
getUserId
());
unbindQuery
.
ge
(
"unbind_time"
,
DateUtil
.
offsetHour
(
new
Date
(),
-
unBindTime
));
unbindQuery
.
eq
(
"status"
,
"0"
);
Integer
integer
=
mapper
.
selectCount
(
unbindQuery
);
if
(
integer
>=
unBindCount
)
{
return
ResponseGenerator
.
fail
(
StatusCode
.
BUSINESS_ERROR
,
StrUtil
.
format
(
"{}天内,同一用户解绑超过{}次不能再进行绑定"
,
unBindTime
/
24
,
unBindCount
));
}
//规则:一个客户只能绑定一个电话号码
if
(
list
!=
null
&&
!
list
.
isEmpty
())
{
...
...
@@ -160,17 +179,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
if
(
bindInfo
==
null
||
"0"
.
equals
(
bindInfo
.
getStatus
()))
{
return
ResponseGenerator
.
fail
(
StatusCode
.
DATA_ERROR
,
"绑定信息不存在"
);
}
/**
* 解绑规则:30天内,同一客户解绑次数总计不能超过10次
*/
QueryWrapper
<
ParkBindInfo
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"user_id"
,
req
.
getUserId
());
queryWrapper
.
ge
(
"unbind_time"
,
DateUtil
.
offsetHour
(
new
Date
(),
-
unBindTime
));
queryWrapper
.
eq
(
"status"
,
"0"
);
Integer
integer
=
mapper
.
selectCount
(
queryWrapper
);
if
(
integer
>=
10
)
{
return
ResponseGenerator
.
fail
(
StatusCode
.
BUSINESS_ERROR
,
"同一用户"
+
unBindTime
+
"小时内只能解绑10次"
);
}
if
(!
bindCache
.
unBind
(
req
.
getUnqId
(),
req
.
getUserId
()))
{
//手动回滚
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
...
...
@@ -329,7 +338,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
vechicleInfoReq
.
setPlateNum
(
bindInfo
.
getPlateNum
());
VehicleRes
byPlateNumAndType
=
vechicleCache
.
getByPlateNumAndType
(
vechicleInfoReq
);
if
(
byPlateNumAndType
.
getSfzmhm
()
==
null
)
{
return
ResponseGenerator
.
fail
(
StatusCode
.
ALERT_ERROR
,
"车主身份证信息不存在"
);
return
ResponseGenerator
.
fail
(
StatusCode
.
ALERT_ERROR
,
"车主身份证信息不存在"
);
}
/**
...
...
@@ -339,7 +348,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
idCardQueryReq
.
setIdCard
(
byPlateNumAndType
.
getSfzmhm
());
DrivingLicenseRes
drivingLicenseRes
=
drivingLicenseCache
.
getByIdCard
(
idCardQueryReq
);
if
(
drivingLicenseRes
==
null
)
{
return
ResponseGenerator
.
fail
(
StatusCode
.
ALERT_ERROR
,
"车主驾照信息不存在"
);
return
ResponseGenerator
.
fail
(
StatusCode
.
ALERT_ERROR
,
"车主驾照信息不存在"
);
}
/**
...
...
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