Преглед на файлове

BUG的修改和农机设备管理

zmj преди 10 месеца
родител
ревизия
3a4bd97fc9
променени са 78 файла, в които са добавени 3779 реда и са изтрити 579 реда
  1. 83 0
      ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/AlertRecord.java
  2. 3 0
      ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/WeatherDataStatistics.java
  3. 6 1
      ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/WeatherRealtimeData.java
  4. 15 1
      ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
  5. 8 1
      ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
  6. 2 2
      ruoyi-auth/src/main/resources/bootstrap.yml
  7. 4 3
      ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java
  8. 1 1
      ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java
  9. 1 1
      ruoyi-gateway/src/main/resources/bootstrap.yml
  10. 2 1
      ruoyi-modules/ruoyi-base/pom.xml
  11. 107 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/AgriculturalMachinesController.java
  12. 105 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/AlertRecordController.java
  13. 6 6
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/DeviceController.java
  14. 20 14
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/FieldController.java
  15. 108 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/MachineAlarmRecordsController.java
  16. 161 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/MachineWorkRecordsController.java
  17. 22 2
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/SensorRealtimeDataController.java
  18. 22 1
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/WeatherRealtimeDataController.java
  19. 129 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/AgriculturalMachines.java
  20. 58 28
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/AlertRecord.java
  21. 15 18
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/Device.java
  22. 32 27
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/Field.java
  23. 0 74
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/FieldDevice.java
  24. 4 109
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/FieldPersonnel.java
  25. 102 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/MachineAlarmRecords.java
  26. 118 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/MachineWorkRecords.java
  27. 32 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/SensorDataStatistics.java
  28. 6 5
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/SensorRealtimeData.java
  29. 20 6
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/WeatherDataStatistics.java
  30. 3 3
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/WeatherRealtimeData.java
  31. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/AgriculturalMachinesMapper.java
  32. 53 3
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/AlertRecordMapper.java
  33. 17 8
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/FieldMapper.java
  34. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/MachineAlarmRecordsMapper.java
  35. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/MachineWorkRecordsMapper.java
  36. 16 8
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/SensorRealtimeDataMapper.java
  37. 17 8
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/WeatherRealtimeDataMapper.java
  38. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IAgriculturalMachinesService.java
  39. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IAlertRecordService.java
  40. 17 8
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IFieldService.java
  41. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IMachineAlarmRecordsService.java
  42. 61 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IMachineWorkRecordsService.java
  43. 24 9
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/ISensorRealtimeDataService.java
  44. 15 1
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IWeatherRealtimeDataService.java
  45. 98 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/AgriculturalMachinesServiceImpl.java
  46. 102 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/AlertRecordServiceImpl.java
  47. 9 7
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/DeviceServiceImpl.java
  48. 18 7
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/FieldServiceImpl.java
  49. 97 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/MachineAlarmRecordsServiceImpl.java
  50. 96 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/MachineWorkRecordsServiceImpl.java
  51. 130 24
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/SensorRealtimeDataServiceImpl.java
  52. 471 22
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/WeatherRealtimeDataServiceImpl.java
  53. 26 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/MachineNameFieldUserVo.java
  54. 31 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/SensorDataStatisticsVo.java
  55. 34 0
      ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/WeatherDataStatisticsVo.java
  56. 1 1
      ruoyi-modules/ruoyi-base/src/main/resources/bootstrap.yml
  57. 180 0
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/AgriculturalMachinesMapper.xml
  58. 118 6
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/AlertRecordMapper.xml
  59. 8 5
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/DeviceMapper.xml
  60. 27 9
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/FieldMapper.xml
  61. 140 0
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/MachineAlarmRecordsMapper.xml
  62. 146 0
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/MachineWorkRecordsMapper.xml
  63. 31 5
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/SensorRealtimeDataMapper.xml
  64. 49 5
      ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/WeatherRealtimeDataMapper.xml
  65. 2 1
      ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
  66. 1 1
      ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
  67. 6 3
      ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/DeviceStatisticsData.java
  68. 1 1
      ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
  69. 14 14
      ruoyi-modules/ruoyi-system/pom.xml
  70. 20 3
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
  71. 15 13
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  72. 34 23
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  73. 17 17
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
  74. 40 35
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  75. 1 1
      ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
  76. 6 6
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
  77. 28 20
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  78. 1 1
      ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml

+ 83 - 0
ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/AlertRecord.java

@@ -0,0 +1,83 @@
+package com.ruoyi.base.api.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 告警记录对象 alert_record
+ *
+ * @author ruoyi
+ */
+@Data
+public class AlertRecord extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 告警ID */
+    private Long alertId;
+
+    /** 设备编号 */
+    @Excel(name = "设备编号")
+    private String deviceId;
+
+    /** 设备名称 */
+    @Excel(name = "设备名称")
+    private String deviceName;
+
+    /** 设备类型 */
+    @Excel(name = "设备类型")
+    private String deviceType;
+
+    /** 告警级别(1:提示,2:警告,3:紧急) */
+    @Excel(name = "告警级别", readConverterExp = "1=提示,2=警告,3=紧急")
+    private Integer alertLevel;
+
+    /** 告警参数名称 */
+    @Excel(name = "告警参数名称")
+    private String parameterName;
+
+    /** 告警时参数值 */
+    @Excel(name = "告警时参数值")
+    private String parameterValue;
+
+    /** 参数单位 */
+    @Excel(name = "参数单位")
+    private String parameterUnit;
+
+    /** 阈值 */
+    @Excel(name = "阈值")
+    private String thresholdValue;
+
+    /** 告警内容 */
+    @Excel(name = "告警内容")
+    private String alertContent;
+
+    /** 告警时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "告警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date alertTime;
+
+    /** 处理状态(0:未处理,1:已确认,2:已处理,3:已忽略) */
+    @Excel(name = "处理状态", readConverterExp = "0=未处理,1=已确认,2=已处理,3=已忽略")
+    private Integer processStatus;
+
+    /** 处理时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date processTime;
+
+    /** 处理人 */
+    @Excel(name = "处理人")
+    private String processor;
+
+    /** 处理说明 */
+    @Excel(name = "处理说明")
+    private String processComment;
+
+    /** 所属农场ID */
+    @Excel(name = "所属农场ID")
+    private String farmId;
+}

+ 3 - 0
ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/WeatherDataStatistics.java

@@ -78,4 +78,7 @@ public class WeatherDataStatistics extends BaseEntity {
     /** 累积降雨量 */
     @Excel(name = "累积降雨量")
     private BigDecimal dateRainfallA;
+    // 平均气温
+    private BigDecimal avgTemperature;
+
 }

+ 6 - 1
ruoyi-api/ruoyi-api-base/src/main/java/com/ruoyi/base/api/domain/WeatherRealtimeData.java

@@ -12,10 +12,11 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 气象站实时数据对象 weather_realtime_data
- * 
+ *
  * @author ruoyi
  * @date 2025-06-18
  */
@@ -96,5 +97,9 @@ public class WeatherRealtimeData extends BaseEntity
     private LocalDateTime endWeatherTime;
 
 
+    /*告警列表*/
+    private List<AlertRecord> alertRecordList;
+
+
 
 }

+ 15 - 1
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java

@@ -14,9 +14,11 @@ import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.factory.RemoteUserFallbackFactory;
 import com.ruoyi.system.api.model.LoginUser;
 
+import java.util.List;
+
 /**
  * 用户服务
- * 
+ *
  * @author ruoyi
  */
 @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)
@@ -61,4 +63,16 @@ public interface RemoteUserService
      */
     @GetMapping("/user/infoWeb/{phoneNumber}")
     R<LoginUser> getUserByPhoneNumber(@PathVariable("phoneNumber") String phoneNumber, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+
+
+    /**
+     * 通过部门id查询岗位为农机驾驶员用户信息
+     *
+     * @param farmId 部门id
+     * @param source 请求来源
+     * @return 结果
+     */
+    @GetMapping("/user/infoPost/{farmId}")
+    R<List<SysUser>> getUserByFarmId(@PathVariable("farmId") Long farmId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }

+ 8 - 1
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java

@@ -9,9 +9,11 @@ import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.model.LoginUser;
 
+import java.util.List;
+
 /**
  * 用户服务降级处理
- * 
+ *
  * @author ruoyi
  */
 @Component
@@ -47,6 +49,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
             public R<LoginUser> getUserByPhoneNumber(String phoneNumber, String source) {
                 return R.fail("获取用户失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<List<SysUser>> getUserByFarmId(Long farmId, String source) {
+                return R.fail("获取用户失败:" + throwable.getMessage());
+            }
         };
     }
 }

+ 2 - 2
ruoyi-auth/src/main/resources/bootstrap.yml

@@ -1,9 +1,9 @@
 # Tomcat
-server: 
+server:
   port: 9200
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-auth

+ 4 - 3
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java

