| | |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import com.ld.igds.models.Device; |
| | | import com.ld.igds.temp.dto.TempParam; |
| | |
| | | * @param depotId |
| | | * @return |
| | | */ |
| | | List<Device> getCacheDeviceByDepotId(String companyId, String depotId); |
| | | Set<String> getCacheDeviceSerByDepotId(String companyId, String depotId); |
| | | |
| | | |
| | | /** |
| | |
| | | import com.ld.igds.constant.DeviceStatus; |
| | | import com.ld.igds.constant.DeviceType; |
| | | |
| | | import com.ld.igds.io.request.ExeDevice; |
| | | import com.ld.igds.models.Depot; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | @Override |
| | | public List<Device> getCacheDeviceByDepotId(String companyId, String depotId) { |
| | | public Set<String> getCacheDeviceSerByDepotId(String companyId, String depotId) { |
| | | String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_LIST); |
| | | |
| | | Set<String> keys = redisUtil.keys(patten); |
| | | if (null == keys) return null; |
| | | |
| | | List<Device> result = new ArrayList<>(); |
| | | List<Device> list = new ArrayList<>(); |
| | | for (String key : keys) { |
| | | list.addAll((List<Device>) redisUtil.get(key)); |
| | | } |
| | | |
| | | if (list.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | Set<String> result = new HashSet<>(); |
| | | for (Device device : list) { |
| | | if(depotId.equals(device.getDepotId())){ |
| | | result.add(device); |
| | | result.add(device.getSerId()); |
| | | } |
| | | } |
| | | return result; |
| | |
| | | modbusMaster.init(); |
| | | |
| | | //初始化之后等待,避免出现连接未创建 |
| | | Thread.sleep(3000); |
| | | Thread.sleep(2500); |
| | | |
| | | return modbusMaster; |
| | | } |
| | |
| | | * @param deviceCode 设备通道ID |
| | | * @param status 不考虑设备类型,只在通道上标记是OPEN或者CLOSE即可 |
| | | */ |
| | | public static void add2StatusMap(String companyId, String serId, String deviceCode, String status, String mainLink) { |
| | | |
| | | //若不为空,则查询主设备状态 |
| | | if(StringUtils.isNotEmpty(mainLink)){ |
| | | String oldStatus = contextStatusMap.get(ContextUtil.buildDeviceStatusKey(companyId, serId, mainLink)); |
| | | //若风窗或风口开 |
| | | if(DeviceStatus.OPEN.getCode().equals(oldStatus)){ |
| | | //若风机开 |
| | | if(DeviceStatus.OPEN.getCode().equals(status)){ |
| | | status = DeviceStatus.F_OPEN.getCode(); |
| | | } |
| | | //若风机关 |
| | | if(DeviceStatus.CLOSE.getCode().equals(status)){ |
| | | status = DeviceStatus.W_OPEN.getCode(); |
| | | } |
| | | } |
| | | //若风窗或风口开 |
| | | if(DeviceStatus.CLOSE.getCode().equals(oldStatus)){ |
| | | //若风机开 |
| | | if(DeviceStatus.OPEN.getCode().equals(status)){ |
| | | status = DeviceStatus.ERROR.getCode(); |
| | | } |
| | | //若风机关 |
| | | if(DeviceStatus.CLOSE.getCode().equals(status)){ |
| | | status = DeviceStatus.W_CLOSE.getCode(); |
| | | } |
| | | } |
| | | contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, mainLink), status); |
| | | return; |
| | | } |
| | | public static void add2StatusMap(String companyId, String serId, String deviceCode, String status) { |
| | | // System.out.println(mainLink); |
| | | // //若不为空,则查询主设备状态 |
| | | // if(StringUtils.isNotEmpty(mainLink)){ |
| | | // String oldStatus = contextStatusMap.get(ContextUtil.buildDeviceStatusKey(companyId, serId, mainLink)); |
| | | // //若风窗或风口开 |
| | | // if(DeviceStatus.OPEN.getCode().equals(oldStatus)){ |
| | | // //若风机开 |
| | | // if(DeviceStatus.OPEN.getCode().equals(status)){ |
| | | // status = DeviceStatus.F_OPEN.getCode(); |
| | | // } |
| | | // //若风机关 |
| | | // if(DeviceStatus.CLOSE.getCode().equals(status)){ |
| | | // status = DeviceStatus.W_OPEN.getCode(); |
| | | // } |
| | | // } |
| | | // //若风窗或风口开 |
| | | // if(DeviceStatus.CLOSE.getCode().equals(oldStatus)){ |
| | | // //若风机开 |
| | | // if(DeviceStatus.OPEN.getCode().equals(status)){ |
| | | // status = DeviceStatus.ERROR.getCode(); |
| | | // } |
| | | // //若风机关 |
| | | // if(DeviceStatus.CLOSE.getCode().equals(status)){ |
| | | // status = DeviceStatus.W_CLOSE.getCode(); |
| | | // } |
| | | // } |
| | | // contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, mainLink), status); |
| | | // return; |
| | | // } |
| | | contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, deviceCode), status); |
| | | } |
| | | |
| | |
| | | ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false); |
| | | |
| | | log.debug("--------写入值---{}-{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus, null); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus); |
| | | } |
| | | } |
| | | |
| | |
| | | @Override |
| | | public DeviceControlResponse queryStatus(DeviceControlRequest request) { |
| | | try { |
| | | //由于modbus设备可能在多个分机配置上,需根据仓库编码查询设备信息 |
| | | List<Device> list = coreDeviceService.getCacheDeviceByDepotId(request.getCompanyId(), request.getDepotId()); |
| | | List<Device> list = coreDeviceService.getCacheDeviceBySerId(request.getCompanyId(), request.getSerId()); |
| | | |
| | | if (null == list || list.isEmpty()) { |
| | | return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "未获取到设备列表信息"); |
| | |
| | | continue; |
| | | } |
| | | |
| | | doReadStatus(modbusTcp, null); |
| | | doReadStatus(modbusTcp, false); |
| | | |
| | | if (StringUtils.isBlank(device.getLink()) || "null".equals(device.getLink())) continue; |
| | | |
| | |
| | | |
| | | modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd())); |
| | | |
| | | doReadStatus(modbusTcpLink, device.getPassCode() + ""); |
| | | doReadStatus(modbusTcpLink, true); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | |
| | | * 读取状态,同时读取开状态和关闭状态 |
| | | * |
| | | * @param modbusTcp |
| | | * @param mainLink 主设备编码 |
| | | * @param flag 是否是关联设备 |
| | | * @throws Exception |
| | | */ |
| | | private void doReadStatus(ModbusTcp modbusTcp, String mainLink) throws Exception { |
| | | private void doReadStatus(ModbusTcp modbusTcp, Boolean flag) throws Exception { |
| | | |
| | | if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpen())) return; |
| | | if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpenEnd())) return; |
| | |
| | | int addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()); |
| | | boolean result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe); |
| | | log.debug("---------读风窗风口开到位状态(或其他设备运行状态)------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result); |
| | | String statusOpen = DeviceStatus.OPEN.getCode(); |
| | | String statusClose = DeviceStatus.CLOSE.getCode(); |
| | | if(flag){ |
| | | statusOpen = DeviceStatus.F_OPEN.getCode(); |
| | | statusClose = DeviceStatus.F_CLOSE.getCode(); |
| | | } |
| | | if (result) { |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode(), mainLink); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), statusOpen); |
| | | }else { |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), statusClose); |
| | | } |
| | | |
| | | if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getCloseEnd())) return; |
| | | |
| | | addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getCloseEnd()); |
| | | result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe); |
| | | log.debug("---------读风窗风口关到位状态------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result); |
| | | if (result) { |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode(), mainLink); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode()); |
| | | }else { |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | int num = number.intValue(); |
| | | if(num == 1){ |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode(), null); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode()); |
| | | } |
| | | if(num == 2){ |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode(), null); |
| | | ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true); |
| | | if (exeResult) { |
| | | ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false); |
| | | addRun(request); |
| | | //调用异步获取结果 |
| | | progressGasResult(request, modbusTcp); |
| | |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | |
| | | return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "没有需要更新的设备信息!!"); |
| | | } |
| | | |
| | | // 2023-08-31暂时禁用,使用仓库编码获取仓库所有设备的分机信息 |
| | | //根据设备所属分机进行分组 |
| | | Map<String, List<ExeDevice>> groupBy = param.getDeviceList().stream().collect(Collectors.groupingBy(ExeDevice::getSerId)); |
| | | // Map<String, List<ExeDevice>> groupBy = param.getDeviceList().stream().collect(Collectors.groupingBy(ExeDevice::getSerId)); |
| | | // DeviceControlResponse response = new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "命令发送成功!"); |
| | | // DeviceSer deviceSer; |
| | | // DeviceControlRequest request; |
| | | // try { |
| | | // for (String serId : groupBy.keySet()) { |
| | | |
| | | Set<String> list = coreDeviceService.getCacheDeviceSerByDepotId(param.getCompanyId(), param.getDepotId()); |
| | | DeviceControlResponse response = new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "命令发送成功!"); |
| | | |
| | | DeviceSer deviceSer; |
| | | DeviceControlRequest request; |
| | | |
| | | try { |
| | | for (String serId : groupBy.keySet()) { |
| | | for (String serId : list) { |
| | | deviceSer = coreSerService.getCacheSer(param.getCompanyId(), serId); |
| | | if (null == deviceSer) { |
| | | log.info("根据仓库{}获取设备状态,分机编码{}的分机不存在,取消执行。", param.getDepotId(), serId); |