Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
plant
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qinhu
plant
Commits
7d626c3e
Commit
7d626c3e
authored
4 years ago
by
shulidong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加趋势socket,bug修复
parent
70511567
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
420 additions
and
27 deletions
+420
-27
pom.xml
power-bussiness/pom.xml
+18
-0
DataPower.java
...n/wise/sc/energy/power/plant/business/bean/DataPower.java
+1
-0
OpentsdbOkHttpClient.java
...y/power/plant/business/opentsdb/OpentsdbOkHttpClient.java
+2
-3
ICharacterParamService.java
.../power/plant/business/service/ICharacterParamService.java
+2
-0
CharacterParamServiceImpl.java
...lant/business/service/impl/CharacterParamServiceImpl.java
+44
-1
PlantInfoServiceImpl.java
...wer/plant/business/service/impl/PlantInfoServiceImpl.java
+3
-0
IndexRealTimeTask.java
...c/energy/power/plant/business/task/IndexRealTimeTask.java
+75
-13
IndexRealTimeWebSocket.java
...rgy/power/plant/business/task/IndexRealTimeWebSocket.java
+2
-1
IndexSystemWebSocket.java
...nergy/power/plant/business/task/IndexSystemWebSocket.java
+1
-0
OilSystem1Task.java
...e/sc/energy/power/plant/business/task/OilSystem1Task.java
+3
-3
ScheduledModel.java
...e/sc/energy/power/plant/business/task/ScheduledModel.java
+1
-0
SendWebSocket.java
...se/sc/energy/power/plant/business/task/SendWebSocket.java
+13
-0
TaskCacheDataService.java
...nergy/power/plant/business/task/TaskCacheDataService.java
+10
-6
TendencyTask.java
...ise/sc/energy/power/plant/business/task/TendencyTask.java
+95
-0
TendencyWebSocket.java
...c/energy/power/plant/business/task/TendencyWebSocket.java
+150
-0
No files found.
power-bussiness/pom.xml
View file @
7d626c3e
...
@@ -219,6 +219,24 @@
...
@@ -219,6 +219,24 @@
<scope>
system
</scope>
<!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<scope>
system
</scope>
<!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<systemPath>
${basedir}/lib/words.jar
</systemPath>
<!--项目根目录下的lib文件夹下-->
<systemPath>
${basedir}/lib/words.jar
</systemPath>
<!--项目根目录下的lib文件夹下-->
</dependency>
</dependency>
<!--easypoi-->
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-base
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
org.jfree
</groupId>
<artifactId>
jcommon
</artifactId>
<version>
1.0.24
</version>
</dependency>
<dependency>
<groupId>
org.jfree
</groupId>
<artifactId>
jfreechart
</artifactId>
<version>
1.5.0
</version>
</dependency>
<!--easypoi-->
</dependencies>
</dependencies>
<build>
<build>
<plugins>
<plugins>
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/bean/DataPower.java
View file @
7d626c3e
...
@@ -58,6 +58,7 @@ public class DataPower implements Serializable {
...
@@ -58,6 +58,7 @@ public class DataPower implements Serializable {
* Y轴值集合
* Y轴值集合
*/
*/
private
List
<
String
>
value
=
new
ArrayList
<>();
private
List
<
String
>
value
=
new
ArrayList
<>();
private
List
<
String
>
singleType
=
new
ArrayList
<>();
}
}
}
}
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/opentsdb/OpentsdbOkHttpClient.java
View file @
7d626c3e
...
@@ -226,14 +226,13 @@ public class OpentsdbOkHttpClient {
...
@@ -226,14 +226,13 @@ public class OpentsdbOkHttpClient {
final
Long
[]
latestTime
=
{
0L
};
final
Long
[]
latestTime
=
{
0L
};
if
(!
CollectionUtils
.
isEmpty
(
results
))
{
if
(!
CollectionUtils
.
isEmpty
(
results
))
{
results
.
stream
().
forEach
(
result
->
{
results
.
stream
().
forEach
(
result
->
{
timeList
.
add
(
result
.
getTimestamp
());
if
(
latestTime
[
0
]
<
result
.
getTimestamp
())
{
if
(
latestTime
[
0
]
<
result
.
getTimestamp
())
{
latestTime
[
0
]
=
result
.
getTimestamp
();
latestTime
[
0
]
=
result
.
getTimestamp
();
}
}
});
});
return
timeList
.
get
(
0
)
;
return
latestTime
[
0
]
;
}
else
{
}
else
{
return
0L
;
return
System
.
currentTimeMillis
()
;
}
}
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/service/ICharacterParamService.java
View file @
7d626c3e
...
@@ -71,6 +71,8 @@ public interface ICharacterParamService extends IBaseService<String, CharacterPa
...
@@ -71,6 +71,8 @@ public interface ICharacterParamService extends IBaseService<String, CharacterPa
QueryResponse
getRealTimeDataByKksCode
(
List
<
String
>
kksCodes
,
String
start
,
String
end
,
String
downSample
);
QueryResponse
getRealTimeDataByKksCode
(
List
<
String
>
kksCodes
,
String
start
,
String
end
,
String
downSample
);
QueryResponse
getRealTimeDataByKksCode
(
Map
<
String
,
String
>
kksCodes
,
String
start
,
String
end
,
String
downSample
);
/**
/**
* 根据kksCode获取功率实时数据 4小时一统计
* 根据kksCode获取功率实时数据 4小时一统计
*
*
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/service/impl/CharacterParamServiceImpl.java
View file @
7d626c3e
...
@@ -242,7 +242,50 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
...
@@ -242,7 +242,50 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
//获取最后一条数据 然后根据这个查询
//获取最后一条数据 然后根据这个查询
for
(
CharacterParamInfo
characterParamInfo
:
characterParamInfos
)
{
for
(
CharacterParamInfo
characterParamInfo
:
characterParamInfos
)
{
QueryExt
build
=
QueryExt
.
builder
()
QueryExt
build
=
QueryExt
.
builder
()
.
aggregator
(
Aggregator
.
AVG
)
.
aggregator
(
Aggregator
.
NONE
)
.
metric
(
characterParamInfo
.
getKksCode
())
.
build
();
if
(
StrUtil
.
isNotBlank
(
downSample
))
{
build
.
setDownsample
(
downSample
);
}
queryRequestExt
.
addQuery
(
build
);
}
QueryResponse
response
;
try
{
response
=
OpentsdbOkHttpClient
.
query
(
queryRequestExt
);
//没有数据时
if
(
response
.
getResults
().
size
()
==
0
)
{
response
=
enterWhenItIsARind
(
characterParamInfos
);
}
return
response
;
}
catch
(
IOException
|
URISyntaxException
e
)
{
log
.
error
(
"根据kksCode获取当前start时候下的实时数据失败!"
);
response
=
enterWhenItIsARind
(
characterParamInfos
);
return
response
;
}
}
@Override
public
QueryResponse
getRealTimeDataByKksCode
(
Map
<
String
,
String
>
kksCodes
,
String
start
,
String
end
,
String
downSample
)
{
ResponseEnum
.
COLLECTION_NOT_ILLEGAL
.
assertCollectionNotILLEGAL
(
kksCodes
.
keySet
());
//去数据库匹配测点
List
<
CharacterParamInfo
>
characterParamInfos
=
characterParamRepository
.
findAll
((
Specification
<
CharacterParamInfo
>)
(
root
,
query
,
criteriaBuilder
)
->
{
Path
<
String
>
kkscodePath
=
root
.
get
(
"kksCode"
);
CriteriaBuilder
.
In
<
String
>
in
=
criteriaBuilder
.
in
(
kkscodePath
);
for
(
String
kkscode
:
kksCodes
.
keySet
())
{
in
.
value
(
kkscode
);
}
return
in
;
});
QueryRequestExt
queryRequestExt
=
QueryRequestExt
.
builder
()
.
start
(
start
)
.
end
(
end
)
.
build
();
//获取最后一条数据 然后根据这个查询
for
(
CharacterParamInfo
characterParamInfo
:
characterParamInfos
)
{
QueryExt
build
=
QueryExt
.
builder
()
.
aggregator
(
Aggregator
.
NONE
)
.
metric
(
characterParamInfo
.
getKksCode
())
.
metric
(
characterParamInfo
.
getKksCode
())
.
build
();
.
build
();
if
(
StrUtil
.
isNotBlank
(
downSample
))
{
if
(
StrUtil
.
isNotBlank
(
downSample
))
{
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/service/impl/PlantInfoServiceImpl.java
View file @
7d626c3e
...
@@ -92,6 +92,9 @@ public class PlantInfoServiceImpl extends BaseServiceImpl<String, PlantInfo> imp
...
@@ -92,6 +92,9 @@ public class PlantInfoServiceImpl extends BaseServiceImpl<String, PlantInfo> imp
try
{
try
{
//获取最后一个时间点
//获取最后一个时间点
Long
lastTime
=
OpentsdbOkHttpClient
.
queryLast
(
characterParamInfoVos
);
Long
lastTime
=
OpentsdbOkHttpClient
.
queryLast
(
characterParamInfoVos
);
if
(
lastTime
==
0
){
lastTime
=
System
.
currentTimeMillis
();
}
//判断并获取最后一个时间点 7天前,每5min一个点
//判断并获取最后一个时间点 7天前,每5min一个点
QueryRequestExt
queryRequestExt
=
QueryRequestExt
.
builder
()
QueryRequestExt
queryRequestExt
=
QueryRequestExt
.
builder
()
.
start
((
lastTime
-
7
*
24
*
3600
*
1000
)
+
""
)
.
start
((
lastTime
-
7
*
24
*
3600
*
1000
)
+
""
)
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/IndexRealTimeTask.java
View file @
7d626c3e
package
cn
.
wise
.
sc
.
energy
.
power
.
plant
.
business
.
task
;
package
cn
.
wise
.
sc
.
energy
.
power
.
plant
.
business
.
task
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.wise.sc.energy.power.plant.business.bean.DataPower
;
import
cn.wise.sc.energy.power.plant.business.bean.DataPower
;
import
cn.wise.sc.energy.power.plant.business.domain.vo.CharacterParamInfoVo
;
import
cn.wise.sc.energy.power.plant.business.domain.vo.CharacterParamInfoVo
;
import
cn.wise.sc.energy.power.plant.business.opentsdb.OpentsdbOkHttpClient
;
import
cn.wise.sc.energy.power.plant.business.opentsdb.OpentsdbOkHttpClient
;
...
@@ -50,17 +52,25 @@ public class IndexRealTimeTask extends ScheduleTask {
...
@@ -50,17 +52,25 @@ public class IndexRealTimeTask extends ScheduleTask {
Map
<
String
,
List
<
Map
.
Entry
<
String
,
String
>>>
groupMap
=
deviceMap
.
entrySet
().
stream
().
collect
(
Collectors
.
groupingBy
(
c
->
c
.
getValue
()));
Map
<
String
,
List
<
Map
.
Entry
<
String
,
String
>>>
groupMap
=
deviceMap
.
entrySet
().
stream
().
collect
(
Collectors
.
groupingBy
(
c
->
c
.
getValue
()));
//需要区分的测点
//需要区分的测点
String
[]
points
=
new
String
[]{
String
[]
points
=
new
String
[]{
"发电机定子A相电流"
,
//右上
"发电机定子B相电流"
,
"定子C相电流"
,
"发电机定子C相电流"
,
"定子CA线电压"
,
"发电机定子AB线电压"
,
"定子负序电流"
,
"发电机定子BC线电压"
,
//右中
"发电机定子CA线电压"
,
"汽端座振X"
,
"汽端座振X"
,
"汽端轴振X"
,
"汽端轴振X"
,
"励端座振X"
,
"励端座振X"
,
"励端轴振X"
,
"励端轴振X"
,
//右下
"排油温度"
,
"排油温度"
,
//左下极坐标
"层间温度"
,
"上层线圈出水温度"
,
"下层线圈出水温度"
,
//中间
"转速1"
,
"有功功率"
,
};
};
//向每个webSocket推送系统实时数据
//向每个webSocket推送系统实时数据
...
@@ -97,12 +107,9 @@ public class IndexRealTimeTask extends ScheduleTask {
...
@@ -97,12 +107,9 @@ public class IndexRealTimeTask extends ScheduleTask {
});
});
powerPoints
.
setValue
(
finalList
);
powerPoints
.
setValue
(
finalList
);
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
"发电机定子A相电流"
,
"定子C相电流"
,
"发电机定子B相电流"
,
"定子CA线电压"
,
"发电机定子C相电流"
,
"定子负序电流"
,
"发电机定子AB线电压"
,
"发电机定子BC线电压"
,
"发电机定子CA线电压"
,
}))
{
}))
{
//右上图
//右上图
DataPower
dataPower
=
map
.
getOrDefault
(
"rightTop"
,
new
DataPower
());
DataPower
dataPower
=
map
.
getOrDefault
(
"rightTop"
,
new
DataPower
());
...
@@ -131,12 +138,67 @@ public class IndexRealTimeTask extends ScheduleTask {
...
@@ -131,12 +138,67 @@ public class IndexRealTimeTask extends ScheduleTask {
dataPower
.
getDataList
().
add
(
powerPoints
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"rightBottom"
,
dataPower
);
map
.
putIfAbsent
(
"rightBottom"
,
dataPower
);
}
}
if
(!
"total"
.
equals
(
deviceId
)){
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
//左下极坐标
"层间温度"
,
}))
{
//左下图
DataPower
dataPower
=
map
.
getOrDefault
(
"leftBottom1"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"leftBottom1"
,
dataPower
);
}
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
//左下极坐标
"下层线圈出水温度"
,
}))
{
//左下图
DataPower
dataPower
=
map
.
getOrDefault
(
"leftBottom2"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"leftBottom2"
,
dataPower
);
}
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
//左下极坐标
"上层线圈出水温度"
,
}))
{
//左下图
DataPower
dataPower
=
map
.
getOrDefault
(
"leftBottom3"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"leftBottom3"
,
dataPower
);
}
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
"有功功率"
,
}))
{
DataPower
dataPower
=
map
.
getOrDefault
(
"有功"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"有功"
,
dataPower
);
}
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
new
String
[]{
"转速1"
,
}))
{
DataPower
dataPower
=
map
.
getOrDefault
(
"转速"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"转速"
,
dataPower
);
}
}
}
}
try
{
try
{
List
<
Map
.
Entry
<
String
,
String
>>
deviceGroupMap
=
groupMap
.
get
(
deviceId
);
List
<
Map
.
Entry
<
String
,
String
>>
deviceGroupMap
=
groupMap
.
get
(
deviceId
);
//根据deviceid统一发送
//根据deviceid统一发送
for
(
Map
.
Entry
<
String
,
String
>
entry
:
deviceGroupMap
)
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
deviceGroupMap
)
{
final
IndexRealTime
WebSocket
webSocket
=
webSocketMap
.
get
(
entry
.
getKey
());
final
Send
WebSocket
webSocket
=
webSocketMap
.
get
(
entry
.
getKey
());
webSocket
.
sendMessage
(
JSON
.
toJSONString
(
map
));
webSocket
.
sendMessage
(
JSON
.
toJSONString
(
map
));
}
}
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/IndexRealTimeWebSocket.java
View file @
7d626c3e
...
@@ -22,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap;
...
@@ -22,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Component
@Component
@ServerEndpoint
(
"/index/realTimeData/{deviceId}"
)
@ServerEndpoint
(
"/index/realTimeData/{deviceId}"
)
@DependsOn
(
"myApplicationContextAware"
)
@DependsOn
(
"myApplicationContextAware"
)
public
class
IndexRealTimeWebSocket
{
public
class
IndexRealTimeWebSocket
implements
SendWebSocket
{
/**
/**
* 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
* 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
...
@@ -113,6 +113,7 @@ public class IndexRealTimeWebSocket {
...
@@ -113,6 +113,7 @@ public class IndexRealTimeWebSocket {
/**
/**
* 实现服务器主动推送
* 实现服务器主动推送
*/
*/
@Override
public
void
sendMessage
(
String
message
)
throws
IOException
{
public
void
sendMessage
(
String
message
)
throws
IOException
{
this
.
session
.
getBasicRemote
().
sendText
(
message
);
this
.
session
.
getBasicRemote
().
sendText
(
message
);
}
}
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/IndexSystemWebSocket.java
View file @
7d626c3e
...
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
...
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Component
@Component
@DependsOn
(
"myApplicationContextAware"
)
@DependsOn
(
"myApplicationContextAware"
)
@ServerEndpoint
(
"/index/{plantCode}/{deviceId}"
)
@ServerEndpoint
(
"/index/{plantCode}/{deviceId}"
)
@Deprecated
public
class
IndexSystemWebSocket
{
public
class
IndexSystemWebSocket
{
/**
/**
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/OilSystem1Task.java
View file @
7d626c3e
...
@@ -54,7 +54,7 @@ public class OilSystem1Task extends ScheduleTask {
...
@@ -54,7 +54,7 @@ public class OilSystem1Task extends ScheduleTask {
Map
<
String
,
List
<
Map
.
Entry
<
String
,
String
>>>
groupMap
=
deviceMap
.
entrySet
().
stream
().
collect
(
Collectors
.
groupingBy
(
c
->
c
.
getValue
()));
Map
<
String
,
List
<
Map
.
Entry
<
String
,
String
>>>
groupMap
=
deviceMap
.
entrySet
().
stream
().
collect
(
Collectors
.
groupingBy
(
c
->
c
.
getValue
()));
//需要区分的测点
//需要区分的测点
String
[]
points
=
new
String
[]{
String
[]
points
=
new
String
[]{
//
左
上
//
右
上
"汽轮机备用油差压阀进口压力"
,
"汽轮机备用油差压阀进口压力"
,
"排油烟机1号进口压力"
,
"排油烟机1号进口压力"
,
"排油烟机2号进口压力"
,
"排油烟机2号进口压力"
,
...
@@ -88,10 +88,10 @@ public class OilSystem1Task extends ScheduleTask {
...
@@ -88,10 +88,10 @@ public class OilSystem1Task extends ScheduleTask {
powerPoints
.
setValue
(
finalList
);
powerPoints
.
setValue
(
finalList
);
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
points
))
{
if
(
IS_CONTAINS
(
KKsCodes
.
get
(
queryResult
.
getMetric
()),
points
))
{
//左上图
//左上图
DataPower
dataPower
=
map
.
getOrDefault
(
"
lef
tTop"
,
new
DataPower
());
DataPower
dataPower
=
map
.
getOrDefault
(
"
righ
tTop"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"
lef
tTop"
,
dataPower
);
map
.
putIfAbsent
(
"
righ
tTop"
,
dataPower
);
}
}
}
}
try
{
try
{
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/ScheduledModel.java
View file @
7d626c3e
...
@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
...
@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
* @create: 2020-05-20 16:00
* @create: 2020-05-20 16:00
*/
*/
@Component
@Component
@Deprecated
public
class
ScheduledModel
{
public
class
ScheduledModel
{
final
final
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/SendWebSocket.java
0 → 100644
View file @
7d626c3e
package
cn
.
wise
.
sc
.
energy
.
power
.
plant
.
business
.
task
;
import
java.io.IOException
;
/**
* @author neo.shu
* @since 2020/9/24 20:47
*/
public
interface
SendWebSocket
{
public
void
sendMessage
(
String
message
)
throws
IOException
;
}
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/TaskCacheDataService.java
View file @
7d626c3e
...
@@ -65,12 +65,9 @@ public class TaskCacheDataService {
...
@@ -65,12 +65,9 @@ public class TaskCacheDataService {
public
List
<
CharacterParamInfoVo
>
cacheIndexCPI
()
{
public
List
<
CharacterParamInfoVo
>
cacheIndexCPI
()
{
List
<
String
>
characterNames
=
new
ArrayList
<>();
List
<
String
>
characterNames
=
new
ArrayList
<>();
//右上
//右上
characterNames
.
add
(
"发电机定子A相电流"
);
characterNames
.
add
(
"定子C相电流"
);
characterNames
.
add
(
"发电机定子B相电流"
);
characterNames
.
add
(
"定子CA线电压"
);
characterNames
.
add
(
"发电机定子C相电流"
);
characterNames
.
add
(
"定子负序电流"
);
characterNames
.
add
(
"发电机定子AB线电压"
);
characterNames
.
add
(
"发电机定子BC线电压"
);
characterNames
.
add
(
"发电机定子CA线电压"
);
//右中
//右中
characterNames
.
add
(
"汽端座振X"
);
characterNames
.
add
(
"汽端座振X"
);
characterNames
.
add
(
"汽端轴振X"
);
characterNames
.
add
(
"汽端轴振X"
);
...
@@ -78,6 +75,13 @@ public class TaskCacheDataService {
...
@@ -78,6 +75,13 @@ public class TaskCacheDataService {
characterNames
.
add
(
"励端轴振X"
);
characterNames
.
add
(
"励端轴振X"
);
//右下
//右下
characterNames
.
add
(
"排油温度"
);
characterNames
.
add
(
"排油温度"
);
//左下
characterNames
.
add
(
"层间温度"
);
characterNames
.
add
(
"上层线圈出水温度"
);
characterNames
.
add
(
"下层线圈出水温度"
);
//中间
characterNames
.
add
(
"转速1"
);
characterNames
.
add
(
"有功功率"
);
List
<
CharacterParamInfoVo
>
characterParamInfoVos
=
List
<
CharacterParamInfoVo
>
characterParamInfoVos
=
iCharacterParamService
.
getCharacterByName
(
characterNames
,
""
,
""
);
iCharacterParamService
.
getCharacterByName
(
characterNames
,
""
,
""
);
return
characterParamInfoVos
;
return
characterParamInfoVos
;
...
...
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/TendencyTask.java
0 → 100644
View file @
7d626c3e
package
cn
.
wise
.
sc
.
energy
.
power
.
plant
.
business
.
task
;
import
cn.wise.sc.energy.power.plant.business.bean.DataPower
;
import
cn.wise.sc.energy.power.plant.business.domain.vo.CharacterParamInfoVo
;
import
cn.wise.sc.energy.power.plant.business.opentsdb.OpentsdbOkHttpClient
;
import
cn.wise.sc.energy.power.plant.business.service.ICharacterParamService
;
import
cn.wise.sc.energy.power.plant.business.service.IEventInfoService
;
import
cn.wise.sc.energy.power.plant.business.task.schedule.ScheduleTask
;
import
com.alibaba.fastjson.JSON
;
import
net.opentsdb.client.api.query.response.QueryResponse
;
import
net.opentsdb.client.bean.QueryResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.stream.Collectors
;
/**
* @author neo.shu
* @since 2020/9/17 17:30
*/
@Service
(
value
=
"tendencyTask"
)
public
class
TendencyTask
extends
ScheduleTask
{
@Autowired
ICharacterParamService
iCharacterParamService
;
@Autowired
IEventInfoService
iEventInfoService
;
@Autowired
TaskCacheDataService
taskCacheDataService
;
public
TendencyTask
()
{
super
(
UUID
.
randomUUID
().
toString
());
}
@Override
public
void
run
()
{
ConcurrentHashMap
<
String
,
TendencyWebSocket
>
webSocketMap
=
TendencyWebSocket
.
webSocketMap
;
ConcurrentHashMap
<
String
,
String
>
deviceMap
=
HydrogenSystemWebSocket
.
deviceMap
;
if
(
webSocketMap
.
size
()
==
0
||
deviceMap
.
size
()
==
0
)
{
return
;
}
//给每个deviceid分组,然后统一查询,进行推送
Map
<
String
,
List
<
Map
.
Entry
<
String
,
String
>>>
groupMap
=
deviceMap
.
entrySet
().
stream
().
collect
(
Collectors
.
groupingBy
(
c
->
c
.
getValue
()));
//向每个webSocket推送系统实时数据
for
(
String
deviceId
:
groupMap
.
keySet
())
{
List
<
CharacterParamInfoVo
>
characterParamInfoVos
=
taskCacheDataService
.
cacheHydrogeCha
(
deviceId
);
Map
<
String
,
String
>
KKsCodes
=
characterParamInfoVos
.
stream
().
filter
(
item
->
IS_CONTAINS
(
item
.
getCpName
(),
new
String
[]{
"汽端发电机冷氢温度"
})).
collect
(
Collectors
.
toMap
(
CharacterParamInfoVo:
:
getKksCode
,
CharacterParamInfoVo:
:
getCpName
));
Long
lastTime
=
OpentsdbOkHttpClient
.
queryLast
(
characterParamInfoVos
);
QueryResponse
response
=
iCharacterParamService
.
getRealTimeDataByKksCode
(
new
ArrayList
<>(
KKsCodes
.
keySet
()),
(
lastTime
-
1
)
+
""
,
lastTime
+
""
,
""
);
//组装数据结构
List
<
Object
>
xAxis
=
response
.
getResults
().
get
(
0
).
getDps
().
keySet
().
stream
().
map
(
item
->
item
.
toString
()).
collect
(
Collectors
.
toList
());
Map
<
String
,
DataPower
>
map
=
new
HashMap
<>();
for
(
QueryResult
queryResult
:
response
.
getResults
())
{
DataPower
.
PowerPoints
powerPoints
=
new
DataPower
.
PowerPoints
();
powerPoints
.
setKksCode
(
queryResult
.
getMetric
());
powerPoints
.
setName
(
KKsCodes
.
get
(
queryResult
.
getMetric
()));
List
<
String
>
finalList
=
new
ArrayList
<>();
queryResult
.
getDps
().
values
().
stream
().
forEach
(
item
->
{
finalList
.
add
(
item
.
toString
());
});
powerPoints
.
setValue
(
finalList
);
if
(
KKsCodes
.
get
(
queryResult
.
getMetric
()).
contains
(
"汽端发电机冷氢温度"
))
{
DataPower
dataPower
=
map
.
getOrDefault
(
"rightBottom"
,
new
DataPower
());
dataPower
.
setXAxis
(
xAxis
);
dataPower
.
getDataList
().
add
(
powerPoints
);
map
.
putIfAbsent
(
"rightBottom"
,
dataPower
);
}
//左上图
}
try
{
List
<
Map
.
Entry
<
String
,
String
>>
deviceGroupMap
=
groupMap
.
get
(
deviceId
);
//根据deviceid统一发送
for
(
Map
.
Entry
<
String
,
String
>
entry
:
deviceGroupMap
)
{
final
SendWebSocket
webSocket
=
webSocketMap
.
get
(
entry
.
getKey
());
webSocket
.
sendMessage
(
JSON
.
toJSONString
(
map
));
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
This diff is collapsed.
Click to expand it.
power-bussiness/src/main/java/cn/wise/sc/energy/power/plant/business/task/TendencyWebSocket.java
0 → 100644
View file @
7d626c3e
package
cn
.
wise
.
sc
.
energy
.
power
.
plant
.
business
.
task
;
import
cn.wise.sc.energy.power.plant.business.config.MyApplicationContextAware
;
import
cn.wise.sc.energy.power.plant.business.task.schedule.ScheduleUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.context.annotation.DependsOn
;
import
org.springframework.stereotype.Component
;
import
javax.websocket.OnClose
;
import
javax.websocket.OnError
;
import
javax.websocket.OnMessage
;
import
javax.websocket.OnOpen
;
import
javax.websocket.Session
;
import
javax.websocket.server.PathParam
;
import
javax.websocket.server.ServerEndpoint
;
import
java.io.IOException
;
import
java.util.UUID
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* @description: 趋势实时数据的
* @author: neo.shu
* @create: 2020-08-17 14:07
**/
@Slf4j
@Component
@ServerEndpoint
(
"/tendency/{deviceId}"
)
@DependsOn
(
"myApplicationContextAware"
)
public
class
TendencyWebSocket
implements
SendWebSocket
{
/**
* 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
*/
private
static
int
onlineCount
=
0
;
/**
* concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
*/
public
static
ConcurrentHashMap
<
String
,
TendencyWebSocket
>
webSocketMap
=
new
ConcurrentHashMap
<>();
public
static
ConcurrentHashMap
<
String
,
String
>
deviceMap
=
new
ConcurrentHashMap
<>();
/**
* 与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
private
Session
session
;
private
String
uuid
;
private
HydrogeSystem1Task
hydrogeSystem1Task
=
(
HydrogeSystem1Task
)
MyApplicationContextAware
.
getApplicationContext
().
getBean
(
"hydrogeSystem1Task"
);
private
HydrogeSystem3Task
hydrogeSystem3Task
=
(
HydrogeSystem3Task
)
MyApplicationContextAware
.
getApplicationContext
().
getBean
(
"hydrogeSystem3Task"
);
/**
* 连接建立成功调用的方法
*/
@OnOpen
public
void
onOpen
(
Session
session
,
@PathParam
(
"deviceId"
)
String
deviceId
)
{
this
.
session
=
session
;
uuid
=
UUID
.
randomUUID
().
toString
();
deviceMap
.
put
(
uuid
,
deviceId
);
webSocketMap
.
put
(
uuid
,
this
);
//加入set中
addOnlineCount
();
//启动任务
ScheduleUtil
.
start
(
hydrogeSystem1Task
,
1000
);
ScheduleUtil
.
start
(
hydrogeSystem3Task
,
1000
*
3600
);
//已有用户的情况,主动推送一次
if
(
webSocketMap
.
size
()
>
1
)
{
hydrogeSystem1Task
.
run
();
hydrogeSystem3Task
.
run
();
}
log
.
info
(
"用户连接:"
+
deviceId
+
",当前在线人数为:"
+
getOnlineCount
());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public
void
onClose
()
{
if
(
webSocketMap
.
containsKey
(
uuid
))
{
webSocketMap
.
remove
(
uuid
);
deviceMap
.
remove
(
uuid
);
//从set中删除
subOnlineCount
();
}
if
(
webSocketMap
.
size
()
==
0
)
{
ScheduleUtil
.
cancel
(
hydrogeSystem1Task
);
ScheduleUtil
.
cancel
(
hydrogeSystem3Task
);
}
log
.
info
(
"用户退出:"
+
uuid
+
",当前在线人数为:"
+
getOnlineCount
());
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
*/
@OnMessage
public
void
onMessage
(
String
message
,
Session
session
)
throws
IOException
{
log
.
info
(
"用户消息:"
+
uuid
+
",报文:"
+
message
);
//可以群发消息
//消息保存到数据库、redis
if
(
StringUtils
.
isNotBlank
(
message
))
{
webSocketMap
.
get
(
uuid
).
sendMessage
(
"111111111"
);
}
}
/**
* 错误
* @param session 会话
* @param error 错误异常
*/
@OnError
public
void
onError
(
Session
session
,
Throwable
error
)
{
log
.
error
(
"用户错误:"
+
this
.
uuid
+
",原因:"
+
error
.
getMessage
());
error
.
printStackTrace
();
}
/**
* 实现服务器主动推送
*/
public
void
sendMessage
(
String
message
)
throws
IOException
{
this
.
session
.
getBasicRemote
().
sendText
(
message
);
}
/**
* 发送自定义消息
* @param message 消息
* @param userId 用户
* @throws IOException 异常
*/
public
static
void
sendInfo
(
String
message
,
@PathParam
(
"userId"
)
String
userId
)
throws
IOException
{
log
.
info
(
"发送消息到:"
+
userId
+
",报文:"
+
message
);
if
(
StringUtils
.
isNotBlank
(
userId
)
&&
webSocketMap
.
containsKey
(
userId
))
{
webSocketMap
.
get
(
userId
).
sendMessage
(
message
);
}
else
{
log
.
error
(
"用户"
+
userId
+
",不在线!"
);
}
}
public
static
synchronized
int
getOnlineCount
()
{
return
onlineCount
;
}
public
static
synchronized
void
addOnlineCount
()
{
TendencyWebSocket
.
onlineCount
++;
}
public
static
synchronized
void
subOnlineCount
()
{
TendencyWebSocket
.
onlineCount
--;
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment