自动模式,设备日志

master
lld 2026-03-29 22:39:59 +08:00
parent 7498db935f
commit 3de90ccc70
2 changed files with 40 additions and 19 deletions

View File

@ -9,6 +9,7 @@ import com.agri.framework.manager.MqttAutoOffManager;
import com.agri.system.domain.SysAgriInfo;
import com.agri.system.domain.SysAgriLimit;
import com.agri.system.domain.SysDevOperLog;
import com.agri.system.domain.SysImeiAutoLog;
import com.agri.system.domain.vo.RollerTermVO;
import com.agri.system.service.*;
import org.apache.commons.collections4.CollectionUtils;
@ -23,6 +24,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -79,7 +81,10 @@ public class RollerAutoTask {
@Value("${spring.mqtt.dtu-ctl-lock-ttl}")
private int dtuCtlLockTTL;
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
@Autowired
private ISysImeiAutoLogService imeiAutoLogService;
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm");
private static final Map<String, Function<SysAgriLimit, Integer>> LIMIT_MAP = new HashMap<>();
@ -143,6 +148,7 @@ public class RollerAutoTask {
// 查询每个IMEI今天的第一条日志
Map<String, Map<String, Integer>> todayLogCountByImeiMap = devOperLogService.getTodayLogCountByImeiMap(imeiList);
ArrayList<SysImeiAutoLog> logArrayList = new ArrayList<SysImeiAutoLog>();
// 循环所有开启自动化的大棚
for (SysAgriInfo agriInfo : agriInfos) {
String imei = agriInfo.getImei();
@ -223,12 +229,22 @@ public class RollerAutoTask {
// 在范围内
//判断温度是否在适宜温度内
TempCommandStatus tempCommandStatus = TempJudgeUtil.judgeTempCommand(currentTemp, term.getTemp());
SysImeiAutoLog imeiAutoLog = new SysImeiAutoLog();
imeiAutoLog.setImei(imei);
imeiAutoLog.setMonitorPeriod(term.getStartTime().format(FORMATTER)+"~"+term.getEndTime().format(FORMATTER));
imeiAutoLog.setCurrentTemp(currentTemp);
imeiAutoLog.setRefTemp(term.getTemp());
imeiAutoLog.setSuitableTemp(refTempCode);
imeiAutoLog.setFanStatus(term.getVent());
imeiAutoLog.setIsLast(isCancelOff?1:0);
// todo 开关指令需要通知用户 推送主题 && 更新数据 前端重新请求消息表
if (tempCommandStatus == TempCommandStatus.OPEN) {
log.info("【定时任务-卷膜自动化控制】大棚『{}』-卷膜『{}』当前温湿度:『{}℃』,适宜温度为:「{}℃」,触发自动化条件,即将执行『开』指令!",
imei, roller, currentTemp, term.getTemp());
// 判断是否首次开
Integer openLen = todayLogByRoller.getOrDefault(roller + "k1", 0);
imeiAutoLog.setRollFilm(roller + "k1");
imeiAutoLog.setExecCmd("开");
// 开指令
sendOpenCommand(imei, agriName, roller, openLen == 0, term.getVent(), reservedLen);
// 每次后,数量累计+1 不需要因为只循环到一次
@ -237,6 +253,8 @@ public class RollerAutoTask {
imei, roller, currentTemp, term.getTemp());
// 判断是否首次开
Integer closeLen = todayLogByRoller.getOrDefault(roller + "g1", 0);
imeiAutoLog.setRollFilm(roller + "g1");
imeiAutoLog.setExecCmd("关");
// 关指令
sendCloseCommand(imei, agriName, roller, closeLen == 0, term.getVent(), isCancelOff);
// 每次后,数量累计+1
@ -244,10 +262,11 @@ public class RollerAutoTask {
log.info("【定时任务-卷膜自动化控制】大棚『{}』-卷膜『{}』当前温湿度:『{}℃』,适宜温度为:「{}℃」,温度适宜,无需操作!",
imei, roller, currentTemp, term.getTemp());
}
logArrayList.add(imeiAutoLog);
}
}
}
imeiAutoLogService.saveBatch(logArrayList);
log.info("=============【定时任务】大棚自动模式监测执行完毕,时间:{}=============", LocalDateTime.now());
} catch (Exception e) {
WxUtil.pushText("【定时任务】大棚自动模式监测执行终端, \n发生错误.错误原因:"+e+"\n时间"+LocalDateTime.now());
@ -440,6 +459,7 @@ public class RollerAutoTask {
// 可选:增加异常捕获,避免日志保存失败影响指令执行
try {
devOperLogService.save(logDto);
log.info("【日志保存】设备{}功能{}日志保存成功,日志id:{}", imei, funcCode,logDto.getId());
} catch (Exception e) {
log.error("【日志保存失败】设备{}功能{}日志保存失败", imei, funcCode, e);
}

View File

@ -1,10 +1,12 @@
package com.agri.system.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.agri.common.annotation.Excel;
import com.agri.common.core.domain.BaseEntity;
@ -22,6 +24,8 @@ public class SysImeiAutoLog extends BaseEntity
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId(type = IdType.ASSIGN_ID)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 设备IMEI */
@ -50,11 +54,11 @@ public class SysImeiAutoLog extends BaseEntity
/** 运行风口 */
@Excel(name = "运行风口")
private String fanStatus;
private BigDecimal fanStatus;
/** 是否最后一条 0否1是 */
@Excel(name = "是否最后一条 0否1是")
private Long isLast;
private int isLast;
/** 执行指令 */
@Excel(name = "执行指令")
@ -134,26 +138,23 @@ public class SysImeiAutoLog extends BaseEntity
return suitableTemp;
}
public void setFanStatus(String fanStatus)
{
this.fanStatus = fanStatus;
}
public String getFanStatus()
{
public BigDecimal getFanStatus() {
return fanStatus;
}
public void setIsLast(Long isLast)
{
this.isLast = isLast;
public void setFanStatus(BigDecimal fanStatus) {
this.fanStatus = fanStatus;
}
public Long getIsLast()
{
public int getIsLast() {
return isLast;
}
public void setIsLast(int isLast) {
this.isLast = isLast;
}
public void setExecCmd(String execCmd)
{
this.execCmd = execCmd;