Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
李苗
/
Vion-DevOps
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 3cb90a9d
authored
Jan 15, 2025
by
HlQ
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
[feat]
1.指标新增静默期功能 2.新增用户订阅集团功能 [bug] 项目关联合同文件 bug 修复
1 parent
c90ad753
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
488 additions
and
113 deletions
src/main/java/vion/config/mp/MyBatisPlusConfig.java
src/main/java/vion/controller/StoreController.java
src/main/java/vion/controller/monitor/MAccountController.java
src/main/java/vion/controller/monitor/MallController.java
src/main/java/vion/dto/monitor/MallDTO.java
src/main/java/vion/event/mqtt/MqttClientMessageListener.java
src/main/java/vion/mapper/monitor/RMallSilentMapper.java
src/main/java/vion/mapper/monitor/RUserAccountMapper.java
src/main/java/vion/model/monitor/EventRecord.java
src/main/java/vion/model/monitor/RMallSilent.java
src/main/java/vion/model/monitor/RUserAccount.java
src/main/java/vion/service/IStoreService.java
src/main/java/vion/service/impl/StoreServiceImpl.java
src/main/java/vion/service/impl/monitor/MAccountServiceImpl.java
src/main/java/vion/service/impl/monitor/MallServiceImpl.java
src/main/java/vion/service/impl/monitor/RMallSilentServiceImpl.java
src/main/java/vion/service/impl/monitor/RUserAccountServiceImpl.java
src/main/java/vion/service/monitor/IMAccountService.java
src/main/java/vion/service/monitor/IMallService.java
src/main/java/vion/service/monitor/IRMallSilentService.java
src/main/java/vion/service/monitor/IRUserAccountService.java
src/main/java/vion/config/mp/MyBatisPlusConfig.java
View file @
3cb90a9
...
...
@@ -29,8 +29,10 @@ public class MyBatisPlusConfig implements MetaObjectHandler {
var
vo
=
(
UserVO
)
StpUtil
.
getTokenSession
().
get
(
"curLoginUser"
);
this
.
fillHasGetter
(
metaObject
,
"creator"
,
vo
.
getUserid
());
this
.
fillHasGetter
(
metaObject
,
"createBy"
,
vo
.
getUserid
());
this
.
fillHasGetter
(
metaObject
,
"createUser"
,
vo
.
getUserid
());
this
.
fillHasGetter
(
metaObject
,
"updater"
,
vo
.
getUserid
());
this
.
fillHasGetter
(
metaObject
,
"updateBy"
,
vo
.
getUserid
());
this
.
fillHasGetter
(
metaObject
,
"updateUser"
,
vo
.
getUserid
());
}
catch
(
Exception
ignored
)
{
}
}
...
...
src/main/java/vion/controller/StoreController.java
View file @
3cb90a9
...
...
@@ -177,14 +177,14 @@ public class StoreController {
@GetMapping
(
"/store/rContractFile"
)
@SaCheckPermission
(
value
=
"store:contractFile"
,
orRole
=
"admin"
)
public
List
<
FileInfo
>
contractFile
(
@RequestParam
L
ist
<
Long
>
storeIdList
)
{
return
storeService
.
contractFile
(
storeId
List
);
public
List
<
FileInfo
>
contractFile
(
@RequestParam
L
ong
storeId
)
{
return
storeService
.
contractFile
(
storeId
);
}
@GetMapping
(
"/store/rContractFileDetail"
)
@SaCheckPermission
(
value
=
"store:contractFileDetail"
,
orRole
=
"admin"
)
public
List
<
Map
<
String
,
Number
>>
contractFileDetail
(
@RequestParam
List
<
Long
>
storeIdList
)
{
return
storeService
.
contractFileDetail
(
storeId
List
);
public
Map
<
String
,
Number
>
contractFileDetail
(
@RequestParam
Long
storeId
)
{
return
storeService
.
contractFileDetail
(
storeId
);
}
@GetMapping
(
"/store/logNotify"
)
...
...
src/main/java/vion/controller/monitor/MAccountController.java
View file @
3cb90a9
...
...
@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.*
;
import
vion.model.monitor.RAccountEvent
;
import
vion.model.monitor.RUserAccount
;
import
vion.service.monitor.IMAccountService
;
import
java.util.List
;
...
...
@@ -20,15 +21,33 @@ public class MAccountController {
private
final
IMAccountService
accountService
;
@GetMapping
(
"/event/{uid}"
)
@SaCheckPermission
(
value
=
"account:event:query"
,
orRole
=
"admin"
)
@SaCheckPermission
(
value
=
"
m
account:event:query"
,
orRole
=
"admin"
)
public
List
<
RAccountEvent
>
getEventById
(
@PathVariable
String
uid
)
{
return
accountService
.
getEventById
(
uid
);
}
@PostMapping
(
"/event/{agentUid}/{uid}"
)
@SaCheckPermission
(
value
=
"account:event:editAndSave"
,
orRole
=
"admin"
)
@SaCheckPermission
(
value
=
"
m
account:event:editAndSave"
,
orRole
=
"admin"
)
public
String
saveEvent
(
@PathVariable
String
agentUid
,
@PathVariable
String
uid
,
@RequestBody
RAccountEvent
event
)
{
return
accountService
.
saveEvent
(
agentUid
,
uid
,
event
);
}
@GetMapping
(
"/subList/{userId}"
)
@SaCheckPermission
(
value
=
"maccount:subList"
,
orRole
=
"admin"
)
public
List
<
RUserAccount
>
subList
(
@PathVariable
Long
userId
)
{
return
accountService
.
subList
(
userId
);
}
@PostMapping
(
"/sub"
)
@SaCheckPermission
(
value
=
"maccount:sub"
,
orRole
=
"admin"
)
public
String
sub
(
@RequestBody
RUserAccount
userAccount
)
{
return
accountService
.
sub
(
userAccount
);
}
@PostMapping
(
"/unsub"
)
@SaCheckPermission
(
value
=
"maccount:unsub"
,
orRole
=
"admin"
)
public
String
unsub
(
@RequestBody
RUserAccount
userAccount
)
{
return
accountService
.
unsub
(
userAccount
);
}
}
src/main/java/vion/controller/monitor/MallController.java
View file @
3cb90a9
...
...
@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*;
import
vion.dto.monitor.MallDTO
;
import
vion.model.monitor.MAccount
;
import
vion.model.monitor.RMallRemark
;
import
vion.model.monitor.RMallSilent
;
import
vion.service.monitor.IMallService
;
import
vion.service.monitor.IRMallRemarkService
;
import
vion.vo.monitor.MallVO
;
...
...
@@ -101,7 +102,7 @@ public class MallController {
@PostMapping
(
"/remark/{id}"
)
@SaCheckPermission
(
value
=
"mall:remark:edit"
,
orRole
=
"admin"
)
public
String
edit
Remark
(
@PathVariable
Long
id
,
@RequestBody
RMallRemark
dto
)
{
public
String
update
Remark
(
@PathVariable
Long
id
,
@RequestBody
RMallRemark
dto
)
{
dto
.
setId
(
id
);
return
mallRemarkService
.
updateById
(
dto
)
?
"修改成功"
:
"修改失败"
;
}
...
...
@@ -111,6 +112,32 @@ public class MallController {
public
String
removeRemark
(
@PathVariable
Long
id
)
{
return
mallRemarkService
.
removeById
(
id
)
?
"删除成功"
:
"删除失败"
;
}
// endregion
// region 指标静默期配置
@GetMapping
(
"/silent/{mallUid}"
)
@SaCheckPermission
(
value
=
"mall:silent:list"
,
orRole
=
"admin"
)
public
List
<
RMallSilent
>
listSilent
(
@PathVariable
String
mallUid
)
{
return
mallService
.
listSilent
(
mallUid
);
}
@PostMapping
(
"/silent/{agentUid}/{mallUid}"
)
@SaCheckPermission
(
value
=
"mall:silent:save"
,
orRole
=
"admin"
)
public
String
saveSilent
(
@PathVariable
String
agentUid
,
@PathVariable
String
mallUid
,
@RequestBody
RMallSilent
dto
)
{
return
mallService
.
saveSilent
(
agentUid
,
mallUid
,
dto
);
}
@PostMapping
(
"/silent/{id}"
)
@SaCheckPermission
(
value
=
"mall:silent:edit"
,
orRole
=
"admin"
)
public
String
updateSilent
(
@PathVariable
Long
id
,
@RequestBody
RMallSilent
dto
)
{
dto
.
setId
(
id
);
return
mallService
.
updateSilent
(
dto
);
}
@DeleteMapping
(
"/silent/{id}"
)
@SaCheckPermission
(
value
=
"mall:silent:remove"
,
orRole
=
"admin"
)
public
String
removeSilent
(
@PathVariable
Long
id
)
{
return
mallService
.
removeSilent
(
id
);
}
// endregion
}
src/main/java/vion/dto/monitor/MallDTO.java
View file @
3cb90a9
...
...
@@ -28,6 +28,7 @@ public class MallDTO extends BaseDTO {
* 所属集团uid
*/
private
String
accountUid
;
private
List
<
String
>
accountUidList
;
private
String
accountName
;
/**
...
...
src/main/java/vion/event/mqtt/MqttClientMessageListener.java
View file @
3cb90a9
package
vion
.
event
.
mqtt
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.dromara.hutool.core.collection.CollUtil
;
import
org.dromara.hutool.core.collection.ListUtil
;
import
org.dromara.hutool.core.date.TimeUtil
;
import
org.dromara.hutool.core.text.StrUtil
;
import
org.dromara.hutool.core.thread.ThreadUtil
;
import
org.dromara.hutool.core.util.ObjUtil
;
import
org.dromara.mica.mqtt.codec.MqttQoS
;
import
org.dromara.mica.mqtt.spring.client.MqttClientSubscribe
;
import
org.dromara.mica.mqtt.spring.client.MqttClientTemplate
;
import
org.springframework.stereotype.Service
;
import
vion.constant.MqttMessageType
;
import
vion.model.monitor.EventRecord
;
import
vion.model.monitor.RAgentEvent
;
import
vion.model.monitor.RMallSilent
;
import
vion.model.monitor.SendData
;
import
vion.service.monitor.IEventRecordService
;
import
vion.service.monitor.IRAgentEventService
;
import
vion.service.monitor.IRMallSilentService
;
import
vion.utils.JsonUtil
;
import
vion.utils.TopicUtil
;
import
java.time.LocalDate
;
import
java.util.List
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
* <b>/MS/receive</b> topic 监听事件处理
...
...
@@ -32,42 +39,47 @@ public class MqttClientMessageListener {
private
final
MqttClientTemplate
client
;
private
final
IEventRecordService
recordService
;
private
final
IRAgentEventService
agentEventService
;
private
final
IRMallSilentService
mallSilentService
;
@MqttClientSubscribe
(
value
=
"${mqtt.client.server-topic:/MS/receive}"
,
qos
=
MqttQoS
.
QOS2
)
public
void
onMessage
(
String
topic
,
byte
[]
payload
)
{
try
{
JsonNode
jsonObj
=
JsonUtil
.
parseTree
(
payload
);
String
agentUid
=
jsonObj
.
path
(
"agentUid"
).
asText
();
String
type
=
jsonObj
.
path
(
"eventType"
).
asText
();
SendData
sendData
=
JsonUtil
.
parseObject
(
payload
,
SendData
.
class
);
String
agentUid
=
sendData
.
getAgentUid
();
String
type
=
sendData
.
getEventType
();
log
.
info
(
"收到[{}]消息,类型:[{}]"
,
agentUid
,
type
);
if
(
CollUtil
.
isEmpty
(
sendData
.
getRecList
()))
{
log
.
info
(
"[{}]上报的指标记录为空"
,
agentUid
);
return
;
}
switch
(
MqttMessageType
.
getEnumByType
(
type
))
{
case
REGISTER
->
updateTaskByAgent
(
agentUid
);
// region mall + store 共有指标
case
PASSENGER_FLOW_INTERRUPT
->
handlePassengerFlowInterrupt
(
jsonObj
.
toString
()
);
case
DEVICE_OFFLINE
->
handleDeviceOffline
(
jsonObj
.
toString
()
);
case
REID_ANALYZE
->
handleReid
(
jsonObj
.
toString
()
);
case
DEVICE_REGISTRATION
->
handleDeviceRegistration
(
jsonObj
.
toString
()
);
case
HEADCOUNT_RATIO
->
handleHeadcountRatio
(
jsonObj
.
toString
()
);
case
STAFF_RECOGNIZE
->
handleStaffRecognize
(
jsonObj
.
toString
()
);
case
PASSENGER_FLOW_INTERRUPT
->
handlePassengerFlowInterrupt
(
sendData
);
case
DEVICE_OFFLINE
->
handleDeviceOffline
(
sendData
);
case
REID_ANALYZE
->
handleReid
(
sendData
);
case
DEVICE_REGISTRATION
->
handleDeviceRegistration
(
sendData
);
case
HEADCOUNT_RATIO
->
handleHeadcountRatio
(
sendData
);
case
STAFF_RECOGNIZE
->
handleStaffRecognize
(
sendData
);
// endregion
// region store 指标
case
STORE_CUSTOMER_UNDULATE
->
handleStoreCustomerUndulate
(
jsonObj
.
toString
()
);
case
STORE_GATE_DATA_UNDULATE
->
handleStoreGateDateUndulate
(
jsonObj
.
toString
()
);
case
STORE_INOUT_MATCH_RATIO
->
handleStoreInoutMatchRatio
(
jsonObj
.
toString
()
);
case
STORE_SINGLE_CLUSTER
->
handleStoreSingleCluster
(
jsonObj
.
toString
()
);
case
STORE_ENTER_RATIO
->
handleStoreEnterRatio
(
jsonObj
.
toString
()
);
case
STORE_CUSTOMER_UNDULATE
->
handleStoreCustomerUndulate
(
sendData
);
case
STORE_GATE_DATA_UNDULATE
->
handleStoreGateDateUndulate
(
sendData
);
case
STORE_INOUT_MATCH_RATIO
->
handleStoreInoutMatchRatio
(
sendData
);
case
STORE_SINGLE_CLUSTER
->
handleStoreSingleCluster
(
sendData
);
case
STORE_ENTER_RATIO
->
handleStoreEnterRatio
(
sendData
);
// endregion
// region mall 指标
case
MALL_INOUT_DIFF
->
handleMallInoutDiff
(
jsonObj
.
toString
()
);
case
MALL_SHOP_INOUT_DIFF
->
handleMallShopInoutDiff
(
jsonObj
.
toString
()
);
case
MALL_DATA_UNDULATE
->
handleMallDataUndulate
(
jsonObj
.
toString
()
);
case
MALL_GATE_DATA_UNDULATE
->
handleMallGateDataUndulate
(
jsonObj
.
toString
()
);
case
MALL_SHOP_DATA_UNDULATE
->
handleMallShopDataUndulate
(
jsonObj
.
toString
()
);
case
MALL_DILATATION_UNDULATE
->
handleMallDilatationUndulate
(
jsonObj
.
toString
()
);
case
MALL_INOUT_DIFF
->
handleMallInoutDiff
(
sendData
);
case
MALL_SHOP_INOUT_DIFF
->
handleMallShopInoutDiff
(
sendData
);
case
MALL_DATA_UNDULATE
->
handleMallDataUndulate
(
sendData
);
case
MALL_GATE_DATA_UNDULATE
->
handleMallGateDataUndulate
(
sendData
);
case
MALL_SHOP_DATA_UNDULATE
->
handleMallShopDataUndulate
(
sendData
);
case
MALL_DILATATION_UNDULATE
->
handleMallDilatationUndulate
(
sendData
);
// endregion
default
->
log
.
info
(
"未定义的消息类型:{}, payload:{}"
,
type
,
jsonObj
);
default
->
log
.
info
(
"未定义的消息类型:{}, payload:{}"
,
type
,
sendData
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"解析数据异常"
,
e
);
...
...
@@ -107,55 +119,61 @@ public class MqttClientMessageListener {
/**
* 设备离线上报
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleDeviceOffline
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleDeviceOffline
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 全天分析异常上报
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleReid
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleReid
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 设备注册次数异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleDeviceRegistration
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleDeviceRegistration
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 人数/人次异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleHeadcountRatio
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleHeadcountRatio
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 店员识别异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStaffRecognize
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStaffRecognize
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 客流数据中断
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handlePassengerFlowInterrupt
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handlePassengerFlowInterrupt
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
// region store 事件
...
...
@@ -163,47 +181,52 @@ public class MqttClientMessageListener {
/**
* 门店人数波动异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStoreCustomerUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStoreCustomerUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 门店监控点数据波动异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStoreGateDateUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStoreGateDateUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 门店进出匹配率异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStoreInoutMatchRatio
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStoreInoutMatchRatio
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 门店单聚类异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStoreSingleCluster
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStoreSingleCluster
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 门店进店率异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleStoreEnterRatio
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleStoreEnterRatio
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
// endregion
...
...
@@ -212,76 +235,131 @@ public class MqttClientMessageListener {
/**
* 广场进出客流差异异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallInoutDiff
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallInoutDiff
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 广场店铺进出差异异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallShopInoutDiff
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallShopInoutDiff
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 广场数据波动异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallDataUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallDataUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 广场外围入口数据波动异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallGateDataUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallGateDataUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 广场店铺数据波动异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallShopDataUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallShopDataUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
/**
* 广场膨胀系数异常
*
* @param
payloadStr
事件记录
* @param
sendData
事件记录
*/
private
void
handleMallDilatationUndulate
(
String
payloadStr
)
{
saveRecInDB
(
payloadStr
);
private
void
handleMallDilatationUndulate
(
SendData
sendData
)
{
var
recordList
=
silent
(
sendData
);
saveRecInDB
(
recordList
);
}
// endregion
/**
* agent 发送过来的记录入库
*
* @param payloadStr 事件记录
* @param recList 事件记录
*/
private
void
saveRecInDB
(
List
<
EventRecord
>
recList
)
{
recordService
.
saveBatch
(
recList
);
}
/**
* 静默期处理
*
* @param sendData Agent 上报的数据
* @return java.util.List<vion.model.monitor.EventRecord>
*/
private
void
saveRecInDB
(
String
payloadStr
)
{
SendData
sendData
=
JsonUtil
.
parseObject
(
payloadStr
,
SendData
.
class
);
private
List
<
EventRecord
>
silent
(
SendData
sendData
)
{
var
recList
=
sendData
.
getRecList
();
if
(
CollUtil
.
isNotEmpty
(
recList
))
{
var
eventRecordList
=
recList
.
stream
().
peek
(
rec
->
{
rec
.
setAgentUid
(
sendData
.
getAgentUid
());
var
agentUid
=
sendData
.
getAgentUid
();
var
eventUid
=
sendData
.
getEventUid
();
var
mallUidList
=
recList
.
stream
().
map
(
EventRecord:
:
getMallUid
).
toList
();
var
silentList
=
mallSilentService
.
lambdaQuery
()
.
eq
(
RMallSilent:
:
getAgentUid
,
agentUid
)
.
in
(
RMallSilent:
:
getMallUid
,
mallUidList
)
.
eq
(
RMallSilent:
:
getEventUid
,
eventUid
)
.
list
();
var
mallUid2SilentMap
=
silentList
.
stream
().
collect
(
Collectors
.
toMap
(
RMallSilent:
:
getMallUid
,
Function
.
identity
()));
return
recList
.
stream
().
peek
(
rec
->
{
rec
.
setAgentUid
(
agentUid
);
rec
.
setAgentType
(
sendData
.
getAgentType
());
rec
.
setEventUid
(
sendData
.
getEventUid
()
);
rec
.
setEventUid
(
eventUid
);
rec
.
setEventType
(
sendData
.
getEventType
());
rec
.
setThreshold
(
sendData
.
getThreshold
());
var
rMallSilent
=
mallUid2SilentMap
.
get
(
rec
.
getMallUid
());
if
(
ObjUtil
.
isNotNull
(
rMallSilent
))
{
if
(
TimeUtil
.
isIn
(
LocalDate
.
now
(),
rMallSilent
.
getStartDate
(),
rMallSilent
.
getEndDate
()))
{
// 静默期,状态设置为忽略
rec
.
setStatus
(((
short
)
2
));
// 设备离线指标静默期处理
if
(
"BqCXCrwKgnvR12dvIaJ_"
.
equals
(
eventUid
)
&&
ObjUtil
.
isNotNull
(
rMallSilent
.
getDataJson
()))
{
var
dataJson
=
JsonUtil
.
toJsonString
(
rMallSilent
.
getDataJson
());
var
finalData
=
offlineDevice
(
dataJson
,
rec
.
getData
().
toString
());
rec
.
setData
(
StrUtil
.
isEmpty
(
finalData
)
?
null
:
finalData
);
}
}
}
}).
toList
();
recordService
.
saveBatch
(
eventRecordList
);
}
/**
* 设备离线指标静默期处理
*
* @param dataJson 设备离线指标静默期配置
* @param data 设备离线指标上报的数据
* @return java.lang.String 静默期处理后的数据
*/
private
String
offlineDevice
(
String
dataJson
,
String
data
)
{
var
arr
=
JsonUtil
.
createArr
();
var
jsonNode
=
JsonUtil
.
parseTree
(
data
);
for
(
var
node
:
jsonNode
)
{
var
serialNo
=
node
.
path
(
"serialNo"
).
asText
();
if
(!
dataJson
.
contains
(
serialNo
))
{
arr
.
add
(
node
);
}
}
return
arr
.
isEmpty
()
?
""
:
arr
.
toString
();
}
}
src/main/java/vion/mapper/monitor/RMallSilentMapper.java
0 → 100644
View file @
3cb90a9
package
vion
.
mapper
.
monitor
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
vion.model.monitor.RMallSilent
;
/**
* @author vion
* @date 2025/1/4
*/
public
interface
RMallSilentMapper
extends
BaseMapper
<
RMallSilent
>
{
}
\ No newline at end of file
src/main/java/vion/mapper/monitor/RUserAccountMapper.java
0 → 100644
View file @
3cb90a9
package
vion
.
mapper
.
monitor
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
vion.model.monitor.RUserAccount
;
/**
* @author vion
* @date 2025/1/3
*/
public
interface
RUserAccountMapper
extends
BaseMapper
<
RUserAccount
>
{
}
\ No newline at end of file
src/main/java/vion/model/monitor/EventRecord.java
View file @
3cb90a9
...
...
@@ -61,7 +61,7 @@ public class EventRecord extends BaseDTO {
private
String
threshold
;
/**
* 事件状态 0:异常 1:正常 -1:未知
* 事件状态 0:异常 1:正常 -1:未知
2:忽略
*/
@TableField
(
value
=
"\"status\""
)
private
Short
status
;
...
...
src/main/java/vion/model/monitor/RMallSilent.java
0 → 100644
View file @
3cb90a9
package
vion
.
model
.
monitor
;
import
com.baomidou.mybatisplus.annotation.*
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
vion.config.mp.JsonbTypeHandler
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
/**
* 指标静默期配置表
*/
@Getter
@Setter
@TableName
(
value
=
"mr_mall_silent"
,
autoResultMap
=
true
)
public
class
RMallSilent
{
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@TableField
(
value
=
"agent_uid"
)
private
String
agentUid
;
@TableField
(
value
=
"account_uid"
)
private
String
accountUid
;
@TableField
(
value
=
"mall_uid"
)
private
String
mallUid
;
/**
* 关联指标uid
*/
@TableField
(
value
=
"event_uid"
)
private
String
eventUid
;
/**
* 关联指标类型
*/
@TableField
(
value
=
"event_type"
)
private
String
eventType
;
/**
* 特殊配置json
*/
@TableField
(
value
=
"data_json"
,
typeHandler
=
JsonbTypeHandler
.
class
)
private
Object
dataJson
;
/**
* 静默开始日期
*/
@TableField
(
value
=
"start_date"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
LocalDate
startDate
;
/**
* 静默结束日期
*/
@TableField
(
value
=
"end_date"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
LocalDate
endDate
;
/**
* 备注
*/
@TableField
(
value
=
"remark"
)
private
String
remark
;
@TableField
(
value
=
"create_by"
,
fill
=
FieldFill
.
INSERT
)
private
String
createBy
;
@TableField
(
value
=
"update_by"
,
fill
=
FieldFill
.
INSERT_UPDATE
)
private
String
updateBy
;
@TableField
(
value
=
"create_time"
,
fill
=
FieldFill
.
INSERT
)
private
LocalDateTime
createTime
;
@TableField
(
value
=
"update_time"
,
fill
=
FieldFill
.
INSERT_UPDATE
)
private
LocalDateTime
updateTime
;
}
\ No newline at end of file
src/main/java/vion/model/monitor/RUserAccount.java
0 → 100644
View file @
3cb90a9
package
vion
.
model
.
monitor
;
import
com.baomidou.mybatisplus.annotation.*
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.time.LocalDateTime
;
/**
* 用户订阅集团表
*/
@Getter
@Setter
@TableName
(
value
=
"mr_user_account"
)
public
class
RUserAccount
{
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 用户id
*/
@TableField
(
value
=
"user_id"
)
private
Long
userId
;
/**
* 集团id
*/
@TableField
(
value
=
"account_id"
)
private
String
accountId
;
@TableField
(
value
=
"create_time"
,
fill
=
FieldFill
.
INSERT
)
private
LocalDateTime
createTime
;
@TableField
(
value
=
"update_time"
,
fill
=
FieldFill
.
INSERT_UPDATE
)
private
LocalDateTime
updateTime
;
}
\ No newline at end of file
src/main/java/vion/service/IStoreService.java
View file @
3cb90a9
...
...
@@ -29,9 +29,9 @@ public interface IStoreService extends MPJBaseService<Store> {
List
<
Map
<
String
,
Number
>>
fileDetail
(
List
<
Long
>
storeIdList
);
List
<
FileInfo
>
contractFile
(
L
ist
<
Long
>
storeIdList
);
List
<
FileInfo
>
contractFile
(
L
ong
storeId
);
List
<
Map
<
String
,
Number
>>
contractFileDetail
(
List
<
Long
>
storeIdList
);
Map
<
String
,
Number
>
contractFileDetail
(
Long
storeId
);
Boolean
logNotify
(
Long
id
,
String
[]
userIdStr
);
...
...
src/main/java/vion/service/impl/StoreServiceImpl.java
View file @
3cb90a9
...
...
@@ -438,8 +438,8 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
}
@Override
public
List
<
FileInfo
>
contractFile
(
L
ist
<
Long
>
storeIdList
)
{
var
contractStoreList
=
contractStoreService
.
lambdaQuery
().
in
(
RContractStore:
:
getStoreId
,
storeIdList
).
list
();
public
List
<
FileInfo
>
contractFile
(
L
ong
storeId
)
{
var
contractStoreList
=
contractStoreService
.
lambdaQuery
().
eq
(
RContractStore:
:
getStoreId
,
storeId
).
list
();
var
contractIdList
=
contractStoreList
.
stream
().
map
(
RContractStore:
:
getContractId
).
toList
();
return
fileService
.
lambdaQuery
()
.
in
(
FileInfo:
:
getSourceId
,
CollUtil
.
defaultIfEmpty
(
contractIdList
,
List
.
of
(-
1L
)))
...
...
@@ -449,31 +449,27 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
}
@Override
public
List
<
Map
<
String
,
Number
>>
contractFileDetail
(
List
<
Long
>
storeIdList
)
{
var
contractStoreList
=
contractStoreService
.
lambdaQuery
().
in
(
RContractStore:
:
getStoreId
,
storeIdList
).
list
();
public
Map
<
String
,
Number
>
contractFileDetail
(
Long
storeId
)
{
var
contractStoreList
=
contractStoreService
.
lambdaQuery
().
eq
(
RContractStore:
:
getStoreId
,
storeId
).
list
();
var
contractIdList
=
contractStoreList
.
stream
().
map
(
RContractStore:
:
getContractId
).
toList
();
var
fileList
=
fileService
.
lambdaQuery
()
.
in
(
FileInfo:
:
getSourceId
,
CollUtil
.
defaultIfEmpty
(
contractIdList
,
List
.
of
(-
1L
)))
.
in
(
FileInfo:
:
getStoreId
,
-
1L
)
.
in
(
FileInfo:
:
getSourceType
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
33
,
34
)
.
list
();
var
storeId2FileMap
=
fileList
.
stream
().
collect
(
Collectors
.
groupingBy
(
FileInfo:
:
getStoreId
,
Collectors
.
groupingBy
(
FileInfo:
:
getSourceType
)));
return
storeIdList
.
stream
().
map
(
storeId
->
{
var
fileMap
=
storeId2FileMap
.
getOrDefault
(
storeId
,
Map
.
of
());
var
type2CntMap
=
fileList
.
stream
().
collect
(
Collectors
.
groupingBy
(
FileInfo:
:
getSourceType
,
Collectors
.
counting
()));
Map
<
String
,
Number
>
map
=
new
HashMap
<>();
map
.
put
(
"storeId"
,
storeId
);
map
.
put
(
"7"
,
fileMap
.
getOrDefault
(
7
,
List
.
of
()).
size
());
map
.
put
(
"8"
,
fileMap
.
getOrDefault
(
8
,
List
.
of
()).
size
());
map
.
put
(
"9"
,
fileMap
.
getOrDefault
(
9
,
List
.
of
()).
size
());
map
.
put
(
"10"
,
fileMap
.
getOrDefault
(
10
,
List
.
of
()).
size
());
map
.
put
(
"11"
,
fileMap
.
getOrDefault
(
11
,
List
.
of
()).
size
());
map
.
put
(
"12"
,
fileMap
.
getOrDefault
(
12
,
List
.
of
()).
size
());
map
.
put
(
"13"
,
fileMap
.
getOrDefault
(
13
,
List
.
of
()).
size
());
map
.
put
(
"14"
,
fileMap
.
getOrDefault
(
14
,
List
.
of
()).
size
());
map
.
put
(
"33"
,
fileMap
.
getOrDefault
(
33
,
List
.
of
()).
size
());
map
.
put
(
"34"
,
fileMap
.
getOrDefault
(
34
,
List
.
of
()).
size
());
map
.
put
(
"7"
,
type2CntMap
.
getOrDefault
(
7
,
0L
));
map
.
put
(
"8"
,
type2CntMap
.
getOrDefault
(
8
,
0L
));
map
.
put
(
"9"
,
type2CntMap
.
getOrDefault
(
9
,
0L
));
map
.
put
(
"10"
,
type2CntMap
.
getOrDefault
(
10
,
0L
));
map
.
put
(
"11"
,
type2CntMap
.
getOrDefault
(
11
,
0L
));
map
.
put
(
"12"
,
type2CntMap
.
getOrDefault
(
12
,
0L
));
map
.
put
(
"13"
,
type2CntMap
.
getOrDefault
(
13
,
0L
));
map
.
put
(
"14"
,
type2CntMap
.
getOrDefault
(
14
,
0L
));
map
.
put
(
"33"
,
type2CntMap
.
getOrDefault
(
33
,
0L
));
map
.
put
(
"34"
,
type2CntMap
.
getOrDefault
(
34
,
0L
));
return
map
;
}).
toList
();
}
@Override
...
...
src/main/java/vion/service/impl/monitor/MAccountServiceImpl.java
View file @
3cb90a9
...
...
@@ -6,8 +6,10 @@ import org.springframework.stereotype.Service;
import
vion.mapper.monitor.MAccountMapper
;
import
vion.model.monitor.MAccount
;
import
vion.model.monitor.RAccountEvent
;
import
vion.model.monitor.RUserAccount
;
import
vion.service.monitor.IMAccountService
;
import
vion.service.monitor.IRAccountEventService
;
import
vion.service.monitor.IRUserAccountService
;
import
java.util.List
;
...
...
@@ -20,6 +22,7 @@ import java.util.List;
public
class
MAccountServiceImpl
extends
MPJBaseServiceImpl
<
MAccountMapper
,
MAccount
>
implements
IMAccountService
{
private
final
IRAccountEventService
accountEventService
;
private
final
IRUserAccountService
userAccountService
;
@Override
public
List
<
RAccountEvent
>
getEventById
(
String
uid
)
{
...
...
@@ -30,7 +33,23 @@ public class MAccountServiceImpl extends MPJBaseServiceImpl<MAccountMapper, MAcc
public
String
saveEvent
(
String
agentUid
,
String
uid
,
RAccountEvent
event
)
{
event
.
setAgentUid
(
agentUid
);
event
.
setAccountUid
(
uid
);
accountEventService
.
save
(
event
);
return
""
;
return
accountEventService
.
save
(
event
)
?
"成功"
:
"失败"
;
}
@Override
public
List
<
RUserAccount
>
subList
(
Long
userId
)
{
return
userAccountService
.
lambdaQuery
().
eq
(
RUserAccount:
:
getUserId
,
userId
).
list
();
}
@Override
public
String
sub
(
RUserAccount
userAccount
)
{
return
userAccountService
.
save
(
userAccount
)
?
"订阅成功"
:
"订阅失败"
;
}
@Override
public
String
unsub
(
RUserAccount
userAccount
)
{
return
userAccountService
.
lambdaUpdate
()
.
eq
(
RUserAccount:
:
getAccountId
,
userAccount
.
getAccountId
())
.
eq
(
RUserAccount:
:
getUserId
,
userAccount
.
getUserId
()).
remove
()
?
"取消订阅成功"
:
"取消订阅失败"
;
}
}
src/main/java/vion/service/impl/monitor/MallServiceImpl.java
View file @
3cb90a9
...
...
@@ -45,6 +45,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
private
final
IEventRecordService
eventRecordService
;
private
final
IRAgentEventService
agentEventService
;
private
final
IRMallRemarkService
mallRemarkService
;
private
final
IRMallSilentService
mallSilentService
;
private
final
AgentMapper
agentMapper
;
private
final
MqttClientTemplate
client
;
private
final
Converter
converter
;
...
...
@@ -99,6 +100,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.
leftJoin
(
MAccount
.
class
,
MAccount:
:
getUid
,
Mall:
:
getAccountUid
)
.
leftJoin
(
Agent
.
class
,
Agent:
:
getUid
,
Mall:
:
getAgentUid
)
.
eq
(
Mall:
:
getAttention
,
1
)
.
in
(
CollUtil
.
isNotEmpty
(
dto
.
getAccountUidList
()),
Mall:
:
getAccountUid
,
dto
.
getAccountUidList
())
.
orderByDesc
(
Mall:
:
getAccountUid
,
Mall:
:
getName
);
var
mallVOPage
=
this
.
selectJoinListPage
(
Page
.
of
(
dto
.
getPageNum
(),
dto
.
getPageSize
()),
MallVO
.
class
,
wrapper
);
if
(
CollUtil
.
isNotEmpty
(
mallVOPage
.
getRecords
()))
{
...
...
@@ -137,6 +139,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.
leftJoin
(
Agent
.
class
,
Agent:
:
getUid
,
RAgentEvent:
:
getAgentUid
)
.
in
(
RAgentEvent:
:
getEventUid
,
dto
.
getEventUidList
())
.
eq
(
Agent:
:
getType
,
dto
.
getAgentType
())
.
in
(
CollUtil
.
isNotEmpty
(
dto
.
getAccountUidList
()),
RAgentEvent:
:
getAccountUid
,
dto
.
getAccountUidList
())
.
orderByDesc
(
RAgentEvent:
:
getAccountUid
,
RAgentEvent:
:
getMallUid
);
var
agentEventList
=
agentEventService
.
selectJoinList
(
RAgentEvent
.
class
,
agentEventWrapper
);
if
(
CollUtil
.
isEmpty
(
agentEventList
))
{
...
...
@@ -194,6 +197,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.
ge
(
EventRecord:
:
getCreateTime
,
LocalDateTime
.
of
(
LocalDate
.
now
(),
LocalTime
.
MIN
))
.
eq
(
EventRecord:
:
getAgentType
,
dto
.
getAgentType
())
.
in
(
CollUtil
.
isNotEmpty
(
dto
.
getEventUidList
()),
EventRecord:
:
getEventUid
,
dto
.
getEventUidList
())
.
in
(
CollUtil
.
isNotEmpty
(
dto
.
getAccountUidList
()),
EventRecord:
:
getAccountUid
,
dto
.
getAccountUidList
())
.
orderByAsc
(
EventRecord:
:
getMallUid
))
.
eq
(
EventRecord:
:
getStatus
,
0
);
var
eventRecordList
=
eventRecordService
.
selectJoinList
(
EventRecord
.
class
,
eventRecWrapper
);
...
...
@@ -276,4 +280,26 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
agentEventService
.
lambdaUpdate
().
eq
(
RAgentEvent:
:
getMallUid
,
attentionMall
.
getUid
()).
remove
();
return
"取消成功"
;
}
@Override
public
List
<
RMallSilent
>
listSilent
(
String
mallUid
)
{
return
mallSilentService
.
lambdaQuery
().
eq
(
RMallSilent:
:
getMallUid
,
mallUid
).
list
();
}
@Override
public
String
saveSilent
(
String
agentUid
,
String
mallUid
,
RMallSilent
dto
)
{
dto
.
setAgentUid
(
agentUid
);
dto
.
setMallUid
(
mallUid
);
return
mallSilentService
.
save
(
dto
)
?
"新增成功"
:
"新增失败"
;
}
@Override
public
String
updateSilent
(
RMallSilent
dto
)
{
return
mallSilentService
.
updateById
(
dto
)
?
"修改成功"
:
"修改失败"
;
}
@Override
public
String
removeSilent
(
Long
id
)
{
return
mallSilentService
.
removeById
(
id
)
?
"删除成功"
:
"删除失败"
;
}
}
src/main/java/vion/service/impl/monitor/RMallSilentServiceImpl.java
0 → 100644
View file @
3cb90a9
package
vion
.
service
.
impl
.
monitor
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
vion.mapper.monitor.RMallSilentMapper
;
import
vion.model.monitor.RMallSilent
;
import
vion.service.monitor.IRMallSilentService
;
/**
* @author vion
* @date 2025/1/4
*/
@Service
public
class
RMallSilentServiceImpl
extends
ServiceImpl
<
RMallSilentMapper
,
RMallSilent
>
implements
IRMallSilentService
{
}
src/main/java/vion/service/impl/monitor/RUserAccountServiceImpl.java
0 → 100644
View file @
3cb90a9
package
vion
.
service
.
impl
.
monitor
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
vion.mapper.monitor.RUserAccountMapper
;
import
vion.model.monitor.RUserAccount
;
import
vion.service.monitor.IRUserAccountService
;
/**
* @author vion
* @date 2025/1/3
*/
@Service
public
class
RUserAccountServiceImpl
extends
ServiceImpl
<
RUserAccountMapper
,
RUserAccount
>
implements
IRUserAccountService
{
}
src/main/java/vion/service/monitor/IMAccountService.java
View file @
3cb90a9
...
...
@@ -3,6 +3,7 @@ package vion.service.monitor;
import
com.github.yulichang.base.MPJBaseService
;
import
vion.model.monitor.MAccount
;
import
vion.model.monitor.RAccountEvent
;
import
vion.model.monitor.RUserAccount
;
import
java.util.List
;
...
...
@@ -16,4 +17,10 @@ public interface IMAccountService extends MPJBaseService<MAccount> {
String
saveEvent
(
String
agentUid
,
String
uid
,
RAccountEvent
event
);
List
<
RUserAccount
>
subList
(
Long
userId
);
String
sub
(
RUserAccount
userAccount
);
String
unsub
(
RUserAccount
userAccount
);
}
src/main/java/vion/service/monitor/IMallService.java
View file @
3cb90a9
...
...
@@ -5,6 +5,7 @@ import com.github.yulichang.base.MPJBaseService;
import
vion.dto.monitor.MallDTO
;
import
vion.model.monitor.MAccount
;
import
vion.model.monitor.Mall
;
import
vion.model.monitor.RMallSilent
;
import
vion.vo.monitor.MallVO
;
import
java.util.List
;
...
...
@@ -33,4 +34,11 @@ public interface IMallService extends MPJBaseService<Mall> {
String
cancelAttention
(
Long
id
);
List
<
RMallSilent
>
listSilent
(
String
mallUid
);
String
saveSilent
(
String
agentUid
,
String
mallUid
,
RMallSilent
dto
);
String
updateSilent
(
RMallSilent
dto
);
String
removeSilent
(
Long
id
);
}
src/main/java/vion/service/monitor/IRMallSilentService.java
0 → 100644
View file @
3cb90a9
package
vion
.
service
.
monitor
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
vion.model.monitor.RMallSilent
;
/**
* @author vion
* @date 2025/1/4
*/
public
interface
IRMallSilentService
extends
IService
<
RMallSilent
>{
}
src/main/java/vion/service/monitor/IRUserAccountService.java
0 → 100644
View file @
3cb90a9
package
vion
.
service
.
monitor
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
vion.model.monitor.RUserAccount
;
/**
* @author vion
* @date 2025/1/3
*/
public
interface
IRUserAccountService
extends
IService
<
RUserAccount
>{
}
Write
Preview
Markdown
is supported
Attach a file
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 post a comment