自动化任务

master
lld 2026-03-06 03:17:31 +08:00
parent 955adba5cb
commit 2b140bd180
26 changed files with 2842 additions and 225 deletions

View File

@ -0,0 +1,32 @@
package com.agri.common.enums;
/**
* @ClassName TempCommandStatus
* @Description TODO
* @Author lld
* @Date 2026/3/6 2:46
* @Version 1.0
*/
public enum TempCommandStatus {
OPEN(1, "下发开指令"),
CLOSE(2, "下发关指令"),
NO_OPERATE(0, "不操作");
private final int code;
private final String desc;
TempCommandStatus(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
// 使用status.getCode() → 1/2/0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
package com.agri.common.utils;
/**
* @ClassName dd
* @Description TODO
* @Author lld
* @Date 2026/3/6 1:44
* @Version 1.0
*/
import org.springframework.beans.factory.annotation.Value;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* +
*/
public class RollerTimeCalculator {
// 基础常量:固化到工具类,统一维护
@Value("${agri.per-lap.len}")
private static BigDecimal perLapLen;
@Value("${agri.per-lap.sec}")
private static BigDecimal perLapSec;
// 私有化构造器,禁止实例化
private RollerTimeCalculator() {}
/**
*
* @param targetLen cm
* @return
*/
public static int calculateRunTime(BigDecimal targetLen) {
// 边界处理长度≤0时返回0
if (targetLen == null || targetLen.compareTo(BigDecimal.ZERO)<=0) {
return 0;
}
// 核心公式:时间 = (长度 / 每圈长度) × 每圈时间
BigDecimal cycleCount = targetLen.divide(perLapLen,2, RoundingMode.HALF_UP);
return cycleCount.multiply(perLapSec).setScale(2, RoundingMode.HALF_UP).intValue(); // 四舍五入取整
}
/**
*
* /perLapLenperLapSec
*/
/* public static long calculateRunTimeWithConfig(double targetLen, String imei) {
// 从配置表/缓存读取该设备的单圈长度、单圈时间(适配不同设备参数差异)
Double deviceCmPerCycle = ConfigCache.getVal(imei + "_perLapLen", perLapLen);
Long deviceSecPerCycle = ConfigCache.getVal(imei + "_sec_per_cycle", perLapSec);
return Math.round(targetLen / deviceCmPerCycle * deviceSecPerCycle);
}*/
}

View File

@ -0,0 +1,42 @@
package com.agri.common.utils;
import com.agri.common.enums.TempCommandStatus;
import java.math.BigDecimal;
/**
*
*/
public class TempJudgeUtil {
// 条件参考温度允许的上下误差(抽成常量,后续可配置化)
public static final BigDecimal TEMP_ERROR_RANGE = java.math.BigDecimal.ONE;
/**
*
*
* @param currentTemp DTU
* @param refTemp sys_auto_termtemp
* @return OPEN()/CLOSE()/NO_OPERATE()
*/
public static TempCommandStatus judgeTempCommand(BigDecimal currentTemp, BigDecimal refTemp) {
// 1. 空值校验企业级必备避免NPE
if (currentTemp == null || refTemp == null) {
return TempCommandStatus.NO_OPERATE;
}
// 2. 计算当前温度与参考温度的差值(当前温度 - 参考温度)
BigDecimal tempDiff = currentTemp.subtract(refTemp);
// 3. 按规则判断状态
if (tempDiff.compareTo(TEMP_ERROR_RANGE) > 0) {
// 当前温度 > 参考温度 + 误差 → 下发开指令
return TempCommandStatus.OPEN;
} else if (tempDiff.compareTo(TEMP_ERROR_RANGE.negate()) < 0) {
// 当前温度 < 参考温度 - 误差 → 下发关指令
return TempCommandStatus.CLOSE;
} else {
// 差值在[-误差, +误差]范围内 → 不操作
return TempCommandStatus.NO_OPERATE;
}
}
}

View File

@ -0,0 +1,41 @@
package com.agri.common.utils;
/**
* @ClassName TimeConvertUtil
* @Description TODO
* @Author lld
* @Date 2026/3/6 2:16
* @Version 1.0
*/
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TimeConvertUtil {
// 定义常用时间格式(企业级:固化为常量,避免重复创建)
public static final DateTimeFormatter DEFAULT_DATETIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* LocalDateTimeyyyy-MM-dd HH:mm:ss
*/
public static LocalDateTime strToLocalDateTime(String timeStr) {
// 空值/空白校验(企业级必备)
if (timeStr == null || timeStr.trim().isEmpty()) {
return null;
}
// 标准格式直接解析
return LocalDateTime.parse(timeStr.trim(), DEFAULT_DATETIME_FORMAT);
}
/**
*
*/
public static LocalDateTime strToLocalDateTimeSafe(String timeStr) {
try {
return strToLocalDateTime(timeStr);
} catch (Exception e) {
// 日志记录转换失败原因(企业级:必加)
System.err.println("时间字符串转换失败str=" + timeStr + ",错误:" + e.getMessage());
return null;
}
}
}

View File

@ -0,0 +1,46 @@
package com.agri.common.utils;
/**
* @ClassName TimeRangeUtil
* @Description TODO
* @Author lld
* @Date 2026/3/6 2:09
* @Version 1.0
*/
import java.time.LocalDateTime;
import java.time.LocalTime;
public class TimeRangeUtil {
/**
* dtuauto_term
*/
public static boolean isTimeInRange(LocalDateTime dtuTime, LocalDateTime startTime, LocalDateTime endTime) {
if (dtuTime == null || startTime == null || endTime == null) {
return false;
}
LocalTime currentTime = dtuTime.toLocalTime();
LocalTime beforeTime = startTime.toLocalTime();
LocalTime afterTime = endTime.toLocalTime();
if (startTime.isBefore(endTime)) {
// 正常时段08:00:00 - 18:00:00
return !currentTime.isBefore(beforeTime) && !currentTime.isAfter(afterTime);
} else {
// 跨天时段22:00:00 - 06:00:00
return currentTime.isAfter(beforeTime) || currentTime.isBefore(afterTime);
}
}
/**
* ts
*/
public static boolean isTsInRange(long ts, LocalDateTime startTime, LocalDateTime endTime) {
LocalDateTime dtuTime = LocalDateTime.ofInstant(
java.time.Instant.ofEpochMilli(ts),
java.time.ZoneId.systemDefault()
);
return isTimeInRange(dtuTime, startTime, endTime);
}
}

View File

@ -4,14 +4,8 @@ import com.agri.common.utils.wechat.WxUtil;
import com.agri.framework.config.MqttConfig; import com.agri.framework.config.MqttConfig;
import com.agri.framework.manager.MqttAutoOffManager; import com.agri.framework.manager.MqttAutoOffManager;
import com.agri.framework.manager.MqttSubscriptionManager; import com.agri.framework.manager.MqttSubscriptionManager;
import com.agri.system.domain.SysAgriLimit;
import com.agri.system.domain.SysDevOperLog;
import com.agri.system.service.ISysAgriLimitService;
import com.agri.system.service.ISysDevOperLogService;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.lang3.ObjectUtils;
import org.checkerframework.checker.units.qual.A;
import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -19,17 +13,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function;
/** /**
* *
@ -237,4 +227,4 @@ public class DeviceStatusHandler {
return false; return false;
} }
} }

View File

@ -38,7 +38,11 @@
<groupId>com.agri</groupId> <groupId>com.agri</groupId>
<artifactId>agri-system</artifactId> <artifactId>agri-system</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.agri</groupId>
<artifactId>agri-framework</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,7 +1,25 @@
package com.agri.quartz.task; package com.agri.quartz.task;
import com.agri.common.enums.TempCommandStatus;
import com.agri.common.utils.TempJudgeUtil;
import com.agri.common.utils.TimeConvertUtil;
import com.agri.common.utils.TimeRangeUtil;
import com.agri.system.domain.SysAgriInfo;
import com.agri.system.domain.vo.RollerTermVO;
import com.agri.system.service.ISysAgriInfoService;
import com.agri.system.service.ISysDtuDataService;
import com.agri.system.service.ISysRollerParamService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* *
* *
@ -14,4 +32,98 @@ import org.springframework.stereotype.Component;
@Component("rollerAutoTask") @Component("rollerAutoTask")
public class RollerAutoTask { public class RollerAutoTask {
@Autowired
private ISysAgriInfoService agriInfoService;
@Autowired
private ISysDtuDataService dtuDataService;
@Autowired
private ISysRollerParamService rollerParamService;
@Resource
private MqttConfig.MqttMessageSender mqttMessageSender;
public void checkAutoTerm() {
// 查询自动模式的大棚
List<SysAgriInfo> agriInfos = agriInfoService.lambdaQuery()
.select(SysAgriInfo::getImei)
.eq(SysAgriInfo::getWorkMode, 1)
.eq(SysAgriInfo::getIsDeleted, 0)
.list();
if (CollectionUtils.isEmpty(agriInfos)) return;
// 取imei集合
List<String> imeiList = agriInfos.stream().map(SysAgriInfo::getImei).collect(Collectors.toList());
if (CollectionUtils.isEmpty(imeiList)) return;
// 根据imei 查询dtu_data最后一条温度数据
List<Map<String, Object>> dtuDataList = dtuDataService.getLastDtuDataByImeiList(imeiList);
if (CollectionUtils.isEmpty(dtuDataList)) return;
// 根据温湿度imei分组
Map<String, List<Map<String, Object>>> dtuDataByImeiMap = dtuDataList.stream().collect(Collectors.groupingBy(map -> (String) map.get("imei")));
// 获取所有开启自动化模式的大棚列表的卷膜参数和条件设置
List<RollerTermVO> rollerTermList = rollerParamService.getRollerTerms(imeiList);
if (CollectionUtils.isEmpty(rollerTermList)) {
// todo 无参数设置和条件列表直接返回
return;
}
// 按imei分组 → 再按roller分组一步到位
Map<String, Map<String, List<RollerTermVO>>> rollerTermMap = rollerTermList.stream()
.collect(Collectors.groupingBy(
RollerTermVO::getImei,
Collectors.groupingBy(RollerTermVO::getRoller)
));
// 循环所有开启自动化的大棚
for (String imei : imeiList) {
// 获取温湿度指定imei的数据
List<Map<String, Object>> dtuDataInfo = dtuDataByImeiMap.get(imei);
// 该大棚温湿度不存在
if (CollectionUtils.isEmpty(dtuDataInfo)) {
// todo 该大棚下1分钟内无最新温湿度怀疑离线
break;
}
// 最后一条对应imei对应温度
Map<String, Object> dtuData = dtuDataInfo.get(0);
// 获取当前imei下的所有参数设置以及卷膜自动化条件设置
Map<String, List<RollerTermVO>> configTermByRollerMap = rollerTermMap.get(imei);
configTermByRollerMap.forEach((config, terms) ->{
// 每个卷膜分组只会有一个卷膜参数设置,所有取第一个即可
RollerTermVO rollerConfig = terms.get(0);
BigDecimal ventTotalLen = rollerConfig.getVentTotalLen(); // 风口总长
String roller = rollerConfig.getRoller(); // 卷膜
String refTempCode = rollerConfig.getRefTempCode();
BigDecimal reservedLen = rollerConfig.getReservedLen(); // 预留封口
terms.forEach(term -> {
LocalDateTime dtuTime = TimeConvertUtil.strToLocalDateTimeSafe((String) dtuData.get("time"));
if (dtuTime == null) {
return; // 跳过该设备
}
// 判断该温度上报时间是否在该条件设置的时间范围内
boolean inRange = TimeRangeUtil.isTimeInRange(dtuTime, term.getStartTime(), term.getEndTime());
// 在范围内
if (inRange) {
//判断温度是否在
String redTempCode = dtuData.get(refTempCode).toString();
BigDecimal currentTemp = new BigDecimal(dtuData.get(redTempCode).toString());
TempCommandStatus tempCommandStatus = TempJudgeUtil.judgeTempCommand(currentTemp, term.getTemp());
if (tempCommandStatus==TempCommandStatus.OPEN) {
// 开指令
} else if (tempCommandStatus==TempCommandStatus.CLOSE) {
// 关指令
}
}
// 不在掠过
});
});
}
}
} }

View File

@ -9,13 +9,14 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.time.LocalDateTime;
/** /**
* DTU湿 sys_dtu_data * DTU湿 sys_dtu_data
* *
* @author agri * @author agri
* @date 2025-12-23 * @LocalDateTime 2025-12-23
*/ */
public class SysDtuData extends BaseEntity public class SysDtuData extends BaseEntity
{ {
@ -36,7 +37,7 @@ public class SysDtuData extends BaseEntity
/** ts转换后的正常时间(由服务端转换入库) */ /** ts转换后的正常时间(由服务端转换入库) */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@Excel(name = "ts转换后的正常时间(由服务端转换入库)", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "ts转换后的正常时间(由服务端转换入库)", width = 30, dateFormat = "yyyy-MM-dd")
private Date time; private LocalDateTime time;
/** 温度1(℃) */ /** 温度1(℃) */
@Excel(name = "温度1(℃)") @Excel(name = "温度1(℃)")
@ -74,132 +75,132 @@ public class SysDtuData extends BaseEntity
@Excel(name = "原始JSON元信息(原始上报码/额外字段)") @Excel(name = "原始JSON元信息(原始上报码/额外字段)")
private String raw; private String raw;
public void setId(Long id) public void setId(Long id)
{ {
this.id = id; this.id = id;
} }
public Long getId() public Long getId()
{ {
return id; return id;
} }
public void setImei(String imei) public void setImei(String imei)
{ {
this.imei = imei; this.imei = imei;
} }
public String getImei() public String getImei()
{ {
return imei; return imei;
} }
public void setTs(Long ts) public void setTs(Long ts)
{ {
this.ts = ts; this.ts = ts;
} }
public Long getTs() public Long getTs()
{ {
return ts; return ts;
} }
public void setTime(Date time) public void setTime(LocalDateTime time)
{ {
this.time = time; this.time = time;
} }
public Date getTime() public LocalDateTime getTime()
{ {
return time; return time;
} }
public void setTemp1(BigDecimal temp1) public void setTemp1(BigDecimal temp1)
{ {
this.temp1 = temp1; this.temp1 = temp1;
} }
public BigDecimal getTemp1() public BigDecimal getTemp1()
{ {
return temp1; return temp1;
} }
public void setHumi1(BigDecimal humi1) public void setHumi1(BigDecimal humi1)
{ {
this.humi1 = humi1; this.humi1 = humi1;
} }
public BigDecimal getHumi1() public BigDecimal getHumi1()
{ {
return humi1; return humi1;
} }
public void setTemp2(BigDecimal temp2) public void setTemp2(BigDecimal temp2)
{ {
this.temp2 = temp2; this.temp2 = temp2;
} }
public BigDecimal getTemp2() public BigDecimal getTemp2()
{ {
return temp2; return temp2;
} }
public void setHumi2(BigDecimal humi2) public void setHumi2(BigDecimal humi2)
{ {
this.humi2 = humi2; this.humi2 = humi2;
} }
public BigDecimal getHumi2() public BigDecimal getHumi2()
{ {
return humi2; return humi2;
} }
public void setTemp3(BigDecimal temp3) public void setTemp3(BigDecimal temp3)
{ {
this.temp3 = temp3; this.temp3 = temp3;
} }
public BigDecimal getTemp3() public BigDecimal getTemp3()
{ {
return temp3; return temp3;
} }
public void setHumi3(BigDecimal humi3) public void setHumi3(BigDecimal humi3)
{ {
this.humi3 = humi3; this.humi3 = humi3;
} }
public BigDecimal getHumi3() public BigDecimal getHumi3()
{ {
return humi3; return humi3;
} }
public void setTemp4(BigDecimal temp4) public void setTemp4(BigDecimal temp4)
{ {
this.temp4 = temp4; this.temp4 = temp4;
} }
public BigDecimal getTemp4() public BigDecimal getTemp4()
{ {
return temp4; return temp4;
} }
public void setHumi4(BigDecimal humi4) public void setHumi4(BigDecimal humi4)
{ {
this.humi4 = humi4; this.humi4 = humi4;
} }
public BigDecimal getHumi4() public BigDecimal getHumi4()
{ {
return humi4; return humi4;
} }
public void setRaw(String raw) public void setRaw(String raw)
{ {
this.raw = raw; this.raw = raw;
} }
public String getRaw() public String getRaw()
{ {
return raw; return raw;
} }

View File

@ -1,24 +1,23 @@
package com.agri.system.domain; package com.agri.system.domain;
import java.time.LocalDate; import com.agri.common.annotation.Excel;
import java.time.LocalDateTime; import com.agri.common.core.domain.BaseEntity;
import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import com.baomidou.mybatisplus.annotation.TableName;
import com.agri.common.annotation.Excel; import java.time.LocalDateTime;
import com.agri.common.core.domain.BaseEntity;
/** /**
* sys_roller_air * sys_roller_air
* *
* @author lld * @author lld
* @date 2026-03-04 * @date 2026-03-04
*/ */

View File

@ -1,22 +1,26 @@
package com.agri.system.domain; package com.agri.system.domain;
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.TableName;
import com.agri.common.annotation.Excel; import com.agri.common.annotation.Excel;
import com.agri.common.core.domain.BaseEntity; import com.agri.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* sys_roller_param * sys_roller_param
* *
* @author lld * @author lld
* @date 2026-02-27 * @date 2026-02-27
*/ */
@Data
@TableName("sys_roller_param") @TableName("sys_roller_param")
public class SysRollerParam extends BaseEntity public class SysRollerParam extends BaseEntity
{ {
@ -59,92 +63,6 @@ public class SysRollerParam extends BaseEntity
@Excel(name = "最终风口总长") @Excel(name = "最终风口总长")
private BigDecimal ventTotalLen; private BigDecimal ventTotalLen;
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
public void setImei(String imei)
{
this.imei = imei;
}
public String getImei()
{
return imei;
}
public void setRoller(String roller)
{
this.roller = roller;
}
public String getRoller()
{
return roller;
}
public void setRefTempCode(String refTempCode)
{
this.refTempCode = refTempCode;
}
public String getRefTempCode()
{
return refTempCode;
}
public void setReservedLen(BigDecimal reservedLen)
{
this.reservedLen = reservedLen;
}
public BigDecimal getReservedLen()
{
return reservedLen;
}
public void setManualTotalLen(BigDecimal manualTotalLen)
{
this.manualTotalLen = manualTotalLen;
}
public BigDecimal getManualTotalLen()
{
return manualTotalLen;
}
public void setAutoTotalLen(BigDecimal autoTotalLen)
{
this.autoTotalLen = autoTotalLen;
}
public BigDecimal getAutoTotalLen()
{
return autoTotalLen;
}
public String getRefTemp() {
return refTemp;
}
public void setRefTemp(String refTemp) {
this.refTemp = refTemp;
}
public BigDecimal getVentTotalLen() {
return ventTotalLen;
}
public void setVentTotalLen(BigDecimal ventTotalLen) {
this.ventTotalLen = ventTotalLen;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -0,0 +1,49 @@
package com.agri.system.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @ClassName AgriAutoInfoVo
* @Description TODO
* @Author lld
* @Date 2026/3/5 22:07
* @Version 1.0
*/
@Data
public class AgriAutoInfoVo {
/** 设备IMEI */
private String imei;
/** 大棚名称 */
private String agriName;
/** 工作模式 */
private Integer workMode;
/** 逻辑删除(0-未删1-已删) */
private Integer isDeleted;
/** 卷膜标识 */
private String roller;
/** 参考温度 */
private String refTempCode;
/** 参考温度 */
private String refTemp;
/** 预留风口长度(cm) */
private BigDecimal reservedLen;
/** 手动计算风口总长(cm) */
private BigDecimal manualTotalLen;
/** 自动计算风口总长(cm) */
private BigDecimal autoTotalLen;
private BigDecimal ventTotalLen;
}

View File

@ -0,0 +1,32 @@
package com.agri.system.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @ClassName RollerTermVO
* @Description TODO
* @Author lld
* @Date 2026/3/6 1:13
* @Version 1.0
*/
// 用于承接rollerParam+autoTerms关联查询的结果
@Data
public class RollerTermVO {
// rollerParam字段
private String imei;
private String roller;
private String refTempCode;
private BigDecimal reservedLen;
private BigDecimal manualTotalLen;
private BigDecimal autoTotalLen;
private BigDecimal ventTotalLen;
// autoTerms字段一对多允许为null
private BigDecimal temp;
private BigDecimal vent;
private LocalDateTime startTime;
private LocalDateTime endTime;
}

View File

@ -1,6 +1,7 @@
package com.agri.system.mapper; package com.agri.system.mapper;
import com.agri.system.domain.SysAgriInfo; import com.agri.system.domain.SysAgriInfo;
import com.agri.system.domain.vo.AgriAutoInfoVo;
import com.agri.system.domain.vo.AgriInfoView; import com.agri.system.domain.vo.AgriInfoView;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -8,14 +9,14 @@ import java.util.List;
/** /**
* Mapper * Mapper
* *
* @author agri * @author agri
* @date 2026-01-08 * @date 2026-01-08
*/ */
public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> { public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -23,7 +24,7 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -31,7 +32,7 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -39,7 +40,7 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -47,7 +48,7 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -55,7 +56,7 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
@ -71,4 +72,5 @@ public interface SysAgriInfoMapper extends BaseMapper<SysAgriInfo> {
public List<AgriInfoView> findAgriInfoByUser(SysAgriInfo sysAgriInfo); public List<AgriInfoView> findAgriInfoByUser(SysAgriInfo sysAgriInfo);
List<AgriAutoInfoVo> findAgriOfAutoInfo();
} }

View File

@ -1,12 +1,15 @@
package com.agri.system.mapper; package com.agri.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.agri.system.domain.SysRollerParam; import com.agri.system.domain.SysRollerParam;
import com.agri.system.domain.vo.RollerTermVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* Mapper * Mapper
* *
* @author lld * @author lld
* @date 2026-02-27 * @date 2026-02-27
*/ */
@ -14,7 +17,7 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
{ {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -22,7 +25,7 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -30,7 +33,7 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -38,7 +41,7 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -46,7 +49,7 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -54,9 +57,12 @@ public interface SysRollerParamMapper extends BaseMapper<SysRollerParam>
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
public int deleteSysRollerParamByIds(String[] ids); public int deleteSysRollerParamByIds(String[] ids);
List<RollerTermVO> getRollerTerms(@Param("imeiList") List<String> imeiList);
} }

View File

@ -1,6 +1,7 @@
package com.agri.system.service; package com.agri.system.service;
import com.agri.system.domain.SysAgriInfo; import com.agri.system.domain.SysAgriInfo;
import com.agri.system.domain.vo.AgriAutoInfoVo;
import com.agri.system.domain.vo.AgriInfoView; import com.agri.system.domain.vo.AgriInfoView;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -9,14 +10,14 @@ import java.util.Map;
/** /**
* Service * Service
* *
* @author agri * @author agri
* @date 2026-01-08 * @date 2026-01-08
*/ */
public interface ISysAgriInfoService extends IService<SysAgriInfo> { public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -24,7 +25,7 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -32,7 +33,7 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -40,7 +41,7 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -48,7 +49,7 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
@ -56,7 +57,7 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -68,4 +69,6 @@ public interface ISysAgriInfoService extends IService<SysAgriInfo> {
public List<AgriInfoView> findAgriInfoByUser(SysAgriInfo sysAgriInfo); public List<AgriInfoView> findAgriInfoByUser(SysAgriInfo sysAgriInfo);
Map<String,Object> addAgriFromMobile(SysAgriInfo sysAgriInfo); Map<String,Object> addAgriFromMobile(SysAgriInfo sysAgriInfo);
List<AgriAutoInfoVo> findAgriOfAutoInfo();
} }

View File

@ -1,14 +1,14 @@
package com.agri.system.service; package com.agri.system.service;
import java.util.List;
import com.agri.system.domain.SysAgriAlarmRelation;
import com.agri.system.domain.SysDtuData; import com.agri.system.domain.SysDtuData;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/** /**
* DTU湿Service * DTU湿Service
* *
* @author agri * @author agri
* @date 2025-12-23 * @date 2025-12-23
*/ */
@ -16,7 +16,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
{ {
/** /**
* DTU湿 * DTU湿
* *
* @param id DTU湿 * @param id DTU湿
* @return DTU湿 * @return DTU湿
*/ */
@ -24,7 +24,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return DTU湿 * @return DTU湿
*/ */
@ -39,7 +39,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return * @return
*/ */
@ -47,7 +47,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return * @return
*/ */
@ -55,7 +55,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
/** /**
* DTU湿 * DTU湿
* *
* @param ids DTU湿 * @param ids DTU湿
* @return * @return
*/ */
@ -63,9 +63,12 @@ public interface ISysDtuDataService extends IService<SysDtuData>
/** /**
* DTU湿 * DTU湿
* *
* @param id DTU湿 * @param id DTU湿
* @return * @return
*/ */
public int deleteSysDtuDataById(Long id); public int deleteSysDtuDataById(Long id);
List<Map<String, Object>> getLastDtuDataByImeiList(List<String> imeiList);
} }

View File

@ -1,19 +1,21 @@
package com.agri.system.service; package com.agri.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.agri.system.domain.SysRollerParam; import com.agri.system.domain.SysRollerParam;
import com.agri.system.domain.vo.RollerTermVO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* Service * Service
* *
* @author lld * @author lld
* @date 2026-02-27 * @date 2026-02-27
*/ */
public interface ISysRollerParamService extends IService<SysRollerParam> { public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -21,7 +23,7 @@ public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -29,7 +31,7 @@ public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -37,7 +39,7 @@ public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -45,7 +47,7 @@ public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
@ -53,9 +55,12 @@ public interface ISysRollerParamService extends IService<SysRollerParam> {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
public int deleteSysRollerParamById(String id); public int deleteSysRollerParamById(String id);
List<RollerTermVO> getRollerTerms(List<String> imeiList);
} }

View File

@ -1,17 +1,16 @@
package com.agri.system.service.impl; package com.agri.system.service.impl;
import com.agri.common.core.domain.entity.SysUser;
import com.agri.common.enums.AgriEnum; import com.agri.common.enums.AgriEnum;
import com.agri.common.utils.DateUtils; import com.agri.common.utils.DateUtils;
import com.agri.common.utils.SecurityUtils; import com.agri.common.utils.SecurityUtils;
import com.agri.common.utils.wechat.WxUtil; import com.agri.common.utils.wechat.WxUtil;
import com.agri.system.domain.SysAgriInfo; import com.agri.system.domain.SysAgriInfo;
import com.agri.system.domain.SysUserAgri; import com.agri.system.domain.SysUserAgri;
import com.agri.system.domain.vo.AgriAutoInfoVo;
import com.agri.system.domain.vo.AgriInfoView; import com.agri.system.domain.vo.AgriInfoView;
import com.agri.system.mapper.SysAgriInfoMapper; import com.agri.system.mapper.SysAgriInfoMapper;
import com.agri.system.service.ISysAgriInfoService; import com.agri.system.service.ISysAgriInfoService;
import com.agri.system.service.ISysUserAgriService; import com.agri.system.service.ISysUserAgriService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,7 +22,7 @@ import java.util.*;
/** /**
* Service * Service
* *
* @author agri * @author agri
* @date 2026-01-08 * @date 2026-01-08
*/ */
@ -39,7 +38,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -51,7 +50,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -63,7 +62,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -75,7 +74,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param sysAgriInfo * @param sysAgriInfo
* @return * @return
*/ */
@ -88,7 +87,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
@ -100,7 +99,7 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -258,6 +257,9 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
} }
@Override
public List<AgriAutoInfoVo> findAgriOfAutoInfo() {
return baseMapper.findAgriOfAutoInfo();
}
} }

View File

@ -1,17 +1,22 @@
package com.agri.system.service.impl; package com.agri.system.service.impl;
import java.util.List;
import com.agri.common.utils.DateUtils; import com.agri.common.utils.DateUtils;
import com.agri.system.domain.SysDtuData;
import com.agri.system.mapper.SysDtuDataMapper;
import com.agri.system.service.ISysDtuDataService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.agri.system.mapper.SysDtuDataMapper;
import com.agri.system.domain.SysDtuData; import java.time.LocalDateTime;
import com.agri.system.service.ISysDtuDataService; import java.util.List;
import java.util.Map;
/** /**
* DTU湿Service * DTU湿Service
* *
* @author agri * @author agri
* @date 2025-12-23 * @date 2025-12-23
*/ */
@ -23,7 +28,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param id DTU湿 * @param id DTU湿
* @return DTU湿 * @return DTU湿
*/ */
@ -35,7 +40,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return DTU湿 * @return DTU湿
*/ */
@ -54,7 +59,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return * @return
*/ */
@ -67,7 +72,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param sysDtuData DTU湿 * @param sysDtuData DTU湿
* @return * @return
*/ */
@ -79,7 +84,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param ids DTU湿 * @param ids DTU湿
* @return * @return
*/ */
@ -91,7 +96,7 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
/** /**
* DTU湿 * DTU湿
* *
* @param id DTU湿 * @param id DTU湿
* @return * @return
*/ */
@ -100,4 +105,38 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
{ {
return sysDtuDataMapper.deleteSysDtuDataById(id); return sysDtuDataMapper.deleteSysDtuDataById(id);
} }
/**
* imeiimeiidid
* @param imeiList imei
*
* @return imei
*/
@Override
public List<Map<String, Object>> getLastDtuDataByImeiList(List<String> imeiList) {
// 1. 计算最后一分钟的起始时间(当前时间 - 1分钟
LocalDateTime lastOneMinute = LocalDateTime.now().minusMinutes(1);
// 2. 子查询按imei分组 + 最后一分钟过滤 + 取每组最大ID
QueryWrapper<SysDtuData> subQuery = new QueryWrapper<>();
subQuery.select("imei", "MAX(id) as max_id") // 雪花ID的MAX(id)就是最新记录
.in("imei", imeiList)
.ge("time", lastOneMinute)
.groupBy("imei");
// 3. 主查询通过MAX(id)匹配完整数据 + 指定字段
LambdaQueryWrapper<SysDtuData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.inSql(SysDtuData::getId,
"SELECT max_id FROM (" + subQuery.getCustomSqlSegment() + ") t")
.select(SysDtuData::getImei,
SysDtuData::getTemp1,
SysDtuData::getTemp2,
SysDtuData::getTemp3,
SysDtuData::getTemp4,
SysDtuData::getTime);
return baseMapper.selectMaps(queryWrapper);
}
} }

View File

@ -1,26 +1,28 @@
package com.agri.system.service.impl; package com.agri.system.service.impl;
import java.util.List;
import com.agri.common.utils.DateUtils; import com.agri.common.utils.DateUtils;
import com.agri.system.domain.SysRollerParam;
import com.agri.system.domain.vo.RollerTermVO;
import com.agri.system.mapper.SysRollerParamMapper;
import com.agri.system.service.ISysRollerParamService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.agri.system.mapper.SysRollerParamMapper;
import com.agri.system.domain.SysRollerParam; import java.util.List;
import com.agri.system.service.ISysRollerParamService;
/** /**
* Service * Service
* *
* @author lld * @author lld
* @date 2026-02-27 * @date 2026-02-27
*/ */
@Service @Service
public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper, SysRollerParam> implements ISysRollerParamService public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper, SysRollerParam> implements ISysRollerParamService
{ {
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -32,7 +34,7 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -44,7 +46,7 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -56,7 +58,7 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
/** /**
* *
* *
* @param sysRollerParam * @param sysRollerParam
* @return * @return
*/ */
@ -69,7 +71,7 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
/** /**
* *
* *
* @param ids * @param ids
* @return * @return
*/ */
@ -81,7 +83,7 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
@ -90,4 +92,11 @@ public class SysRollerParamServiceImpl extends ServiceImpl<SysRollerParamMapper,
{ {
return baseMapper.deleteSysRollerParamById(id); return baseMapper.deleteSysRollerParamById(id);
} }
@Override
public List<RollerTermVO> getRollerTerms(List<String> imeiList) {
return baseMapper.getRollerTerms(imeiList);
}
} }

View File

@ -192,4 +192,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="isDeleted != null "> and agri.is_deleted = #{isDeleted}</if> <if test="isDeleted != null "> and agri.is_deleted = #{isDeleted}</if>
</where> </where>
</select> </select>
<!-- 查询自动模式下的所有imei以及卷膜参数 -->
<select id="findAgriOfAutoInfo" resultType="com.agri.system.domain.vo.AgriAutoInfoVo">
SELECT
agri.`imei`,
agri.`agri_name`,
agri.`work_mode`,
agri.`is_deleted`,
roller_param.`roller`,
roller_param.`ref_temp_code`,
roller_param.`reserved_len`,
roller_param.`manual_total_len`,
roller_param.`auto_total_len`,
roller_param.`vent_total_len`
FROM
sys_agri_info agri
LEFT JOIN sys_roller_param roller_param ON agri.imei = roller_param.imei
WHERE
agri.`is_deleted` = 0
and agri.work_mode = 1
</select>
</mapper> </mapper>

View File

@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.agri.system.mapper.SysRollerParamMapper"> <mapper namespace="com.agri.system.mapper.SysRollerParamMapper">
<resultMap type="SysRollerParam" id="SysRollerParamResult"> <resultMap type="SysRollerParam" id="SysRollerParamResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="imei" column="imei" /> <result property="imei" column="imei" />
@ -24,13 +24,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectSysRollerParamList" parameterType="SysRollerParam" resultMap="SysRollerParamResult"> <select id="selectSysRollerParamList" parameterType="SysRollerParam" resultMap="SysRollerParamResult">
<include refid="selectSysRollerParamVo"/> <include refid="selectSysRollerParamVo"/>
<where> <where>
<if test="imei != null and imei != ''"> and imei = #{imei}</if> <if test="imei != null and imei != ''"> and imei = #{imei}</if>
<if test="roller != null and roller != ''"> and roller = #{roller}</if> <if test="roller != null and roller != ''"> and roller = #{roller}</if>
<if test="refTempCode != null and refTempCode != ''"> and ref_temp_code = #{refTempCode}</if> <if test="refTempCode != null and refTempCode != ''"> and ref_temp_code = #{refTempCode}</if>
</where> </where>
</select> </select>
<select id="selectSysRollerParamById" parameterType="String" resultMap="SysRollerParamResult"> <select id="selectSysRollerParamById" parameterType="String" resultMap="SysRollerParamResult">
<include refid="selectSysRollerParamVo"/> <include refid="selectSysRollerParamVo"/>
where id = #{id} where id = #{id}
@ -86,9 +86,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<delete id="deleteSysRollerParamByIds" parameterType="String"> <delete id="deleteSysRollerParamByIds" parameterType="String">
delete from sys_roller_param where id in delete from sys_roller_param where id in
<foreach item="id" collection="array" open="(" separator="," close=")"> <foreach item="id" collection="array" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
</mapper>
<select id="getRollerTerms" resultType="com.agri.system.domain.vo.RollerTermVO" >
SELECT
rp.imei,
rp.roller,
rp.ref_temp_code,
rp.reserved_len,
rp.manual_total_len,
rp.auto_total_len,
rp.vent_total_len,
at.temp,
at.vent,
at.start_time,
at.end_time
FROM sys_roller_param rp
LEFT JOIN sys_auto_term at
ON rp.imei = at.imei
AND rp.roller = at.roller -- 关键按imei+roller双字段关联精准匹配
WHERE rp.imei IN
<foreach collection="imeiList" item="imei" open="(" separator="," close=")">
#{imei}
</foreach>
</select>
</mapper>