diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueRVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueRVO.java new file mode 100644 index 000000000..0b675b55c --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueRVO.java @@ -0,0 +1,10 @@ +package com.njcn.device.pq.pojo.advanced; + + +import lombok.Data; + +@Data +public class ContUpdateDevValueRVO { + private String len; + private ContUpdateDevValueVO data; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueVO.java new file mode 100644 index 000000000..8a5bc09b9 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateDevValueVO.java @@ -0,0 +1,12 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +@Data +public class ContUpdateDevValueVO { + private String type; + private String index; + private String hander; + private int[] interValue; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueRVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueRVO.java new file mode 100644 index 000000000..239762912 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueRVO.java @@ -0,0 +1,10 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +@Data +public class ContUpdateValueRVO { + private String len; + private ContUpdateValueVO data; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueVO.java new file mode 100644 index 000000000..8b0d5f471 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContUpdateValueVO.java @@ -0,0 +1,12 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +@Data +public class ContUpdateValueVO { + private String type; + private String index; + private String lineid; + private String hander; + private float[] value; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueRVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueRVO.java new file mode 100644 index 000000000..0e1203313 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueRVO.java @@ -0,0 +1,11 @@ +package com.njcn.device.pq.pojo.advanced; + + +import lombok.Data; + +@Data +public class ContValueRVO { + private String len; + private ContValueVO data; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueVO.java new file mode 100644 index 000000000..6bff19f96 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/ContValueVO.java @@ -0,0 +1,11 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +@Data +public class ContValueVO { + private String type; + private String index; + private String lineid; + private String hander; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDataVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDataVO.java new file mode 100644 index 000000000..e5e476629 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDataVO.java @@ -0,0 +1,18 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +import java.util.List; + +/*** + * @Description: + * @Author: wr + * @Date: 2023/8/16 16:10 + */ +@Data +public class UpDataVO { + private String type; + private String edIndex; + private String userIndex; + private List terminal; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDevVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDevVO.java new file mode 100644 index 000000000..0c846ee6f --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpDevVO.java @@ -0,0 +1,19 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +/** + * @Description + * @Author wr + * @Date 2022/8/14 + **/ +@Data +public class UpDevVO { + private String devIndex; + private String devName; + + public String getDevIndex() { + return devIndex; + } + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpParamVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpParamVO.java new file mode 100644 index 000000000..0c207fbe6 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/advanced/UpParamVO.java @@ -0,0 +1,16 @@ +package com.njcn.device.pq.pojo.advanced; + +import lombok.Data; + +/** + * @Author: wr + * @Date: 2023/8/16 16:10 + */ +@Data +public class UpParamVO { + private String len; + private UpDataVO data; +} + + + diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ConstantValueParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ConstantValueParam.java new file mode 100644 index 000000000..ffc9ee15c --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ConstantValueParam.java @@ -0,0 +1,80 @@ +package com.njcn.device.pq.pojo.param; + +import com.njcn.device.pq.pojo.po.PqsProtectvalue; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * @author wr + * @description + * @date 2023/8/11 9:20 + */ +@Data +public class ConstantValueParam implements Serializable { + + @ApiModelProperty(name = "hander", value = "用于匹配 0 定值 1 定值描述") + @NotNull(message = "用于匹配 0 定值 1 定值描述不能为空") + private Integer hander; + + @ApiModelProperty(name = "type", value = "区分内外定值") + @NotNull(message = "区分内外定值不能为空") + private Integer type; + + @ApiModelProperty(name = "json", value = "json数据") + @NotNull(message = "json数据不能为空") + private ConstantValue json; + + + @Data + public static class ConstantValue { + private List data; + private String devindex; + private Integer hander; + private String lineindex; + private String methodname; + } + + @Data + public static class Constant { + + @ApiModelProperty(name = "ip", value = "网络ip") + private String ip; + + @ApiModelProperty(name = "type", value = "区分内外定值") + private String type; + + @ApiModelProperty(name = "id", value = "监测编号或者终端编号") + @NotBlank(message = "装置系列字典不能为空") + private String id; + + @ApiModelProperty(name = "hander", value = "用于匹配 0 定值 1 定值描述") + @NotBlank(message = "装置系列字典不能为空") + private String hander; + } + + @Data + public static class ValueData extends Constant { + + @ApiModelProperty(name = "interValue", value = "数值") + private String interValue; + } + + @Data + public static class Upgrades { + + @ApiModelProperty(name = "list", value = "终端id集合") + @NotEmpty(message = "终端id集合不能为空") + private List list; + + @ApiModelProperty(name = "edIndex", value = "选中版本号id") + @NotBlank(message = "选中版本号id不能为空") + private String edIndex; + + } +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ProgramParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ProgramParam.java index d3ef8e4fc..fb8864d1d 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ProgramParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/ProgramParam.java @@ -3,6 +3,9 @@ package com.njcn.device.pq.pojo.param; import com.njcn.web.pojo.param.BaseParam; import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import java.io.Serializable; @@ -17,4 +20,15 @@ public class ProgramParam extends BaseParam implements Serializable { @ApiModelProperty(name = "devType", value = "装置系列,字典表", required = false) private String devType; + @Data + public static class Version{ + @ApiModelProperty(name = "devType", value = "装置系列,字典表") + @NotBlank(message = "装置系列字典不能为空") + private String devType; + + @ApiModelProperty(name = "devType", value = "版本编号集合") + @NotEmpty(message = "版本编号集合不能为空") + private String versionIds; + } + } \ No newline at end of file diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DevVersion.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DevVersion.java index f444d6dbc..e2a9aff20 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DevVersion.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DevVersion.java @@ -35,37 +35,18 @@ public class DevVersion extends BaseEntity { /** * 版本状态(0-前期版本;1-当前版本) */ - private Boolean flag; + private Integer flag; /** * 操作结果(0-升级失败;1-升级成功) */ - private Boolean result; + private Integer result; /** * 状态 0-删除;1-正常;默认正常 */ - private Boolean state; + private Integer state; - /** - * 创建用户 - */ - private String createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新用户 - */ - private String updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; private String devType; private String devTypeName; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectcontrolword.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectcontrolword.java new file mode 100644 index 000000000..ee471d742 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectcontrolword.java @@ -0,0 +1,57 @@ +package com.njcn.device.pq.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author wr + * @since 2023-08-10 + */ +@Getter +@Setter +@TableName("pqs_protectcontrolword") +public class PqsProtectcontrolword { + + private static final long serialVersionUID = 1L; + + /** + * PV_INDEX的外键(定值表的主键) + */ + @TableId(value = "pv_index") + private String pvIndex; + + /** + * 控制位序号0,1,2,3,……,15 + */ + private Integer typeNum; + + /** + * 控制位为0时表达意义 + */ + private String bit0; + + /** + * 控制位为1时表达意义 + */ + private String bit1; + + /** + * 描述 + */ + private String describe; + + /** + * 是否选中:0:否,1:是 + */ + private Integer flag; + + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectvalue.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectvalue.java new file mode 100644 index 000000000..5e56ec250 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsProtectvalue.java @@ -0,0 +1,96 @@ +package com.njcn.device.pq.pojo.po; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author wr + * @since 2023-08-10 + */ +@Getter +@Setter +@TableName("pqs_protectvalue") +public class PqsProtectvalue { + + private static final long serialVersionUID = 1L; + + /** + * 索引 + */ + @TableId(value = "pv_index") + private String pvIndex; + + /** + * 监测点序号,内部定值默认为1 + */ + @TableField( "cpu_no") + private Integer cpu_no; + + /** + * 终端类型GUID(PQS_Dicdata) + */ + @TableField("dev_type") + private String dev_type; + + /** + * 类型 80-外部定值 十进制类型 81-外部定值的十六进制类型 90-内部定值 十进制类型 91-内部定制 十六进制类型 + */ + private Integer type; + + @TableField( "dz_type") + private Integer dz_type; + + /** + * 单位 + */ + private String unit; + + /** + * 最大值 + */ + @TableField( "max_value") + private Float maxvalue; + + /** + * 最小值 + */ + @TableField( "min_value") + private Float minvalue; + + /** + * 默认值 + */ + @TableField( "default_value") + private Float defaultvalue; + + /** + * 设定值 + */ + @TableField( "value") + private Float value; + + /** + * 描述 + */ + @TableField( "description") + private String describe; + + /** + * 排序 + */ + private Integer sort; + + @TableField(exist = false) + List word; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceIpRVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceIpRVO.java new file mode 100644 index 000000000..bc6cda950 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceIpRVO.java @@ -0,0 +1,40 @@ +package com.njcn.device.pq.pojo.vo; + + +import com.njcn.device.pq.pojo.advanced.UpDevVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Description: 终端升级实体 + * @Author: wr + * @Date: 2023/8/16 15:28 + */ +@Data +public class DeviceIpRVO { + @ApiModelProperty("终端id") + private String devIndex; + + @ApiModelProperty("终端名称") + private String devName; + + @ApiModelProperty("前置ip") + private String ip; + + @ApiModelProperty("端口") + private Integer port; + + @ApiModelProperty("装置类型") + private String devType; + + @ApiModelProperty("装置系列") + private String devSeries; + + @ApiModelProperty("终端状态") + private Integer comFlag; + //扩展 + private List devlist; + private List indexlist; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalVersionVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalVersionVO.java index d76a879d4..7fd7672e5 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalVersionVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalVersionVO.java @@ -46,6 +46,45 @@ public class TerminalVersionVO implements Serializable { private String updateTime; @ApiModelProperty(name = "升级人员") private String updateBy; + @ApiModelProperty(name = "版本序号") + private String versionId; @ApiModelProperty(name = "子级") List children; + + @Data + public static class Version{ + + @ApiModelProperty(name = "终端编号") + private String id; + + @ApiModelProperty(name = "终端名称") + private String name; + + @ApiModelProperty(name = "版本序号") + private String versionName; + + @ApiModelProperty(name = "版本协议") + private String protocol; + + @ApiModelProperty(name = "版本日期") + private String versionDate; + + @ApiModelProperty(name = "终端系列") + private String devSeries; + + @ApiModelProperty(name = "终端型号") + private String devType; + + @ApiModelProperty(name = "供电公司") + private String gbName; + + @ApiModelProperty(name = "变电站") + private String subName; + + @ApiModelProperty(name = "更新时间") + private String updateTime; + + @ApiModelProperty(name = "修改人") + private String updateBy; + } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/VersionVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/VersionVO.java index b1a5db9ce..b5a1b9184 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/VersionVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/VersionVO.java @@ -80,4 +80,6 @@ public class VersionVO implements Serializable { @ApiModelProperty("文件名称") private String fileName; + @ApiModelProperty("是否存在文件:0=未有文件 1=已有文件") + private Integer isFile; } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceController.java index f5f9f25e6..5430ee5d5 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceController.java @@ -1,12 +1,30 @@ package com.njcn.device.pq.controller; +import cn.hutool.core.lang.Console; +import cn.hutool.core.util.StrUtil; +import com.github.tocrhz.mqtt.annotation.MqttSubscribe; +import com.github.tocrhz.mqtt.annotation.NamedValue; +import com.github.tocrhz.mqtt.annotation.Payload; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.pq.pojo.param.ConstantValueParam; import com.njcn.device.pq.service.IDeviceService; import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.RequestUtil; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.nio.charset.StandardCharsets; +import java.util.List; + /** * pqs @@ -22,7 +40,131 @@ import org.springframework.web.bind.annotation.RestController; public class DeviceController extends BaseController { private final IDeviceService iDeviceService; + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/socketLine") + @ApiOperation("获取监测点定值信息") + public HttpResult socketLine(@RequestBody @Validated ConstantValueParam.Constant param) { + String methodDescribe = getMethodDescribe("socketLine"); + if(StrUtil.isBlank(param.getIp())){ + param.setIp(RequestUtil.getRealIp()); + } + String s = iDeviceService.sentLine(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/updateSocketLine") + @ApiOperation("修改监测点定值信息") + public HttpResult updateSocketLine(@RequestBody @Validated ConstantValueParam.ValueData param) { + String methodDescribe = getMethodDescribe("updateSocketLine"); + if(StrUtil.isBlank(param.getIp())){ + param.setIp(RequestUtil.getRealIp()); + } + String s = iDeviceService.sentLineData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/socketDev") + @ApiOperation("获取终端定值信息") + public HttpResult socketDev(@RequestBody @Validated ConstantValueParam.Constant param) { + String methodDescribe = getMethodDescribe("socketDev"); + if(StrUtil.isBlank(param.getIp())){ + param.setIp(RequestUtil.getRealIp()); + } + String s = iDeviceService.sentDev(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/updateSocketDev") + @ApiOperation("修改终端定值信息") + public HttpResult updateSocketDev(@RequestBody @Validated ConstantValueParam.ValueData param) { + String methodDescribe = getMethodDescribe("updateSocketDev"); + if(StrUtil.isBlank(param.getIp())){ + param.setIp(RequestUtil.getRealIp()); + } + String s = iDeviceService.sentDevData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/socketDevProperty") + @ApiOperation("获取终端性能信息") + public HttpResult socketDevProperty(String devID) { + String methodDescribe = getMethodDescribe("socketDevProperty"); + String s = iDeviceService.socketDevProperty(devID); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/socketDevPropertyClose") + @ApiOperation("终端性能关闭") + public HttpResult socketDevPropertyClose(String devID) { + String methodDescribe = getMethodDescribe("socketDevPropertyClose"); + String s = iDeviceService.socketDevPropertyClose(devID); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/realTimeData") + @ApiOperation("监测点实时数据查看") + public HttpResult realTimeData(String lineID) { + String methodDescribe = getMethodDescribe("realTimeData"); + String s = iDeviceService.realTimeData(lineID); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/heartRealTimeData") + @ApiOperation("监测实施数据心跳") + public HttpResult heartRealTimeData(String lineID) { + String methodDescribe = getMethodDescribe("heartRealTimeData"); + String s = iDeviceService.heartRealTimeData(lineID); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/closeRealTimeData") + @ApiOperation("监测点实施数据关闭") + public HttpResult closeRealTimeData(String lineID) { + String methodDescribe = getMethodDescribe("closeRealTimeData"); + String s = iDeviceService.closeRealTimeData(lineID); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getDevUpgrades") + @ApiOperation("终端版本升级") + public HttpResult getDevUpgrades(@RequestBody @Validated ConstantValueParam.Upgrades param) { + String methodDescribe = getMethodDescribe("getDevUpgrades"); + String s = iDeviceService.getDevUpgrades(param.getList(),param.getEdIndex()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/closeUpgrades") + @ApiOperation("终端升级取消") + public HttpResult closeUpgrades(@RequestBody List devList) { + String methodDescribe = getMethodDescribe("closeUpgrades"); + String s = iDeviceService.closeUpgrades(devList); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/restartDev") + @ApiOperation("重启装置命令") + public HttpResult restartDev(@RequestBody List devList) { + String methodDescribe = getMethodDescribe("restartDev"); + String s = iDeviceService.restartDev(devList); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); + } + @MqttSubscribe(value = "/zl/devData/{devID}",qos = 1) + public void responseRtData(String topic, @NamedValue("devID") String pageId, MqttMessage message, @Payload String payload) { + Console.log("receive from : {}", topic); + Console.log("receive from : {}", pageId); + Console.log("message : {}", message.getPayload()); + Console.log("message payload : {}", new String(message.getPayload(), StandardCharsets.UTF_8)); + Console.log("string payload : {}", payload); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ProgramVersionController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ProgramVersionController.java index 6fceb4fb7..e44320559 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ProgramVersionController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ProgramVersionController.java @@ -7,7 +7,6 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; -import com.njcn.device.pq.pojo.param.LargeScreenParam; import com.njcn.device.pq.pojo.param.ProgramParam; import com.njcn.device.pq.pojo.vo.VersionVO; import com.njcn.device.pq.service.ProgramVersionService; @@ -24,6 +23,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; +import java.util.List; /** * @version 1.0.0 @@ -134,6 +134,14 @@ public class ProgramVersionController extends BaseController { } } - + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getVersion") + @ApiOperation("查看除本外其他版本信息") + @ApiImplicitParam(name = "param", value = "程序版本查询", required = true) + public HttpResult> getVersion(@RequestBody @Validated ProgramParam.Version param) { + String methodDescribe = getMethodDescribe("getVersion"); + List version = programService.getVersion(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, version, methodDescribe); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalVersionController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalVersionController.java index 517122627..273f5742c 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalVersionController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalVersionController.java @@ -62,7 +62,14 @@ public class TerminalVersionController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, resList, methodDescribe); } - + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getDevVersionList") + @ApiOperation("查询终端版本信息") + public HttpResult> getVersionList(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("getVersionList"); + List versionList = terminalVersionService.getVersionList(ids); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, versionList, methodDescribe); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ConstantValueController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ConstantValueController.java new file mode 100644 index 000000000..b101e4247 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ConstantValueController.java @@ -0,0 +1,70 @@ +package com.njcn.device.pq.controller.configuration; + +import cn.hutool.core.collection.CollUtil; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.pq.pojo.param.ConstantValueParam; +import com.njcn.device.pq.service.IPqsProtectvalueService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description:定值管理 + * @Author: wr + * @Date: 2023/8/10 18:30 + */ +@Api(tags = "定值管理") +@RestController +@RequestMapping("/constant") +@RequiredArgsConstructor +public class ConstantValueController extends BaseController { + + private final IPqsProtectvalueService iPqsProtectvalueService; + + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/quarryOutValue") + @ApiOperation("获取定值信息") + public HttpResult> quarryOutValue(String id, String isOutIn) { + String methodDescribe = getMethodDescribe("quarryOutValue"); + List objects = iPqsProtectvalueService.quarryOutValueBase(isOutIn, id); + if (CollUtil.isEmpty(objects)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, objects, methodDescribe); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, objects, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/updateDatabaseValue") + @ApiOperation("定值更新数据库Value") + public HttpResult updateDatabaseValue(String json) { + String methodDescribe = getMethodDescribe("updateDatabaseValue"); + Boolean aBoolean = iPqsProtectvalueService.updateDatabaseValue(json); + if (!aBoolean) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, true, methodDescribe); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, false, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/updateDatabase") + @ApiOperation("定值更新数据库") + public HttpResult updateDatabase(@RequestBody ConstantValueParam param) { + String methodDescribe = getMethodDescribe("updateDatabase"); + Boolean aBoolean = iPqsProtectvalueService.updateDatabase(param); + if (!aBoolean) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, true, methodDescribe); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, false, methodDescribe); + } + + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ProtectControlWordController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ProtectControlWordController.java new file mode 100644 index 000000000..da19f1653 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/configuration/ProtectControlWordController.java @@ -0,0 +1,61 @@ +package com.njcn.device.pq.controller.configuration; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.pq.pojo.po.PqsProtectcontrolword; +import com.njcn.device.pq.service.IPqsProtectcontrolwordService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import java.util.List; + +/** + * @Description: 定值控制定义表,管理 + * @Author: wr + * @Date: 2023/8/11 8:51 + */ +@Api(tags = "定值控制字定义管理") +@Controller +@RequestMapping(value = "protectcw") +@RequiredArgsConstructor +public class ProtectControlWordController extends BaseController { + + private final IPqsProtectcontrolwordService iPqsProtectcontrolwordService; + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getAll") + @ApiOperation("获取定值信息") + public HttpResult> getAll(String pvIndex) { + String methodDescribe = getMethodDescribe("getAll"); + List list = iPqsProtectcontrolwordService.list(new LambdaQueryWrapper() + .eq(PqsProtectcontrolword::getPvIndex, pvIndex) + ); + if (CollUtil.isEmpty(list)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, list, methodDescribe); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getIsFT") + @ApiOperation("获取定值信息") + public HttpResult getIsFT(String pvIndex) { + String methodDescribe = getMethodDescribe("getIsFT"); + List list = iPqsProtectcontrolwordService.list(new LambdaQueryWrapper() + .eq(PqsProtectcontrolword::getPvIndex, pvIndex) + ); + if (CollUtil.isEmpty(list)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, 0, methodDescribe); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, 1, methodDescribe); + } +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java index 16b99179a..80aba042f 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.dto.SimpleDTO; import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.pojo.advanced.UpDevVO; import com.njcn.device.pq.pojo.bo.BaseLineInfo; import com.njcn.device.pq.pojo.bo.DeviceType; import com.njcn.device.pq.pojo.bo.excel.TerminalBaseExcel; @@ -23,6 +24,7 @@ import org.apache.ibatis.annotations.Select; import java.util.List; +import java.util.Set; /** *

@@ -123,6 +125,7 @@ public interface LineMapper extends BaseMapper { /** * 获取离线装置 + * * @author cdf * @date 2023/4/3 */ @@ -418,38 +421,78 @@ public interface LineMapper extends BaseMapper { List getDeviceRunStatistics(@Param("list") List list, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); - Page getNewDeviceRunStatistics (Page page,@Param("devs") List list, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); - Page getNewDeviceFlowStatistics (Page page,@Param("devs") List list, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + Page getNewDeviceRunStatistics(Page page, @Param("devs") List list, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + Page getNewDeviceFlowStatistics(Page page, @Param("devs") List list, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); /** * 通过电站id获取监测点信息 + * * @author cdf * @date 2023/5/10 */ - List getLineBySubStation(@Param("subId")String subId); + List getLineBySubStation(@Param("subId") String subId); /** * 根据条件进行监测筛选出监测点id + * * @author wr * @date 2023/5/25 */ - List getLineByIDs(@Param("searchValue")String searchValue); + List getLineByIDs(@Param("searchValue") String searchValue); /** * 通过电站id集合,和电压等级 + * * @author cdf * @date 2023/5/10 */ - List getSubStations(@Param("subId")List subId, @Param("scale") List scale); + List getSubStations(@Param("subId") List subId, @Param("scale") List scale); /** * 根据变电站获取母线信息(变电站策略专用) + * * @param subId - * @param type (0是除了本变电站所有变电站母线信息 1是获取本变电站所有母线信息 2是根据母线获取信息) + * @param type (0是除了本变电站所有变电站母线信息 1是获取本变电站所有母线信息 2是根据母线获取信息) * @return */ - List getvoltage(@Param("id") String subId,@Param("type") Integer type); + List getvoltage(@Param("id") String subId, @Param("type") Integer type); + + + /** + * 根据监测点id获取终端信息 + * + * @param lineId 监测点id + * @return 结果 + */ + UpDevVO getDevInfo(@Param("lineId") String lineId); + + + /** + * 根据终端id或者或者监测id,查询前置表ip信息 + * + * @param devID 终端id + * @param type 终端=1 监测点=0 + * @return 结果 + */ + String getNodeIp(@Param("devID") String devID, @Param("type") Integer type); + + /** + * 根据监测点集合获取终端数量 + * + * @param lineId 监测点id + * @return 结果 + */ + Integer getDevIndexs(@Param("lineIds") Set lineId); + + + /** + * 根据终端id集合查询终端版本信息 + * @param devIds + * @return + */ + List getDevicesIp(@Param("devIds") List devIds); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectcontrolwordMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectcontrolwordMapper.java new file mode 100644 index 000000000..9f843d9c7 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectcontrolwordMapper.java @@ -0,0 +1,16 @@ +package com.njcn.device.pq.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.device.pq.pojo.po.PqsProtectcontrolword; + +/** + *

+ * Mapper 接口 + *

+ * + * @author wr + * @since 2023-08-10 + */ +public interface PqsProtectcontrolwordMapper extends BaseMapper { + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectvalueMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectvalueMapper.java new file mode 100644 index 000000000..96e616123 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsProtectvalueMapper.java @@ -0,0 +1,16 @@ +package com.njcn.device.pq.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.device.pq.pojo.po.PqsProtectvalue; + +/** + *

+ * Mapper 接口 + *

+ * + * @author wr + * @since 2023-08-10 + */ +public interface PqsProtectvalueMapper extends BaseMapper { + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalVersionMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalVersionMapper.java index 6b570a209..cc1a3735a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalVersionMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalVersionMapper.java @@ -53,4 +53,6 @@ public interface TerminalVersionMapper { List selectListById(String id); + + List selectDevVersion(@Param("ids")List ids); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/VersionMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/VersionMapper.java index f5a6f58b1..a45858f9b 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/VersionMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/VersionMapper.java @@ -2,7 +2,12 @@ package com.njcn.device.pq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.device.pq.pojo.param.ProgramParam; import com.njcn.device.pq.pojo.po.Version; +import com.njcn.device.pq.pojo.vo.VersionVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -14,4 +19,5 @@ import com.njcn.device.pq.pojo.po.Version; */ public interface VersionMapper extends BaseMapper { + List selectVersion(@Param("param") ProgramParam.Version param); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml index 68b3b9a23..7ddb4b2a1 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml @@ -1175,5 +1175,73 @@ + + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectcontrolwordMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectcontrolwordMapper.xml new file mode 100644 index 000000000..a9c609dd6 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectcontrolwordMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectvalueMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectvalueMapper.xml new file mode 100644 index 000000000..4ce477797 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsProtectvalueMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalVersionMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalVersionMapper.xml index 28218d545..95fe88028 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalVersionMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalVersionMapper.xml @@ -11,16 +11,16 @@ a.LEVEL, b.run_flag, b.com_flag, - c.NAME devType, + b.dev_type devType, ifnull(e.NAME,'/') versionName, ifnull(e.protocol,'/') protocol, ifnull(e.date,'/') versionDate, ifnull(e.update_time,'/') updateTime, - ifnull(e.update_by,'/') updateBy + ifnull(e.update_by,'/') updateBy, + e.id as versionId FROM pq_line a INNER JOIN pq_device b ON a.id = b.id - LEFT JOIN sys_dict_data c ON b.dev_type = c.id LEFT JOIN cld_dev_version d ON b.id = d.Line_Id and d.flag = 1 and d.Result = 1 LEFT JOIN cld_version e ON d.Version_Id = e.id LEFT JOIN sys_user f on d.update_by = f.id @@ -79,5 +79,32 @@ LEFT JOIN sys_dict_data sdd ON pd.Dev_Type = sdd.Id WHERE cdv.Line_Id = #{id} + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/VersionMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/VersionMapper.xml index c6a2883f3..d38404582 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/VersionMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/VersionMapper.xml @@ -2,4 +2,28 @@ + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDeviceService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDeviceService.java index 2527b1c3d..6b0c41045 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDeviceService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDeviceService.java @@ -2,11 +2,14 @@ package com.njcn.device.pq.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.pq.pojo.param.ConstantValueParam; import com.njcn.device.pq.pojo.po.Device; +import java.util.List; + /** *

- * 服务类 + * 服务类 *

* * @author cdf @@ -14,4 +17,112 @@ import com.njcn.device.pq.pojo.po.Device; */ public interface IDeviceService extends IService { + + /*** + * @Description: mqtt获取外部定值 + * @param param + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/14 10:17 + */ + String sentLine(ConstantValueParam.Constant param); + + /*** + * @Description: mqtt修改外部定值 + * @param param + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/14 11:07 + */ + String sentLineData(ConstantValueParam.ValueData param); + + /** + * @param param + * @Description: mqtt获取内部定值 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/14 14:51 + */ + String sentDev(ConstantValueParam.Constant param); + + /** + * @param param + * @Description: mqtt修改内部定值 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/14 14:51 + */ + String sentDevData(ConstantValueParam.ValueData param); + + /** + * @param devID + * @Description: 终端性能查看 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/15 11:27 + */ + String socketDevProperty(String devID); + + /** + * @param devID + * @Description: 终端性能关闭 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/15 16:13 + */ + String socketDevPropertyClose(String devID); + + /** + * @param lineIndex + * @Description: 监测点实时数据查看 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/15 16:13 + */ + String realTimeData(String lineIndex); + + /** + * @param lineIndex + * @Description: 监测实施数据心跳 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/15 16:14 + */ + String heartRealTimeData(String lineIndex); + + /** + * @param lineIndex + * @Description: 监测点实施数据关闭 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/15 16:14 + */ + String closeRealTimeData(String lineIndex); + + /** + * 终端版本升级,批量升级条件必须是相同终端系列的终端才能升级 + * + * @param list + * @param edIndex + * @return + */ + String getDevUpgrades(List list, String edIndex); + + /** + * @param devList + * @Description: 终端升级取消 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/17 9:24 + */ + String closeUpgrades(List devList); + + /** + * @param devList + * @Description: 重启装置命令 + * @return: java.lang.String + * @Author: wr + * @Date: 2023/8/17 9:24 + */ + String restartDev(List devList); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectcontrolwordService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectcontrolwordService.java new file mode 100644 index 000000000..d47a9c755 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectcontrolwordService.java @@ -0,0 +1,16 @@ +package com.njcn.device.pq.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.pq.pojo.po.PqsProtectcontrolword; + +/** + *

+ * 服务类 + *

+ * + * @author wr + * @since 2023-08-10 + */ +public interface IPqsProtectcontrolwordService extends IService { + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectvalueService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectvalueService.java new file mode 100644 index 000000000..2ede765f4 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IPqsProtectvalueService.java @@ -0,0 +1,32 @@ +package com.njcn.device.pq.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.pq.pojo.param.ConstantValueParam; +import com.njcn.device.pq.pojo.po.PqsProtectvalue; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author wr + * @since 2023-08-10 + */ +public interface IPqsProtectvalueService extends IService { + + /*** + * @Description: 查询定值信息 + * @param isOutIn out=外部定值 in=内部定值 + * @param lineIndex 监测点id + * @return: java.util.List + * @Author: wr + * @Date: 2023/8/10 18:55 + */ + List quarryOutValueBase(String isOutIn,String lineIndex); + + Boolean updateDatabaseValue(String json); + + Boolean updateDatabase(ConstantValueParam param); +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ProgramVersionService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ProgramVersionService.java index 57dd7f8ee..70ebf5e03 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ProgramVersionService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ProgramVersionService.java @@ -1,18 +1,21 @@ package com.njcn.device.pq.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.device.pq.pojo.param.ProgramParam; +import com.njcn.device.pq.pojo.po.Version; import com.njcn.device.pq.pojo.vo.VersionVO; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; +import java.util.List; /** * @version 1.0.0 * @author: chenchao * @date: 2022/05/19 15:53 */ -public interface ProgramVersionService { +public interface ProgramVersionService extends IService { /** * 根据终端类型分页获取程序版本管理信息 @@ -45,4 +48,10 @@ public interface ProgramVersionService { */ boolean delProgramVersion(String id); + /** + * 终端版本升级,查看除了当前版本的其他版本信息 + * @param param + * @return + */ + List getVersion(ProgramParam.Version param); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalVersionService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalVersionService.java index 522218478..e8f629106 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalVersionService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalVersionService.java @@ -29,4 +29,14 @@ public interface TerminalVersionService { * @return */ List getTerminalUpLog(String id); + + + /** + * @Description: 查询终端版本信息 + * @param ids + * @return: java.util.List + * @Author: wr + * @Date: 2023/8/16 15:07 + */ + List getVersionList(List ids); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceServiceImpl.java index f3b2d7054..4421d45cb 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceServiceImpl.java @@ -1,21 +1,401 @@ package com.njcn.device.pq.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.device.pq.mapper.DevVersionMapper; import com.njcn.device.pq.mapper.DeviceMapper; +import com.njcn.device.pq.mapper.LineMapper; +import com.njcn.device.pq.pojo.advanced.*; +import com.njcn.device.pq.pojo.param.ConstantValueParam; +import com.njcn.device.pq.pojo.po.DevVersion; import com.njcn.device.pq.pojo.po.Device; +import com.njcn.device.pq.pojo.po.Line; +import com.njcn.device.pq.pojo.po.Version; +import com.njcn.device.pq.pojo.vo.DeviceIpRVO; import com.njcn.device.pq.service.IDeviceService; +import com.njcn.device.pq.service.ProgramVersionService; +import com.njcn.device.pq.utils.SocketClient; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + + /** *

- * 服务实现类 + * 服务实现类 *

* * @author cdf * @since 2022-01-07 */ @Service +@RequiredArgsConstructor public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + private final LineMapper lineMapper; + private final SocketClient socketClient; + private final DevVersionMapper devVersionMapper; + private final ProgramVersionService programVersionService; + + @Value("${socket.port}") + private Integer socketPort; + + @Override + public String sentLine(ConstantValueParam.Constant param) { + try { + //获取根据监测点获取终端信息 + UpDevVO upDevVO = lineMapper.getDevInfo(param.getId()); + //查询前置ip + String host = lineMapper.getNodeIp(upDevVO.getDevIndex(),0); + //拼接属性 + ContValueRVO upParamVO = new ContValueRVO(); + ContValueVO valueVO = new ContValueVO(); + valueVO.setType(param.getType()); + valueVO.setLineid(param.getId()); + valueVO.setHander(param.getHander()); + JSONObject jsonStr = new JSONObject(valueVO); + Integer len = jsonStr.toString().length(); + upParamVO.setLen(len.toString()); + upParamVO.setData(valueVO); + JSONObject jsonObject = new JSONObject(upParamVO); + String str = jsonObject.toString(); + List devList = new ArrayList<>(); + devList.add(upDevVO); + return socketClient.sentLine(param.getIp(), str, host, socketPort, "wr", devList); + } catch (Exception e) { + return "获取定值失败"; + } + + } + + @Override + public String sentLineData(ConstantValueParam.ValueData param) { + try { + //获取根据监测点获取终端信息 + UpDevVO upDevVO = lineMapper.getDevInfo(param.getId()); + //查询前置ip + String host = lineMapper.getNodeIp(upDevVO.getDevIndex(),0); + ContUpdateValueRVO upParamVO = new ContUpdateValueRVO(); + ContUpdateValueVO valueVO = new ContUpdateValueVO(); + valueVO.setType(param.getType()); + valueVO.setLineid(param.getId()); + valueVO.setHander(param.getHander()); + float[] intArr; + if (StrUtil.isBlank(param.getInterValue())) { + intArr = new float[0]; + } else { + String[] valueArr = param.getInterValue().split(","); + intArr = new float[valueArr.length]; + for (int i = 0; i < valueArr.length; i++) { + intArr[i] = Float.parseFloat(valueArr[i]); + } + } + valueVO.setValue(intArr); + JSONObject jsonStr = new JSONObject(valueVO); + Integer len = jsonStr.toString().length(); + upParamVO.setLen(len.toString()); + upParamVO.setData(valueVO); + JSONObject jsonObject = new JSONObject(upParamVO); + String str = jsonObject.toString(); + List devList = new ArrayList<>(); + devList.add(upDevVO); + return socketClient.sentLine(param.getIp(), str, host, socketPort, "wr", devList); + } catch (Exception e) { + return "运行失败"; + } + } + + @Override + public String sentDev(ConstantValueParam.Constant param) { + try { + Line line = lineMapper.selectById(param.getId()); + UpDevVO upDevVO = new UpDevVO(); + upDevVO.setDevIndex(line.getId()); + upDevVO.setDevName(line.getName()); + String host = lineMapper.getNodeIp(line.getId(),1); + ContValueRVO upParamVO = new ContValueRVO(); + ContValueVO valueVO = new ContValueVO(); + valueVO.setType(param.getType()); + valueVO.setIndex(param.getId()); + valueVO.setHander(param.getHander()); + JSONObject jsonStr = new JSONObject(valueVO); + Integer len = jsonStr.toString().length(); + upParamVO.setLen(len.toString()); + upParamVO.setData(valueVO); + JSONObject jsonObject = new JSONObject(upParamVO); + String str = jsonObject.toString(); + List devList = new ArrayList<>(); + devList.add(upDevVO); + return socketClient.sentDZDev(param.getIp(), str, host, socketPort, "wr", devList); + } catch (Exception e) { + return "获取定值失败"; + } + } + + @Override + public String sentDevData(ConstantValueParam.ValueData param) { + try { + Line line = lineMapper.selectById(param.getId()); + UpDevVO upDevVO = new UpDevVO(); + upDevVO.setDevIndex(line.getId()); + upDevVO.setDevName(line.getName()); + String host = lineMapper.getNodeIp(line.getId(),1); + ContUpdateDevValueRVO upParamVO = new ContUpdateDevValueRVO(); + ContUpdateDevValueVO valueVO = new ContUpdateDevValueVO(); + valueVO.setType(param.getType()); + valueVO.setIndex(line.getId()); + valueVO.setHander(String.valueOf(param.getHander())); + int[] intArr; + if (StrUtil.isBlank(param.getInterValue())) { + intArr = new int[0]; + } else { + String[] valueArr = param.getInterValue().split(","); + intArr = new int[valueArr.length]; + for (int i = 0; i < valueArr.length; i++) { + intArr[i] = Integer.parseInt(valueArr[i]); + } + } + valueVO.setInterValue(intArr); + JSONObject jsonStr = new JSONObject(valueVO); + Integer len = jsonStr.toString().length(); + upParamVO.setLen(len.toString()); + upParamVO.setData(valueVO); + JSONObject jsonObject = new JSONObject(upParamVO); + String str = jsonObject.toString(); + + List devList = new ArrayList<>(); + devList.add(upDevVO); + return socketClient.sentDZDev(param.getIp(), str, host, socketPort, "wr", devList); + } catch (Exception e) { + return "运行失败"; + } + } + + @Override + public String socketDevProperty(String devID) { + String host = lineMapper.getNodeIp(devID,1); + if(StrUtil.isBlank(host)){ + return "前置ip获取失败"; + } + JSONObject jsonObject = new JSONObject(); + Map map = new HashMap<>(); + map.put("type","190"); + map.put("index",devID); + map.put("hander","1"); + jsonObject.set("data", map); + Integer len = jsonObject.get("data").toString().length(); + jsonObject.set("len", len.toString()); + socketClient.showProperty(jsonObject.toString(),host,socketPort,RequestUtil.getLoginName()); + return "终端性能获取成功"; + } + + @Override + public String socketDevPropertyClose(String devID) { + String host = lineMapper.getNodeIp(devID,1); + try { + JSONObject jsonObject = new JSONObject(); + Map map = new HashMap<>(); + map.put("type", "190"); + map.put("index", devID); + map.put("hander", "0"); + jsonObject.set("data", map); + Integer len = jsonObject.get("data").toString().length(); + jsonObject.set("len", len.toString()); + socketClient.closeDevSocket(jsonObject.toString(),host,socketPort,RequestUtil.getLoginName()); + return "执行成功"; + }catch (Exception e){ + return "执行失败"; + } + } + + @Override + public String realTimeData(String lineIndex) { + //查询前置ip + String host = lineMapper.getNodeIp(lineIndex,0); + if(StrUtil.isBlank(host)){ + return "设备前置机服务器配置异常,请联系管理员"; + }else { + JSONObject jsonObject = new JSONObject(); + jsonObject.set("LineId", lineIndex); + jsonObject.set("type", 0); + cn.hutool.json.JSONObject jsonObject1 = new cn.hutool.json.JSONObject(); + jsonObject1.set("len",0); + jsonObject1.set("data",jsonObject); + socketClient.realTimeData(jsonObject1.toString(),host,socketPort,lineIndex); + } + return "请求成功"; + } + + @Override + public String heartRealTimeData(String lineIndex) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set("LineId", lineIndex); + jsonObject.set("type", 1); + cn.hutool.json.JSONObject jsonObject1 = new cn.hutool.json.JSONObject(); + jsonObject1.set("len", 0); + jsonObject1.set("data", jsonObject); + String host = lineMapper.getNodeIp(lineIndex,0); + socketClient.heartRealData(jsonObject1.toString(),host,socketPort,lineIndex); + return "实时数据心跳请求成功"; + } + + @Override + public String closeRealTimeData(String lineIndex) { + socketClient.closeRealData(lineIndex); + return "关闭实时数据请求成功"; + } + + @Override + public String getDevUpgrades(List list, String edIndex) { + List resTemlist = new ArrayList<>(); + + List relist = lineMapper.getDevicesIp(list); + //判断设备版本号 + Integer isExit = devVersionMapper.selectCount(new LambdaQueryWrapper() + .eq(DevVersion::getVersionId,edIndex) + .in(DevVersion::getLineId,list) + .eq(DevVersion::getState,1) + ); + if (isExit > 0) { + return "请勿选择相同版本号升级"; + } + if (!CollectionUtil.isEmpty(relist)) { + Version version = programVersionService.getById(edIndex); + String series = version.getDevType(); + //判断设备是否存在相同型号 + for (DeviceIpRVO deviceIpRVO : relist) { + if (!series.equals(deviceIpRVO.getDevSeries())) { + return "当前装置版本系列与目标版本系列不相同"; + } + } + + //判断是否断开 + if (relist.stream().filter(w -> w.getComFlag() == 0).findAny().isPresent()) { + return "存在通讯中断设备"; + } + + + Set set = new HashSet<>(); + for (DeviceIpRVO d : relist) { + set.add(d.getIp()); + } + Iterator iterator = set.iterator(); + while (iterator.hasNext()) { + List devIndex = new ArrayList<>(); + DeviceIpRVO deviceIpRVO = new DeviceIpRVO(); + String ip = iterator.next(); + for (DeviceIpRVO d : relist) { + UpDevVO upDevVO = new UpDevVO(); + upDevVO.setDevIndex(d.getDevIndex()); + upDevVO.setDevName(d.getDevName()); + if (ip.equals(d.getIp())) { + devIndex.add(upDevVO); + } + } + deviceIpRVO.setIp(ip); + deviceIpRVO.setDevlist(devIndex); + resTemlist.add(deviceIpRVO); + } + } else { + return "存在未知错误"; + } + for (DeviceIpRVO deviceIpRVO : resTemlist) { + String ip = deviceIpRVO.getIp(); + List devlist = deviceIpRVO.getDevlist(); + UpDataVO upDataVO = new UpDataVO(); + UpParamVO upParamVO = new UpParamVO(); + upDataVO.setTerminal(devlist); + upDataVO.setType("180"); + upDataVO.setEdIndex(edIndex); + upDataVO.setUserIndex(RequestUtil.getUserIndex()); + JSONObject jsonstr = new JSONObject(upDataVO); + Integer len = jsonstr.toString().length(); + upParamVO.setData(upDataVO); + upParamVO.setLen(len.toString()); + JSONObject jsonObject = new JSONObject(upParamVO); + String str = jsonObject.toString(); + socketClient.sentUpgrades(str, ip, socketPort, RequestUtil.getLoginName(), edIndex, devlist); + } + return "运行成功"; + } + + @Override + public String closeUpgrades(List devList) { + List relist = lineMapper.getDevicesIp(devList); + if(CollectionUtil.isEmpty(relist)){ + return "前置机为空"; + }else { + List nodeIp = relist.stream().map(DeviceIpRVO::getIp).distinct().collect(Collectors.toList()); + for(String ip: nodeIp){ + List devLl= relist.stream().filter(item->item.getIp().equals(ip)).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(devLl)){ + return "出错啦"; + } + + List list = new ArrayList<>(); + for(DeviceIpRVO devRVO:devLl){ + JSONObject dev = new JSONObject(); + dev.put("devIndex",devRVO.getDevIndex()); + dev.put("devName",devRVO.getDevName()); + list.add(dev); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.set("terminal", list); + jsonObject.set("type", 182); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.set("len", 0); + jsonObject1.set("data", jsonObject); + socketClient.cancelUp(jsonObject1.toString(),ip,socketPort,devLl.size()); + } + } + return "取消命令发送成功"; + } + + @Override + public String restartDev(List devList) { + List relist = lineMapper.getDevicesIp(devList); + if(CollUtil.isEmpty(relist)){ + return "前置机为空"; + }else { + List nodeIp = relist.stream().map(DeviceIpRVO::getIp).distinct().collect(Collectors.toList()); + for(String ip: nodeIp){ + List devLl = relist.stream().filter(item->item.getIp().equals(ip)).collect(Collectors.toList()); + if(CollUtil.isEmpty(devLl)){ + return "出错啦"; + } + + List list = new ArrayList<>(); + List devIn = new ArrayList<>(); + for(DeviceIpRVO devRVO:devLl){ + devIn.add(devRVO.getDevIndex()); + JSONObject dev = new JSONObject(); + dev.set("devIndex", devRVO.getDevIndex()); + dev.set("devName", devRVO.getDevName()); + list.add(dev); + } + + JSONObject jsonObject = new JSONObject(); + jsonObject.set("terminal", list); + jsonObject.set("type", 181); + jsonObject.set("userIndex", RequestUtil.getUserIndex()); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.set("len", 0); + jsonObject1.set("data", jsonObject); + + socketClient.restartDev(jsonObject1.toString(),ip,socketPort,devIn); + } + } + return "命令发送成功"; + } + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectcontrolwordServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectcontrolwordServiceImpl.java new file mode 100644 index 000000000..2c0a5bdf0 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectcontrolwordServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.device.pq.service.impl; + +import com.njcn.device.pq.mapper.PqsProtectcontrolwordMapper; +import com.njcn.device.pq.pojo.po.PqsProtectcontrolword; +import com.njcn.device.pq.service.IPqsProtectcontrolwordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author wr + * @since 2023-08-10 + */ +@Service +public class PqsProtectcontrolwordServiceImpl extends ServiceImpl implements IPqsProtectcontrolwordService { + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectvalueServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectvalueServiceImpl.java new file mode 100644 index 000000000..98c6de811 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsProtectvalueServiceImpl.java @@ -0,0 +1,227 @@ +package com.njcn.device.pq.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.text.UnicodeUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.njcn.device.pq.mapper.PqsProtectvalueMapper; +import com.njcn.device.pq.pojo.param.ConstantValueParam; +import com.njcn.device.pq.pojo.po.PqsProtectcontrolword; +import com.njcn.device.pq.pojo.po.PqsProtectvalue; +import com.njcn.device.pq.service.IPqsProtectcontrolwordService; +import com.njcn.device.pq.service.IPqsProtectvalueService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import net.sf.json.JSONObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author wr + * @since 2023-08-10 + */ +@Service +@RequiredArgsConstructor +public class PqsProtectvalueServiceImpl extends ServiceImpl implements IPqsProtectvalueService { + + private final IPqsProtectcontrolwordService iPqsProtectcontrolwordService; + + @Override + public List quarryOutValueBase(String isOutIn, String lineIndex) { + List quarryValue = new ArrayList<>(); + List quarryOutValue = new ArrayList<>();//简谐波 + List quarryOutValue1 = new ArrayList<>();//谐波电压 + List quarryOutValue2 = new ArrayList<>();//谐波电流 + List quarryOutValue3 = new ArrayList<>();//基本定值 + if (isOutIn.equals("out")) { //外部定值 + List constantValues = this.list(new LambdaQueryWrapper() + .eq(PqsProtectvalue::getCpu_no, lineIndex)); + + if (CollUtil.isNotEmpty(constantValues)) { + //区分定值类型 + Map> protectMap = + constantValues.stream().collect(Collectors.groupingBy(PqsProtectvalue::getDz_type)); + + if (protectMap.containsKey(1)) { + quarryOutValue3.addAll(protectMap.get(1)); + } + if (protectMap.containsKey(2)) { + quarryOutValue2.addAll(protectMap.get(2)); + } + if (protectMap.containsKey(3)) { + quarryOutValue1.addAll(protectMap.get(3)); + } + if (protectMap.containsKey(4)) { + quarryOutValue.addAll(protectMap.get(4)); + } + + quarryValue.add(quarryOutValue3); + quarryValue.add(quarryOutValue2); + quarryValue.add(quarryOutValue1); + quarryValue.add(quarryOutValue); + } + } else if (isOutIn.equals("in")) { //内部定值 + List constantValues = this.list(new LambdaQueryWrapper() + .eq(PqsProtectvalue::getCpu_no, lineIndex)); + if (CollUtil.isNotEmpty(constantValues)) { + quarryValue.add(constantValues); + } + } + return quarryValue; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateDatabaseValue(String json) { + Map map = JSON.parseObject(json, Map.class); + //区分内/外定值 + String type = map.get("type").toString(); + if (type.equals("80")) {//外部定值 + String cpuNo = map.get("cpu_no").toString(); + List inoutValue = JSONArray.parseArray(map.get("data").toString(), Float.class); + for (int i = 0; i < inoutValue.size(); i++) { + //进行外部定值的更正 + this.update(new LambdaUpdateWrapper() + .set(PqsProtectvalue::getValue, inoutValue.get(i)) + .eq(PqsProtectvalue::getCpu_no, cpuNo) + .like(PqsProtectvalue::getType, type) + .eq(PqsProtectvalue::getSort, i + 1) + ); + } + return true; + } else if (type.equals("90")) { + //内部定值 + String devIndex = map.get("devindex").toString(); + List inoutValue = JSONArray.parseArray(map.get("data").toString(), Integer.class); + for (int i = 0; i < inoutValue.size(); i++) { + int value = inoutValue.get(i); + if (i == inoutValue.size() - 1 || i == inoutValue.size() - 2) { + value = value / 100; + //进行内部定值的更正 + this.update(new LambdaUpdateWrapper() + .set(PqsProtectvalue::getValue, value) + .eq(PqsProtectvalue::getCpu_no, devIndex) + .like(PqsProtectvalue::getType, type) + .eq(PqsProtectvalue::getSort, i + 1) + ); + } else { + //进行内部定值的更正 + this.update(new LambdaUpdateWrapper() + .set(PqsProtectvalue::getValue, value) + .eq(PqsProtectvalue::getCpu_no, devIndex) + .like(PqsProtectvalue::getType, type) + .eq(PqsProtectvalue::getSort, i + 1) + ); + //查询指定内部定级 + PqsProtectvalue one = this.getOne(new LambdaQueryWrapper() + .eq(PqsProtectvalue::getCpu_no, devIndex) + .eq(PqsProtectvalue::getType, type) + .eq(PqsProtectvalue::getSort, i + 1) + ); + //根据装置类型和sort进行查询 + String pvIndex = one.getPvIndex(); + String property = Integer.toBinaryString(value); + int strLen = property.length(); + if (strLen < 16) { + while (strLen < 16) { + StringBuffer sb = new StringBuffer(); + sb.append("0").append(property);//左补0 + property = sb.toString(); + strLen = property.length(); + } + } + char[] ar = property.toCharArray(); + for (int j = 0; j < ar.length; j++) { + int flag = ar[j] - 48; + iPqsProtectcontrolwordService.update(new LambdaUpdateWrapper() + .set(PqsProtectcontrolword::getPvIndex, pvIndex) + .eq(PqsProtectcontrolword::getTypeNum, (ar.length - 1) - j) + .like(PqsProtectcontrolword::getFlag, flag)); + } + } + } + return true; + } + return false; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateDatabase(ConstantValueParam param) { + Integer type = param.getType(); + ConstantValueParam.ConstantValue json = param.getJson(); + + //获取方法类型methodname + String methodName = json.getMethodname(); + List inoutValue; + //hander 用于匹配 0 定值 1 定值描述 + Integer hander = json.getHander(); + //用于判断内外定值 80外部定值 90内部定值 + if (hander == param.getHander()) { + //终端id + String devIndex = json.getDevindex(); + inoutValue = json.getData(); + + PqsProtectvalue pqsProtectvalue = inoutValue.get(0); + + int isint = 0;//用于判断时候删除子表数据 + String devType2 = pqsProtectvalue.getDev_type(); + Integer type2 = pqsProtectvalue.getType(); + if (type == 90) { + this.remove(new LambdaUpdateWrapper() + .eq(PqsProtectvalue::getCpu_no, devIndex) + .like(PqsProtectvalue::getType, type2) + + ); + isint = 1; + } else if (type == 80) { + String lineIndex = json.getLineindex(); + isint = 0; + this.remove(new LambdaUpdateWrapper() + .eq(PqsProtectvalue::getCpu_no, lineIndex) + .like(PqsProtectvalue::getType, type2) + + ); + } + List addProtect = new ArrayList<>(); + List addWord = new ArrayList<>(); + for (int i = 0; i < inoutValue.size(); i++) { + //获取监测点序号、终端类型、定值类型、单位、最大值、最小值、默认值、设定值、描述 + String pvIndex = IdUtil.fastSimpleUUID(); + PqsProtectvalue protect = inoutValue.get(i); + protect.setPvIndex(pvIndex); + protect.setDz_type(protect.getType() == 80 ? protect.getDz_type() : 0); + addProtect.add(protect); + + //获取内部定值控制字 + if (isint == 1) { + if (protect.getWord().size() > 1) { + protect.getWord().stream().peek(x->x.setPvIndex(pvIndex)); + addWord.addAll(protect.getWord()); + } + } + } + if (CollUtil.isNotEmpty(addProtect)) { + this.saveBatch(addProtect); + } + if (CollUtil.isNotEmpty(addWord)) { + iPqsProtectcontrolwordService.saveBatch(addWord); + } + return true; + } + return false; + } +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTflgployServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTflgployServiceImpl.java index 1ab67349c..997d5d7d8 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTflgployServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTflgployServiceImpl.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** @@ -44,6 +45,7 @@ public class PqsTflgployServiceImpl extends ServiceImpl list = this.list(new LambdaQueryWrapper() .eq(PqsTflgploy::getTpName, param.getTpName()) @@ -75,6 +77,7 @@ public class PqsTflgployServiceImpl extends ServiceImpl() @@ -103,6 +106,7 @@ public class PqsTflgployServiceImpl extends ServiceImpl() .eq(PqsTflgploy::getTpIndex, ids)); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTransformerServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTransformerServiceImpl.java index 725db8de2..f8f2951d5 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTransformerServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqsTransformerServiceImpl.java @@ -158,6 +158,7 @@ public class PqsTransformerServiceImpl extends ServiceImpl getVersion(ProgramParam.Version param) { + return versionMapper.selectVersion(param); + } + private Boolean judgeFileType(String subffix) { boolean result = false; diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalVersionServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalVersionServiceImpl.java index b669de1fc..95d142efe 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalVersionServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalVersionServiceImpl.java @@ -66,6 +66,11 @@ public class TerminalVersionServiceImpl implements TerminalVersionService { return terminalVersionMapper.selectListById(id); } + @Override + public List getVersionList(List ids) { + return terminalVersionMapper.selectDevVersion(ids); + } + private List getChildren(String id,List all){ return all.stream().filter(item->item.getPid().equals(id)).collect(Collectors.toList()); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/SocketClient.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/SocketClient.java new file mode 100644 index 000000000..411a40f3b --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/SocketClient.java @@ -0,0 +1,1008 @@ +package com.njcn.device.pq.utils; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.github.tocrhz.mqtt.publisher.MqttPublisher; +import com.njcn.common.pojo.dto.LogInfoDTO; +import com.njcn.device.pq.mapper.DevVersionMapper; +import com.njcn.device.pq.mapper.LineMapper; +import com.njcn.device.pq.pojo.advanced.UpDevVO; +import com.njcn.device.pq.pojo.po.DevVersion; +import com.njcn.system.api.UserLogFeignClient; + +import java.io.*; +import java.net.*; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +public class SocketClient { + private static final Logger logger = LoggerFactory.getLogger(SocketClient.class); + + private final MqttPublisher mqttPublisher; + + private final UserLogFeignClient UserLogFeignClient; + private final DevVersionMapper devVersionMapper; + + private final ExecutorService executorPool = Executors.newCachedThreadPool(); + //终端性能socket集合 + private final Map socketQuMap = new HashMap<>(); + private final ConcurrentHashMap sumDevMap = new ConcurrentHashMap<>(); + + private final ConcurrentHashMap socketMap = new ConcurrentHashMap<>(); + //用于记录升级装置当前处理总数 + private final ConcurrentHashMap sumMap = new ConcurrentHashMap<>(); + //用于记录升级装置当前重启总数 + private final ConcurrentHashMap sumResMap = new ConcurrentHashMap<>(); + //用于记录升级装置当前取消总数 + private final ConcurrentHashMap sumCanMap = new ConcurrentHashMap<>(); + + private Map> lineMap; + + private Map lineSocketMap; + private final LineMapper lineMapper; + private boolean finalFlag = true; + + + //监测点 + public String sentLine(String ip, String message, String host, Integer port, String name, List list) { + LogInfoDTO logInfoDTO = new LogInfoDTO(); + logInfoDTO.setLoginName(RequestUtil.getLoginName()); + logInfoDTO.setUserName(RequestUtil.getUserNickname()); + logInfoDTO.setIp(ip); + logInfoDTO.setOperateType("查询"); + logInfoDTO.setType(1); + logInfoDTO.setServiceName("device-boot"); + + + String msg = ""; + Boolean flag = true; + String result = null; + Socket socket = null; + InputStream is = null; + BufferedReader din = null; + Integer allsum = list.size(); + Integer succees = 0; + Integer fail = 0; + try { + socket = new Socket(host, port); + socket.setSoTimeout(20000);//设置超时时间 + socket.getOutputStream().write(message.getBytes("UTF-8")); + is = socket.getInputStream(); + din = new BufferedReader(new InputStreamReader(is, "UTF-8")); + char[] buffer = new char[100240000]; + StringBuffer stringBuffer = new StringBuffer(); + while (true) { + int len = din.read(buffer); + if (len > -1) { + result = new String(buffer, 0, len); + stringBuffer.append(result); + try { + new JSONObject(stringBuffer); + break; + } catch (Exception e) { + logger.error("未加载完全,持续加载中!"); + } + } + } + //todo 先用json测试一下 + JSONObject jsonObject = new JSONObject(stringBuffer.toString()); + if (jsonObject != null) { + if (jsonObject.get("resultcode").toString().equals("10000")) { + JSONObject data = jsonObject.getJSONObject("data"); + if (data == null) { + //表示刚连接成功 + flag = true; + mqttPublisher.send("/dev/socketLine/" + name, stringBuffer, 1, false); + msg = "无数据传输"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("外部定值无数据传输"); + UserLogFeignClient.addUserLog(logInfoDTO); + } else { + flag = true; + mqttPublisher.send("/dev/socketLine/" + name, stringBuffer, 1, false); + msg = "请求成功!" + "请稍候......"; + logInfoDTO.setResult(1); + logInfoDTO.setLevel(0); + logInfoDTO.setOperate("外部定值获取成功"); + UserLogFeignClient.addUserLog(logInfoDTO); + } + } else if (jsonObject.get("resultcode").toString().equals("10010")) { + flag = true; + mqttPublisher.send("/dev/socketLine/" + name, stringBuffer, 1, false); + msg = ""; + } else if (jsonObject.get("resultcode").toString().equals("10003")) { + flag = true; + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 10003 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + fail += list.size(); + msg = "JSON字符串解析出错"; + + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("外部定值获取json解析失败"); + logInfoDTO.setFailReason("json解析失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } else { + fail++; + flag = true; + mqttPublisher.send("/dev/socketLine/" + name, jsonObject, 1, false); + } + if (succees + fail == allsum) { + flag = false; + } + } else { + msg = "接收json数据为空"; + } + } catch (ConnectException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 100 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + msg = "socket连接失败!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket连接失败"); + logInfoDTO.setFailReason("连接失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (SocketException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 101 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + msg = "socket异常"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket发生异常"); + logInfoDTO.setFailReason("发生异常"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (UnknownHostException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10011\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + msg = "DNS解析失败!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socketDNS解析失败"); + logInfoDTO.setFailReason("DNS解析失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10012\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + msg = "转码异常!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket转码异常"); + logInfoDTO.setFailReason("转码异常"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (IOException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10013\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketLine/" + name, json, 1, false); + msg = "连接超时导致读写异常!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket连接超时导致读写异常"); + logInfoDTO.setFailReason("连接超时"); + UserLogFeignClient.addUserLog(logInfoDTO); + } finally { + safeColse(socket, din, is, null); + } + return msg; + } + + //终端校验内部定值 + public String sentDZDev(String ip, String message, String host, Integer port, String name, List list) { + LogInfoDTO logInfoDTO = new LogInfoDTO(); + logInfoDTO.setLoginName(RequestUtil.getLoginName()); + logInfoDTO.setUserName(RequestUtil.getUserNickname()); + logInfoDTO.setIp(ip); + logInfoDTO.setOperateType("查询"); + logInfoDTO.setType(1); + logInfoDTO.setServiceName("终端定值管理"); + + String msg = ""; + String result = null; + Socket socket = null; + InputStream is = null; + BufferedReader din = null; + try { + socket = new Socket(host, port); + socket.setSoTimeout(20000);//设置超时时间 + socket.getOutputStream().write(message.getBytes("UTF-8")); + is = socket.getInputStream(); + din = new BufferedReader(new InputStreamReader(is, "UTF-8")); + char[] buffer = new char[100240000]; + StringBuffer stringBuffer = new StringBuffer(); + while (true) { + int len = din.read(buffer); + if (len > -1) { + result = new String(buffer, 0, len); + stringBuffer.append(result); + try { + new JSONObject(stringBuffer); + break; + } catch (Exception e) { + logger.error("未加载完全,持续加载中!"); + } + } + } + JSONObject jsonObject = new JSONObject(stringBuffer.toString()); + if (jsonObject != null) { + if (jsonObject.get("resultcode").toString().equals("10000")) { + JSONObject data = jsonObject.getJSONObject("data"); + if (data == null) { + //表示刚连接成功 + mqttPublisher.send("/dev/socketDev/" + name, stringBuffer, 1, false); + msg = "无数据传输"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("内部定值无数据传输"); + UserLogFeignClient.addUserLog(logInfoDTO); + + } else { + mqttPublisher.send("/dev/socketDev/" + name, stringBuffer, 1, false); + + msg = "请求成功!" + "请稍候......"; + logInfoDTO.setResult(1); + logInfoDTO.setLevel(0); + logInfoDTO.setOperate("内部定值获取成功"); + UserLogFeignClient.addUserLog(logInfoDTO); + } + } else if (jsonObject.get("resultcode").toString().equals("10010")) { + + mqttPublisher.send("/dev/socketDev/" + name, stringBuffer, 1, false); + msg = ""; + } else if (jsonObject.get("resultcode").toString().equals("10003")) { + + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 10003 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, stringBuffer, 1, false); + + msg = "JSON字符串解析出错"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("JSON字符串解析失败"); + logInfoDTO.setFailReason("JSON字符串解析失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } else { + mqttPublisher.send("/dev/socketDev/" + name, stringBuffer, 1, false); + } + + } else { + msg = "接收json数据为空"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("接收JSON数据失败"); + logInfoDTO.setFailReason("接收JSON数据失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } + } catch (ConnectException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 100 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, json, 1, false); + msg = "socket连接失败!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket连接失败"); + logInfoDTO.setFailReason("连接失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (SocketException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":" + 101 + ",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, json, 1, false); + msg = "socket异常"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket发生异常"); + logInfoDTO.setFailReason("发生异常"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (UnknownHostException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10011\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, json, 1, false); + msg = "DNS解析失败!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socketDNS解析失败"); + logInfoDTO.setFailReason("解析失败"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10012\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, json, 1, false); + msg = "转码异常!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket转码异常"); + logInfoDTO.setFailReason("转码异常"); + UserLogFeignClient.addUserLog(logInfoDTO); + } catch (IOException e) { + e.printStackTrace(); + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"10013\",\"data\":" + jsonArray.toString() + "}"; + mqttPublisher.send("/dev/socketDev/" + name, json, 1, false); + msg = "连接超时导致读写异常!"; + logInfoDTO.setResult(0); + logInfoDTO.setLevel(1); + logInfoDTO.setOperate("socket连接超时导致读写异常"); + logInfoDTO.setFailReason("连接超时"); + UserLogFeignClient.addUserLog(logInfoDTO); + } finally { + safeColse(socket, din, is, null); + } + return msg; + } + + //关闭连接 + private void safeColse(Socket socket, BufferedReader bufferedReader, InputStream inputStream, OutputStream outputStream) { + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + logger.error("发生错误,错误信息" + e.getMessage()); + } + } + if (bufferedReader != null) { + try { + bufferedReader.close(); + } catch (IOException e) { + logger.error("发生错误,错误信息" + e.getMessage()); + } + } + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + logger.error("发生错误,错误信息" + e.getMessage()); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + logger.error("发生错误,错误信息" + e.getMessage()); + } + } + } + + //终端性能查看 +// @Async("asyncExecutor") + public void showProperty(String message, String host, Integer port, String devID) { + Runnable runnable = () -> { + String result; + OutputStream outputStream = null; + BufferedReader din = null; + Socket socket = null; + try { + socket = new Socket(host, port); + socket.setSoTimeout(20000); //20s未接受到数据自动超时中断 + socketQuMap.put(devID, socket); + outputStream = socket.getOutputStream(); + outputStream.write(message.getBytes("UTF-8")); + din = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); + while ((result = din.readLine()) != null) { + JSONObject jsonObject = new JSONObject(result); + jsonObject.set("type", "190"); + if (jsonObject.get("resultcode").toString().equals("10000")) { + mqttPublisher.send("/dev/showProperty/" + devID, jsonObject, 1, false); + } else { + mqttPublisher.send("/dev/showProperty/" + devID, jsonObject, 1, false); + } + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("终端性能异常" + e.getMessage()); + JSONObject json = new JSONObject(); + json.set("type", "190").set("resultcode", "20000").set("resultmsg", "未知异常"); + mqttPublisher.send("/dev/showProperty/" + devID, json, 1, false); + } catch (Exception e) { + e.printStackTrace(); + } finally { + safeColse(socket, din, null, outputStream); + if (socketQuMap.containsKey(devID)) { + socketQuMap.remove(devID); + } + } + }; + executorPool.execute(runnable); + } + + //终端性能查看连接关闭 + public String closeDevSocket(String msg, String host, Integer port,String devID) throws Exception { + if (socketQuMap.containsKey(devID)) { + String result = null; + Socket socket = null; + OutputStream outputStream = null; + BufferedReader bufferedReader = null; + try { + socket = new Socket(host, port); + socket.setSoTimeout(5000); + outputStream = socket.getOutputStream(); + outputStream.write(msg.getBytes("UTF-8")); + bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + while ((result = bufferedReader.readLine()) != null) { + JSONObject jsonObject = new JSONObject(result); + if (jsonObject.getStr("resultcode").equals("10000")) { + } + break; + } + } catch (IOException e) { + e.printStackTrace(); + logger.error(e.getMessage()); + } finally { + socketQuMap.get(devID).shutdownOutput(); + safeColse(socket, null, null, outputStream); + } + } + return "终端性能查看,关闭成功"; + } + + //监测点实时数据查看 + public void realTimeData(String message, String host, Integer port, String lineIndex) { + String loginName = RequestUtil.getLoginName(); + Runnable real = () -> { + if (Objects.isNull(lineMap)) { + lineMap = new HashMap<>(); + } + if (lineMap.containsKey(lineIndex)) { + //存在监测点 + List lineL = lineMap.get(lineIndex); + if (!lineL.contains(loginName)) { + lineL.add(loginName); + } + } else { + List userList = new ArrayList<>(); + userList.add(loginName); + lineMap.put(lineIndex, userList); + } + + Iterator>> iterator = lineMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> en = iterator.next(); + if (!en.getKey().equals(lineIndex)) { + List login = en.getValue(); + if (CollectionUtil.isNotEmpty(login)) { + login.remove(loginName); + } + } + + } + + if (lineMap.size() > 1) { + //判断是否查看的是同一台装置信息 + Set set = lineMap.keySet(); + Integer count = lineMapper.getDevIndexs(set); + if (count < lineMap.size()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set("resultcode", 5557); + jsonObject.set("resultmsg", "存在其他用户相同操作,请稍后尝试"); + if (Objects.nonNull(lineMap)) { + mqttPublisher.send("/dev/realTimeData/" + loginName, jsonObject, 1, false); + } + lineMap.remove(lineIndex); + return; + } + } + + + if (lineSocketMap == null) { + lineSocketMap = new HashMap<>(); + } + if (!lineSocketMap.containsKey(lineIndex)) { + Socket socket = null; + BufferedReader bufferedReader = null; + OutputStream outputStream = null; + try { + socket = new Socket(); + SocketAddress socketAddress = new InetSocketAddress(host, port); + socket.connect(socketAddress, 7000); + socket.setSoTimeout(20000); + lineSocketMap.put(lineIndex, socket); + outputStream = socket.getOutputStream(); + outputStream.write(message.getBytes("UTF-8")); + bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); + String result; + while ((result = bufferedReader.readLine()) != null) { + net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(result); + String code = jsonObject.getString("resultcode"); + if (code.equals("10000")) { + + + String str = ""; + List nameList = lineMap.get(lineIndex); + if (CollectionUtil.isNotEmpty(nameList)) { + for (String s : nameList) { + str += s + " "; + } + // System.out.println(str + " " + lineIndex); + mqttPublisher.send("/dev/realTimeData/" + loginName, jsonObject, 1, false); + } + } else if (code.equals("10008")) { + List nameList = lineMap.get(lineIndex); + if (CollectionUtil.isNotEmpty(nameList)) { + mqttPublisher.send("/dev/realTimeData/" + loginName, jsonObject, 1, false); + } + break; + } + + } + } catch (SocketTimeoutException e) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("resultcode", 5555); + jsonObject.put("resultmsg", "请求超时"); + if (Objects.nonNull(lineMap)) { + List name = lineMap.get(lineIndex); + if (CollectionUtil.isNotEmpty(name)) { + mqttPublisher.send("/dev/realTimeData/" + loginName, jsonObject, 1, false); + } + } + e.printStackTrace(); + } catch (ConnectException e) { + e.printStackTrace(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("resultcode", 5556); + jsonObject.put("resultmsg", "连接前置服务器失败"); + if (lineMap.get(lineIndex) != null) { + mqttPublisher.send("/dev/realTimeData/" + loginName, jsonObject, 1, false); + } + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + safeColse(socket, bufferedReader, null, outputStream); + if (lineSocketMap != null) { + lineSocketMap.remove(lineIndex); + } + if (lineMap != null) { + lineMap.remove(lineIndex); + } + } + } + }; + executorPool.execute(real); + } + + //监测点实时数据心跳 + public void heartRealData(String msg, String host, Integer port, String lineIndex) { + if (lineMap != null) { + if (lineMap.containsKey(lineIndex)) { + String result = null; + OutputStream outputStream = null; + BufferedReader bufferedReader = null; + Socket socket = null; + + try { + socket = new Socket(host, port); + socket.setSoTimeout(10000); + outputStream = socket.getOutputStream(); + outputStream.write(msg.getBytes("UTF-8")); + bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + while ((result = bufferedReader.readLine()) != null) { + if (StrUtil.isNotBlank(result)) { + net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(result); + if (jsonObject.get("resultcode").equals("10000")) { + break; + } + } else { + logger.error("实时数据socket异常!"); + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + safeColse(socket, bufferedReader, null, outputStream); + } + } + } + } + + //监测点实时数据连接关闭 + public void closeRealData(String lineIndex) { + String loginName = RequestUtil.getLoginName(); + if (lineMap != null) { + if (lineMap.containsKey(lineIndex)) { + List user = lineMap.get(lineIndex); + if (CollectionUtil.isNotEmpty(user)) { + user.remove(loginName); + if (user.size() == 0) { + lineMap.remove(lineIndex); + Socket socket = null; + String result = null; + OutputStream outputStream = null; + BufferedReader bufferedReader = null; + try { + JSONObject jsonObject = new JSONObject(); + jsonObject.set("LineId", lineIndex); + jsonObject.set("type", 2); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.set("len", 0); + jsonObject1.set("data", jsonObject); + + String host = lineMapper.getNodeIp(lineIndex,0); + socket = new Socket(host, 60000); + socket.setSoTimeout(10000); + outputStream = socket.getOutputStream(); + outputStream.write(jsonObject1.toString().getBytes()); + InputStream inputStream = socket.getInputStream(); + bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + while ((result = bufferedReader.readLine()) != null) { + net.sf.json.JSONObject jj = net.sf.json.JSONObject.fromObject(result); + //JSONObject jj = new JSONObject(result); + if (jj.getString("resultcode").equals("10000")) { + // System.out.println("已经告诉前置关闭实时数据" + lineIndex); + lineSocketMap.get(lineIndex).shutdownOutput(); + break; + } + } + + // System.out.println(loginName + "前台请求关闭实时数据" + lineIndex); + } catch (IOException e) { + e.printStackTrace(); + } finally { + safeColse(socket, bufferedReader, null, outputStream); + } + lineSocketMap.remove(lineIndex); + } + } + } + } + } + + + //升级终端 + public void sentUpgrades(String message, String host, Integer port, String loginName, String edIndex, List list) { + String userId = RequestUtil.getUserIndex(); + sumMap.put(userId + host, 0); + sumCanMap.put(userId + host, 0); + sumResMap.put(userId + host, 0); + sumDevMap.put(userId + host, list.size()); + System.out.println(message); + logger.info("发起升级装置命令:"+message); + Runnable myCallable = () -> { + + String result = null; + Socket socket = null; + InputStream is = null; + BufferedReader din = null; + OutputStream outputStream = null; + JSONArray jsonArray = new JSONArray(list); + String json = "{\"resultcode\":\"100\",\"type\":\"180\",\"data\":" + jsonArray + "}"; + DevVersion version; + try { + SocketAddress socketAddress = new InetSocketAddress(host, port); + socket = new Socket(); + socket.connect(socketAddress, 7000); + socket.setSoTimeout(60*1000*3); + socketMap.put(userId + host, socket); + outputStream = socket.getOutputStream(); + outputStream.write(message.getBytes("UTF-8")); + is = socket.getInputStream(); + din = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + while ((result = din.readLine()) != null) { + + System.out.println(result); + logger.info("升级流程:"+message); + + JSONObject jsonObject = new JSONObject(result.trim()); + + jsonObject.set("type", "180"); + if (jsonObject.get("resultcode").toString().equals("10000")) { + JSONObject data = jsonObject.getJSONObject("data"); + if (data == null) { + //表示刚连接成功 + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + } else { + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + if (data.get("state").equals("2")) { + Integer succeed = sumMap.get(userId + host); + succeed++; + sumMap.put(userId + host, succeed); + } else if (data.get("state").equals("3")) { + Integer fail = sumMap.get(userId + host); + fail++; + sumMap.put(userId + host, fail); + } + } + } else if (jsonObject.get("resultcode").toString().equals("10010")) { + + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + + } else if (jsonObject.get("resultcode").toString().equals("10003")) { + + mqttPublisher.send("/dev/upgrades/" + loginName, json, 1, false); + Integer fail = sumMap.get(userId + host); + for (UpDevVO dev : list) { + fail++; + version=new DevVersion(); + version.setLineId(dev.getDevIndex()); + version.setVersionId(edIndex); + version.setFlag(0); + version.setResult(0); + version.setState(1); + devVersionMapper.insert(version); + } + sumMap.put(userId + host, fail); + + } else if (jsonObject.get("resultcode").toString().equals("10008")) { + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + } else { + Integer fail = sumMap.get(userId + host); + System.out.println(fail); + fail++; + sumMap.put(userId + host, fail); + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + } + + Integer resSum = sumMap.get(userId + host); + + if (resSum == list.size()) { + System.out.println("进入break跳出升级流程总装置数:" + resSum); + break; + } + + + } + } catch (SocketTimeoutException red) { + red.printStackTrace(); + //全部取消升级操作 异常不处理 + logger.error("终端升级连接超时,联系管理员排查问题" + red.getMessage()); + JSONObject jj = new JSONObject(); + jj.set("resultcode", 77777); + jj.set("type", 180); + mqttPublisher.send("/dev/upgrades/" + loginName, jj, 1, false); + } catch (ConnectException e) { + e.printStackTrace(); + logger.error("发生错误,错误信息" + e.getMessage()); + for (UpDevVO dev : list) { + version=new DevVersion(); + version.setLineId(dev.getDevIndex()); + version.setVersionId(edIndex); + version.setFlag(0); + version.setResult(0); + version.setState(1); + devVersionMapper.insert(version); + } + mqttPublisher.send("/dev/upgrades/" + loginName, json, 1, false); + } catch (Exception e) { + e.printStackTrace(); + logger.error("发生错误,错误信息" + e.getMessage()); + for (UpDevVO dev : list) { + version=new DevVersion(); + version.setLineId(dev.getDevIndex()); + version.setVersionId(edIndex); + version.setFlag(0); + version.setResult(0); + version.setState(1); + devVersionMapper.insert(version); + } + mqttPublisher.send("/dev/upgrades/" + loginName, json, 1, false); + } finally { + //不管失败成功告诉前台页面升级程序结束 + JSONObject jsonObject = new JSONObject(); + jsonObject.set("type", 180); + jsonObject.set("resultcode", -10000); + jsonObject.set("data", list); + mqttPublisher.send("/dev/upgrades/" + loginName, jsonObject, 1, false); + safeColse(socket, din, is, outputStream); + delMapData(userId + host); + } + }; + executorPool.execute(myCallable); + } + + //取消升级终端 + public void cancelUp(String json, String host, Integer port, Integer devNum) { + String loginName =RequestUtil.getLoginName(); + String userId = RequestUtil.getUserIndex(); + Runnable aaa = () -> { + Socket socket = null; + InputStream inputStream = null; + BufferedReader bufferedReader = null; + String result = ""; + try { + Integer deflag = 0; + socket = new Socket(host, port); + socket.setSoTimeout(20000); + socket.getOutputStream().write(json.getBytes()); + inputStream = socket.getInputStream(); + bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + + while ((result = bufferedReader.readLine()) != null) { + System.out.println(result); + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(result.trim()); + } catch (Exception json1) { + json1.printStackTrace(); + } + if ((jsonObject.get("resultcode").toString()).equals("10000")) { + deflag++; + Integer csum = sumCanMap.get(userId + host); + csum++; + sumCanMap.put(userId + host, csum); + + Integer sum = sumMap.get(userId + host); + sum++; + sumMap.put(userId + host, sum); + } + jsonObject.set("type", "182"); + mqttPublisher.send("/dev/cancelUp/" + loginName, json, 1, false); + System.out.println(sumCanMap.get(userId + host)); + System.out.println(sumMap.get(userId + host)); + + if (sumMap.get(userId + host).equals(sumDevMap.get(userId + host))) { + Socket ss = socketMap.get(userId + host); + System.out.println("进入关闭socket流程"); + if (ss != null) { + ss.shutdownOutput(); + } + } + + if (devNum.equals(deflag)) { + break; + } + } + + } catch (IOException e) { + logger.error("终端升级取消命令发送失败"); + e.printStackTrace(); + } finally { + System.out.println("取消结束+++"); + safeColse(socket, bufferedReader, inputStream, null); + } + + }; + executorPool.execute(aaa); + } + + //重启升级成功的装置 + public void restartDev(String json, String host, Integer port, List devL) { + System.out.println("重启装置" + host + "命令:" + json); + Integer sum = devL.size(); + String loginName = RequestUtil.getLoginName(); + String userId = RequestUtil.getUserIndex(); + Runnable aaa = () -> { + Socket socket = null; + BufferedReader bufferedReader = null; + OutputStream outputStream = null; + JSONObject jsonObject = null; + String result = null; + List devIndexList = new ArrayList<>(); + try { + socket = new Socket(host, port); + socket.setSoTimeout(1000*60*6); + outputStream = socket.getOutputStream(); + outputStream.write(json.getBytes()); + bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + + Socket socket1 = socket; + + Runnable heart = () -> { + finalFlag = true; + try { + while (finalFlag){ + Thread.sleep(15000); + if(socket1!=null) { + if (socket1.isConnected() && !socket1.isClosed()) { + socket1.getOutputStream().write(new JSONObject().put("heart", "666").toString().getBytes()); + System.out.println("心跳发送成功"); + } + } + + } + + } catch (Exception e) { + e.printStackTrace(); + finalFlag = false; + } + System.out.println("是否发送心跳标识"+ finalFlag); + }; + executorPool.execute(heart); + while ((result = bufferedReader.readLine()) != null) { + System.out.println(result); + + try { + jsonObject = new JSONObject(result.trim()); + } catch (Exception json1) { + json1.printStackTrace(); + logger.error("终端升级重启命令发送失败" + json1.getMessage()); + break; + } + if ((jsonObject.get("resultcode")).equals(10000)) { + //处理成功进行入库记录日志 + // Integer succeed = sumResMap.get(userId + host); + // succeed++; + // sumResMap.put(userId + host, succeed); + } else if ((jsonObject.get("resultcode")).equals(10008)) { + + } else if ((jsonObject.get("resultcode")).equals(10001)) { + devIndexList.add(jsonObject.getJSONObject("data").getStr("devIndex")); + Integer succeed = sumResMap.get(userId + host); + succeed++; + sumResMap.put(userId + host, succeed); + } else { + Integer succeed = sumResMap.get(userId + host); + succeed++; + sumResMap.put(userId + host, succeed); + } + jsonObject.set("type", "181"); + mqttPublisher.send("/dev/restartDev/" + loginName, jsonObject, 1, false); + if (sum.equals(sumResMap.get(userId + host))) { + System.out.println("重启总数量:"+sum+"-"+sumResMap.get(userId + host)); + finalFlag = false; + break; + } + } + + } catch (SocketTimeoutException e) { + e.printStackTrace(); + //超时处理 + JSONObject json1 = new JSONObject(); + json1.set("resultcode", 5555); + json1.set("resultmsg", "超时"); + json1.set("type", 181); + mqttPublisher.send("/dev/restartDev/" + loginName, json1, 1, false); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception ee) { + ee.printStackTrace(); + } finally { + finalFlag = false; + System.out.println("重启socket结束+++"); + safeColse(socket, bufferedReader, null, outputStream); + socketMap.remove(userId + host); + } + + }; + executorPool.execute(aaa); + + } + + /** + * @Description:清空全局变量释放内存 + * @param key + * @Author: wr + * @Date: 2023/8/16 16:15 + */ + public void delMapData(String key) { + if (sumMap != null) { + sumMap.remove(key); + } + if (sumCanMap != null) { + sumCanMap.remove(key); + } + } +} + + + + +