package com.ruoyi.fuzhou.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.fuzhou.domain.DpEquipment; import com.ruoyi.fuzhou.domain.ReceiveElectricityValue; import com.ruoyi.fuzhou.domain.ReceiveWaterInfo; import com.ruoyi.fuzhou.domain.ReceiveWaterValue; import com.ruoyi.fuzhou.mapper.EquipmentMapper; import com.ruoyi.fuzhou.mapper.ReceiveWaterInfoMapper; import com.ruoyi.fuzhou.service.ReceiveWaterInfoService; import com.ruoyi.fuzhou.service.ReceiveWaterValueService; import com.ruoyi.fuzhou.utils.hj1239.StringToHexUtil; import com.ruoyi.fuzhou.utils.waterdept.ModbusWaterDeptUtils; import com.ruoyi.fuzhou.utils.watermodbus.ModbusWaterUtils; import com.ruoyi.fuzhou.websocket.WebSocketOilServer; import jakarta.annotation.Resource; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.TimeUnit; /** *

* 水设备信息 服务实现类 *

* * @author zhangyy * @since 2025-03-12 */ @Service public class ReceiveWaterInfoServiceImpl extends ServiceImpl implements ReceiveWaterInfoService { @Resource private ReceiveWaterValueService receiveWaterValueService; @Resource private EquipmentMapper equipmentMapper; @Resource private RedisTemplate redisTemplate; @Override public void saveWater(List list, DpEquipment dpEquipment) { JSONObject jsonObject = ModbusWaterUtils.getValue(list.get(0).getIp(), list.get(0).getPort(), list); if (jsonObject != null && jsonObject.size() > 0) { ReceiveWaterValue receiveWaterValue = JSON.toJavaObject(jsonObject, ReceiveWaterValue.class); receiveWaterValue.setCreateTime(new Date()); receiveWaterValue.setDeviceName(list.get(0).getDeviceName()); if (Math.abs(Double.valueOf(receiveWaterValue.getTimeFlow())) > 0 || Math.abs(Double.valueOf(receiveWaterValue.getFlowRate())) > 0) { redisTemplate.opsForValue().set("VALUE@" + receiveWaterValue.getDeviceName(), receiveWaterValue.getFlowRate() + receiveWaterValue.getTimeFlow(), 30, TimeUnit.MINUTES); receiveWaterValueService.save(receiveWaterValue); } else { Object obj = redisTemplate.opsForValue().get("VALUE@" + receiveWaterValue.getDeviceName()); if (obj == null) { redisTemplate.opsForValue().set("VALUE@" + receiveWaterValue.getDeviceName(), receiveWaterValue.getFlowRate() + receiveWaterValue.getTimeFlow(), 30, TimeUnit.MINUTES); receiveWaterValueService.save(receiveWaterValue); } else if (!obj.toString().equals(receiveWaterValue.getFlowRate() + receiveWaterValue.getTimeFlow())) { redisTemplate.opsForValue().set("VALUE@" + receiveWaterValue.getDeviceName(), receiveWaterValue.getFlowRate() + receiveWaterValue.getTimeFlow(), 30, TimeUnit.MINUTES); receiveWaterValueService.save(receiveWaterValue); } } } //制造socket数据 // JSONArray header = new JSONArray(); // list.forEach(item -> { // JSONObject head = new JSONObject(); // head.put("param", item.getParam()); // head.put("paramCode", item.getParamCode()); // head.put("unit", item.getUnit()); // header.add(head); // }); // ReceiveWaterValue receiveOilValue = receiveWaterValueService.getOne(new LambdaQueryWrapper() {{ // or().eq(ReceiveWaterValue::getDeviceName, list.get(0).getDeviceName()).orderByDesc(ReceiveWaterValue::getCreateTime).last("limit 1"); // }}); // if (receiveOilValue != null) { // JSONObject object = new JSONObject(); // object.put("header", header); // object.put("body", JSONObject.parseObject(JSON.toJSONString(receiveOilValue))); // object.put("info", JSONObject.parseObject(JSON.toJSONString(dpEquipment))); // object.put("status", "1"); // WebSocketOilServer.sendAllMessage(object.toJSONString()); // } } @Override public void saveWaterYa(List list, DpEquipment info) { JSONObject jsonObject = ModbusWaterUtils.getValue(list.get(0).getIp(), list.get(0).getPort(), list); if (jsonObject != null && jsonObject.size() > 0) { ReceiveWaterValue receiveWaterValue = JSON.toJavaObject(jsonObject, ReceiveWaterValue.class); receiveWaterValue.setCreateTime(new Date()); receiveWaterValue.setDeviceName(list.get(0).getDeviceName()); receiveWaterValueService.save(receiveWaterValue); } } @Override public void saveWaterDept(List list, DpEquipment info) { for (ReceiveWaterInfo receiveWaterInfo : list ) { try{ String value = ModbusWaterDeptUtils.getWaterDept(receiveWaterInfo.getIp(), receiveWaterInfo.getPort()); Map map = new HashMap<>(); if (StringUtils.isNotEmpty(value)) { String result = StringToHexUtil.convertHexToString(value); System.out.println("📥 收到水深设备响应: " + result); String[] resultList = result.split("\\r\\n"); for (int i = 0; i < resultList.length; i++) { String[] item = resultList[i].split("-"); if (item.length == 2) { if (map.get(item[0]) == null) { map.put(item[0], Double.valueOf(item[1])); } else { if (Double.valueOf(item[1]) > map.get(item[0])) { map.put(item[0], Double.valueOf(item[1])); } } } } } if (map.size() > 0) { Set set = map.keySet(); for (String src : set ) { DpEquipment equipment = equipmentMapper.selectOne(new LambdaQueryWrapper() {{ or().eq(DpEquipment::getFieldName, src); }}); if (equipment != null) { ReceiveWaterValue receiveWaterValue = new ReceiveWaterValue(); if (map.get(src) > 5 && map.get(src) < 20) { receiveWaterValue.setWaterDeep(String.valueOf(String.format("%.3f", map.get(src)))); receiveWaterValue.setCreateTime(new Date()); receiveWaterValue.setDeviceName(String.valueOf(equipment.getId())); receiveWaterValueService.save(receiveWaterValue); }else { receiveWaterValue.setWaterDeep("10"); receiveWaterValue.setCreateTime(new Date()); receiveWaterValue.setDeviceName(String.valueOf(equipment.getId())); receiveWaterValueService.save(receiveWaterValue); } } } } }catch (Exception e){ System.out.println(""); continue; } } } }