package com.ruoyi.fuzhou.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.fuzhou.domain.*; import com.ruoyi.fuzhou.enums.DataTypeEnum; import com.ruoyi.fuzhou.mapper.ReceiveModuleInfoMapper; import com.ruoyi.fuzhou.service.ReceiveElectricityInfoService; import com.ruoyi.fuzhou.service.ReceiveModuleInfoService; import com.ruoyi.fuzhou.service.ReceiveOilInfoService; import com.ruoyi.fuzhou.service.ReceiveWaterInfoService; import com.ruoyi.fuzhou.utils.Modbus4jUtils; import com.ruoyi.fuzhou.utils.RtuMasterUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* modbus数据模板 服务实现类 *

* * @author zhangyy * @since 2025-03-27 */ @Service public class ReceiveModuleInfoServiceImpl extends ServiceImpl implements ReceiveModuleInfoService { @Resource private ReceiveElectricityInfoService receiveElectricityInfoService; @Resource private ReceiveOilInfoService receiveOilInfoService; @Resource private ReceiveWaterInfoService receiveWaterInfoService; @Override public void saveByModule(String deviceName, String ip, Integer port, Byte deviceAddress, Integer dataType) { if (dataType == null || DataTypeEnum.of(dataType) == null) return; List receiveModuleInfos; if (DataTypeEnum.YDKFM.getCode().equals(dataType)) { receiveModuleInfos = list(new LambdaQueryWrapper() {{ or().eq(ReceiveModuleInfo::getDataType, dataType).eq(ReceiveModuleInfo::getDeviceName, deviceName); }}); boolean flag = null == receiveModuleInfos || receiveModuleInfos.isEmpty(); ReceiveModuleInfo rmi = flag ? new ReceiveModuleInfo() : receiveModuleInfos.get(0); if (flag) rmi.setId(null); rmi.setDeviceAddress(deviceAddress); rmi.setDeviceName(deviceName); rmi.setPort(port); if (StringUtils.isNotEmpty(ip)) rmi.setIp(ip); rmi.setDataType(dataType); rmi.setRegisterCount(1); if (flag) save(rmi); else updateById(rmi); return; } receiveModuleInfos = list(new LambdaQueryWrapper() {{ or().eq(ReceiveModuleInfo::getDataType, dataType); }}); if (receiveModuleInfos != null && receiveModuleInfos.size() > 0) { if (DataTypeEnum.WATER_DEPT.getCode().equals(dataType) || DataTypeEnum.WATER_YA.getCode().equals(dataType) || DataTypeEnum.WATER_FLOW.getCode().equals(dataType)) { List receiveWaterInfos = new ArrayList<>(); ReceiveWaterInfo receiveWaterInfo; for (ReceiveModuleInfo info : receiveModuleInfos ) { receiveWaterInfo = new ReceiveWaterInfo(); receiveWaterInfo.setDeviceAddress(deviceAddress); receiveWaterInfo.setDeviceName(deviceName); receiveWaterInfo.setPort(port); if (StringUtils.isNotEmpty(ip)) { receiveWaterInfo.setIp(ip); } if (info.getFunctionCode() != null) { receiveWaterInfo.setFunctionCode(info.getFunctionCode()); } receiveWaterInfo.setRegisterAdress(info.getRegisterAdress()); receiveWaterInfo.setRegisterCount(info.getRegisterCount()); receiveWaterInfo.setParam(info.getParam()); receiveWaterInfo.setParamCode(info.getParamCode()); receiveWaterInfo.setUnit(info.getUnit()); receiveWaterInfo.setDataType(dataType); receiveWaterInfos.add(receiveWaterInfo); } receiveWaterInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveWaterInfo::getDeviceName, deviceName); }}); receiveWaterInfoService.saveBatch(receiveWaterInfos); } else if (DataTypeEnum.ELECTRICITY.getCode().equals(dataType)) { List receiveElectricityInfos = new ArrayList<>(); ReceiveElectricityInfo electricityInfo; for (ReceiveModuleInfo info : receiveModuleInfos ) { electricityInfo = new ReceiveElectricityInfo(); electricityInfo.setDeviceAddress(deviceAddress); electricityInfo.setDeviceName(deviceName); electricityInfo.setPort(port); if (StringUtils.isNotEmpty(ip)) { electricityInfo.setIp(ip); } electricityInfo.setDataType(dataType); electricityInfo.setFunctionCode(info.getFunctionCode()); electricityInfo.setRegisterAdress(info.getRegisterAdress()); electricityInfo.setRegisterCount(info.getRegisterCount()); electricityInfo.setParam(info.getParam()); electricityInfo.setParamCode(info.getParamCode()); electricityInfo.setUnit(info.getUnit()); receiveElectricityInfos.add(electricityInfo); } receiveElectricityInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveElectricityInfo::getDeviceName, deviceName); }}); receiveElectricityInfoService.saveBatch(receiveElectricityInfos); } else if (DataTypeEnum.OIL.getCode().equals(dataType) || DataTypeEnum.LIJIUOIL.getCode().equals(dataType) || DataTypeEnum.LIJIUJUN.getCode().equals(dataType) || DataTypeEnum.NIGDETUIYOU.getCode().equals(dataType)) { List receiveOilInfos = new ArrayList<>(); ReceiveOilInfo receiveOilInfo; for (ReceiveModuleInfo info : receiveModuleInfos ) { receiveOilInfo = new ReceiveOilInfo(); receiveOilInfo.setDeviceAddress(deviceAddress); receiveOilInfo.setDeviceName(deviceName); receiveOilInfo.setPort(port); if (StringUtils.isNotEmpty(ip)) { receiveOilInfo.setIp(ip); } receiveOilInfo.setDataType(dataType); if (info.getFunctionCode() != null) { receiveOilInfo.setFunctionCode(info.getFunctionCode()); } receiveOilInfo.setRegisterAdress(info.getRegisterAdress()); receiveOilInfo.setRegisterCount(info.getRegisterCount()); receiveOilInfo.setParam(info.getParam()); receiveOilInfo.setParamCode(info.getParamCode()); receiveOilInfo.setUnit(info.getUnit()); receiveOilInfos.add(receiveOilInfo); } receiveOilInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveOilInfo::getDeviceName, deviceName); }}); receiveOilInfoService.saveBatch(receiveOilInfos); } } } @Override public void removeByModule(String deviceName, Integer dataType) { if (dataType == null || DataTypeEnum.of(dataType) == null) { return; } else { if (DataTypeEnum.WATER_DEPT.getCode().equals(dataType) || DataTypeEnum.WATER_YA.getCode().equals(dataType) || DataTypeEnum.WATER_FLOW.getCode().equals(dataType)) { receiveWaterInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveWaterInfo::getDeviceName, deviceName); }}); } else if (DataTypeEnum.ELECTRICITY.getCode().equals(dataType)) { receiveElectricityInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveElectricityInfo::getDeviceName, deviceName); }}); } else if (DataTypeEnum.OIL.getCode().equals(dataType) || DataTypeEnum.LIJIUOIL.getCode().equals(dataType) || DataTypeEnum.LIJIUJUN.getCode().equals(dataType) || DataTypeEnum.NIGDETUIYOU.getCode().equals(dataType)) { receiveOilInfoService.remove(new LambdaQueryWrapper() {{ or().eq(ReceiveOilInfo::getDeviceName, deviceName); }}); } } } @Override public DpEquipment getIp(String deviceName, Integer dataType) { if (dataType == null || DataTypeEnum.of(dataType) == null) { return new DpEquipment(); } else { DpEquipment dpEquipment = new DpEquipment(); if (DataTypeEnum.YDKFM.getCode().equals(dataType)) { List infos = list(new LambdaQueryWrapper() {{ or().eq(ReceiveModuleInfo::getDeviceName, deviceName); }}); if (null == infos || infos.isEmpty()) return dpEquipment; ReceiveModuleInfo rmi = infos.get(0); dpEquipment.setIp(rmi.getIp()); dpEquipment.setPort(rmi.getPort()); dpEquipment.setDeviceAddress(rmi.getDeviceAddress()); } if (DataTypeEnum.WATER_DEPT.getCode().equals(dataType) || DataTypeEnum.WATER_YA.getCode().equals(dataType) || DataTypeEnum.WATER_FLOW.getCode().equals(dataType)) { List receiveWaterInfos = receiveWaterInfoService.list(new LambdaQueryWrapper() {{ or().eq(ReceiveWaterInfo::getDeviceName, deviceName); }}); for (ReceiveWaterInfo r : receiveWaterInfos ) { if (StringUtils.isNotEmpty(r.getIp())) { dpEquipment.setIp(r.getIp()); } if (r.getPort() != null) { dpEquipment.setPort(r.getPort()); } if (r.getDeviceAddress() != null) { dpEquipment.setDeviceAddress(r.getDeviceAddress()); } } } else if (DataTypeEnum.ELECTRICITY.getCode().equals(dataType)) { List receiveElectricityInfos = receiveElectricityInfoService.list(new LambdaQueryWrapper() {{ or().eq(ReceiveElectricityInfo::getDeviceName, deviceName); }}); for (ReceiveElectricityInfo r : receiveElectricityInfos ) { if (StringUtils.isNotEmpty(r.getIp())) { dpEquipment.setIp(r.getIp()); } if (r.getPort() != null) { dpEquipment.setPort(r.getPort()); } if (r.getDeviceAddress() != null) { dpEquipment.setDeviceAddress(r.getDeviceAddress()); } } } else if (DataTypeEnum.OIL.getCode().equals(dataType) || DataTypeEnum.LIJIUOIL.getCode().equals(dataType) || DataTypeEnum.LIJIUJUN.getCode().equals(dataType) || DataTypeEnum.NIGDETUIYOU.getCode().equals(dataType)) { List receiveOilInfos = receiveOilInfoService.list(new LambdaQueryWrapper() {{ or().eq(ReceiveOilInfo::getDeviceName, deviceName); }}); for (ReceiveOilInfo r : receiveOilInfos ) { if (StringUtils.isNotEmpty(r.getIp())) { dpEquipment.setIp(r.getIp()); } if (r.getPort() != null) { dpEquipment.setPort(r.getPort()); } if (r.getDeviceAddress() != null) { dpEquipment.setDeviceAddress(r.getDeviceAddress()); } } } return dpEquipment; } } @Override public Map getYdkfmStatus(String deviceName) throws Exception { List infos = list(new LambdaQueryWrapper() {{ or().eq(ReceiveModuleInfo::getDeviceName, deviceName); }}); if (null == infos || infos.isEmpty()) throw new Exception("找不到油电控阀门"); ReceiveModuleInfo rmi = infos.get(0); Map map = new HashMap<>(); Boolean status; try { //status = RtuMasterUtils.getYdkfmStatus(rmi); status = Modbus4jUtils.getYdkfmStatus(rmi); } catch (Exception ex) { map.put("error", ex.getMessage()); status = null; } map.put("status", status); return map; } @Override public Map ctrlYdkfm(String deviceName, Boolean flag) throws Exception { List infos = list(new LambdaQueryWrapper() {{ or().eq(ReceiveModuleInfo::getDeviceName, deviceName); }}); if (null == infos || infos.isEmpty()) throw new Exception("找不到油电控阀门"); ReceiveModuleInfo rmi = infos.get(0); Map map = new HashMap<>(); Boolean status; try { //status = RtuMasterUtils.ctrlYdkfm(rmi, flag); status = Modbus4jUtils.ctrlYdkfm(rmi, flag); } catch (Exception ex) { map.put("error", ex.getMessage()); status = null; } map.put("status", status); return map; } }