Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
basic-api-boot
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Basic
basic-api-boot
Commits
3bbfc8e1
提交
3bbfc8e1
authored
5月 07, 2022
作者:
涂茂林
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:历史轨迹
上级
1fbfdcde
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
641 行增加
和
12 行删除
+641
-12
RedisKey.java
app/src/main/java/com/yiring/app/constant/RedisKey.java
+5
-0
HistoryRouteExcel.java
.../yiring/app/excel/analysis/history/HistoryRouteExcel.java
+60
-0
LocationAlarmRuleExcel.java
...com/yiring/app/excel/location/LocationAlarmRuleExcel.java
+64
-0
HistoryRouteConditionParam.java
...pp/param/analysis/history/HistoryRouteConditionParam.java
+48
-0
LocationAlarmRuleAddParam.java
...ng/app/param/location/rule/LocationAlarmRuleAddParam.java
+1
-1
HistoryRouteService.java
...ing/app/service/analysis/history/HistoryRouteService.java
+29
-0
HistoryRouteServiceImpl.java
...ervice/analysis/history/impl/HistoryRouteServiceImpl.java
+137
-0
LocationAlarmRuleService.java
...g/app/service/location/rule/LocationAlarmRuleService.java
+23
-0
LocationAlarmRuleServiceImpl.java
...vice/location/rule/impl/LocationAlarmRuleServiceImpl.java
+99
-11
IdNameVo.java
app/src/main/java/com/yiring/app/vo/IdNameVo.java
+33
-0
HistoryRouteVo.java
...va/com/yiring/app/vo/analysis/history/HistoryRouteVo.java
+55
-0
HistoryRouteController.java
...ring/app/web/analysis/history/HistoryRouteController.java
+45
-0
LocationAlarmRuleController.java
...ng/app/web/location/rule/LocationAlarmRuleController.java
+42
-0
没有找到文件。
app/src/main/java/com/yiring/app/constant/RedisKey.java
浏览文件 @
3bbfc8e1
...
...
@@ -12,4 +12,9 @@ public interface RedisKey {
* STOMP 在线用户关键数据
*/
String
STOMP_ONLINE_USERS
=
"STOMP_ONLINE_USERS"
;
/**
* 地图信息
*/
String
ZY_MAP_AREAS
=
"ZY_MAP_AREAS"
;
}
app/src/main/java/com/yiring/app/excel/analysis/history/HistoryRouteExcel.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
excel
.
analysis
.
history
;
import
com.github.liaochong.myexcel.core.annotation.ExcelColumn
;
import
com.github.liaochong.myexcel.core.annotation.ExcelModel
;
import
com.yiring.app.vo.analysis.history.HistoryRouteVo
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
lombok.Builder
;
import
lombok.Data
;
import
org.locationtech.jts.geom.Point
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 15:23
*/
@ExcelModel
@Data
@Builder
public
class
HistoryRouteExcel
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
3021760052313853701L
;
@ExcelColumn
(
title
=
"姓名"
)
private
String
name
;
@ExcelColumn
(
title
=
"工号"
)
private
String
uuid
;
@ExcelColumn
(
title
=
"经度"
)
private
Double
x
;
@ExcelColumn
(
title
=
"纬度"
)
private
Double
y
;
@ExcelColumn
(
title
=
"地图名称"
)
private
String
mapName
;
@ExcelColumn
(
title
=
"记录时间"
,
width
=
20
)
private
LocalDateTime
writeTime
;
public
static
HistoryRouteExcel
transform
(
HistoryRouteVo
historyRouteVo
)
{
HistoryRouteExcel
routeExcel
=
HistoryRouteExcel
.
builder
()
.
name
(
historyRouteVo
.
getName
())
.
uuid
(
historyRouteVo
.
getUuid
())
.
mapName
(
historyRouteVo
.
getMapName
())
.
writeTime
(
historyRouteVo
.
getWriteTime
())
.
build
();
Point
point
=
historyRouteVo
.
getPoint
();
if
(
point
!=
null
)
{
routeExcel
.
setX
(
point
.
getX
());
routeExcel
.
setY
(
point
.
getY
());
}
return
routeExcel
;
}
}
app/src/main/java/com/yiring/app/excel/location/LocationAlarmRuleExcel.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
excel
.
location
;
import
com.github.liaochong.myexcel.core.annotation.ExcelColumn
;
import
com.github.liaochong.myexcel.core.annotation.ExcelModel
;
import
com.yiring.app.vo.location.rule.LocationAlarmRuleVo
;
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/5/6 11:11
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
LocationAlarmRuleExcel
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
898420880457790036L
;
@ExcelColumn
(
title
=
"地图名称"
)
private
String
mapName
;
@ExcelColumn
(
title
=
"电子围栏名称"
)
private
String
fenceName
;
@ExcelColumn
(
title
=
"接收人"
,
width
=
20
)
private
String
users
;
@ExcelColumn
(
title
=
"通知方式"
,
width
=
18
)
private
String
informManner
;
public
static
LocationAlarmRuleExcel
transform
(
LocationAlarmRuleVo
locationAlarmRuleVo
)
{
StringBuilder
users
=
new
StringBuilder
();
StringBuilder
informManner
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
locationAlarmRuleVo
.
getUsers
().
size
();
i
++)
{
if
(
i
!=
0
)
{
users
.
append
(
", "
);
}
users
.
append
(
locationAlarmRuleVo
.
getUsers
().
get
(
i
).
getRealName
());
}
for
(
int
i
=
0
;
i
<
locationAlarmRuleVo
.
getInformManner
().
size
();
i
++)
{
if
(
i
!=
0
)
{
informManner
.
append
(
", "
);
}
informManner
.
append
(
locationAlarmRuleVo
.
getInformManner
().
get
(
i
).
getName
());
}
return
LocationAlarmRuleExcel
.
builder
()
.
mapName
(
locationAlarmRuleVo
.
getMapName
())
.
fenceName
(
locationAlarmRuleVo
.
getFenceName
())
.
users
(
users
.
toString
())
.
informManner
(
informManner
.
toString
())
.
build
();
}
}
app/src/main/java/com/yiring/app/param/analysis/history/HistoryRouteConditionParam.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
param
.
analysis
.
history
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
javax.validation.constraints.NotNull
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 10:53
*/
@ApiModel
(
"HistoryRoute(历史轨迹的条件param)"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
HistoryRouteConditionParam
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
2386493816691457426L
;
@ApiModelProperty
(
value
=
"地图id"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"请选择地图"
)
private
Long
mapId
;
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"1"
,
required
=
true
)
@NotNull
(
message
=
"请选择员工"
)
private
Long
userId
;
@ApiModelProperty
(
value
=
"开始时间"
,
example
=
"2022-05-06 14:00:00"
,
required
=
true
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@NotNull
(
message
=
"请选择开始时间"
)
private
LocalDateTime
beginTime
;
@ApiModelProperty
(
value
=
"结束时间"
,
example
=
"2022-05-06 14:05:00"
,
required
=
true
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@NotNull
(
message
=
"请选择结束时间"
)
private
LocalDateTime
endTime
;
}
app/src/main/java/com/yiring/app/param/location/rule/LocationAlarmRuleAddParam.java
浏览文件 @
3bbfc8e1
...
...
@@ -53,7 +53,7 @@ public class LocationAlarmRuleAddParam implements Serializable {
@NotNull
(
message
=
"报警类型id不能为空"
)
private
Long
alarmId
;
@ApiModelProperty
(
value
=
"接收人集合"
,
required
=
true
)
@ApiModelProperty
(
value
=
"接收人集合
(id)
"
,
required
=
true
)
@NotNull
(
message
=
"接收人id不能为空"
)
private
Set
<
Long
>
users
;
...
...
app/src/main/java/com/yiring/app/service/analysis/history/HistoryRouteService.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
service
.
analysis
.
history
;
import
com.yiring.app.param.analysis.history.HistoryRouteConditionParam
;
import
com.yiring.app.vo.analysis.history.HistoryRouteVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.vo.PageVo
;
import
javax.servlet.http.HttpServletResponse
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:39
*/
public
interface
HistoryRouteService
{
/**
* 根据条件查询历史轨迹信息
* @param param 地图、员工和时间条件
* @return 历史轨迹信息
*/
Result
<
PageVo
<
HistoryRouteVo
>>
findByCondition
(
HistoryRouteConditionParam
param
);
/**
* 导出历史轨迹信息
* @param param 地图、员工和时间条件
* @param response 历史轨迹信息
*/
void
exportHistoryRoute
(
HistoryRouteConditionParam
param
,
HttpServletResponse
response
);
}
app/src/main/java/com/yiring/app/service/analysis/history/impl/HistoryRouteServiceImpl.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
service
.
analysis
.
history
.
impl
;
import
com.alibaba.fastjson.JSONArray
;
import
com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder
;
import
com.yiring.app.constant.RedisKey
;
import
com.yiring.app.domain.location.LocationLog
;
import
com.yiring.app.domain.location.LocationLogRepository
;
import
com.yiring.app.excel.analysis.history.HistoryRouteExcel
;
import
com.yiring.app.param.analysis.history.HistoryRouteConditionParam
;
import
com.yiring.app.service.analysis.history.HistoryRouteService
;
import
com.yiring.app.vo.analysis.history.HistoryRouteVo
;
import
com.yiring.app.vo.map.MapVo
;
import
com.yiring.common.core.Redis
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
com.yiring.common.vo.PageVo
;
import
java.io.OutputStream
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.Executors
;
import
java.util.stream.Collectors
;
import
javax.annotation.Resource
;
import
javax.persistence.criteria.Predicate
;
import
javax.servlet.http.HttpServletResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:41
*/
@Slf4j
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
class
HistoryRouteServiceImpl
implements
HistoryRouteService
{
@Resource
private
LocationLogRepository
locationLogRepository
;
@Resource
private
Redis
redis
;
@Override
public
Result
<
PageVo
<
HistoryRouteVo
>>
findByCondition
(
HistoryRouteConditionParam
param
)
{
Specification
<
LocationLog
>
specification
=
getSpecification
(
param
);
ArrayList
<
MapVo
.
MapVoReuslt
>
list1
=
new
ArrayList
<>();
Object
map
=
redis
.
get
(
RedisKey
.
ZY_MAP_AREAS
);
String
mapString
=
JSONArray
.
toJSONString
(
map
);
List
<
MapVo
.
MapVoReuslt
>
mapVo
=
JSONArray
.
parseArray
(
mapString
,
MapVo
.
MapVoReuslt
.
class
);
List
<
LocationLog
>
list
=
locationLogRepository
.
findAll
(
specification
);
List
<
HistoryRouteVo
>
voList
=
list
.
stream
()
.
map
(
e
->
{
HistoryRouteVo
routeVo
=
HistoryRouteVo
.
transform
(
e
);
for
(
MapVo
.
MapVoReuslt
item
:
mapVo
)
{
if
(
item
.
getId
().
equals
(
e
.
getAreaId
().
intValue
()))
{
routeVo
.
setMapName
(
item
.
getName
());
break
;
}
}
return
routeVo
;
})
.
collect
(
Collectors
.
toList
());
PageVo
<
HistoryRouteVo
>
pageVo
=
PageVo
.
build
(
voList
,
voList
.
size
());
return
Result
.
ok
(
pageVo
);
}
@Override
public
void
exportHistoryRoute
(
HistoryRouteConditionParam
param
,
HttpServletResponse
response
)
{
Result
<
PageVo
<
HistoryRouteVo
>>
result
=
findByCondition
(
param
);
if
(
Status
.
OK
.
value
()
!=
result
.
getStatus
())
{
return
;
}
List
<
HistoryRouteExcel
>
excelList
=
result
.
getBody
()
.
getData
()
.
stream
()
.
map
(
HistoryRouteExcel:
:
transform
)
.
collect
(
Collectors
.
toList
());
try
(
DefaultStreamExcelBuilder
<
HistoryRouteExcel
>
streamExcelBuilder
=
DefaultStreamExcelBuilder
.
of
(
HistoryRouteExcel
.
class
)
.
threadPool
(
Executors
.
newFixedThreadPool
(
2
))
.
rowHeight
(
14
)
.
titleRowHeight
(
14
)
.
style
(
"cell->vertical-align:center;text-align:center"
,
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.
start
()
)
{
streamExcelBuilder
.
append
(
excelList
);
String
fileName
=
URLEncoder
.
encode
(
"历史轨迹表.xlsx"
,
StandardCharsets
.
UTF_8
);
response
.
setContentType
(
"application/octet-stream"
);
response
.
setHeader
(
"Access-Control-Expose-Headers"
,
"Content-Disposition"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
fileName
);
OutputStream
out
=
response
.
getOutputStream
();
Workbook
workbook
=
streamExcelBuilder
.
fixedTitles
().
build
();
workbook
.
write
(
out
);
workbook
.
close
();
out
.
flush
();
out
.
close
();
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
throw
new
RuntimeException
(
"报警类型列表导出失败: "
+
e
.
getMessage
());
}
}
private
Specification
<
LocationLog
>
getSpecification
(
HistoryRouteConditionParam
param
)
{
return
(
root
,
query
,
criteriaBuilder
)
->
{
ArrayList
<
Predicate
>
list
=
new
ArrayList
<>();
if
(
param
.
getMapId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"areaId"
),
param
.
getMapId
()));
}
if
(
param
.
getUserId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"user"
),
param
.
getUserId
()));
}
if
(
param
.
getBeginTime
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
greaterThanOrEqualTo
(
root
.
get
(
"locationTime"
),
param
.
getBeginTime
()));
}
if
(
param
.
getEndTime
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
lessThanOrEqualTo
(
root
.
get
(
"locationTime"
),
param
.
getEndTime
()));
}
Predicate
[]
array
=
list
.
toArray
(
new
Predicate
[
0
]);
return
criteriaBuilder
.
and
(
array
);
};
}
}
app/src/main/java/com/yiring/app/service/location/rule/LocationAlarmRuleService.java
浏览文件 @
3bbfc8e1
...
...
@@ -4,11 +4,13 @@ package com.yiring.app.service.location.rule;
import
com.yiring.app.param.location.rule.LocationAlarmRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleParam
;
import
com.yiring.app.vo.IdNameVo
;
import
com.yiring.app.vo.location.rule.LocationAlarmRuleVo
;
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.servlet.http.HttpServletResponse
;
/**
* @author tml
...
...
@@ -51,4 +53,25 @@ public interface LocationAlarmRuleService {
* @return 规则信息
*/
Result
<
PageVo
<
LocationAlarmRuleVo
>>
findByCondition
(
LocationAlarmRuleParam
param
,
PageParam
pageParam
);
/**
* 导出电子围栏规则
* @param param 条件
* @param response response
* @param pageParam 分页参数
*/
void
exportAlarmRule
(
LocationAlarmRuleParam
param
,
HttpServletResponse
response
,
PageParam
pageParam
);
/**
* 根据电子围栏名称模糊查询围栏id和名称
* @param name 名称
* @return 围栏id和名称
*/
Result
<
PageVo
<
IdNameVo
>>
findFenceList
(
String
name
);
/**
* 查询报警类型下拉框
* @return 报警类型列表
*/
Result
<
PageVo
<
IdNameVo
>>
findAlarmTypeList
();
}
app/src/main/java/com/yiring/app/service/location/rule/impl/LocationAlarmRuleServiceImpl.java
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
service
.
location
.
rule
.
impl
;
import
com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder
;
import
com.yiring.app.domain.alarm.AlarmType
;
import
com.yiring.app.domain.alarm.AlarmTypeRepository
;
import
com.yiring.app.domain.location.LocationAlarmRule
;
import
com.yiring.app.domain.location.LocationAlarmRuleRepository
;
import
com.yiring.app.domain.location.LocationFence
;
import
com.yiring.app.domain.location.LocationFenceRepository
;
import
com.yiring.app.excel.location.LocationAlarmRuleExcel
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleParam
;
import
com.yiring.app.service.location.rule.LocationAlarmRuleService
;
import
com.yiring.app.util.JpaUtil
;
import
com.yiring.app.vo.IdNameVo
;
import
com.yiring.app.vo.location.rule.LocationAlarmRuleVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.core.Status
;
import
com.yiring.common.param.IdParam
;
import
com.yiring.common.param.PageParam
;
import
com.yiring.common.vo.PageVo
;
import
java.io.OutputStream
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.concurrent.Executors
;
import
java.util.stream.Collectors
;
import
javax.annotation.Resource
;
import
javax.persistence.criteria.Predicate
;
import
javax.servlet.http.HttpServletResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.domain.Specification
;
...
...
@@ -42,6 +55,12 @@ public class LocationAlarmRuleServiceImpl implements LocationAlarmRuleService {
@Resource
private
LocationAlarmRuleRepository
locationAlarmRuleRepository
;
@Resource
private
LocationFenceRepository
locationFenceRepository
;
@Resource
private
AlarmTypeRepository
alarmTypeRepository
;
@Override
public
Result
<
String
>
addRule
(
LocationAlarmRuleAddParam
param
)
{
LocationAlarmRule
locationAlarmRule
=
param
.
transform
();
...
...
@@ -83,17 +102,7 @@ public class LocationAlarmRuleServiceImpl implements LocationAlarmRuleService {
@Override
public
Result
<
PageVo
<
LocationAlarmRuleVo
>>
findByCondition
(
LocationAlarmRuleParam
param
,
PageParam
pageParam
)
{
Pageable
pageable
=
PageParam
.
toPageable
(
pageParam
);
Specification
<
LocationAlarmRule
>
specification
=
(
root
,
query
,
criteriaBuilder
)
->
{
List
<
Predicate
>
list
=
new
ArrayList
<>();
if
(
param
.
getMapId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"mapId"
),
param
.
getMapId
()));
}
if
(
param
.
getFenceId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"locationFence"
),
param
.
getFenceId
()));
}
Predicate
[]
array
=
list
.
toArray
(
new
Predicate
[
0
]);
return
criteriaBuilder
.
and
(
array
);
};
Specification
<
LocationAlarmRule
>
specification
=
getSpecification
(
param
);
Set
<
Integer
>
informManner
=
param
.
getInformManner
();
if
(
CollectionUtils
.
isEmpty
(
informManner
))
{
Page
<
LocationAlarmRule
>
rulePage
=
locationAlarmRuleRepository
.
findAll
(
specification
,
pageable
);
...
...
@@ -133,4 +142,83 @@ public class LocationAlarmRuleServiceImpl implements LocationAlarmRuleService {
PageVo
<
LocationAlarmRuleVo
>
pageVo
=
PageVo
.
build
(
page
,
ruleList
.
size
());
return
Result
.
ok
(
pageVo
);
}
@Override
public
void
exportAlarmRule
(
LocationAlarmRuleParam
param
,
HttpServletResponse
response
,
PageParam
pageParam
)
{
Result
<
PageVo
<
LocationAlarmRuleVo
>>
result
=
findByCondition
(
param
,
pageParam
);
if
(
Status
.
OK
.
value
()
!=
result
.
getStatus
())
{
return
;
}
List
<
LocationAlarmRuleExcel
>
excelList
=
result
.
getBody
()
.
getData
()
.
stream
()
.
map
(
LocationAlarmRuleExcel:
:
transform
)
.
collect
(
Collectors
.
toList
());
try
(
DefaultStreamExcelBuilder
<
LocationAlarmRuleExcel
>
streamExcelBuilder
=
DefaultStreamExcelBuilder
.
of
(
LocationAlarmRuleExcel
.
class
)
.
threadPool
(
Executors
.
newFixedThreadPool
(
2
))
.
rowHeight
(
14
)
.
titleRowHeight
(
14
)
.
style
(
"cell->vertical-align:center;text-align:center"
,
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.
start
()
)
{
streamExcelBuilder
.
append
(
excelList
);
String
fileName
=
URLEncoder
.
encode
(
"电子围栏报警规则表.xlsx"
,
StandardCharsets
.
UTF_8
);
response
.
setContentType
(
"application/octet-stream"
);
response
.
setHeader
(
"Access-Control-Expose-Headers"
,
"Content-Disposition"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
fileName
);
OutputStream
out
=
response
.
getOutputStream
();
Workbook
workbook
=
streamExcelBuilder
.
fixedTitles
().
build
();
workbook
.
write
(
out
);
workbook
.
close
();
out
.
flush
();
out
.
close
();
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
throw
new
RuntimeException
(
"报警类型列表导出失败: "
+
e
.
getMessage
());
}
}
@Override
public
Result
<
PageVo
<
IdNameVo
>>
findFenceList
(
String
name
)
{
List
<
LocationFence
>
likeName
=
locationFenceRepository
.
findLikeName
(
name
);
List
<
IdNameVo
>
voList
=
likeName
.
stream
()
.
map
(
e
->
new
IdNameVo
(
e
.
getId
(),
e
.
getName
()))
.
collect
(
Collectors
.
toList
());
PageVo
<
IdNameVo
>
pageVo
=
PageVo
.
build
(
voList
,
voList
.
size
());
return
Result
.
ok
(
pageVo
);
}
@Override
public
Result
<
PageVo
<
IdNameVo
>>
findAlarmTypeList
()
{
List
<
AlarmType
>
all
=
alarmTypeRepository
.
findAll
();
List
<
IdNameVo
>
voList
=
all
.
stream
()
.
map
(
e
->
new
IdNameVo
(
e
.
getId
(),
e
.
getName
()))
.
collect
(
Collectors
.
toList
());
PageVo
<
IdNameVo
>
pageVo
=
PageVo
.
build
(
voList
,
voList
.
size
());
return
Result
.
ok
(
pageVo
);
}
private
Specification
<
LocationAlarmRule
>
getSpecification
(
LocationAlarmRuleParam
param
)
{
return
(
root
,
query
,
criteriaBuilder
)
->
{
List
<
Predicate
>
list
=
new
ArrayList
<>();
if
(
param
.
getMapId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"mapId"
),
param
.
getMapId
()));
}
if
(
param
.
getFenceId
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"locationFence"
),
param
.
getFenceId
()));
}
Predicate
[]
array
=
list
.
toArray
(
new
Predicate
[
0
]);
return
criteriaBuilder
.
and
(
array
);
};
}
}
app/src/main/java/com/yiring/app/vo/IdNameVo.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
;
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/5/6 13:43
*/
@ApiModel
(
"IdNameVo"
)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
IdNameVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
8990274383112436122L
;
@ApiModelProperty
(
value
=
"id"
,
example
=
"1"
,
required
=
true
)
private
Long
id
;
@ApiModelProperty
(
value
=
"name"
,
example
=
"名称"
,
required
=
true
)
private
String
name
;
}
app/src/main/java/com/yiring/app/vo/analysis/history/HistoryRouteVo.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
vo
.
analysis
.
history
;
import
com.yiring.app.domain.location.LocationLog
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serial
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.locationtech.jts.geom.Point
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:18
*/
@Data
@Builder
@ApiModel
(
"历史轨迹信息VO"
)
@NoArgsConstructor
@AllArgsConstructor
public
class
HistoryRouteVo
implements
Serializable
{
@Serial
private
static
final
long
serialVersionUID
=
-
5915541034872568334L
;
@ApiModelProperty
(
value
=
"姓名"
,
example
=
"张三"
)
private
String
name
;
@ApiModelProperty
(
value
=
"工号"
,
example
=
"ks2022"
)
private
String
uuid
;
@ApiModelProperty
(
value
=
"经纬度"
)
private
Point
point
;
@ApiModelProperty
(
value
=
"地图名称"
,
example
=
"总图"
)
private
String
mapName
;
@ApiModelProperty
(
value
=
"记录时间"
,
example
=
"2022-05-06 14:00:00"
)
private
LocalDateTime
writeTime
;
public
static
HistoryRouteVo
transform
(
LocationLog
locationLog
)
{
return
HistoryRouteVo
.
builder
()
.
name
(
locationLog
.
getUser
().
getRealName
())
.
uuid
(
locationLog
.
getUser
().
getUuid
())
.
point
(
locationLog
.
getPoint
())
.
writeTime
(
locationLog
.
getLocationTime
())
.
build
();
}
}
app/src/main/java/com/yiring/app/web/analysis/history/HistoryRouteController.java
0 → 100644
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
web
.
analysis
.
history
;
import
com.yiring.app.param.analysis.history.HistoryRouteConditionParam
;
import
com.yiring.app.service.analysis.history.HistoryRouteService
;
import
com.yiring.app.vo.analysis.history.HistoryRouteVo
;
import
com.yiring.common.core.Result
;
import
com.yiring.common.vo.PageVo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.Valid
;
import
org.springframework.http.MediaType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 10:36
*/
@Api
(
tags
=
"HistoryRoute(历史轨迹)"
)
@Validated
@RestController
@RequestMapping
(
"/history/route"
)
public
class
HistoryRouteController
{
@Resource
private
HistoryRouteService
historyRouteService
;
@ApiOperation
(
"根据条件查询历史轨迹"
)
@PostMapping
(
"/findByCondition"
)
public
Result
<
PageVo
<
HistoryRouteVo
>>
findByCondition
(
@Valid
HistoryRouteConditionParam
param
)
{
return
historyRouteService
.
findByCondition
(
param
);
}
@ApiOperation
(
value
=
"导出历史轨迹"
,
produces
=
MediaType
.
APPLICATION_OCTET_STREAM_VALUE
)
@PostMapping
(
"/exportHistoryRoute"
)
public
void
exportHistoryRoute
(
@Valid
HistoryRouteConditionParam
param
,
HttpServletResponse
response
)
{
historyRouteService
.
exportHistoryRoute
(
param
,
response
);
}
}
app/src/main/java/com/yiring/app/web/location/rule/LocationAlarmRuleController.java
浏览文件 @
3bbfc8e1
/* (C) 2022 YiRing, Inc. */
package
com
.
yiring
.
app
.
web
.
location
.
rule
;
import
com.yiring.app.constant.alarm.InformMannerEnum
;
import
com.yiring.app.domain.alarm.AlarmType
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleAddParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam
;
import
com.yiring.app.param.location.rule.LocationAlarmRuleParam
;
import
com.yiring.app.service.location.rule.LocationAlarmRuleService
;
import
com.yiring.app.vo.CodeNameVo
;
import
com.yiring.app.vo.IdNameVo
;
import
com.yiring.app.vo.location.rule.LocationAlarmRuleVo
;
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
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
java.util.List
;
import
java.util.Objects
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.Valid
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.http.MediaType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
@@ -74,4 +82,38 @@ public class LocationAlarmRuleController {
}
return
locationAlarmRuleService
.
findByCondition
(
param
,
pageParam
);
}
@ApiOperation
(
value
=
"通知方式下拉框"
)
@GetMapping
(
"/findAllInformManner"
)
public
Result
<
PageVo
<
CodeNameVo
>>
findAllInformManner
()
{
List
<
CodeNameVo
>
list
=
InformMannerEnum
.
getAll
();
PageVo
<
CodeNameVo
>
pageVo
=
PageVo
.
build
(
list
,
list
.
size
());
return
Result
.
ok
(
pageVo
);
}
@ApiOperation
(
value
=
"导出电子围栏报警规则"
,
produces
=
MediaType
.
APPLICATION_OCTET_STREAM_VALUE
)
@PostMapping
(
"/exportAlarmRule"
)
public
void
exportAlarmRule
(
@Valid
LocationAlarmRuleParam
param
,
HttpServletResponse
response
,
@Valid
PageParam
pageParam
)
{
locationAlarmRuleService
.
exportAlarmRule
(
param
,
response
,
pageParam
);
}
@ApiOperation
(
"围栏信息下拉框"
)
@ApiImplicitParam
(
value
=
"围栏名称"
,
example
=
"生产"
,
name
=
"name"
)
@PostMapping
(
"/findByNameLike"
)
public
Result
<
PageVo
<
IdNameVo
>>
findFenceList
(
String
name
)
{
if
(
name
==
null
)
{
name
=
""
;
}
return
locationAlarmRuleService
.
findFenceList
(
name
);
}
@ApiOperation
(
"报警类型下拉框"
)
@PostMapping
(
"/findAlarmTypeList"
)
public
Result
<
PageVo
<
IdNameVo
>>
findAlarmTypeList
()
{
return
locationAlarmRuleService
.
findAlarmTypeList
();
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论