diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/enums/PvDeviceResponseEnum.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/enums/PvDeviceResponseEnum.java index 18c7117db..3a3a6bb9c 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/enums/PvDeviceResponseEnum.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/enums/PvDeviceResponseEnum.java @@ -49,6 +49,8 @@ public enum PvDeviceResponseEnum { PROJECT_OR_NOT("A00550","项目名称为空,请检查信息是否存在!"), PROVINCE_OR_NOT("A00550","省级名称为空,请检查信息是否存在!"), GD_OR_NOT("A00550","供电公司名称为空,请检查信息是否存在!"), + OVER_LIMIT("A00550","前置机配置设备过多"), + NO_DEVICE("A00550","前置机下无设备"), ; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/DeviceInfo.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/DeviceInfo.java index efab3cdf3..04333928d 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/DeviceInfo.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/DeviceInfo.java @@ -38,6 +38,8 @@ public class DeviceInfo { private String series; //终端识别码 private String devKey; + + private Integer processNo; // private List monitorData; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/NodeDeviceParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/NodeDeviceParam.java index 8884e505e..05e0c63ff 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/NodeDeviceParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/NodeDeviceParam.java @@ -23,7 +23,6 @@ import java.util.List; @ApiModel public class NodeDeviceParam { - /** * 服务器IP */ @@ -31,4 +30,6 @@ public class NodeDeviceParam { private String ip; private List runFlag; + + private String devId; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DeviceProcess.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DeviceProcess.java new file mode 100644 index 000000000..0a082c6e4 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/DeviceProcess.java @@ -0,0 +1,24 @@ +package com.njcn.device.pq.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + * Description: + * Date: 2025/01/22 下午 1:53【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +@TableName("pq_device_process") +public class DeviceProcess implements Serializable { + private static final long serialVersionUID = 1L; + //设备id + private String id; + //设备设备所在前置机进程号 + private Integer processNo; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Node.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Node.java index c5b6349cc..a2e5c2e39 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Node.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Node.java @@ -55,6 +55,14 @@ public class Node extends BaseEntity { */ private Integer nodeDevNum; + + /** + * 前置机支持最大进程数量 + */ + private Integer maxProcessNum; + + + /** * 排序 */ diff --git a/pqs-device/pq-device/pq-device-boot/pom.xml b/pqs-device/pq-device/pq-device-boot/pom.xml index c2dfa7ba3..f3c33f4ae 100644 --- a/pqs-device/pq-device/pq-device-boot/pom.xml +++ b/pqs-device/pq-device/pq-device-boot/pom.xml @@ -45,6 +45,15 @@ 1.0.0 compile + + com.njcn.platform + message-api + 1.0.0 + compile + + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/NodeDeviceController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/NodeDeviceController.java index 63b37cc47..b40f5fb54 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/NodeDeviceController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/NodeDeviceController.java @@ -49,6 +49,14 @@ public class NodeDeviceController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + @ApiOperation("一键分配装置所属进程号") + @OperateInfo(info = LogEnum.BUSINESS_MEDIUM) + @PostMapping("oneKeyDistribution") + public HttpResult oneKeyDistribution(@RequestParam("nodeId") String nodeId){ + String methodDescribe = getMethodDescribe("oneKeyDistribution"); + nodeDeviceService.oneKeyDistribution(nodeId); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java index e63ed6dec..4d73bff8b 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java @@ -17,11 +17,14 @@ import com.njcn.device.pq.pojo.bo.excel.TerminalBaseExcel; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; import com.njcn.device.pq.pojo.param.*; import com.njcn.device.pq.pojo.po.Line; +import com.njcn.device.pq.pojo.vo.LineDetailDataVO; import com.njcn.device.pq.pojo.vo.LineWiringDiagramVO; import com.njcn.device.pq.pojo.vo.TerminalBaseVO; import com.njcn.device.pq.pojo.vo.TerminalVO; +import com.njcn.device.pq.service.LineService; import com.njcn.device.pq.service.TerminalBaseService; import com.njcn.device.pq.service.impl.GeneralDeviceService; +import com.njcn.message.constant.DeviceRebootType; import com.njcn.poi.util.PoiUtil; import com.njcn.web.controller.BaseController; import io.swagger.annotations.*; @@ -56,7 +59,7 @@ public class TerminalBaseController extends BaseController { private final TerminalBaseService terminalBaseService; private final GeneralDeviceService generalDeviceService; - + private final LineService lineService; /** * 终端新增操作 @@ -117,6 +120,15 @@ public class TerminalBaseController extends BaseController { } } terminalBaseService.addTerminal(addTerminalParam); + //新增终端后发送消息给前置重启设备 + if (Objects.nonNull(addTerminalParam.getDeviceParam())) { + addTerminalParam.getDeviceParam().forEach(temp->{ + Line line = terminalBaseService.queryTerminalByName(temp.getName()); + terminalBaseService.askRestartDevice(line.getId(), DeviceRebootType.ADD_TERMINAL); + }); + + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } @@ -145,7 +157,14 @@ public class TerminalBaseController extends BaseController { @GetMapping("/terminalSyncDeleteFly") public HttpResult terminalSyncDeleteFly(@RequestParam("lineId") String lineId) { String methodDescribe = getMethodDescribe("terminalSyncDeleteFly"); + //获取设备id + LineDetailDataVO lineDetailData = lineService.getLineDetailData(lineId); + String devId =lineDetailData.getDevId(); + Boolean b = terminalBaseService.terminalSyncDeleteFly(lineId); + //删除监测点即修改终端通知前置重启 + terminalBaseService.askRestartDevice(devId,DeviceRebootType.LEDGER_MODIFY); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, b, methodDescribe); } @@ -192,6 +211,9 @@ public class TerminalBaseController extends BaseController { public HttpResult delTerminal(@RequestParam("id") String id) { String methodDescribe = getMethodDescribe("delTerminal"); terminalBaseService.delTerminal(id); +// 删除终端通知前置重启 + terminalBaseService.askRestartDevice(id,DeviceRebootType.DELETE_TERMINAL); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } @@ -412,4 +434,31 @@ public class TerminalBaseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @ApiOperation("请求前置重启进程") + @PostMapping(value = "askRestartProcess") + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.DELETE) + @ApiImplicitParams({ + @ApiImplicitParam(name = "processNo", value = "进程号", required = true), + @ApiImplicitParam(name = "deviceRebootType", value = "重启类型", required = true) + }) + public HttpResult askRestartProcess(@RequestParam("processNo")Integer processNo,@RequestParam("processType")String processType,@RequestParam("deviceRebootType")String deviceRebootType) { + String methodDescribe = getMethodDescribe("askRestartProcess"); + terminalBaseService.askRestartProcess(processNo,processType,deviceRebootType); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } + + @ApiOperation("请求前置设备进程") + @PostMapping(value = "askRestartDevice") + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.DELETE) + @ApiImplicitParams({ + @ApiImplicitParam(name = "devId", value = "设备id", required = true), + @ApiImplicitParam(name = "deviceRebootType", value = "重启类型", required = true) + }) + public HttpResult askRestartDevice(@RequestParam("devId")String devId,@RequestParam("deviceRebootType")String deviceRebootType) { + String methodDescribe = getMethodDescribe("askRestartDevice"); + terminalBaseService.askRestartDevice(devId,deviceRebootType); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeviceProcessMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeviceProcessMapper.java new file mode 100644 index 000000000..9fea5fb68 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeviceProcessMapper.java @@ -0,0 +1,29 @@ +package com.njcn.device.pq.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.device.pq.pojo.po.Device; +import com.njcn.device.pq.pojo.po.DeviceProcess; +import com.njcn.device.pq.pojo.vo.DevDetail; +import com.njcn.device.pq.pojo.vo.LineInfluxDbOnlineVO; +import com.njcn.device.pq.pojo.vo.RunManageVO; +import com.njcn.device.pq.pojo.vo.RunTimeVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author cdf + * @since 2022-01-04 + */ +public interface DeviceProcessMapper extends BaseMapper { + + + + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeviceProcessMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeviceProcessMapper.xml new file mode 100644 index 000000000..9e6f0ea29 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeviceProcessMapper.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/NodeMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/NodeMapper.xml index ae7c36e9f..9a5996559 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/NodeMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/NodeMapper.xml @@ -14,17 +14,22 @@ s2.Name manufacturer, pq_device.Com_Flag status, pq_device.Series series, + pq_device_process.process_no processNo, pq_device.Dev_Key devKey FROM pq_node LEFT JOIN pq_device ON pq_node.Id = pq_device.Node_Id LEFT JOIN pq_line on pq_device.id = pq_line.id + LEFT JOIN pq_device_process on pq_device_process.id = pq_device.id LEFT JOIN sys_dict_data s1 ON pq_device.Dev_Type = s1.id LEFT JOIN sys_dict_data s2 ON pq_device.Manufacturer = s2.id pq_node.ip=#{nodeDeviceParam.ip} + + pq_device.id=#{nodeDeviceParam.devId} + AND pq_device.Run_Flag in diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceProcessService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceProcessService.java new file mode 100644 index 000000000..1e72aaa10 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceProcessService.java @@ -0,0 +1,16 @@ +package com.njcn.device.pq.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.biz.pojo.po.DeviceBak; +import com.njcn.device.pq.pojo.po.DeviceProcess; + +/** + * 监测点类 + * @author denghuajun + * @date 2022/2/23 + * + */ +public interface DeviceProcessService extends IService { + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/NodeDeviceService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/NodeDeviceService.java index 839f414a4..aa93abe62 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/NodeDeviceService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/NodeDeviceService.java @@ -16,4 +16,6 @@ import java.util.List; public interface NodeDeviceService { List nodeDeviceList(NodeDeviceParam nodeDeviceParam); + + void oneKeyDistribution(String nodeId); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java index 80d6cc021..27eb03e3c 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java @@ -49,6 +49,14 @@ public interface TerminalBaseService { */ TerminalVO queryTerminal(String id); + /** + * 终端查询操作 + * @param devName 设备名称 + * @author cdf + * @date 2021/7/19 + */ + Line queryTerminalByName(String devName); + /** * 终端删除操作 * @param id 设备id @@ -275,4 +283,9 @@ public interface TerminalBaseService { * @return */ Boolean terminalSyncDeleteFly(String lineId); + + //通知前置重启设备 + void askRestartProcess(Integer processNo,String processType,String deviceRebootType); + + void askRestartDevice(String devId, String deviceRebootType); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceProcessServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceProcessServiceImpl.java new file mode 100644 index 000000000..58c133480 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceProcessServiceImpl.java @@ -0,0 +1,23 @@ +package com.njcn.device.pq.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.device.biz.pojo.po.DeviceBak; +import com.njcn.device.pq.mapper.DeviceBakMapper; +import com.njcn.device.pq.mapper.DeviceProcessMapper; +import com.njcn.device.pq.pojo.po.Device; +import com.njcn.device.pq.pojo.po.DeviceProcess; +import com.njcn.device.pq.service.DeviceProcessService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * Description: + * Date: 2025/01/22 下午 1:59【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +@RequiredArgsConstructor +public class DeviceProcessServiceImpl extends ServiceImpl implements DeviceProcessService { +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/NodeDeviceServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/NodeDeviceServiceImpl.java index a3e8d81fa..e71d04fdc 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/NodeDeviceServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/NodeDeviceServiceImpl.java @@ -1,15 +1,28 @@ package com.njcn.device.pq.service.impl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.pq.enums.PvDeviceResponseEnum; +import com.njcn.device.pq.mapper.DeviceMapper; import com.njcn.device.pq.mapper.LineMapper; import com.njcn.device.pq.mapper.NodeMapper; import com.njcn.device.pq.pojo.dto.DeviceInfo; import com.njcn.device.pq.pojo.dto.MonitorInfo; import com.njcn.device.pq.pojo.param.NodeDeviceParam; +import com.njcn.device.pq.pojo.po.Device; +import com.njcn.device.pq.pojo.po.DeviceProcess; +import com.njcn.device.pq.pojo.po.Node; +import com.njcn.device.pq.service.DeviceProcessService; +import com.njcn.device.pq.service.IDeviceService; import com.njcn.device.pq.service.NodeDeviceService; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.springframework.stereotype.Service; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Description: @@ -23,6 +36,8 @@ import java.util.List; public class NodeDeviceServiceImpl implements NodeDeviceService { private final NodeMapper nodeMapper; private final LineMapper lineMapper; + private final IDeviceService iDeviceService; + private final DeviceProcessService deviceProcessService; @Override public List nodeDeviceList(NodeDeviceParam nodeDeviceParam) { @@ -34,4 +49,37 @@ public class NodeDeviceServiceImpl implements NodeDeviceService { return list; } + + @Override + public void oneKeyDistribution(String nodeId) { + Node node = nodeMapper.selectById(nodeId); + Integer nodeDevNum = node.getNodeDevNum(); + Integer maxProcessNum = node.getMaxProcessNum(); + List list = iDeviceService.lambdaQuery().eq(Device::getNodeId, nodeId).list(); + if(CollectionUtils.isEmpty(list)){ + throw new BusinessException(PvDeviceResponseEnum.NO_DEVICE); + + } + List deviceIdList = list.stream().map(Device::getId).collect(Collectors.toList()); + List deviceProcessList = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list(); + Integer devNum = list.size(); + if(nodeDevNum> partition = ListUtils.partition(deviceProcessList, maxProcessNum); + for (int i = 0; i < partition.size(); i++) { + int processNo = i+1; + partition.get(i).forEach(temp->{ + temp.setProcessNo(processNo); + }); + } + List collect = partition.stream().flatMap(List::stream).collect(Collectors.toList()); + + //更新进程号 + deviceProcessService.updateBatchById(collect); + + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java index 99883f950..ef775aa98 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java @@ -37,6 +37,7 @@ import com.njcn.device.pq.pojo.bo.excel.NodeExcel; import com.njcn.device.pq.pojo.bo.excel.OracleTerminalExcel; import com.njcn.device.pq.pojo.bo.excel.OverLimitExcel; import com.njcn.device.pq.pojo.bo.excel.TerminalBaseExcel; +import com.njcn.device.pq.pojo.dto.DeviceInfo; import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO; import com.njcn.device.pq.pojo.param.*; import com.njcn.device.pq.pojo.param.oracle.*; @@ -45,6 +46,10 @@ import com.njcn.device.pq.pojo.vo.*; import com.njcn.device.pq.service.*; import com.njcn.device.pq.utils.DeviceUtil; import com.njcn.device.pq.utils.ExcelStyleUtil; +import com.njcn.message.api.ProduceFeignClient; +import com.njcn.message.constant.DeviceRebootType; +import com.njcn.message.message.DeviceRebootMessage; +import com.njcn.message.message.ProcessRebootMessage; import com.njcn.oss.constant.OssPath; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.poi.excel.ExcelUtil; @@ -107,7 +112,9 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple private final FileStorageUtil fileStorageUtil; private final RedisUtil redisUtil; - + private final NodeDeviceService nodeDeviceService; + private final DeviceProcessService deviceProcessService; + private final ProduceFeignClient produceFeignClient; @Value("${oracle.isSync}") private Boolean isSync; @@ -274,8 +281,39 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple deviceDetail.setUpdateTime(LocalDateTime.now()); //处理装置识别码秘钥 - coderM3d(deviceDetail,false); + coderM3d(deviceDetail, false); deviceMapper.insert(deviceDetail); + //添加装置进程号 + Node nodeById = nodeService.getNodeById(deviceDetail.getNodeId()); + List devices = deviceMapper.selectList(new QueryWrapper().lambda().eq(Device::getNodeId, deviceDetail.getNodeId())); + Integer maxNodeDevNum = nodeById.getNodeDevNum(); + Integer maxProcessNum = nodeById.getMaxProcessNum(); + if (devices.size() >= maxNodeDevNum) { + throw new BusinessException(PvDeviceResponseEnum.OVER_LIMIT); + } + List deviceIdList = devices.stream().map(Device::getId).collect(Collectors.toList()); + List deviceProcessList = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list(); + Map processCountMap = null; + if (Objects.nonNull(maxProcessNum)) { + processCountMap = new HashMap<>(); + for (int i = 0; i < maxProcessNum; i++) { + Integer processNum = i + 1; + long count = deviceProcessList.stream().filter(temp -> Objects.equals(temp.getProcessNo(), processNum)).count(); + Integer processCount = Math.toIntExact(count); + processCountMap.put(processNum, processCount); + } + + } + + //获取数量最少的线程号 + Optional minKey = processCountMap.entrySet() + .stream() + .min(Comparator.comparingInt(e -> e.getValue())) + .map(Map.Entry::getKey); + DeviceProcess deviceProcess = new DeviceProcess(); + deviceProcess.setId(device.getId()); + deviceProcess.setProcessNo(minKey.orElse(1)); + deviceProcessService.saveOrUpdate(deviceProcess); //装置功能 List funList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_FUN.getName()).getData(); if (CollectionUtil.isEmpty(funList)) { @@ -1192,6 +1230,12 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple } + @Override + public Line queryTerminalByName(String devName) { + Line one = this.lambdaQuery().eq(Line::getName, devName).one(); + return one; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean delTerminal(String id) { @@ -3515,5 +3559,68 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple throw new BusinessException("字典转换异常"); } + } + + + @Override + public void askRestartProcess(Integer processNum,String processType, String processRebootType) { + + ProcessRebootMessage procesRebootMessage = new ProcessRebootMessage(); + procesRebootMessage.setIndex(processNum); + List list = new ArrayList<>(); + ProcessRebootMessage.RebootData rebootData = new ProcessRebootMessage.RebootData(); + + rebootData.setFun(processType); + rebootData.setProcessNum(processNum); + rebootData.setFrontType(processRebootType); + list.add(rebootData); + procesRebootMessage.setData(list); + produceFeignClient.askRestartProcess(procesRebootMessage); + + + } + + + @Override + public void askRestartDevice(String devId, String deviceRebootType) { + DeviceProcess one = deviceProcessService.lambdaQuery().eq(DeviceProcess::getId, devId).one(); + + DeviceRebootMessage deviceRebootMessage = new DeviceRebootMessage(); + deviceRebootMessage.setCode(deviceRebootType); + if(Objects.equals(deviceRebootType, DeviceRebootType.DELETE_TERMINAL)){ + DeviceRebootMessage.DeviceInfo deviceInfo = new DeviceRebootMessage.DeviceInfo(); + deviceInfo.setId(devId); + List list = new ArrayList<>(); + list.add(deviceInfo); + deviceRebootMessage.setData(list); + deviceRebootMessage.setIndex(one.getProcessNo()); + produceFeignClient.askRestartDevice(deviceRebootMessage); + //删除设备进程关系 + deviceProcessService.removeById(devId); + + }else { + NodeDeviceParam nodeDeviceParam = new NodeDeviceParam(); + nodeDeviceParam.setDevId(devId); + List deviceInfos = nodeDeviceService.nodeDeviceList(nodeDeviceParam); + if (CollectionUtil.isNotEmpty(deviceInfos)){ + deviceRebootMessage.setIndex(one.getProcessNo()); + DeviceInfo deviceInfo = deviceInfos.get(0); + DeviceRebootMessage.DeviceInfo deviceInfo1 = new DeviceRebootMessage.DeviceInfo(); + BeanUtils.copyProperties(deviceInfo,deviceInfo1); + List monitorInfoList=deviceInfo.getMonitorData().stream().map(tempMonitorInfo->{ + DeviceRebootMessage.DeviceInfo.MonitorInfo m = new DeviceRebootMessage.DeviceInfo.MonitorInfo(); + BeanUtils.copyProperties(tempMonitorInfo,m); + return m; + }).collect(Collectors.toList()); + deviceInfo1.setMonitorData(monitorInfoList); + List list = new ArrayList<>(); + list.add(deviceInfo1); + deviceRebootMessage.setData(list); + produceFeignClient.askRestartDevice(deviceRebootMessage); + } + } + + + } }