From 17f8af09015c9651d63bd8b6d53e7a2aa5132c28 Mon Sep 17 00:00:00 2001
From: lld <15027638633@163.com>
Date: Thu, 22 Jan 2026 18:20:12 +0800
Subject: [PATCH] =?UTF-8?q?mqtt=E6=9E=B6=E6=9E=84=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application-mqtt.yml | 4 +-
.../com/agri/framework/config/MqttConfig.java | 2 +-
.../interceptor/MqttMessageHandler.java | 11 +-
.../src/main/resources/vm/java/domain.java.vm | 3 +
.../resources/vm/java/serviceImpl.java.vm | 2 +-
agri-system/pom.xml | 5 +
.../controller/SysDtuRemarkController.java | 114 ++++++
.../com/agri/system/domain/SysDtuRemark.java | 332 ++++++++++++++++++
.../agri/system/domain/vo/DtuSettingVo.java | 65 ++++
.../system/mapper/SysDtuRemarkMapper.java | 62 ++++
.../system/service/ISysDtuRemarkService.java | 61 ++++
.../service/impl/SysDtuRemarkServiceImpl.java | 94 +++++
.../mapper/system/SysDtuRemarkMapper.xml | 144 ++++++++
13 files changed, 890 insertions(+), 9 deletions(-)
create mode 100644 agri-system/src/main/java/com/agri/system/controller/SysDtuRemarkController.java
create mode 100644 agri-system/src/main/java/com/agri/system/domain/SysDtuRemark.java
create mode 100644 agri-system/src/main/java/com/agri/system/domain/vo/DtuSettingVo.java
create mode 100644 agri-system/src/main/java/com/agri/system/mapper/SysDtuRemarkMapper.java
create mode 100644 agri-system/src/main/java/com/agri/system/service/ISysDtuRemarkService.java
create mode 100644 agri-system/src/main/java/com/agri/system/service/impl/SysDtuRemarkServiceImpl.java
create mode 100644 agri-system/src/main/resources/mapper/system/SysDtuRemarkMapper.xml
diff --git a/agri-admin/src/main/resources/application-mqtt.yml b/agri-admin/src/main/resources/application-mqtt.yml
index b9964bf..e6540ef 100644
--- a/agri-admin/src/main/resources/application-mqtt.yml
+++ b/agri-admin/src/main/resources/application-mqtt.yml
@@ -6,10 +6,10 @@ spring:
password: Admin#12345678 # Mosquitto密码
client-id: springboot-backend # 截取UUID前8位(自动去横线)
default-topic: dtu/+/up,frontend/+/control/+,frontend/+/online # 后端监听的主题
- qos: 1 # 消息可靠性
+ qos: 0 # 消息可靠性
timeout: 60 # 连接超时
keep-alive: 60 # 心跳间隔
latest-ttl-seconds: 120 #设备最新状态缓存的过期时间(秒)。
# 自动关闭任务线程池大小
auto-off-thread-pool-size: 5
- sub-ttl-seconds: 3600 # 在线新跳ttl
\ No newline at end of file
+ subc-ttl-seconds: 3600 # 在线新跳ttl
\ No newline at end of file
diff --git a/agri-framework/src/main/java/com/agri/framework/config/MqttConfig.java b/agri-framework/src/main/java/com/agri/framework/config/MqttConfig.java
index bede747..477f52b 100644
--- a/agri-framework/src/main/java/com/agri/framework/config/MqttConfig.java
+++ b/agri-framework/src/main/java/com/agri/framework/config/MqttConfig.java
@@ -125,7 +125,7 @@ public class MqttConfig {
connectOptions.setCleanSession(false);
// 开启自动重连:连接断开后自动尝试重连,提升稳定性(方案A核心)
- connectOptions.setAutomaticReconnect(true);
+ connectOptions.setAutomaticReconnect(false);
// 设置最大重连间隔(秒):避免频繁重连消耗资源
connectOptions.setMaxReconnectDelay(30);
return connectOptions;
diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java
index 2451abd..9d2845a 100644
--- a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java
+++ b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java
@@ -181,7 +181,7 @@ public class MqttMessageHandler implements SmartLifecycle {
int[] qosArray = new int[topics.length];
// 按主题类型设置QoS:控制指令/状态用QoS 1
for (int i = 0; i < topics.length; i++) {
- qosArray[i] = 1;
+ qosArray[i] = 0;
topics[i] = topics[i].trim();
}
@@ -289,6 +289,7 @@ public class MqttMessageHandler implements SmartLifecycle {
return;
}
+// log.info("【设备处理】JSON解析:{}",payloadObj);
// 解析设备ID:主题格式为dtu/{deviceId}/up,分割后第2个元素是设备ID
String deviceId = topic.split("/")[1];
@@ -394,7 +395,7 @@ public class MqttMessageHandler implements SmartLifecycle {
String frontendTopic = "frontend/" + clientId + "/dtu/" + deviceId + "/listener";
// 发布消息
mqttMessageSender.publish(frontendTopic, payload);
- // log.info("【设备状态转发】设备{} → 前端{},主题:{}", deviceId, clientId, frontendTopic);
+ log.info("【设备状态转发】设备{} → 前端{},主题:{}", deviceId, clientId, frontendTopic);
}
// 删掉设备对应的客户端
if (stale != null && !stale.isEmpty()) {
@@ -575,7 +576,7 @@ public class MqttMessageHandler implements SmartLifecycle {
String deviceTopic = "dtu/" + deviceId + "/down";
//todo
- // mqttMessageSender.publish(deviceTopic, down.toJSONString());
+ mqttMessageSender.publish(deviceTopic, down.toJSONString());
log.info("【自动关任务】检测仍在运行,已下发关闭:deviceId={}, funcType={}, payload={}", deviceId, funcType, down.toJSONString());
} else {
log.info("【自动关任务】检测未运行或状态未知,跳过关闭:deviceId={}, funcType={}, current={}", deviceId, funcType, current);
@@ -644,7 +645,7 @@ public class MqttMessageHandler implements SmartLifecycle {
// 4. 转发指令到设备
String deviceTopic = "dtu/" + deviceId + "/down";
//todo
- // mqttMessageSender.publish(deviceTopic, payload);
+ mqttMessageSender.publish(deviceTopic, payload);
log.info("【指令转发】前端{} → 设备{}的{}功能", clientId, deviceId, funcType);
}
@@ -667,7 +668,7 @@ public class MqttMessageHandler implements SmartLifecycle {
stringRedisTemplate.expire("subc:" + clientId, subcTtlSeconds, TimeUnit.SECONDS);
// todo 生产环境不建议打印每次心跳
- log.debug("【在线心跳】clientId={} 续期subcTTL={}s payload={}", clientId, subcTtlSeconds, payload);
+// log.debug("【在线心跳】clientId={} 续期subcTTL={}s payload={}", clientId, subcTtlSeconds, payload);
} catch (Exception e) {
log.warn("【在线心跳】处理失败 topic={} msg={}", topic, e.getMessage());
}
diff --git a/agri-generator/src/main/resources/vm/java/domain.java.vm b/agri-generator/src/main/resources/vm/java/domain.java.vm
index 9398297..f447a5f 100644
--- a/agri-generator/src/main/resources/vm/java/domain.java.vm
+++ b/agri-generator/src/main/resources/vm/java/domain.java.vm
@@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.baomidou.mybatisplus.annotation.TableField;
+#if($column.javaField == 'version')
+import com.baomidou.mybatisplus.annotation.Version;
+#end
import com.baomidou.mybatisplus.annotation.TableName;
import com.agri.common.annotation.Excel;
#if($table.crud || $table.sub)
diff --git a/agri-generator/src/main/resources/vm/java/serviceImpl.java.vm b/agri-generator/src/main/resources/vm/java/serviceImpl.java.vm
index 5a4f377..f11c736 100644
--- a/agri-generator/src/main/resources/vm/java/serviceImpl.java.vm
+++ b/agri-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -7,7 +7,7 @@ import com.agri.common.utils.DateUtils;
#break
#end
#end
-import org.springframework.beans.factory.annotation.Autowired;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
#if($table.sub)
import java.util.ArrayList;
diff --git a/agri-system/pom.xml b/agri-system/pom.xml
index b47553b..8051c05 100644
--- a/agri-system/pom.xml
+++ b/agri-system/pom.xml
@@ -22,6 +22,11 @@
com.agri
agri-common
+
+ org.projectlombok
+ lombok
+ provided
+
diff --git a/agri-system/src/main/java/com/agri/system/controller/SysDtuRemarkController.java b/agri-system/src/main/java/com/agri/system/controller/SysDtuRemarkController.java
new file mode 100644
index 0000000..552a734
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/controller/SysDtuRemarkController.java
@@ -0,0 +1,114 @@
+package com.agri.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.ibatis.ognl.ObjectElementsAccessor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.agri.common.annotation.Log;
+import com.agri.common.core.controller.BaseController;
+import com.agri.common.core.domain.AjaxResult;
+import com.agri.common.enums.BusinessType;
+import com.agri.system.domain.SysDtuRemark;
+import com.agri.system.service.ISysDtuRemarkService;
+import com.agri.common.utils.poi.ExcelUtil;
+import com.agri.common.core.page.TableDataInfo;
+
+/**
+ * dtu设备备注Controller
+ *
+ * @author lld
+ * @date 2026-01-21
+ */
+@RestController
+@RequestMapping("/assets/remark")
+public class SysDtuRemarkController extends BaseController
+{
+ @Autowired
+ private ISysDtuRemarkService sysDtuRemarkService;
+
+ /**
+ * 查询dtu设备备注列表
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysDtuRemark sysDtuRemark)
+ {
+ startPage();
+ List list = sysDtuRemarkService.selectSysDtuRemarkList(sysDtuRemark);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出dtu设备备注列表
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:export')")
+ @Log(title = "dtu设备备注", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, SysDtuRemark sysDtuRemark)
+ {
+ List list = sysDtuRemarkService.selectSysDtuRemarkList(sysDtuRemark);
+ ExcelUtil util = new ExcelUtil(SysDtuRemark.class);
+ util.exportExcel(response, list, "dtu设备备注数据");
+ }
+
+ /**
+ * 获取dtu设备备注详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(sysDtuRemarkService.selectSysDtuRemarkById(id));
+ }
+
+ /**
+ * 新增dtu设备备注
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:add')")
+ @Log(title = "dtu设备备注", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody SysDtuRemark sysDtuRemark)
+ {
+ return toAjax(sysDtuRemarkService.insertSysDtuRemark(sysDtuRemark));
+ }
+
+ /**
+ * 修改dtu设备备注
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:edit')")
+ @Log(title = "dtu设备备注", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody SysDtuRemark sysDtuRemark)
+ {
+ return toAjax(sysDtuRemarkService.updateSysDtuRemark(sysDtuRemark));
+ }
+
+ /**
+ * 删除dtu设备备注
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:remove')")
+ @Log(title = "dtu设备备注", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(sysDtuRemarkService.deleteSysDtuRemarkByIds(ids));
+ }
+
+
+ /**
+ * 获取dtu设备备注详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('assets:remark:query')")
+ @GetMapping(value = "/getDtuByImei")
+ public AjaxResult getDtuByImei(@RequestParam("imei") String imei)
+ {
+ SysDtuRemark sysDtuRemark = sysDtuRemarkService.lambdaQuery().eq(SysDtuRemark::getImei, imei).one();
+ return success(sysDtuRemark);
+ }
+
+
+
+}
diff --git a/agri-system/src/main/java/com/agri/system/domain/SysDtuRemark.java b/agri-system/src/main/java/com/agri/system/domain/SysDtuRemark.java
new file mode 100644
index 0000000..e4ab42b
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/domain/SysDtuRemark.java
@@ -0,0 +1,332 @@
+package com.agri.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+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;
+
+/**
+ * dtu设备备注对象 sys_dtu_remark
+ *
+ * @author lld
+ * @date 2026-01-21
+ */
+@TableName("sys_dtu_remark")
+public class SysDtuRemark extends BaseEntity
+{
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ private Long id;
+
+ /** 设备唯一标识(IMEI/DeviceId) */
+ @Excel(name = "设备唯一标识(IMEI/DeviceId)")
+ private String imei;
+
+ /** 卷被开 */
+ @Excel(name = "卷被开")
+ private String jbk;
+
+ /** 卷被关 */
+ @Excel(name = "卷被关")
+ private String jbg;
+
+ /** 卷膜1开 */
+ @Excel(name = "卷膜1开")
+ private String jm1k;
+
+ /** 卷膜1关 */
+ @Excel(name = "卷膜1关")
+ private String jm1g;
+
+ /** 卷膜2开 */
+ @Excel(name = "卷膜2开")
+ private String jm2k;
+
+ /** 卷膜2关 */
+ @Excel(name = "卷膜2关")
+ private String jm2g;
+
+ /** 卷膜3开 */
+ @Excel(name = "卷膜3开")
+ private String jm3k;
+
+ /** 卷膜3关 */
+ @Excel(name = "卷膜3关")
+ private String jm3g;
+
+ /** 温度1(℃) */
+ @Excel(name = "温度1(℃)")
+ private String temp1;
+
+ /** 湿度1(%RH) */
+ @Excel(name = "湿度1(%RH)")
+ private String humi1;
+
+ /** 温度2(℃) */
+ @Excel(name = "温度2(℃)")
+ private String temp2;
+
+ /** 湿度2(%RH) */
+ @Excel(name = "湿度2(%RH)")
+ private String humi2;
+
+ /** 温度3(℃) */
+ @Excel(name = "温度3(℃)")
+ private String temp3;
+
+ /** 湿度3(%RH) */
+ @Excel(name = "湿度3(%RH)")
+ private String humi3;
+
+ /** 温度4(℃) */
+ @Excel(name = "温度4(℃)")
+ private String temp4;
+
+ /** 湿度4(%RH) */
+ @Excel(name = "湿度4(%RH)")
+ private String humi4;
+
+ /** 数据版本号(乐观锁) */
+ @Excel(name = "数据版本号", readConverterExp = "乐=观锁")
+ @Version
+ private String version;
+
+ /** 扩展备注(JSON格式,存储临时/自定义配置) */
+ private String extJson;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setImei(String imei)
+ {
+ this.imei = imei;
+ }
+
+ public String getImei()
+ {
+ return imei;
+ }
+
+ public void setJbk(String jbk)
+ {
+ this.jbk = jbk;
+ }
+
+ public String getJbk()
+ {
+ return jbk;
+ }
+
+ public void setJbg(String jbg)
+ {
+ this.jbg = jbg;
+ }
+
+ public String getJbg()
+ {
+ return jbg;
+ }
+
+ public void setJm1k(String jm1k)
+ {
+ this.jm1k = jm1k;
+ }
+
+ public String getJm1k()
+ {
+ return jm1k;
+ }
+
+ public void setJm1g(String jm1g)
+ {
+ this.jm1g = jm1g;
+ }
+
+ public String getJm1g()
+ {
+ return jm1g;
+ }
+
+ public void setJm2k(String jm2k)
+ {
+ this.jm2k = jm2k;
+ }
+
+ public String getJm2k()
+ {
+ return jm2k;
+ }
+
+ public void setJm2g(String jm2g)
+ {
+ this.jm2g = jm2g;
+ }
+
+ public String getJm2g()
+ {
+ return jm2g;
+ }
+
+ public void setJm3k(String jm3k)
+ {
+ this.jm3k = jm3k;
+ }
+
+ public String getJm3k()
+ {
+ return jm3k;
+ }
+
+ public void setJm3g(String jm3g)
+ {
+ this.jm3g = jm3g;
+ }
+
+ public String getJm3g()
+ {
+ return jm3g;
+ }
+
+ public void setTemp1(String temp1)
+ {
+ this.temp1 = temp1;
+ }
+
+ public String getTemp1()
+ {
+ return temp1;
+ }
+
+ public void setHumi1(String humi1)
+ {
+ this.humi1 = humi1;
+ }
+
+ public String getHumi1()
+ {
+ return humi1;
+ }
+
+ public void setTemp2(String temp2)
+ {
+ this.temp2 = temp2;
+ }
+
+ public String getTemp2()
+ {
+ return temp2;
+ }
+
+ public void setHumi2(String humi2)
+ {
+ this.humi2 = humi2;
+ }
+
+ public String getHumi2()
+ {
+ return humi2;
+ }
+
+ public void setTemp3(String temp3)
+ {
+ this.temp3 = temp3;
+ }
+
+ public String getTemp3()
+ {
+ return temp3;
+ }
+
+ public void setHumi3(String humi3)
+ {
+ this.humi3 = humi3;
+ }
+
+ public String getHumi3()
+ {
+ return humi3;
+ }
+
+ public void setTemp4(String temp4)
+ {
+ this.temp4 = temp4;
+ }
+
+ public String getTemp4()
+ {
+ return temp4;
+ }
+
+ public void setHumi4(String humi4)
+ {
+ this.humi4 = humi4;
+ }
+
+ public String getHumi4()
+ {
+ return humi4;
+ }
+
+ public void setVersion(String version)
+ {
+ this.version = version;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setExtJson(String extJson)
+ {
+ this.extJson = extJson;
+ }
+
+ public String getExtJson()
+ {
+ return extJson;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("imei", getImei())
+ .append("jbk", getJbk())
+ .append("jbg", getJbg())
+ .append("jm1k", getJm1k())
+ .append("jm1g", getJm1g())
+ .append("jm2k", getJm2k())
+ .append("jm2g", getJm2g())
+ .append("jm3k", getJm3k())
+ .append("jm3g", getJm3g())
+ .append("temp1", getTemp1())
+ .append("humi1", getHumi1())
+ .append("temp2", getTemp2())
+ .append("humi2", getHumi2())
+ .append("temp3", getTemp3())
+ .append("humi3", getHumi3())
+ .append("temp4", getTemp4())
+ .append("humi4", getHumi4())
+ .append("version", getVersion())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("extJson", getExtJson())
+ .toString();
+ }
+}
diff --git a/agri-system/src/main/java/com/agri/system/domain/vo/DtuSettingVo.java b/agri-system/src/main/java/com/agri/system/domain/vo/DtuSettingVo.java
new file mode 100644
index 0000000..fd17f47
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/domain/vo/DtuSettingVo.java
@@ -0,0 +1,65 @@
+package com.agri.system.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.Version;
+import lombok.Data;
+
+@Data
+public class DtuSettingVo {
+
+ /** 设备唯一标识(IMEI/DeviceId) */
+ private String imei;
+
+ /** 卷被开 */
+ private String jbk;
+
+ /** 卷被关 */
+ private String jbg;
+
+ /** 卷膜1开 */
+ private String jm1k;
+
+ /** 卷膜1关 */
+ private String jm1g;
+
+ /** 卷膜2开 */
+ private String jm2k;
+
+ /** 卷膜2关 */
+ private String jm2g;
+
+ /** 卷膜3开 */
+ private String jm3k;
+
+ /** 卷膜3关 */
+ private String jm3g;
+
+ /** 温度1(℃) */
+ private String temp1;
+
+ /** 湿度1(%RH) */
+ private String humi1;
+
+ /** 温度2(℃) */
+ private String temp2;
+
+ /** 湿度2(%RH) */
+ private String humi2;
+
+ /** 温度3(℃) */
+ private String temp3;
+
+ /** 湿度3(%RH) */
+ private String humi3;
+
+ /** 温度4(℃) */
+ private String temp4;
+
+ /** 湿度4(%RH) */
+ private String humi4;
+
+ /** 数据版本号(乐观锁) */
+ private String version;
+
+ /** 扩展备注(JSON格式,存储临时/自定义配置) */
+ private String extJson;
+}
diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysDtuRemarkMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysDtuRemarkMapper.java
new file mode 100644
index 0000000..1f8a3f0
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/mapper/SysDtuRemarkMapper.java
@@ -0,0 +1,62 @@
+package com.agri.system.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.agri.system.domain.SysDtuRemark;
+
+/**
+ * dtu设备备注Mapper接口
+ *
+ * @author lld
+ * @date 2026-01-21
+ */
+public interface SysDtuRemarkMapper extends BaseMapper
+{
+ /**
+ * 查询dtu设备备注
+ *
+ * @param id dtu设备备注主键
+ * @return dtu设备备注
+ */
+ public SysDtuRemark selectSysDtuRemarkById(Long id);
+
+ /**
+ * 查询dtu设备备注列表
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return dtu设备备注集合
+ */
+ public List selectSysDtuRemarkList(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 新增dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ public int insertSysDtuRemark(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 修改dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ public int updateSysDtuRemark(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 删除dtu设备备注
+ *
+ * @param id dtu设备备注主键
+ * @return 结果
+ */
+ public int deleteSysDtuRemarkById(Long id);
+
+ /**
+ * 批量删除dtu设备备注
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteSysDtuRemarkByIds(Long[] ids);
+}
diff --git a/agri-system/src/main/java/com/agri/system/service/ISysDtuRemarkService.java b/agri-system/src/main/java/com/agri/system/service/ISysDtuRemarkService.java
new file mode 100644
index 0000000..9bab892
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/service/ISysDtuRemarkService.java
@@ -0,0 +1,61 @@
+package com.agri.system.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.agri.system.domain.SysDtuRemark;
+
+/**
+ * dtu设备备注Service接口
+ *
+ * @author lld
+ * @date 2026-01-21
+ */
+public interface ISysDtuRemarkService extends IService {
+ /**
+ * 查询dtu设备备注
+ *
+ * @param id dtu设备备注主键
+ * @return dtu设备备注
+ */
+ public SysDtuRemark selectSysDtuRemarkById(Long id);
+
+ /**
+ * 查询dtu设备备注列表
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return dtu设备备注集合
+ */
+ public List selectSysDtuRemarkList(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 新增dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ public int insertSysDtuRemark(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 修改dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ public int updateSysDtuRemark(SysDtuRemark sysDtuRemark);
+
+ /**
+ * 批量删除dtu设备备注
+ *
+ * @param ids 需要删除的dtu设备备注主键集合
+ * @return 结果
+ */
+ public int deleteSysDtuRemarkByIds(Long[] ids);
+
+ /**
+ * 删除dtu设备备注信息
+ *
+ * @param id dtu设备备注主键
+ * @return 结果
+ */
+ public int deleteSysDtuRemarkById(Long id);
+}
diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysDtuRemarkServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuRemarkServiceImpl.java
new file mode 100644
index 0000000..84e7fff
--- /dev/null
+++ b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuRemarkServiceImpl.java
@@ -0,0 +1,94 @@
+package com.agri.system.service.impl;
+
+import java.util.List;
+import com.agri.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.agri.system.mapper.SysDtuRemarkMapper;
+import com.agri.system.domain.SysDtuRemark;
+import com.agri.system.service.ISysDtuRemarkService;
+
+/**
+ * dtu设备备注Service业务层处理
+ *
+ * @author lld
+ * @date 2026-01-21
+ */
+@Service
+public class SysDtuRemarkServiceImpl extends ServiceImpl implements ISysDtuRemarkService
+{
+
+ /**
+ * 查询dtu设备备注
+ *
+ * @param id dtu设备备注主键
+ * @return dtu设备备注
+ */
+ @Override
+ public SysDtuRemark selectSysDtuRemarkById(Long id)
+ {
+ return baseMapper.selectSysDtuRemarkById(id);
+ }
+
+ /**
+ * 查询dtu设备备注列表
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return dtu设备备注
+ */
+ @Override
+ public List selectSysDtuRemarkList(SysDtuRemark sysDtuRemark)
+ {
+ return baseMapper.selectSysDtuRemarkList(sysDtuRemark);
+ }
+
+ /**
+ * 新增dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ @Override
+ public int insertSysDtuRemark(SysDtuRemark sysDtuRemark)
+ {
+ sysDtuRemark.setCreateTime(DateUtils.getNowDate());
+ return baseMapper.insertSysDtuRemark(sysDtuRemark);
+ }
+
+ /**
+ * 修改dtu设备备注
+ *
+ * @param sysDtuRemark dtu设备备注
+ * @return 结果
+ */
+ @Override
+ public int updateSysDtuRemark(SysDtuRemark sysDtuRemark)
+ {
+ sysDtuRemark.setUpdateTime(DateUtils.getNowDate());
+ return baseMapper.updateSysDtuRemark(sysDtuRemark);
+ }
+
+ /**
+ * 批量删除dtu设备备注
+ *
+ * @param ids 需要删除的dtu设备备注主键
+ * @return 结果
+ */
+ @Override
+ public int deleteSysDtuRemarkByIds(Long[] ids)
+ {
+ return baseMapper.deleteSysDtuRemarkByIds(ids);
+ }
+
+ /**
+ * 删除dtu设备备注信息
+ *
+ * @param id dtu设备备注主键
+ * @return 结果
+ */
+ @Override
+ public int deleteSysDtuRemarkById(Long id)
+ {
+ return baseMapper.deleteSysDtuRemarkById(id);
+ }
+}
diff --git a/agri-system/src/main/resources/mapper/system/SysDtuRemarkMapper.xml b/agri-system/src/main/resources/mapper/system/SysDtuRemarkMapper.xml
new file mode 100644
index 0000000..0aeff3e
--- /dev/null
+++ b/agri-system/src/main/resources/mapper/system/SysDtuRemarkMapper.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file