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.ReceiveElectricityInfo;
import com.ruoyi.fuzhou.domain.ReceiveElectricityValue;
import com.ruoyi.fuzhou.domain.ReceiveOilValue;
import com.ruoyi.fuzhou.mapper.ReceiveElectricityInfoMapper;
import com.ruoyi.fuzhou.service.ReceiveElectricityInfoService;
import com.ruoyi.fuzhou.service.ReceiveElectricityValueService;
import com.ruoyi.fuzhou.utils.electricitymodbus.ModbusElectricityUtils;
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-14
*/
@Service
public class ReceiveElectricityInfoServiceImpl extends ServiceImpl implements ReceiveElectricityInfoService {
@Resource
private ReceiveElectricityValueService receiveElectricityValueService;
@Resource
private RedisTemplate redisTemplate;
@Override
public void saveElectricity(List list, DpEquipment dpEquipment) {
JSONObject jsonObject = ModbusElectricityUtils.getValue(list.get(0).getIp(), list.get(0).getPort(), list);
if (jsonObject != null && jsonObject.size() > 0) {
ReceiveElectricityValue receiveElectricityValue = JSON.toJavaObject(jsonObject, ReceiveElectricityValue.class);
receiveElectricityValue.setCreateTime(new Date());
receiveElectricityValue.setDeviceName(list.get(0).getDeviceName());
if (Math.abs(Double.valueOf(receiveElectricityValue.getCurrentA())) > 0 || Math.abs(Double.valueOf(receiveElectricityValue.getCurrentB())) > 0 ||
Math.abs(Double.valueOf(receiveElectricityValue.getCurrentC())) > 0) {
redisTemplate.opsForValue().set("VALUE@" + receiveElectricityValue.getDeviceName(), receiveElectricityValue.getCurrentA()
+ receiveElectricityValue.getCurrentB()
+ receiveElectricityValue.getCurrentC(), 30, TimeUnit.MINUTES);
receiveElectricityValueService.save(receiveElectricityValue);
} else {
Object obj = redisTemplate.opsForValue().get("VALUE@" + receiveElectricityValue.getDeviceName());
if (obj == null) {
redisTemplate.opsForValue().set("VALUE@" + receiveElectricityValue.getDeviceName(), receiveElectricityValue.getCurrentA()
+ receiveElectricityValue.getCurrentB()
+ receiveElectricityValue.getCurrentC(), 30, TimeUnit.MINUTES);
receiveElectricityValueService.save(receiveElectricityValue);
} else if (!obj.toString().equals(receiveElectricityValue.getCurrentA() + receiveElectricityValue.getCurrentB() + receiveElectricityValue.getCurrentC())) {
redisTemplate.opsForValue().set("VALUE@" + receiveElectricityValue.getDeviceName(), receiveElectricityValue.getCurrentA()
+ receiveElectricityValue.getCurrentB()
+ receiveElectricityValue.getCurrentC(), 30, TimeUnit.MINUTES);
receiveElectricityValueService.save(receiveElectricityValue);
}
}
}
//制造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);
// });
// ReceiveElectricityValue receiveOilValue = receiveElectricityValueService.getOne(new LambdaQueryWrapper() {{
// or().eq(ReceiveElectricityValue::getDeviceName, list.get(0).getDeviceName()).orderByDesc(ReceiveElectricityValue::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());
// }
}
}