新增顺德仁医 采集器配置更新项目
parent
0ec0ccd7c9
commit
e6dbc1e9b7
@ -0,0 +1,33 @@
|
|||||||
|
package com.docus.server.api.collector.update;
|
||||||
|
|
||||||
|
import com.docus.server.vo.collector.update.CollectorUpdateVersionVO;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采集器更新 API
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-08-29
|
||||||
|
*/
|
||||||
|
@FeignClient(value = "docus-collector-update", contextId = "docus-collector-update.CollectorUpdateApi")
|
||||||
|
@RequestMapping("/collector/update")
|
||||||
|
public interface CollectorUpdateApi {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采集器版本号
|
||||||
|
*/
|
||||||
|
@GetMapping("/find")
|
||||||
|
CollectorUpdateVersionVO find() throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采集器部署包下载
|
||||||
|
*/
|
||||||
|
@GetMapping("/download")
|
||||||
|
void downloadFile(HttpServletResponse response) throws Exception;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.docus.server.vo.collector.update;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采集器更新配置 VO
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-08-29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ApiModel(value = "CollectorUpdateVersionVO", description = "采集器更新配置")
|
||||||
|
public class CollectorUpdateVersionVO implements Serializable {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "采集器版本号")
|
||||||
|
@JsonProperty(value = "UpdateNumber")
|
||||||
|
private String updateNumber;
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
@ -0,0 +1,73 @@
|
|||||||
|
<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd">
|
||||||
|
|
||||||
|
<id>exe</id>
|
||||||
|
<formats>
|
||||||
|
<format>dir</format>
|
||||||
|
</formats>
|
||||||
|
<includeBaseDirectory>false</includeBaseDirectory>
|
||||||
|
|
||||||
|
<fileSets>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/lib</outputDirectory>
|
||||||
|
<directory>${basedir}/target/lib</directory>
|
||||||
|
</fileSet>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/config</outputDirectory>
|
||||||
|
<directory>${basedir}/target/resources</directory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>*.xml</include>
|
||||||
|
<include>*.yml</include>
|
||||||
|
<include>*.properties</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/dataConfig</outputDirectory>
|
||||||
|
<directory>${basedir}/target/dataConfig</directory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>*.json</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<directory>${basedir}/target/resources/bin</directory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>*.bat</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<directory>${basedir}/target/resources/bin</directory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>*.xml</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<directory>${basedir}</directory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>*.exe</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
<!-- 将项目启动jar打包到boot目录中 -->
|
||||||
|
<fileSet>
|
||||||
|
<directory>${basedir}/target</directory>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<includes>
|
||||||
|
<include>${project.build.finalName}.jar</include>
|
||||||
|
</includes>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
</assembly>
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import com.docus.log.EnableTrackGroup;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
|
|
||||||
|
@EnableTrackGroup
|
||||||
|
@EnableAsync
|
||||||
|
@EnableFeignClients(basePackages = {"com.docus.core.excel.feign", "com.docus.server.api.collector.update"})
|
||||||
|
@SpringBootApplication(scanBasePackages = {"com.docus"})
|
||||||
|
public class AppBootstrap {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
|
||||||
|
SpringApplication.run(AppBootstrap.class, args);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.docus.server.common.event;
|
||||||
|
|
||||||
|
import com.docus.infrastructure.core.db.enums.IIntegerEnum;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程事件
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class FlowEvent extends ApplicationEvent {
|
||||||
|
/**
|
||||||
|
* 业务系统病案主键
|
||||||
|
*/
|
||||||
|
private final String patientId;
|
||||||
|
/**
|
||||||
|
* 自动分段流程类型
|
||||||
|
*/
|
||||||
|
private final FlowTypeEnum flowTypeEnum;
|
||||||
|
|
||||||
|
public FlowEvent(Object source, String patientId, FlowTypeEnum flowTypeEnum) {
|
||||||
|
super(source);
|
||||||
|
this.patientId = patientId;
|
||||||
|
this.flowTypeEnum = flowTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public enum FlowTypeEnum implements IIntegerEnum {
|
||||||
|
//正式
|
||||||
|
START_SEGMENT(1, "开始分段事件"),
|
||||||
|
START_OCR(2, "开始OCR事件"),
|
||||||
|
START_UPLOAD(3, "开始上传归档系统事件"),
|
||||||
|
|
||||||
|
//调试
|
||||||
|
START_SEGMENT_TEST(4, "开始分段测试事件"),
|
||||||
|
START_OCR_TEST(5, "开始OCR测试事件"),
|
||||||
|
START_UPLOAD_TEST(6, "开始上传归档系统测试事件");
|
||||||
|
|
||||||
|
private Integer value;
|
||||||
|
private String display;
|
||||||
|
|
||||||
|
FlowTypeEnum(Integer value, String display) {
|
||||||
|
this.value = value;
|
||||||
|
this.display = display;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getValue() {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplay() {
|
||||||
|
return this.display;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.docus.server.common.event;
|
||||||
|
|
||||||
|
import com.docus.log.executor.TrackRetrySpringExecutor;
|
||||||
|
import com.docus.log.handler.IJobHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class FlowEventListener {
|
||||||
|
|
||||||
|
@EventListener
|
||||||
|
@Async("threadPoolExecutor")
|
||||||
|
public void flowListen(FlowEvent fileEvent) throws Exception {
|
||||||
|
|
||||||
|
FlowEvent.FlowTypeEnum flowTypeEnum = fileEvent.getFlowTypeEnum();
|
||||||
|
|
||||||
|
IJobHandler jobHandler = TrackRetrySpringExecutor.loadJobHandler(flowTypeEnum.name());
|
||||||
|
|
||||||
|
jobHandler.execute(fileEvent.getPatientId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,313 @@
|
|||||||
|
package com.docus.server.common.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import oshi.SystemInfo;
|
||||||
|
import oshi.hardware.CentralProcessor;
|
||||||
|
import oshi.hardware.GlobalMemory;
|
||||||
|
import oshi.hardware.HardwareAbstractionLayer;
|
||||||
|
import oshi.hardware.NetworkIF;
|
||||||
|
import oshi.software.os.FileSystem;
|
||||||
|
import oshi.software.os.OSFileStore;
|
||||||
|
import oshi.software.os.OperatingSystem;
|
||||||
|
import oshi.util.Util;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.Formatter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统消息工具类
|
||||||
|
**/
|
||||||
|
public class SystemInfoUtils {
|
||||||
|
|
||||||
|
private static final int OSHI_WAIT_SECOND = 1000;
|
||||||
|
private static final int SLEEP_TIME = 2 * 1000;
|
||||||
|
private static SystemInfo systemInfo = new SystemInfo();
|
||||||
|
private static HardwareAbstractionLayer hardware = systemInfo.getHardware();
|
||||||
|
private static OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
JSONObject info = getInfo();
|
||||||
|
System.out.println(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject getCpuInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
CentralProcessor processor = hardware.getProcessor();
|
||||||
|
// CPU信息
|
||||||
|
long[] prevTicks = processor.getSystemCpuLoadTicks();
|
||||||
|
Util.sleep(OSHI_WAIT_SECOND);
|
||||||
|
long[] ticks = processor.getSystemCpuLoadTicks();
|
||||||
|
long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
|
||||||
|
long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
|
||||||
|
long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
|
||||||
|
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
|
||||||
|
long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
|
||||||
|
long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
|
||||||
|
long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
|
||||||
|
long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
|
||||||
|
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
|
||||||
|
//cpu核数
|
||||||
|
cpuInfo.put("cpuNum", processor.getLogicalProcessorCount());
|
||||||
|
//cpu系统使用率
|
||||||
|
cpuInfo.put("cSys", new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));
|
||||||
|
//cpu用户使用率
|
||||||
|
cpuInfo.put("user", new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));
|
||||||
|
//cpu当前等待率
|
||||||
|
cpuInfo.put("iowait", new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));
|
||||||
|
//cpu当前使用率
|
||||||
|
cpuInfo.put("idle", new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统jvm信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getJvmInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
Runtime runtime = Runtime.getRuntime();
|
||||||
|
long jvmTotalMemoryByte = runtime.totalMemory();
|
||||||
|
long freeMemoryByte = runtime.freeMemory();
|
||||||
|
//jvm总内存
|
||||||
|
cpuInfo.put("total", formatByte(runtime.totalMemory()));
|
||||||
|
//空闲空间
|
||||||
|
cpuInfo.put("free", formatByte(runtime.freeMemory()));
|
||||||
|
//jvm最大可申请
|
||||||
|
cpuInfo.put("max", formatByte(runtime.maxMemory()));
|
||||||
|
//vm已使用内存
|
||||||
|
cpuInfo.put("user", formatByte(jvmTotalMemoryByte - freeMemoryByte));
|
||||||
|
//jvm内存使用率
|
||||||
|
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((jvmTotalMemoryByte - freeMemoryByte) * 1.0 / jvmTotalMemoryByte));
|
||||||
|
//jdk版本
|
||||||
|
cpuInfo.put("jdkVersion", props.getProperty("java.version"));
|
||||||
|
//jdk路径
|
||||||
|
cpuInfo.put("jdkHome", props.getProperty("java.home"));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统内存信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getMemInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
GlobalMemory memory = systemInfo.getHardware().getMemory();
|
||||||
|
//总内存
|
||||||
|
long totalByte = memory.getTotal();
|
||||||
|
//剩余
|
||||||
|
long acaliableByte = memory.getAvailable();
|
||||||
|
//总内存
|
||||||
|
cpuInfo.put("total", formatByte(totalByte));
|
||||||
|
//使用
|
||||||
|
cpuInfo.put("used", formatByte(totalByte - acaliableByte));
|
||||||
|
//剩余内存
|
||||||
|
cpuInfo.put("free", formatByte(acaliableByte));
|
||||||
|
//使用率
|
||||||
|
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((totalByte - acaliableByte) * 1.0 / totalByte));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 带宽
|
||||||
|
*/
|
||||||
|
public static JSONArray networkIFs() throws Exception {
|
||||||
|
JSONObject cpuInfo;
|
||||||
|
JSONArray sysFiles = new JSONArray();
|
||||||
|
|
||||||
|
List<NetworkIF> networkIFs = systemInfo.getHardware().getNetworkIFs();
|
||||||
|
for (NetworkIF networkIF : networkIFs) {
|
||||||
|
String name = networkIF.getName();
|
||||||
|
long receiveBytes = networkIF.getBytesRecv();
|
||||||
|
long transmitBytes = networkIF.getBytesSent();
|
||||||
|
|
||||||
|
cpuInfo = new JSONObject();
|
||||||
|
//名称
|
||||||
|
cpuInfo.put("name", name);
|
||||||
|
//网络接收
|
||||||
|
cpuInfo.put("receiveBytes", formatNumber(receiveBytes / (1024.0 * (2 * 1000 / 1000))));
|
||||||
|
//网络发送
|
||||||
|
cpuInfo.put("transmitBytes", formatNumber(transmitBytes / (1024.0 * (2 * 1000 / 1000))));
|
||||||
|
|
||||||
|
sysFiles.add(cpuInfo);
|
||||||
|
}
|
||||||
|
return sysFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject getNetWork() {
|
||||||
|
JSONObject networkInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
String os = props.getProperty("os.name").toLowerCase();
|
||||||
|
os = os.startsWith("win") ? "windows" : "linux";
|
||||||
|
Map<String, String> result = new HashMap<>();
|
||||||
|
Process pro = null;
|
||||||
|
Runtime r = Runtime.getRuntime();
|
||||||
|
BufferedReader input = null;
|
||||||
|
try {
|
||||||
|
String command = "windows".equals(os) ? "netstat -e" : "ifconfig";
|
||||||
|
pro = r.exec(command);
|
||||||
|
input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
|
||||||
|
long result1[] = readInLine(input, os);
|
||||||
|
Thread.sleep(SLEEP_TIME);
|
||||||
|
pro.destroy();
|
||||||
|
input.close();
|
||||||
|
pro = r.exec(command);
|
||||||
|
input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
|
||||||
|
long result2[] = readInLine(input, os);
|
||||||
|
String rxPercent = formatNumber((result2[0] - result1[0]) / (1024.0 * (SLEEP_TIME / 1000)));// 下行速率(kB/s)
|
||||||
|
String txPercent = formatNumber((result2[1] - result1[1]) / (1024.0 * (SLEEP_TIME / 1000)));// 上行速率(kB/s)
|
||||||
|
networkInfo.put("rxPercent", rxPercent);
|
||||||
|
networkInfo.put("txPercent", txPercent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (input != null) {
|
||||||
|
try {
|
||||||
|
input.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Optional.ofNullable(pro).ifPresent(p -> p.destroy());
|
||||||
|
}
|
||||||
|
return networkInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long[] readInLine(BufferedReader input, String osType) {
|
||||||
|
long arr[] = new long[2];
|
||||||
|
StringTokenizer tokenStat = null;
|
||||||
|
try {
|
||||||
|
if (osType.equals("linux")) { // 获取linux环境下的网口上下行速率
|
||||||
|
long rx = 0, tx = 0;
|
||||||
|
String line = null;
|
||||||
|
//RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0
|
||||||
|
//TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0
|
||||||
|
while ((line = input.readLine()) != null) {
|
||||||
|
if (line.indexOf("RX packets") >= 0) {
|
||||||
|
rx += Long.parseLong(line.substring(line.indexOf("RX packets") + 11, line.indexOf(" ", line.indexOf("RX packets") + 11)));
|
||||||
|
} else if (line.indexOf("TX packets") >= 0) {
|
||||||
|
tx += Long.parseLong(line.substring(line.indexOf("TX packets") + 11, line.indexOf(" ", line.indexOf("TX packets") + 11)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr[0] = rx;
|
||||||
|
arr[1] = tx;
|
||||||
|
} else { // 获取windows环境下的网口上下行速率
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
tokenStat = new StringTokenizer(input.readLine());
|
||||||
|
tokenStat.nextToken();
|
||||||
|
arr[0] = Long.parseLong(tokenStat.nextToken());
|
||||||
|
arr[1] = Long.parseLong(tokenStat.nextToken());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static String formatNumber(double f) {
|
||||||
|
return new Formatter().format("%.2f", f).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统盘符信息
|
||||||
|
*/
|
||||||
|
public static JSONArray getSysFileInfo() {
|
||||||
|
JSONObject cpuInfo;
|
||||||
|
JSONArray sysFiles = new JSONArray();
|
||||||
|
FileSystem fileSystem = operatingSystem.getFileSystem();
|
||||||
|
List<OSFileStore> fsArray = fileSystem.getFileStores();
|
||||||
|
for (OSFileStore fs : fsArray) {
|
||||||
|
cpuInfo = new JSONObject();
|
||||||
|
//盘符路径
|
||||||
|
cpuInfo.put("dirName", fs.getMount());
|
||||||
|
//盘符类型
|
||||||
|
cpuInfo.put("sysTypeName", fs.getType());
|
||||||
|
//文件类型
|
||||||
|
cpuInfo.put("typeName", fs.getName());
|
||||||
|
//总大小
|
||||||
|
cpuInfo.put("total", formatByte(fs.getTotalSpace()));
|
||||||
|
//剩余大小
|
||||||
|
cpuInfo.put("free", formatByte(fs.getUsableSpace()));
|
||||||
|
//已经使用量
|
||||||
|
cpuInfo.put("used", formatByte(fs.getTotalSpace() - fs.getUsableSpace()));
|
||||||
|
if (fs.getTotalSpace() == 0) {
|
||||||
|
//资源的使用率
|
||||||
|
cpuInfo.put("usage", 0);
|
||||||
|
} else {
|
||||||
|
cpuInfo.put("usage", new DecimalFormat("#.##%").format((fs.getTotalSpace() - fs.getUsableSpace()) * 1.0 / fs.getTotalSpace()));
|
||||||
|
}
|
||||||
|
sysFiles.add(cpuInfo);
|
||||||
|
}
|
||||||
|
return sysFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getSysInfo() throws UnknownHostException {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
//操作系统名
|
||||||
|
cpuInfo.put("osName", props.getProperty("os.name"));
|
||||||
|
//系统架构
|
||||||
|
cpuInfo.put("osArch", props.getProperty("os.arch"));
|
||||||
|
//服务器名称
|
||||||
|
cpuInfo.put("computerName", InetAddress.getLocalHost().getHostName());
|
||||||
|
//服务器Ip
|
||||||
|
cpuInfo.put("computerIp", InetAddress.getLocalHost().getHostAddress());
|
||||||
|
//项目路径
|
||||||
|
cpuInfo.put("userDir", props.getProperty("user.dir"));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有系统信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getInfo() throws Exception {
|
||||||
|
JSONObject info = new JSONObject();
|
||||||
|
info.put("cpuInfo", getCpuInfo());
|
||||||
|
info.put("jvmInfo", getJvmInfo());
|
||||||
|
info.put("memInfo", getMemInfo());
|
||||||
|
info.put("sysInfo", getSysInfo());
|
||||||
|
info.put("sysFileInfo", getSysFileInfo());
|
||||||
|
info.put("networkInfo", getNetWork());
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位转换
|
||||||
|
*/
|
||||||
|
private static String formatByte(long byteNumber) {
|
||||||
|
//换算单位
|
||||||
|
double FORMAT = 1024.0;
|
||||||
|
double kbNumber = byteNumber / FORMAT;
|
||||||
|
if (kbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##KB").format(kbNumber);
|
||||||
|
}
|
||||||
|
double mbNumber = kbNumber / FORMAT;
|
||||||
|
if (mbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##MB").format(mbNumber);
|
||||||
|
}
|
||||||
|
double gbNumber = mbNumber / FORMAT;
|
||||||
|
if (gbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##GB").format(gbNumber);
|
||||||
|
}
|
||||||
|
double tbNumber = gbNumber / FORMAT;
|
||||||
|
return new DecimalFormat("#.##TB").format(tbNumber);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.docus.server.controller;
|
||||||
|
|
||||||
|
import com.docus.server.api.collector.update.CollectorUpdateApi;
|
||||||
|
import com.docus.server.common.service.IFileUploadService;
|
||||||
|
import com.docus.server.service.ICollectorUpdateService;
|
||||||
|
import com.docus.server.vo.collector.update.CollectorUpdateVersionVO;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 患者信息表 控制器类
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-08-29
|
||||||
|
*/
|
||||||
|
@Api(value = "采集器更新配置", tags = "采集器更新配置")
|
||||||
|
@RestController
|
||||||
|
public class CollectorUpdateController implements CollectorUpdateApi {
|
||||||
|
@Resource
|
||||||
|
private ICollectorUpdateService iCollectorUpdateService;
|
||||||
|
@Resource
|
||||||
|
private IFileUploadService iFileUploadService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取采集器版本号
|
||||||
|
*/
|
||||||
|
@ApiOperation("获取采集器版本号")
|
||||||
|
@Override
|
||||||
|
public CollectorUpdateVersionVO find() throws Exception {
|
||||||
|
return iCollectorUpdateService.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采集器部署包下载
|
||||||
|
*/
|
||||||
|
@ApiOperation("采集器部署包下载")
|
||||||
|
@Override
|
||||||
|
public void downloadFile(HttpServletResponse response) throws Exception {
|
||||||
|
|
||||||
|
String filePath = iCollectorUpdateService.getFilePath();
|
||||||
|
|
||||||
|
iFileUploadService.downloadFile(filePath, response);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.docus.server.infrastructure.cache;
|
||||||
|
|
||||||
|
import com.docus.server.annotation.CacheLayer;
|
||||||
|
|
||||||
|
@CacheLayer("schetaskCacheLayer")
|
||||||
|
public class TaskCacheLayer {
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package com.docus.server.infrastructure.client;
|
||||||
|
|
||||||
|
public class DownLoadAPI {
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.docus.server.service;
|
||||||
|
|
||||||
|
import com.docus.server.vo.collector.update.CollectorUpdateVersionVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 患者信息表 服务接口
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-08-29
|
||||||
|
*/
|
||||||
|
public interface ICollectorUpdateService {
|
||||||
|
|
||||||
|
CollectorUpdateVersionVO find() throws Exception;
|
||||||
|
|
||||||
|
String getFilePath() throws Exception;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.docus.server.service.impl;
|
||||||
|
|
||||||
|
import com.docus.server.common.util.YmlUtil;
|
||||||
|
import com.docus.server.service.ICollectorUpdateService;
|
||||||
|
import com.docus.server.vo.collector.update.CollectorUpdateVersionVO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 患者信息表 服务实现类
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-08-29
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class CollectorUpdateServiceImpl implements ICollectorUpdateService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CollectorUpdateVersionVO find() throws Exception {
|
||||||
|
|
||||||
|
String version = loadYaml("docus.collector.version");
|
||||||
|
|
||||||
|
return CollectorUpdateVersionVO.builder().updateNumber(version).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFilePath() throws Exception {
|
||||||
|
|
||||||
|
return loadYaml("docus.collector.download-folder");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String loadYaml(String key) throws Exception {
|
||||||
|
LinkedHashMap params = YmlUtil.loadYaml("bootstrap.yml");
|
||||||
|
|
||||||
|
return (String) YmlUtil.getValByKey(params, key);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
#当前项目的根package
|
||||||
|
api.base-package=com.docus.server
|
||||||
|
|
||||||
|
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||||
|
spring.datasource.url=jdbc:mysql://db.docus.cn:3306/docus_ocr?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
|
||||||
|
spring.datasource.username=docus
|
||||||
|
spring.datasource.password=docus702
|
||||||
|
|
||||||
|
mybatis-plus.type-enums-package=com.docus.server.enums
|
@ -0,0 +1,6 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
|
WinSW.exe status|findstr NonExistent && winsw install
|
||||||
|
|
||||||
|
WinSW.exe status|findstr stopped && winsw start
|
@ -0,0 +1,21 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
set deployDir=%1\@project.artifactId@
|
||||||
|
if %deployDir%=="" set deployDir=d:\webroot\@project.artifactId@
|
||||||
|
|
||||||
|
set curr_file=%cd%
|
||||||
|
cd /d %deployDir%
|
||||||
|
call stop.bat
|
||||||
|
sc query @project.artifactId@ |Find "RUNNING" && ping 127.0.0.1 -n 10 >nul
|
||||||
|
cd %curr_file%
|
||||||
|
rd/s/q %deployDir%\lib
|
||||||
|
rd/s/q %deployDir%\dataConfig
|
||||||
|
rd/s/q %deployDir%\config
|
||||||
|
rd/s/q %deployDir%\mybatis.mapper
|
||||||
|
del /s/q %deployDir%\*.jar
|
||||||
|
xcopy /Y/E/I * %deployDir%
|
||||||
|
|
||||||
|
cd /d %deployDir%
|
||||||
|
call auto.bat
|
||||||
|
cd %curr_file%
|
||||||
|
|
@ -0,0 +1,21 @@
|
|||||||
|
set java_opts=-Xms512m -Xmx512m
|
||||||
|
set key="java_opts"
|
||||||
|
|
||||||
|
|
||||||
|
rem 文件不存在,就跳过
|
||||||
|
if not exist java-ops.ini goto end
|
||||||
|
|
||||||
|
for /f "tokens=1,2 delims==" %%i in (java-ops.ini) do (
|
||||||
|
if "%%i"==%key% set java_opts=%%j)
|
||||||
|
echo java_opts is : %java_opts%
|
||||||
|
|
||||||
|
:end
|
||||||
|
|
||||||
|
rem 启动java
|
||||||
|
|
||||||
|
java %java_opts% -Dfile.encoding=utf-8 -jar -Dspring.profiles.active=@profile.name@ -Dloader.path=config,lib @project.build.finalName@.jar
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
winsw stop
|
@ -0,0 +1,47 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
set curr_file=%cd%
|
||||||
|
|
||||||
|
set parentDir=%1
|
||||||
|
if %parentDir%=="" set deployDir=d:\webroot
|
||||||
|
|
||||||
|
|
||||||
|
set deployDir=%parentDir%\@project.artifactId@
|
||||||
|
|
||||||
|
set backupDir=%parentDir%\backup
|
||||||
|
|
||||||
|
set dateStr=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
|
||||||
|
|
||||||
|
|
||||||
|
cd /d %deployDir%
|
||||||
|
|
||||||
|
call stop.bat
|
||||||
|
sc query @project.artifactId@ |Find "RUNNING" && ping 127.0.0.1 -n 10 >nul
|
||||||
|
|
||||||
|
cd /d %parentDir%
|
||||||
|
|
||||||
|
xcopy /Y/E/I project.artifactId@\lib %backupDir%\%dateStr%\@project.artifactId@lib
|
||||||
|
xcopy /Y/E/I project.artifactId@\config %backupDir%\%dateStr%\@project.artifactId@config
|
||||||
|
xcopy /Y/E/I project.artifactId@\*.jar %backupDir%\%dateStr%\@project.artifactId@
|
||||||
|
xcopy /Y/E/I project.artifactId@\*.bat %backupDir%\%dateStr%\@project.artifactId@
|
||||||
|
xcopy /Y/E/I project.artifactId@\*.exe %backupDir%\%dateStr%\@project.artifactId@
|
||||||
|
xcopy /Y/E/I project.artifactId@\*.xml %backupDir%\%dateStr%\@project.artifactId@
|
||||||
|
|
||||||
|
|
||||||
|
cd %curr_file%
|
||||||
|
|
||||||
|
rd/s/q %deployDir%\lib
|
||||||
|
rd/s/q %deployDir%\config
|
||||||
|
del /s/q %deployDir%\*.jar
|
||||||
|
|
||||||
|
|
||||||
|
xcopy /Y/E/I lib %deployDir%\lib
|
||||||
|
xcopy /Y/E/I config %deployDir%\config
|
||||||
|
xcopy /Y/E/I *.jar %deployDir%
|
||||||
|
xcopy /Y/E/I *.bat %deployDir%
|
||||||
|
xcopy /Y/E/I *.exe %deployDir%
|
||||||
|
xcopy /Y/E/I *.xml %deployDir%
|
||||||
|
|
||||||
|
cd /d %deployDir%
|
||||||
|
call auto.bat
|
||||||
|
cd %curr_file%
|
@ -0,0 +1,8 @@
|
|||||||
|
<service>
|
||||||
|
<id>docus-collector-update</id>
|
||||||
|
<name>生产-采集器更新(docus-collector-update)-服务</name>
|
||||||
|
<description>生产-采集器更新(docus-collector-update)-服务</description>
|
||||||
|
<startmode>Automatic</startmode>
|
||||||
|
<executable>%BASE%\start.bat</executable>
|
||||||
|
<log mode="none"></log>
|
||||||
|
</service>
|
@ -0,0 +1,45 @@
|
|||||||
|
server:
|
||||||
|
port: 9116
|
||||||
|
spring:
|
||||||
|
profiles:
|
||||||
|
active: dev
|
||||||
|
application:
|
||||||
|
name: @artifactId@
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
max-file-size: 100MB
|
||||||
|
max-request-size: 200MB
|
||||||
|
redis:
|
||||||
|
host: redis.docus.cn
|
||||||
|
password: JSdocus@702
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
discovery:
|
||||||
|
server-addr: nacos.docus.cn
|
||||||
|
namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5
|
||||||
|
config:
|
||||||
|
server-addr: ${spring.cloud.nacos.discovery.server-addr}
|
||||||
|
namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5
|
||||||
|
file-extension: yml
|
||||||
|
shared-configs:
|
||||||
|
- comm.${spring.cloud.nacos.config.file-extension}
|
||||||
|
|
||||||
|
mybatis-plus:
|
||||||
|
configuration:
|
||||||
|
map-underscore-to-camel-case: true
|
||||||
|
call-setters-on-nulls: true
|
||||||
|
jdbc-type-for-null: null
|
||||||
|
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||||
|
global-config:
|
||||||
|
db-config:
|
||||||
|
update-strategy: ignored
|
||||||
|
field-strategy: NOT_EMPTY
|
||||||
|
db-type: MYSQL
|
||||||
|
mapper-locations: classpath*:/mapper/*Mapper.xml
|
||||||
|
type-enums-package: com.docus.server.enums
|
||||||
|
|
||||||
|
|
||||||
|
docus:
|
||||||
|
collector:
|
||||||
|
version: 1.0.0.1
|
||||||
|
download-folder: D:\\JS\\UpateGD\\collector.zip
|
@ -0,0 +1,2 @@
|
|||||||
|
# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
|
||||||
|
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import oshi.SystemInfo;
|
||||||
|
import oshi.hardware.CentralProcessor;
|
||||||
|
import oshi.hardware.GlobalMemory;
|
||||||
|
import oshi.hardware.HardwareAbstractionLayer;
|
||||||
|
import oshi.hardware.NetworkIF;
|
||||||
|
import oshi.software.os.FileSystem;
|
||||||
|
import oshi.software.os.OSFileStore;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Example {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
|
CentralProcessor processor = systemInfo.getHardware().getProcessor();
|
||||||
|
int logicalProcessorCount = processor.getLogicalProcessorCount();
|
||||||
|
String cpuModel = processor.getProcessorIdentifier().getName();
|
||||||
|
long[] systemCpuLoadTicks = processor.getSystemCpuLoadTicks();
|
||||||
|
|
||||||
|
System.out.println(logicalProcessorCount);
|
||||||
|
System.out.println(cpuModel);
|
||||||
|
System.out.println(Arrays.asList(systemCpuLoadTicks));
|
||||||
|
|
||||||
|
GlobalMemory memory = systemInfo.getHardware().getMemory();
|
||||||
|
long totalMemorySize = memory.getTotal();
|
||||||
|
long availableMemorySize = memory.getAvailable();
|
||||||
|
double memoryUsage = (totalMemorySize - availableMemorySize) * 100.0 / totalMemorySize;
|
||||||
|
System.out.println(totalMemorySize);
|
||||||
|
System.out.println(availableMemorySize);
|
||||||
|
System.out.println(memoryUsage);
|
||||||
|
|
||||||
|
HardwareAbstractionLayer hal = systemInfo.getHardware();
|
||||||
|
FileSystem fileSystem = systemInfo.getOperatingSystem().getFileSystem();
|
||||||
|
List<OSFileStore> fileStores = fileSystem.getFileStores();
|
||||||
|
for (OSFileStore store : fileStores) {
|
||||||
|
long totalSpace = store.getTotalSpace();
|
||||||
|
long usableSpace = store.getUsableSpace();
|
||||||
|
double usage = (totalSpace - usableSpace) * 100.0 / totalSpace;
|
||||||
|
System.out.println(totalSpace);
|
||||||
|
System.out.println(usableSpace);
|
||||||
|
System.out.println(usage);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<NetworkIF> networkIFs = systemInfo.getHardware().getNetworkIFs();
|
||||||
|
for (NetworkIF networkIF : networkIFs) {
|
||||||
|
String name = networkIF.getName();
|
||||||
|
long receiveBytes = networkIF.getBytesRecv();
|
||||||
|
long transmitBytes = networkIF.getBytesSent();
|
||||||
|
System.out.println(name);
|
||||||
|
System.out.println(receiveBytes);
|
||||||
|
System.out.println(transmitBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ZipUtil;
|
||||||
|
import cn.hutool.http.HttpRequest;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件上传下载 API
|
||||||
|
*
|
||||||
|
* @author AutoGenerator
|
||||||
|
* @since 2023-07-15
|
||||||
|
*/
|
||||||
|
@SpringBootTest
|
||||||
|
public class FileController {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void test1() throws Exception {
|
||||||
|
ZipUtil.unzip("/Users/linruifeng/Desktop/collector_packages/collector.zip", "/Users/linruifeng/Desktop/collector_packages");
|
||||||
|
// ZipUtil.unGzip(new GZIPInputStream(new FileInputStream(new File("/Users/linruifeng/Desktop/collector_packages/index.tar.gz"))));
|
||||||
|
// FileUtils.unTarGz("/Users/linruifeng/Desktop/collector_packages/", "/Users/linruifeng/Desktop/collector_packages/test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("test")
|
||||||
|
@PostMapping("/test")
|
||||||
|
public void test2() throws Exception {
|
||||||
|
File file = new File("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg");
|
||||||
|
File file1 = new File("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174052\\麻醉.jpg");
|
||||||
|
|
||||||
|
Map<String, Object> data = new HashMap<>();
|
||||||
|
data.put("files", file);
|
||||||
|
data.put("filetype", "jpg");
|
||||||
|
|
||||||
|
ArrayList<File> files = Lists.newArrayList(file, file1);
|
||||||
|
|
||||||
|
String body = HttpRequest.post("http://localhost:9115/file/upload")
|
||||||
|
.form("files", files.toArray(new File[files.size()]))
|
||||||
|
.form("pathKey", "{\n" +
|
||||||
|
" \"success\": true,\n" +
|
||||||
|
" \"datas\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"index\": 0,\n" +
|
||||||
|
" \"file_type\": \"string\",\n" +
|
||||||
|
" \"angle\": \"string\",\n" +
|
||||||
|
" \"decline\": true,\n" +
|
||||||
|
" \"hand_shadow\": true,\n" +
|
||||||
|
" \"sort\": [\n" +
|
||||||
|
" \"string\"\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"data\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"boxes\": {\n" +
|
||||||
|
" \"left\": 0,\n" +
|
||||||
|
" \"right\": 0,\n" +
|
||||||
|
" \"top\": 0,\n" +
|
||||||
|
" \"bottom\": 0\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"text\": \"string\"\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ]\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"time\": 0,\n" +
|
||||||
|
" \"message\": \"string\"\n" +
|
||||||
|
"}")
|
||||||
|
.contentType("multipart/form-data")
|
||||||
|
.execute()
|
||||||
|
.body();
|
||||||
|
|
||||||
|
System.out.println(body);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,162 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import org.apache.tools.tar.TarInputStream;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: JavaCode
|
||||||
|
* @ClassName FileUtils
|
||||||
|
* @description:
|
||||||
|
* @author: ltcz99
|
||||||
|
* @create: 2023-04-16
|
||||||
|
* @Version 1.0
|
||||||
|
**/
|
||||||
|
public class FileUtils {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解压tar.gz文件到指定目录
|
||||||
|
*
|
||||||
|
* @param sourceDir 源文件夹
|
||||||
|
* @param destDir 解压后的目标文件夹
|
||||||
|
*/
|
||||||
|
public static void unTarGz(String sourceDir, String destDir) throws Exception {
|
||||||
|
File outFile = new File(sourceDir);
|
||||||
|
File[] files = outFile.listFiles();
|
||||||
|
try {
|
||||||
|
//创建输出目录
|
||||||
|
createDirectory(destDir, null);
|
||||||
|
TarInputStream tarIn;
|
||||||
|
int index = 1;
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.getName().contains("tar.gz")) {
|
||||||
|
tarIn = new TarInputStream(new GZIPInputStream(
|
||||||
|
new BufferedInputStream(new FileInputStream(file))),
|
||||||
|
1024 * 2);
|
||||||
|
|
||||||
|
String outFileName = destDir + "/" + file.getName();
|
||||||
|
OutputStream out = new FileOutputStream(new File(outFileName));
|
||||||
|
int length = 0;
|
||||||
|
byte[] b = new byte[2048];
|
||||||
|
while ((length = tarIn.read(b)) != -1) {
|
||||||
|
out.write(b, 0, length);
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
tarIn.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解压gz到指定的文件夹下面
|
||||||
|
*
|
||||||
|
* @param sourceDir
|
||||||
|
* @param destDir
|
||||||
|
*/
|
||||||
|
public static void unGzipFile(String sourceDir, String destDir) {
|
||||||
|
//创建输出目录
|
||||||
|
createDirectory(destDir, null);
|
||||||
|
File sourceFile = new File(sourceDir);
|
||||||
|
File[] files = sourceFile.listFiles();
|
||||||
|
try {
|
||||||
|
int index = 1;
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.getName().contains("gz")) {
|
||||||
|
FileInputStream fin = new FileInputStream(file);
|
||||||
|
//建立gzip解压工作流
|
||||||
|
GZIPInputStream gzin = new GZIPInputStream(fin);
|
||||||
|
//建立解压文件输出流
|
||||||
|
File tmpFile = new File(destDir + "/" + index++ + ".log");
|
||||||
|
FileOutputStream fout = new FileOutputStream(tmpFile);
|
||||||
|
int length;
|
||||||
|
byte[] buf = new byte[2048];
|
||||||
|
while ((length = gzin.read(buf, 0, buf.length)) != -1) {
|
||||||
|
fout.write(buf, 0, length);
|
||||||
|
}
|
||||||
|
gzin.close();
|
||||||
|
fout.close();
|
||||||
|
fin.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取文件到指定的文件夹下面
|
||||||
|
*
|
||||||
|
* @param sourceLogPath
|
||||||
|
* @param destLogPath
|
||||||
|
*/
|
||||||
|
public static void readFileToDestLogPath(String sourceLogPath, String destLogPath) {
|
||||||
|
File sourceFile = new File(sourceLogPath);
|
||||||
|
File[] files = sourceFile.listFiles();
|
||||||
|
for (File file : files) {
|
||||||
|
String fileName = destLogPath + "/" + file.getName();
|
||||||
|
File destFile = new File(fileName);
|
||||||
|
if (file.getName().contains("log") && !fileName.contains("gz")) {
|
||||||
|
try {
|
||||||
|
if (destFile.exists()) {
|
||||||
|
destFile.delete();
|
||||||
|
}
|
||||||
|
String logFile = sourceFile + "/" + file.getName();
|
||||||
|
FileInputStream fis = new FileInputStream(logFile);
|
||||||
|
FileOutputStream fos = new FileOutputStream(destFile);
|
||||||
|
BufferedInputStream bis = new BufferedInputStream(fis);
|
||||||
|
BufferedOutputStream bos = new BufferedOutputStream(fos);
|
||||||
|
int len = 0;
|
||||||
|
while ((len = bis.read()) != -1) {
|
||||||
|
bos.write(len);
|
||||||
|
}
|
||||||
|
bos.flush();
|
||||||
|
// 关闭资源
|
||||||
|
fis.close();
|
||||||
|
bis.close();
|
||||||
|
fos.close();
|
||||||
|
bos.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建目录
|
||||||
|
*
|
||||||
|
* @param outputDir
|
||||||
|
* @param subDir
|
||||||
|
*/
|
||||||
|
public static void createDirectory(String outputDir, String subDir) {
|
||||||
|
File file = new File(outputDir);
|
||||||
|
//子目录不为空
|
||||||
|
if (!(subDir == null || subDir.trim().equals(""))) {
|
||||||
|
file = new File(outputDir + "/" + subDir);
|
||||||
|
}
|
||||||
|
if (!file.exists()) {
|
||||||
|
if (!file.getParentFile().exists()) {
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
file.mkdirs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String sourceDir = "/Users/ltcz99/Downloads/templog";
|
||||||
|
String destDir = "/Users/ltcz99/Downloads/unzip/";
|
||||||
|
//解压.gz文件到指定的文件件下面
|
||||||
|
unGzipFile(sourceDir, destDir);
|
||||||
|
// 解压tar.gz文件到指定的文件夹下面
|
||||||
|
unTarGz(sourceDir, destDir);
|
||||||
|
//读取特定的文件到指定的文件夹下面
|
||||||
|
readFileToDestLogPath(sourceDir, destDir);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,313 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import oshi.SystemInfo;
|
||||||
|
import oshi.hardware.CentralProcessor;
|
||||||
|
import oshi.hardware.GlobalMemory;
|
||||||
|
import oshi.hardware.HardwareAbstractionLayer;
|
||||||
|
import oshi.hardware.NetworkIF;
|
||||||
|
import oshi.software.os.FileSystem;
|
||||||
|
import oshi.software.os.OSFileStore;
|
||||||
|
import oshi.software.os.OperatingSystem;
|
||||||
|
import oshi.util.Util;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.Formatter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统消息工具类
|
||||||
|
**/
|
||||||
|
public class SystemInfoUtils {
|
||||||
|
|
||||||
|
private static final int OSHI_WAIT_SECOND = 1000;
|
||||||
|
private static final int SLEEP_TIME = 2 * 1000;
|
||||||
|
private static SystemInfo systemInfo = new SystemInfo();
|
||||||
|
private static HardwareAbstractionLayer hardware = systemInfo.getHardware();
|
||||||
|
private static OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
JSONObject info = getInfo();
|
||||||
|
System.out.println(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject getCpuInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
CentralProcessor processor = hardware.getProcessor();
|
||||||
|
// CPU信息
|
||||||
|
long[] prevTicks = processor.getSystemCpuLoadTicks();
|
||||||
|
Util.sleep(OSHI_WAIT_SECOND);
|
||||||
|
long[] ticks = processor.getSystemCpuLoadTicks();
|
||||||
|
long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
|
||||||
|
long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
|
||||||
|
long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
|
||||||
|
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
|
||||||
|
long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
|
||||||
|
long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
|
||||||
|
long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
|
||||||
|
long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
|
||||||
|
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
|
||||||
|
//cpu核数
|
||||||
|
cpuInfo.put("cpuNum", processor.getLogicalProcessorCount());
|
||||||
|
//cpu系统使用率
|
||||||
|
cpuInfo.put("cSys", new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));
|
||||||
|
//cpu用户使用率
|
||||||
|
cpuInfo.put("user", new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));
|
||||||
|
//cpu当前等待率
|
||||||
|
cpuInfo.put("iowait", new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));
|
||||||
|
//cpu当前使用率
|
||||||
|
cpuInfo.put("idle", new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统jvm信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getJvmInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
Runtime runtime = Runtime.getRuntime();
|
||||||
|
long jvmTotalMemoryByte = runtime.totalMemory();
|
||||||
|
long freeMemoryByte = runtime.freeMemory();
|
||||||
|
//jvm总内存
|
||||||
|
cpuInfo.put("total", formatByte(runtime.totalMemory()));
|
||||||
|
//空闲空间
|
||||||
|
cpuInfo.put("free", formatByte(runtime.freeMemory()));
|
||||||
|
//jvm最大可申请
|
||||||
|
cpuInfo.put("max", formatByte(runtime.maxMemory()));
|
||||||
|
//vm已使用内存
|
||||||
|
cpuInfo.put("user", formatByte(jvmTotalMemoryByte - freeMemoryByte));
|
||||||
|
//jvm内存使用率
|
||||||
|
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((jvmTotalMemoryByte - freeMemoryByte) * 1.0 / jvmTotalMemoryByte));
|
||||||
|
//jdk版本
|
||||||
|
cpuInfo.put("jdkVersion", props.getProperty("java.version"));
|
||||||
|
//jdk路径
|
||||||
|
cpuInfo.put("jdkHome", props.getProperty("java.home"));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统内存信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getMemInfo() {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
GlobalMemory memory = systemInfo.getHardware().getMemory();
|
||||||
|
//总内存
|
||||||
|
long totalByte = memory.getTotal();
|
||||||
|
//剩余
|
||||||
|
long acaliableByte = memory.getAvailable();
|
||||||
|
//总内存
|
||||||
|
cpuInfo.put("total", formatByte(totalByte));
|
||||||
|
//使用
|
||||||
|
cpuInfo.put("used", formatByte(totalByte - acaliableByte));
|
||||||
|
//剩余内存
|
||||||
|
cpuInfo.put("free", formatByte(acaliableByte));
|
||||||
|
//使用率
|
||||||
|
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((totalByte - acaliableByte) * 1.0 / totalByte));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 带宽
|
||||||
|
*/
|
||||||
|
public static JSONArray networkIFs() throws Exception {
|
||||||
|
JSONObject cpuInfo;
|
||||||
|
JSONArray sysFiles = new JSONArray();
|
||||||
|
|
||||||
|
List<NetworkIF> networkIFs = systemInfo.getHardware().getNetworkIFs();
|
||||||
|
for (NetworkIF networkIF : networkIFs) {
|
||||||
|
String name = networkIF.getName();
|
||||||
|
long receiveBytes = networkIF.getBytesRecv();
|
||||||
|
long transmitBytes = networkIF.getBytesSent();
|
||||||
|
|
||||||
|
cpuInfo = new JSONObject();
|
||||||
|
//名称
|
||||||
|
cpuInfo.put("name", name);
|
||||||
|
//网络接收
|
||||||
|
cpuInfo.put("receiveBytes", formatNumber(receiveBytes / (1024.0 * (2 * 1000 / 1000))));
|
||||||
|
//网络发送
|
||||||
|
cpuInfo.put("transmitBytes", formatNumber(transmitBytes / (1024.0 * (2 * 1000 / 1000))));
|
||||||
|
|
||||||
|
sysFiles.add(cpuInfo);
|
||||||
|
}
|
||||||
|
return sysFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject getNetWork() {
|
||||||
|
JSONObject networkInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
String os = props.getProperty("os.name").toLowerCase();
|
||||||
|
os = os.startsWith("win") ? "windows" : "linux";
|
||||||
|
Map<String, String> result = new HashMap<>();
|
||||||
|
Process pro = null;
|
||||||
|
Runtime r = Runtime.getRuntime();
|
||||||
|
BufferedReader input = null;
|
||||||
|
try {
|
||||||
|
String command = "windows".equals(os) ? "netstat -e" : "ifconfig";
|
||||||
|
pro = r.exec(command);
|
||||||
|
input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
|
||||||
|
long result1[] = readInLine(input, os);
|
||||||
|
Thread.sleep(SLEEP_TIME);
|
||||||
|
pro.destroy();
|
||||||
|
input.close();
|
||||||
|
pro = r.exec(command);
|
||||||
|
input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
|
||||||
|
long result2[] = readInLine(input, os);
|
||||||
|
String rxPercent = formatNumber((result2[0] - result1[0]) / (1024.0 * (SLEEP_TIME / 1000)));// 下行速率(kB/s)
|
||||||
|
String txPercent = formatNumber((result2[1] - result1[1]) / (1024.0 * (SLEEP_TIME / 1000)));// 上行速率(kB/s)
|
||||||
|
networkInfo.put("rxPercent", rxPercent);
|
||||||
|
networkInfo.put("txPercent", txPercent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (input != null) {
|
||||||
|
try {
|
||||||
|
input.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Optional.ofNullable(pro).ifPresent(p -> p.destroy());
|
||||||
|
}
|
||||||
|
return networkInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long[] readInLine(BufferedReader input, String osType) {
|
||||||
|
long arr[] = new long[2];
|
||||||
|
StringTokenizer tokenStat = null;
|
||||||
|
try {
|
||||||
|
if (osType.equals("linux")) { // 获取linux环境下的网口上下行速率
|
||||||
|
long rx = 0, tx = 0;
|
||||||
|
String line = null;
|
||||||
|
//RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0
|
||||||
|
//TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0
|
||||||
|
while ((line = input.readLine()) != null) {
|
||||||
|
if (line.indexOf("RX packets") >= 0) {
|
||||||
|
rx += Long.parseLong(line.substring(line.indexOf("RX packets") + 11, line.indexOf(" ", line.indexOf("RX packets") + 11)));
|
||||||
|
} else if (line.indexOf("TX packets") >= 0) {
|
||||||
|
tx += Long.parseLong(line.substring(line.indexOf("TX packets") + 11, line.indexOf(" ", line.indexOf("TX packets") + 11)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr[0] = rx;
|
||||||
|
arr[1] = tx;
|
||||||
|
} else { // 获取windows环境下的网口上下行速率
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
input.readLine();
|
||||||
|
tokenStat = new StringTokenizer(input.readLine());
|
||||||
|
tokenStat.nextToken();
|
||||||
|
arr[0] = Long.parseLong(tokenStat.nextToken());
|
||||||
|
arr[1] = Long.parseLong(tokenStat.nextToken());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static String formatNumber(double f) {
|
||||||
|
return new Formatter().format("%.2f", f).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统盘符信息
|
||||||
|
*/
|
||||||
|
public static JSONArray getSysFileInfo() {
|
||||||
|
JSONObject cpuInfo;
|
||||||
|
JSONArray sysFiles = new JSONArray();
|
||||||
|
FileSystem fileSystem = operatingSystem.getFileSystem();
|
||||||
|
List<OSFileStore> fsArray = fileSystem.getFileStores();
|
||||||
|
for (OSFileStore fs : fsArray) {
|
||||||
|
cpuInfo = new JSONObject();
|
||||||
|
//盘符路径
|
||||||
|
cpuInfo.put("dirName", fs.getMount());
|
||||||
|
//盘符类型
|
||||||
|
cpuInfo.put("sysTypeName", fs.getType());
|
||||||
|
//文件类型
|
||||||
|
cpuInfo.put("typeName", fs.getName());
|
||||||
|
//总大小
|
||||||
|
cpuInfo.put("total", formatByte(fs.getTotalSpace()));
|
||||||
|
//剩余大小
|
||||||
|
cpuInfo.put("free", formatByte(fs.getUsableSpace()));
|
||||||
|
//已经使用量
|
||||||
|
cpuInfo.put("used", formatByte(fs.getTotalSpace() - fs.getUsableSpace()));
|
||||||
|
if (fs.getTotalSpace() == 0) {
|
||||||
|
//资源的使用率
|
||||||
|
cpuInfo.put("usage", 0);
|
||||||
|
} else {
|
||||||
|
cpuInfo.put("usage", new DecimalFormat("#.##%").format((fs.getTotalSpace() - fs.getUsableSpace()) * 1.0 / fs.getTotalSpace()));
|
||||||
|
}
|
||||||
|
sysFiles.add(cpuInfo);
|
||||||
|
}
|
||||||
|
return sysFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getSysInfo() throws UnknownHostException {
|
||||||
|
JSONObject cpuInfo = new JSONObject();
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
//操作系统名
|
||||||
|
cpuInfo.put("osName", props.getProperty("os.name"));
|
||||||
|
//系统架构
|
||||||
|
cpuInfo.put("osArch", props.getProperty("os.arch"));
|
||||||
|
//服务器名称
|
||||||
|
cpuInfo.put("computerName", InetAddress.getLocalHost().getHostName());
|
||||||
|
//服务器Ip
|
||||||
|
cpuInfo.put("computerIp", InetAddress.getLocalHost().getHostAddress());
|
||||||
|
//项目路径
|
||||||
|
cpuInfo.put("userDir", props.getProperty("user.dir"));
|
||||||
|
return cpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有系统信息
|
||||||
|
*/
|
||||||
|
public static JSONObject getInfo() throws Exception {
|
||||||
|
JSONObject info = new JSONObject();
|
||||||
|
info.put("cpuInfo", getCpuInfo());
|
||||||
|
info.put("jvmInfo", getJvmInfo());
|
||||||
|
info.put("memInfo", getMemInfo());
|
||||||
|
info.put("sysInfo", getSysInfo());
|
||||||
|
info.put("sysFileInfo", getSysFileInfo());
|
||||||
|
info.put("networkInfo", getNetWork());
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位转换
|
||||||
|
*/
|
||||||
|
private static String formatByte(long byteNumber) {
|
||||||
|
//换算单位
|
||||||
|
double FORMAT = 1024.0;
|
||||||
|
double kbNumber = byteNumber / FORMAT;
|
||||||
|
if (kbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##KB").format(kbNumber);
|
||||||
|
}
|
||||||
|
double mbNumber = kbNumber / FORMAT;
|
||||||
|
if (mbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##MB").format(mbNumber);
|
||||||
|
}
|
||||||
|
double gbNumber = mbNumber / FORMAT;
|
||||||
|
if (gbNumber < FORMAT) {
|
||||||
|
return new DecimalFormat("#.##GB").format(gbNumber);
|
||||||
|
}
|
||||||
|
double tbNumber = gbNumber / FORMAT;
|
||||||
|
return new DecimalFormat("#.##TB").format(tbNumber);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
package com.docus.server;
|
||||||
|
|
||||||
|
import cn.smallbun.screw.core.Configuration;
|
||||||
|
import cn.smallbun.screw.core.engine.EngineConfig;
|
||||||
|
import cn.smallbun.screw.core.engine.EngineFileType;
|
||||||
|
import cn.smallbun.screw.core.engine.EngineTemplateType;
|
||||||
|
import cn.smallbun.screw.core.execute.DocumentationExecute;
|
||||||
|
import cn.smallbun.screw.core.process.ProcessConfig;
|
||||||
|
import com.docus.server.api.ocr.OcrApi;
|
||||||
|
import com.docus.server.vo.ocr.OcrResponse;
|
||||||
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class ScrewTests {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
@Resource
|
||||||
|
private OcrApi ocrApi;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
|
||||||
|
HikariConfig hikariConfig = new HikariConfig();
|
||||||
|
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
||||||
|
hikariConfig.setJdbcUrl("jdbc:mysql://db.docus.cn:3306/docus-collector-scheduling?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
|
||||||
|
hikariConfig.setUsername("docus");
|
||||||
|
hikariConfig.setPassword("docus702");
|
||||||
|
//设置可以获取tables remarks信息
|
||||||
|
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
|
||||||
|
hikariConfig.setMinimumIdle(2);
|
||||||
|
hikariConfig.setMaximumPoolSize(5);
|
||||||
|
DataSource dataSource = new HikariDataSource(hikariConfig);
|
||||||
|
|
||||||
|
//生成文件配置
|
||||||
|
EngineConfig engineConfig = EngineConfig
|
||||||
|
.builder()
|
||||||
|
//文件生成路径
|
||||||
|
.fileOutputDir("h:\\file")
|
||||||
|
//打开目录
|
||||||
|
.openOutputDir(false)
|
||||||
|
//文件类型
|
||||||
|
.fileType(EngineFileType.HTML)
|
||||||
|
//生成模板实现
|
||||||
|
.produceType(EngineTemplateType.freemarker)
|
||||||
|
.build();
|
||||||
|
//配置想要生成的表
|
||||||
|
ProcessConfig processConfig = ProcessConfig
|
||||||
|
.builder()
|
||||||
|
//根据名称指定表生成
|
||||||
|
.designatedTableName(new ArrayList<>())
|
||||||
|
//根据表前缀生成
|
||||||
|
.designatedTablePrefix(new ArrayList<>())
|
||||||
|
//根据表后缀生成
|
||||||
|
.designatedTableSuffix(new ArrayList<>())
|
||||||
|
//忽略表名
|
||||||
|
.ignoreTableName(new ArrayList<>())
|
||||||
|
//忽略表前缀
|
||||||
|
.ignoreTablePrefix(new ArrayList<>())
|
||||||
|
//忽略表后缀
|
||||||
|
.ignoreTableSuffix(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
//生成文档配置
|
||||||
|
Configuration configuration = Configuration.builder()
|
||||||
|
.version("1.0.0")
|
||||||
|
.description("描述")
|
||||||
|
.dataSource(dataSource)
|
||||||
|
.engineConfig(engineConfig)
|
||||||
|
.produceConfig(processConfig)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
//生成
|
||||||
|
new DocumentationExecute(configuration).execute();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue