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;
|
|
/**
|
* <p>
|
* 水设备信息 服务实现类
|
* </p>
|
*
|
* @author zhangyy
|
* @since 2025-03-12
|
*/
|
@Service
|
public class ReceiveWaterInfoServiceImpl extends ServiceImpl<ReceiveWaterInfoMapper, ReceiveWaterInfo> implements ReceiveWaterInfoService {
|
|
@Resource
|
private ReceiveWaterValueService receiveWaterValueService;
|
|
@Resource
|
private EquipmentMapper equipmentMapper;
|
|
@Resource
|
private RedisTemplate redisTemplate;
|
|
@Override
|
public void saveWater(List<ReceiveWaterInfo> 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<ReceiveWaterValue>() {{
|
// 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<ReceiveWaterInfo> 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<ReceiveWaterInfo> list, DpEquipment info) {
|
for (ReceiveWaterInfo receiveWaterInfo : list
|
) {
|
|
try{
|
String value = ModbusWaterDeptUtils.getWaterDept(receiveWaterInfo.getIp(), receiveWaterInfo.getPort());
|
Map<String, Double> 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<String> set = map.keySet();
|
for (String src : set
|
) {
|
DpEquipment equipment = equipmentMapper.selectOne(new LambdaQueryWrapper<DpEquipment>() {{
|
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;
|
}
|
|
}
|
}
|
|
}
|