Browse Source

1、监视界面now_data表相关逻辑修改;

dev
3067418132@qq.com 1 month ago
parent
commit
9ab82fbe9c
  1. 2
      user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java
  2. 82
      user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java
  3. 11
      user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java
  4. 66
      user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java
  5. 11
      user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

2
user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java

@ -43,4 +43,6 @@ public class DeviceInstallEntity {
// 是否单箱 1:是 0:其他
private int isSingleBox;
private int orderNum;
}

82
user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java

@ -4,11 +4,10 @@ import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.GatewayManageEntity;
import com.mh.user.mapper.CollectionParamsManageMapper;
import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.mapper.GatewayManageMapper;
import com.mh.user.mapper.NowDataMapper;
import com.mh.user.mapper.*;
import com.mh.user.model.MultiControlModel;
import com.mh.user.s7.S7ConnectorUtil;
import com.mh.user.service.NowDataService;
import com.mh.user.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
@ -25,7 +24,7 @@ import java.util.stream.Collectors;
/**
* S7 PLC定时采集任务
* 支持MVBVWVD等地址类型的读写操作
*
*
* @author System
* @date 2026-06-23
*/
@ -40,13 +39,17 @@ public class S7PlcCollectionJob {
private static final Map<String, S7ConnectorUtil> connectorCache = new ConcurrentHashMap<>();
private final DeviceInstallMapper deviceInstallMapper;
private final NowDataMapper nowDataMapper;
private final NowDataService nowDataService;
private final NowPublicDataMapper nowPublicDataMapper;
public S7PlcCollectionJob(GatewayManageMapper gatewayManageMapper,
CollectionParamsManageMapper collectionParamsManageMapper, DeviceInstallMapper deviceInstallMapper, NowDataMapper nowDataMapper, NowDataMapper nowDataMapper1) {
CollectionParamsManageMapper collectionParamsManageMapper, DeviceInstallMapper deviceInstallMapper, NowDataMapper nowDataMapper, NowDataMapper nowDataMapper1, NowDataService nowDataService, NowPublicDataMapper nowPublicDataMapper) {
this.gatewayManageMapper = gatewayManageMapper;
this.collectionParamsManageMapper = collectionParamsManageMapper;
this.deviceInstallMapper = deviceInstallMapper;
this.nowDataMapper = nowDataMapper1;
this.nowDataService = nowDataService;
this.nowPublicDataMapper = nowPublicDataMapper;
}
/**
@ -57,7 +60,7 @@ public class S7PlcCollectionJob {
@Scheduled(cron = "0 0/5 * * * ?")
public void collectS7Data() {
log.info("------S7 PLC定时采集开始>>>>Constant.FLAG=={}------", Constant.PLC_FLAG);
try {
// 检查是否有手动操作正在进行
if (Constant.PLC_FLAG || Constant.WEB_PLC_FLAG) {
@ -66,7 +69,7 @@ public class S7PlcCollectionJob {
}
Constant.PLC_FLAG = true;
// 查询所有在线的S7网关
List<GatewayManageEntity> s7Gateways = gatewayManageMapper.queryS7Gateways();
if (s7Gateways == null || s7Gateways.isEmpty()) {
@ -81,7 +84,7 @@ public class S7PlcCollectionJob {
try {
processGateway(gateway);
} catch (Exception e) {
log.error("处理S7网关异常: gatewayName={}, dataCom={}",
log.error("处理S7网关异常: gatewayName={}, dataCom={}",
gateway.getGatewayName(), gateway.getDataCom(), e);
}
}
@ -136,7 +139,7 @@ public class S7PlcCollectionJob {
readAndSaveData(connector, param, dateStr);
} catch (Exception e) {
log.error("采集点位异常: registerAddr={}, otherName={}",
log.error("采集点位异常: registerAddr={}, otherName={}",
param.getRegisterAddr(), param.getOtherName(), e);
}
}
@ -148,10 +151,12 @@ public class S7PlcCollectionJob {
// map值有cur_value,cur_time,通过stream判断cur_time是否是当前时间,然后cur_value如果存在一天记录等于1的,back_water_state=运行,否则back_water_state=不运行
backWaterStates.forEach(backWaterState -> {
if (backWaterState.get("cur_time").toString().substring(0, 10).equals(dateStr.substring(0, 10))) {
if (backWaterState.get("cur_value").equals(1)) {
nowDataMapper.updateBackWaterState(buildingId, "运行");
if (new BigDecimal(backWaterState.get("cur_value").toString()).intValue() > 0) {
nowDataMapper.updateBackWaterState(buildingId, "1");
nowPublicDataMapper.updateBackWaterState(buildingId, "运行");
} else {
nowDataMapper.updateBackWaterState(buildingId, "不运行");
nowDataMapper.updateBackWaterState(buildingId, "0");
nowPublicDataMapper.updateBackWaterState(buildingId, "不运行");
}
}
});
@ -161,8 +166,8 @@ public class S7PlcCollectionJob {
/**
* 读取并保存数据
*/
private void readAndSaveData(S7ConnectorUtil connector,
CollectionParamsManageEntity param,
private void readAndSaveData(S7ConnectorUtil connector,
CollectionParamsManageEntity param,
String dateStr) {
String registerAddr = param.getRegisterAddr();
if (registerAddr == null || registerAddr.isEmpty()) {
@ -190,10 +195,12 @@ public class S7PlcCollectionJob {
nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(),
deviceInstallEntity.getDeviceAddr(),
"2", deviceInstallEntity.getDeviceName());
nowPublicDataMapper.updateUpWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), "异常");
} else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) {
nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(),
deviceInstallEntity.getDeviceAddr(),
"2", deviceInstallEntity.getDeviceName());
nowPublicDataMapper.updateUseWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), "异常");
}
return;
}
@ -236,8 +243,8 @@ public class S7PlcCollectionJob {
if (deviceInstallEntity != null) {
// 更新设备安装表中的now_date字段,根据param.getParamTypeId()的值进行判断 // 在对now_date进行更新
// 查询当前点位是否是运行状态、压力、液位、液位设置、回水温度、故障状态
log.error("进入nowData设置==>{}", param.toString());
switch(param.getParamTypeId()) {
// log.error("进入nowData设置==>{}", param.toString());
switch (param.getParamTypeId()) {
case 2: // 运行状态
nowDataMapper.updateRunState(deviceInstallEntity.getBuildingId(),
deviceInstallEntity.getDeviceAddr(),
@ -249,10 +256,12 @@ public class S7PlcCollectionJob {
nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(),
deviceInstallEntity.getDeviceAddr(),
String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName());
nowPublicDataMapper.updateUpWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.intValue() == 1 ? "运行" : "不运行");
} else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) {
nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(),
deviceInstallEntity.getDeviceAddr(),
String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName());
nowPublicDataMapper.updateUseWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.intValue() == 1 ? "运行" : "不运行");
}
break;
case 5: // 压力
@ -263,12 +272,17 @@ public class S7PlcCollectionJob {
}
break;
case 31: // 液位
if (param.getOtherName().contains("单箱") && deviceInstallEntity.getIsSingleBox() == 1) {
if (param.getOtherName().contains("单箱")) {
// 查询热泵类型的device_install以及是单箱的
deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 1);
if (deviceInstallEntity == null) {
return;
}
// 更新单箱液位
nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(),
null,
deviceInstallEntity.getDeviceAddr(),
curValue.setScale(1, RoundingMode.HALF_UP).toString(),
null, 1);
deviceInstallEntity.getDeviceName(), 1);
} else {
// 获取多箱的液位
nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(),
@ -278,13 +292,24 @@ public class S7PlcCollectionJob {
}
break;
case 26: // 液位设置
if (param.getOtherName().contains("单箱液位") && param.getOtherName().contains("上限") && deviceInstallEntity.getIsSingleBox() == 1) {
if (param.getOtherName().contains("单箱液位") && param.getOtherName().contains("上限")) {
// 查询热泵类型的device_install以及是单箱的
deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 1);
if (deviceInstallEntity == null) {
return;
}
// 更新单箱液位
nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(),
null,
deviceInstallEntity.getDeviceAddr(),
curValue.setScale(1, RoundingMode.HALF_UP).toString(),
null, 1);
} if (param.getOtherName().contains("多箱液位") && param.getOtherName().contains("上限") && deviceInstallEntity.getIsSingleBox() == 0) {
deviceInstallEntity.getDeviceName(), 1);
}
if (param.getOtherName().contains("多箱液位") && param.getOtherName().contains("上限")) {
// 查询热泵类型的device_install以及是单箱的
deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 0);
if (deviceInstallEntity == null) {
return;
}
// 获取多箱的液位
nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(),
null,
@ -301,6 +326,7 @@ public class S7PlcCollectionJob {
nowDataMapper.updateBackWaterTemp(deviceInstallEntity.getBuildingId(),
null,
curValue.setScale(1, RoundingMode.HALF_UP).toString(), null);
nowPublicDataMapper.updateBackWaterTemp(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.setScale(1, RoundingMode.HALF_UP).toString());
break;
case 3: // 故障状态
nowDataMapper.updatePressureSet(deviceInstallEntity.getBuildingId(),
@ -317,7 +343,7 @@ public class S7PlcCollectionJob {
// 根据查询出来的deviceInstall表数据,根据device_addr和device_name值进行更新
}
log.debug("采集成功: registerAddr={}, value={}, otherName={}",
log.debug("采集成功: registerAddr={}, value={}, otherName={}",
registerAddr, curValue, param.getOtherName());
}
@ -326,7 +352,7 @@ public class S7PlcCollectionJob {
*/
private S7ConnectorUtil getOrCreateConnector(GatewayManageEntity gateway) {
String cacheKey = gateway.getDataCom();
// 从缓存中获取
S7ConnectorUtil connector = connectorCache.get(cacheKey);
if (connector != null) {
@ -369,7 +395,7 @@ public class S7PlcCollectionJob {
/**
* 手动写入数据到PLC供Controller调用
*
*
* @param cpmId 采集参数ID
* @param value 要写入的值
* @return 是否成功
@ -414,7 +440,7 @@ public class S7PlcCollectionJob {
// } else {
// curValue = new BigDecimal(value.toString());
// }
collectionParamsManageMapper.updateCollectionParamsManageById(
cpmId,
value.toString(),

11
user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java

@ -76,7 +76,12 @@ public interface DeviceInstallMapper extends BaseMapper<DeviceInstallEntity> {
@Result(property="remarks",column="remarks"),
@Result(property="use",column="is_use"),
@Result(property="fault",column="is_fault"),
@Result(property="faultState",column="fault_state")
@Result(property="faultState",column="fault_state"),
@Result(property="isSingleBox",column="is_single_box"),
@Result(property="orderNum",column="order_num"),
@Result(property="dayValue",column="dayValue"),
@Result(property="seat",column="seat"),
@Result(property="deviationValue",column="deviation_value")
})
@Select("select * from (\n" +
"select *,ROW_NUMBER() over(order by id) as rn from device_install \n" +
@ -402,4 +407,8 @@ public interface DeviceInstallMapper extends BaseMapper<DeviceInstallEntity> {
@Update("update device_install set is_online = '离线' where id = #{deviceInstallId} ")
void updateNotOnlineById(Long deviceInstallId);
@ResultMap("rs")
@Select("select top 1 * from device_install where building_id = #{buildingId} and device_type = #{deviceType} and is_single_box = #{isSingleBox}")
DeviceInstallEntity selectSingleBoxDeviceInstall(String buildingId, String deviceType, int isSingleBox);
}

66
user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java

@ -33,14 +33,14 @@ public interface NowPublicDataMapper {
//查询监控界面公共实时信息
@Results(value = {
@Result(property="curDate",column="cur_date"),
@Result(property="buildingId",column="building_id"),
@Result(property="buildingName",column="building_name"),
@Result(property="upWater",column="up_water"),
@Result(property ="useWater",column ="use_water"),
@Result(property ="backWater",column ="back_water"),
@Result(property="useWaterTemp",column="use_water_temp"),
@Result(property ="backWaterTemp",column ="back_water_temp")
@Result(property = "curDate", column = "cur_date"),
@Result(property = "buildingId", column = "building_id"),
@Result(property = "buildingName", column = "building_name"),
@Result(property = "upWater", column = "up_water"),
@Result(property = "useWater", column = "use_water"),
@Result(property = "backWater", column = "back_water"),
@Result(property = "useWaterTemp", column = "use_water_temp"),
@Result(property = "backWaterTemp", column = "back_water_temp")
})
@Select("select * from now_public_data where building_id=#{buildingId}")
NowPublicDataEntity queryNowPublicData(@Param("buildingId") String buildingId);
@ -64,13 +64,14 @@ public interface NowPublicDataMapper {
void updateHistoryPublicData(NowPublicDataEntity nowPublicDataEntity);
//查询监控界面公共历史信息
@SelectProvider(type = NowPublicDataProvider.class,method = "queryHistoryPublicData")
@SelectProvider(type = NowPublicDataProvider.class, method = "queryHistoryPublicData")
List<NowPublicDataEntity> queryHistoryPublicData(@Param("curDate") String curDate, @Param("buildingId") String buildingId,
@Param("page") int page, @Param("limit") int limit);
@Param("page") int page, @Param("limit") int limit);
//查询记录数
@SelectProvider(type = NowPublicDataProvider.class,method = "getHistoryPublicDataCount")
@SelectProvider(type = NowPublicDataProvider.class, method = "getHistoryPublicDataCount")
int getHistoryPublicDataCount(@Param("curDate") String curDate, @Param("buildingId") String buildingId,
@Param("page") int page, @Param("limit") int limit);
@Param("page") int page, @Param("limit") int limit);
//判断实时表有没有记录(非热泵)
@Select("select count(*) from now_public_data where building_id=#{buildingId} ")
@ -78,14 +79,14 @@ public interface NowPublicDataMapper {
//判断历史表有没有记录(非热泵)
@Select("select count(*) from history_public_data where convert(varchar(19),cur_date,121)=#{curDate} and building_id=#{buildingId} ")
int selectHistoryPublicDataCount(@Param("curDate") String curDate,@Param("buildingId") String buildingId);
int selectHistoryPublicDataCount(@Param("curDate") String curDate, @Param("buildingId") String buildingId);
//查询所有楼栋水箱平均温度
@Results(value = {
@Result(property="buildingId",column="building_id"),
@Result(property="buildingName",column="building_name"),
@Result(property ="singleTemp",column ="single_temp"),
@Result(property ="avgTemp",column ="use_water_temp")
@Result(property = "buildingId", column = "building_id"),
@Result(property = "buildingName", column = "building_name"),
@Result(property = "singleTemp", column = "single_temp"),
@Result(property = "avgTemp", column = "use_water_temp")
})
@Select("select building_id,building_name," +
" convert(numeric(23,2),use_water_temp)+3 as use_water_temp, " +
@ -95,10 +96,10 @@ public interface NowPublicDataMapper {
//查询单个楼栋水箱平均温度
@Results(value = {
@Result(property="buildingId",column="building_id"),
@Result(property="buildingName",column="building_name"),
@Result(property ="singleTemp",column ="single_temp"),
@Result(property ="avgTemp",column ="use_water_temp")
@Result(property = "buildingId", column = "building_id"),
@Result(property = "buildingName", column = "building_name"),
@Result(property = "singleTemp", column = "single_temp"),
@Result(property = "avgTemp", column = "use_water_temp")
})
@Select("select building_id,building_name," +
" convert(numeric(23,2),use_water_temp)+3 as use_water_temp, " +
@ -108,13 +109,13 @@ public interface NowPublicDataMapper {
//更新单箱温度
@Update("update now_public_data set single_temp=#{singleTemp} where building_id=#{buildingId}")
void updateSingleTemp(@Param("singleTemp") String singleTemp,@Param("buildingId") String buildingId);
void updateSingleTemp(@Param("singleTemp") String singleTemp, @Param("buildingId") String buildingId);
@Results(value = {
@Result(property="buildingId",column="building_id"),
@Result(property="buildingName",column="building_name"),
@Result(property ="singleTemp",column ="single_temp"),
@Result(property ="avgTemp",column ="avg_temp")
@Result(property = "buildingId", column = "building_id"),
@Result(property = "buildingName", column = "building_name"),
@Result(property = "singleTemp", column = "single_temp"),
@Result(property = "avgTemp", column = "avg_temp")
})
@Select("SELECT " +
" di.building_id, " +
@ -137,4 +138,17 @@ public interface NowPublicDataMapper {
"GROUP BY di.building_id, di.building_name " +
"ORDER BY di.building_id;")
List<TempModel> queryNowWtTemp2();
@Update("update now_public_data set back_water=#{value} where building_id=#{buildingId}")
void updateBackWaterState(Long buildingId, String value);
@Update("update now_public_data set up_water= #{value} where building_id= #{buildingId}")
void updateUpWaterState(Long buildingId, String value);
@Update("update now_public_data set use_water= #{value} where building_id= #{buildingId}")
void updateUseWaterState(Long buildingId, String value);
@Update("update now_public_data set back_water_temp= #{value} where building_id= #{buildingId}")
void updateBackWaterTemp(Long buildingId, String value);
}

11
user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

@ -1,9 +1,11 @@
package com.mh.user;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.DeviceManageEntity;
import com.mh.user.entity.GaugeEntity;
import com.mh.user.job.DealDataJob;
import com.mh.user.job.StartOrStopHotpumpJob;
import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.serialport.SerialPortThread;
import com.mh.user.service.DeviceManageService;
import com.mh.user.service.GaugeService;
@ -28,6 +30,15 @@ class UserServiceApplicationTests {
void contextLoads() {
}
@Autowired
private DeviceInstallMapper deviceInstallMapper;
@Test
public void testDeviceInstall() {
DeviceInstallEntity deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall("9", "热泵", 1);
System.out.println(deviceInstallEntity.toString());
}
@Autowired
private StartOrStopHotpumpJob startOrStopHotpumpJob;

Loading…
Cancel
Save