Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
haikang-client
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
杨立
haikang-client
Commits
0b37f68d
提交
0b37f68d
authored
9月 29, 2021
作者:
wangqiang
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
# Conflicts: # apq-pc-client/src/main/java/com/priusis/client/service/core/MqttServiceImpl.java
上级
ece2e941
b21df046
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
95 行增加
和
33 行删除
+95
-33
InstalledProgramCache.java
...rc/main/java/com/priusis/cache/InstalledProgramCache.java
+14
-9
MqttServiceImpl.java
...java/com/priusis/client/service/core/MqttServiceImpl.java
+2
-1
ConfigController.java
...rc/main/java/com/priusis/controller/ConfigController.java
+12
-0
ProgramController.java
...c/main/java/com/priusis/controller/ProgramController.java
+64
-23
application.yml
apq-pc-client/src/main/resources/application.yml
+3
-0
没有找到文件。
apq-pc-client/src/main/java/com/priusis/cache/InstalledProgramCache.java
浏览文件 @
0b37f68d
...
@@ -27,17 +27,22 @@ public class InstalledProgramCache {
...
@@ -27,17 +27,22 @@ public class InstalledProgramCache {
@Scheduled
(
fixedDelay
=
3000
)
@Scheduled
(
fixedDelay
=
3000
)
p
rotected
void
loadProgramListJob
()
throws
IOException
{
p
ublic
void
loadProgramListJob
()
throws
IOException
{
List
<
Map
<
String
,
String
>>
programs
=
new
ArrayList
<>();
List
<
Map
<
String
,
String
>>
programs
=
new
ArrayList
<>();
Process
process
=
Runtime
.
getRuntime
()
String
[]
regPaths
=
{
.
exec
(
"cmd /c reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
);
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
,
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getInputStream
(),
"GBK"
)))
{
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
String
key
;
};
while
((
key
=
reader
.
readLine
())
!=
null
)
{
for
(
String
regPath
:
regPaths
)
{
Map
<
String
,
String
>
info
=
queryProgramInfo
(
key
);
Process
process
=
Runtime
.
getRuntime
().
exec
(
"cmd /c reg query "
+
regPath
);
if
(
info
.
containsKey
(
"name"
))
programs
.
add
(
info
);
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getInputStream
(),
"GBK"
)))
{
String
key
;
while
((
key
=
reader
.
readLine
())
!=
null
)
{
Map
<
String
,
String
>
info
=
queryProgramInfo
(
key
);
if
(
info
.
containsKey
(
"name"
))
programs
.
add
(
info
);
}
process
.
destroy
();
}
}
process
.
destroy
();
}
}
programList
=
programs
;
programList
=
programs
;
}
}
...
...
apq-pc-client/src/main/java/com/priusis/client/service/core/MqttServiceImpl.java
浏览文件 @
0b37f68d
...
@@ -356,7 +356,8 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
...
@@ -356,7 +356,8 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
private
void
onRpcCommand
(
String
message
)
{
private
void
onRpcCommand
(
String
message
)
{
JsonNode
payload
=
fromString
(
message
);
JsonNode
payload
=
fromString
(
message
);
MqttRpcDataMessage
mqttRpcDataMessage
=
MqttRpcDataMessage
.
builder
()
MqttRpcDataMessage
mqttRpcDataMessage
=
MqttRpcDataMessage
.
builder
()
.
method
(
payload
.
get
(
"method"
).
asText
()).
params
(
payload
.
get
(
"params"
).
asText
()).
build
();
.
method
(
payload
.
get
(
"method"
).
asText
())
.
params
(
Optional
.
ofNullable
(
payload
.
get
(
"params"
)).
map
(
JsonNode:
:
asText
).
orElse
(
null
)).
build
();
// 存储rpc下发的数据
// 存储rpc下发的数据
...
...
apq-pc-client/src/main/java/com/priusis/controller/ConfigController.java
浏览文件 @
0b37f68d
...
@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.PostConstruct
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -85,4 +86,15 @@ public class ConfigController {
...
@@ -85,4 +86,15 @@ public class ConfigController {
}
}
return
R
.
success
();
return
R
.
success
();
}
}
@PostConstruct
public
void
init
()
{
try
{
// 初始化自动保存一次数据上报设置
saveDataReporting
(
getDataReporting
().
getData
());
}
catch
(
Exception
e
)
{
log
.
error
(
"初始化异常"
,
e
);
}
}
}
}
apq-pc-client/src/main/java/com/priusis/controller/ProgramController.java
浏览文件 @
0b37f68d
package
com
.
priusis
.
controller
;
package
com
.
priusis
.
controller
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.ConcurrentHashSet
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.io.StreamProgress
;
import
cn.hutool.core.io.StreamProgress
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.http.HttpResponse
;
import
cn.hutool.http.HttpResponse
;
...
@@ -25,13 +26,13 @@ import org.springframework.web.bind.annotation.*;
...
@@ -25,13 +26,13 @@ import org.springframework.web.bind.annotation.*;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
javax.validation.constraints.Pattern
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormat
;
import
java.util.Collections
;
import
java.util.*
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -52,9 +53,19 @@ public class ProgramController {
...
@@ -52,9 +53,19 @@ public class ProgramController {
@Value
(
value
=
"${apq.url.upgrade}"
)
@Value
(
value
=
"${apq.url.upgrade}"
)
private
String
upgradeUrl
;
private
String
upgradeUrl
;
@Value
(
value
=
"${apq.url.install-status-upissue}"
)
private
String
installStatusUpIssueUrl
;
@Value
(
value
=
"${apq.url.upgrade-status-upissue}"
)
private
String
upgradeStatusUpIssueUrl
;
@Value
(
value
=
"${apq.url.add-program}"
)
@Value
(
value
=
"${apq.url.add-program}"
)
private
String
addProgramUrl
;
private
String
addProgramUrl
;
@Resource
@Resource
private
InstalledProgramCache
installedProgramCache
;
private
InstalledProgramCache
installedProgramCache
;
...
@@ -76,17 +87,21 @@ public class ProgramController {
...
@@ -76,17 +87,21 @@ public class ProgramController {
if
(
CollUtil
.
isEmpty
(
rows
))
return
R
.
success
(
page
.
setRecords
(
Collections
.
emptyList
()));
if
(
CollUtil
.
isEmpty
(
rows
))
return
R
.
success
(
page
.
setRecords
(
Collections
.
emptyList
()));
List
<
Map
<
String
,
String
>>
programs
=
installedProgramCache
.
getPrograms
();
List
<
Map
<
String
,
String
>>
programs
=
installedProgramCache
.
getPrograms
();
List
<
Map
<
String
,
String
>>
list
=
rows
.
stream
().
map
(
JSONObject
.
class
::
cast
)
List
<
Map
<
String
,
String
>>
list
=
rows
.
stream
().
map
(
JSONObject
.
class
::
cast
)
.
map
(
o
->
MapUtil
.<
String
,
String
>
builder
()
.
map
(
o
->
{
.
put
(
"id"
,
o
.
getStr
(
"id"
))
Map
<
String
,
String
>
map
=
new
HashMap
<>();
.
put
(
"name"
,
StrUtil
.
subBefore
(
o
.
getStr
(
"fileName"
),
'.'
,
true
))
map
.
put
(
"id"
,
o
.
getStr
(
type
.
equals
(
"install"
)
?
"installId"
:
"upgradeId"
));
.
put
(
"size"
,
o
.
getStr
(
"fileSize"
))
map
.
put
(
"name"
,
StrUtil
.
subBefore
(
o
.
getStr
(
"fileName"
),
'.'
,
true
));
.
put
(
"version"
,
o
.
getStr
(
"version"
))
map
.
put
(
"size"
,
o
.
getStr
(
"fileSize"
));
.
put
(
"localVersion"
,
null
)
map
.
put
(
"version"
,
o
.
getStr
(
"version"
));
.
put
(
"url"
,
o
.
getStr
(
"url"
))
map
.
put
(
"localVersion"
,
null
);
.
build
())
map
.
put
(
"url"
,
o
.
getStr
(
"url"
));
Long
id
=
Convert
.
toLong
(
map
.
get
(
"id"
));
map
.
put
(
"status"
,
SET
.
contains
(
id
)
?
"1"
:
MAP
.
containsKey
(
id
)
?
"2"
:
"0"
);
return
map
;
})
.
peek
(
m
->
programs
.
stream
()
.
peek
(
m
->
programs
.
stream
()
.
collect
(
Collectors
.
toMap
(
p
->
StrUtil
.
similar
(
p
.
get
(
"name"
).
toLowerCase
(),
m
.
get
(
"name"
).
toLowerCase
()),
.
collect
(
Collectors
.
toMap
(
p
->
StrUtil
.
similar
(
p
.
get
(
"name"
).
toLowerCase
(),
m
.
get
(
"name"
).
toLowerCase
()),
p
->
StrUtil
.
nullToEmpty
(
p
.
get
(
"version"
)
),
(
l
,
r
)
->
r
))
p
->
p
.
getOrDefault
(
"version"
,
""
),
(
l
,
r
)
->
r
))
.
entrySet
()
.
entrySet
()
.
stream
()
.
stream
()
.
max
(
Map
.
Entry
.
comparingByKey
())
.
max
(
Map
.
Entry
.
comparingByKey
())
...
@@ -97,19 +112,27 @@ public class ProgramController {
...
@@ -97,19 +112,27 @@ public class ProgramController {
return
R
.
success
(
page
.
setRecords
(
list
));
return
R
.
success
(
page
.
setRecords
(
list
));
}
}
private
static
final
Set
<
String
>
SET
=
new
ConcurrentHashSet
<>();
private
static
final
Map
<
String
,
Thread
>
MAP
=
new
ConcurrentHashMap
<>();
@GetMapping
(
value
=
"download_and_install"
)
@GetMapping
(
value
=
"{type}/download_and_install"
)
public
void
downloadAndInstall
(
@RequestParam
@NotBlank
String
url
,
HttpServletResponse
response
)
throws
IOException
{
public
void
downloadAndInstall
(
@PathVariable
@Pattern
(
regexp
=
"install|upgrade"
)
String
type
,
@RequestParam
@NotNull
Long
id
,
@RequestParam
@NotBlank
String
url
,
HttpServletResponse
response
)
throws
IOException
{
File
dir
=
new
File
(
SysConfigUtil
.
getProperty
(
"download.path"
,
File
dir
=
new
File
(
SysConfigUtil
.
getProperty
(
"download.path"
,
System
.
getProperty
(
"user.home"
)
+
File
.
separator
+
"Downloads"
));
System
.
getProperty
(
"user.home"
)
+
File
.
separator
+
"Downloads"
));
if
(!
dir
.
exists
())
dir
.
mkdirs
();
if
(!
dir
.
exists
())
dir
.
mkdirs
();
HttpResponse
rsp
=
HttpUtil
.
createGet
(
url
).
execute
(
true
);
HttpResponse
rsp
=
HttpUtil
.
createGet
(
url
).
execute
(
true
);
double
length
=
rsp
.
contentLength
();
double
length
=
rsp
.
contentLength
();
DecimalFormat
decimalFormat
=
new
DecimalFormat
(
"0.#####"
);
DecimalFormat
decimalFormat
=
new
DecimalFormat
(
"0.#####"
);
String
key
=
type
+
"-"
+
id
;
File
file
=
rsp
.
writeBodyForFile
(
dir
,
new
StreamProgress
()
{
File
file
=
rsp
.
writeBodyForFile
(
dir
,
new
StreamProgress
()
{
@SneakyThrows
@SneakyThrows
@Override
@Override
public
void
start
()
{
public
void
start
()
{
SET
.
add
(
key
);
response
.
getWriter
().
write
(
"0\n"
);
response
.
getWriter
().
write
(
"0\n"
);
}
}
...
@@ -123,24 +146,43 @@ public class ProgramController {
...
@@ -123,24 +146,43 @@ public class ProgramController {
@Override
@Override
public
void
finish
()
{
public
void
finish
()
{
response
.
getWriter
().
close
();
response
.
getWriter
().
close
();
SET
.
remove
(
key
);
}
}
});
});
try
{
MAP
.
put
(
key
,
new
Thread
(()
->
{
Runtime
.
getRuntime
().
exec
(
"cmd /c "
+
file
.
getPath
());
int
exitVal
=
-
1
;
}
catch
(
Exception
e
)
{
try
{
log
.
error
(
"执行安装文件 {} 失败"
,
file
.
getPath
(),
e
);
exitVal
=
Runtime
.
getRuntime
().
exec
(
"cmd /c \""
+
file
.
getPath
()
+
"\""
).
waitFor
();
}
}
catch
(
Exception
e
)
{
log
.
error
(
"执行安装文件 {} 失败"
,
file
.
getPath
(),
e
);
}
MAP
.
remove
(
key
);
if
(
exitVal
==
0
)
{
String
reqUrl
=
gateway
+
StrUtil
.
format
(
type
.
equals
(
"install"
)
?
installStatusUpIssueUrl
:
upgradeStatusUpIssueUrl
,
MacAddrUtil
.
get
(),
id
);
HttpUtil
.
post
(
reqUrl
,
(
String
)
null
);
}
}));
MAP
.
get
(
key
).
start
();
}
@GetMapping
(
value
=
"{type}/is_installing"
)
public
R
<
Boolean
>
isInstalling
(
@PathVariable
@Pattern
(
regexp
=
"install|upgrade"
)
String
type
,
@RequestParam
@NotNull
Long
id
)
{
return
R
.
success
(
MAP
.
containsKey
(
type
+
"-"
+
id
));
}
}
@GetMapping
(
value
=
"get_version"
)
@GetMapping
(
value
=
"get_version"
)
public
R
<
String
>
getVersion
(
@RequestParam
@NotBlank
String
name
)
throws
IOException
{
public
R
<
String
>
getVersion
(
@RequestParam
@NotBlank
String
name
)
throws
IOException
{
installedProgramCache
.
loadProgramListJob
();
return
installedProgramCache
.
getPrograms
().
stream
()
return
installedProgramCache
.
getPrograms
().
stream
()
.
collect
(
Collectors
.
toMap
(
p
->
StrUtil
.
similar
(
p
.
get
(
"name"
).
toLowerCase
(),
name
.
toLowerCase
()),
.
collect
(
Collectors
.
toMap
(
p
->
StrUtil
.
similar
(
p
.
get
(
"name"
).
toLowerCase
(),
name
.
toLowerCase
()),
p
->
p
.
get
(
"version
"
),
(
l
,
r
)
->
r
))
p
->
p
.
get
OrDefault
(
"version"
,
"
"
),
(
l
,
r
)
->
r
))
.
entrySet
()
.
entrySet
()
.
stream
()
.
stream
()
.
max
(
Map
.
Entry
.
comparingByKey
())
.
max
(
Map
.
Entry
.
comparingByKey
())
.
filter
(
e
->
e
.
getKey
()
>=
MIN_MATCH
)
.
filter
(
e
->
e
.
getKey
()
>=
MIN_MATCH
)
.
filter
(
e
->
StrUtil
.
isNotBlank
(
e
.
getValue
()))
.
map
(
Map
.
Entry
::
getValue
)
.
map
(
Map
.
Entry
::
getValue
)
.
map
(
R:
:
success
)
.
map
(
R:
:
success
)
.
orElseGet
(
R:
:
success
);
.
orElseGet
(
R:
:
success
);
...
@@ -155,9 +197,8 @@ public class ProgramController {
...
@@ -155,9 +197,8 @@ public class ProgramController {
return
;
return
;
}
}
List
<
String
>
programNames
=
installedProgramCache
.
getPrograms
()
List
<
String
>
programNames
=
installedProgramCache
.
getPrograms
()
.
stream
().
map
(
p
->
p
.
get
(
"name"
)).
collect
(
Collectors
.
toList
());
.
stream
().
map
(
p
->
p
.
get
(
"name"
)).
sorted
().
collect
(
Collectors
.
toList
());
HttpUtil
.
post
(
gateway
+
addProgramUrl
,
HttpUtil
.
post
(
gateway
+
addProgramUrl
,
JSONUtil
.
createObj
().
set
(
"macAddress"
,
mac
).
set
(
"programList"
,
programNames
).
toString
());
JSONUtil
.
createObj
().
set
(
"macAddress"
,
mac
).
set
(
"programList"
,
programNames
).
toString
());
}
}
}
}
apq-pc-client/src/main/resources/application.yml
浏览文件 @
0b37f68d
...
@@ -44,9 +44,12 @@ apq:
...
@@ -44,9 +44,12 @@ apq:
device_info
:
/facility/facility/getByMacAddress?macAddress={}
device_info
:
/facility/facility/getByMacAddress?macAddress={}
install
:
/ops/install/getClientList?macAddress={}&pageNum={}&pageSize={}
install
:
/ops/install/getClientList?macAddress={}&pageNum={}&pageSize={}
upgrade
:
/ops/upgrade/getClientList?macAddress={}&pageNum={}&pageSize={}
upgrade
:
/ops/upgrade/getClientList?macAddress={}&pageNum={}&pageSize={}
install-status-upissue
:
/ops/install/upIssueStatus/{}/{}
upgrade-status-upissue
:
/ops/upgrade/upIssueStatus/{}/{}
add-program
:
/ops/program/addFacProgram
add-program
:
/ops/program/addFacProgram
send-control-req
:
/facility/facility/remoteRequest
send-control-req
:
/facility/facility/remoteRequest
# VNC中继服务器
# VNC中继服务器
vnc-repeater
:
120.24.236.245:5500
vnc-repeater
:
120.24.236.245:5500
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论