作者 钟来

plc终端本地文件管理功能

正在显示 17 个修改的文件 包含 50 行增加51 行删除
... ... @@ -11,6 +11,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PreDestroy;
import java.nio.charset.StandardCharsets;
import java.util.Set;
public class MqttService {
... ... @@ -86,7 +87,7 @@ public class MqttService {
}
public void publish(String topic, String messageStr) throws MqttException {
MqttMessage message = new MqttMessage();
message.setPayload(messageStr.getBytes());
message.setPayload(messageStr.getBytes(StandardCharsets.UTF_8));
mqttclient.publish(topic,message);
}
... ...
package com.zhonglai.luhui.api.controller.iot.dto;
package com.zhonglai.luhui.device.dto.camera;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
... ...
package com.zhonglai.luhui.api.controller.iot.dto;
package com.zhonglai.luhui.device.dto.camera;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.api.controller.iot.dto;
package com.zhonglai.luhui.device.dto.camera;
import com.alibaba.fastjson.JSONObject;
... ...
package com.zhonglai.luhui.api.controller.iot.dto.camera;
package com.zhonglai.luhui.device.dto.camera;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.api.controller.iot.dto.camera;
package com.zhonglai.luhui.device.dto.camera;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.api.controller.iot.dto.camera;
package com.zhonglai.luhui.device.dto.camera;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.api.service;
package com.zhonglai.luhui.device.service.impl;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
... ...
package com.zhonglai.luhui.api.controller.iot;
package com.zhonglai.luhui.admin.controller.iot;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.api.controller.iot.dto.AddCamera;
import com.zhonglai.luhui.api.controller.iot.dto.HostCommand;
import com.zhonglai.luhui.api.controller.iot.dto.HostCommandFunction;
import com.zhonglai.luhui.api.controller.iot.dto.camera.StartStream;
import com.zhonglai.luhui.api.controller.iot.dto.camera.StartStreamBySerial;
import com.zhonglai.luhui.api.controller.iot.dto.camera.StopStream;
import com.zhonglai.luhui.api.service.RocketMqSendService;
import com.zhonglai.luhui.device.dto.CommandType;
import com.zhonglai.luhui.device.dto.DeviceCommand;
import com.zhonglai.luhui.device.dto.camera.*;
import com.zhonglai.luhui.device.service.impl.RocketMqSendService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ... @@ -49,7 +44,7 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "cd")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "path", value = "路径", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "path", value = "路径", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/cd/{deviceId}")
public AjaxResult cd(@PathVariable String deviceId,String path) {
... ... @@ -68,7 +63,7 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "mkdir")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/mkdir/{deviceId}")
public AjaxResult mkdir(@PathVariable String deviceId,String name) {
... ... @@ -87,7 +82,7 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "rm")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/rm/{deviceId}")
public AjaxResult rm(@PathVariable String deviceId,String name) {
... ... @@ -106,8 +101,8 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "copy")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "source", value = "源", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "target", value = "目标", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "source", value = "源", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "target", value = "目标", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/copy/{deviceId}")
public AjaxResult copy(@PathVariable String deviceId,String source,String target) {
... ... @@ -127,7 +122,7 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "mk")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/mk/{deviceId}")
public AjaxResult mk(@PathVariable String deviceId,String name) {
... ... @@ -146,8 +141,8 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "download")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "url", value = "url", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "url", value = "url", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/download/{deviceId}")
public AjaxResult download(@PathVariable String deviceId,String url,String name) {
... ... @@ -167,8 +162,8 @@ public class ControlGkjController extends BaseController {
@ApiOperation(value = "upload")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "url", value = "url", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "url", value = "url", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String", paramType = "query"),
})
@GetMapping("/upload/{deviceId}")
public AjaxResult upload(@PathVariable String deviceId,String url,String name) {
... ...
... ... @@ -18,7 +18,7 @@ get_system_performance() {
CPU_USAGE=\$(top -bn1 | grep "Cpu(s)" | awk '{print \$2 + \$4}')
# 获取内存使用率
MEMORY_USAGE=\$(free | grep Mem | awk '{print \$3/\$2 * 100.0}')
MEMORY_USAGE=\$(ps -eo rss= | awk -v total=\$(grep MemTotal /proc/meminfo | awk '{print \$2}') '{sum+=\$1} END {print sum/total*100}'}')
# 获取磁盘使用率
DISK_USAGE=\$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print \$5}' | tr -d '%' | paste -sd+ | bc)
... ...
... ... @@ -21,10 +21,10 @@ get_system_performance() {
MEMORY_USAGE=\$(free | grep Mem | awk '{print \$3/\$2 * 100.0}')
# 获取磁盘使用率
DISK_USAGE=\$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print \$5}' | tr -d '%' | paste -sd+ | bc)
DISK_USAGE=\$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print \$5}' | tr -d '%' | sort -nr | head -1)
# 获取系统连接数
CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l)
CONNECTION_COUNT=\$(ss -tan state established | wc -l)
# 获取前10进程的内存详情,使用 "fg9527" 分隔符
MEMORY_INFO=\$(ps aux --sort=-rss | head -n 11 | awk 'NR==1 {print "USERfg9527PIDfg9527MEMORY(M)fg9527COMMAND"; next} {cmd=""; for(i=11;i<=NF;i++) cmd=cmd\$i" "; printf "%sfg9527%sfg9527%.2fMfg9527%s\n", \$1, \$2, \$6/1024, cmd}' | tr '\n' ';')
... ...
... ... @@ -2,24 +2,18 @@ package com.zhonglai.luhui.api.controller.iot;
import com.google.gson.JsonObject;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.api.service.RocketMqSendService;
import com.zhonglai.luhui.device.domain.IotDevice;
import com.zhonglai.luhui.device.service.impl.RocketMqSendService;
import com.zhonglai.luhui.device.dto.CommandType;
import com.zhonglai.luhui.device.dto.DeviceCommand;
import com.zhonglai.luhui.device.service.IIotDeviceService;
import com.zhonglai.luhui.rocketmq.service.RocketMqService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
... ...
... ... @@ -7,7 +7,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.api.controller.iot.dto.GroupTerminalRequest;
import com.zhonglai.luhui.device.dto.camera.GroupTerminalRequest;
import com.zhonglai.luhui.api.controller.test.TestDto;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.device.domain.IotTerminal;
... ...
package com.zhonglai.luhui.api.controller.iot.dto;
public enum HostCommandFunction {
startStream,
stopStream,
startStreamBySerial,
getLocalIpAddress
}
... ... @@ -6,12 +6,13 @@ import com.zhonglai.luhui.device.analysis.comm.dto.ApiClientRePlyDto;
import com.zhonglai.luhui.device.analysis.dto.MessageCode;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
public class HostReq {
public AnalysisResult analysisPayload(byte[] payload)
{
return analysisPayload(new String(payload));
return analysisPayload(new String(payload, StandardCharsets.UTF_8));
}
public AnalysisResult analysisPayload(String payload) {
... ... @@ -25,6 +26,10 @@ public class HostReq {
}
message.setCode(MessageCode.DEFAULT_SUCCESS_CODE);
message.setMessage("操作成功");
}else
{
message.setCode(MessageCode.DEFAULT_FAIL_CODE);
message.setMessage(jsonObject.has("message")?jsonObject.get("message").getAsString():"操作失败");
}
return new AnalysisResult(false, true, null, message);
}
... ...
... ... @@ -47,6 +47,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
... ... @@ -89,7 +90,7 @@ public class DeviceCommandListenService implements RocketMQReplyListener<Message
public Message onMessage(MessageExt messageExt) {
log.info("监听到消息{}",messageExt);
String str = new String(messageExt.getBody());
String str = new String(messageExt.getBody(), StandardCharsets.UTF_8);
log.info("消息body{}",str);
DeviceCommand deviceCommand = GsonConstructor.get().fromJson(str, DeviceCommand.class);
... ...
package com.zhonglai.luhui.device.protocol.factory.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.*;
import com.ruoyi.common.utils.GsonConstructor;
... ... @@ -260,10 +261,20 @@ public class IotThingsModelService {
}
// 不要再无脑 toString(),直接走 safeNewhingsModel
JsonElement fieldElement = GsonConstructor.get().fromJson(
String.valueOf(jsData.get(key)),
JsonElement.class
);
Object fieldObj = jsData.get(key);
JsonElement fieldElement;
if (fieldObj instanceof JSONObject || fieldObj instanceof JSONArray) {
// 已经是 JSON 对象/数组,直接转字符串再解析
fieldElement = GsonConstructor.get().fromJson(fieldObj.toString(), JsonElement.class);
} else {
// 普通值,直接包装成 JsonPrimitive
fieldElement = new JsonPrimitive(String.valueOf(fieldObj));
}
// JsonElement fieldElement = GsonConstructor.get().fromJson(
// String.valueOf(jsData.get(key)),
// JsonElement.class
// );
ThingsModelItemBase thingsModelBase =
ThingsModelItemBase.newhingsModelReverse(
... ...