提交 fa6db80a authored 作者: wangqiang's avatar wangqiang

Merge remote-tracking branch 'origin/master'

package com.priusis.controller;
import cn.hutool.core.convert.Convert;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
......@@ -48,6 +49,17 @@ public class ConfigController {
return R.success();
}
@PostMapping(value = "save_auto_upgrade")
public R<Void> saveAutoUpgrade(@RequestBody Map<String, String> params) throws IOException {
SysConfigUtil.saveProperty("auto.upgrade", params.get("enable"));
return R.success();
}
@GetMapping(value = "get_auto_upgrade")
public R<Boolean> getAutoUpgrade() throws IOException {
return R.success(Convert.toBool(SysConfigUtil.getProperty("auto.upgrade"), false));
}
@GetMapping(value = "get_device_sn")
public R<String> getDeviceSN() throws IOException {
return R.success(SysConfigUtil.getProperty("device.sn"));
......
......@@ -19,6 +19,7 @@ import com.priusis.util.SysConfigUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -98,19 +99,25 @@ public class ProgramController {
map.put("status", SET.contains(key) ? "1" : MAP.containsKey(key) ? "2" : "0");
return map;
})
/*.peek(m -> programs.stream()
.collect(Collectors.toMap(p -> StrUtil.similar(p.get("name").toLowerCase(), m.get("name").toLowerCase()),
p -> p.getOrDefault("version", ""), (l, r) -> r))
.entrySet()
.stream()
.max(Map.Entry.comparingByKey())
.filter(e -> e.getKey() >= MIN_MATCH)
.filter(e -> StrUtil.isNotBlank(e.getValue()))
.ifPresent(e -> m.put("localVersion", e.getValue())))*/
.peek(m -> programs.stream()
.filter(p -> p.get("name").equalsIgnoreCase(m.get("name")))
.findFirst()
.ifPresent(p -> m.put("localVersion", p.get("version"))))
/*.peek(m -> */
.peek(m -> {
if (type.equals("install")) {
programs.stream()
.filter(p -> p.get("name").equalsIgnoreCase(m.get("name")))
.findFirst()
.ifPresent(p -> m.put("localVersion", p.get("version")));
} else {
programs.stream()
.collect(Collectors.toMap(p -> StrUtil.similar(p.get("name").toLowerCase(), m.get("name").toLowerCase()),
p -> p.getOrDefault("version", ""), (l, r) -> r))
.entrySet()
.stream()
.max(Map.Entry.comparingByKey())
.filter(e -> e.getKey() >= MIN_MATCH)
.filter(e -> StrUtil.isNotBlank(e.getValue()))
.ifPresent(e -> m.put("localVersion", e.getValue()));
}
})
.collect(Collectors.toList());
return R.success(page.setRecords(list));
}
......@@ -206,26 +213,28 @@ public class ProgramController {
}
@GetMapping(value = "get_version")
public R<String> getVersion(@RequestParam @NotBlank String name) throws IOException {
@GetMapping(value = "{type}/get_version")
public R<String> getVersion(@PathVariable @Pattern(regexp = "install|upgrade") String type,
@RequestParam @NotBlank String name) throws IOException {
installedProgramCache.loadProgramListJob();
/*return installedProgramCache.getPrograms().stream()
.collect(Collectors.toMap(p -> StrUtil.similar(p.get("name").toLowerCase(), name.toLowerCase()),
p -> p.getOrDefault("version", ""), (l, r) -> r))
.entrySet()
.stream()
.max(Map.Entry.comparingByKey())
.filter(e -> e.getKey() >= MIN_MATCH)
.filter(e -> StrUtil.isNotBlank(e.getValue()))
.map(Map.Entry::getValue)
.map(R::success)
.orElseGet(R::success);*/
return installedProgramCache.getPrograms().stream()
.filter(p -> p.get("name").equalsIgnoreCase(name))
.findFirst()
.map(m -> m.get("version"))
.map(R::success)
.orElseGet(R::success);
return type.equals("install") ?
installedProgramCache.getPrograms().stream()
.filter(p -> p.get("name").equalsIgnoreCase(name))
.findFirst()
.map(m -> m.get("version"))
.map(R::success)
.orElseGet(R::success) :
installedProgramCache.getPrograms().stream()
.collect(Collectors.toMap(p -> StrUtil.similar(p.get("name").toLowerCase(), name.toLowerCase()),
p -> p.getOrDefault("version", ""), (l, r) -> r))
.entrySet()
.stream()
.max(Map.Entry.comparingByKey())
.filter(e -> e.getKey() >= MIN_MATCH)
.filter(e -> StrUtil.isNotBlank(e.getValue()))
.map(Map.Entry::getValue)
.map(R::success)
.orElseGet(R::success);
}
......@@ -276,4 +285,36 @@ public class ProgramController {
System.out.println("cmd /c tasklist -fi " + '"' + "imagename ne NT AUTHORITY SYSTEM" + '"' + " -fi " + '"' + "imagename ne NT AUTHORITY SYSTEM" + '"' + " /fo csv");
}
@Scheduled(fixedDelay = 60000)
protected void autoUpgradeJob() {
try {
boolean autoUpgrade = Convert.toBool(SysConfigUtil.getProperty("auto.upgrade"), false);
if (!autoUpgrade) return;
File dir = new File(SysConfigUtil.getProperty("download.path",
System.getProperty("user.dir").substring(0, 3) + "apqdownloads"));
if (!dir.exists()) dir.mkdirs();
list("upgrade", 1, 10000).getData().getRecords()
.parallelStream()
.filter(m -> ObjectUtil.notEqual(m.get("version"), m.get("localVersion")))
.forEach(m -> {
HttpResponse rsp = HttpUtil.createGet(m.get("url")).execute(true);
File file = rsp.writeBodyForFile(dir, null);
int exitVal = -1;
try {
exitVal = Runtime.getRuntime().exec("cmd /c \"" + file.getPath() + "\"").waitFor();
} catch (Exception e) {
log.error("执行安装文件 {} 失败", file.getPath(), e);
}
if (exitVal == 0) {
String reqUrl = gateway + StrUtil.format(upgradeStatusUpIssueUrl, MacAddrUtil.get(), m.get("id"));
HttpUtil.post(reqUrl, (String) null);
}
});
} catch (Exception e) {
log.error("自动升级任务执行异常", e);
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论