Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄嘉阳
/
iot-platform-server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f84bb85d
authored
Dec 13, 2023
by
huangjy
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat:声网PID管理
parent
dbe84faf
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
251 additions
and
28 deletions
db/上线后sql/update.sql
saas-module/src/main/java/com/makeit/controller/saas/SaasPidManageController.java
server-common/src/main/java/com/makeit/shengwang/agora/http/ShengwangHttpUtil.java
server-generator/src/test/java/CodeGenerator.java
server-service/src/main/java/com/makeit/entity/saas/SaasPidManage.java
server-service/src/main/java/com/makeit/mapper/saas/SaasPidManageMapper.java
server-service/src/main/java/com/makeit/service/platform/device/impl/PlatDeviceServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
server-service/src/main/java/com/makeit/service/saas/SaasPidManageService.java
server-service/src/main/java/com/makeit/service/saas/impl/SaasPidManageServiceImpl.java
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
db/上线后sql/update.sql
View file @
f84bb85d
ALTER
TABLE
`plat_device_other`
ALTER
TABLE
`plat_device_other`
...
@@ -66,3 +66,17 @@ INSERT INTO `sys_dictionary` VALUES ('204', 'alarm.alarmType.offBed', '离床异
...
@@ -66,3 +66,17 @@ INSERT INTO `sys_dictionary` VALUES ('204', 'alarm.alarmType.offBed', '离床异
##
离床次数月统计
##
离床次数月统计
ALTER
TABLE
`plat_elder_report_month`
add
column
off_bed_exception_count
int
(
11
)
default
0
COMMENT
'离床异常次数'
after
behavior_exception_count
;
ALTER
TABLE
`plat_elder_report_month`
add
column
off_bed_exception_count
int
(
11
)
default
0
COMMENT
'离床异常次数'
after
behavior_exception_count
;
CREATE
TABLE
`saas_pid_manage`
(
`id`
varchar
(
64
)
NOT
NULL
COMMENT
'id'
,
`pid`
varchar
(
100
)
NOT
NULL
COMMENT
'pid'
,
`status`
char
(
1
)
DEFAULT
NULL
COMMENT
'状态 0禁用 1启用'
,
`available_credit`
int4
DEFAULT
NULL
COMMENT
'可用额度'
,
`used_credit`
int4
DEFAULT
NULL
COMMENT
'已用额度'
,
`total_credit`
int4
DEFAULT
NULL
COMMENT
'总额度'
,
`create_date`
datetime
NOT
NULL
COMMENT
'创建时间'
,
`update_date`
datetime
NOT
NULL
COMMENT
'更新时间'
,
`del_flag`
char
(
1
)
DEFAULT
NULL
COMMENT
'删除标识'
,
`create_by`
varchar
(
64
)
NOT
NULL
COMMENT
'创建人'
,
`update_by`
varchar
(
64
)
NOT
NULL
COMMENT
'更新人'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
ROW_FORMAT
=
COMPACT
COMMENT
=
'声网pid管理'
;
\ No newline at end of file
saas-module/src/main/java/com/makeit/controller/saas/SaasPidManageController.java
0 → 100644
View file @
f84bb85d
package
com
.
makeit
.
controller
.
saas
;
import
com.makeit.common.dto.BaseIdDTO
;
import
com.makeit.common.page.PageReqDTO
;
import
com.makeit.common.page.PageVO
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.entity.platform.device.PlatDeviceLog
;
import
com.makeit.entity.saas.SaasPidManage
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.service.saas.SaasPidManageService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 声网pid管理 前端控制器
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@RestController
@RequestMapping
(
"/saas/pidManage"
)
@Api
(
tags
=
"租户管理-声网pid管理"
)
public
class
SaasPidManageController
{
@Autowired
private
SaasPidManageService
saasPidManageService
;
@ApiOperation
(
"列表"
)
@PostMapping
(
"page"
)
@TenantIdIgnore
public
ApiResponseEntity
<
PageVO
<
SaasPidManage
>>
page
(
@RequestBody
PageReqDTO
<
SaasPidManage
>
pageReqDTO
)
{
return
ApiResponseUtils
.
success
(
saasPidManageService
.
pageList
(
pageReqDTO
));
}
@ApiOperation
(
"新增"
)
@PostMapping
(
"add"
)
@TenantIdIgnore
public
ApiResponseEntity
<
Void
>
add
(
@RequestBody
SaasPidManage
dto
)
{
saasPidManageService
.
add
(
dto
);
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"新增"
)
@PostMapping
(
"delete"
)
@TenantIdIgnore
public
ApiResponseEntity
<
Void
>
delete
(
@RequestBody
BaseIdDTO
dto
)
{
saasPidManageService
.
delete
(
dto
.
getId
());
return
ApiResponseUtils
.
success
();
}
}
server-common/src/main/java/com/makeit/shengwang/agora/http/ShengwangHttpUtil.java
View file @
f84bb85d
...
@@ -17,7 +17,7 @@ public class ShengwangHttpUtil {
...
@@ -17,7 +17,7 @@ public class ShengwangHttpUtil {
@Autowired
@Autowired
private
ShengwangProperties
shengwangProperties
;
private
ShengwangProperties
shengwangProperties
;
public
String
active
(
String
licenseKey
)
{
public
String
active
(
String
licenseKey
,
String
pid
)
{
String
plainCredentials
=
shengwangProperties
.
getCustomerKey
()
+
":"
+
shengwangProperties
.
getCustomerSecret
();
String
plainCredentials
=
shengwangProperties
.
getCustomerKey
()
+
":"
+
shengwangProperties
.
getCustomerSecret
();
String
base64Credentials
=
new
String
(
Base64
.
getEncoder
().
encode
(
plainCredentials
.
getBytes
()));
String
base64Credentials
=
new
String
(
Base64
.
getEncoder
().
encode
(
plainCredentials
.
getBytes
()));
// 创建 authorization header
// 创建 authorization header
...
...
server-generator/src/test/java/CodeGenerator.java
View file @
f84bb85d
...
@@ -106,7 +106,7 @@ public class CodeGenerator {
...
@@ -106,7 +106,7 @@ public class CodeGenerator {
// 使用重点 下列字段填写表名 运行方法
// 使用重点 下列字段填写表名 运行方法
// strategy.setInclude("edu_teacher","..."); // 多表-逆向工程
// strategy.setInclude("edu_teacher","..."); // 多表-逆向工程
strategy
.
setInclude
(
"
plat_device_log
"
);
strategy
.
setInclude
(
"
saas_pid_manage
"
);
strategy
.
setNaming
(
NamingStrategy
.
underline_to_camel
);
//数据库表映射到实体的命名策略
strategy
.
setNaming
(
NamingStrategy
.
underline_to_camel
);
//数据库表映射到实体的命名策略
strategy
.
setTablePrefix
(
pc
.
getModuleName
()
+
"_"
);
//生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate
strategy
.
setTablePrefix
(
pc
.
getModuleName
()
+
"_"
);
//生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate
...
...
server-service/src/main/java/com/makeit/entity/saas/SaasPidManage.java
0 → 100644
View file @
f84bb85d
package
com
.
makeit
.
entity
.
saas
;
import
com.makeit.common.entity.BaseBusEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 声网pid管理
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"SaasPidManage对象"
,
description
=
"声网pid管理"
)
public
class
SaasPidManage
extends
BaseBusEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"pid"
)
private
String
pid
;
@ApiModelProperty
(
value
=
"状态 0已用完 1可用"
)
private
String
status
;
@ApiModelProperty
(
value
=
"可用额度"
)
private
Integer
availableCredit
;
@ApiModelProperty
(
value
=
"已用额度"
)
private
Integer
usedCredit
;
@ApiModelProperty
(
value
=
"总额度"
)
private
Integer
totalCredit
;
}
server-service/src/main/java/com/makeit/mapper/saas/SaasPidManageMapper.java
0 → 100644
View file @
f84bb85d
package
com
.
makeit
.
mapper
.
saas
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.makeit.entity.saas.SaasPidManage
;
/**
* <p>
* 声网pid管理 Mapper 接口
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
public
interface
SaasPidManageMapper
extends
BaseMapper
<
SaasPidManage
>
{
}
server-service/src/main/java/com/makeit/service/platform/device/impl/PlatDeviceServiceImpl.java
View file @
f84bb85d
...
@@ -35,6 +35,7 @@ import com.makeit.entity.platform.space.PlatRegionSetting;
...
@@ -35,6 +35,7 @@ import com.makeit.entity.platform.space.PlatRegionSetting;
import
com.makeit.entity.platform.space.PlatRoomBedDevice
;
import
com.makeit.entity.platform.space.PlatRoomBedDevice
;
import
com.makeit.entity.platform.space.PlatSpace
;
import
com.makeit.entity.platform.space.PlatSpace
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.entity.saas.SaasPidManage
;
import
com.makeit.enums.CodeMessageEnum
;
import
com.makeit.enums.CodeMessageEnum
;
import
com.makeit.enums.CommonEnum
;
import
com.makeit.enums.CommonEnum
;
import
com.makeit.enums.report.DeviceNameEnum
;
import
com.makeit.enums.report.DeviceNameEnum
;
...
@@ -60,6 +61,7 @@ import com.makeit.service.platform.space.PlatRegionSettingService;
...
@@ -60,6 +61,7 @@ import com.makeit.service.platform.space.PlatRegionSettingService;
import
com.makeit.service.platform.space.PlatRoomBedDeviceService
;
import
com.makeit.service.platform.space.PlatRoomBedDeviceService
;
import
com.makeit.service.platform.space.PlatSpaceService
;
import
com.makeit.service.platform.space.PlatSpaceService
;
import
com.makeit.service.saas.PlatTenantService
;
import
com.makeit.service.saas.PlatTenantService
;
import
com.makeit.service.saas.SaasPidManageService
;
import
com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO
;
import
com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO
;
import
com.makeit.shengwang.agora.http.ShengwangHttpUtil
;
import
com.makeit.shengwang.agora.http.ShengwangHttpUtil
;
import
com.makeit.shengwang.agora.media.RtcTokenBuilder2
;
import
com.makeit.shengwang.agora.media.RtcTokenBuilder2
;
...
@@ -140,6 +142,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
...
@@ -140,6 +142,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
private
AliyunOSSRepository
aliyunOSSRepository
;
private
AliyunOSSRepository
aliyunOSSRepository
;
@Autowired
@Autowired
private
PlatDeviceLogService
platDeviceLogService
;
private
PlatDeviceLogService
platDeviceLogService
;
@Autowired
private
SaasPidManageService
saasPidManageService
;
/**
/**
* 平台设备列表
* 平台设备列表
...
@@ -837,7 +841,22 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
...
@@ -837,7 +841,22 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
if
(
StringUtils
.
isNotEmpty
(
AttrResult
))
{
if
(
StringUtils
.
isNotEmpty
(
AttrResult
))
{
throw
new
RuntimeException
(
AttrResult
);
throw
new
RuntimeException
(
AttrResult
);
}
}
String
active
=
shengwangHttpUtil
.
active
(
platDevice
.
getOriDeviceId
());
SaasPidManage
saasPidManage
=
saasPidManageService
.
getOne
(
new
QueryWrapper
<
SaasPidManage
>().
lambda
()
.
eq
(
SaasPidManage:
:
getStatus
,
"1"
)
.
orderByAsc
(
BaseEntity:
:
getCreateDate
)
.
last
(
"limit 1"
));
if
(
saasPidManage
==
null
)
{
return
;
}
saasPidManage
.
setUsedCredit
(
saasPidManage
.
getUsedCredit
()
+
1
);
saasPidManage
.
setAvailableCredit
(
saasPidManage
.
getAvailableCredit
()
-
saasPidManage
.
getUsedCredit
());
if
(
Objects
.
equals
(
saasPidManage
.
getAvailableCredit
(),
saasPidManage
.
getUsedCredit
()))
{
saasPidManage
.
setStatus
(
"0"
);
}
saasPidManageService
.
updateById
(
saasPidManage
);
// 先为了业务测试注释
/* String active = shengwangHttpUtil.active(platDevice.getOriDeviceId(),saasPidManage.getPid());
ApiResponseEntity responseEntity = JSON.parseObject(active, ApiResponseEntity.class);
ApiResponseEntity responseEntity = JSON.parseObject(active, ApiResponseEntity.class);
if (responseEntity.getCode() != 200) {
if (responseEntity.getCode() != 200) {
throw new RuntimeException(responseEntity.getMessage());
throw new RuntimeException(responseEntity.getMessage());
...
@@ -859,7 +878,7 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
...
@@ -859,7 +878,7 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
if (StringUtils.isNotEmpty(result)) {
if (StringUtils.isNotEmpty(result)) {
throw new RuntimeException(result);
throw new RuntimeException(result);
}
}
}
}
*/
}
}
...
...
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
View file @
f84bb85d
...
@@ -191,20 +191,16 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -191,20 +191,16 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
// 判断是否在床睡觉
// 判断是否在床睡觉
Integer
sleepTimeActionThreshold
=
getSleepTimeActionThreshold
();
Integer
sleepTimeActionThreshold
=
getSleepTimeActionThreshold
();
Long
sleepTimeActionDuration
=
getSleepTimeActionDuration
();
Long
sleepTimeActionDuration
=
getSleepTimeActionDuration
();
Map
<
Object
,
Object
>
entries
=
redisTemplate
.
opsForHash
().
entries
(
DEVICE_BR_ANALYSIS
+
platDevice
.
getOriDeviceId
());
Set
<
String
>
dataSet
=
redisTemplate
.
opsForZSet
().
rangeByScore
(
DEVICE_BR_ANALYSIS
+
platDevice
.
getOriDeviceId
(),
0
,
Integer
.
MAX_VALUE
);
Collection
<
Object
>
values
=
entries
.
values
();
if
(
CollectionUtils
.
isNotEmpty
(
dataSet
)
&&
dataSet
.
size
()
>=
sleepTimeActionDuration
)
{
if
(
values
.
size
()
>=
sleepTimeActionDuration
)
{
boolean
flag
=
dataSet
.
stream
().
anyMatch
(
s
->
{
int
count
=
0
;
JSONObject
result
=
JSON
.
parseObject
(
s
);
for
(
Object
entity
:
values
)
{
JSONObject
properties
=
(
JSONObject
)
result
.
get
(
"properties"
);
JSONObject
result
=
JSON
.
parseObject
(
entity
.
toString
());
Integer
bodymove
=
Integer
.
valueOf
(
properties
.
getString
(
"bodymove"
));
Integer
bodymove
=
Integer
.
valueOf
(
result
.
getString
(
"bodymove"
));
return
bodymove
.
compareTo
(
sleepTimeActionThreshold
)
<=
0
;
boolean
b
=
bodymove
.
compareTo
(
sleepTimeActionThreshold
)
<=
0
;
});
if
(
b
)
{
log
.
info
(
"计算后睡眠集合大小:{}"
,
dataSet
.
size
());
count
++;
if
(
flag
)
{
}
}
log
.
info
(
"计算后睡眠集合大小:{},count:{}"
,
values
.
size
(),
count
);
if
(
values
.
size
()
-
count
<=
5
)
{
log
.
info
(
"当前属于在床睡眠:"
+
platElderIdDTO
.
getElderId
());
log
.
info
(
"当前属于在床睡眠:"
+
platElderIdDTO
.
getElderId
());
platElderRealTimeNowVO
.
setStatus
(
PlatElderRealtimeReportEnum
.
NowStatus
.
SLEEP
.
getValue
());
platElderRealTimeNowVO
.
setStatus
(
PlatElderRealtimeReportEnum
.
NowStatus
.
SLEEP
.
getValue
());
return
platElderRealTimeNowVO
;
return
platElderRealTimeNowVO
;
...
...
server-service/src/main/java/com/makeit/service/saas/SaasPidManageService.java
0 → 100644
View file @
f84bb85d
package
com
.
makeit
.
service
.
saas
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.common.page.PageReqDTO
;
import
com.makeit.common.page.PageVO
;
import
com.makeit.entity.saas.SaasPidManage
;
/**
* <p>
* 声网pid管理 服务类
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
public
interface
SaasPidManageService
extends
IService
<
SaasPidManage
>
{
PageVO
<
SaasPidManage
>
pageList
(
PageReqDTO
<
SaasPidManage
>
pageReqDTO
);
void
add
(
SaasPidManage
dto
);
void
delete
(
String
id
);
}
server-service/src/main/java/com/makeit/service/saas/impl/SaasPidManageServiceImpl.java
0 → 100644
View file @
f84bb85d
package
com
.
makeit
.
service
.
saas
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.makeit.common.page.PageReqDTO
;
import
com.makeit.common.page.PageVO
;
import
com.makeit.entity.saas.SaasPidManage
;
import
com.makeit.mapper.saas.SaasPidManageMapper
;
import
com.makeit.service.saas.SaasPidManageService
;
import
com.makeit.utils.data.convert.PageUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* <p>
* 声网pid管理 服务实现类
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@Service
public
class
SaasPidManageServiceImpl
extends
ServiceImpl
<
SaasPidManageMapper
,
SaasPidManage
>
implements
SaasPidManageService
{
@Resource
private
SaasPidManageMapper
saasPidManageMapper
;
@Override
public
PageVO
<
SaasPidManage
>
pageList
(
PageReqDTO
<
SaasPidManage
>
pageReqDTO
)
{
SaasPidManage
dto
=
pageReqDTO
.
getData
();
Page
<
SaasPidManage
>
p
=
PageUtil
.
toMpPage
(
pageReqDTO
);
LambdaQueryWrapper
<
SaasPidManage
>
lambdaQueryWrapper
=
new
QueryWrapper
<
SaasPidManage
>().
lambda
()
.
like
(
StringUtils
.
isNotEmpty
(
dto
.
getPid
()),
SaasPidManage:
:
getPid
,
dto
.
getPid
())
.
eq
(
StringUtils
.
isNotEmpty
(
dto
.
getStatus
()),
SaasPidManage:
:
getStatus
,
dto
.
getStatus
());
Page
<
SaasPidManage
>
saasPidManagePage
=
saasPidManageMapper
.
selectPage
(
p
,
lambdaQueryWrapper
);
List
<
SaasPidManage
>
records
=
saasPidManagePage
.
getRecords
();
return
PageUtil
.
toPageVO
(
records
,
saasPidManagePage
);
}
@Override
public
void
add
(
SaasPidManage
dto
)
{
dto
.
setStatus
(
"1"
);
dto
.
setUsedCredit
(
0
);
save
(
dto
);
}
@Override
public
void
delete
(
String
id
)
{
delete
(
id
);
}
}
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
View file @
f84bb85d
...
@@ -246,17 +246,12 @@ public class PushCallback implements MqttCallback {
...
@@ -246,17 +246,12 @@ public class PushCallback implements MqttCallback {
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
String
key
=
DEVICE_BR_ANALYSIS
+
device
.
getDeviceId
();
String
key
=
DEVICE_BR_ANALYSIS
+
device
.
getDeviceId
();
long
duration
=
getSleepTimeActionDuration
();
long
duration
=
getSleepTimeActionDuration
();
long
size
=
redisTemplate
.
opsFor
Hash
().
size
(
key
);
long
size
=
redisTemplate
.
opsFor
ZSet
().
zCard
(
key
);
long
differenceValue
=
currentSecond
-
duration
;
long
differenceValue
=
currentSecond
-
duration
;
if
(
size
==
duration
)
{
if
(
size
>
duration
)
{
redisTemplate
.
opsForHash
().
delete
(
key
,
differenceValue
);
redisTemplate
.
opsForZSet
().
removeRangeByScore
(
key
,
differenceValue
-
60
,
differenceValue
-
1
);
}
else
if
(
size
-
duration
>=
5
)
{
// 兼容设备上报数据时间不准确问题
for
(
long
i
=
differenceValue
;
i
<
differenceValue
-
10
;
i
--)
{
redisTemplate
.
opsForHash
().
delete
(
key
,
i
);
}
}
}
redisTemplate
.
opsForZSet
().
add
(
key
,
JSON
.
toJSONString
(
device
),
currentSecond
);
redisTemplate
.
opsForHash
().
put
(
key
,
currentSecond
,
JSON
.
toJSONString
(
device
.
getProperties
()));
redisTemplate
.
expire
(
key
,
duration
+
3
,
TimeUnit
.
MINUTES
);
redisTemplate
.
expire
(
key
,
duration
+
3
,
TimeUnit
.
MINUTES
);
}
}
...
...
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