@@ -21,13 +21,14 @@ import com.ruoyi.common.core.web.page.TableSupport;
 
 /**
  * web层通用数据处理
- * 
+ *
  * @author ruoyi
  */
 public class BaseController
 {
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+
     /**
      * 将前台传递过来的日期格式的字符串,自动转化为Date类型
      */
@@ -138,7 +139,7 @@ public class BaseController
 
     /**
      * 响应返回结果
-     * 
+     *
      * @param rows 影响行数
      * @return 操作结果
      */
@@ -149,7 +150,7 @@ public class BaseController
 
     /**
      * 响应返回结果
-     * 
+     *
      * @param result 结果
      * @return 操作结果
      */

+ 1 - 1
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java

@@ -13,7 +13,7 @@ public class CorsConfig {
     /*@Bean
     public CorsWebFilter corsWebFilter() {
         CorsConfiguration config = new CorsConfiguration();
-        config.addAllowedOriginPattern("http://localhost:9000");
+        config.addAllowedOrigin("http://localhost:9000"); // 只允许H5访问
         config.addAllowedHeader("*");
         config.addAllowedMethod("*");
         config.setAllowCredentials(true); // 允许带上cookie

+ 1 - 1
ruoyi-gateway/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 8080
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-gateway

+ 2 - 1
ruoyi-modules/ruoyi-base/pom.xml

@@ -98,6 +98,7 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
+
                 <executions>
                     <execution>
                         <goals>
@@ -108,4 +109,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>

+ 107 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/AgriculturalMachinesController.java

@@ -0,0 +1,107 @@
+package com.ruoyi.base.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.security.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.base.domain.AgriculturalMachines;
+import com.ruoyi.base.service.IAgriculturalMachinesService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 农机管理列表Controller
+ *
+ * @author zmj
+ * @date 2025-07-01
+ */
+@RestController
+@RequestMapping("/machines")
+public class AgriculturalMachinesController extends BaseController
+{
+    @Autowired
+    private IAgriculturalMachinesService agriculturalMachinesService;
+
+    /**
+     * 查询农机管理列表列表
+     */
+    @RequiresPermissions("base:machines:list")
+    @GetMapping("/list")
+    public TableDataInfo list(AgriculturalMachines agriculturalMachines)
+    {
+        startPage();
+        List<AgriculturalMachines> list = agriculturalMachinesService.selectAgriculturalMachinesList(agriculturalMachines);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出农机管理列表列表
+     */
+    @RequiresPermissions("base:machines:export")
+    @Log(title = "农机管理列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AgriculturalMachines agriculturalMachines)
+    {
+        List<AgriculturalMachines> list = agriculturalMachinesService.selectAgriculturalMachinesList(agriculturalMachines);
+        ExcelUtil<AgriculturalMachines> util = new ExcelUtil<AgriculturalMachines>(AgriculturalMachines.class);
+        util.exportExcel(response, list, "农机管理列表数据");
+    }
+
+    /**
+     * 获取农机管理列表详细信息
+     */
+    @RequiresPermissions("base:machines:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(agriculturalMachinesService.selectAgriculturalMachinesById(id));
+    }
+
+    /**
+     * 新增农机管理列表
+     */
+    @RequiresPermissions("base:machines:add")
+    @Log(title = "农机管理列表", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AgriculturalMachines agriculturalMachines)
+    {
+        return toAjax(agriculturalMachinesService.insertAgriculturalMachines(agriculturalMachines));
+    }
+
+    /**
+     * 修改农机管理列表
+     */
+    @RequiresPermissions("base:machines:edit")
+    @Log(title = "农机管理列表", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AgriculturalMachines agriculturalMachines)
+    {
+        return toAjax(agriculturalMachinesService.updateAgriculturalMachines(agriculturalMachines));
+    }
+
+    /**
+     * 删除农机管理列表
+     */
+    @RequiresPermissions("base:machines:remove")
+    @Log(title = "农机管理列表", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(agriculturalMachinesService.deleteAgriculturalMachinesByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/AlertRecordController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.base.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.base.domain.AlertRecord;
+import com.ruoyi.base.service.IAlertRecordService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 告警记录Controller
+ *
+ * @author zmj
+ * @date 2025-06-27
+ */
+@RestController
+@RequestMapping("/record")
+public class AlertRecordController extends BaseController
+{
+    @Autowired
+    private IAlertRecordService alertRecordService;
+
+    /**
+     * 查询告警记录列表
+     */
+    @RequiresPermissions("base:record:list")
+    @GetMapping("/list")
+    public TableDataInfo list(AlertRecord alertRecord)
+    {
+        startPage();
+        List<AlertRecord> list = alertRecordService.selectAlertRecordList(alertRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出告警记录列表
+     */
+    @RequiresPermissions("base:record:export")
+    @Log(title = "告警记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlertRecord alertRecord)
+    {
+        List<AlertRecord> list = alertRecordService.selectAlertRecordList(alertRecord);
+        ExcelUtil<AlertRecord> util = new ExcelUtil<AlertRecord>(AlertRecord.class);
+        util.exportExcel(response, list, "告警记录数据");
+    }
+
+    /**
+     * 获取告警记录详细信息
+     */
+    @RequiresPermissions("base:record:query")
+    @GetMapping(value = "/{alertId}")
+    public AjaxResult getInfo(@PathVariable("alertId") Long alertId)
+    {
+        return success(alertRecordService.selectAlertRecordByAlertId(alertId));
+    }
+
+    /**
+     * 新增告警记录
+     */
+    @RequiresPermissions("base:record:add")
+    @Log(title = "告警记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AlertRecord alertRecord)
+    {
+        return toAjax(alertRecordService.insertAlertRecord(alertRecord));
+    }
+
+    /**
+     * 修改告警记录
+     */
+    @RequiresPermissions("base:record:edit")
+    @Log(title = "告警记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AlertRecord alertRecord)
+    {
+        return toAjax(alertRecordService.updateAlertRecord(alertRecord));
+    }
+
+    /**
+     * 删除告警记录
+     */
+    @RequiresPermissions("base:record:remove")
+    @Log(title = "告警记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{alertIds}")
+    public AjaxResult remove(@PathVariable Long[] alertIds)
+    {
+        return toAjax(alertRecordService.deleteAlertRecordByAlertIds(alertIds));
+    }
+}

+ 6 - 6
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/DeviceController.java

@@ -25,7 +25,7 @@ import java.util.List;
 
 /**
  * 设备Controller
- * 
+ *
  * @author zmj
  * @date 2025-05-29
  */
@@ -54,7 +54,7 @@ public class DeviceController extends BaseController
     /**
      * 导出设备列表
      */
-    @RequiresPermissions("system:device:export")
+    @RequiresPermissions("base:device:export")
     @Log(title = "设备", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, Device device)
@@ -67,7 +67,7 @@ public class DeviceController extends BaseController
     /**
      * 获取设备详细信息
      */
-    @RequiresPermissions("system:device:query")
+    @RequiresPermissions("base:device:query")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id)
     {
@@ -81,7 +81,7 @@ public class DeviceController extends BaseController
     /**
      * 新增设备
      */
-    @RequiresPermissions("system:device:add")
+    @RequiresPermissions("base:device:add")
     @Log(title = "设备", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody Device device)
@@ -92,7 +92,7 @@ public class DeviceController extends BaseController
     /**
      * 修改设备
      */
-    @RequiresPermissions("system:device:edit")
+    @RequiresPermissions("base:device:edit")
     @Log(title = "设备", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody Device device)
@@ -103,7 +103,7 @@ public class DeviceController extends BaseController
     /**
      * 删除设备
      */
-    @RequiresPermissions("system:device:remove")
+    @RequiresPermissions("base:device:remove")
     @Log(title = "设备", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids)

+ 20 - 14
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/FieldController.java

@@ -14,6 +14,7 @@ import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.RemoteUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -22,7 +23,7 @@ import java.util.List;
 
 /**
  * 地块信息Controller
- * 
+ *
  * @author ruoyi
  * @date 2025-05-20
  */
@@ -33,10 +34,13 @@ public class FieldController extends BaseController
     @Autowired
     private IFieldService fieldService;
 
+    @Autowired
+    private RemoteUserService remoteUserService;
+
     /**
      * 查询地块信息列表
      */
-    @RequiresPermissions("system:field:list")
+    @RequiresPermissions("base:field:list")
     @GetMapping("/list")
     public TableDataInfo list(Field field)
     {
@@ -46,20 +50,22 @@ public class FieldController extends BaseController
     }
 
     /**
-     * 查询车辆供应商名称列表
+     * 查询地块名称列表
      */
     /*@RequiresPermissions(value = {"base:supplier:list","base:contract:list","base:mounted:list"},logical = Logical.OR)*/
+    @RequiresPermissions("base:field:list")
     @GetMapping("/listName")
-    public List<Field> listName(Field field)
-    {
-        List<Field> list = fieldService.selectFieldList(field);
-        return list;
+    public List<Field> listName(Field field) {
+        return fieldService.selectFieldListName(field);
     }
 
+
+
+
     /**
      * 导出地块信息列表
      */
-    @RequiresPermissions("system:field:export")
+    @RequiresPermissions("base:field:export")
     @Log(title = "地块信息", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, Field field)
@@ -72,7 +78,7 @@ public class FieldController extends BaseController
     /**
      * 获取地块信息详细信息
      */
-    @RequiresPermissions("system:field:query")
+    @RequiresPermissions("base:field:query")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id)
     {
@@ -83,7 +89,7 @@ public class FieldController extends BaseController
     /**
      * 获取地块设备详细信息绑定
      */
-    //@RequiresPermissions("system:field:query")
+    //@RequiresPermissions("base:field:query")
     @GetMapping(value = "/device/{id}")
     public AjaxResult getDeviceInfo(@PathVariable("id") Long id)
     {
@@ -94,7 +100,7 @@ public class FieldController extends BaseController
     /**
      * 获取地块设备详细信息未绑定
      */
-    //@RequiresPermissions("system:field:query")
+    //@RequiresPermissions("base:field:query")
     @GetMapping(value = "/unDevice/{id}")
     public AjaxResult getUnDeviceInfo(@PathVariable("id") Long id)
     {
@@ -124,7 +130,7 @@ public class FieldController extends BaseController
     /**
      * 新增地块信息
      */
-    @RequiresPermissions("system:field:add")
+    @RequiresPermissions("base:field:add")
     @Log(title = "地块信息", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody Field field)
@@ -136,7 +142,7 @@ public class FieldController extends BaseController
     /**
      * 修改地块信息
      */
-    @RequiresPermissions("system:field:edit")
+    @RequiresPermissions("base:field:edit")
     @Log(title = "地块信息", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody Field field)
@@ -147,7 +153,7 @@ public class FieldController extends BaseController
     /**
      * 删除地块信息
      */
-    @RequiresPermissions("system:field:remove")
+    @RequiresPermissions("base:field:remove")
     @Log(title = "地块信息", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids)

+ 108 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/MachineAlarmRecordsController.java

@@ -0,0 +1,108 @@
+package com.ruoyi.base.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.security.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.base.domain.MachineAlarmRecords;
+import com.ruoyi.base.service.IMachineAlarmRecordsService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 农机故障告警记录Controller
+ *
+ * @author zmj
+ * @date 2025-07-24
+ */
+@RestController
+@RequestMapping("/machineAlarmRecords")
+public class MachineAlarmRecordsController extends BaseController
+{
+    @Autowired
+    private IMachineAlarmRecordsService machineAlarmRecordsService;
+
+    /**
+     * 查询农机故障告警记录列表
+     */
+    @RequiresPermissions("base:machineAlarmRecords:list")
+    @GetMapping("/list")
+    public TableDataInfo list(MachineAlarmRecords machineAlarmRecords)
+    {
+        startPage();
+        List<MachineAlarmRecords> list = machineAlarmRecordsService.selectMachineAlarmRecordsList(machineAlarmRecords);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出农机故障告警记录列表
+     */
+    @RequiresPermissions("base:machineAlarmRecords:export")
+    @Log(title = "农机故障告警记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MachineAlarmRecords machineAlarmRecords)
+    {
+        List<MachineAlarmRecords> list = machineAlarmRecordsService.selectMachineAlarmRecordsList(machineAlarmRecords);
+        ExcelUtil<MachineAlarmRecords> util = new ExcelUtil<MachineAlarmRecords>(MachineAlarmRecords.class);
+        util.exportExcel(response, list, "农机故障告警记录数据");
+    }
+
+    /**
+     * 获取农机故障告警记录详细信息
+     */
+    @RequiresPermissions("base:machineAlarmRecords:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(machineAlarmRecordsService.selectMachineAlarmRecordsById(id));
+    }
+
+    /**
+     * 新增农机故障告警记录
+     */
+    @RequiresPermissions("base:machineAlarmRecords:add")
+    @Log(title = "农机故障告警记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MachineAlarmRecords machineAlarmRecords)
+    {
+        return toAjax(machineAlarmRecordsService.insertMachineAlarmRecords(machineAlarmRecords));
+    }
+
+    /**
+     * 修改农机故障告警记录
+     */
+    @RequiresPermissions("base:machineAlarmRecords:edit")
+    @Log(title = "农机故障告警记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody MachineAlarmRecords machineAlarmRecords)
+    {
+        machineAlarmRecords.setHandlerName(SecurityUtils.getUsername());
+        return toAjax(machineAlarmRecordsService.updateMachineAlarmRecords(machineAlarmRecords));
+    }
+
+    /**
+     * 删除农机故障告警记录
+     */
+    @RequiresPermissions("base:machineAlarmRecords:remove")
+    @Log(title = "农机故障告警记录", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(machineAlarmRecordsService.deleteMachineAlarmRecordsByIds(ids));
+    }
+}

+ 161 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/MachineWorkRecordsController.java

@@ -0,0 +1,161 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.base.domain.AgriculturalMachines;
+import com.ruoyi.base.domain.Field;
+import com.ruoyi.base.service.IAgriculturalMachinesService;
+import com.ruoyi.base.service.IFieldService;
+import com.ruoyi.base.vo.MachineNameFieldUserVo;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.system.api.RemoteUserService;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.base.domain.MachineWorkRecords;
+import com.ruoyi.base.service.IMachineWorkRecordsService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 农机作业记录Controller
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+@RestController
+@RequestMapping("/machineWorkRecords")
+public class MachineWorkRecordsController extends BaseController
+{
+    @Autowired
+    private IMachineWorkRecordsService machineWorkRecordsService;
+
+    @Autowired
+    private IAgriculturalMachinesService agriculturalMachinesService;
+
+
+    @Autowired
+    private IFieldService fieldService;
+
+
+    @Autowired
+    private RemoteUserService remoteUserService;
+
+    /**
+     * 查询农机作业记录列表
+     */
+    @RequiresPermissions("base:machineWorkRecords:list")
+    @GetMapping("/list")
+    public TableDataInfo list(MachineWorkRecords machineWorkRecords)
+    {
+        startPage();
+        List<MachineWorkRecords> list = machineWorkRecordsService.selectMachineWorkRecordsList(machineWorkRecords);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出农机作业记录列表
+     */
+    @RequiresPermissions("base:machineWorkRecords:export")
+    @Log(title = "农机作业记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MachineWorkRecords machineWorkRecords)
+    {
+        List<MachineWorkRecords> list = machineWorkRecordsService.selectMachineWorkRecordsList(machineWorkRecords);
+        ExcelUtil<MachineWorkRecords> util = new ExcelUtil<MachineWorkRecords>(MachineWorkRecords.class);
+        util.exportExcel(response, list, "农机作业记录数据");
+    }
+
+    /**
+     * 获取农机作业记录详细信息
+     */
+    @RequiresPermissions("base:machineWorkRecords:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(machineWorkRecordsService.selectMachineWorkRecordsById(id));
+    }
+
+
+    /**
+     * 获取农机作业记录详细信息
+     */
+    @GetMapping(value = "/MachineNameFieldUser/{farmId}")
+    public AjaxResult queryMachineNameFieldUser(@PathVariable("farmId") Long farmId)
+    {
+        MachineNameFieldUserVo machineNameFieldUserVo = new MachineNameFieldUserVo();
+        List<String> deptIds = new ArrayList<>();
+        deptIds.add(farmId.toString());
+        AgriculturalMachines agriculturalMachines = new AgriculturalMachines();
+        agriculturalMachines.setDeptIdList(deptIds);
+        Field field = new Field();
+        field.setDeptIdList(deptIds);
+        R<List<SysUser>> userResult = remoteUserService.getUserByFarmId(farmId, SecurityConstants.INNER);
+
+        if (R.FAIL == userResult.getCode())
+        {
+            throw new ServiceException(userResult.getMsg());
+        }
+        List<SysUser> users = userResult.getData();
+
+        List<AgriculturalMachines> machinesList = agriculturalMachinesService.selectAgriculturalMachinesList(agriculturalMachines);
+        List<Field> fields = fieldService.selectFieldList(field);
+
+        machineNameFieldUserVo.setMachinesList(machinesList);
+        machineNameFieldUserVo.setFields(fields);
+        machineNameFieldUserVo.setUsers(users);
+        return success(machineNameFieldUserVo);
+
+    }
+
+    /**
+     * 新增农机作业记录
+     */
+    @RequiresPermissions("base:machineWorkRecords:add")
+    @Log(title = "农机作业记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MachineWorkRecords machineWorkRecords)
+    {
+        return toAjax(machineWorkRecordsService.insertMachineWorkRecords(machineWorkRecords));
+    }
+
+    /**
+     * 修改农机作业记录
+     */
+    @RequiresPermissions("base:machineWorkRecords:edit")
+    @Log(title = "农机作业记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody MachineWorkRecords machineWorkRecords)
+    {
+        return toAjax(machineWorkRecordsService.updateMachineWorkRecords(machineWorkRecords));
+    }
+
+    /**
+     * 删除农机作业记录
+     */
+    @RequiresPermissions("base:machineWorkRecords:remove")
+    @Log(title = "农机作业记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(machineWorkRecordsService.deleteMachineWorkRecordsByIds(ids));
+    }
+}

+ 22 - 2
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/SensorRealtimeDataController.java

@@ -3,6 +3,7 @@ package com.ruoyi.base.controller;
 import com.ruoyi.base.domain.SensorDataStatistics;
 import com.ruoyi.base.domain.SensorRealtimeData;
 import com.ruoyi.base.service.ISensorRealtimeDataService;
+import com.ruoyi.base.vo.SensorDataStatisticsVo;
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -18,7 +19,7 @@ import java.util.List;
 
 /**
  * 传感器实时数据Controller
- * 
+ *
  * @author ruoyi
  * @date 2025-06-17
  */
@@ -49,6 +50,13 @@ public class SensorRealtimeDataController extends BaseController
         return success(list);
     }
 
+    @GetMapping("/listSensorStatistics/{deviceId}")
+    public AjaxResult listSensorStatistics(@PathVariable("deviceId") String deviceId)
+    {
+        SensorDataStatisticsVo list = sensorRealtimeDataService.selectSensorStatisticsList(deviceId);
+        return success(list);
+    }
+
     /**
      * 导出传感器实时数据列表
      */
@@ -77,7 +85,19 @@ public class SensorRealtimeDataController extends BaseController
      * 获取传感器实时数据详细信息
      */
     @GetMapping(value = "/LatestTime/{deviceId}")
-    public AjaxResult getInfoLatestTime(String deviceId)
+    public AjaxResult getInfoLatestTime(@PathVariable("deviceId") String deviceId)
+    {
+        return success(sensorRealtimeDataService.selectSensorRealtimeDataLatestTimeById(deviceId));
+    }
+
+
+
+
+    /**
+     * 获取传感器统计数据详细信息
+     */
+    @GetMapping(value = "/Statistics/{deviceId}")
+    public AjaxResult getInfoStatistics(@PathVariable("deviceId") String deviceId)
     {
         return success(sensorRealtimeDataService.selectSensorRealtimeDataLatestTimeById(deviceId));
     }

+ 22 - 1
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/WeatherRealtimeDataController.java

@@ -1,8 +1,11 @@
 package com.ruoyi.base.controller;
 
+import com.ruoyi.base.domain.SensorRealtimeData;
 import com.ruoyi.base.domain.WeatherDataStatistics;
 import com.ruoyi.base.domain.WeatherRealtimeData;
 import com.ruoyi.base.service.IWeatherRealtimeDataService;
+import com.ruoyi.base.vo.SensorDataStatisticsVo;
+import com.ruoyi.base.vo.WeatherDataStatisticsVo;
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -18,7 +21,7 @@ import java.util.List;
 
 /**
  * 气象站实时数据Controller
- * 
+ *
  * @author ruoyi
  * @date 2025-06-18
  */
@@ -78,6 +81,24 @@ public class WeatherRealtimeDataController extends BaseController
         return success(weatherRealtimeDataService.selectWeatherRealtimeDataById(id));
     }
 
+
+    /**
+     * 获取气象站实时数据详细信息
+     */
+    @GetMapping(value = "/LatestTime/{deviceId}")
+    public AjaxResult getInfoLatestTime(@PathVariable("deviceId") String deviceId)
+    {
+        return success(weatherRealtimeDataService.selectWeatherRealtimeDataLatestTimeById(deviceId));
+    }
+
+
+    @GetMapping("/listWeatherStatistics")
+    public AjaxResult listWeatherStatistics(WeatherDataStatistics weatherRealtimeData)
+    {
+        WeatherDataStatisticsVo list = weatherRealtimeDataService.selectWeatherStatisticsList(weatherRealtimeData);
+        return success(list);
+    }
+
     /**
      * 新增气象站实时数据
      */

+ 129 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/AgriculturalMachines.java

@@ -0,0 +1,129 @@
+package com.ruoyi.base.domain;
+
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 农机管理列表对象 agricultural_machines
+ *
+ * @author zmj
+ * @date 2025-07-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AgriculturalMachines extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 农机ID */
+    private Long id;
+
+    /** 农机编号 */
+    @Excel(name = "农机编号")
+    private String machineCode;
+
+    /** 农机名称 */
+    @Excel(name = "农机名称")
+    private String machineName;
+
+    /** 农机类型 */
+    @Excel(name = "农机类型", readConverterExp = "1=拖拉机,2=收割机,3=播种机,4=喷雾机,5=其他")
+    private String machineType;
+
+    /** 部门名称 */
+    @Excel(name = "所属农场")
+    private String deptName;
+
+
+    @Excel(name = "负责人")
+    private String managerName;
+
+    /** 厂家 */
+    @Excel(name = "厂家")
+    private String manufacturer;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String model;
+
+    /** 所属农场ID */
+    private Long farmId;
+
+    /** 所属地块区域 */
+    private String fieldArea;
+
+    /** 负责人 */
+    private Long managerId;
+
+
+    /** 生产日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date manufactureDate;
+
+
+    /** 启用时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "启用时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date purchaseDate;
+
+
+
+    /** 当前状态 */
+    @Excel(name = "当前状态", readConverterExp = "0=离线,1=在线,2=待命,3=作业中,4=维护中,5=故障")
+    private Integer onlineStatus;
+
+    /** 当前任务 */
+    @Excel(name = "当前任务")
+    private String currentTask;
+
+    /** 当前地块 */
+    private String currentField;
+
+    /** 保养状态 */
+    @Excel(name = "保养状态", readConverterExp = "1=正常,2=需保养,3=待修复")
+    private String maintenanceStatus;
+
+    /** 定位状态 */
+    @Excel(name = "定位状态", readConverterExp = "1=良好,2=异常,3=无信号")
+    private String locationStatus;
+
+    /** 报警次数 */
+    @Excel(name = "报警次数")
+    private Long alarmCount;
+
+    /** 农机描述 */
+    private String description;
+
+    /** 农机图片 */
+    private String imageUrl;
+
+    /** 状态 */
+    private Integer status;
+
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> deptIdList;
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> fieldIdList;
+
+    /** 所属地块 */
+    private String fieldName;
+
+
+
+
+
+
+}

+ 58 - 28
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/AlertRecord.java

@@ -6,10 +6,11 @@ import com.ruoyi.common.core.web.domain.BaseEntity;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 告警记录对象 alert_record
- * 
+ *
  * @author ruoyi
  */
 @Data
@@ -17,67 +18,96 @@ public class AlertRecord extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     /** 告警ID */
+    @Excel(name = "告警ID")
     private Long alertId;
 
-    /** 设备编号 */
-    @Excel(name = "设备编号")
-    private String deviceId;
+
+    /** 告警级别(1:提示,2:警告,3:紧急) */
+    @Excel(name = "告警级别", readConverterExp = "1=提示,2=警告,3=紧急")
+    private Integer alertLevel;
+
 
     /** 设备名称 */
     @Excel(name = "设备名称")
     private String deviceName;
 
-    /** 设备类型 */
-    @Excel(name = "设备类型")
-    private String deviceType;
+    /** 设备编号 */
+    @Excel(name = "设备编号")
+    private String deviceId;
 
-    /** 告警级别(1:提示,2:警告,3:紧急) */
-    @Excel(name = "告警级别", readConverterExp = "1=提示,2=警告,3=紧急")
-    private Integer alertLevel;
 
-    /** 告警参数名称 */
-    @Excel(name = "告警参数名称")
-    private String parameterName;
 
-    /** 告警时参数值 */
-    @Excel(name = "告警时参数值")
-    private String parameterValue;
+    /** 设备类型 */
+    @Excel(name = "设备类型", readConverterExp = "1=传感器,2=摄像头,3=控制器,4=气象设备")
+    private String deviceType;
 
-    /** 参数单位 */
-    @Excel(name = "参数单位")
-    private String parameterUnit;
+    /** 所属地块 */
+    @Excel(name = "所属地块")
+    private String fieldName;
 
-    /** 阈值 */
-    @Excel(name = "阈值")
-    private String thresholdValue;
+    /** 所属农场 */
+    @Excel(name = "所属农场")
+    private String deptName;
 
     /** 告警内容 */
     @Excel(name = "告警内容")
     private String alertContent;
 
+
     /** 告警时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "告警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date alertTime;
 
+
+
     /** 处理状态(0:未处理,1:已确认,2:已处理,3:已忽略) */
     @Excel(name = "处理状态", readConverterExp = "0=未处理,1=已确认,2=已处理,3=已忽略")
     private Integer processStatus;
 
+
+    /** 处理人 */
+    @Excel(name = "处理人")
+    private String processor;
+
+
     /** 处理时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date processTime;
 
-    /** 处理人 */
-    @Excel(name = "处理人")
-    private String processor;
+
+
+    /** 告警参数名称 */
+    private String parameterName;
+
+    /** 告警时参数值 */
+    private String parameterValue;
+
+    /** 参数单位 */
+    private String parameterUnit;
+
+    /** 阈值 */
+    private String thresholdValue;
+
+
 
     /** 处理说明 */
-    @Excel(name = "处理说明")
     private String processComment;
 
     /** 所属农场ID */
-    @Excel(name = "所属农场ID")
     private String farmId;
-} 
+
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> deptIdList;
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> fieldIdList;
+
+
+    /** 附件 */
+    private String attachments;
+
+
+}

+ 15 - 18
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/Device.java

@@ -16,7 +16,7 @@ import java.util.List;
 
 /**
  * 设备对象 device
- * 
+ *
  * @author zmj
  * @date 2025-05-22
  */
@@ -39,11 +39,22 @@ public class Device extends BaseEntity
     private String deviceName;
 
     /** 设备类型(1-传感器,2-摄像头,3-控制器,4-气象设备) */
-    @Excel(name = "设备类型", readConverterExp = "1=-传感器,2-摄像头,3-控制器,4-气象设备")
+    @Excel(name = "设备类型", readConverterExp = "1=传感器,2=摄像头,3=控制器,4=气象设备")
     private String deviceTypeId;
 
+
+    /** 所属地块 */
+    @Excel(name = "所属地块")
+    private String fieldName;
+
+
+    /** 部门对象 */
+    @Excels({
+            @Excel(name = "所属农场", targetAttr = "deptName", type = Excel.Type.EXPORT)
+    })
+    private SysDept dept;
+
     /** 所属农场ID */
-    @Excel(name = "所属农场ID")
     private String farmId;
 
     /** 设备型号 */
@@ -62,11 +73,10 @@ public class Device extends BaseEntity
 
     /** 安装日期 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "安装日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date installDate;
 
     /** 状态: 0-离线, 1-在线, 2-故障, 3-维护中 */
-    @Excel(name = "状态: 0-离线, 1-在线, 2-故障, 3-维护中")
+    @Excel(name = "状态", readConverterExp = "0=离线,1=在线,2=故障,3=维护中")
     private Long status;
 
     /** 最后活动时间 */
@@ -81,19 +91,6 @@ public class Device extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date bindTime;
 
-
-    /** 所属地块 */
-    private String fieldName;
-
-
-
-    /** 部门对象 */
-    @Excels({
-            @Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
-            @Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
-    })
-    private SysDept dept;
-
     /** 角色对象 */
     private List<SysRole> roles;
 

+ 32 - 27
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/Field.java

@@ -16,7 +16,7 @@ import java.util.List;
 
 /**
  * 地块信息对象 field
- * 
+ *
  * @author ruoyi
  * @date 2025-05-20
  */
@@ -41,8 +41,14 @@ public class Field extends BaseEntity
     @Excel(name = "地块名称")
     private String fieldName;
 
+
+    /** 部门对象 */
+    @Excels({
+            @Excel(name = "所属农场", targetAttr = "deptName", type = Excel.Type.EXPORT)
+    })
+    private SysDept dept;
+
     /** 所属农场ID */
-    @Excel(name = "所属农场ID")
     private Long farmId;
 
     /** 所属农场名称(非数据库字段) */
@@ -50,31 +56,42 @@ public class Field extends BaseEntity
     private String farmName;
 
     /** 地块类型 */
-    @Excel(name = "地块类型")
+    @Excel(name = "地块类型", readConverterExp = "0=水田,1=旱地,2=果园,3=菜地,4=其他")
     private String fieldType;
 
-    /** 种植作物(字典) */
-    @Excel(name = "种植作物(字典)")
-    private String growCrops;
-
     /** 面积(亩) */
     @Excel(name = "面积(亩)")
     private BigDecimal size;
 
+
+    /** 种植作物(字典) */
+    @Excel(name = "种植作物")
+    private String growCrops;
+
+
     /** 土壤类型 */
-    @Excel(name = "土壤类型")
+    @Excel(name = "土壤类型", readConverterExp = "0=粘土,1=沙质土,2=壤土,3=沙壤土,4=其他")
     private String soilType;
 
     /** 灌溉方式 */
-    @Excel(name = "灌溉方式")
+    @Excel(name = "灌溉方式", readConverterExp = "0=其他,1=喷灌,2=滴灌,3=微滴灌,4=慢灌")
     private String irrigationType;
 
     /** 使用状态 */
-    @Excel(name = "使用状态")
+    @Excel(name = "使用状态", readConverterExp = "0=使用中,1=未使用,2=维护中")
     private String status;
 
+    /** 绑定设备 */
+    @Excel(name = "绑定设备")
+    private Long bindDeviceCount;
+
+
+
+    /** 绑定人员 */
+    @Excel(name = "绑定人员")
+    private Long bindUserCount;
+
     /** 负责人ID */
-    @Excel(name = "负责人ID")
     private Long managerId;
 
 
@@ -82,18 +99,14 @@ public class Field extends BaseEntity
     @Excel(name = "负责人名字")
     private String managerName;
 
-    /** 绑定设备 */
-    private Long bindDeviceCount;
 
-    /** 绑定人员 */
-    private Long bindUserCount;
+
+
 
     /** 地块描述 */
-    @Excel(name = "地块描述")
     private String description;
 
     /** 地理位置数据(GeoJSON格式) */
-    @Excel(name = "地理位置数据(GeoJSON格式)")
     private String locationData;
 
     /** 创建时间 */
@@ -103,27 +116,19 @@ public class Field extends BaseEntity
 
     /** 更新时间 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "上次更新", width = 30, dateFormat = "yyyy-MM-dd")
     private Date updatedTime;
 
     /** 创建人ID */
-    @Excel(name = "创建人")
     private String createdBy;
 
     /** 更新人ID */
-    @Excel(name = "更新人")
     private String updatedBy;
 
     /** 是否删除 */
-    @Excel(name = "是否删除")
     private Integer isDeleted;
 
-    /** 部门对象 */
-    @Excels({
-            @Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
-            @Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
-    })
-    private SysDept dept;
+
 
     /** 角色对象 */
     private List<SysRole> roles;

+ 0 - 74
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/FieldDevice.java

@@ -48,79 +48,5 @@ public class FieldDevice extends BaseEntity
     @Excel(name = "是否删除")
     private Integer isDeleted;
 
-    public void setId(Long id)
-    {
-        this.id = id;
-    }
 
-    public Long getId()
-    {
-        return id;
-    }
-
-    public void setFieldId(Long fieldId)
-    {
-        this.fieldId = fieldId;
-    }
-
-    public Long getFieldId()
-    {
-        return fieldId;
-    }
-
-    public void setDeviceId(Long deviceId)
-    {
-        this.deviceId = deviceId;
-    }
-
-    public Long getDeviceId()
-    {
-        return deviceId;
-    }
-
-    public void setBindingTime(Date bindingTime)
-    {
-        this.bindingTime = bindingTime;
-    }
-
-    public Date getBindingTime()
-    {
-        return bindingTime;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setIsDeleted(Integer isDeleted)
-    {
-        this.isDeleted = isDeleted;
-    }
-
-    public Integer getIsDeleted()
-    {
-        return isDeleted;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("fieldId", getFieldId())
-                .append("deviceId", getDeviceId())
-                .append("bindingTime", getBindingTime())
-                .append("status", getStatus())
-                .append("createTime", getCreateTime())
-                .append("updateTime", getUpdateTime())
-                .append("createBy", getCreateBy())
-                .append("updateBy", getUpdateBy())
-                .append("isDeleted", getIsDeleted())
-                .toString();
-    }
 }

+ 4 - 109
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/FieldPersonnel.java

@@ -11,7 +11,7 @@ import java.util.Date;
 
 /**
  * 地块人员绑定对象 field_personnel
- * 
+ *
  * @author ruoyi
  * @date 2025-05-23
  */
@@ -32,7 +32,7 @@ public class FieldPersonnel extends BaseEntity
     private Long userId;
 
     /** 角色类型(0-负责人,1-工作人员) */
-    @Excel(name = "角色类型(0-负责人,1-工作人员)")
+    @Excel(name = "角色类型", readConverterExp = "0=负责人,1=工作人员")
     private String roleType;
 
     /** 绑定时间 */
@@ -41,7 +41,7 @@ public class FieldPersonnel extends BaseEntity
     private Date bindingTime;
 
     /** 绑定状态(0-生效中,1-已解绑) */
-    @Excel(name = "绑定状态(0-生效中,1-已解绑)")
+    @Excel(name = "绑定状态", readConverterExp = "0=生效中,1=已解绑")
     private String status;
 
     /** 创建人 */
@@ -62,110 +62,5 @@ public class FieldPersonnel extends BaseEntity
     private String phonenumber;
 
 
-    public void setId(Long id) 
-    {
-        this.id = id;
-    }
-
-    public Long getId() 
-    {
-        return id;
-    }
-
-    public void setFieldId(Long fieldId) 
-    {
-        this.fieldId = fieldId;
-    }
-
-    public Long getFieldId() 
-    {
-        return fieldId;
-    }
-
-    public void setUserId(Long userId) 
-    {
-        this.userId = userId;
-    }
-
-    public Long getUserId() 
-    {
-        return userId;
-    }
-
-    public void setRoleType(String roleType) 
-    {
-        this.roleType = roleType;
-    }
-
-    public String getRoleType() 
-    {
-        return roleType;
-    }
-
-    public void setBindingTime(Date bindingTime) 
-    {
-        this.bindingTime = bindingTime;
-    }
-
-    public Date getBindingTime() 
-    {
-        return bindingTime;
-    }
-
-    public void setStatus(String status) 
-    {
-        this.status = status;
-    }
-
-    public String getStatus() 
-    {
-        return status;
-    }
-
-    public void setCreatedBy(String createdBy) 
-    {
-        this.createdBy = createdBy;
-    }
-
-    public String getCreatedBy() 
-    {
-        return createdBy;
-    }
-
-    public void setUpdatedBy(String updatedBy) 
-    {
-        this.updatedBy = updatedBy;
-    }
-
-    public String getUpdatedBy() 
-    {
-        return updatedBy;
-    }
-
-    public void setIsDeleted(Integer isDeleted) 
-    {
-        this.isDeleted = isDeleted;
-    }
-
-    public Integer getIsDeleted() 
-    {
-        return isDeleted;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("fieldId", getFieldId())
-            .append("userId", getUserId())
-            .append("roleType", getRoleType())
-            .append("bindingTime", getBindingTime())
-            .append("status", getStatus())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .append("createdBy", getCreatedBy())
-            .append("updatedBy", getUpdatedBy())
-            .append("isDeleted", getIsDeleted())
-            .toString();
-    }
+
 }

+ 102 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/MachineAlarmRecords.java

@@ -0,0 +1,102 @@
+package com.ruoyi.base.domain;
+
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 农机故障告警记录对象 machine_alarm_records
+ *
+ * @author zmj
+ * @date 2025-07-24
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MachineAlarmRecords extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 告警ID */
+    @Excel(name = "告警ID")
+    private Long id;
+
+
+    /** 告警等级 */
+    @Excel(name = "告警等级", readConverterExp = "1=提示,2=警告,3=紧急")
+    private Long alarmLevel;
+
+
+    /** 农机名称 */
+    @Excel(name = "农机名称")
+    private String machineName;
+
+    /** 农机编号 */
+    @Excel(name = "农机编号")
+    private String machineCode;
+
+    /** 农机ID */
+    private Long machineId;
+
+
+    /** 农机类型 */
+    @Excel(name = "农机类型", readConverterExp = "1=拖拉机,2=收割机,3=播种机,4=喷雾机,5=其他")
+    private String machineType;
+
+    @Excel(name = "所属农场")
+    private String deptName;
+
+
+    /** 报警类型 */
+    @Excel(name = "报警类型", readConverterExp = "0=其他,1=发动机,2=燃油,3=温度,4=压力,5=定位")
+    private String alarmType;
+
+    /** 告警内容 */
+    @Excel(name = "告警内容")
+    private String alarmDesc;
+
+    /** 告警时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "告警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date alarmTime;
+
+    /** 处理状态 */
+    @Excel(name = "处理状态", readConverterExp = "0=未处理,1=已确认,2=已处理,3=忽略")
+    private Integer handledStatus;
+
+    /** 处理人ID */
+    private Long handlerId;
+
+    /** 处理人姓名 */
+    @Excel(name = "处理人")
+    private String handlerName;
+
+    /** 处理时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date handleTime;
+
+    /** 处理描述 */
+    private String handleDesc;
+
+    /** 附件 */
+    private String attachments;
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> deptIdList;
+
+
+
+
+
+
+}

+ 118 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/MachineWorkRecords.java

@@ -0,0 +1,118 @@
+package com.ruoyi.base.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 农机作业记录对象 machine_work_records
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MachineWorkRecords extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 工作记录ID */
+    @Excel(name = "作业单号")
+    private Long id;
+
+
+    /** 农机编号 */
+    @Excel(name = "农机编号")
+    private String machineCode;
+
+
+    /** 农机名称 */
+    @Excel(name = "农机名称")
+    private String machineName;
+
+    /** 农机类型 */
+    @Excel(name = "农机类型", readConverterExp = "1=拖拉机,2=收割机,3=播种机,4=喷雾机,5=其他")
+    private String machineType;
+
+
+    @Excel(name = "所属农场")
+    private String deptName;
+
+
+    /** 作业地块 */
+    @Excel(name = "作业地块")
+    private String fieldName;
+
+
+    /** 任务名称 */
+    @Excel(name = "作业名称")
+    private String taskName;
+
+    /** 任务类型 */
+    @Excel(name = "作业类型", readConverterExp = "1=耕地,2=播种,3=收割,4=施肥,5=灌溉")
+    private String taskType;
+
+    /** 记录状态 */
+    @Excel(name = "作业状态", readConverterExp = "0=待开始,1=进行中,2=已完成,3=已取消")
+    private String status;
+
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    @Excel(name = "作业时长(小时)")
+    private BigDecimal workHours;
+
+
+    /** 作业面积(亩) */
+    @Excel(name = "作业面积(亩)")
+    private BigDecimal workArea;
+
+
+    /** 油耗(升) */
+    @Excel(name = "油耗(升)")
+    private BigDecimal fuelConsumption;
+
+    @Excel(name = "操作员")
+    private String userName;
+    @Excel(name = "备注" ,width = 30)
+    private String remark;
+
+    /** 农机ID */
+    private Long machineId;
+
+    /** 作业地块ID */
+    private Long fieldId;
+
+
+    /** 操作员ID */
+    private Long operatorId;
+
+
+
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> deptIdList;
+
+    /** 所属机构id集合-查询条件 */
+    private List<String> fieldIdList;
+
+}

+ 32 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/SensorDataStatistics.java

@@ -1,6 +1,7 @@
 package com.ruoyi.base.domain;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.web.domain.BaseEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -9,17 +10,48 @@ import lombok.NoArgsConstructor;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 
+/**
+ * 传感器平均统计数据
+ */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class SensorDataStatistics extends BaseEntity
 {
+    /**
+     * 设备ID,用于标识数据来源的传感器设备
+     */
     private String deviceId;
+
+    /**
+     * 日期,表示统计数据对应的日期
+     */
+    @JsonFormat(pattern = "M/d")
     private LocalDate date;
+
+    /**
+     * 最高温度,表示在指定日期内记录到的最高温度
+     */
     private BigDecimal maxTemperature;
+
+    /**
+     * 最低温度,表示在指定日期内记录到的最低温度
+     */
     private BigDecimal minTemperature;
+
+    /**
+     * 平均湿度,表示在指定日期内记录到的平均湿度
+     */
     private double avgHumidity;
+
+    /**
+     * 平均光照强度,表示在指定日期内记录到的平均光照强度
+     */
     private double avgLightIntensity;
+
+    /**
+     * 平均土壤湿度,表示在指定日期内记录到的平均土壤湿度
+     */
     private double avgSoilMoisture;
 
 }

+ 6 - 5
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/SensorRealtimeData.java

@@ -8,11 +8,12 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
  * 传感器实时数据对象 sensor_realtime_data
- * 
+ *
  * @author ruoyi
  * @date 2025-06-17
  */
@@ -47,11 +48,11 @@ public class SensorRealtimeData extends BaseEntity
     private BigDecimal soilMoisture;
 
     /** 采集时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date collectTime;
-    private Date beginCollectTime;
-    private Date endCollectTime;
+    private LocalDateTime beginCollectTime;
+    private LocalDateTime endCollectTime;
 
 
 }

+ 20 - 6
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/WeatherDataStatistics.java

@@ -9,6 +9,8 @@ import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * 气象设备数据统计对象 weather_data_statistics
@@ -45,15 +47,15 @@ public class WeatherDataStatistics extends BaseEntity {
 
     /** 平均湿度(单位:%) */
     @Excel(name = "平均湿度(单位:%)")
-    private BigDecimal avgHumidity;
+    private Double avgHumidity;
 
     /** 平均降雨量(单位:毫米) */
     @Excel(name = "平均降雨量(单位:毫米)")
-    private BigDecimal avgRainfall;
+    private Double avgRainfall;
 
     /** 平均风速(单位:米/秒) */
     @Excel(name = "平均风速(单位:米/秒)")
-    private BigDecimal avgWindSpeed;
+    private Double avgWindSpeed;
 
     /** 平均土壤温度 */
     @Excel(name = "平均土壤温度")
@@ -65,17 +67,29 @@ public class WeatherDataStatistics extends BaseEntity {
 
     /** 平均土壤氮 */
     @Excel(name = "平均土壤氮")
-    private BigDecimal avgSoilN;
+    private Double avgSoilN;
 
     /** 平均土壤磷 */
     @Excel(name = "平均土壤磷")
-    private BigDecimal avgSoilP;
+    private Double avgSoilP;
 
     /** 平均土壤钾 */
     @Excel(name = "平均土壤钾")
-    private BigDecimal avgSoilK;
+    private Double avgSoilK;
 
     /** 累积降雨量 */
     @Excel(name = "累积降雨量")
     private BigDecimal dateRainfallA;
+
+    // 平均气温
+    private BigDecimal avgTemperature;
+
+
+    /** 采集时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date collectTime;
+    private LocalDateTime beginCollectTime;
+    private LocalDateTime endCollectTime;
+    private Integer NumberDay;
 }

+ 3 - 3
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/WeatherRealtimeData.java

@@ -16,7 +16,7 @@ import java.util.List;
 
 /**
  * 气象站实时数据对象 weather_realtime_data
- * 
+ *
  * @author ruoyi
  * @date 2025-06-18
  */
@@ -63,8 +63,8 @@ public class WeatherRealtimeData extends BaseEntity
     private BigDecimal lightIntensity;
 
     /** 采集时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date collectTime;
 
     /** 土壤温度 */

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/AgriculturalMachinesMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.mapper;
+
+import java.util.List;
+import com.ruoyi.base.domain.AgriculturalMachines;
+
+/**
+ * 农机管理列表Mapper接口
+ *
+ * @author zmj
+ * @date 2025-07-01
+ */
+public interface AgriculturalMachinesMapper
+{
+    /**
+     * 查询农机管理列表
+     *
+     * @param id 农机管理列表主键
+     * @return 农机管理列表
+     */
+    public AgriculturalMachines selectAgriculturalMachinesById(Long id);
+
+    /**
+     * 查询农机管理列表列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 农机管理列表集合
+     */
+    public List<AgriculturalMachines> selectAgriculturalMachinesList(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 新增农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    public int insertAgriculturalMachines(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 修改农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    public int updateAgriculturalMachines(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 删除农机管理列表
+     *
+     * @param id 农机管理列表主键
+     * @return 结果
+     */
+    public int deleteAgriculturalMachinesById(Long id);
+
+    /**
+     * 批量删除农机管理列表
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAgriculturalMachinesByIds(Long[] ids);
+}

+ 53 - 3
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/AlertRecordMapper.java

@@ -6,15 +6,65 @@ import java.util.List;
 
 /**
  * 告警记录Mapper接口
- * 
+ *
  * @author ruoyi
  */
 public interface AlertRecordMapper {
     /**
      * 查询设备的告警记录
-     * 
+     *
      * @param deviceId 设备编号
      * @return 告警记录集合
      */
     public List<AlertRecord> selectAlertRecordsByDeviceId(String deviceId);
-} 
+
+
+
+    /**
+     * 查询告警记录
+     *
+     * @param alertId 告警记录主键
+     * @return 告警记录
+     */
+    public AlertRecord selectAlertRecordByAlertId(Long alertId);
+
+    /**
+     * 查询告警记录列表
+     *
+     * @param alertRecord 告警记录
+     * @return 告警记录集合
+     */
+    public List<AlertRecord> selectAlertRecordList(AlertRecord alertRecord);
+
+    /**
+     * 新增告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    public int insertAlertRecord(AlertRecord alertRecord);
+
+    /**
+     * 修改告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    public int updateAlertRecord(AlertRecord alertRecord);
+
+    /**
+     * 删除告警记录
+     *
+     * @param alertId 告警记录主键
+     * @return 结果
+     */
+    public int deleteAlertRecordByAlertId(Long alertId);
+
+    /**
+     * 批量删除告警记录
+     *
+     * @param alertIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAlertRecordByAlertIds(Long[] alertIds);
+}

+ 17 - 8
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/FieldMapper.java

@@ -9,15 +9,15 @@ import java.util.Map;
 
 /**
  * 地块信息Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2025-05-20
  */
-public interface FieldMapper 
+public interface FieldMapper
 {
     /**
      * 查询地块信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 地块信息
      */
@@ -27,15 +27,24 @@ public interface FieldMapper
 
     /**
      * 查询地块信息列表
-     * 
+     *
      * @param field 地块信息
      * @return 地块信息集合
      */
     public List<Field> selectFieldList(Field field);
 
+
+    /**
+     * 查询地块名称信息列表
+     *
+     * @param field 地块信息
+     * @return 地块信息集合
+     */
+    public List<Field> selectFieldListName(Field field);
+
     /**
      * 新增地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -43,7 +52,7 @@ public interface FieldMapper
 
     /**
      * 修改地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -51,7 +60,7 @@ public interface FieldMapper
 
     /**
      * 删除地块信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 结果
      */
@@ -59,7 +68,7 @@ public interface FieldMapper
 
     /**
      * 批量删除地块信息
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/MachineAlarmRecordsMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.mapper;
+
+import java.util.List;
+import com.ruoyi.base.domain.MachineAlarmRecords;
+
+/**
+ * 农机故障告警记录Mapper接口
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+public interface MachineAlarmRecordsMapper
+{
+    /**
+     * 查询农机故障告警记录
+     *
+     * @param id 农机故障告警记录主键
+     * @return 农机故障告警记录
+     */
+    public MachineAlarmRecords selectMachineAlarmRecordsById(Long id);
+
+    /**
+     * 查询农机故障告警记录列表
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 农机故障告警记录集合
+     */
+    public List<MachineAlarmRecords> selectMachineAlarmRecordsList(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 新增农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    public int insertMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 修改农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    public int updateMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 删除农机故障告警记录
+     *
+     * @param id 农机故障告警记录主键
+     * @return 结果
+     */
+    public int deleteMachineAlarmRecordsById(Long id);
+
+    /**
+     * 批量删除农机故障告警记录
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMachineAlarmRecordsByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/MachineWorkRecordsMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.mapper;
+
+import java.util.List;
+import com.ruoyi.base.domain.MachineWorkRecords;
+
+/**
+ * 农机作业记录Mapper接口
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+public interface MachineWorkRecordsMapper
+{
+    /**
+     * 查询农机作业记录
+     *
+     * @param id 农机作业记录主键
+     * @return 农机作业记录
+     */
+    public MachineWorkRecords selectMachineWorkRecordsById(Long id);
+
+    /**
+     * 查询农机作业记录列表
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 农机作业记录集合
+     */
+    public List<MachineWorkRecords> selectMachineWorkRecordsList(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 新增农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    public int insertMachineWorkRecords(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 修改农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    public int updateMachineWorkRecords(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 删除农机作业记录
+     *
+     * @param id 农机作业记录主键
+     * @return 结果
+     */
+    public int deleteMachineWorkRecordsById(Long id);
+
+    /**
+     * 批量删除农机作业记录
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMachineWorkRecordsByIds(Long[] ids);
+}

+ 16 - 8
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/SensorRealtimeDataMapper.java

@@ -2,20 +2,21 @@ package com.ruoyi.base.mapper;
 
 import com.ruoyi.base.domain.SensorDataStatistics;
 import com.ruoyi.base.domain.SensorRealtimeData;
+import com.ruoyi.base.domain.WeatherRealtimeData;
 
 import java.util.List;
 
 /**
  * 传感器实时数据Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2025-06-17
  */
-public interface SensorRealtimeDataMapper 
+public interface SensorRealtimeDataMapper
 {
     /**
      * 查询传感器实时数据
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 传感器实时数据
      */
@@ -31,7 +32,7 @@ public interface SensorRealtimeDataMapper
 
     /**
      * 查询传感器实时数据列表
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 传感器实时数据集合
      */
@@ -39,7 +40,7 @@ public interface SensorRealtimeDataMapper
 
     /**
      * 新增传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
@@ -56,7 +57,7 @@ public interface SensorRealtimeDataMapper
 
     /**
      * 修改传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
@@ -64,7 +65,7 @@ public interface SensorRealtimeDataMapper
 
     /**
      * 删除传感器实时数据
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 结果
      */
@@ -72,11 +73,18 @@ public interface SensorRealtimeDataMapper
 
     /**
      * 批量删除传感器实时数据
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteSensorRealtimeDataByIds(Long[] ids);
 
+    /**
+     * 查询传感器统计数据列表
+     *
+     * @param sensorRealtimeData
+     * @return
+     */
+    List<SensorDataStatistics> selectSensorStatisticsList(SensorRealtimeData sensorRealtimeData);
 
 }

+ 17 - 8
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/WeatherRealtimeDataMapper.java

@@ -7,15 +7,15 @@ import java.util.List;
 
 /**
  * 气象站实时数据Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2025-06-18
  */
-public interface WeatherRealtimeDataMapper 
+public interface WeatherRealtimeDataMapper
 {
     /**
      * 查询气象站实时数据
-     * 
+     *
      * @param id 气象站实时数据主键
      * @return 气象站实时数据
      */
@@ -23,7 +23,7 @@ public interface WeatherRealtimeDataMapper
 
     /**
      * 查询气象站实时数据列表
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 气象站实时数据集合
      */
@@ -31,7 +31,7 @@ public interface WeatherRealtimeDataMapper
 
     /**
      * 新增气象站实时数据
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 结果
      */
@@ -48,7 +48,7 @@ public interface WeatherRealtimeDataMapper
     int insertWeatherStatistics(WeatherDataStatistics weatherRealtimeData);
     /**
      * 修改气象站实时数据
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 结果
      */
@@ -56,7 +56,7 @@ public interface WeatherRealtimeDataMapper
 
     /**
      * 删除气象站实时数据
-     * 
+     *
      * @param id 气象站实时数据主键
      * @return 结果
      */
@@ -64,7 +64,7 @@ public interface WeatherRealtimeDataMapper
 
     /**
      * 批量删除气象站实时数据
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
@@ -78,4 +78,13 @@ public interface WeatherRealtimeDataMapper
      */
     public WeatherRealtimeData selectLatestDataByDeviceId(String deviceId);
 
+    WeatherRealtimeData selectWeatherRealtimeDataLatestTimeById(String deviceId);
+
+    /**
+     * 查询气象设备统计数据列表
+     *
+     * @param weatherRealtimeData
+     * @return
+     */
+    List<WeatherDataStatistics> selectWeatherStatisticsList(WeatherDataStatistics weatherRealtimeData);
 }

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IAgriculturalMachinesService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.service;
+
+import java.util.List;
+import com.ruoyi.base.domain.AgriculturalMachines;
+
+/**
+ * 农机管理列表Service接口
+ *
+ * @author zmj
+ * @date 2025-07-01
+ */
+public interface IAgriculturalMachinesService
+{
+    /**
+     * 查询农机管理列表
+     *
+     * @param id 农机管理列表主键
+     * @return 农机管理列表
+     */
+    public AgriculturalMachines selectAgriculturalMachinesById(Long id);
+
+    /**
+     * 查询农机管理列表列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 农机管理列表集合
+     */
+    public List<AgriculturalMachines> selectAgriculturalMachinesList(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 新增农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    public int insertAgriculturalMachines(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 修改农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    public int updateAgriculturalMachines(AgriculturalMachines agriculturalMachines);
+
+    /**
+     * 批量删除农机管理列表
+     *
+     * @param ids 需要删除的农机管理列表主键集合
+     * @return 结果
+     */
+    public int deleteAgriculturalMachinesByIds(Long[] ids);
+
+    /**
+     * 删除农机管理列表信息
+     *
+     * @param id 农机管理列表主键
+     * @return 结果
+     */
+    public int deleteAgriculturalMachinesById(Long id);
+}

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IAlertRecordService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.service;
+
+import java.util.List;
+import com.ruoyi.base.domain.AlertRecord;
+
+/**
+ * 告警记录Service接口
+ *
+ * @author zmj
+ * @date 2025-06-27
+ */
+public interface IAlertRecordService
+{
+    /**
+     * 查询告警记录
+     *
+     * @param alertId 告警记录主键
+     * @return 告警记录
+     */
+    public AlertRecord selectAlertRecordByAlertId(Long alertId);
+
+    /**
+     * 查询告警记录列表
+     *
+     * @param alertRecord 告警记录
+     * @return 告警记录集合
+     */
+    public List<AlertRecord> selectAlertRecordList(AlertRecord alertRecord);
+
+    /**
+     * 新增告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    public int insertAlertRecord(AlertRecord alertRecord);
+
+    /**
+     * 修改告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    public int updateAlertRecord(AlertRecord alertRecord);
+
+    /**
+     * 批量删除告警记录
+     *
+     * @param alertIds 需要删除的告警记录主键集合
+     * @return 结果
+     */
+    public int deleteAlertRecordByAlertIds(Long[] alertIds);
+
+    /**
+     * 删除告警记录信息
+     *
+     * @param alertId 告警记录主键
+     * @return 结果
+     */
+    public int deleteAlertRecordByAlertId(Long alertId);
+}

+ 17 - 8
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IFieldService.java

@@ -11,15 +11,15 @@ import java.util.List;
 
 /**
  * 地块信息Service接口
- * 
+ *
  * @author ruoyi
  * @date 2025-05-20
  */
-public interface IFieldService 
+public interface IFieldService
 {
     /**
      * 查询地块信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 地块信息
      */
@@ -27,15 +27,24 @@ public interface IFieldService
 
     /**
      * 查询地块信息列表
-     * 
+     *
      * @param field 地块信息
      * @return 地块信息集合
      */
     public List<Field> selectFieldList(Field field);
 
+
+    /**
+     * 查询地块信息列表
+     *
+     * @param field 地块信息
+     * @return 地块信息集合
+     */
+    public List<Field> selectFieldListName(Field field);
+
     /**
      * 新增地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -43,7 +52,7 @@ public interface IFieldService
 
     /**
      * 修改地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -51,7 +60,7 @@ public interface IFieldService
 
     /**
      * 批量删除地块信息
-     * 
+     *
      * @param ids 需要删除的地块信息主键集合
      * @return 结果
      */
@@ -59,7 +68,7 @@ public interface IFieldService
 
     /**
      * 删除地块信息信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 结果
      */

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IMachineAlarmRecordsService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.service;
+
+import java.util.List;
+import com.ruoyi.base.domain.MachineAlarmRecords;
+
+/**
+ * 农机故障告警记录Service接口
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+public interface IMachineAlarmRecordsService
+{
+    /**
+     * 查询农机故障告警记录
+     *
+     * @param id 农机故障告警记录主键
+     * @return 农机故障告警记录
+     */
+    public MachineAlarmRecords selectMachineAlarmRecordsById(Long id);
+
+    /**
+     * 查询农机故障告警记录列表
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 农机故障告警记录集合
+     */
+    public List<MachineAlarmRecords> selectMachineAlarmRecordsList(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 新增农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    public int insertMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 修改农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    public int updateMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords);
+
+    /**
+     * 批量删除农机故障告警记录
+     *
+     * @param ids 需要删除的农机故障告警记录主键集合
+     * @return 结果
+     */
+    public int deleteMachineAlarmRecordsByIds(Long[] ids);
+
+    /**
+     * 删除农机故障告警记录信息
+     *
+     * @param id 农机故障告警记录主键
+     * @return 结果
+     */
+    public int deleteMachineAlarmRecordsById(Long id);
+}

+ 61 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IMachineWorkRecordsService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.base.service;
+
+import java.util.List;
+import com.ruoyi.base.domain.MachineWorkRecords;
+
+/**
+ * 农机作业记录Service接口
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+public interface IMachineWorkRecordsService
+{
+    /**
+     * 查询农机作业记录
+     *
+     * @param id 农机作业记录主键
+     * @return 农机作业记录
+     */
+    public MachineWorkRecords selectMachineWorkRecordsById(Long id);
+
+    /**
+     * 查询农机作业记录列表
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 农机作业记录集合
+     */
+    public List<MachineWorkRecords> selectMachineWorkRecordsList(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 新增农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    public int insertMachineWorkRecords(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 修改农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    public int updateMachineWorkRecords(MachineWorkRecords machineWorkRecords);
+
+    /**
+     * 批量删除农机作业记录
+     *
+     * @param ids 需要删除的农机作业记录主键集合
+     * @return 结果
+     */
+    public int deleteMachineWorkRecordsByIds(Long[] ids);
+
+    /**
+     * 删除农机作业记录信息
+     *
+     * @param id 农机作业记录主键
+     * @return 结果
+     */
+    public int deleteMachineWorkRecordsById(Long id);
+}

+ 24 - 9
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/ISensorRealtimeDataService.java

@@ -2,20 +2,22 @@ package com.ruoyi.base.service;
 
 import com.ruoyi.base.domain.SensorDataStatistics;
 import com.ruoyi.base.domain.SensorRealtimeData;
+import com.ruoyi.base.domain.WeatherRealtimeData;
+import com.ruoyi.base.vo.SensorDataStatisticsVo;
 
 import java.util.List;
 
 /**
  * 传感器实时数据Service接口
- * 
+ *
  * @author ruoyi
  * @date 2025-06-17
  */
-public interface ISensorRealtimeDataService 
+public interface ISensorRealtimeDataService
 {
     /**
      * 查询传感器实时数据
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 传感器实时数据
      */
@@ -25,22 +27,33 @@ public interface ISensorRealtimeDataService
     /**
      * 查询最新传感器实时数据
      *
-     * @param id 传感器实时数据主键
+     * @param deviceId 设备编号
      * @return 传感器实时数据
      */
     public SensorRealtimeData selectSensorRealtimeDataLatestTimeById(String deviceId);
 
+
+
+
+
     /**
      * 查询传感器实时数据列表
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 传感器实时数据集合
      */
     public List<SensorRealtimeData> selectSensorRealtimeDataList(SensorRealtimeData sensorRealtimeData);
 
+    /**
+     * 查询传感器统计数据列表
+     * @param
+     * @return
+     */
+    SensorDataStatisticsVo selectSensorStatisticsList(String deviceId);
+
     /**
      * 新增传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
@@ -58,7 +71,7 @@ public interface ISensorRealtimeDataService
 
     /**
      * 修改传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
@@ -66,7 +79,7 @@ public interface ISensorRealtimeDataService
 
     /**
      * 批量删除传感器实时数据
-     * 
+     *
      * @param ids 需要删除的传感器实时数据主键集合
      * @return 结果
      */
@@ -74,9 +87,11 @@ public interface ISensorRealtimeDataService
 
     /**
      * 删除传感器实时数据信息
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 结果
      */
     public int deleteSensorRealtimeDataById(Long id);
+
+
 }

+ 15 - 1
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/IWeatherRealtimeDataService.java

@@ -2,6 +2,7 @@ package com.ruoyi.base.service;
 
 import com.ruoyi.base.domain.WeatherDataStatistics;
 import com.ruoyi.base.domain.WeatherRealtimeData;
+import com.ruoyi.base.vo.WeatherDataStatisticsVo;
 
 import java.util.List;
 
@@ -20,6 +21,14 @@ public interface IWeatherRealtimeDataService {
      */
     public WeatherRealtimeData selectWeatherRealtimeDataById(Long id);
 
+
+    /**
+     * 查询气象站实时数据最新时间
+     * @param deviceId
+     * @return
+     */
+    WeatherRealtimeData selectWeatherRealtimeDataLatestTimeById(String deviceId);
+
     /**
      * 查询气象站实时数据列表
      *
@@ -68,6 +77,11 @@ public interface IWeatherRealtimeDataService {
      * @return 结果
      */
     public int deleteWeatherRealtimeDataById(Long id);
+    /**
+     * 查询气象设备统计数据列表
+     * @param weatherRealtimeData
+     * @return
+     */
 
-
+    WeatherDataStatisticsVo selectWeatherStatisticsList(WeatherDataStatistics weatherRealtimeData);
 }

+ 98 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/AgriculturalMachinesServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ruoyi.base.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.base.mapper.AgriculturalMachinesMapper;
+import com.ruoyi.base.domain.AgriculturalMachines;
+import com.ruoyi.base.service.IAgriculturalMachinesService;
+
+/**
+ * 农机管理列表Service业务层处理
+ *
+ * @author zmj
+ * @date 2025-07-01
+ */
+@Service
+public class AgriculturalMachinesServiceImpl implements IAgriculturalMachinesService
+{
+    @Autowired
+    private AgriculturalMachinesMapper agriculturalMachinesMapper;
+
+    /**
+     * 查询农机管理列表
+     *
+     * @param id 农机管理列表主键
+     * @return 农机管理列表
+     */
+    @Override
+    public AgriculturalMachines selectAgriculturalMachinesById(Long id)
+    {
+        return agriculturalMachinesMapper.selectAgriculturalMachinesById(id);
+    }
+
+    /**
+     * 查询农机管理列表列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 农机管理列表
+     */
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<AgriculturalMachines> selectAgriculturalMachinesList(AgriculturalMachines agriculturalMachines)
+    {
+        return agriculturalMachinesMapper.selectAgriculturalMachinesList(agriculturalMachines);
+    }
+
+    /**
+     * 新增农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    @Override
+    public int insertAgriculturalMachines(AgriculturalMachines agriculturalMachines)
+    {
+        agriculturalMachines.setCreateTime(DateUtils.getNowDate());
+        return agriculturalMachinesMapper.insertAgriculturalMachines(agriculturalMachines);
+    }
+
+    /**
+     * 修改农机管理列表
+     *
+     * @param agriculturalMachines 农机管理列表
+     * @return 结果
+     */
+    @Override
+    public int updateAgriculturalMachines(AgriculturalMachines agriculturalMachines)
+    {
+        agriculturalMachines.setUpdateTime(DateUtils.getNowDate());
+        return agriculturalMachinesMapper.updateAgriculturalMachines(agriculturalMachines);
+    }
+
+    /**
+     * 批量删除农机管理列表
+     *
+     * @param ids 需要删除的农机管理列表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAgriculturalMachinesByIds(Long[] ids)
+    {
+        return agriculturalMachinesMapper.deleteAgriculturalMachinesByIds(ids);
+    }
+
+    /**
+     * 删除农机管理列表信息
+     *
+     * @param id 农机管理列表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAgriculturalMachinesById(Long id)
+    {
+        return agriculturalMachinesMapper.deleteAgriculturalMachinesById(id);
+    }
+}

+ 102 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/AlertRecordServiceImpl.java

@@ -0,0 +1,102 @@
+package com.ruoyi.base.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.base.mapper.AlertRecordMapper;
+import com.ruoyi.base.domain.AlertRecord;
+import com.ruoyi.base.service.IAlertRecordService;
+
+/**
+ * 告警记录Service业务层处理
+ *
+ * @author zmj
+ * @date 2025-06-27
+ */
+@Service
+public class AlertRecordServiceImpl implements IAlertRecordService
+{
+    @Autowired
+    private AlertRecordMapper alertRecordMapper;
+
+    /**
+     * 查询告警记录
+     *
+     * @param alertId 告警记录主键
+     * @return 告警记录
+     */
+    @Override
+    public AlertRecord selectAlertRecordByAlertId(Long alertId)
+    {
+        return alertRecordMapper.selectAlertRecordByAlertId(alertId);
+    }
+
+    /**
+     * 查询告警记录列表
+     *
+     * @param alertRecord 告警记录
+     * @return 告警记录
+     */
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<AlertRecord> selectAlertRecordList(AlertRecord alertRecord)
+    {
+        return alertRecordMapper.selectAlertRecordList(alertRecord);
+    }
+
+    /**
+     * 新增告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    @Override
+    public int insertAlertRecord(AlertRecord alertRecord)
+    {
+        alertRecord.setCreateTime(DateUtils.getNowDate());
+        return alertRecordMapper.insertAlertRecord(alertRecord);
+    }
+
+    /**
+     * 修改告警记录
+     *
+     * @param alertRecord 告警记录
+     * @return 结果
+     */
+    @Override
+    public int updateAlertRecord(AlertRecord alertRecord)
+    {
+        alertRecord.setUpdateTime(DateUtils.getNowDate());
+        alertRecord.setUpdateBy(SecurityUtils.getUsername());
+        alertRecord.setProcessTime(DateUtils.getNowDate());
+        alertRecord.setProcessor(SecurityUtils.getUsername());
+        return alertRecordMapper.updateAlertRecord(alertRecord);
+    }
+
+    /**
+     * 批量删除告警记录
+     *
+     * @param alertIds 需要删除的告警记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAlertRecordByAlertIds(Long[] alertIds)
+    {
+        return alertRecordMapper.deleteAlertRecordByAlertIds(alertIds);
+    }
+
+    /**
+     * 删除告警记录信息
+     *
+     * @param alertId 告警记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAlertRecordByAlertId(Long alertId)
+    {
+        return alertRecordMapper.deleteAlertRecordByAlertId(alertId);
+    }
+}

+ 9 - 7
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/DeviceServiceImpl.java

@@ -11,6 +11,7 @@ import com.ruoyi.base.mapper.DeviceMapper;
 import com.ruoyi.base.mapper.WeatherRealtimeDataMapper;
 import com.ruoyi.base.service.IDeviceService;
 import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.datascope.annotation.DataScope;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -22,7 +23,7 @@ import java.util.Map;
 
 /**
  * 设备Service业务层处理
- * 
+ *
  * @author zmj
  * @date 2025-05-29
  */
@@ -40,7 +41,7 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 查询设备
-     * 
+     *
      * @param id 设备主键
      * @return 设备
      */
@@ -52,11 +53,12 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 查询设备列表
-     * 
+     *
      * @param device 设备
      * @return 设备
      */
     @Override
+    @DataScope(deptAlias = "d")
     public List<Device> selectDeviceList(Device device)
     {
         return deviceMapper.selectDeviceList(device);
@@ -64,7 +66,7 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 新增设备
-     * 
+     *
      * @param device 设备
      * @return 结果
      */
@@ -77,7 +79,7 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 修改设备
-     * 
+     *
      * @param device 设备
      * @return 结果
      */
@@ -90,7 +92,7 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 批量删除设备
-     * 
+     *
      * @param ids 需要删除的设备主键
      * @return 结果
      */
@@ -102,7 +104,7 @@ public class DeviceServiceImpl implements IDeviceService
 
     /**
      * 删除设备信息
-     * 
+     *
      * @param id 设备主键
      * @return 结果
      */

+ 18 - 7
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/FieldServiceImpl.java

@@ -16,6 +16,7 @@ import com.ruoyi.base.mapper.FieldDeviceMapper;
 import com.ruoyi.base.mapper.FieldMapper;
 import com.ruoyi.base.mapper.FieldPersonnelMapper;
 import com.ruoyi.base.service.IFieldService;
+import com.ruoyi.common.datascope.annotation.DataScope;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +27,7 @@ import java.util.stream.Collectors;
 
 /**
  * 地块信息Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-05-20
  */
@@ -50,7 +51,7 @@ public class FieldServiceImpl implements IFieldService
 
     /**
      * 查询地块信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 地块信息
      */
@@ -62,20 +63,30 @@ public class FieldServiceImpl implements IFieldService
 
     /**
      * 查询地块信息列表
-     * 
+     *
      * @param field 地块信息
      * @return 地块信息
      */
     @Override
+    @DataScope(deptAlias = "d")
     public List<Field> selectFieldList(Field field)
     {
         List<Field> fields = fieldMapper.selectFieldList(field);
         return fields;
     }
 
+
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<Field> selectFieldListName(Field field)
+    {
+        List<Field> fields = fieldMapper.selectFieldListName(field);
+        return fields;
+    }
+
     /**
      * 新增地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -87,7 +98,7 @@ public class FieldServiceImpl implements IFieldService
 
     /**
      * 修改地块信息
-     * 
+     *
      * @param field 地块信息
      * @return 结果
      */
@@ -99,7 +110,7 @@ public class FieldServiceImpl implements IFieldService
 
     /**
      * 批量删除地块信息
-     * 
+     *
      * @param ids 需要删除的地块信息主键
      * @return 结果
      */
@@ -111,7 +122,7 @@ public class FieldServiceImpl implements IFieldService
 
     /**
      * 删除地块信息信息
-     * 
+     *
      * @param id 地块信息主键
      * @return 结果
      */

+ 97 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/MachineAlarmRecordsServiceImpl.java

@@ -0,0 +1,97 @@
+package com.ruoyi.base.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.base.mapper.MachineAlarmRecordsMapper;
+import com.ruoyi.base.domain.MachineAlarmRecords;
+import com.ruoyi.base.service.IMachineAlarmRecordsService;
+
+/**
+ * 农机故障告警记录Service业务层处理
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+@Service
+public class MachineAlarmRecordsServiceImpl implements IMachineAlarmRecordsService
+{
+    @Autowired
+    private MachineAlarmRecordsMapper machineAlarmRecordsMapper;
+
+    /**
+     * 查询农机故障告警记录
+     *
+     * @param id 农机故障告警记录主键
+     * @return 农机故障告警记录
+     */
+    @Override
+    public MachineAlarmRecords selectMachineAlarmRecordsById(Long id)
+    {
+        return machineAlarmRecordsMapper.selectMachineAlarmRecordsById(id);
+    }
+
+    /**
+     * 查询农机故障告警记录列表
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 农机故障告警记录
+     */
+    @Override
+    public List<MachineAlarmRecords> selectMachineAlarmRecordsList(MachineAlarmRecords machineAlarmRecords)
+    {
+        return machineAlarmRecordsMapper.selectMachineAlarmRecordsList(machineAlarmRecords);
+    }
+
+    /**
+     * 新增农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    @Override
+    public int insertMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords)
+    {
+        machineAlarmRecords.setCreateTime(DateUtils.getNowDate());
+        return machineAlarmRecordsMapper.insertMachineAlarmRecords(machineAlarmRecords);
+    }
+
+    /**
+     * 修改农机故障告警记录
+     *
+     * @param machineAlarmRecords 农机故障告警记录
+     * @return 结果
+     */
+    @Override
+    public int updateMachineAlarmRecords(MachineAlarmRecords machineAlarmRecords)
+    {
+        machineAlarmRecords.setUpdateTime(DateUtils.getNowDate());
+        machineAlarmRecords.setHandleTime(DateUtils.getNowDate());
+        return machineAlarmRecordsMapper.updateMachineAlarmRecords(machineAlarmRecords);
+    }
+
+    /**
+     * 批量删除农机故障告警记录
+     *
+     * @param ids 需要删除的农机故障告警记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMachineAlarmRecordsByIds(Long[] ids)
+    {
+        return machineAlarmRecordsMapper.deleteMachineAlarmRecordsByIds(ids);
+    }
+
+    /**
+     * 删除农机故障告警记录信息
+     *
+     * @param id 农机故障告警记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMachineAlarmRecordsById(Long id)
+    {
+        return machineAlarmRecordsMapper.deleteMachineAlarmRecordsById(id);
+    }
+}

+ 96 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/MachineWorkRecordsServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.base.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.base.mapper.MachineWorkRecordsMapper;
+import com.ruoyi.base.domain.MachineWorkRecords;
+import com.ruoyi.base.service.IMachineWorkRecordsService;
+
+/**
+ * 农机作业记录Service业务层处理
+ *
+ * @author zmj
+ * @date 2025-07-14
+ */
+@Service
+public class MachineWorkRecordsServiceImpl implements IMachineWorkRecordsService
+{
+    @Autowired
+    private MachineWorkRecordsMapper machineWorkRecordsMapper;
+
+    /**
+     * 查询农机作业记录
+     *
+     * @param id 农机作业记录主键
+     * @return 农机作业记录
+     */
+    @Override
+    public MachineWorkRecords selectMachineWorkRecordsById(Long id)
+    {
+        return machineWorkRecordsMapper.selectMachineWorkRecordsById(id);
+    }
+
+    /**
+     * 查询农机作业记录列表
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 农机作业记录
+     */
+    @Override
+    public List<MachineWorkRecords> selectMachineWorkRecordsList(MachineWorkRecords machineWorkRecords)
+    {
+        return machineWorkRecordsMapper.selectMachineWorkRecordsList(machineWorkRecords);
+    }
+
+    /**
+     * 新增农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    @Override
+    public int insertMachineWorkRecords(MachineWorkRecords machineWorkRecords)
+    {
+        machineWorkRecords.setCreateTime(DateUtils.getNowDate());
+        return machineWorkRecordsMapper.insertMachineWorkRecords(machineWorkRecords);
+    }
+
+    /**
+     * 修改农机作业记录
+     *
+     * @param machineWorkRecords 农机作业记录
+     * @return 结果
+     */
+    @Override
+    public int updateMachineWorkRecords(MachineWorkRecords machineWorkRecords)
+    {
+        machineWorkRecords.setUpdateTime(DateUtils.getNowDate());
+        return machineWorkRecordsMapper.updateMachineWorkRecords(machineWorkRecords);
+    }
+
+    /**
+     * 批量删除农机作业记录
+     *
+     * @param ids 需要删除的农机作业记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMachineWorkRecordsByIds(Long[] ids)
+    {
+        return machineWorkRecordsMapper.deleteMachineWorkRecordsByIds(ids);
+    }
+
+    /**
+     * 删除农机作业记录信息
+     *
+     * @param id 农机作业记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMachineWorkRecordsById(Long id)
+    {
+        return machineWorkRecordsMapper.deleteMachineWorkRecordsById(id);
+    }
+}

+ 130 - 24
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/SensorRealtimeDataServiceImpl.java

@@ -2,71 +2,180 @@ package com.ruoyi.base.service.impl;
 
 import com.ruoyi.base.domain.SensorDataStatistics;
 import com.ruoyi.base.domain.SensorRealtimeData;
+import com.ruoyi.base.domain.WeatherRealtimeData;
 import com.ruoyi.base.mapper.SensorRealtimeDataMapper;
 import com.ruoyi.base.service.ISensorRealtimeDataService;
+import com.ruoyi.base.vo.SensorDataStatisticsVo;
 import com.ruoyi.common.core.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * 传感器实时数据Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-06-17
  */
 @Service
-public class SensorRealtimeDataServiceImpl implements ISensorRealtimeDataService 
-{
+public class SensorRealtimeDataServiceImpl implements ISensorRealtimeDataService {
     @Autowired
     private SensorRealtimeDataMapper sensorRealtimeDataMapper;
 
     /**
      * 查询传感器实时数据
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 传感器实时数据
      */
     @Override
-    public SensorRealtimeData selectSensorRealtimeDataById(Long id)
-    {
+    public SensorRealtimeData selectSensorRealtimeDataById(Long id) {
         return sensorRealtimeDataMapper.selectSensorRealtimeDataById(id);
     }
 
     /**
      * 查询最新传感器实时数据
      *
-     * @param id 传感器实时数据主键
+     * @param deviceId 传感器实时数据主键
      * @return 传感器实时数据
      */
     @Override
-    public SensorRealtimeData selectSensorRealtimeDataLatestTimeById(String deviceId)
-    {
+    public SensorRealtimeData selectSensorRealtimeDataLatestTimeById(String deviceId) {
         return sensorRealtimeDataMapper.selectSensorRealtimeDataLatestTimeById(deviceId);
     }
 
+
+
+
     /**
      * 查询传感器实时数据列表
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 传感器实时数据
      */
     @Override
-    public List<SensorRealtimeData> selectSensorRealtimeDataList(SensorRealtimeData sensorRealtimeData)
-    {
+    public List<SensorRealtimeData> selectSensorRealtimeDataList(SensorRealtimeData sensorRealtimeData) {
         return sensorRealtimeDataMapper.selectSensorRealtimeDataList(sensorRealtimeData);
     }
 
+    /**
+     * 查询传感器统计数据列表
+     *
+     * @param
+     * @return
+     */
+    @Override
+    public SensorDataStatisticsVo selectSensorStatisticsList(String deviceId) {
+        SensorDataStatisticsVo sensorDataStatisticsVo = new SensorDataStatisticsVo();
+        SensorRealtimeData sensorRealtimeData = new SensorRealtimeData();
+        LocalDate currentDate = LocalDate.now();
+        LocalDate previousDate = currentDate.minusDays(7);
+        LocalDateTime startOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MIDNIGHT);
+        LocalDateTime endOfPreviousDay = LocalDateTime.of(currentDate, LocalTime.MAX);
+        sensorRealtimeData.setDeviceId(deviceId);
+        sensorRealtimeData.setBeginCollectTime(startOfPreviousDay);
+        sensorRealtimeData.setEndCollectTime(endOfPreviousDay);
+        List<String> dateList = new ArrayList<>();
+        for (LocalDate date = previousDate; !date.isAfter(currentDate); date = date.plusDays(1)) {
+            String formattedDate = date.format(DateTimeFormatter.ofPattern("M/d"));
+            dateList.add(formattedDate);
+        }
+        sensorDataStatisticsVo.setSensorDate(dateList);
+
+        List<BigDecimal> maxTemperatures = new ArrayList<>();
+        List<BigDecimal> minTemperature = new ArrayList<>();
+        List<Double> avgHumidity = new ArrayList<>();
+        List<Double> avgLightIntensity = new ArrayList<>();
+        List<Double> avgSoilMoisture = new ArrayList<>();
+
+        List<SensorDataStatistics> sensorDataStatisticsList = sensorRealtimeDataMapper.selectSensorStatisticsList(sensorRealtimeData);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d");
+
+        Map<String, SensorDataStatistics> dateStrToStatisticsMap = sensorDataStatisticsList.stream()
+                .collect(Collectors.toMap(
+                        statistic -> statistic.getDate().format(formatter), // 转换为 M/d 格式的字符串
+                        statistic -> statistic,
+                        (existing, replacement) -> existing // 如果有重复 key,保留第一个
+                ));
+        for (String s : dateList) {
+            SensorDataStatistics sensorDataStatistics = dateStrToStatisticsMap.get(s);
+            if (ObjectUtils.isEmpty(sensorDataStatistics)) {
+                maxTemperatures.add(null);
+                minTemperature.add(null);
+                avgHumidity.add(null);
+                avgLightIntensity.add(null);
+                avgSoilMoisture.add(null);
+            } else {
+                maxTemperatures.add(sensorDataStatistics.getMaxTemperature());
+                minTemperature.add(sensorDataStatistics.getMinTemperature());
+                avgHumidity.add(sensorDataStatistics.getAvgHumidity());
+                avgLightIntensity.add(sensorDataStatistics.getAvgLightIntensity());
+                avgSoilMoisture.add(sensorDataStatistics.getAvgSoilMoisture());
+            }
+        }
+
+        BigDecimal avgHumidityAverage = sensorDataStatisticsList.stream()
+                .map(SensorDataStatistics::getAvgHumidity)
+                .filter(d -> !Double.isNaN(d)) // 过滤掉无效值
+                .reduce(Double::sum)
+                .flatMap(sum -> !sensorDataStatisticsList.isEmpty() ?
+                        Optional.of(BigDecimal.valueOf(sum / sensorDataStatisticsList.size())) : Optional.empty())
+                .map(avg -> avg.setScale(2, BigDecimal.ROUND_HALF_UP))
+                .orElse(BigDecimal.ZERO);
+
+        BigDecimal avgLightIntensityAverage = sensorDataStatisticsList.stream()
+                .map(SensorDataStatistics::getAvgLightIntensity)
+                .filter(d -> !Double.isNaN(d))
+                .reduce(Double::sum)
+                .flatMap(sum -> !sensorDataStatisticsList.isEmpty() ?
+                        Optional.of(BigDecimal.valueOf(sum / sensorDataStatisticsList.size())) : Optional.empty())
+                .map(avg -> avg.setScale(2, BigDecimal.ROUND_HALF_UP))
+                .orElse(BigDecimal.ZERO);
+
+        BigDecimal avgSoilMoistureAverage = sensorDataStatisticsList.stream()
+                .map(SensorDataStatistics::getAvgSoilMoisture)
+                .filter(d -> !Double.isNaN(d))
+                .reduce(Double::sum)
+                .flatMap(sum -> !sensorDataStatisticsList.isEmpty() ?
+                        Optional.of(BigDecimal.valueOf(sum / sensorDataStatisticsList.size())) : Optional.empty())
+                .map(avg -> avg.setScale(2, BigDecimal.ROUND_HALF_UP))
+                .orElse(BigDecimal.ZERO);
+
+        SensorRealtimeData sensorRealtime = new SensorRealtimeData();
+        sensorRealtime.setHumidity(avgHumidityAverage);
+        sensorRealtime.setLightIntensity(avgLightIntensityAverage);
+        sensorRealtime.setSoilMoisture(avgSoilMoistureAverage);
+        sensorDataStatisticsVo.setSensorRealtimeData(sensorRealtime);
+
+        sensorDataStatisticsVo.setMinTemperature(maxTemperatures);
+        sensorDataStatisticsVo.setMinTemperature(minTemperature);
+        sensorDataStatisticsVo.setAvgHumidity(avgHumidity);
+        sensorDataStatisticsVo.setAvgLightIntensity(avgLightIntensity);
+        sensorDataStatisticsVo.setAvgSoilMoisture(avgSoilMoisture);
+
+
+        return sensorDataStatisticsVo;
+    }
+
     /**
      * 新增传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
     @Override
-    public int insertSensorRealtimeData(SensorRealtimeData sensorRealtimeData)
-    {
+    public int insertSensorRealtimeData(SensorRealtimeData sensorRealtimeData) {
         sensorRealtimeData.setCreateTime(DateUtils.getNowDate());
         return sensorRealtimeDataMapper.insertSensorRealtimeData(sensorRealtimeData);
     }
@@ -86,38 +195,35 @@ public class SensorRealtimeDataServiceImpl implements ISensorRealtimeDataService
 
     /**
      * 修改传感器实时数据
-     * 
+     *
      * @param sensorRealtimeData 传感器实时数据
      * @return 结果
      */
     @Override
-    public int updateSensorRealtimeData(SensorRealtimeData sensorRealtimeData)
-    {
+    public int updateSensorRealtimeData(SensorRealtimeData sensorRealtimeData) {
         sensorRealtimeData.setUpdateTime(DateUtils.getNowDate());
         return sensorRealtimeDataMapper.updateSensorRealtimeData(sensorRealtimeData);
     }
 
     /**
      * 批量删除传感器实时数据
-     * 
+     *
      * @param ids 需要删除的传感器实时数据主键
      * @return 结果
      */
     @Override
-    public int deleteSensorRealtimeDataByIds(Long[] ids)
-    {
+    public int deleteSensorRealtimeDataByIds(Long[] ids) {
         return sensorRealtimeDataMapper.deleteSensorRealtimeDataByIds(ids);
     }
 
     /**
      * 删除传感器实时数据信息
-     * 
+     *
      * @param id 传感器实时数据主键
      * @return 结果
      */
     @Override
-    public int deleteSensorRealtimeDataById(Long id)
-    {
+    public int deleteSensorRealtimeDataById(Long id) {
         return sensorRealtimeDataMapper.deleteSensorRealtimeDataById(id);
     }
 }

+ 471 - 22
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/WeatherRealtimeDataServiceImpl.java

@@ -4,57 +4,83 @@ import com.ruoyi.base.domain.WeatherDataStatistics;
 import com.ruoyi.base.domain.WeatherRealtimeData;
 import com.ruoyi.base.mapper.WeatherRealtimeDataMapper;
 import com.ruoyi.base.service.IWeatherRealtimeDataService;
+import com.ruoyi.base.vo.WeatherDataStatisticsVo;
 import com.ruoyi.common.core.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 气象站实时数据Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-06-18
  */
 @Service
-public class WeatherRealtimeDataServiceImpl implements IWeatherRealtimeDataService 
-{
+public class WeatherRealtimeDataServiceImpl implements IWeatherRealtimeDataService {
     @Autowired
     private WeatherRealtimeDataMapper weatherRealtimeDataMapper;
 
     /**
      * 查询气象站实时数据
-     * 
+     *
      * @param id 气象站实时数据主键
      * @return 气象站实时数据
      */
     @Override
-    public WeatherRealtimeData selectWeatherRealtimeDataById(Long id)
-    {
+    public WeatherRealtimeData selectWeatherRealtimeDataById(Long id) {
         return weatherRealtimeDataMapper.selectWeatherRealtimeDataById(id);
     }
 
+    @Override
+    public WeatherRealtimeData selectWeatherRealtimeDataLatestTimeById(String deviceId) {
+        WeatherRealtimeData weatherRealtimeData = weatherRealtimeDataMapper.selectWeatherRealtimeDataLatestTimeById(deviceId);
+
+        // 添加空值判断,避免空指针异常
+        if (weatherRealtimeData != null && weatherRealtimeData.getWindDirection() != null) {
+            try {
+                // 尝试转换风向值并设置中文风向
+                int windDirection = Integer.parseInt(weatherRealtimeData.getWindDirection());
+                weatherRealtimeData.setWindDirection(getFX(windDirection));
+            } catch (NumberFormatException e) {
+                // 如果转换失败,设置默认值或保持原值
+                weatherRealtimeData.setWindDirection("未知");
+            }
+        } else if (weatherRealtimeData != null) {
+            // 如果 windDirection 为 null,设置默认值
+            weatherRealtimeData.setWindDirection("未知");
+        }
+
+        return weatherRealtimeData;
+    }
+
     /**
      * 查询气象站实时数据列表
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 气象站实时数据
      */
     @Override
-    public List<WeatherRealtimeData> selectWeatherRealtimeDataList(WeatherRealtimeData weatherRealtimeData)
-    {
+    public List<WeatherRealtimeData> selectWeatherRealtimeDataList(WeatherRealtimeData weatherRealtimeData) {
         return weatherRealtimeDataMapper.selectWeatherRealtimeDataList(weatherRealtimeData);
     }
 
     /**
      * 新增气象站实时数据
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 结果
      */
     @Override
-    public int insertWeatherRealtimeData(WeatherRealtimeData weatherRealtimeData)
-    {
+    public int insertWeatherRealtimeData(WeatherRealtimeData weatherRealtimeData) {
         weatherRealtimeData.setCreateTime(DateUtils.getNowDate());
         return weatherRealtimeDataMapper.insertWeatherRealtimeData(weatherRealtimeData);
     }
@@ -67,38 +93,461 @@ public class WeatherRealtimeDataServiceImpl implements IWeatherRealtimeDataServi
 
     /**
      * 修改气象站实时数据
-     * 
+     *
      * @param weatherRealtimeData 气象站实时数据
      * @return 结果
      */
     @Override
-    public int updateWeatherRealtimeData(WeatherRealtimeData weatherRealtimeData)
-    {
+    public int updateWeatherRealtimeData(WeatherRealtimeData weatherRealtimeData) {
         weatherRealtimeData.setUpdateTime(DateUtils.getNowDate());
         return weatherRealtimeDataMapper.updateWeatherRealtimeData(weatherRealtimeData);
     }
 
     /**
      * 批量删除气象站实时数据
-     * 
+     *
      * @param ids 需要删除的气象站实时数据主键
      * @return 结果
      */
     @Override
-    public int deleteWeatherRealtimeDataByIds(Long[] ids)
-    {
+    public int deleteWeatherRealtimeDataByIds(Long[] ids) {
         return weatherRealtimeDataMapper.deleteWeatherRealtimeDataByIds(ids);
     }
 
     /**
      * 删除气象站实时数据信息
-     * 
+     *
      * @param id 气象站实时数据主键
      * @return 结果
      */
     @Override
-    public int deleteWeatherRealtimeDataById(Long id)
-    {
+    public int deleteWeatherRealtimeDataById(Long id) {
         return weatherRealtimeDataMapper.deleteWeatherRealtimeDataById(id);
     }
+
+    @Override
+    public WeatherDataStatisticsVo selectWeatherStatisticsList(WeatherDataStatistics weatherRealtimeData) {
+        WeatherDataStatisticsVo weatherDataStatisticsVo = new WeatherDataStatisticsVo();
+        LocalDate currentDate = LocalDate.now();
+        LocalDate previousDate = null;
+        if (weatherRealtimeData.getNumberDay() == null) {
+            previousDate = currentDate.minusDays(7);
+        } else {
+            if (weatherRealtimeData.getNumberDay() == 30) {
+                previousDate = currentDate.minusDays(30);
+            }
+            if (weatherRealtimeData.getNumberDay() == 24) {
+
+                return twentyFourHours(weatherRealtimeData.getDeviceId());
+            }
+        }
+
+
+        LocalDateTime startOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MIDNIGHT);
+        LocalDateTime endOfPreviousDay = LocalDateTime.of(currentDate, LocalTime.MAX);
+        weatherRealtimeData.setBeginCollectTime(startOfPreviousDay);
+        weatherRealtimeData.setEndCollectTime(endOfPreviousDay);
+
+        List<String> dateList = new ArrayList<>();
+        for (LocalDate date = previousDate; !date.isAfter(currentDate); date = date.plusDays(1)) {
+            String formattedDate = date.format(DateTimeFormatter.ofPattern("M/d"));
+            dateList.add(formattedDate);
+        }
+        weatherDataStatisticsVo.setWeatherDate(dateList);
+
+
+        List<BigDecimal> weatherMaxTemperature = new ArrayList<>();
+        List<BigDecimal> weatherMinTemperature = new ArrayList<>();
+        List<Double> weatherHumidity = new ArrayList<>();
+        List<Double> weatherRainfall = new ArrayList<>();
+        List<Double> weatherWindSpeed = new ArrayList<>();
+
+        List<Double> weatherAvgSoilN = new ArrayList<>();
+        List<Double> weatherAvgSoilP = new ArrayList<>();
+        List<Double> weatherAvgSoilK = new ArrayList<>();
+
+
+        List<WeatherDataStatistics> weatherDataStatisticsList = weatherRealtimeDataMapper.selectWeatherStatisticsList(weatherRealtimeData);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d");
+
+        Map<String, WeatherDataStatistics> dateStrToStatisticsMap = weatherDataStatisticsList.stream()
+                .collect(Collectors.toMap(
+                        statistic -> statistic.getDate().format(formatter),
+                        statistic -> statistic,
+                        (existing, replacement) -> existing
+                ));
+
+
+        for (String s : dateList) {
+            WeatherDataStatistics weatherDataStatistics1 = dateStrToStatisticsMap.get(s);
+            if (ObjectUtils.isEmpty(weatherDataStatistics1)) {
+                weatherMaxTemperature.add(null);
+                weatherMinTemperature.add(null);
+                weatherHumidity.add(null);
+                weatherRainfall.add(null);
+                weatherWindSpeed.add(null);
+                weatherAvgSoilN.add(null);
+                weatherAvgSoilP.add(null);
+                weatherAvgSoilK.add(null);
+            } else {
+                weatherMaxTemperature.add(weatherDataStatistics1.getMaxTemperature());
+                weatherMinTemperature.add(weatherDataStatistics1.getMinTemperature());
+                weatherHumidity.add(weatherDataStatistics1.getAvgHumidity());
+                weatherRainfall.add(weatherDataStatistics1.getAvgRainfall());
+                weatherWindSpeed.add(weatherDataStatistics1.getAvgWindSpeed());
+                weatherAvgSoilN.add(weatherDataStatistics1.getAvgSoilN());
+                weatherAvgSoilP.add(weatherDataStatistics1.getAvgSoilP());
+                weatherAvgSoilK.add(weatherDataStatistics1.getAvgSoilK());
+            }
+        }
+
+
+        BigDecimal avgHumidityAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgHumidity)
+                .filter(d -> !Double.isNaN(d)) // 过滤掉无效值
+                .reduce(Double::sum)
+                .flatMap(sum -> !weatherDataStatisticsList.isEmpty() ?
+                        Optional.of(BigDecimal.valueOf(sum / weatherDataStatisticsList.size())) : Optional.empty())
+                .map(avg -> avg.setScale(2, BigDecimal.ROUND_HALF_UP))
+                .orElse(BigDecimal.ZERO);
+
+        BigDecimal avgTemperatureAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgTemperature)  // 假设WeatherDataStatistics类中有getAvgTemperature方法
+                .filter(Objects::nonNull)  // 过滤掉空值
+                .filter(temp -> temp.compareTo(BigDecimal.ZERO) >= 0)  // 过滤掉无效值
+                .reduce(BigDecimal::add)
+                .flatMap(sum -> !weatherDataStatisticsList.isEmpty() ?
+                        Optional.of(sum.divide(BigDecimal.valueOf(weatherDataStatisticsList.size()), 2, BigDecimal.ROUND_HALF_UP)) : Optional.empty())
+                .orElse(BigDecimal.ZERO);
+
+        BigDecimal avgSoilNAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgSoilN)
+                .filter(Objects::nonNull)
+                .filter(d -> !d.isNaN()) // 如果是Double类型
+                .map(BigDecimal::valueOf) // 转换为BigDecimal
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .divide(BigDecimal.valueOf(Math.max(1, weatherDataStatisticsList.size())), 2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal avgSoilPAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgSoilP)
+                .filter(Objects::nonNull)
+                .filter(d -> !d.isNaN()) // 如果是Double类型
+                .map(BigDecimal::valueOf) // 转换为BigDecimal
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .divide(BigDecimal.valueOf(Math.max(1, weatherDataStatisticsList.size())), 2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal avgSoilKAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgSoilK)
+                .filter(Objects::nonNull)
+                .filter(d -> !d.isNaN()) // 如果是Double类型
+                .map(BigDecimal::valueOf) // 转换为BigDecimal
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .divide(BigDecimal.valueOf(Math.max(1, weatherDataStatisticsList.size())), 2, BigDecimal.ROUND_HALF_UP);
+
+
+
+        BigDecimal avgWindSpeedAverage = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getAvgWindSpeed)
+                .filter(d -> !Double.isNaN(d))
+                .reduce(Double::sum)
+                .flatMap(sum -> !weatherDataStatisticsList.isEmpty() ?
+                        Optional.of(BigDecimal.valueOf(sum / weatherDataStatisticsList.size())) : Optional.empty())
+                .map(avg -> avg.setScale(2, BigDecimal.ROUND_HALF_UP))
+                .orElse(BigDecimal.ZERO);
+
+        BigDecimal totalRainfallAccumulated = weatherDataStatisticsList.stream()
+                .map(WeatherDataStatistics::getDateRainfallA)
+                .filter(rainfall -> rainfall != null && rainfall.compareTo(BigDecimal.ZERO) >= 0)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        WeatherRealtimeData weatherRealtimeDataVo = new WeatherRealtimeData();
+        weatherRealtimeDataVo.setHumidity(avgHumidityAverage);
+        weatherRealtimeDataVo.setTemperature(avgTemperatureAverage);
+        weatherRealtimeDataVo.setWindSpeed(avgWindSpeedAverage);
+        weatherRealtimeDataVo.setRainfallA(totalRainfallAccumulated);
+        weatherRealtimeDataVo.setSoilN(avgSoilNAverage);
+        weatherRealtimeDataVo.setSoilP(avgSoilPAverage);
+        weatherRealtimeDataVo.setSoilK(avgSoilKAverage);
+        weatherDataStatisticsVo.setWeatherRealtimeData(weatherRealtimeDataVo);
+
+        weatherDataStatisticsVo.setWeatherMinTemperature(weatherMinTemperature);
+        weatherDataStatisticsVo.setWeatherMaxTemperature(weatherMaxTemperature);
+        weatherDataStatisticsVo.setWeatherHumidity(weatherHumidity);
+        weatherDataStatisticsVo.setWeatherRainfall(weatherRainfall);
+        weatherDataStatisticsVo.setWeatherWindSpeed(weatherWindSpeed);
+        weatherDataStatisticsVo.setWeatherAvgSoilN(weatherAvgSoilN);
+        weatherDataStatisticsVo.setWeatherAvgSoilP(weatherAvgSoilP);
+        weatherDataStatisticsVo.setWeatherAvgSoilK(weatherAvgSoilK);
+        return weatherDataStatisticsVo;
+    }
+
+    private WeatherDataStatisticsVo twentyFourHours(String deviceId) {
+
+        WeatherDataStatisticsVo weatherDataStatisticsVo = new WeatherDataStatisticsVo();
+
+        List<String> hours = java.util.Arrays.asList(
+                "00:00", "02:00", "04:00", "06:00",
+                "08:00", "10:00", "12:00", "14:00",
+                "16:00", "18:00", "20:00", "22:00"
+        );
+
+        // 气象设备温度数据
+        List<BigDecimal> weatherMaxTemperature = new ArrayList<>();
+        List<BigDecimal> weatherMinTemperature = new ArrayList<>();
+        // 气象设备温度数据
+        List<BigDecimal> weatherAvgTemperature = new ArrayList<>();
+        // 气象设备湿度数据
+        List<Double> weatherHumidity = new ArrayList<>();
+        // 气象设备降雨量数据
+        List<Double> weatherRainfall = new ArrayList<>();
+        // 气象设备风速数据
+        List<Double> weatherWindSpeed = new ArrayList<>();
+
+
+        List<Double> weatherAvgSoilN = new ArrayList<>();
+        List<Double> weatherAvgSoilP = new ArrayList<>();
+        List<Double> weatherAvgSoilK = new ArrayList<>();
+
+
+        WeatherRealtimeData weatherRealtimeData = new WeatherRealtimeData();
+        LocalDate currentDate = LocalDate.now();
+        LocalDate previousDate = LocalDateTime.now().minusHours(24).toLocalDate();
+        LocalDateTime startOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MIDNIGHT);
+        LocalDateTime endOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MAX);
+        weatherRealtimeData.setBeginWeatherTime(startOfPreviousDay);
+        weatherRealtimeData.setEndWeatherTime(endOfPreviousDay);
+        weatherRealtimeData.setDeviceId(deviceId);
+        List<WeatherRealtimeData> weatherRealtime = weatherRealtimeDataMapper.selectWeatherRealtimeDataList(weatherRealtimeData);
+
+        weatherRealtime.stream()
+                .filter(data -> data.getCollectTime() != null && data.getTemperature() != null)
+                .collect(Collectors.groupingBy(data -> {
+                    // 提取小时数并划分时段(每2小时为一个时段)
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(data.getCollectTime());
+                    int hour = calendar.get(Calendar.HOUR_OF_DAY);
+                    return hour / 2; // 0~23 → 0~11
+                }, Collectors.collectingAndThen(Collectors.toList(), list -> {
+                    // 提取气温列表
+                    List<BigDecimal> temps = list.stream()
+                            .map(WeatherRealtimeData::getTemperature)
+                            .filter(temperature -> temperature != null)
+                            .collect(Collectors.toList());
+
+                    // 提取湿度列表
+                    List<BigDecimal> hums = list.stream()
+                            .map(WeatherRealtimeData::getHumidity)
+                            .filter(humidity -> humidity != null)
+                            .collect(Collectors.toList());
+
+                    List<BigDecimal> soilN = list.stream()
+                            .map(WeatherRealtimeData::getSoilN)
+                            .filter(humidity -> humidity != null)
+                            .collect(Collectors.toList());
+
+                    List<BigDecimal> soilP = list.stream()
+                            .map(WeatherRealtimeData::getSoilP)
+                            .filter(humidity -> humidity != null)
+                            .collect(Collectors.toList());
+
+                    List<BigDecimal> soilK = list.stream()
+                            .map(WeatherRealtimeData::getSoilK)
+                            .filter(humidity -> humidity != null)
+                            .collect(Collectors.toList());
+
+                    // 提取降雨量列表
+                    List<BigDecimal> rains = list.stream()
+                            .map(WeatherRealtimeData::getRainfall)
+                            .filter(rain -> rain != null)
+                            .collect(Collectors.toList());
+
+                    // 提取风速列表
+                    List<BigDecimal> winds = list.stream()
+                            .map(WeatherRealtimeData::getWindSpeed)
+                            .filter(wind -> wind != null)
+                            .collect(Collectors.toList());
+
+                    // 计算最大值、最小值、平均值
+                    BigDecimal maxTemp = temps.stream()
+                            .max(BigDecimal::compareTo)
+                            .orElse(null);
+
+                    BigDecimal minTemp = temps.stream()
+                            .min(BigDecimal::compareTo)
+                            .orElse(null);
+
+                    BigDecimal avgTemp = temps.isEmpty() ? BigDecimal.ZERO :
+                            temps.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(temps.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgHumidity = hums.isEmpty() ? BigDecimal.ZERO :
+                            hums.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(hums.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgRainfall = rains.isEmpty() ? BigDecimal.ZERO :
+                            rains.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(rains.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgWindSpeed = winds.isEmpty() ? BigDecimal.ZERO :
+                            winds.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(winds.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgSoilN = soilN.isEmpty() ? BigDecimal.ZERO :
+                            soilN.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(soilN.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgSoilP = soilP.isEmpty() ? BigDecimal.ZERO :
+                            soilP.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(soilP.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal avgSoilK = soilK.isEmpty() ? BigDecimal.ZERO :
+                            soilK.stream().reduce(BigDecimal.ZERO, BigDecimal::add)
+                                    .divide(BigDecimal.valueOf(soilK.size()), 2, BigDecimal.ROUND_HALF_UP);
+                    weatherMaxTemperature.add(maxTemp);
+                    weatherMinTemperature.add(minTemp);
+                    weatherAvgTemperature.add(avgTemp);
+                    weatherHumidity.add(avgHumidity.doubleValue());
+                    weatherRainfall.add(avgRainfall.doubleValue());
+                    weatherWindSpeed.add(avgWindSpeed.doubleValue());
+                    weatherAvgSoilN.add(avgSoilN.doubleValue());
+                    weatherAvgSoilP.add(avgSoilP.doubleValue());
+                    weatherAvgSoilK.add(avgSoilK.doubleValue());
+                    return null;
+                })));
+        weatherDataStatisticsVo.setWeatherDate(hours);
+        weatherDataStatisticsVo.setWeatherMaxTemperature(weatherMaxTemperature);
+        weatherDataStatisticsVo.setWeatherMinTemperature(weatherMinTemperature);
+        weatherDataStatisticsVo.setWeatherHumidity(weatherHumidity);
+        weatherDataStatisticsVo.setWeatherRainfall(weatherRainfall);
+        weatherDataStatisticsVo.setWeatherWindSpeed(weatherWindSpeed);
+        weatherDataStatisticsVo.setWeatherAvgSoilN(weatherAvgSoilN);
+        weatherDataStatisticsVo.setWeatherAvgSoilP(weatherAvgSoilP);
+        weatherDataStatisticsVo.setWeatherAvgSoilK(weatherAvgSoilK);
+
+        // 计算平均温度
+        BigDecimal avgTemperature = weatherAvgTemperature.isEmpty() ? BigDecimal.ZERO :
+                weatherAvgTemperature.stream()
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add)
+                        .divide(BigDecimal.valueOf(weatherAvgTemperature.size()), 2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算平均湿度
+        BigDecimal avgHumidity = weatherHumidity.isEmpty() ? BigDecimal.ZERO :
+                BigDecimal.valueOf(weatherHumidity.stream()
+                        .filter(Objects::nonNull)
+                        .mapToDouble(Double::doubleValue)
+                        .average()
+                        .orElse(0.0))
+                        .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算累计降雨量
+        BigDecimal totalRainfall = BigDecimal.valueOf(weatherRainfall.stream()
+                .filter(Objects::nonNull)
+                .mapToDouble(Double::doubleValue)
+                .sum())
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算平均风速
+        BigDecimal avgWindSpeed = BigDecimal.valueOf(weatherWindSpeed.stream()
+                .filter(Objects::nonNull)
+                .mapToDouble(Double::doubleValue)
+                .average()
+                .orElse(0.0))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算平均氮
+        BigDecimal avgN = BigDecimal.valueOf(weatherAvgSoilN.stream()
+                .filter(Objects::nonNull)
+                .mapToDouble(Double::doubleValue)
+                .average()
+                .orElse(0.0))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算平均磷
+        BigDecimal avgP = BigDecimal.valueOf(weatherAvgSoilP.stream()
+                .filter(Objects::nonNull)
+                .mapToDouble(Double::doubleValue)
+                .average()
+                .orElse(0.0))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        // 计算平均钾
+        BigDecimal avgK = BigDecimal.valueOf(weatherAvgSoilK.stream()
+                .filter(Objects::nonNull)
+                .mapToDouble(Double::doubleValue)
+                .average()
+                .orElse(0.0))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+
+        WeatherRealtimeData weatherRealtimeDataVo = new WeatherRealtimeData();
+        weatherRealtimeDataVo.setHumidity(avgHumidity);
+        weatherRealtimeDataVo.setTemperature(avgTemperature);
+        weatherRealtimeDataVo.setWindSpeed(avgWindSpeed);
+        weatherRealtimeDataVo.setRainfallA(totalRainfall);
+        weatherRealtimeDataVo.setSoilN(avgN);
+        weatherRealtimeDataVo.setSoilP(avgP);
+        weatherRealtimeDataVo.setSoilK(avgK);
+        weatherDataStatisticsVo.setWeatherRealtimeData(weatherRealtimeDataVo);
+
+        return weatherDataStatisticsVo;
+    }
+
+    /**
+     * 风向度数转为中文
+     *
+     * @param FX
+     * @return
+     */
+    private String getFX(int FX) {
+
+        if (FX > 348 || FX < 11) {
+            return "北";
+        }
+        if (FX > 11 && FX <= 33) {
+            return "北东北";
+        }
+        if (FX > 33 && FX <= 56) {
+            return "东北";
+        }
+        if (FX > 56 && FX <= 78) {
+            return "东东北";
+        }
+        if (FX > 78 && FX <= 101) {
+            return "东";
+        }
+        if (FX > 101 && FX <= 123) {
+            return "东东南";
+        }
+        if (FX > 123 && FX <= 146) {
+            return "东南";
+        }
+        if (FX > 146 && FX <= 168) {
+            return "南东南";
+        }
+        if (FX > 168 && FX <= 191) {
+            return "南";
+        }
+        if (FX > 191 && FX <= 213) {
+            return "南西南";
+        }
+        if (FX > 213 && FX <= 236) {
+            return "西南";
+        }
+        if (FX > 236 && FX <= 258) {
+            return "西西南";
+        }
+        if (FX > 258 && FX <= 281) {
+            return "西";
+        }
+        if (FX > 281 && FX <= 303) {
+            return "西西北";
+        }
+        if (FX > 303 && FX <= 326) {
+            return "西北";
+        }
+        if (FX > 326 && FX <= 348) {
+            return "北西北";
+        }
+
+        return "";
+    }
 }

+ 26 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/MachineNameFieldUserVo.java

@@ -0,0 +1,26 @@
+package com.ruoyi.base.vo;
+
+
+import com.ruoyi.base.domain.AgriculturalMachines;
+import com.ruoyi.base.domain.Field;
+import com.ruoyi.system.api.domain.SysUser;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MachineNameFieldUserVo {
+
+
+    List<AgriculturalMachines> machinesList;
+
+    List<Field> fields;
+
+    List<SysUser> users;
+
+
+}

+ 31 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/SensorDataStatisticsVo.java

@@ -0,0 +1,31 @@
+package com.ruoyi.base.vo;
+
+import com.ruoyi.base.domain.SensorDataStatistics;
+import com.ruoyi.base.domain.SensorRealtimeData;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SensorDataStatisticsVo {
+
+    // 传感器日期数据
+    List<String> sensorDate;
+    // 传感器温度数据
+    List<BigDecimal> maxTemperature;
+    List<BigDecimal> minTemperature;
+    // 传感器湿度数据
+    List<Double> avgHumidity;
+    // 传感器光照数据
+    List<Double> avgLightIntensity;
+    // 传感器土壤湿度数据
+    List<Double> avgSoilMoisture;
+
+    SensorRealtimeData sensorRealtimeData;
+}

+ 34 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/vo/WeatherDataStatisticsVo.java

@@ -0,0 +1,34 @@
+package com.ruoyi.base.vo;
+
+import com.ruoyi.base.domain.WeatherRealtimeData;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class WeatherDataStatisticsVo {
+
+
+    // 气象设备日期数据
+    List<String> weatherDate;
+    // 气象设备温度数据
+    List<BigDecimal> weatherMaxTemperature;
+    List<BigDecimal> weatherMinTemperature;
+    // 气象设备湿度数据
+    List<Double> weatherHumidity;
+    // 气象设备降雨量数据
+    List<Double> weatherRainfall;
+    // 气象设备风速数据
+    List<Double> weatherWindSpeed;
+
+    List<Double> weatherAvgSoilN;
+    List<Double> weatherAvgSoilP;
+    List<Double> weatherAvgSoilK;
+
+    WeatherRealtimeData weatherRealtimeData;
+}

+ 1 - 1
ruoyi-modules/ruoyi-base/src/main/resources/bootstrap.yml

@@ -6,7 +6,7 @@ server:
     max-http-form-post-size: -1
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-base

+ 180 - 0
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/AgriculturalMachinesMapper.xml

@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.base.mapper.AgriculturalMachinesMapper">
+
+    <resultMap type="AgriculturalMachines" id="AgriculturalMachinesResult">
+        <result property="id"    column="id"    />
+        <result property="machineCode"    column="machine_code"    />
+        <result property="machineName"    column="machine_name"    />
+        <result property="machineType"    column="machine_type"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="model"    column="model"    />
+        <result property="farmId"    column="farm_id"    />
+        <result property="fieldArea"    column="field_area"    />
+        <result property="managerId"    column="manager_id"    />
+        <result property="purchaseDate"    column="purchase_date"    />
+        <result property="manufactureDate"    column="manufacture_date"    />
+        <result property="onlineStatus"    column="online_status"    />
+        <result property="currentTask"    column="current_task"    />
+        <result property="currentField"    column="current_field"    />
+        <result property="maintenanceStatus"    column="maintenance_status"    />
+        <result property="locationStatus"    column="location_status"    />
+        <result property="alarmCount"    column="alarm_count"    />
+        <result property="description"    column="description"    />
+        <result property="imageUrl"    column="image_url"    />
+        <result property="status"    column="status"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="deptName"  column="dept_name"   />
+        <result property="managerName"  column="manager_name"   />
+    </resultMap>
+
+    <sql id="selectAgriculturalMachinesVo">
+        select id, machine_code, machine_name, machine_type, manufacturer, model, farm_id, field_area, manager_id, purchase_date, manufacture_date, online_status, current_task, current_field, maintenance_status, location_status, alarm_count, description, image_url, status, create_by, create_time, update_by, update_time, remark from agricultural_machines
+    </sql>
+
+    <select id="selectAgriculturalMachinesList" parameterType="AgriculturalMachines" resultMap="AgriculturalMachinesResult">
+        select am.id, am.machine_code, am.machine_name, am.machine_type, am.manufacturer, am.model, am.farm_id, am.field_area,
+        am.manager_id, am.purchase_date, am.manufacture_date, am.online_status, am.current_task, am.current_field,
+        am.maintenance_status, am.location_status, am.alarm_count, am.description, am.image_url, am.status,d.dept_name,
+        am.create_time, am.update_time,am.manager_name
+        from agricultural_machines am
+        left join sys_dept d on am.farm_id = d.dept_id
+        <where>
+            <if test="machineCode != null  and machineCode != ''"> and am.machine_code = #{machineCode}</if>
+            <if test="machineName != null  and machineName != ''"> and am.machine_name like concat('%', #{machineName}, '%')</if>
+            <if test="managerName != null  and managerName != ''"> and am.manager_name like concat('%', #{managerName}, '%')</if>
+            <if test="machineType != null  and machineType != ''"> and am.machine_type = #{machineType}</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and am.manufacturer = #{manufacturer}</if>
+            <if test="model != null  and model != ''"> and am.model = #{model}</if>
+            <if test="managerId != null "> and am.manager_id = #{managerId}</if>
+            <if test="purchaseDate != null "> and am.purchase_date = #{purchaseDate}</if>
+            <if test="manufactureDate != null "> and am.manufacture_date = #{manufactureDate}</if>
+            <if test="onlineStatus != null "> and am.online_status = #{onlineStatus}</if>
+            <if test="currentTask != null  and currentTask != ''"> and am.current_task = #{currentTask}</if>
+            <if test="currentField != null  and currentField != ''"> and am.current_field = #{currentField}</if>
+            <if test="maintenanceStatus != null  and maintenanceStatus != ''"> and am.maintenance_status = #{maintenanceStatus}</if>
+            <if test="locationStatus != null  and locationStatus != ''"> and am.location_status = #{locationStatus}</if>
+            <if test="status != null "> and am.status = #{status}</if>
+            <if test="deptIdList != null  and deptIdList.size() != 0"> and am.farm_id in (<foreach collection="deptIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+            <if test="params.beginPurchaseDate != null and params.beginPurchaseDate != '' and params.endPurchaseDate != null and params.endPurchaseDate != ''"> and purchase_date between #{params.beginPurchaseDate} and #{params.endPurchaseDate}</if>
+            <if test="params.beginManufactureDate != null and params.beginManufactureDate != '' and params.endManufactureDate != null and params.endManufactureDate != ''"> and manufacture_date between #{params.beginManufactureDate} and #{params.endManufactureDate}</if>
+            ${params.dataScope}
+        </where>
+    </select>
+
+    <select id="selectAgriculturalMachinesById" parameterType="Long" resultMap="AgriculturalMachinesResult">
+        select id, machine_code, machine_name, machine_type, manufacturer, model, farm_id, field_area, manager_id, purchase_date, manufacture_date,
+               online_status, current_task, current_field, maintenance_status, location_status, alarm_count, description, image_url, status, create_by,
+               create_time, update_by, update_time, remark ,manager_name
+        from agricultural_machines
+
+        where id = #{id}
+    </select>
+
+    <insert id="insertAgriculturalMachines" parameterType="AgriculturalMachines" useGeneratedKeys="true" keyProperty="id">
+        insert into agricultural_machines
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="machineCode != null and machineCode != ''">machine_code,</if>
+            <if test="machineName != null and machineName != ''">machine_name,</if>
+            <if test="machineType != null and machineType != ''">machine_type,</if>
+            <if test="manufacturer != null">manufacturer,</if>
+            <if test="model != null">model,</if>
+            <if test="farmId != null">farm_id,</if>
+            <if test="fieldArea != null">field_area,</if>
+            <if test="managerId != null">manager_id,</if>
+            <if test="managerName != null">manager_name,</if>
+            <if test="purchaseDate != null">purchase_date,</if>
+            <if test="manufactureDate != null">manufacture_date,</if>
+            <if test="onlineStatus != null">online_status,</if>
+            <if test="currentTask != null">current_task,</if>
+            <if test="currentField != null">current_field,</if>
+            <if test="maintenanceStatus != null">maintenance_status,</if>
+            <if test="locationStatus != null">location_status,</if>
+            <if test="alarmCount != null">alarm_count,</if>
+            <if test="description != null">description,</if>
+            <if test="imageUrl != null">image_url,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="machineCode != null and machineCode != ''">#{machineCode},</if>
+            <if test="machineName != null and machineName != ''">#{machineName},</if>
+            <if test="machineType != null and machineType != ''">#{machineType},</if>
+            <if test="manufacturer != null">#{manufacturer},</if>
+            <if test="model != null">#{model},</if>
+            <if test="farmId != null">#{farmId},</if>
+            <if test="fieldArea != null">#{fieldArea},</if>
+            <if test="managerId != null">#{managerId},</if>
+            <if test="managerName != null">#{managerName},</if>
+            <if test="purchaseDate != null">#{purchaseDate},</if>
+            <if test="manufactureDate != null">#{manufactureDate},</if>
+            <if test="onlineStatus != null">#{onlineStatus},</if>
+            <if test="currentTask != null">#{currentTask},</if>
+            <if test="currentField != null">#{currentField},</if>
+            <if test="maintenanceStatus != null">#{maintenanceStatus},</if>
+            <if test="locationStatus != null">#{locationStatus},</if>
+            <if test="alarmCount != null">#{alarmCount},</if>
+            <if test="description != null">#{description},</if>
+            <if test="imageUrl != null">#{imageUrl},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAgriculturalMachines" parameterType="AgriculturalMachines">
+        update agricultural_machines
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="machineCode != null and machineCode != ''">machine_code = #{machineCode},</if>
+            <if test="machineName != null and machineName != ''">machine_name = #{machineName},</if>
+            <if test="machineType != null and machineType != ''">machine_type = #{machineType},</if>
+            <if test="managerName != null and managerName != ''">manager_name = #{managerName},</if>
+            <if test="manufacturer != null">manufacturer = #{manufacturer},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="farmId != null">farm_id = #{farmId},</if>
+            <if test="fieldArea != null">field_area = #{fieldArea},</if>
+            <if test="managerId != null">manager_id = #{managerId},</if>
+            <if test="purchaseDate != null">purchase_date = #{purchaseDate},</if>
+            <if test="manufactureDate != null">manufacture_date = #{manufactureDate},</if>
+            <if test="onlineStatus != null">online_status = #{onlineStatus},</if>
+            <if test="currentTask != null">current_task = #{currentTask},</if>
+            <if test="currentField != null">current_field = #{currentField},</if>
+            <if test="maintenanceStatus != null">maintenance_status = #{maintenanceStatus},</if>
+            <if test="locationStatus != null">location_status = #{locationStatus},</if>
+            <if test="alarmCount != null">alarm_count = #{alarmCount},</if>
+            <if test="description != null">description = #{description},</if>
+            <if test="imageUrl != null">image_url = #{imageUrl},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAgriculturalMachinesById" parameterType="Long">
+        delete from agricultural_machines where id = #{id}
+    </delete>
+
+    <delete id="deleteAgriculturalMachinesByIds" parameterType="String">
+        delete from agricultural_machines where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 118 - 6
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/AlertRecordMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.base.mapper.AlertRecordMapper">
-    
+
     <resultMap type="com.ruoyi.base.domain.AlertRecord" id="AlertRecordResult">
         <id property="alertId" column="alert_id"/>
         <result property="deviceId" column="device_id"/>
@@ -23,8 +23,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="farmId" column="farm_id"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="fieldName" column="field_name"/>
     </resultMap>
-    
+
+
+    <sql id="selectAlertRecord">
+        select alert_id, device_id, device_name, device_type, alert_level, parameter_name, parameter_value, parameter_unit, threshold_value, alert_content, alert_time, process_status, process_time, processor, process_comment, farm_id, create_time, update_time from alert_record
+    </sql>
     <sql id="selectAlertRecordVo">
         select alert_id, device_id, device_name, device_type, alert_level,
         parameter_name, parameter_value, parameter_unit, threshold_value, alert_content,
@@ -32,13 +38,119 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         create_time, update_time
         from alert_record
     </sql>
-    
+
     <select id="selectAlertRecordsByDeviceId" parameterType="String" resultMap="AlertRecordResult">
-        <include refid="selectAlertRecordVo"/>
+        <include refid="selectAlertRecord"/>
         where device_id = #{deviceId}
         AND process_status = 0
         order by alert_time desc
         limit 3
     </select>
-    
-</mapper> 
+
+
+    <select id="selectAlertRecordList" parameterType="AlertRecord" resultMap="AlertRecordResult">
+
+        select ar.*,f.field_name,sd.dept_name
+        from alert_record ar
+        left join device d on ar.device_id = d.device_id
+        left join field_device fd  on fd.device_id = d.id and fd.status = 0
+        left join field f on fd.field_id = f.id
+        left join sys_dept sd on ar.farm_id = sd.dept_id
+
+        <where>
+            <if test="deviceId != null  and deviceId != ''"> and ar.device_id = #{deviceId}</if>
+            <if test="deviceName != null  and deviceName != ''"> and ar.device_name like concat('%', #{deviceName}, '%')</if>
+            <if test="deviceType != null  and deviceType != ''"> and ar.device_type = #{deviceType}</if>
+            <if test="alertLevel != null "> and ar.alert_level = #{alertLevel}</if>
+            <if test="params.beginAlertTime != null and params.beginAlertTime != '' and params.endAlertTime != null and params.endAlertTime != ''"> and alert_time between #{params.beginAlertTime} and #{params.endAlertTime}</if>
+            <if test="processStatus != null "> and ar.process_status = #{processStatus}</if>
+            <if test="farmId != null  and farmId != ''"> and farm_id = #{farmId}</if>
+            <if test="deptIdList != null  and deptIdList.size() != 0"> and ar.farm_id in (<foreach collection="deptIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+            <if test="fieldIdList != null  and fieldIdList.size() != 0"> and f.id in (<foreach collection="fieldIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+        </where>
+    </select>
+
+    <select id="selectAlertRecordByAlertId" parameterType="Long" resultMap="AlertRecordResult">
+        <include refid="selectAlertRecord"/>
+        where alert_id = #{alertId}
+    </select>
+
+    <insert id="insertAlertRecord" parameterType="AlertRecord" useGeneratedKeys="true" keyProperty="alertId">
+        insert into alert_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="deviceId != null and deviceId != ''">device_id,</if>
+            <if test="deviceName != null and deviceName != ''">device_name,</if>
+            <if test="deviceType != null and deviceType != ''">device_type,</if>
+            <if test="alertLevel != null">alert_level,</if>
+            <if test="parameterName != null">parameter_name,</if>
+            <if test="parameterValue != null">parameter_value,</if>
+            <if test="parameterUnit != null">parameter_unit,</if>
+            <if test="thresholdValue != null">threshold_value,</if>
+            <if test="alertContent != null and alertContent != ''">alert_content,</if>
+            <if test="alertTime != null">alert_time,</if>
+            <if test="processStatus != null">process_status,</if>
+            <if test="processTime != null">process_time,</if>
+            <if test="processor != null">processor,</if>
+            <if test="processComment != null">process_comment,</if>
+            <if test="farmId != null and farmId != ''">farm_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="deviceId != null and deviceId != ''">#{deviceId},</if>
+            <if test="deviceName != null and deviceName != ''">#{deviceName},</if>
+            <if test="deviceType != null and deviceType != ''">#{deviceType},</if>
+            <if test="alertLevel != null">#{alertLevel},</if>
+            <if test="parameterName != null">#{parameterName},</if>
+            <if test="parameterValue != null">#{parameterValue},</if>
+            <if test="parameterUnit != null">#{parameterUnit},</if>
+            <if test="thresholdValue != null">#{thresholdValue},</if>
+            <if test="alertContent != null and alertContent != ''">#{alertContent},</if>
+            <if test="alertTime != null">#{alertTime},</if>
+            <if test="processStatus != null">#{processStatus},</if>
+            <if test="processTime != null">#{processTime},</if>
+            <if test="processor != null">#{processor},</if>
+            <if test="processComment != null">#{processComment},</if>
+            <if test="farmId != null and farmId != ''">#{farmId},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateAlertRecord" parameterType="AlertRecord">
+        update alert_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="deviceId != null and deviceId != ''">device_id = #{deviceId},</if>
+            <if test="deviceName != null and deviceName != ''">device_name = #{deviceName},</if>
+            <if test="deviceType != null and deviceType != ''">device_type = #{deviceType},</if>
+            <if test="alertLevel != null">alert_level = #{alertLevel},</if>
+            <if test="parameterName != null">parameter_name = #{parameterName},</if>
+            <if test="parameterValue != null">parameter_value = #{parameterValue},</if>
+            <if test="parameterUnit != null">parameter_unit = #{parameterUnit},</if>
+            <if test="thresholdValue != null">threshold_value = #{thresholdValue},</if>
+            <if test="alertContent != null and alertContent != ''">alert_content = #{alertContent},</if>
+            <if test="alertTime != null">alert_time = #{alertTime},</if>
+            <if test="processStatus != null">process_status = #{processStatus},</if>
+            <if test="processTime != null">process_time = #{processTime},</if>
+            <if test="attachments != null">attachments = #{attachments},</if>
+            <if test="processor != null">processor = #{processor},</if>
+            <if test="processComment != null">process_comment = #{processComment},</if>
+            <if test="farmId != null and farmId != ''">farm_id = #{farmId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where alert_id = #{alertId}
+    </update>
+
+    <delete id="deleteAlertRecordByAlertId" parameterType="Long">
+        delete from alert_record where alert_id = #{alertId}
+    </delete>
+
+    <delete id="deleteAlertRecordByAlertIds" parameterType="String">
+        delete from alert_record where alert_id in
+        <foreach item="alertId" collection="array" open="(" separator="," close=")">
+            #{alertId}
+        </foreach>
+    </delete>
+
+</mapper>

+ 8 - 5
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/DeviceMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.base.mapper.DeviceMapper">
-    
+
     <resultMap type="com.ruoyi.base.domain.Device" id="DeviceResult">
         <result property="id"    column="id"    />
         <result property="deviceId"    column="device_id"    />
@@ -89,9 +89,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="installDate != null "> and de.install_date = #{installDate}</if>
             <if test="status != null "> and de.status = #{status}</if>
             <if test="lastActiveTime != null "> and de.last_active_time = #{lastActiveTime}</if>
+            ${params.dataScope}
         </where>
     </select>
-    
+
     <select id="selectDeviceById" parameterType="Long" resultMap="DeviceResult">
         select de.id, de.device_id, de.device_name, de.device_type_id, de.farm_id, de.model,
                de.manufacturer, de.install_date, de.status, de.last_active_time,d.dept_name,f.field_name,de.remark,longitude,latitude
@@ -130,12 +131,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectDeviceByunUser" resultMap="FieldPersonnelResult">
         select u.user_name,p.post_name,u.phonenumber,u.user_id,sd.dept_name
         from sys_user u
-                 left join field f on u.dept_id = f.farm_id
+                 left join field_personnel fp on u.user_id = fp.user_id
+                 left join field f on f.id = fp.field_id
                  left join sys_user_post sup on u.user_id = sup.user_id
                  left join sys_post p on sup.post_id = p.post_id
                  left join sys_dept sd on u.dept_id = sd.dept_id
         where u.user_id not in (select user_id from field_personnel where field_id = #{id} and status = 0)
           and u.dept_id = #{deptId}
+        group by u.user_id,p.post_name,sd.dept_name
     </select>
 
 
@@ -199,7 +202,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteDeviceByIds" parameterType="String">
-        delete from device where id in 
+        delete from device where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
@@ -295,4 +298,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         GROUP BY d.device_type_id
     </select>
-</mapper>
+</mapper>

+ 27 - 9
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/FieldMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.base.mapper.FieldMapper">
-    
+
     <resultMap type="Field" id="FieldResult">
         <result property="id"    column="id"    />
         <result property="fieldCode"    column="field_code"    />
@@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         (select count(*) from field_personnel where  status = 0 and field_id = fd.id) as bindUserCount
         from field fd
         left join sys_dept d on fd.farm_id = d.dept_id
-        <where>  
+        <where>
             <if test="fieldCode != null  and fieldCode != ''"> and field_code = #{fieldCode}</if>
             <if test="fieldName != null  and fieldName != ''"> and field_name like concat('%', #{fieldName}, '%')</if>
             <if test="deptIdList != null  and deptIdList.size() != 0"> and fd.farm_id in (<foreach collection="deptIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
@@ -81,22 +81,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="irrigationType != null  and irrigationType != ''"> and irrigation_type = #{irrigationType}</if>
             <if test="status != null  and status != ''"> and fd.status = #{status}</if>
             <if test="managerId != null "> and manager_id = #{managerId}</if>
+            <if test="managerName != null "> and manager_name like concat('%', #{managerName}, '%')</if>
             <if test="description != null  and description != ''"> and description = #{description}</if>
             <if test="locationData != null  and locationData != ''"> and location_data = #{locationData}</if>
-            <if test="params.beginfieldDate != null and params.beginfieldDate != '' and params.endfieldDate != null and params.endfieldDate != ''">
-             and created_time between #{params.beginfieldDate} and #{params.endfieldDate}
+            <if test="params.beginTime != null and params.beginTime != '' and params.endTime != null and params.endTime != ''">
+             and created_time between #{params.beginTime} and #{params.endTime}
              </if>
-
+            ${params.dataScope}
         </where>
     </select>
-    
+
     <select id="selectFieldById" parameterType="Long" resultMap="FieldResult">
         select fd.id, field_code, field_name, farm_id, field_type, grow_crops, fd.size, soil_type, manager_name,
-               irrigation_type, fd.status, manager_id, description, location_data, fd.created_time, fd.updated_time, fd.created_by, fd.updated_by, is_deleted ,d.dept_name, d.leader
+               irrigation_type, fd.status, manager_id, description, location_data, fd.created_time, fd.updated_time, fd.created_by, fd.updated_by, is_deleted ,d.dept_name, d.leader,
+               (select count(*) from field_device where  status = 0 and field_id = fd.id) as bindDeviceCount,
+               (select count(*) from field_personnel where  status = 0 and field_id = fd.id) as bindUserCount
         from field fd
                  left join sys_dept d on fd.farm_id = d.dept_id
         where id = #{id}
     </select>
+    <select id="selectFieldListName" parameterType="Field" resultMap="FieldResult">
+        select fd.id, field_name
+        from field fd
+        left join sys_dept d on fd.farm_id = d.dept_id
+        <where>
+            <if test="params.deptIdList != null">
+                and d.dept_id in
+                <foreach collection="params.deptIdList" item="deptId" separator="," open="(" close=")">
+                    #{deptId}
+                </foreach>
+            </if>
+            ${params.dataScope}
+        </where>
+
+    </select>
 
 
     <insert id="insertField" parameterType="Field" useGeneratedKeys="true" keyProperty="id">
@@ -174,7 +192,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteFieldByIds" parameterType="String">
-        delete from field where id in 
+        delete from field where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
@@ -254,4 +272,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         AND d.status = '1'
         GROUP BY fd.field_id
     </select>
-</mapper>
+</mapper>

+ 140 - 0
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/MachineAlarmRecordsMapper.xml

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.base.mapper.MachineAlarmRecordsMapper">
+
+    <resultMap type="MachineAlarmRecords" id="MachineAlarmRecordsResult">
+        <result property="id"    column="id"    />
+        <result property="machineId"    column="machine_id"    />
+        <result property="alarmType"    column="alarm_type"    />
+        <result property="alarmLevel"    column="alert_level"    />
+        <result property="alarmDesc"    column="alarm_desc"    />
+        <result property="alarmTime"    column="alarm_time"    />
+        <result property="handledStatus"    column="handled_status"    />
+        <result property="handlerId"    column="handler_id"    />
+        <result property="handlerName"    column="handler_name"    />
+        <result property="handleTime"    column="handle_time"    />
+        <result property="handleDesc"    column="handle_desc"    />
+        <result property="attachments"    column="attachments"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="deptName"  column="dept_name"   />
+        <result property="machineCode"  column="machine_code"   />
+        <result property="machineName"  column="machine_name"   />
+        <result property="machineType"  column="machine_type"   />
+    </resultMap>
+
+    <sql id="selectMachineAlarmRecordsVo">
+        select id, machine_id, alarm_type, alert_level, alarm_desc, alarm_time, handled_status, handler_id, handler_name, handle_time, handle_desc, attachments, create_by, create_time, update_by, update_time, remark from machine_alarm_records
+    </sql>
+
+    <select id="selectMachineAlarmRecordsList" parameterType="MachineAlarmRecords" resultMap="MachineAlarmRecordsResult">
+        select mar.id, mar.machine_id, mar.alarm_type, mar.alert_level, mar.alarm_desc, mar.alarm_time, mar.handled_status, mar.handler_id, mar.handler_name, mar.handle_time,
+        mar.handle_desc, mar.attachments, mar.create_by, mar.create_time, mar.update_by,mar.update_time, mar.remark,am.machine_code,am.machine_name,am.machine_type,sd.dept_name
+        from machine_alarm_records mar
+        left join agricultural_machines am on mar.machine_id = am.id
+        left join sys_dept sd on am.farm_id = sd.dept_id
+
+        <where>
+            <if test="machineCode != null  and machineCode != ''"> and am.machine_code = #{machineCode}</if>
+            <if test="machineType != null  and machineType != ''"> and am.machine_type = #{machineType}</if>
+            <if test="machineName != null  and machineName != ''"> and am.machine_name like concat('%', #{machineName}, '%')</if>
+            <if test="machineId != null "> and machine_id = #{machineId}</if>
+            <if test="alarmType != null  and alarmType != ''"> and alarm_type = #{alarmType}</if>
+            <if test="alarmLevel != null "> and alert_level = #{alarmLevel}</if>
+            <if test="alarmDesc != null  and alarmDesc != ''"> and alarm_desc = #{alarmDesc}</if>
+            <if test="alarmTime != null "> and alarm_time = #{alarmTime}</if>
+            <if test="handledStatus != null "> and handled_status = #{handledStatus}</if>
+            <if test="handlerId != null "> and handler_id = #{handlerId}</if>
+            <if test="handlerName != null  and handlerName != ''"> and handler_name like concat('%', #{handlerName}, '%')</if>
+            <if test="handleTime != null "> and handle_time = #{handleTime}</if>
+            <if test="handleDesc != null  and handleDesc != ''"> and handle_desc = #{handleDesc}</if>
+            <if test="attachments != null  and attachments != ''"> and attachments = #{attachments}</if>
+            <if test="deptIdList != null  and deptIdList.size() != 0"> and am.farm_id in (<foreach collection="deptIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+
+        </where>
+    </select>
+
+    <select id="selectMachineAlarmRecordsById" parameterType="Long" resultMap="MachineAlarmRecordsResult">
+        <include refid="selectMachineAlarmRecordsVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertMachineAlarmRecords" parameterType="MachineAlarmRecords" useGeneratedKeys="true" keyProperty="id">
+        insert into machine_alarm_records
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="machineId != null">machine_id,</if>
+            <if test="alarmType != null and alarmType != ''">alarm_type,</if>
+            <if test="alertLevel != null">alert_level,</if>
+            <if test="alarmDesc != null and alarmDesc != ''">alarm_desc,</if>
+            <if test="alarmTime != null">alarm_time,</if>
+            <if test="handledStatus != null">handled_status,</if>
+            <if test="handlerId != null">handler_id,</if>
+            <if test="handlerName != null">handler_name,</if>
+            <if test="handleTime != null">handle_time,</if>
+            <if test="handleDesc != null">handle_desc,</if>
+            <if test="attachments != null">attachments,</if>
+            <if test="createBy != null and createBy != ''">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="machineId != null">#{machineId},</if>
+            <if test="alarmType != null and alarmType != ''">#{alarmType},</if>
+            <if test="alertLevel != null">#{alertLevel},</if>
+            <if test="alarmDesc != null and alarmDesc != ''">#{alarmDesc},</if>
+            <if test="alarmTime != null">#{alarmTime},</if>
+            <if test="handledStatus != null">#{handledStatus},</if>
+            <if test="handlerId != null">#{handlerId},</if>
+            <if test="handlerName != null">#{handlerName},</if>
+            <if test="handleTime != null">#{handleTime},</if>
+            <if test="handleDesc != null">#{handleDesc},</if>
+            <if test="attachments != null">#{attachments},</if>
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateMachineAlarmRecords" parameterType="MachineAlarmRecords">
+        update machine_alarm_records
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="machineId != null">machine_id = #{machineId},</if>
+            <if test="alarmType != null and alarmType != ''">alarm_type = #{alarmType},</if>
+            <if test="alarmLevel != null">alert_level = #{alarmLevel},</if>
+            <if test="alarmDesc != null and alarmDesc != ''">alarm_desc = #{alarmDesc},</if>
+            <if test="alarmTime != null">alarm_time = #{alarmTime},</if>
+            <if test="handledStatus != null">handled_status = #{handledStatus},</if>
+            <if test="handlerId != null">handler_id = #{handlerId},</if>
+            <if test="handlerName != null">handler_name = #{handlerName},</if>
+            <if test="handleTime != null">handle_time = #{handleTime},</if>
+            <if test="handleDesc != null">handle_desc = #{handleDesc},</if>
+            <if test="attachments != null">attachments = #{attachments},</if>
+            <if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMachineAlarmRecordsById" parameterType="Long">
+        delete from machine_alarm_records where id = #{id}
+    </delete>
+
+    <delete id="deleteMachineAlarmRecordsByIds" parameterType="String">
+        delete from machine_alarm_records where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 146 - 0
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/MachineWorkRecordsMapper.xml

@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.base.mapper.MachineWorkRecordsMapper">
+
+    <resultMap type="MachineWorkRecords" id="MachineWorkRecordsResult">
+        <result property="id"    column="id"    />
+        <result property="machineId"    column="machine_id"    />
+        <result property="fieldId"    column="field_id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="taskType"    column="task_type"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="workArea"    column="work_area"    />
+        <result property="fuelConsumption"    column="fuel_consumption"    />
+        <result property="operatorId"    column="operator_id"    />
+        <result property="status"    column="status"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="machineCode"  column="machine_code"   />
+        <result property="machineName"  column="machine_name"   />
+        <result property="machineType"  column="machine_type"   />
+        <result property="deptName"  column="dept_name"   />
+        <result property="fieldName"  column="field_name"   />
+        <result property="userName"  column="user_name"   />
+        <result property="workHours"  column="work_hours"   />
+    </resultMap>
+
+    <sql id="selectMachineWorkRecordsVo">
+        select id, machine_id, field_id, task_name, task_type, start_time, end_time, work_area, fuel_consumption, operator_id, status, create_by, create_time, update_by, update_time, remark from machine_work_records
+    </sql>
+
+    <select id="selectMachineWorkRecordsList" parameterType="MachineWorkRecords" resultMap="MachineWorkRecordsResult">
+        select mwr.*,am.machine_code,am.machine_name,am.machine_type,sd.dept_name,f.field_name,su.user_name,ROUND(TIMESTAMPDIFF(SECOND, start_time, end_time) / 3600, 2) AS work_hours
+        from machine_work_records mwr
+        left join agricultural_machines am on mwr.machine_id = am.id
+        left join sys_dept sd on am.farm_id = sd.dept_id
+        left join field f on mwr.field_id = f.id
+        left join sys_user su on mwr.operator_id = su.user_id
+
+        <where>
+            <if test="machineCode != null  and machineCode != ''"> and am.machine_code = #{machineCode}</if>
+            <if test="machineType != null  and machineType != ''"> and am.machine_type = #{machineType}</if>
+            <if test="machineName != null  and machineName != ''"> and am.machine_name like concat('%', #{machineName}, '%')</if>
+            <if test="deptIdList != null  and deptIdList.size() != 0"> and am.farm_id in (<foreach collection="deptIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+            <if test="fieldIdList != null  and fieldIdList.size() != 0"> and f.id in (<foreach collection="fieldIdList" item="deptId" separator=",">#{deptId}</foreach>)</if>
+            <if test="machineId != null "> and machine_id = #{machineId}</if>
+            <if test="fieldId != null "> and field_id = #{fieldId}</if>
+            <if test="userName != null  and userName != ''"> and su.user_name like concat('%', #{userName}, '%')</if>
+            <if test="taskName != null  and taskName != ''"> and mwr.task_name like concat('%', #{taskName}, '%')</if>
+            <if test="taskType != null  and taskType != ''"> and mwr.task_type = #{taskType}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="workArea != null "> and work_area = #{workArea}</if>
+            <if test="fuelConsumption != null "> and fuel_consumption = #{fuelConsumption}</if>
+            <if test="operatorId != null "> and operator_id = #{operatorId}</if>
+            <if test="status != null  and status != ''"> and mwr.status = #{status}</if>
+            <if test="params.beginStartTime != null  and params.endStartTime != null ">
+                and mwr.start_time between #{params.beginStartTime} and #{params.endStartTime}
+            </if>
+            <if test="params.beginEndTime != null  and params.endEndTime != null ">
+                and mwr.end_time between #{params.beginEndTime} and #{params.endEndTime}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectMachineWorkRecordsById" parameterType="Long" resultMap="MachineWorkRecordsResult">
+        <include refid="selectMachineWorkRecordsVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertMachineWorkRecords" parameterType="MachineWorkRecords" useGeneratedKeys="true" keyProperty="id">
+        insert into machine_work_records
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="machineId != null">machine_id,</if>
+            <if test="fieldId != null">field_id,</if>
+            <if test="taskName != null and taskName != ''">task_name,</if>
+            <if test="taskType != null">task_type,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="workArea != null">work_area,</if>
+            <if test="fuelConsumption != null">fuel_consumption,</if>
+            <if test="operatorId != null">operator_id,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="machineId != null">#{machineId},</if>
+            <if test="fieldId != null">#{fieldId},</if>
+            <if test="taskName != null and taskName != ''">#{taskName},</if>
+            <if test="taskType != null">#{taskType},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="workArea != null">#{workArea},</if>
+            <if test="fuelConsumption != null">#{fuelConsumption},</if>
+            <if test="operatorId != null">#{operatorId},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMachineWorkRecords" parameterType="MachineWorkRecords">
+        update machine_work_records
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="machineId != null">machine_id = #{machineId},</if>
+            <if test="fieldId != null">field_id = #{fieldId},</if>
+            <if test="taskName != null and taskName != ''">task_name = #{taskName},</if>
+            <if test="taskType != null">task_type = #{taskType},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="workArea != null">work_area = #{workArea},</if>
+            <if test="fuelConsumption != null">fuel_consumption = #{fuelConsumption},</if>
+            <if test="operatorId != null">operator_id = #{operatorId},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMachineWorkRecordsById" parameterType="Long">
+        delete from machine_work_records where id = #{id}
+    </delete>
+
+    <delete id="deleteMachineWorkRecordsByIds" parameterType="String">
+        delete from machine_work_records where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 31 - 5
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/SensorRealtimeDataMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.base.mapper.SensorRealtimeDataMapper">
-    
+
     <resultMap type="SensorRealtimeData" id="SensorRealtimeDataResult">
         <result property="id"    column="id"    />
         <result property="deviceId"    column="device_id"    />
@@ -18,13 +18,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy"    column="update_by"    />
     </resultMap>
 
+
+    <resultMap type="SensorDataStatistics" id="SensorDataStatisticsResult">
+        <result property="id"    column="id"    />
+        <result property="date"    column="date"    />
+        <result property="sensorId"    column="sensor_id"    />
+        <result property="maxTemperature"    column="max_temperature"    />
+        <result property="minTemperature"    column="min_temperature"    />
+        <result property="avgHumidity"    column="avg_humidity"    />
+        <result property="avgLightIntensity"    column="avg_illumination"    />
+        <result property="avgSoilMoisture"    column="avg_soil_moisture"    />
+    </resultMap>
+
+
     <sql id="selectSensorRealtimeDataVo">
         select id, device_id, temperature, humidity, light_intensity, soil_moisture, collect_time, create_time, update_time, create_by, update_by from sensor_realtime_data
     </sql>
 
     <select id="selectSensorRealtimeDataList" parameterType="SensorRealtimeData" resultMap="SensorRealtimeDataResult">
         <include refid="selectSensorRealtimeDataVo"/>
-        <where>  
+        <where>
             <if test="deviceId != null  and deviceId != ''"> and device_id = #{deviceId}</if>
             <if test="temperature != null "> and temperature = #{temperature}</if>
             <if test="humidity != null "> and humidity = #{humidity}</if>
@@ -35,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
-    
+
     <select id="selectSensorRealtimeDataById" parameterType="Long" resultMap="SensorRealtimeDataResult">
         <include refid="selectSensorRealtimeDataVo"/>
         where id = #{id}
@@ -47,6 +60,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY collect_time DESC
             LIMIT 1;
     </select>
+    <select id="selectSensorStatisticsList" resultType="com.ruoyi.base.domain.SensorDataStatistics"
+            resultMap="SensorDataStatisticsResult">
+
+        select  date, max_temperature, min_temperature, avg_humidity, avg_illumination, avg_soil_moisture
+        from sensor_data_statistics
+        <where>
+            <if test="beginCollectTime != null  and endCollectTime != null ">
+                and date between #{beginCollectTime} and #{endCollectTime}
+            </if>
+            <if test="deviceId != null  and deviceId != ''"> and sensor_id = #{deviceId}</if>
+        </where>
+    </select>
+
 
     <insert id="insertSensorRealtimeData" parameterType="SensorRealtimeData" useGeneratedKeys="true" keyProperty="id">
         insert into sensor_realtime_data
@@ -119,9 +145,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteSensorRealtimeDataByIds" parameterType="String">
-        delete from sensor_realtime_data where id in 
+        delete from sensor_realtime_data where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 49 - 5
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/WeatherRealtimeDataMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.base.mapper.WeatherRealtimeDataMapper">
-    
+
     <resultMap type="WeatherRealtimeData" id="WeatherRealtimeDataResult">
         <result property="id"    column="id"    />
         <result property="deviceId"    column="device_id"    />
@@ -27,13 +27,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="rainfallA"    column="rainfall_a"    />
     </resultMap>
 
+
+    <resultMap type="WeatherDataStatistics" id="WeatherDataStatisticsResult">
+        <result property="id"    column="id"    />
+        <result property="date"    column="date"    />
+        <result property="deviceId"    column="device_id"    />
+        <result property="maxTemperature"    column="max_temperature"    />
+        <result property="minTemperature"    column="min_temperature"    />
+        <result property="avgTemperature"    column="min_temperature"    />
+        <result property="avgHumidity"    column="avg_humidity"    />
+        <result property="avgRainfall"    column="avg_rainfall"    />
+        <result property="avgWindSpeed"    column="avg_wind_speed"    />
+        <result property="avgSoilTemperature"    column="avg_soil_temperature"    />
+        <result property="avgSoilHumidity"    column="avg_soil_humidity"    />
+        <result property="avgSoilN"    column="avg_soil_n"    />
+        <result property="avgSoilP"    column="avg_soil_p"    />
+        <result property="avgSoilK"    column="avg_soil_k"    />
+        <result property="dateRainfallA"    column="date_rainfall_a"    />
+    </resultMap>
+
     <sql id="selectWeatherRealtimeDataVo">
         select id, device_id, temperature, humidity, rainfall, wind_direction, wind_speed, air_pressure, light_intensity, collect_time, create_time, update_time, create_by, update_by, soil_temperature, soil_humidity, soil_n, soil_p, soil_k, rainfall_a from weather_realtime_data
     </sql>
 
     <select id="selectWeatherRealtimeDataList" parameterType="WeatherRealtimeData" resultMap="WeatherRealtimeDataResult">
         <include refid="selectWeatherRealtimeDataVo"/>
-        <where>  
+        <where>
             <if test="deviceId != null  and deviceId != ''"> and device_id = #{deviceId}</if>
             <if test="temperature != null "> and temperature = #{temperature}</if>
             <if test="humidity != null "> and humidity = #{humidity}</if>
@@ -54,11 +73,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
-    
+
     <select id="selectWeatherRealtimeDataById" parameterType="Long" resultMap="WeatherRealtimeDataResult">
         <include refid="selectWeatherRealtimeDataVo"/>
         where id = #{id}
     </select>
+    <select id="selectWeatherRealtimeDataLatestTimeById" resultType="com.ruoyi.base.domain.WeatherRealtimeData"
+            resultMap="WeatherRealtimeDataResult">
+
+        select id, device_id, temperature, humidity, rainfall, wind_direction, wind_speed, air_pressure,
+               light_intensity, collect_time, create_time, update_time, create_by, update_by,
+               soil_temperature, soil_humidity, soil_n, soil_p, soil_k, rainfall_a
+        from weather_realtime_data
+        WHERE device_id = #{deviceId}
+        ORDER BY collect_time DESC
+            LIMIT 1;
+
+    </select>
+    <select id="selectWeatherStatisticsList" resultType="com.ruoyi.base.domain.WeatherDataStatistics"  resultMap="WeatherDataStatisticsResult">
+        select  date, max_temperature, min_temperature,avg_temperature, avg_humidity, avg_rainfall, avg_wind_speed,avg_soil_n, avg_soil_p, avg_soil_k
+        from weather_data_statistics
+        <where>
+            <if test="beginCollectTime != null  and endCollectTime != null ">
+                and date between #{beginCollectTime} and #{endCollectTime}
+            </if>
+            <if test="deviceId != null  and deviceId != ''"> and device_id = #{deviceId}</if>
+        </where>
+
+    </select>
 
     <insert id="insertWeatherRealtimeData" parameterType="WeatherRealtimeData" useGeneratedKeys="true" keyProperty="id">
         insert into weather_realtime_data
@@ -112,6 +154,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deviceId != null and deviceId != ''">device_id,</if>
             <if test="maxTemperature != null">max_temperature,</if>
             <if test="minTemperature != null">min_temperature,</if>
+            <if test="avgTemperature != null">avg_temperature,</if>
             <if test="avgHumidity != null">avg_humidity,</if>
             <if test="avgRainfall != null">avg_rainfall,</if>
             <if test="avgWindSpeed != null">avg_wind_speed,</if>
@@ -127,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deviceId != null and deviceId != ''">#{deviceId},</if>
             <if test="maxTemperature != null">#{maxTemperature},</if>
             <if test="minTemperature != null">#{minTemperature},</if>
+            <if test="avgTemperature != null">#{avgTemperature},</if>
             <if test="avgHumidity != null">#{avgHumidity},</if>
             <if test="avgRainfall != null">#{avgRainfall},</if>
             <if test="avgWindSpeed != null">#{avgWindSpeed},</if>
@@ -170,7 +214,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteWeatherRealtimeDataByIds" parameterType="String">
-        delete from weather_realtime_data where id in 
+        delete from weather_realtime_data where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
@@ -184,4 +228,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by collect_time desc
         LIMIT 1
     </select>
-</mapper>
+</mapper>

+ 2 - 1
ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 9300
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-file
@@ -17,6 +17,7 @@ spring:
         server-addr: 121.4.16.100:8848
         username: nacos
         password: nacos369
+        namespace: dev
       config:
         username: nacos
         password: nacos369

+ 1 - 1
ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 9202
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-gen

+ 6 - 3
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/DeviceStatisticsData.java

@@ -40,11 +40,8 @@ public class DeviceStatisticsData {
     public void execute() {
         //1、获取当前日期的前一天日期的起始日期和结束日期
         LocalDate currentDate = LocalDate.now();
-        // 获取前一天的日期
         LocalDate previousDate = currentDate.minusDays(1);
-        // 获取前一天的起始时间
         LocalDateTime startOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MIDNIGHT);
-        // 获取前一天的结束时间
         LocalDateTime endOfPreviousDay = LocalDateTime.of(previousDate, LocalTime.MAX);
         //2、查询传感器设备当前日期的前一天日期的统计数据
         SensorRealtimeData sensorRealtimeData = new SensorRealtimeData();
@@ -143,6 +140,11 @@ public class DeviceStatisticsData {
                                     .filter(Objects::nonNull)
                                     .min(BigDecimal::compareTo)
                                     .orElse(null);
+                            // 平均气温
+                            double avgTemperature = dataList.stream()
+                                    .mapToDouble(data -> data.getTemperature() != null ? data.getTemperature().doubleValue() : 0)
+                                    .average()
+                                    .orElse(0.0);
 
                             // 平均湿度
                             double avgHumidity = dataList.stream()
@@ -212,6 +214,7 @@ public class DeviceStatisticsData {
                             stats.setAvgSoilP(BigDecimal.valueOf(avgSoilP));
                             stats.setAvgSoilK(BigDecimal.valueOf(avgSoilK));
                             stats.setDateRainfallA(dateRainfallA);
+                            stats.setAvgTemperature(BigDecimal.valueOf(avgTemperature));
                             return stats;
                         })
                         .collect(Collectors.toList());

+ 1 - 1
ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 9203
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-job

+ 14 - 14
ruoyi-modules/ruoyi-system/pom.xml

@@ -13,57 +13,57 @@
     <description>
         ruoyi-system系统模块
     </description>
-	
+
     <dependencies>
-    	
+
     	<!-- SpringCloud Alibaba Nacos -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
-        
+
         <!-- SpringCloud Alibaba Nacos Config -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
-        
+
     	<!-- SpringCloud Alibaba Sentinel -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
         </dependency>
-        
+
     	<!-- SpringBoot Actuator -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
-        
+
         <!-- Mysql Connector -->
         <dependency>
             <groupId>com.mysql</groupId>
             <artifactId>mysql-connector-j</artifactId>
         </dependency>
-        
+
         <!-- RuoYi Common DataSource -->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-datasource</artifactId>
         </dependency>
-        
+
         <!-- RuoYi Common DataScope -->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-datascope</artifactId>
         </dependency>
-        
+
         <!-- RuoYi Common Log -->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-log</artifactId>
         </dependency>
-        
+
         <!-- RuoYi Common Swagger -->
         <dependency>
             <groupId>com.ruoyi</groupId>
@@ -98,8 +98,8 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
-                    <classifier>exec</classifier>
-                </configuration>
+                <classifier>exec</classifier>
+            </configuration>
                 <executions>
                     <execution>
                         <goals>
@@ -110,5 +110,5 @@
             </plugin>
         </plugins>
     </build>
-   
-</project>
+
+</project>

+ 20 - 3
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java

@@ -5,6 +5,9 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.system.domain.SysRoleDept;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -42,7 +45,7 @@ import com.ruoyi.system.service.ISysUserService;
 
 /**
  * 用户信息
- * 
+ *
  * @author ruoyi
  */
 @RestController
@@ -156,6 +159,19 @@ public class SysUserController extends BaseController
         return R.ok(sysUserVo);
     }
 
+
+    /**
+     * 根据岗位和部门获取当前用户信息
+     */
+    @InnerAuth
+    @GetMapping("/infoPost/{farmId}")
+    public R<List<SysUser>> infoPost(@PathVariable("farmId") Long farmId)
+    {
+        List<SysUser> sysUser = userService.selectUserByPostName(farmId);
+
+        return R.ok(sysUser);
+    }
+
     /**
      * 注册用户信息
      */
@@ -191,7 +207,7 @@ public class SysUserController extends BaseController
 
     /**
      * 获取用户信息
-     * 
+     *
      * @return 用户信息
      */
     @GetMapping("getInfo")
@@ -368,7 +384,8 @@ public class SysUserController extends BaseController
     /**
      * 获取部门树列表
      */
-    @RequiresPermissions("system:user:list")
+    /*@RequiresPermissions("system:user:list")*/
+    @RequiresPermissions(value = {"system:user:list","base:field:list"},logical = Logical.OR)
     @GetMapping("/deptTree")
     public AjaxResult deptTree(SysDept dept)
     {

+ 15 - 13
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -6,14 +6,14 @@ import com.ruoyi.system.api.domain.SysUser;
 
 /**
  * 用户表 数据层
- * 
+ *
  * @author ruoyi
  */
 public interface SysUserMapper
 {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param sysUser 用户信息
      * @return 用户信息集合信息
      */
@@ -21,7 +21,7 @@ public interface SysUserMapper
 
     /**
      * 根据条件分页查询已配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -29,7 +29,7 @@ public interface SysUserMapper
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -37,7 +37,7 @@ public interface SysUserMapper
 
     /**
      * 查询用户
-     * 
+     *
      * @param sysUser 用户名
      * @return 用户对象信息
      */
@@ -46,7 +46,7 @@ public interface SysUserMapper
 
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -54,7 +54,7 @@ public interface SysUserMapper
 
     /**
      * 新增用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -62,7 +62,7 @@ public interface SysUserMapper
 
     /**
      * 修改用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -70,7 +70,7 @@ public interface SysUserMapper
 
     /**
      * 修改用户头像
-     * 
+     *
      * @param userName 用户名
      * @param avatar 头像地址
      * @return 结果
@@ -79,7 +79,7 @@ public interface SysUserMapper
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param userName 用户名
      * @param password 密码
      * @return 结果
@@ -88,7 +88,7 @@ public interface SysUserMapper
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -96,7 +96,7 @@ public interface SysUserMapper
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param userIds 需要删除的用户ID
      * @return 结果
      */
@@ -104,7 +104,7 @@ public interface SysUserMapper
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param userName 用户名称
      * @return 结果
      */
@@ -127,4 +127,6 @@ public interface SysUserMapper
     public SysUser checkEmailUnique(String email);
 
     SysUser selectUserByPhoneNumber(String phoneNumber);
+
+    List<SysUser> selectUserByPostName(Long farmId);
 }

+ 34 - 23
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -4,20 +4,21 @@ import java.util.List;
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.domain.SysRoleDept;
 import com.ruoyi.system.domain.UniAppLoginBody;
 
 import javax.servlet.http.HttpServletRequest;
 
 /**
  * 用户 业务层
- * 
+ *
  * @author ruoyi
  */
 public interface ISysUserService
 {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -25,7 +26,7 @@ public interface ISysUserService
 
     /**
      * 根据条件分页查询已分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -33,7 +34,7 @@ public interface ISysUserService
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -41,7 +42,7 @@ public interface ISysUserService
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
@@ -55,9 +56,19 @@ public interface ISysUserService
      */
     public SysUser selectUserByPhoneNumber(String phoneNumber);
 
+
+
+    /**
+     * 根据岗位和部门获取当前用户信息
+     *
+     * @param farmId 部门
+     * @return 用户对象信息
+     */
+    List<SysUser> selectUserByPostName(Long farmId);
+
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -65,7 +76,7 @@ public interface ISysUserService
 
     /**
      * 根据用户ID查询用户所属角色组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
@@ -73,7 +84,7 @@ public interface ISysUserService
 
     /**
      * 根据用户ID查询用户所属岗位组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
@@ -81,7 +92,7 @@ public interface ISysUserService
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -105,21 +116,21 @@ public interface ISysUserService
 
     /**
      * 校验用户是否允许操作
-     * 
+     *
      * @param user 用户信息
      */
     public void checkUserAllowed(SysUser user);
 
     /**
      * 校验用户是否有数据权限
-     * 
+     *
      * @param userId 用户id
      */
     public void checkUserDataScope(Long userId);
 
     /**
      * 新增用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -127,7 +138,7 @@ public interface ISysUserService
 
     /**
      * 注册用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -135,7 +146,7 @@ public interface ISysUserService
 
     /**
      * 修改用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -143,7 +154,7 @@ public interface ISysUserService
 
     /**
      * 用户授权角色
-     * 
+     *
      * @param userId 用户ID
      * @param roleIds 角色组
      */
@@ -151,7 +162,7 @@ public interface ISysUserService
 
     /**
      * 修改用户状态
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -159,7 +170,7 @@ public interface ISysUserService
 
     /**
      * 修改用户基本信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -167,7 +178,7 @@ public interface ISysUserService
 
     /**
      * 修改用户头像
-     * 
+     *
      * @param userName 用户名
      * @param avatar 头像地址
      * @return 结果
@@ -176,7 +187,7 @@ public interface ISysUserService
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -184,7 +195,7 @@ public interface ISysUserService
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param userName 用户名
      * @param password 密码
      * @return 结果
@@ -193,7 +204,7 @@ public interface ISysUserService
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -201,7 +212,7 @@ public interface ISysUserService
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param userIds 需要删除的用户ID
      * @return 结果
      */
@@ -209,7 +220,7 @@ public interface ISysUserService
 
     /**
      * 导入用户数据
-     * 
+     *
      * @param userList 用户数据列表
      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
      * @param operName 操作用户

+ 17 - 17
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -23,7 +23,7 @@ import com.ruoyi.system.service.ISysDeptService;
 
 /**
  * 部门管理 服务实现
- * 
+ *
  * @author ruoyi
  */
 @Service
@@ -37,7 +37,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 查询部门管理数据
-     * 
+     *
      * @param dept 部门信息
      * @return 部门信息集合
      */
@@ -50,7 +50,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 查询部门树结构信息
-     * 
+     *
      * @param dept 部门信息
      * @return 部门树信息集合
      */
@@ -63,7 +63,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 构建前端所需要树结构
-     * 
+     *
      * @param depts 部门列表
      * @return 树结构列表
      */
@@ -90,7 +90,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 构建前端所需要下拉树结构
-     * 
+     *
      * @param depts 部门列表
      * @return 下拉树结构列表
      */
@@ -103,7 +103,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 根据角色ID查询部门树信息
-     * 
+     *
      * @param roleId 角色ID
      * @return 选中部门列表
      */
@@ -116,7 +116,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 根据部门ID查询信息
-     * 
+     *
      * @param deptId 部门ID
      * @return 部门信息
      */
@@ -128,7 +128,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 根据ID查询所有子部门(正常状态)
-     * 
+     *
      * @param deptId 部门ID
      * @return 子部门数
      */
@@ -140,7 +140,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 是否存在子节点
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果
      */
@@ -153,7 +153,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 查询部门是否存在用户
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果 true 存在 false 不存在
      */
@@ -166,7 +166,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 校验部门名称是否唯一
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
@@ -184,7 +184,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 校验部门是否有数据权限
-     * 
+     *
      * @param deptId 部门id
      */
     @Override
@@ -204,7 +204,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 新增保存部门信息
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
@@ -223,7 +223,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 修改保存部门信息
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
@@ -251,7 +251,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 修改该部门的父级部门状态
-     * 
+     *
      * @param dept 当前部门
      */
     private void updateParentDeptStatusNormal(SysDept dept)
@@ -263,7 +263,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 修改子元素关系
-     * 
+     *
      * @param deptId 被修改的部门ID
      * @param newAncestors 新的父ID集合
      * @param oldAncestors 旧的父ID集合
@@ -283,7 +283,7 @@ public class SysDeptServiceImpl implements ISysDeptService
 
     /**
      * 删除部门管理信息
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果
      */

+ 40 - 35
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -11,7 +11,8 @@ import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.ip.IpUtils;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.api.model.LoginUser;
-import com.ruoyi.system.domain.UniAppLoginBody;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.mapper.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,14 +28,6 @@ import com.ruoyi.common.datascope.annotation.DataScope;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.domain.SysPost;
-import com.ruoyi.system.domain.SysUserPost;
-import com.ruoyi.system.domain.SysUserRole;
-import com.ruoyi.system.mapper.SysPostMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysUserPostMapper;
-import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
@@ -42,7 +35,7 @@ import org.springframework.web.client.RestTemplate;
 
 /**
  * 用户 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
@@ -82,7 +75,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -95,7 +88,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询已分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -108,7 +101,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -121,7 +114,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
@@ -143,9 +136,21 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.selectUserByPhoneNumber(phoneNumber);
     }
 
+
+    /**
+     * 根据岗位和部门获取当前用户信息
+     *
+     * @param farmId 部门
+     * @return 用户对象信息
+     */
+    @Override
+    public List<SysUser> selectUserByPostName(Long farmId) {
+        return userMapper.selectUserByPostName(farmId);
+    }
+
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -157,7 +162,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 查询用户所属角色组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
@@ -174,7 +179,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 查询用户所属岗位组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
@@ -191,7 +196,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -245,7 +250,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户是否允许操作
-     * 
+     *
      * @param user 用户信息
      */
     @Override
@@ -259,7 +264,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户是否有数据权限
-     * 
+     *
      * @param userId 用户id
      */
     @Override
@@ -279,7 +284,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -298,7 +303,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 注册用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -310,7 +315,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -332,7 +337,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 用户授权角色
-     * 
+     *
      * @param userId 用户ID
      * @param roleIds 角色组
      */
@@ -346,7 +351,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改用户状态
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -358,7 +363,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改用户基本信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -370,7 +375,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改用户头像
-     * 
+     *
      * @param userName 用户名
      * @param avatar 头像地址
      * @return 结果
@@ -383,7 +388,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -395,7 +400,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param userName 用户名
      * @param password 密码
      * @return 结果
@@ -408,7 +413,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增用户角色信息
-     * 
+     *
      * @param user 用户对象
      */
     public void insertUserRole(SysUser user)
@@ -418,7 +423,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增用户岗位信息
-     * 
+     *
      * @param user 用户对象
      */
     public void insertUserPost(SysUser user)
@@ -441,7 +446,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增用户角色信息
-     * 
+     *
      * @param userId 用户ID
      * @param roleIds 角色组
      */
@@ -464,7 +469,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -481,7 +486,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param userIds 需要删除的用户ID
      * @return 结果
      */
@@ -503,7 +508,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 导入用户数据
-     * 
+     *
      * @param userList 用户数据列表
      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
      * @param operName 操作用户

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 9201
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-system

+ 6 - 6
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml

@@ -12,23 +12,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<delete id="deleteRoleDeptByRoleId" parameterType="Long">
 		delete from sys_role_dept where role_id=#{roleId}
 	</delete>
-	
+
 	<select id="selectCountRoleDeptByDeptId" resultType="Integer">
 	    select count(1) from sys_role_dept where dept_id=#{deptId}
 	</select>
-	
+
 	<delete id="deleteRoleDept" parameterType="Long">
  		delete from sys_role_dept where role_id in
  		<foreach collection="array" item="roleId" open="(" separator="," close=")">
  			#{roleId}
-        </foreach> 
+        </foreach>
  	</delete>
-	
+
 	<insert id="batchRoleDept">
 		insert into sys_role_dept(role_id, dept_id) values
 		<foreach item="item" index="index" collection="list" separator=",">
 			(#{item.roleId},#{item.deptId})
 		</foreach>
 	</insert>
-	
-</mapper> 
+
+</mapper>

+ 28 - 20
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -28,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
     </resultMap>
-	
+
     <resultMap id="deptResult" type="SysDept">
         <id     property="deptId"    column="dept_id"     />
         <result property="parentId"  column="parent_id"   />
@@ -38,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="leader"    column="leader"      />
         <result property="status"    column="dept_status" />
     </resultMap>
-	
+
     <resultMap id="RoleResult" type="SysRole">
         <id     property="roleId"       column="role_id"        />
         <result property="roleName"     column="role_name"      />
@@ -47,7 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="dataScope"    column="data_scope"     />
         <result property="status"       column="role_status"    />
     </resultMap>
-	
+
 	<sql id="selectUserVo">
         select u.user_id, u.dept_id,u.open_id, u.user_type, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
@@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		    left join sys_user_role ur on u.user_id = ur.user_id
 		    left join sys_role r on r.role_id = ur.role_id
     </sql>
-    
+
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
 		select u.user_id, u.dept_id, u.nick_name, u.open_id, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
@@ -89,7 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
@@ -106,7 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
@@ -124,7 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectUserByUser" parameterType="com.ruoyi.system.api.domain.SysUser" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 		<where>
@@ -137,20 +137,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="selectUserVo"/>
 		where u.user_name = #{userName} and u.del_flag = '0'
 	</select>
-	
+
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
 	</select>
-	
+
 	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
 	</select>
-	
+
 	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
 	</select>
-	
+
 	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 	</select>
@@ -158,6 +158,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="selectUserVo"/>
 		where u.phonenumber = #{phoneNumber} and u.del_flag = '0'
 	</select>
+    <select id="selectUserByPostName" resultMap="SysUserResult" >
+		select su.*
+		from sys_user su
+				 left join sys_user_post sup on su.user_id = sup.user_id
+				 left join sys_post sp on sup.post_id = sp.post_id
+		where su.dept_id = #{farmId} and sp.post_code = 'AgriculturalMachineryDriver';
+
+	</select>
 
     <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
@@ -194,7 +202,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			sysdate()
  		)
 	</insert>
-	
+
 	<update id="updateUser" parameterType="SysUser">
  		update sys_user
  		<set>
@@ -222,28 +230,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			</if>
 		</where>
 	</update>
-	
+
 	<update id="updateUserStatus" parameterType="SysUser">
  		update sys_user set status = #{status} where user_id = #{userId}
 	</update>
-	
+
 	<update id="updateUserAvatar" parameterType="SysUser">
  		update sys_user set avatar = #{avatar} where user_name = #{userName}
 	</update>
-	
+
 	<update id="resetUserPwd" parameterType="SysUser">
  		update sys_user set password = #{password} where user_name = #{userName}
 	</update>
-	
+
 	<delete id="deleteUserById" parameterType="Long">
  		update sys_user set del_flag = '2' where user_id = #{userId}
  	</delete>
- 	
+
  	<delete id="deleteUserByIds" parameterType="Long">
  		update sys_user set del_flag = '2' where user_id in
  		<foreach collection="array" item="userId" open="(" separator="," close=")">
  			#{userId}
-        </foreach> 
+        </foreach>
  	</delete>
-	
-</mapper> 
+
+</mapper>

+ 1 - 1
ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
   port: 9100
 
 # Spring
-spring: 
+spring:
   application:
     # 应用名称
     name: ruoyi-monitor