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.fuzhou.domain.DpEquipment; import com.ruoyi.fuzhou.domain.ReceiveOilInfo; import com.ruoyi.fuzhou.domain.ReceiveOilValue; import com.ruoyi.fuzhou.mapper.ReceiveOilInfoMapper; import com.ruoyi.fuzhou.service.ReceiveOilInfoService; import com.ruoyi.fuzhou.service.ReceiveOilValueService; import com.ruoyi.fuzhou.utils.oilmodbus.ModbusOilServerUtils; 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.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** *

* 油数据接收管理 服务实现类 *

* * @author zhangyy * @since 2025-03-12 */ @Service public class ReceiveOilInfoServiceImpl extends ServiceImpl implements ReceiveOilInfoService { @Resource private ReceiveOilValueService receiveOilValueService; @Resource private RedisTemplate redisTemplate; @Override public void saveOil(List list, DpEquipment info) { JSONObject jsonObject = ModbusOilServerUtils.getValue(list.get(0).getIp(), list.get(0).getPort(), list); if (jsonObject != null && jsonObject.size() > 0) { ReceiveOilValue receiveOilValue = JSON.toJavaObject(jsonObject, ReceiveOilValue.class); receiveOilValue.setCreateTime(new Date()); receiveOilValue.setDeviceName(list.get(0).getDeviceName()); if (Math.abs(Double.valueOf(receiveOilValue.getOilTimeFlow())) > 0) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } else { Object obj = redisTemplate.opsForValue().get("VALUE@" + receiveOilValue.getDeviceName()); if (obj == null) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } else if (!obj.toString().equals(receiveOilValue.getOilTimeFlow())) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } } } //制造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); // }); // ReceiveOilValue receiveOilValue = receiveOilValueService.getOne(new LambdaQueryWrapper() {{ // or().eq(ReceiveOilValue::getDeviceName, list.get(0).getDeviceName()).orderByDesc(ReceiveOilValue::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(info))); // object.put("status", "1"); //// WebSocketOilServer.sendAllMessage(object.toJSONString()); // } } @Override public void saveOilLijiuNingde(List list, DpEquipment info) { JSONObject jsonObject = ModbusOilServerUtils.getValue(list.get(0).getIp(), list.get(0).getPort(), list); if (jsonObject != null && jsonObject.size() > 0) { ReceiveOilValue receiveOilValue = JSON.toJavaObject(jsonObject, ReceiveOilValue.class); receiveOilValue.setCreateTime(new Date()); receiveOilValue.setDeviceName(list.get(0).getDeviceName()); if (Math.abs(Double.valueOf(receiveOilValue.getOilTimeFlow())) > 0 || Math.abs(Double.valueOf(receiveOilValue.getVolumeFlow())) > 0) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow() + receiveOilValue.getVolumeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } else { Object obj = redisTemplate.opsForValue().get("VALUE@" + receiveOilValue.getDeviceName()); if (obj == null) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow() + receiveOilValue.getVolumeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } else if (!obj.toString().equals(receiveOilValue.getOilTimeFlow() + receiveOilValue.getVolumeFlow())) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow() + receiveOilValue.getVolumeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } } } } @Override public void saveLijiuOil(List list, DpEquipment info) { JSONObject jsonObject = ModbusOilServerUtils.getLijiuValue(list.get(0).getIp(), list.get(0).getPort(), list); if (jsonObject != null && jsonObject.size() > 0) { ReceiveOilValue receiveOilValue = JSON.toJavaObject(jsonObject, ReceiveOilValue.class); receiveOilValue.setDeviceName(list.get(0).getDeviceName()); receiveOilValue.setCreateTime(new Date()); if (Math.abs(Double.valueOf(receiveOilValue.getOilTimeFlow())) > 0) { receiveOilValueService.save(receiveOilValue); redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); }else { Object obj = redisTemplate.opsForValue().get("VALUE@" + receiveOilValue.getDeviceName()); if (obj == null) { receiveOilValueService.save(receiveOilValue); redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); } else if (!obj.toString().equals(receiveOilValue.getOilTimeFlow())) { redisTemplate.opsForValue().set("VALUE@" + receiveOilValue.getDeviceName(), receiveOilValue.getOilTimeFlow(), 30, TimeUnit.MINUTES); receiveOilValueService.save(receiveOilValue); } } } } }