Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
basic-api-boot
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Basic
basic-api-boot
Commits
d4f0d825
提交
d4f0d825
authored
4月 29, 2022
作者:
涂茂林
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:报警规则的增删改查
上级
dfb5fc22
隐藏空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
1227 行增加
和
14 行删除
+1227
-14
RelevanceParamEnum.java
...ava/com/yiring/app/constant/alarm/RelevanceParamEnum.java
+2
-2
IParamInitStrategy.java
.../java/com/yiring/app/design/check/IParamInitStrategy.java
+18
-0
DangerousStrategy.java
.../com/yiring/app/design/check/fence/DangerousStrategy.java
+28
-0
DefaultStrategy.java
...va/com/yiring/app/design/check/fence/DefaultStrategy.java
+32
-0
LocationFenceTypeContext.java
...ring/app/design/check/fence/LocationFenceTypeContext.java
+44
-0
AllowEntranceStrategy.java
...m/yiring/app/design/check/rule/AllowEntranceStrategy.java
+46
-0
LocationFenceRuleContext.java
...iring/app/design/check/rule/LocationFenceRuleContext.java
+48
-0
MaxPeopleNumberStrategy.java
...yiring/app/design/check/rule/MaxPeopleNumberStrategy.java
+51
-0
MinPeopleNumberStrategy.java
...yiring/app/design/check/rule/MinPeopleNumberStrategy.java
+53
-0
NotAllowLeaveStrategy.java
...m/yiring/app/design/check/rule/NotAllowLeaveStrategy.java
+46
-0
RetentionDurationStrategy.java
...ring/app/design/check/rule/RetentionDurationStrategy.java
+37
-0
StaticDurationStrategy.java
.../yiring/app/design/check/rule/StaticDurationStrategy.java
+37
-0
TriggerAlarmDistanceStrategy.java
...g/app/design/check/rule/TriggerAlarmDistanceStrategy.java
+37
-0
LocationFenceRule.java
...ava/com/yiring/app/domain/location/LocationFenceRule.java
+20
-12
LocationFenceRuleRepository.java
...ring/app/domain/location/LocationFenceRuleRepository.java
+16
-0
LocationFenceRuleAddParam.java
...ng/app/param/location/rule/LocationFenceRuleAddParam.java
+68
-0
LocationFenceRuleModifyParam.java
...app/param/location/rule/LocationFenceRuleModifyParam.java
+37
-0
RelevanceUserParam.java
...om/yiring/app/param/location/rule/RelevanceUserParam.java
+31
-0
RuleParam.java
...in/java/com/yiring/app/param/location/rule/RuleParam.java
+50
-0
TimeAndNumberParam.java
...om/yiring/app/param/location/rule/TimeAndNumberParam.java
+40
-0
TimeAndUserParam.java
.../com/yiring/app/param/location/rule/TimeAndUserParam.java
+40
-0
LocationFenceService.java
...ring/app/service/location/fence/LocationFenceService.java
+8
-0
LocationFenceServiceImpl.java
...service/location/fence/impl/LocationFenceServiceImpl.java
+11
-0
LocationFenceRuleService.java
...g/app/service/location/rule/LocationFenceRuleService.java
+43
-0
LocationFenceRuleServiceImpl.java
...vice/location/rule/impl/LocationFenceRuleServiceImpl.java
+70
-0
LocationFenceVo.java
...ava/com/yiring/app/vo/location/fence/LocationFenceVo.java
+12
-0
LocationFenceRuleVo.java
.../com/yiring/app/vo/location/rule/LocationFenceRuleVo.java
+67
-0
RelevanceUserVo.java
...java/com/yiring/app/vo/location/rule/RelevanceUserVo.java
+31
-0
RuleVo.java
...src/main/java/com/yiring/app/vo/location/rule/RuleVo.java
+50
-0
TimeAndNumberVo.java
...java/com/yiring/app/vo/location/rule/TimeAndNumberVo.java
+36
-0
TimeAndUserVo.java
...n/java/com/yiring/app/vo/location/rule/TimeAndUserVo.java
+38
-0
LocationFenceController.java
...iring/app/web/location/fence/LocationFenceController.java
+6
-0
LocationFenceRuleController.java
...ng/app/web/location/rule/LocationFenceRuleController.java
+69
-0
RegEx.java
.../core/src/main/java/com/yiring/common/constant/RegEx.java
+5
-0
没有找到文件。
app/src/main/java/com/yiring/app/constant/alarm/RelevanceParamEnum.java
浏览文件 @
d4f0d825
...
...
@@ -16,12 +16,12 @@ public enum RelevanceParamEnum {
/**
* 最大人数
*/
MAX_PEOPLE_NUMBER
(
1
,
"最
大
人数"
),
MAX_PEOPLE_NUMBER
(
1
,
"最
多
人数"
),
/**
* 最小人数
*/
MIN_PEOPLE_NUMBER
(
2
,
"最
小
人数"
),
MIN_PEOPLE_NUMBER
(
2
,
"最
少
人数"
),
/**
* 允许进入人员
...
...
app/src/main/java/com/yiring/app/design/check/IParamInitStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
;
import
com.yiring.common.core.Result
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:21
*/
public
interface
IParamInitStrategy
<
T
>
{
/**
* 校验参数
* @param param 参数
* @return 是否成功
*/
Result
<
String
>
paramInit
(
T
param
);
}
app/src/main/java/com/yiring/app/design/check/fence/DangerousStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
fence
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.common.core.Result
;
import
org.springframework.stereotype.Component
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:08
*/
@Component
public
class
DangerousStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
DangerousStrategy
()
{
Integer
fenceType
=
RelevanceParamEnum
.
MAX_PEOPLE_NUMBER
.
getCode
();
LocationFenceTypeContext
.
register
(
fenceType
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
//TODO
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/fence/DefaultStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
fence
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.common.core.Result
;
import
org.springframework.stereotype.Component
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:15
*/
@Component
public
class
DefaultStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
DefaultStrategy
()
{
Integer
fenceType
=
0
;
LocationFenceTypeContext
.
register
(
fenceType
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
ruleParam
.
setVoiceId
(
null
);
ruleParam
.
setVoiceName
(
null
);
ruleParam
.
setPlayEquipmentId
(
null
);
ruleParam
.
setPlayEquipmentName
(
null
);
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/fence/LocationFenceTypeContext.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
fence
;
import
com.yiring.app.constant.alarm.FenceTypeEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.common.core.Result
;
import
java.util.concurrent.ConcurrentHashMap
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:09
*/
@Slf4j
public
class
LocationFenceTypeContext
{
private
final
IParamInitStrategy
<
LocationFenceRuleAddParam
>
checkStrategy
;
private
static
final
ConcurrentHashMap
<
Integer
,
IParamInitStrategy
<
LocationFenceRuleAddParam
>>
FENCE_TYPE_MAP
=
new
ConcurrentHashMap
<>(
4
);
public
static
void
register
(
Integer
relevanceParam
,
IParamInitStrategy
<
LocationFenceRuleAddParam
>
strategy
)
{
FENCE_TYPE_MAP
.
put
(
relevanceParam
,
strategy
);
}
public
LocationFenceTypeContext
(
Integer
relevanceParam
)
{
if
(
relevanceParam
==
null
||
relevanceParam
>
FenceTypeEnum
.
MAX
||
relevanceParam
<
FenceTypeEnum
.
MIN
)
{
log
.
warn
(
"报警类型的关联参数异常, relevanceParam:[{}]"
,
relevanceParam
);
throw
new
RuntimeException
(
"报警类型的关联参数异常"
);
}
IParamInitStrategy
<
LocationFenceRuleAddParam
>
strategy
=
FENCE_TYPE_MAP
.
get
(
relevanceParam
);
if
(
strategy
==
null
)
{
strategy
=
FENCE_TYPE_MAP
.
get
(
0
);
}
this
.
checkStrategy
=
strategy
;
}
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
return
checkStrategy
.
paramInit
(
param
);
}
}
app/src/main/java/com/yiring/app/design/check/rule/AllowEntranceStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.app.param.location.rule.TimeAndUserParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public
class
AllowEntranceStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
AllowEntranceStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
ALLOW_ENTRANCE
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
List
<
TimeAndUserParam
>
timeAndUser
=
ruleParam
.
getTimeAndUser
();
if
(
CollectionUtils
.
isEmpty
(
timeAndUser
))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一条允许进入人员的规则"
);
}
for
(
TimeAndUserParam
item
:
timeAndUser
)
{
if
(
CollectionUtils
.
isEmpty
(
item
.
getUser
()))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一个允许进入的人员"
);
}
}
ruleParam
.
setDuration
(-
1
);
ruleParam
.
setDistance
(-
1
);
ruleParam
.
setTimeAndNumber
(
new
ArrayList
<>());
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/LocationFenceRuleContext.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.design.check.fence.LocationFenceTypeContext
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.concurrent.ConcurrentHashMap
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:36
*/
@Slf4j
public
class
LocationFenceRuleContext
{
private
final
IParamInitStrategy
<
LocationFenceRuleAddParam
>
checkStrategy
;
private
static
final
ConcurrentHashMap
<
Integer
,
IParamInitStrategy
<
LocationFenceRuleAddParam
>>
RULE_MAP
=
new
ConcurrentHashMap
<>(
10
);
public
static
void
register
(
Integer
relevanceParam
,
IParamInitStrategy
<
LocationFenceRuleAddParam
>
strategy
)
{
RULE_MAP
.
put
(
relevanceParam
,
strategy
);
}
public
LocationFenceRuleContext
(
Integer
relevanceParam
)
{
if
(
relevanceParam
==
null
||
relevanceParam
>
RelevanceParamEnum
.
MAX
||
relevanceParam
<
RelevanceParamEnum
.
MIN
)
{
log
.
warn
(
"报警类型的关联参数异常, relevanceParam:[{}]"
,
relevanceParam
);
throw
new
RuntimeException
(
"报警类型的关联参数异常"
);
}
this
.
checkStrategy
=
RULE_MAP
.
get
(
relevanceParam
);
}
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
Result
<
String
>
result
=
new
LocationFenceTypeContext
(
param
.
getFenceType
()).
paramInit
(
param
);
if
(
Status
.
OK
.
value
()
!=
result
.
getStatus
())
{
return
result
;
}
return
checkStrategy
.
paramInit
(
param
);
}
}
app/src/main/java/com/yiring/app/design/check/rule/MaxPeopleNumberStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.*
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
/**
* 最多人数校验
* @author tml
* @version 1.0
* @date 2022/4/29 9:28
*/
@Component
public
class
MaxPeopleNumberStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
MaxPeopleNumberStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
MAX_PEOPLE_NUMBER
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
List
<
TimeAndNumberParam
>
timeAndNumber
=
ruleParam
.
getTimeAndNumber
();
if
(
CollectionUtils
.
isEmpty
(
timeAndNumber
))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一条最多人数的规则"
);
}
for
(
TimeAndNumberParam
item
:
timeAndNumber
)
{
if
(
item
.
getNumber
()
==
null
||
item
.
getNumber
()
<
0
)
{
item
.
setNumber
(
0
);
}
if
(
item
.
getBeginTime
()
==
null
||
item
.
getEndTime
()
==
null
)
{
item
.
setBeginTime
(
null
);
item
.
setEndTime
(
null
);
}
}
//将时间和距离都设为-1
ruleParam
.
setDuration
(-
1
);
ruleParam
.
setDistance
(-
1
);
ArrayList
<
TimeAndUserParam
>
list
=
new
ArrayList
<>();
ruleParam
.
setTimeAndUser
(
list
);
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/MinPeopleNumberStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.app.param.location.rule.TimeAndNumberParam
;
import
com.yiring.app.param.location.rule.TimeAndUserParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:31
*/
@Component
public
class
MinPeopleNumberStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
MinPeopleNumberStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
MIN_PEOPLE_NUMBER
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
List
<
TimeAndNumberParam
>
timeAndNumber
=
ruleParam
.
getTimeAndNumber
();
if
(
CollectionUtils
.
isEmpty
(
timeAndNumber
))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一条最小人数的规则"
);
}
for
(
TimeAndNumberParam
item
:
timeAndNumber
)
{
if
(
item
.
getNumber
()
==
null
||
item
.
getNumber
()
<
0
)
{
item
.
setNumber
(
0
);
}
if
(
item
.
getBeginTime
()
==
null
||
item
.
getEndTime
()
==
null
)
{
item
.
setBeginTime
(
null
);
item
.
setEndTime
(
null
);
}
}
//将时间和距离都设为-1
ruleParam
.
setDuration
(-
1
);
ruleParam
.
setDistance
(-
1
);
ArrayList
<
TimeAndUserParam
>
list
=
new
ArrayList
<>();
ruleParam
.
setTimeAndUser
(
list
);
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/NotAllowLeaveStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.app.param.location.rule.TimeAndUserParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public
class
NotAllowLeaveStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
NotAllowLeaveStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
NOT_ALLOW_LEAVE
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
List
<
TimeAndUserParam
>
timeAndUser
=
ruleParam
.
getTimeAndUser
();
if
(
CollectionUtils
.
isEmpty
(
timeAndUser
))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一条不允许离开人员的规则"
);
}
for
(
TimeAndUserParam
item
:
timeAndUser
)
{
if
(
CollectionUtils
.
isEmpty
(
item
.
getUser
()))
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"请至少配置一个不允许离开的人员"
);
}
}
ruleParam
.
setDuration
(-
1
);
ruleParam
.
setDistance
(-
1
);
ruleParam
.
setTimeAndNumber
(
new
ArrayList
<>());
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/RetentionDurationStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
org.springframework.stereotype.Component
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:33
*/
@Component
public
class
RetentionDurationStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
RetentionDurationStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
RETENTION_DURATION
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
if
(
ruleParam
.
getDuration
()
==
null
||
ruleParam
.
getDuration
()
<
0
)
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"滞留时长异常"
);
}
ruleParam
.
setDistance
(-
1
);
ruleParam
.
setTimeAndUser
(
new
ArrayList
<>());
ruleParam
.
setTimeAndNumber
(
new
ArrayList
<>());
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/StaticDurationStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
org.springframework.stereotype.Component
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public
class
StaticDurationStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
StaticDurationStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
STATIC_DURATION
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
if
(
ruleParam
.
getDuration
()
==
null
||
ruleParam
.
getDuration
()
<
0
)
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"静止时长异常"
);
}
ruleParam
.
setDistance
(-
1
);
ruleParam
.
setTimeAndUser
(
new
ArrayList
<>());
ruleParam
.
setTimeAndNumber
(
new
ArrayList
<>());
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/design/check/rule/TriggerAlarmDistanceStrategy.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
design
.
check
.
rule
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.design.check.IParamInitStrategy
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
java.util.ArrayList
;
import
org.springframework.stereotype.Component
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:33
*/
@Component
public
class
TriggerAlarmDistanceStrategy
implements
IParamInitStrategy
<
LocationFenceRuleAddParam
>
{
public
TriggerAlarmDistanceStrategy
()
{
Integer
relevanceParam
=
RelevanceParamEnum
.
TRIGGER_ALARM_DISTANCE
.
getCode
();
LocationFenceRuleContext
.
register
(
relevanceParam
,
this
);
}
@Override
public
Result
<
String
>
paramInit
(
LocationFenceRuleAddParam
param
)
{
RuleParam
ruleParam
=
param
.
getRuleParam
();
if
(
ruleParam
.
getDistance
()
==
null
||
ruleParam
.
getDistance
()
<
0
)
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"触发报警距离异常"
);
}
ruleParam
.
setDuration
(-
1
);
ruleParam
.
setTimeAndUser
(
new
ArrayList
<>());
ruleParam
.
setTimeAndNumber
(
new
ArrayList
<>());
return
Result
.
ok
();
}
}
app/src/main/java/com/yiring/app/domain/location/LocationFenceRule.java
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
domain
.
location
;
import
com.yiring.app.domain.alarm.AlarmType
;
import
com.yiring.common.domain.BasicEntity
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.Objects
;
import
javax.persistence.Entity
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.Table
;
import
javax.persistence.*
;
import
lombok.*
;
import
lombok.experimental.FieldNameConstants
;
import
lombok.experimental.SuperBuilder
;
import
org.hibernate.Hibernate
;
import
org.hibernate.annotations.Comment
;
import
org.hibernate.annotations.Where
;
/**
* 围栏规则
...
...
@@ -26,10 +26,11 @@ import org.hibernate.annotations.Comment;
@Getter
@Setter
@ToString
@
Builder
@
SuperBuilder
(
toBuilder
=
true
)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Where
(
clause
=
"deleted = false"
)
@Entity
@Table
(
name
=
"BS_LOCATION_FENCE_RULE"
)
@Comment
(
"围栏规则"
)
...
...
@@ -43,13 +44,20 @@ public class LocationFenceRule extends BasicEntity implements Serializable {
@JoinColumn
(
name
=
"fence_id"
)
private
LocationFence
fence
;
@Comment
(
"静止时长(分钟)"
)
private
Integer
staticDuration
;
@Comment
(
"报警类别"
)
@ManyToOne
@JoinColumn
(
name
=
"alarm_id"
)
private
AlarmType
alarmType
;
@Comment
(
"关联参数类别"
)
private
Integer
relevanceParamType
;
@Comment
(
"规则,用json存入"
)
private
String
rule
;
// TODO
// 字段补充
// 关联表补充(报警规则)
// 关联表配置值补充
@Comment
(
value
=
"是否删除"
)
@Column
(
nullable
=
false
)
Boolean
deleted
;
@Override
public
boolean
equals
(
Object
o
)
{
...
...
@@ -61,6 +69,6 @@ public class LocationFenceRule extends BasicEntity implements Serializable {
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
super
.
hashCode
(),
fence
,
staticDuration
);
return
Objects
.
hash
(
super
.
hashCode
(),
fence
,
alarmType
,
relevanceParamType
,
rule
,
deleted
);
}
}
app/src/main/java/com/yiring/app/domain/location/LocationFenceRuleRepository.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
domain
.
location
;
import
java.io.Serializable
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.stereotype.Repository
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:40
*/
@Repository
public
interface
LocationFenceRuleRepository
extends
JpaRepository
<
LocationFenceRule
,
Serializable
>,
JpaSpecificationExecutor
<
LocationFenceRule
>
{}
app/src/main/java/com/yiring/app/param/location/rule/LocationFenceRuleAddParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
com.alibaba.fastjson.JSON
;
import
com.yiring.app.constant.alarm.RelevanceParamEnum
;
import
com.yiring.app.domain.alarm.AlarmType
;
import
com.yiring.app.domain.location.LocationFence
;
import
com.yiring.app.domain.location.LocationFenceRule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
javax.validation.constraints.NotNull
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.validator.constraints.Range
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:16
*/
@ApiModel
(
"添加配置报警类别的报警规则,根据不同类型传入不同参数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
LocationFenceRuleAddParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
7774789748161552583L
;
@ApiModelProperty
(
value
=
"所属的围栏id"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"所属的围栏id不能为空"
)
private
Long
fenceId
;
@ApiModelProperty
(
value
=
"所属的围栏类别"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"所属的围栏类别不能为空"
)
private
Integer
fenceType
;
@ApiModelProperty
(
value
=
"所属的报警类别id"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"所属的报警类别id不能为空"
)
private
Long
alarmTypeId
;
@ApiModelProperty
(
value
=
"设置的关联参数类型"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"所属的关联参数类别不能为空"
)
@Range
(
min
=
RelevanceParamEnum
.
MIN
,
max
=
RelevanceParamEnum
.
MAX
,
message
=
"关联参数类别异常"
)
private
Integer
relevanceParamType
;
@NotNull
(
message
=
"所属的规则不能为空"
)
private
RuleParam
ruleParam
;
public
LocationFenceRule
transform
()
{
LocationFence
locationFence
=
LocationFence
.
builder
().
id
(
fenceId
).
fenceType
(
fenceType
).
build
();
AlarmType
alarmType
=
AlarmType
.
builder
().
id
(
alarmTypeId
).
relevanceParam
(
relevanceParamType
).
build
();
String
rule
=
JSON
.
toJSONString
(
ruleParam
);
return
LocationFenceRule
.
builder
()
.
fence
(
locationFence
)
.
relevanceParamType
(
relevanceParamType
)
.
alarmType
(
alarmType
)
.
rule
(
rule
)
.
deleted
(
false
)
.
build
();
}
}
app/src/main/java/com/yiring/app/param/location/rule/LocationFenceRuleModifyParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
com.yiring.app.domain.location.LocationFenceRule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
javax.validation.constraints.NotNull
;
import
lombok.*
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:16
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
"修改配置报警类别的报警规则,根据不同类型传入不同参数"
)
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
LocationFenceRuleModifyParam
extends
LocationFenceRuleAddParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
7774789748161552583L
;
@ApiModelProperty
(
value
=
"规则id"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"规则id不能为空"
)
private
Long
id
;
@Override
public
LocationFenceRule
transform
()
{
LocationFenceRule
transform
=
super
.
transform
();
transform
.
setId
(
id
);
return
transform
;
}
}
app/src/main/java/com/yiring/app/param/location/rule/RelevanceUserParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
lombok.*
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:28
*/
@ApiModel
(
"报警类型中报警规则的用户信息"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public
class
RelevanceUserParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
8419550356739651935L
;
@ApiModelProperty
(
value
=
"工号"
,
example
=
"1888888888"
,
required
=
true
)
private
String
uuid
;
@ApiModelProperty
(
value
=
"真实姓名"
,
example
=
"张三"
,
required
=
true
)
private
String
realName
;
}
app/src/main/java/com/yiring/app/param/location/rule/RuleParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.List
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 14:12
*/
@ApiModel
(
"报警规则,根据不同类型传入不同参数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
RuleParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
441241201908785930L
;
@ApiModelProperty
(
value
=
"选择的播放语音id"
,
example
=
"1"
)
private
Long
voiceId
;
@ApiModelProperty
(
value
=
"选择的播放语音名称"
,
example
=
"紧急语音"
)
private
String
voiceName
;
@ApiModelProperty
(
value
=
"选择的播放设备id"
,
example
=
"1"
)
private
Long
playEquipmentId
;
@ApiModelProperty
(
value
=
"选择的播放设备名称"
,
example
=
"语音设备1"
)
private
String
playEquipmentName
;
@ApiModelProperty
(
value
=
"静止时长或滞留时间(分钟)"
,
example
=
"10"
)
private
Integer
duration
;
@ApiModelProperty
(
value
=
"触发报警的距离(米)"
,
example
=
"10"
)
private
Integer
distance
;
private
List
<
TimeAndNumberParam
>
timeAndNumber
;
private
List
<
TimeAndUserParam
>
timeAndUser
;
}
app/src/main/java/com/yiring/app/param/location/rule/TimeAndNumberParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
com.yiring.common.constant.RegEx
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
javax.validation.constraints.Pattern
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel
(
"报警类型中的最多人数或最小人数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
TimeAndNumberParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
6796977663003158881L
;
@ApiModelProperty
(
value
=
"起始时间"
,
example
=
"星期一 08:00:00"
)
@Pattern
(
regexp
=
RegEx
.
TIME_RULE
,
message
=
"时间格式不正确"
)
private
String
beginTime
;
@ApiModelProperty
(
value
=
"终止时间"
,
example
=
"星期一 18:00:00"
)
@Pattern
(
regexp
=
RegEx
.
TIME_RULE
,
message
=
"时间格式不正确"
)
private
String
endTime
;
@ApiModelProperty
(
value
=
"人数"
,
example
=
"100"
)
private
Integer
number
;
}
app/src/main/java/com/yiring/app/param/location/rule/TimeAndUserParam.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
location
.
rule
;
import
com.yiring.common.constant.RegEx
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.Set
;
import
javax.validation.constraints.Pattern
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel
(
"报警类型中的允许进入人员或不允许离开人员"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
TimeAndUserParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
7037620599825901175L
;
@ApiModelProperty
(
value
=
"起始时间"
,
example
=
"星期一 08:00:00"
)
@Pattern
(
regexp
=
RegEx
.
TIME_RULE
,
message
=
"时间格式不正确"
)
private
String
beginTime
;
@ApiModelProperty
(
value
=
"终止时间"
,
example
=
"星期一 18:00:00"
)
@Pattern
(
regexp
=
RegEx
.
TIME_RULE
,
message
=
"时间格式不正确"
)
private
String
endTime
;
private
Set
<
RelevanceUserParam
>
user
;
}
app/src/main/java/com/yiring/app/service/location/fence/LocationFenceService.java
浏览文件 @
d4f0d825
...
...
@@ -9,6 +9,7 @@ import com.yiring.common.core.Result;
import
com.yiring.common.param.IdParam
;
import
com.yiring.common.param.PageParam
;
import
com.yiring.common.vo.PageVo
;
import
javax.validation.Valid
;
/**
* @author tml
...
...
@@ -44,4 +45,11 @@ public interface LocationFenceService {
* @return 是否成功
*/
Result
<
PageVo
<
LocationFenceVo
>>
findList
(
LocationFenceConditionParam
conditionParam
,
PageParam
pageParam
);
/**
* 根据id查询围栏信息
* @param param id
* @return 详细信息
*/
Result
<
LocationFenceVo
>
findById
(
@Valid
IdParam
param
);
}
app/src/main/java/com/yiring/app/service/location/fence/impl/LocationFenceServiceImpl.java
浏览文件 @
d4f0d825
...
...
@@ -106,4 +106,15 @@ public class LocationFenceServiceImpl implements LocationFenceService {
PageVo
<
LocationFenceVo
>
pageVo
=
PageVo
.
build
(
voList
,
fencePage
.
getTotalElements
());
return
Result
.
ok
(
pageVo
);
}
@Override
public
Result
<
LocationFenceVo
>
findById
(
IdParam
param
)
{
Optional
<
LocationFence
>
optional
=
locationFenceRepository
.
findById
(
param
.
getId
());
if
(
optional
.
isEmpty
())
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"查询的围栏信息不存在"
);
}
LocationFence
fence
=
optional
.
get
();
LocationFenceVo
fenceVo
=
LocationFenceVo
.
transform
(
fence
);
return
Result
.
ok
(
fenceVo
);
}
}
app/src/main/java/com/yiring/app/service/location/rule/LocationFenceRuleService.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
service
.
location
.
rule
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationFenceRuleModifyParam
;
import
com.yiring.app.vo.location.rule.LocationFenceRuleVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.param.IdParam
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:27
*/
public
interface
LocationFenceRuleService
{
/**
* 添加一条规则
* @param param 规则信息
* @return 是否成功
*/
Result
<
String
>
addRule
(
LocationFenceRuleAddParam
param
);
/**
* 修改一条规则
* @param param 规则信息
* @return 是否成
*/
Result
<
String
>
modifyRule
(
LocationFenceRuleModifyParam
param
);
/**
* 删除一条规则
* @param idParam 规则id
* @return 是否成功
*/
Result
<
String
>
removeRule
(
IdParam
idParam
);
/**
* 根据id查询一条规则信息
* @param idParam 规则id
* @return 规则信息
*/
Result
<
LocationFenceRuleVo
>
findRule
(
IdParam
idParam
);
}
app/src/main/java/com/yiring/app/service/location/rule/impl/LocationFenceRuleServiceImpl.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
service
.
location
.
rule
.
impl
;
import
com.yiring.app.domain.location.LocationFenceRule
;
import
com.yiring.app.domain.location.LocationFenceRuleRepository
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationFenceRuleModifyParam
;
import
com.yiring.app.service.location.rule.LocationFenceRuleService
;
import
com.yiring.app.util.JpaUtil
;
import
com.yiring.app.vo.location.rule.LocationFenceRuleVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
com.yiring.common.param.IdParam
;
import
java.util.Optional
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:39
*/
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Slf4j
public
class
LocationFenceRuleServiceImpl
implements
LocationFenceRuleService
{
@Resource
private
LocationFenceRuleRepository
locationFenceRuleRepository
;
@Override
public
Result
<
String
>
addRule
(
LocationFenceRuleAddParam
param
)
{
LocationFenceRule
locationFenceRule
=
param
.
transform
();
locationFenceRuleRepository
.
saveAndFlush
(
locationFenceRule
);
return
Result
.
ok
();
}
@Override
public
Result
<
String
>
modifyRule
(
LocationFenceRuleModifyParam
param
)
{
LocationFenceRule
locationFenceRule
=
param
.
transform
();
Optional
<
LocationFenceRule
>
optional
=
locationFenceRuleRepository
.
findById
(
param
.
getId
());
if
(
optional
.
isEmpty
())
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"要修改的规则不存在"
);
}
JpaUtil
.
copyNotNullProperties
(
locationFenceRule
,
optional
.
get
());
return
Result
.
ok
();
}
@Override
public
Result
<
String
>
removeRule
(
IdParam
idParam
)
{
Optional
<
LocationFenceRule
>
optional
=
locationFenceRuleRepository
.
findById
(
idParam
.
getId
());
if
(
optional
.
isEmpty
())
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"要删除的规则不存在"
);
}
optional
.
get
().
setDeleted
(
true
);
return
Result
.
ok
();
}
@Override
public
Result
<
LocationFenceRuleVo
>
findRule
(
IdParam
idParam
)
{
Optional
<
LocationFenceRule
>
optional
=
locationFenceRuleRepository
.
findById
(
idParam
.
getId
());
if
(
optional
.
isEmpty
())
{
return
Result
.
no
(
Status
.
EXPECTATION_FAILED
,
"要删除的规则不存在"
);
}
LocationFenceRuleVo
ruleVo
=
LocationFenceRuleVo
.
transform
(
optional
.
get
());
return
Result
.
ok
(
ruleVo
);
}
}
app/src/main/java/com/yiring/app/vo/location/fence/LocationFenceVo.java
浏览文件 @
d4f0d825
...
...
@@ -3,11 +3,14 @@ package com.yiring.app.vo.location.fence;
import
com.yiring.app.constant.alarm.FenceTypeEnum
;
import
com.yiring.app.domain.location.LocationFence
;
import
com.yiring.app.domain.location.LocationFenceRule
;
import
com.yiring.app.vo.location.rule.LocationFenceRuleVo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
...
...
@@ -50,7 +53,15 @@ public class LocationFenceVo implements Serializable {
@ApiModelProperty
(
value
=
"是否启用"
)
private
Boolean
enable
;
@ApiModelProperty
(
value
=
"报警规则"
)
private
Set
<
LocationFenceRuleVo
>
rules
;
public
static
LocationFenceVo
transform
(
LocationFence
locationFence
)
{
Set
<
LocationFenceRule
>
rules
=
locationFence
.
getRules
();
Set
<
LocationFenceRuleVo
>
collect
=
rules
.
stream
()
.
map
(
LocationFenceRuleVo:
:
transform
)
.
collect
(
Collectors
.
toSet
());
return
LocationFenceVo
.
builder
()
.
name
(
locationFence
.
getName
())
...
...
@@ -59,6 +70,7 @@ public class LocationFenceVo implements Serializable {
.
fenceType
(
FenceTypeEnum
.
getByCode
(
locationFence
.
getFenceType
()))
.
residenceTime
(
locationFence
.
getResidenceTime
())
.
threshold
(
locationFence
.
getThreshold
())
.
rules
(
collect
)
.
enable
(
locationFence
.
getEnable
())
.
build
();
}
...
...
app/src/main/java/com/yiring/app/vo/location/rule/LocationFenceRuleVo.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
location
.
rule
;
import
cn.hutool.core.convert.Convert
;
import
com.alibaba.fastjson.JSON
;
import
com.yiring.app.domain.location.LocationFenceRule
;
import
com.yiring.app.param.location.rule.RuleParam
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:16
*/
@ApiModel
(
"修改配置报警类别的报警规则,根据不同类型传入不同参数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
LocationFenceRuleVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
7774789748161552583L
;
@ApiModelProperty
(
value
=
"规则id"
,
example
=
"1"
,
required
=
true
)
private
Long
id
;
@ApiModelProperty
(
value
=
"所属的围栏id"
,
example
=
"1"
,
required
=
true
)
private
Long
fenceId
;
@ApiModelProperty
(
value
=
"所属的围栏类别"
,
example
=
"1"
,
required
=
true
)
private
Integer
fenceType
;
@ApiModelProperty
(
value
=
"所属的报警类别id"
,
example
=
"1"
,
required
=
true
)
private
Long
alarmTypeId
;
@ApiModelProperty
(
value
=
"设置的关联参数类型(1:最大人数,2:最小人数,3:允许进入人员,4:不允许离开人员,5:静止时长(分钟),6:滞留时长(分钟),7:触发报警距离)"
,
example
=
"1"
,
required
=
true
)
private
Integer
relevanceParamType
;
private
RuleVo
ruleVo
;
public
static
LocationFenceRuleVo
transform
(
LocationFenceRule
locationFenceRule
)
{
String
rule
=
locationFenceRule
.
getRule
();
RuleParam
ruleParam
=
JSON
.
parseObject
(
rule
,
RuleParam
.
class
);
RuleVo
ruleVo
=
Convert
.
convert
(
RuleVo
.
class
,
ruleParam
);
return
LocationFenceRuleVo
.
builder
()
.
id
(
locationFenceRule
.
getId
())
.
fenceId
(
locationFenceRule
.
getFence
().
getId
())
.
fenceType
(
locationFenceRule
.
getFence
().
getFenceType
())
.
alarmTypeId
(
locationFenceRule
.
getAlarmType
().
getId
())
.
relevanceParamType
(
locationFenceRule
.
getRelevanceParamType
())
.
ruleVo
(
ruleVo
)
.
build
();
}
}
app/src/main/java/com/yiring/app/vo/location/rule/RelevanceUserVo.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
lombok.*
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:28
*/
@ApiModel
(
"报警类型中报警规则的用户信息"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public
class
RelevanceUserVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
8419550356739651935L
;
@ApiModelProperty
(
value
=
"工号"
,
example
=
"1888888888"
,
required
=
true
)
private
String
uuid
;
@ApiModelProperty
(
value
=
"真实姓名"
,
example
=
"张三"
,
required
=
true
)
private
String
realName
;
}
app/src/main/java/com/yiring/app/vo/location/rule/RuleVo.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.List
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 14:12
*/
@ApiModel
(
"报警规则,根据不同类型传入不同参数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
RuleVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
441241201908785930L
;
@ApiModelProperty
(
value
=
"选择的播放语音id"
,
example
=
"1"
)
private
Long
voiceId
;
@ApiModelProperty
(
value
=
"选择的播放语音名称"
,
example
=
"紧急语音"
)
private
String
voiceName
;
@ApiModelProperty
(
value
=
"选择的播放设备id"
,
example
=
"1"
)
private
Long
playEquipmentId
;
@ApiModelProperty
(
value
=
"选择的播放设备名称"
,
example
=
"语音设备1"
)
private
String
playEquipmentName
;
@ApiModelProperty
(
value
=
"静止时长或滞留时间(分钟)"
,
example
=
"10"
)
private
Integer
duration
;
@ApiModelProperty
(
value
=
"触发报警的距离(米)"
,
example
=
"10"
)
private
Integer
distance
;
private
List
<
TimeAndNumberVo
>
timeAndNumber
;
private
List
<
TimeAndUserVo
>
timeAndUser
;
}
app/src/main/java/com/yiring/app/vo/location/rule/TimeAndNumberVo.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel
(
"报警类型中的最多人数或最小人数"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
TimeAndNumberVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
6796977663003158881L
;
@ApiModelProperty
(
value
=
"起始时间"
,
example
=
"星期一 08:00:00"
)
private
String
beginTime
;
@ApiModelProperty
(
value
=
"终止时间"
,
example
=
"星期一 18:00:00"
)
private
String
endTime
;
@ApiModelProperty
(
value
=
"人数"
,
example
=
"100"
)
private
Integer
number
;
}
app/src/main/java/com/yiring/app/vo/location/rule/TimeAndUserVo.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
location
.
rule
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.util.Set
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.SuperBuilder
;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel
(
"报警类型中的允许进入人员或不允许离开人员"
)
@Data
@SuperBuilder
(
toBuilder
=
true
)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
TimeAndUserVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
7037620599825901175L
;
@ApiModelProperty
(
value
=
"起始时间"
,
example
=
"星期一 08:00:00"
)
private
String
beginTime
;
@ApiModelProperty
(
value
=
"终止时间"
,
example
=
"星期一 18:00:00"
)
private
String
endTime
;
private
Set
<
RelevanceUserVo
>
user
;
}
app/src/main/java/com/yiring/app/web/location/fence/LocationFenceController.java
浏览文件 @
d4f0d825
...
...
@@ -59,4 +59,10 @@ public class LocationFenceController {
)
{
return
locationFenceService
.
findList
(
conditionParam
,
pageParam
);
}
@ApiOperation
(
"根据条id查询围栏信息"
)
@PostMapping
(
"/findById"
)
public
Result
<
LocationFenceVo
>
findById
(
@Valid
IdParam
param
)
{
return
locationFenceService
.
findById
(
param
);
}
}
app/src/main/java/com/yiring/app/web/location/rule/LocationFenceRuleController.java
0 → 100644
浏览文件 @
d4f0d825
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
web
.
location
.
rule
;
import
com.yiring.app.design.check.rule.LocationFenceRuleContext
;
import
com.yiring.app.param.location.rule.LocationFenceRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationFenceRuleModifyParam
;
import
com.yiring.app.service.location.rule.impl.LocationFenceRuleServiceImpl
;
import
com.yiring.app.vo.location.rule.LocationFenceRuleVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
com.yiring.common.param.IdParam
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
javax.annotation.Resource
;
import
javax.validation.Valid
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.validation.annotation.Validated
;
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
;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:05
*/
@Slf4j
@Validated
@Api
(
tags
=
"LocationFenceRuleController(电子围栏报警规则)"
)
@RestController
@RequestMapping
(
"/location/rule"
)
public
class
LocationFenceRuleController
{
@Resource
private
LocationFenceRuleServiceImpl
locationFenceRuleService
;
@ApiOperation
(
"添加一条电子围栏的报警规则"
)
@PostMapping
(
"/addRule"
)
public
Result
<
String
>
addRule
(
@Valid
@RequestBody
LocationFenceRuleAddParam
param
)
{
Result
<
String
>
result
=
new
LocationFenceRuleContext
(
param
.
getRelevanceParamType
()).
paramInit
(
param
);
if
(
Status
.
OK
.
value
()
!=
result
.
getStatus
())
{
return
result
;
}
return
locationFenceRuleService
.
addRule
(
param
);
}
@ApiOperation
(
"修改一条电子围栏的报警规则"
)
@PostMapping
(
"/modifyRule"
)
public
Result
<
String
>
modifyRule
(
@Valid
@RequestBody
LocationFenceRuleModifyParam
param
)
{
Result
<
String
>
result
=
new
LocationFenceRuleContext
(
param
.
getRelevanceParamType
()).
paramInit
(
param
);
if
(
Status
.
OK
.
value
()
!=
result
.
getStatus
())
{
return
result
;
}
return
locationFenceRuleService
.
modifyRule
(
param
);
}
@ApiOperation
(
"删除一条电子围栏的报警规则"
)
@PostMapping
(
"/removeRule"
)
public
Result
<
String
>
removeRule
(
@Valid
IdParam
idParam
)
{
return
locationFenceRuleService
.
removeRule
(
idParam
);
}
@ApiOperation
(
"查询一条电子围栏的报警规则"
)
@PostMapping
(
"/findRule"
)
public
Result
<
LocationFenceRuleVo
>
findRule
(
@Valid
IdParam
idParam
)
{
return
locationFenceRuleService
.
findRule
(
idParam
);
}
}
basic-common/core/src/main/java/com/yiring/common/constant/RegEx.java
浏览文件 @
d4f0d825
...
...
@@ -19,4 +19,9 @@ public class RegEx {
//手机号码验证
public
static
final
String
MOBILE
=
"^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$"
;
/**
* 报警规则的时间格式
*/
public
static
final
String
TIME_RULE
=
"^星期[一二三四五六日]\\ (2[0-4]|[0-1]\\d)(\\:[0-5]\\d){2}$"
;
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论