diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
index 0a7f4cf..1a3081a 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -154,6 +154,8 @@ public class ShiroConfig {
// update-begin--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢
//错误路径排除
filterChainDefinitionMap.put("/error", "anon");
+ //内部接口
+ filterChainDefinitionMap.put("/appmana/inner/**", "anon");
// update-end--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢
diff --git a/pom.xml b/pom.xml
index 2807a3f..ad36b16 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
2.17.0
1.2.9
+ 4.0.2
diff --git a/zh-module-applet/zh-applet-admin/pom.xml b/zh-module-applet/zh-applet-admin/pom.xml
index 4b9298b..c9e0e0e 100644
--- a/zh-module-applet/zh-applet-admin/pom.xml
+++ b/zh-module-applet/zh-applet-admin/pom.xml
@@ -68,5 +68,6 @@
org.springframework.security
spring-security-crypto
+
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/InnerController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/InnerController.java
new file mode 100644
index 0000000..294d394
--- /dev/null
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/InnerController.java
@@ -0,0 +1,50 @@
+package org.jeecg.modules.appmana.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.iot.common.VOIntegrateStatistic;
+import org.jeecg.common.iot.common.VOSurvIntegrateParam;
+import org.jeecg.common.iot.common.VOSurvIntegrateResult;
+import org.jeecg.common.iot.common.VOWaterSurvIntegrateParam;
+import org.jeecg.modules.appmana.service.impl.IotCommonServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/appmana/inner/api")
+@Api(tags="内部接口")
+public class InnerController {
+
+ @Autowired
+ private IotCommonServiceImpl iotCommonService;
+
+
+ @ApiOperation(value = "1. 空气土壤监测综合数据统计", notes = "")
+ @ApiOperationSupport(order = 1)
+ @PostMapping(value = "/survIntegrateStatistic")
+ public Result survIntegrateStatistic(@RequestBody VOSurvIntegrateParam voSurvIntegrateParam) {
+ VOIntegrateStatistic voIntegrateStatistic = iotCommonService.airSoilIntegrate(voSurvIntegrateParam);
+ return Result.ok(voIntegrateStatistic);
+ }
+
+ @ApiOperation(value = "2. 水质监测综合数据统计", notes = "")
+ @ApiOperationSupport(order = 2)
+ @PostMapping(value = "/WaterIntegrateStatistic")
+ public Result WaterIntegrateStatistic(@RequestBody VOWaterSurvIntegrateParam voSurvIntegrateParam) {
+ VOIntegrateStatistic voIntegrateStatistic = iotCommonService.waterIntegrate(voSurvIntegrateParam);
+ return Result.OK(voIntegrateStatistic);
+ }
+
+}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/StatisticsContoller.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/StatisticsContoller.java
new file mode 100644
index 0000000..c7a943e
--- /dev/null
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/StatisticsContoller.java
@@ -0,0 +1,44 @@
+package org.jeecg.modules.appmana.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.iot.common.VOIntegrateStatistic;
+import org.jeecg.common.iot.common.VOSurvIntegrateParam;
+import org.jeecg.common.iot.common.VOWaterSurvIntegrateParam;
+import org.jeecg.modules.appmana.service.impl.IotCommonServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Slf4j
+@RestController
+@RequestMapping("/appmana/statistic")
+@Api(tags="内部接口")
+public class StatisticsContoller {
+
+ @Autowired
+ private IotCommonServiceImpl iotCommonService;
+
+
+ @ApiOperation(value = "1. 空气土壤监测综合数据统计", notes = "")
+ @ApiOperationSupport(order = 1)
+ @PostMapping(value = "/airSoilIntegrate")
+ public Result survIntegrateStatistic(@RequestBody VOSurvIntegrateParam voSurvIntegrateParam) {
+ VOIntegrateStatistic voIntegrateStatistic = iotCommonService.airSoilIntegrate(voSurvIntegrateParam);
+ return Result.ok(voIntegrateStatistic);
+ }
+
+ @ApiOperation(value = "2. 水质监测综合数据统计", notes = "")
+ @ApiOperationSupport(order = 2)
+ @PostMapping(value = "/WaterIntegrateStatistic")
+ public Result WaterIntegrateStatistic(@RequestBody VOWaterSurvIntegrateParam voSurvIntegrateParam) {
+ VOIntegrateStatistic voIntegrateStatistic = iotCommonService.waterIntegrate(voSurvIntegrateParam);
+ return Result.OK(voIntegrateStatistic);
+ }
+}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDeviceDeployMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDeviceDeployMapper.java
index 58ca908..7b32aea 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDeviceDeployMapper.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDeviceDeployMapper.java
@@ -22,4 +22,6 @@ public interface SurvDeviceDeployMapper extends BaseMapper {
SurvDeviceDeploy getOneByCode(String deployCode);
List getDeviceListByStations(@Param("stationCode") String stationCode,@Param("deployTypeList") List deployTypeList);
+
+ List getByIdsWithZhiBiao(@Param("ids")List ids);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataAirMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataAirMapper.java
index 8d007c0..c8fe886 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataAirMapper.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataAirMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.entity.SurvHisdataAir;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.common.iot.common.VOSurvIntegrateAirDetail;
import org.jeecg.common.vo.AirDataTrans;
import java.time.LocalDateTime;
@@ -23,4 +24,6 @@ public interface SurvHisdataAirMapper extends BaseMapper {
List getMonthSummry(@Param("airList") List airList, @Param("yearStr") String yearStr);
List listByParams(@Param("deployCode")String deployCode, @Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime);
+
+ List integrateSummary(@Param("tenantId") String tenantId,@Param("airDevice") List airDevice,@Param("timeDataFormat") String timeDataFormat, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataSoilMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataSoilMapper.java
index 716daa7..13a5121 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataSoilMapper.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvHisdataSoilMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.entity.SurvHisdataSoil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.common.iot.common.VOSurvIntegrateSoilDetail;
import org.jeecg.common.vo.DataTrans;
import java.time.LocalDateTime;
@@ -23,4 +24,5 @@ public interface SurvHisdataSoilMapper extends BaseMapper {
List listByParams(@Param("deployCode") String deployCode,@Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime")LocalDateTime endDateTime);
+ List integrateSummary(@Param("tenantId")String tenantId, @Param("soilDevice") List soilDevice,@Param("timeDataFormat") String timeDataFormat, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/ScEquZhibiaoMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/ScEquZhibiaoMapper.xml
index e21142e..319923e 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/ScEquZhibiaoMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/ScEquZhibiaoMapper.xml
@@ -2,15 +2,23 @@
-
\ No newline at end of file
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvAlertRecordMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvAlertRecordMapper.xml
index c61aa43..7cfca38 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvAlertRecordMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvAlertRecordMapper.xml
@@ -32,7 +32,7 @@
- select s.STATION_NAME from surv_device_deploy t left join surv_station_info s on t.STATION_CODE = s.STATION_CODE where t.DEPLOY_CODE= #{DEPLOY_CODE}
+ select s.STATION_NAME from surv_device_deploy t left join surv_station_info s on t.STATION_CODE = s.STATION_CODE where t.IS_DEL = 0 AND t.DEPLOY_CODE= #{DEPLOY_CODE}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml
index b28182d..c10f9dd 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml
@@ -48,6 +48,11 @@
+
+
+
+
ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL,DEVICE_LONGLAT,PROTOCOL_CODE,PROTOCOL_TYPE,DEPLOY_CATE,DEPLOY_SECONDARY_TYPE,CATE_ID,SURV_CONFIG_ID
@@ -71,12 +76,12 @@
- select t.STATION_NAME from surv_station_info t join surv_device_deploy s on s.STATION_CODE = t.STATION_CODE where s.DEPLOY_CODE = #{deplyCode}
+ select t.STATION_NAME from surv_station_info t join surv_device_deploy s on s.STATION_CODE = t.STATION_CODE where s.DEPLOY_CODE = #{deplyCode} AND s.IS_DEL = 0
- select from surv_device_deploy where 1=1
+ select from surv_device_deploy where IS_DEL = 0
and STATION_CODE = #{query.stationCode}
@@ -90,7 +95,7 @@
- select DEPLOY_CODE from surv_device_deploy where 1=1
+ select DEPLOY_CODE from surv_device_deploy where IS_DEL = 0
and DEPLOY_TYPE = #{deployType}
@@ -100,12 +105,13 @@
- select from surv_device_deploy where DEPLOY_CODE = #{deployCode} limit 1
+ select from surv_device_deploy where IS_DEL = 0 AND DEPLOY_CODE = #{deployCode} limit 1
select from surv_device_deploy
+ AND IS_DEL = 0
and DEPLOY_TYPE IN
@@ -118,4 +124,14 @@
order by SORT_NO,CREATE_TIME desc
+
+
+
+ select *
+ from surv_device_deploy
+ where IS_DEL = 0 AND ID IN
+
+ #{id}
+
+
\ No newline at end of file
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataAirMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataAirMapper.xml
index 7c08bbe..8599540 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataAirMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataAirMapper.xml
@@ -29,11 +29,12 @@
+
- ID,DATA_AIR_TEMP,DATA_AIR_WET,DATA_AIR_PRESS,DATA_RAIN_FALL,DATA_WIND_SPEED,DATA_WIND_DIRECTION,DATA_SUN_FALLOUT,DATA_SUN_TOTAL,DATA_RAIN_TOTAL,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TRANS_DATE,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME
+ ID,DATA_AIR_TEMP,DATA_AIR_WET,DATA_AIR_PRESS,DATA_RAIN_FALL,DATA_WIND_SPEED,DATA_WIND_DIRECTION,DATA_SUN_FALLOUT,DATA_SUN_TOTAL,DATA_RAIN_TOTAL,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TRANS_DATE,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_ID
@@ -81,4 +82,44 @@
select from surv_hisdata_air where DEVICE_CODE = #{deployCode} AND DATA_DATE_TIME >= #{startDateTime} AND DATA_DATE_TIME <= #{endDateTime} order by DATA_DATE_TIME DESC
+
+
+ select date_format(t.DATA_DATE_TIME,#{timeDataFormat}) as dates,
+ ifnull(ROUND(avg(cast(DATA_AIR_TEMP as decimal(10,1))), 2),'0') as dataAirTemp,
+ ifnull(ROUND(avg(cast(DATA_AIR_WET as decimal(10,1))), 2),'0') as dataAirWet,
+ ifnull(ROUND(avg(cast(DATA_AIR_PRESS as decimal(10,1))), 2),'0') as dataAirPress,
+ ifnull(ROUND(avg(cast(DATA_RAIN_FALL as decimal(10,1))), 2),'0') as dataRainFall,
+ ifnull(ROUND(avg(cast(DATA_WIND_SPEED as decimal(10,1))), 2),'0') as dataWindSpeed,
+ ifnull(ROUND(avg(cast(DATA_WIND_DIRECTION as decimal(10,1))), 2),'0') as dataWindDirection,
+ ifnull(ROUND(MAX(cast(DATA_SUN_TOTAL as decimal(10,1))), 2),'0') as dataSunTotal,
+ ifnull(ROUND(avg(cast(DATA_SUN_FALLOUT as decimal(10,1))), 2),'0') as dataSunFallout,
+
+ ifnull(ROUND(MAX(cast(DATA_RAIN_TOTAL as decimal(10,1))), 2),'0') as dataRainTotal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ from surv_hisdata_air t
+
+
+ AND TENANT_ID = #{tenantId}
+
+ AND DEVICE_CODE IN
+
+ #{id}
+
+ and DATA_DATE_TIME between #{startTime} and #{endTime}
+ group by dates
+
+
\ No newline at end of file
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataSoilMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataSoilMapper.xml
index 81f6d49..8b3d772 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataSoilMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvHisdataSoilMapper.xml
@@ -30,11 +30,12 @@
+
- ID,DATA_SOIL_TEMP,DATA_SOIL_WET,DATA_SOIL_SALT,DATA_SOIL_TEMP2,DATA_SOIL_WET2,DATA_SOIL_TEMP3,DATA_SOIL_WET3,DATA_SOIL_DDL,DATA_SOIL_DDL2,DATA_SOIL_DDL3,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TRANS_DATE,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME
+ ID,DATA_SOIL_TEMP,DATA_SOIL_WET,DATA_SOIL_SALT,DATA_SOIL_TEMP2,DATA_SOIL_WET2,DATA_SOIL_TEMP3,DATA_SOIL_WET3,DATA_SOIL_DDL,DATA_SOIL_DDL2,DATA_SOIL_DDL3,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TRANS_DATE,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_ID
@@ -67,4 +68,54 @@
select from surv_hisdata_soil where DEVICE_CODE = #{deployCode} AND DATA_DATE_TIME >= #{startDateTime} AND DATA_DATE_TIME <= #{endDateTime} order by DATA_DATE_TIME DESC
+
+
+
+ select date_format(t.DATA_DATE_TIME,#{timeDataFormat}) as dates,
+ ifnull(ROUND(avg(cast(DATA_SOIL_TEMP as decimal(10,1))), 2),'0') as dataSoilTemp,
+ ifnull(ROUND(avg(cast(DATA_SOIL_WET as decimal(10,1))), 2),'0') as dataSoilWet,
+ ifnull(ROUND(avg(cast(DATA_SOIL_SALT as decimal(10,1))), 2),'0') as dataSoilSalt,
+ ifnull(ROUND(avg(cast(DATA_SOIL_TEMP2 as decimal(10,1))), 2),'0') as dataSoilTemp2,
+ ifnull(ROUND(avg(cast(DATA_SOIL_WET2 as decimal(10,1))), 2),'0') as dataSoilWet2,
+ ifnull(ROUND(avg(cast(DATA_SOIL_TEMP3 as decimal(10,1))), 2),'0') as dataSoilTemp3,
+ ifnull(ROUND(avg(cast(DATA_SOIL_WET3 as decimal(10,1))), 2),'0') as dataSoilWet3,
+
+
+ ifnull(ROUND(avg(cast(DATA_SOIL_DDL as decimal(10,1))), 2),'0') as dataSoilDdl,
+ ifnull(ROUND(avg(cast(DATA_SOIL_DDL2 as decimal(10,1))), 2),'0') as dataSoilDdl2,
+ ifnull(ROUND(avg(cast(DATA_SOIL_DDL3 as decimal(10,1))), 2),'0') as dataSoilDdl3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ from surv_hisdata_soil t
+
+
+ AND TENANT_ID = #{tenantId}
+
+ AND DEVICE_CODE IN
+
+ #{id}
+
+ and DATA_DATE_TIME between #{startTime} and #{endTime}
+
+ group by dates order by dates
+
\ No newline at end of file
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataAirMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataAirMapper.xml
index dcab51a..9d23838 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataAirMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataAirMapper.xml
@@ -29,6 +29,7 @@
+
@@ -43,10 +44,11 @@
+
- ID,DATA_AIR_TEMP,DATA_AIR_WET,DATA_AIR_PRESS,DATA_RAIN_FALL,DATA_WIND_SPEED,DATA_WIND_DIRECTION,DATA_SUN_FALLOUT,DATA_SUN_TOTAL,DATA_RAIN_TOTAL,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME
+ ID,DATA_AIR_TEMP,DATA_AIR_WET,DATA_AIR_PRESS,DATA_RAIN_FALL,DATA_WIND_SPEED,DATA_WIND_DIRECTION,DATA_SUN_FALLOUT,DATA_SUN_TOTAL,DATA_RAIN_TOTAL,DATA_DATE_TIME,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_ID
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataSoilMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataSoilMapper.xml
index edd0378..faea552 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataSoilMapper.xml
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvTransdataSoilMapper.xml
@@ -29,7 +29,8 @@
-
+
+
@@ -44,10 +45,11 @@
+
- ID,DATA_SOIL_TEMP,DATA_SOIL_WET,DATA_SOIL_SALT,DATA_DATE_TIME,DATA_SOIL_TEMP2,DATA_SOIL_WET2,DATA_SOIL_TEMP3,DATA_SOIL_WET3,DATA_SOIL_DDL,DATA_SOIL_DDL2,DATA_SOIL_DDL3,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME
+ ID,DATA_SOIL_TEMP,DATA_SOIL_WET,DATA_SOIL_SALT,DATA_DATE_TIME,DATA_SOIL_TEMP2,DATA_SOIL_WET2,DATA_SOIL_TEMP3,DATA_SOIL_WET3,DATA_SOIL_DDL,DATA_SOIL_DDL2,DATA_SOIL_DDL3,DATA_GATHER_TYPE,STATION_ID,DEVICE_ID,STATION_CODE,DEVICE_CODE,CORP_ID,STATION_NAME,DEVICE_NAME,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_ID
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/IScEquZhibiaoService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/IScEquZhibiaoService.java
index f7a3cce..479db10 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/IScEquZhibiaoService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/IScEquZhibiaoService.java
@@ -16,4 +16,6 @@ public interface IScEquZhibiaoService extends IService {
List getAllChemical(List deviceList);
Integer getALlZhiBiaoCount();
+
+ List getListByEquid(String deployId);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java
index 78b0e14..860cf3c 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java
@@ -30,4 +30,9 @@ public interface ISurvDeviceDeployService extends IService {
void saveDeploy(SurvDeviceDeploy survDeviceDeploy);
void updateDeploy(SurvDeviceDeploy survDeviceDeploy);
+
+
+ List getByIdsWithZhiBiao(List deployId);
+
+ List getAllDevice(List deployTypes);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataAirService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataAirService.java
index 2eaf0cb..c9158aa 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataAirService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataAirService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.entity.SurvHisdataAir;
import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.iot.common.VOSurvIntegrateAirDetail;
import org.jeecg.common.vo.AirDataTrans;
import java.time.LocalDateTime;
@@ -22,4 +23,6 @@ public interface ISurvHisdataAirService extends IService {
List getMonthSummry(List airList, String yearStr);
List listByParams(String deployCode, LocalDateTime startDateTime, LocalDateTime endDateTime);
+
+ List integrateSummary(String tenantId, List airDevice, String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataSoilService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataSoilService.java
index 299746a..264c83c 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataSoilService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvHisdataSoilService.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.entity.SurvHisdataSoil;
import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.iot.common.VOSurvIntegrateSoilDetail;
import org.jeecg.common.vo.DataTrans;
import java.time.LocalDateTime;
@@ -23,4 +24,6 @@ public interface ISurvHisdataSoilService extends IService {
IPage pages(IPage page, SurvHisdataSoil survHisdataSoil,List deviceList);
List listByParams(String deployCode, LocalDateTime startDateTime, LocalDateTime endDateTime);
+
+ List integrateSummary(String tenantId, List soilDevice, String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataAirService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataAirService.java
index d1a4cb2..343e78f 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataAirService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataAirService.java
@@ -20,4 +20,6 @@ public interface ISurvTransdataAirService extends IService {
SurvTransdataAirVo getNewestData(String deployCode);
IPage pages(Page page, SurvTransdataAir survTransdataAir, List deviceList);
+
+ SurvTransdataAir getOneByDeviceCode(String deployCode);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataSoilService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataSoilService.java
index f93d449..d63f462 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataSoilService.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvTransdataSoilService.java
@@ -21,4 +21,6 @@ public interface ISurvTransdataSoilService extends IService {
IPage pages(Page page, SurvTransdataSoil survTransdataSoil, List deviceList);
+
+ SurvTransdataSoil getOneByDeviceCode(String deployCode);
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonServiceImpl.java
new file mode 100644
index 0000000..4474537
--- /dev/null
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonServiceImpl.java
@@ -0,0 +1,1045 @@
+package org.jeecg.modules.appmana.service.impl;
+
+import cn.hutool.core.lang.Assert;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.constant.IotConstants;
+import org.jeecg.common.constant.PollutionConstants;
+import org.jeecg.common.constant.enums.PollutionEnum;
+import org.jeecg.common.entity.ScEquZhibiao;
+import org.jeecg.common.entity.SurvConfig;
+import org.jeecg.common.entity.SurvDeviceDeploy;
+import org.jeecg.common.iot.common.*;
+import org.jeecg.common.util.DateTimeRangeUtils;
+import org.jeecg.common.util.ReflectionUtils;
+import org.jeecg.common.vo.CommonDataTrans;
+import org.jeecg.modules.appmana.service.ISurvDeviceDeployService;
+import org.jeecg.modules.appmana.service.ISurvHisdataAirService;
+import org.jeecg.modules.appmana.service.ISurvHisdataSoilService;
+import org.jeecg.modules.appmana.utils.CommonUtils;
+import org.jeecg.modules.appmana.utils.Iotutils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class IotCommonServiceImpl {
+ @Autowired
+ @Lazy
+ private ISurvDeviceDeployService fDeviceDeployService;
+ @Autowired
+ @Lazy
+ private SurvConfigServiceImpl configService;
+ @Autowired
+ @Lazy
+ private ISurvHisdataAirService hisdataAirService;
+ @Autowired
+ @Lazy
+ private ISurvHisdataSoilService hisdataSoilService;
+
+
+ public VOIntegrateStatistic airSoilIntegrate(VOSurvIntegrateParam voSurvIntegrateParam){
+ //获取所有设备
+ List deployTypes = new ArrayList<>();
+ deployTypes.add(PollutionConstants.AIR_SURV);
+ deployTypes.add(PollutionConstants.SOIL_SURV);
+ List deploys = fDeviceDeployService.getAllDevice(deployTypes);
+ VOIntegrateStatistic voIntegrateStatistic = new VOIntegrateStatistic();
+ if(!deploys.isEmpty()){
+ voSurvIntegrateParam.setDeployIds(deploys.stream().map(SurvDeviceDeploy::getId).collect(Collectors.toList()));
+ VOSurvIntegrateResult voSurvIntegrateResult = survDataIntegrateStatistic(voSurvIntegrateParam);
+ List> voSurvIntegrateTotals = transToMapList(voSurvIntegrateResult);
+ voIntegrateStatistic.setObjResults(voSurvIntegrateResult.getSurvResult());
+ voIntegrateStatistic.setTableHead(voSurvIntegrateResult.getHeaders());
+ voIntegrateStatistic.setTableIndex(voSurvIntegrateResult.getIndexs());
+ voIntegrateStatistic.setTableData(voSurvIntegrateTotals);
+ voIntegrateStatistic.setTableData2(transToArr(voSurvIntegrateResult.getHeaders(),voSurvIntegrateTotals));
+ voIntegrateStatistic.setRealTimeData(voSurvIntegrateResult.getLiveData());
+ }
+
+ return voIntegrateStatistic;
+ }
+
+
+ public VOIntegrateStatistic waterIntegrate(VOWaterSurvIntegrateParam voSurvIntegrateParam) {
+ //获取所有设备
+ List deployTypes = new ArrayList<>();
+ deployTypes.add(PollutionConstants.WATER_ORIENT);
+ List deploys = fDeviceDeployService.getAllDevice(deployTypes);
+ VOIntegrateStatistic voIntegrateStatistic = new VOIntegrateStatistic();
+ if(!deploys.isEmpty()) {
+ voSurvIntegrateParam.setDeployIds(deploys.stream().map(SurvDeviceDeploy::getId).collect(Collectors.toList()));
+ VOSurvIntegrateResult voSurvIntegrateResult = WaterIntegrateStatistic(voSurvIntegrateParam);
+ List> voSurvIntegrateTotals = transToMapList(voSurvIntegrateResult);
+ voIntegrateStatistic.setObjResults(voSurvIntegrateResult.getSurvResult());
+ voIntegrateStatistic.setTableHead(voSurvIntegrateResult.getHeaders());
+ voIntegrateStatistic.setTableIndex(voSurvIntegrateResult.getIndexs());
+ voIntegrateStatistic.setTableData(voSurvIntegrateTotals);
+ voIntegrateStatistic.setTableData2(transToArr(voSurvIntegrateResult.getHeaders(), voSurvIntegrateTotals));
+ voIntegrateStatistic.setRealTimeData(voSurvIntegrateResult.getLiveData());
+ }
+ return voIntegrateStatistic;
+ }
+
+ /**
+ * 监测设备综合统计
+ * @param voSurvIntegrateParam
+ * @return
+ */
+ public VOSurvIntegrateResult survDataIntegrateStatistic(VOSurvIntegrateParam voSurvIntegrateParam) {
+ VOSurvIntegrateResult result = new VOSurvIntegrateResult();
+ //step 1,获取所需查询的设备
+ List deploys = new ArrayList<>();
+ //当前农场所配置的所有监测项目,只有配置过的。
+ Map totalSurvItems = new HashMap<>();
+
+ //0租户
+ String tenantId = "0";
+ List items = new ArrayList<>();
+ if(!CollectionUtils.isEmpty(voSurvIntegrateParam.getDeployIds())){
+ deploys = fDeviceDeployService.getByIdsWithZhiBiao(voSurvIntegrateParam.getDeployIds());
+ if(!deploys.isEmpty()){
+ for (SurvDeviceDeploy deploy : deploys) {
+ if(deploy.getZhibiaos()!=null && !deploy.getZhibiaos().isEmpty()){
+ for (ScEquZhibiao fScEquZhibiao : deploy.getZhibiaos()) {
+ items.add(fScEquZhibiao.getEntityField());
+ }
+ }
+ }
+ }
+ }
+
+ //无设备直接返回
+ if(CollectionUtils.isEmpty(deploys)){
+ return result;
+ }else{
+ if(!items.isEmpty()){
+ for (String item : items) {
+ totalSurvItems.put(item,item);
+ }
+ }
+ }
+
+ //step 2,获取设备数据
+ List airDevice = new ArrayList<>();
+ List soilDevice = new ArrayList<>();
+ List commonDataTransList = new ArrayList<>();
+ for (SurvDeviceDeploy deploy : deploys) {
+ switch (deploy.getDeployType()){
+ case PollutionConstants.AIR_SURV:
+ airDevice.add(deploy.getDeployCode());
+ commonDataTransList.addAll(CommonUtils.transData(deploy, false, null, null, null, null).getTransData());
+ break;
+ case PollutionConstants.SOIL_SURV:
+ soilDevice.add(deploy.getDeployCode());
+ commonDataTransList.addAll(CommonUtils.transData(deploy, false, null, null, null, null).getTransData());
+ break;
+ }
+ }
+ String timeDataFormat = "";
+ LocalDateTime startDateTime = null;
+ LocalDateTime endDateTime = null;
+ LocalDate now = LocalDate.now();
+ DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter.ofPattern("yyyy-MM");
+ switch (voSurvIntegrateParam.getSummrayMode()){
+ case IotConstants.day_hours:
+ timeDataFormat = "%Y-%m-%d %H";
+ LocalDate days = null;
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy-MM-dd");
+ Assert.notNull(isValid, "时间格式不正确");
+ days = LocalDate.parse(voSurvIntegrateParam.getStartTime(), dateTimeFormatter3);
+ } else {
+ days = now;
+ }
+ startDateTime = LocalDateTime.of(days, LocalTime.MIN);
+ endDateTime = LocalDateTime.of(days, LocalTime.MAX).withNano(999999000);
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.HOUR, "yyyy-MM-dd HH"));
+ break;
+ case IotConstants.month_days:
+ timeDataFormat = "%Y-%m-%d";
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ int lengthof = voSurvIntegrateParam.getStartTime().length();
+ if (lengthof == 10) {
+ LocalDate timse = LocalDate.parse(voSurvIntegrateParam.getStartTime(), dateTimeFormatter3);
+ startDateTime = LocalDateTime.of(timse.withDayOfMonth(1), LocalTime.MIN);
+ endDateTime = LocalDateTime.of(startDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX).withNano(999999000);
+ } else {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy-MM");
+ Assert.notNull(isValid, "时间格式不正确");
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ startDateTime = LocalDateTime.parse(voSurvIntegrateParam.getStartTime() + "-01 00:00:00", dtf);
+ endDateTime = LocalDateTime.of(startDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX).withNano(999999000);
+ }
+ } else {
+ LocalDate date = LocalDate.of(now.getYear(), now.getMonth(), 1);
+ startDateTime = LocalDateTime.of(date,LocalTime.MIN);
+ endDateTime = LocalDateTime.of(now, LocalTime.MAX).withNano(999999000);
+ }
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.DAY, "yyyy-MM-dd"));
+ break;
+ case IotConstants.year_months:
+ timeDataFormat = "%Y-%m";
+ Integer year = null;
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy");
+ Assert.notNull(isValid, "时间格式不正确");
+ year = Integer.parseInt(voSurvIntegrateParam.getStartTime());
+ } else {
+ year = now.getYear();
+ }
+ LocalDate date = LocalDate.of(year, 1, 1);
+ LocalDate edate = LocalDate.of(year, 12, 31);
+ startDateTime = LocalDateTime.of(date,LocalTime.MIN);
+ endDateTime = LocalDateTime.of(edate, LocalTime.MAX).withNano(999999000);
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.MONTH, "yyyy-MM"));
+ result.setSubIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.DAY, "yyyy-MM-dd"));
+ break;
+ }
+
+ SurvConfig fSurvConfig = configService.getOneByTypeWithTenant(tenantId, IotConstants.surv_itemname);
+ cn.hutool.json.JSONObject configs = null;
+ if (fSurvConfig != null) {
+ configs = fSurvConfig.getConfigJson();
+ }
+ cn.hutool.json.JSONObject desConfig = null;
+ cn.hutool.json.JSONObject iconConfig = null;
+ String bsIconPath = "";
+ String bsIconPath2 = "";
+ String h5IconPath = "";
+ String appIconPath = "";
+ String midIconPath = "";
+ if (configs != null) {
+ desConfig = configs.getJSONObject("des");
+ iconConfig = configs.getJSONObject("icons");
+ bsIconPath = configs.getStr("bsIconPath");
+ bsIconPath2 = configs.getStr("bsIconPath2");
+ h5IconPath = configs.getStr("h5IconPath");
+ appIconPath = configs.getStr("appIconPath");
+ midIconPath = configs.getStr("midIconPath");
+ }
+
+ List survItems = new ArrayList<>();
+ Map> filterMap = new HashMap<>();
+ Map> accFilterMap = new HashMap<>();
+ if(!airDevice.isEmpty()) {
+ List airs = hisdataAirService.integrateSummary(null, airDevice, timeDataFormat, startDateTime, endDateTime);
+ if (airs.isEmpty()) {//如果airs为空,即设备未采集任何数据,则补充一条0数据,用于构造
+ VOSurvIntegrateAirDetail ent = new VOSurvIntegrateAirDetail();
+ Class extends VOSurvIntegrateAirDetail> airClass = ent.getClass();
+ Field[] fields = airClass.getDeclaredFields();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if (!"dates".equals(field.getName())) {
+ try {
+ field.set(ent, "0");
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ continue;
+ }
+ }
+ field.setAccessible(false);
+ }
+ airs.add(ent);
+ }
+ if (!airs.isEmpty()) {
+ int counts = 0;
+ for (VOSurvIntegrateAirDetail air : airs) {
+ Class extends VOSurvIntegrateAirDetail> personClass = air.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if (!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(air);
+ if (values != null) {
+ String val = values.toString();
+
+ if (StringUtils.isNotBlank(val)) {
+ if ("dates".equals(field.getName())) {
+ curIndex = val;
+ } else {
+ eleMap.put(field.getName(), val);
+ filterMap.put(curIndex, eleMap);
+ if (counts == 0) {
+ survItems.add(field.getName());
+ }
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ counts++;
+ }
+ }
+ }
+
+ if(!soilDevice.isEmpty()){
+ List soils = hisdataSoilService.integrateSummary(null,soilDevice,timeDataFormat,startDateTime,endDateTime);
+ if(soils.isEmpty()){//如果soils为空,即设备未采集任何数据,则补充一条0数据,用于构造
+ VOSurvIntegrateSoilDetail ent = new VOSurvIntegrateSoilDetail();
+ Class extends VOSurvIntegrateSoilDetail> soilClass = ent.getClass();
+ Field[] fields = soilClass.getDeclaredFields();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if(!"dates".equals(field.getName())) {
+ try{
+ field.set(ent,"0");
+ }catch (IllegalAccessException e){
+ e.printStackTrace();
+ continue;
+ }
+ }
+ field.setAccessible(false);
+ }
+ soils.add(ent);
+ }
+ if(!soils.isEmpty()){
+ int counts = 0;
+ for (VOSurvIntegrateSoilDetail soil : soils) {
+ Class extends VOSurvIntegrateSoilDetail> personClass = soil.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if(!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(soil);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ if("dates".equals(field.getName())){
+ curIndex = val;
+ }else{
+ eleMap.put(field.getName(),val);
+ Map airData = filterMap.get(curIndex);
+ if(airData != null){
+ eleMap.putAll(airData);
+ }
+ filterMap.put(curIndex, eleMap);
+ if(counts==0){
+ survItems.add(field.getName());
+ }
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ counts++;
+ }
+ }
+ }
+
+ //mk2 年月份数据时,需要拉取日数据重新进行计算
+ if(IotConstants.year_months.equals(voSurvIntegrateParam.getSummrayMode())){
+ timeDataFormat = "%Y-%m-%d";
+ List dayAir = hisdataAirService.integrateSummary(null,airDevice,timeDataFormat,startDateTime,endDateTime);
+ if(!dayAir.isEmpty()){
+ for (VOSurvIntegrateAirDetail dayData : dayAir) {
+ Class extends VOSurvIntegrateAirDetail> personClass = dayData.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if(!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(dayData);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ if("dates".equals(field.getName())){
+ curIndex = val;
+ }else{
+ eleMap.put(field.getName(),val);
+ accFilterMap.put(curIndex, eleMap);
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+
+
+ Map accItems = new HashMap<>();
+ LinkedHashMap> dataMap = new LinkedHashMap<>();
+ LinkedHashMap hisHourData = new LinkedHashMap<>();
+ for (String index : result.getIndexs()) {
+ Map ele = filterMap.get(index);
+ for (String survItem : survItems) {
+ List dataList = dataMap.get(survItem);
+ if(dataList == null){
+ dataList = new ArrayList<>();
+ }
+ if(ele != null){
+ String val = ele.get(survItem);
+ if(val==null){//如果配置了此监测项,但是在这个时段没有数据,则补充0
+ val = "0";
+ }
+ BigDecimal cVal = new BigDecimal(val);
+ int dataCounts = dataList.size();
+ if(Iotutils.isEntityAccumulate(survItem)){//累计监测项处理
+ accItems.put(survItem,survItem);//记录需要处理的检测项
+ if(IotConstants.day_hours.equals(voSurvIntegrateParam.getSummrayMode())){//小时模式,处理差值,计算增量
+ BigDecimal finalData = BigDecimal.ZERO;
+ if(dataCounts == 0){//第一条数据,减0
+ finalData = cVal.subtract(BigDecimal.ZERO);
+ }else{
+ int lastKey = dataCounts-1;
+ BigDecimal lastData = hisHourData.get(survItem+"_"+lastKey);
+ finalData = cVal.subtract(lastData);
+ }
+ val = Iotutils.toStringData(finalData);
+ hisHourData.put(survItem+"_"+dataCounts,cVal);
+ }
+ }
+ dataList.add(val!=null?val:"0");
+ }else{//无数据做补充
+ dataList.add("0");
+ }
+ dataMap.put(survItem,dataList);
+ }
+ }
+ //mk2 年月份模式,处理累计型数据
+ if(IotConstants.year_months.equals(voSurvIntegrateParam.getSummrayMode())){
+ Map> dataPool = new LinkedHashMap<>();
+ //step 1 遍历日数据,存入map,统计为每月的各项监测值的和
+ for (String index : result.getSubIndexs()) {
+ Map accEle = accFilterMap.get(index);
+ LocalDate indexDate = LocalDate.parse(index,dateTimeFormatter3);
+ String monthKey = indexDate.format(dateTimeFormatter4);
+ LinkedHashMap hisData = dataPool.get(monthKey);
+ if(hisData == null){
+ hisData = new LinkedHashMap<>();
+ }
+ for (String itemKey : accItems.keySet()) {
+ BigDecimal itemVal = hisData.get(itemKey);
+ if(itemVal==null){
+ itemVal = BigDecimal.ZERO;
+ }
+ if(accEle != null){
+ String val = accEle.get(itemKey);
+ BigDecimal cVal = new BigDecimal(val);
+ BigDecimal finalVal = cVal.add(itemVal);
+ hisData.put(itemKey,finalVal);
+ }else{//无数据时跳过,只处理有数据的
+
+ }
+ dataPool.put(monthKey,hisData);
+ }
+ }
+
+ //将dataMap中填充的均值统计清除,重新处理
+ for (String itemKey : accItems.keySet()) {
+ dataMap.remove(itemKey);
+ }
+ //step 2 组装为月数据
+ for (String index : result.getIndexs()) {
+ LinkedHashMap monthData = dataPool.get(index);
+ for (String itemKey : accItems.keySet()) {
+ List dataList = dataMap.get(itemKey);
+ if(dataList == null){
+ dataList = new ArrayList<>();
+ }
+ dataList.add(Iotutils.toStringData(monthData.get(itemKey)));
+ dataMap.put(itemKey,dataList);
+ }
+ }
+
+ }
+ result.setSurvResult(dataMap);
+ //遍历数据值,翻译
+ List eleList = new ArrayList<>();
+ if(!dataMap.isEmpty()){
+ for (String s : dataMap.keySet()) {
+ if (s.startsWith("data")) {
+ PollutionEnum pollutionEnum = PollutionEnum.catchMessage(s);
+ String iconFinalName = pollutionEnum.getIconName();
+ String itemFinalName = pollutionEnum.getDescription();
+ String bsIcon = pollutionEnum.getBsIcon();
+ if (configs != null) {
+ String itemName = desConfig != null ? desConfig.getStr(pollutionEnum.getCode()) : "";
+ String iconName = iconConfig != null ? iconConfig.getStr(pollutionEnum.getCode()) : "";
+ if (StringUtils.isNotBlank(itemName)) {
+ itemFinalName = itemName;
+ }
+ if (StringUtils.isNotBlank(iconName)) {
+ iconFinalName = iconName;
+ }
+ if (StringUtils.isNotBlank(bsIconPath)) {
+ bsIcon = bsIconPath + iconFinalName;
+ }
+ }
+ VOSurvElement voSurvElement = new VOSurvElement();
+ voSurvElement.setEleDesc(itemFinalName+"("+pollutionEnum.getUnit()+")");
+ voSurvElement.setEleField(s);
+ eleList.add(voSurvElement);
+ }
+ }
+ }
+ result.setHeaders(eleList);
+ result.setLiveData(commonDataTransList);
+ return result;
+ }
+
+ public List> transToMapList(VOSurvIntegrateResult voSurvIntegrateResult) {
+ List> result = new ArrayList<>();
+ if(voSurvIntegrateResult!=null && voSurvIntegrateResult.getSurvResult()!=null){
+ if(!voSurvIntegrateResult.getSurvResult().isEmpty()){
+ Map> dataMap = new HashMap<>();
+ for (String s : voSurvIntegrateResult.getSurvResult().keySet()) {
+ dataMap.put(s,voSurvIntegrateResult.getSurvResult().get(s));
+ }
+ //所有日期
+ int counts = 0;
+ for (String index : voSurvIntegrateResult.getIndexs()) {
+ LinkedHashMap voSurvIntegrateTotal = new LinkedHashMap<>();
+ voSurvIntegrateTotal.put("dates",index);
+ for (VOSurvElement header : voSurvIntegrateResult.getHeaders()) {
+ List list = dataMap.get(header.getEleField());
+ String val = list.get(counts);
+ voSurvIntegrateTotal.put(header.getEleField(),val);
+ }
+ result.add(voSurvIntegrateTotal);
+ counts++;
+ }
+ }
+ }
+ return result;
+ }
+
+ public List transToList(VOSurvIntegrateResult voSurvIntegrateResult) {
+ //导出bug处理
+ List result = new ArrayList<>();
+ if(voSurvIntegrateResult!=null && voSurvIntegrateResult.getSurvResult()!=null){
+ if(!voSurvIntegrateResult.getSurvResult().isEmpty()){
+ Map> dataMap = new HashMap<>();
+ for (String s : voSurvIntegrateResult.getSurvResult().keySet()) {
+ dataMap.put(s,voSurvIntegrateResult.getSurvResult().get(s));
+ }
+ //所有日期
+ int counts = 0;
+ for (String index : voSurvIntegrateResult.getIndexs()) {
+ VOSurvIntegrateTotal voSurvIntegrateTotal = new VOSurvIntegrateTotal();
+ voSurvIntegrateTotal.setDates(index);
+ for (VOSurvElement header : voSurvIntegrateResult.getHeaders()) {
+ List list = dataMap.get(header.getEleField());
+ String val = list.get(counts);
+ ReflectionUtils.setField(voSurvIntegrateTotal,header.getEleField(),val);
+ }
+ result.add(voSurvIntegrateTotal);
+ counts++;
+ }
+ }
+ }
+ return result;
+ }
+
+ public String[][] transToArr(List headers, List> voSurvIntegrateTotals) {
+ if(!voSurvIntegrateTotals.isEmpty()) {
+ int rows = voSurvIntegrateTotals.size();
+ int cols = headers.size();
+ String[][] matrix = new String[rows][cols];
+ int indexCounts = 0;
+ Map> map = new HashMap<>();
+ for (LinkedHashMap totalMap : voSurvIntegrateTotals) {
+ int counts = 0;
+ Map dataMap = new HashMap<>();
+ for (VOSurvElement header : headers) {
+ dataMap.put(counts, String.valueOf(totalMap.get(header.getEleField())));
+ counts++;
+ }
+ map.put(indexCounts, dataMap);
+ indexCounts++;
+ }
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < cols; j++) {
+ matrix[i][j] = map.get(i).get(j); // 示例:按顺序赋值
+ }
+ }
+ return matrix;
+ }
+ return null;
+ }
+
+
+
+
+ /**
+ * 监测设备综合统计
+ * @param voSurvIntegrateParam
+ * @return
+ */
+ public VOSurvIntegrateResult WaterIntegrateStatistic(VOWaterSurvIntegrateParam voSurvIntegrateParam) {
+ VOSurvIntegrateResult result = new VOSurvIntegrateResult();
+ //step 1,获取所需查询的设备
+ List deploys = new ArrayList<>();
+ //当前农场所配置的所有监测项目,只有配置过的。
+ Map totalSurvItems = new HashMap<>();
+
+ //0租户
+ String tenantId = "0";
+ List items = new ArrayList<>();
+ if(!CollectionUtils.isEmpty(voSurvIntegrateParam.getDeployIds())){
+ deploys = fDeviceDeployService.getByIdsWithZhiBiao(voSurvIntegrateParam.getDeployIds());
+ if(!deploys.isEmpty()){
+ for (SurvDeviceDeploy deploy : deploys) {
+ if(deploy.getZhibiaos()!=null && !deploy.getZhibiaos().isEmpty()){
+ for (ScEquZhibiao fScEquZhibiao : deploy.getZhibiaos()) {
+ items.add(fScEquZhibiao.getEntityField());
+ }
+ }
+ }
+ }
+ }
+
+ //无设备直接返回
+ if(CollectionUtils.isEmpty(deploys)){
+ return result;
+ }else{
+ if(!items.isEmpty()){
+ for (String item : items) {
+ totalSurvItems.put(item,item);
+ }
+ }
+ }
+
+ //step 2,获取设备数据
+ List airDevice = new ArrayList<>();
+ List soilDevice = new ArrayList<>();
+ List commonDataTransList = new ArrayList<>();
+ for (SurvDeviceDeploy deploy : deploys) {
+ switch (deploy.getDeployType()){
+ case PollutionConstants.AIR_SURV:
+ airDevice.add(deploy.getDeployCode());
+ commonDataTransList.addAll(CommonUtils.transData(deploy, false, null, null, null, null).getTransData());
+ break;
+ case PollutionConstants.SOIL_SURV:
+ soilDevice.add(deploy.getDeployCode());
+ commonDataTransList.addAll(CommonUtils.transData(deploy, false, null, null, null, null).getTransData());
+ break;
+ }
+ }
+ String timeDataFormat = "";
+ LocalDateTime startDateTime = null;
+ LocalDateTime endDateTime = null;
+ LocalDate now = LocalDate.now();
+ DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter.ofPattern("yyyy-MM");
+ switch (voSurvIntegrateParam.getSummrayMode()){
+ case IotConstants.day_hours:
+ timeDataFormat = "%Y-%m-%d %H";
+ LocalDate days = null;
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy-MM-dd");
+ Assert.notNull(isValid, "时间格式不正确");
+ days = LocalDate.parse(voSurvIntegrateParam.getStartTime(), dateTimeFormatter3);
+ } else {
+ days = now;
+ }
+ startDateTime = LocalDateTime.of(days, LocalTime.MIN);
+ endDateTime = LocalDateTime.of(days, LocalTime.MAX).withNano(999999000);
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.HOUR, "yyyy-MM-dd HH"));
+ break;
+ case IotConstants.month_days:
+ timeDataFormat = "%Y-%m-%d";
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ int lengthof = voSurvIntegrateParam.getStartTime().length();
+ if (lengthof == 10) {
+ LocalDate timse = LocalDate.parse(voSurvIntegrateParam.getStartTime(), dateTimeFormatter3);
+ startDateTime = LocalDateTime.of(timse.withDayOfMonth(1), LocalTime.MIN);
+ endDateTime = LocalDateTime.of(startDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX).withNano(999999000);
+ } else {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy-MM");
+ Assert.notNull(isValid, "时间格式不正确");
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ startDateTime = LocalDateTime.parse(voSurvIntegrateParam.getStartTime() + "-01 00:00:00", dtf);
+ endDateTime = LocalDateTime.of(startDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX).withNano(999999000);
+ }
+ } else {
+ LocalDate date = LocalDate.of(now.getYear(), now.getMonth(), 1);
+ startDateTime = LocalDateTime.of(date,LocalTime.MIN);
+ endDateTime = LocalDateTime.of(now, LocalTime.MAX).withNano(999999000);
+ }
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.DAY, "yyyy-MM-dd"));
+ break;
+ case IotConstants.year_months:
+ timeDataFormat = "%Y-%m";
+ Integer year = null;
+ if (StringUtils.isNotBlank(voSurvIntegrateParam.getStartTime())) {
+ String isValid = Iotutils.isValidTimeFormat(voSurvIntegrateParam.getStartTime(), "yyyy");
+ Assert.notNull(isValid, "时间格式不正确");
+ year = Integer.parseInt(voSurvIntegrateParam.getStartTime());
+ } else {
+ year = now.getYear();
+ }
+ LocalDate date = LocalDate.of(year, 1, 1);
+ LocalDate edate = LocalDate.of(year, 12, 31);
+ startDateTime = LocalDateTime.of(date,LocalTime.MIN);
+ endDateTime = LocalDateTime.of(edate, LocalTime.MAX).withNano(999999000);
+ result.setIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.MONTH, "yyyy-MM"));
+ result.setSubIndexs(DateTimeRangeUtils.getDateTimeRange(
+ startDateTime, endDateTime, DateTimeRangeUtils.TimeUnit.DAY, "yyyy-MM-dd"));
+ break;
+ }
+
+ SurvConfig fSurvConfig = configService.getOneByTypeWithTenant(tenantId, IotConstants.surv_itemname);
+ cn.hutool.json.JSONObject configs = null;
+ if (fSurvConfig != null) {
+ configs = fSurvConfig.getConfigJson();
+ }
+ cn.hutool.json.JSONObject desConfig = null;
+ cn.hutool.json.JSONObject iconConfig = null;
+ String bsIconPath = "";
+ String bsIconPath2 = "";
+ String h5IconPath = "";
+ String appIconPath = "";
+ String midIconPath = "";
+ if (configs != null) {
+ desConfig = configs.getJSONObject("des");
+ iconConfig = configs.getJSONObject("icons");
+ bsIconPath = configs.getStr("bsIconPath");
+ bsIconPath2 = configs.getStr("bsIconPath2");
+ h5IconPath = configs.getStr("h5IconPath");
+ appIconPath = configs.getStr("appIconPath");
+ midIconPath = configs.getStr("midIconPath");
+ }
+
+ List survItems = new ArrayList<>();
+ Map> filterMap = new HashMap<>();
+ Map> accFilterMap = new HashMap<>();
+ if(!airDevice.isEmpty()){
+ List airs = hisdataAirService.integrateSummary(null,airDevice,timeDataFormat,startDateTime,endDateTime);
+ if(airs.isEmpty()){//如果airs为空,即设备未采集任何数据,则补充一条0数据,用于构造
+ VOSurvIntegrateAirDetail ent = new VOSurvIntegrateAirDetail();
+ Class extends VOSurvIntegrateAirDetail> airClass = ent.getClass();
+ Field[] fields = airClass.getDeclaredFields();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if(!"dates".equals(field.getName())) {
+ try{
+ field.set(ent,"0");
+ }catch (IllegalAccessException e){
+ e.printStackTrace();
+ continue;
+ }
+ }
+ field.setAccessible(false);
+ }
+ airs.add(ent);
+ }
+ if(!airs.isEmpty()){
+ int counts = 0;
+ for (VOSurvIntegrateAirDetail air : airs) {
+ Class extends VOSurvIntegrateAirDetail> personClass = air.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if(!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(air);
+ if (values != null) {
+ String val = values.toString();
+
+ if (StringUtils.isNotBlank(val)) {
+ if("dates".equals(field.getName())){
+ curIndex = val;
+ }else{
+ eleMap.put(field.getName(),val);
+ filterMap.put(curIndex, eleMap);
+ if(counts==0){
+ survItems.add(field.getName());
+ }
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ counts++;
+ }
+ }
+
+ if(!soilDevice.isEmpty()){
+ List soils = hisdataSoilService.integrateSummary(null,soilDevice,timeDataFormat,startDateTime,endDateTime);
+ if(soils.isEmpty()){//如果soils为空,即设备未采集任何数据,则补充一条0数据,用于构造
+ VOSurvIntegrateSoilDetail ent = new VOSurvIntegrateSoilDetail();
+ Class extends VOSurvIntegrateSoilDetail> soilClass = ent.getClass();
+ Field[] fields = soilClass.getDeclaredFields();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if(!"dates".equals(field.getName())) {
+ try{
+ field.set(ent,"0");
+ }catch (IllegalAccessException e){
+ e.printStackTrace();
+ continue;
+ }
+ }
+ field.setAccessible(false);
+ }
+ soils.add(ent);
+ }
+ if(!soils.isEmpty()){
+ int counts = 0;
+ for (VOSurvIntegrateSoilDetail soil : soils) {
+ Class extends VOSurvIntegrateSoilDetail> personClass = soil.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if(!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(soil);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ if("dates".equals(field.getName())){
+ curIndex = val;
+ }else{
+ eleMap.put(field.getName(),val);
+ Map airData = filterMap.get(curIndex);
+ if(airData != null){
+ eleMap.putAll(airData);
+ }
+ filterMap.put(curIndex, eleMap);
+ if(counts==0){
+ survItems.add(field.getName());
+ }
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ counts++;
+ }
+ }
+ }
+
+ //mk2 年月份数据时,需要拉取日数据重新进行计算
+ if(IotConstants.year_months.equals(voSurvIntegrateParam.getSummrayMode())){
+ timeDataFormat = "%Y-%m-%d";
+ List dayAir = hisdataAirService.integrateSummary(null,airDevice,timeDataFormat,startDateTime,endDateTime);
+ if(!dayAir.isEmpty()){
+ for (VOSurvIntegrateAirDetail dayData : dayAir) {
+ Class extends VOSurvIntegrateAirDetail> personClass = dayData.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ String curIndex = "";
+ Map eleMap = new HashMap<>();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ //过滤,未配置的不要构造进去
+ if(!"dates".equals(field.getName())) {//非dates的未配置不处理
+ if (totalSurvItems.get(field.getName()) == null) {
+ continue;
+ }
+ }
+ Object values = field.get(dayData);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ if("dates".equals(field.getName())){
+ curIndex = val;
+ }else{
+ eleMap.put(field.getName(),val);
+ accFilterMap.put(curIndex, eleMap);
+ }
+ }
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+
+ Map accItems = new HashMap<>();
+ LinkedHashMap> dataMap = new LinkedHashMap<>();
+ LinkedHashMap hisHourData = new LinkedHashMap<>();
+ for (String index : result.getIndexs()) {
+ Map ele = filterMap.get(index);
+ for (String survItem : survItems) {
+ List dataList = dataMap.get(survItem);
+ if(dataList == null){
+ dataList = new ArrayList<>();
+ }
+ if(ele != null){
+ String val = ele.get(survItem);
+ if(val==null){//如果配置了此监测项,但是在这个时段没有数据,则补充0
+ val = "0";
+ }
+ BigDecimal cVal = new BigDecimal(val);
+ int dataCounts = dataList.size();
+ if(Iotutils.isEntityAccumulate(survItem)){//累计监测项处理
+ accItems.put(survItem,survItem);//记录需要处理的检测项
+ if(IotConstants.day_hours.equals(voSurvIntegrateParam.getSummrayMode())){//小时模式,处理差值,计算增量
+ BigDecimal finalData = BigDecimal.ZERO;
+ if(dataCounts == 0){//第一条数据,减0
+ finalData = cVal.subtract(BigDecimal.ZERO);
+ }else{
+ int lastKey = dataCounts-1;
+ BigDecimal lastData = hisHourData.get(survItem+"_"+lastKey);
+ finalData = cVal.subtract(lastData);
+ }
+ val = Iotutils.toStringData(finalData);
+ hisHourData.put(survItem+"_"+dataCounts,cVal);
+ }
+ }
+ dataList.add(val!=null?val:"0");
+ }else{//无数据做补充
+ dataList.add("0");
+ }
+ dataMap.put(survItem,dataList);
+ }
+ }
+ //mk2 年月份模式,处理累计型数据
+ if(IotConstants.year_months.equals(voSurvIntegrateParam.getSummrayMode())){
+ Map> dataPool = new LinkedHashMap<>();
+ //step 1 遍历日数据,存入map,统计为每月的各项监测值的和
+ for (String index : result.getSubIndexs()) {
+ Map accEle = accFilterMap.get(index);
+ LocalDate indexDate = LocalDate.parse(index,dateTimeFormatter3);
+ String monthKey = indexDate.format(dateTimeFormatter4);
+ LinkedHashMap hisData = dataPool.get(monthKey);
+ if(hisData == null){
+ hisData = new LinkedHashMap<>();
+ }
+ for (String itemKey : accItems.keySet()) {
+ BigDecimal itemVal = hisData.get(itemKey);
+ if(itemVal==null){
+ itemVal = BigDecimal.ZERO;
+ }
+ if(accEle != null){
+ String val = accEle.get(itemKey);
+ BigDecimal cVal = new BigDecimal(val);
+ BigDecimal finalVal = cVal.add(itemVal);
+ hisData.put(itemKey,finalVal);
+ }else{//无数据时跳过,只处理有数据的
+
+ }
+ dataPool.put(monthKey,hisData);
+ }
+ }
+
+ //将dataMap中填充的均值统计清除,重新处理
+ for (String itemKey : accItems.keySet()) {
+ dataMap.remove(itemKey);
+ }
+ //step 2 组装为月数据
+ for (String index : result.getIndexs()) {
+ LinkedHashMap monthData = dataPool.get(index);
+ for (String itemKey : accItems.keySet()) {
+ List dataList = dataMap.get(itemKey);
+ if(dataList == null){
+ dataList = new ArrayList<>();
+ }
+ dataList.add(Iotutils.toStringData(monthData.get(itemKey)));
+ dataMap.put(itemKey,dataList);
+ }
+ }
+
+ }
+ result.setSurvResult(dataMap);
+ //遍历数据值,翻译
+ List eleList = new ArrayList<>();
+ if(!dataMap.isEmpty()){
+ for (String s : dataMap.keySet()) {
+ if (s.startsWith("data")) {
+ PollutionEnum pollutionEnum = PollutionEnum.catchMessage(s);
+ String iconFinalName = pollutionEnum.getIconName();
+ String itemFinalName = pollutionEnum.getDescription();
+ String bsIcon = pollutionEnum.getBsIcon();
+ if (configs != null) {
+ String itemName = desConfig != null ? desConfig.getStr(pollutionEnum.getCode()) : "";
+ String iconName = iconConfig != null ? iconConfig.getStr(pollutionEnum.getCode()) : "";
+ if (StringUtils.isNotBlank(itemName)) {
+ itemFinalName = itemName;
+ }
+ if (StringUtils.isNotBlank(iconName)) {
+ iconFinalName = iconName;
+ }
+ if (StringUtils.isNotBlank(bsIconPath)) {
+ bsIcon = bsIconPath + iconFinalName;
+ }
+ }
+ VOSurvElement voSurvElement = new VOSurvElement();
+ voSurvElement.setEleDesc(itemFinalName+"("+pollutionEnum.getUnit()+")");
+ voSurvElement.setEleField(s);
+ eleList.add(voSurvElement);
+ }
+ }
+ }
+ result.setHeaders(eleList);
+ result.setLiveData(commonDataTransList);
+ return result;
+ }
+
+
+}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java
index f93f061..ebe4d19 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.appmana.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.jeecg.common.entity.ScEquZhibiao;
import org.jeecg.common.entity.SurvDeviceDeploy;
import org.jeecg.modules.appmana.mapper.ScEquZhibiaoMapper;
@@ -34,4 +35,16 @@ public class ScEquZhibiaoServiceImpl extends ServiceImpl getListByEquid(String equid) {
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.eq("equ_id", equid)
+ .isNotNull("code")
+ .ne("code", "")
+ .orderByAsc("code");
+ return this.list(queryWrapper);
+ }
+
+
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDeviceDeployServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDeviceDeployServiceImpl.java
index 27d30df..8563e29 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDeviceDeployServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDeviceDeployServiceImpl.java
@@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
@@ -390,4 +391,22 @@ public class SurvDeviceDeployServiceImpl extends ServiceImpl getByIdsWithZhiBiao(List deployId) {
+ return baseMapper.getByIdsWithZhiBiao(deployId);
+ }
+
+ @Override
+ public List getAllDevice(List deployTypes) {
+ List deploys = lambdaQuery()
+ .in(SurvDeviceDeploy::getDeployType,deployTypes)
+ .eq(SurvDeviceDeploy::getIsDel,0)
+ .eq(SurvDeviceDeploy::getRunStatus,0)
+ .orderByAsc(SurvDeviceDeploy::getSortNo)
+ .orderByDesc(SurvDeviceDeploy::getCreateTime)
+ .list();
+ return deploys;
+ }
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataAirServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataAirServiceImpl.java
index e8d6fb6..a45bd91 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataAirServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataAirServiceImpl.java
@@ -7,7 +7,7 @@ import org.jeecg.common.vo.AirDataTrans;
import org.jeecg.modules.appmana.mapper.SurvHisdataAirMapper;
import org.jeecg.modules.appmana.service.ISurvHisdataAirService;
import org.springframework.stereotype.Service;
-
+import org.jeecg.common.iot.common.VOSurvIntegrateAirDetail;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.time.LocalDateTime;
@@ -36,4 +36,9 @@ public class SurvHisdataAirServiceImpl extends ServiceImpl listByParams(String deployCode, LocalDateTime startDateTime, LocalDateTime endDateTime) {
return baseMapper.listByParams(deployCode,startDateTime,endDateTime);
}
+
+ @Override
+ public List integrateSummary(String tenantId, List airDevice,String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime) {
+ return baseMapper.integrateSummary(tenantId,airDevice,timeDataFormat, startTime, endTime);
+ }
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataLivestockwaterServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataLivestockwaterServiceImpl.java
index 2dd0e86..7a7d960 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataLivestockwaterServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataLivestockwaterServiceImpl.java
@@ -1,13 +1,8 @@
package org.jeecg.modules.appmana.service.impl;
-import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.jeecg.common.constant.PollutionConstants;
import org.jeecg.common.entity.SurvHisdataLivestockwater;
-import org.jeecg.common.entity.SurvTransdataLivestockwater;
-import org.jeecg.common.util.BigDecimalRandomAdjuster;
-import org.jeecg.common.util.DateUtils;
import org.jeecg.common.vo.LiveDataTrans;
import org.jeecg.modules.appmana.mapper.SurvHisdataLivestockwaterMapper;
import org.jeecg.modules.appmana.service.ISurvHisdataLivestockwaterService;
@@ -16,11 +11,8 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import java.math.BigDecimal;
import java.time.LocalDateTime;
-import java.util.Date;
import java.util.List;
-import java.util.Random;
/**
* @Description: surv_hisdata_livestockwater
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataOrientwaterServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataOrientwaterServiceImpl.java
index 22fd3c9..c3e4127 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataOrientwaterServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataOrientwaterServiceImpl.java
@@ -1,15 +1,8 @@
package org.jeecg.modules.appmana.service.impl;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.jeecg.common.constant.PollutionConstants;
import org.jeecg.common.entity.SurvHisdataOrientwater;
-import org.jeecg.common.entity.SurvTransdataOrientwater;
-import org.jeecg.common.util.BigDecimalRandomAdjuster;
-import org.jeecg.common.util.DateUtils;
-import org.jeecg.common.vo.DataTrans;
import org.jeecg.common.vo.OrientDataTrans;
import org.jeecg.modules.appmana.mapper.SurvHisdataOrientwaterMapper;
import org.jeecg.modules.appmana.service.ISurvHisdataOrientwaterService;
@@ -19,12 +12,9 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import java.math.BigDecimal;
import java.time.LocalDateTime;
-import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Random;
/**
* @Description: surv_hisdata_orientwater
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataSoilServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataSoilServiceImpl.java
index 1b71351..560ec1d 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataSoilServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataSoilServiceImpl.java
@@ -3,6 +3,7 @@ package org.jeecg.modules.appmana.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.common.entity.SurvHisdataSoil;
+import org.jeecg.common.iot.common.VOSurvIntegrateSoilDetail;
import org.jeecg.common.vo.DataTrans;
import org.jeecg.modules.appmana.mapper.SurvHisdataSoilMapper;
import org.jeecg.modules.appmana.service.ISurvHisdataSoilService;
@@ -37,4 +38,9 @@ public class SurvHisdataSoilServiceImpl extends ServiceImpl integrateSummary(String tenantId, List soilDevice, String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime) {
+ return baseMapper.integrateSummary(tenantId,soilDevice,timeDataFormat, startTime, endTime);
+ }
+
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataAirServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataAirServiceImpl.java
index 2a05e21..d784b60 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataAirServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataAirServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.appmana.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.entity.SurvTransdataAir;
@@ -31,4 +32,12 @@ public class SurvTransdataAirServiceImpl extends ServiceImpl pages(Page page, SurvTransdataAir survTransdataAir, List deviceList) {
return baseMapper.pages(page,survTransdataAir,deviceList);
}
+
+ @Override
+ public SurvTransdataAir getOneByDeviceCode(String deployCode) {
+
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.eq("DEVICE_CODE", deployCode).last("limit 1");
+ return getOne(queryWrapper);
+ }
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataSoilServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataSoilServiceImpl.java
index a06e65a..d854e89 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataSoilServiceImpl.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvTransdataSoilServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.appmana.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.entity.SurvTransdataSoil;
@@ -32,5 +33,11 @@ public class SurvTransdataSoilServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper();
+ queryWrapper.eq("DEVICE_CODE", deployCode).last("limit 1");
+ return getOne(queryWrapper);
+ }
}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/CommonUtils.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/CommonUtils.java
new file mode 100644
index 0000000..5b1bd52
--- /dev/null
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/CommonUtils.java
@@ -0,0 +1,1020 @@
+package org.jeecg.modules.appmana.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.constant.DeviceReadConstants;
+import org.jeecg.common.constant.IotConstants;
+import org.jeecg.common.constant.PollutionConstants;
+import org.jeecg.common.constant.enums.PollutionEnum;
+import org.jeecg.common.entity.*;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.iot.common.VOTransData;
+import org.jeecg.common.iot.common.VOZhiBiao;
+import org.jeecg.common.util.DateUtilTools;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.vo.CommonDataTrans;
+import org.jeecg.modules.appmana.service.IScEquZhibiaoService;
+import org.jeecg.modules.appmana.service.ISurvConfigService;
+import org.jeecg.modules.appmana.service.ISurvTransdataAirService;
+import org.jeecg.modules.appmana.service.ISurvTransdataSoilService;
+import org.springframework.util.Assert;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.security.SecureRandom;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+public class CommonUtils {
+
+
+ private static ISurvTransdataAirService transdataAirService = SpringContextUtils.getBean(ISurvTransdataAirService.class);
+ private static ISurvTransdataSoilService transdataSoilService = SpringContextUtils.getBean(ISurvTransdataSoilService.class);
+ private static IScEquZhibiaoService zhibiaoService = SpringContextUtils.getBean(IScEquZhibiaoService.class);
+
+
+ private static ISurvConfigService survConfigService = SpringContextUtils.getBean(ISurvConfigService.class);
+
+
+ public static Date randomLong() {
+ Date d = new Date();
+ System.out.println(d.getTime());
+ Date min = new Date(123, 9, 1, 0, 0, 0);
+ long mindate = min.getTime();
+ Date date = new Date(mindate);
+ Date max = new Date(123, 9, 21, 23, 59, 59);
+ long maxdate = max.getTime();
+ System.out.println(date);
+ long random = (long) ((Math.random()) * (maxdate - mindate) + mindate);
+ Date randomdate = new Date(random);
+ System.out.println(randomdate);
+ return randomdate;
+ }
+
+ public static String radomPlus(Double num1) {
+ Random rand = new Random();
+ Double num2 = rand.nextDouble();
+ int operator = rand.nextInt(2); // 0代表加号,1代表减号
+ char operatorChar = operator == 0 ? '+' : '-';
+ return String.format("%.2f", num1 - num2);
+ }
+
+ /**
+ * @param deploy 设备实体
+ * @param throEX 是否需要抛出错误
+w * @param pageNo 非必传,虫情孢子类,杀虫灯传入
+ * @param pageSize 非必传,虫情孢子类,杀虫灯传入
+ * @return
+ */
+ public static VOTransData transData(SurvDeviceDeploy deploy, Boolean throEX, Integer pageNo, Integer pageSize, String startTime, String endTime) {
+ VOTransData voTransData = new VOTransData();
+ String deployId = deploy.getId();
+ List zhibiaoList = zhibiaoService.getListByEquid(deployId);
+ LocalDateTime startDate = null;
+ LocalDateTime endDate = null;
+ DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ if (StringUtils.isNotBlank(startTime)) {
+ startDate = LocalDateTime.of(LocalDate.parse(startTime, sdf), LocalTime.MIN);
+ }
+ if (StringUtils.isNotBlank(endTime)) {
+ endDate = LocalDateTime.of(LocalDate.parse(endTime, sdf), LocalTime.MAX).withNano(999999000);
+ }
+
+ if (PollutionConstants.AIR_SURV.equals(deploy.getDeployType())) {//空气
+ SurvTransdataAir transdataAir = transdataAirService.getOneByDeviceCode(deploy.getDeployCode());
+ if (throEX) {
+ Assert.notNull(transdataAir, "该设备没有最新数据");
+ } else {
+ if (transdataAir != null) {
+ transdataAir.setDeployId(deployId);
+ voTransData.setTransData(CommonUtils.markZhibiao(CommonUtils.constructAir(transdataAir), zhibiaoList));
+ return voTransData;
+ }
+ }
+ } else if (PollutionConstants.SOIL_SURV.equals(deploy.getDeployType())) {//土壤
+ SurvTransdataSoil transdataSoil = transdataSoilService.getOneByDeviceCode(deploy.getDeployCode());
+ if (throEX) {
+ Assert.notNull(transdataSoil, "该设备没有最新数据");
+ } else {
+ if (transdataSoil != null) {
+ transdataSoil.setDeployId(deployId);
+ voTransData.setTransData(CommonUtils.markZhibiao(CommonUtils.constructSoil(transdataSoil), zhibiaoList));
+ return voTransData;
+ }
+ }
+ } else if (PollutionConstants.WATER_QULITY.equals(deploy.getDeployType())) {//水质也走这
+ SurvTransdataSoil transdataWater = transdataSoilService.getOneByDeviceCode(deploy.getDeployCode());
+ if (throEX) {
+ Assert.notNull(transdataWater, "该设备没有最新数据");
+ } else {
+ if (transdataWater != null) {
+ transdataWater.setDeployId(deployId);
+ voTransData.setTransData(CommonUtils.markZhibiao(CommonUtils.constructWater(transdataWater), zhibiaoList));
+ return voTransData;
+ }
+ }
+ }
+// else if (PollutionConstants.BUG_SURV.equals(deploy.getDeployType())) {
+// Page bPage = new Page<>(pageNo, pageSize);
+//
+// IPage survs = bugSurvService.lambdaQuery()
+// .eq(FBugSurv::getDeployId, deployId)
+// .eq(FBugSurv::getIsDel, 0)
+// .ge(startDate != null, FBugSurv::getCollecTime, startDate)
+// .le(endDate != null, FBugSurv::getCollecTime, endDate)
+// .orderByDesc(FBugSurv::getCollecTime).page(bPage);
+// voTransData.setTransData(CommonUtils.constructBug(survs.getRecords()));
+// voTransData.setCurrent(survs.getCurrent());
+// voTransData.setPages(survs.getPages());
+// voTransData.setSize(survs.getSize());
+// voTransData.setTotal(survs.getTotal());
+// return voTransData;
+// } else if (PollutionConstants.SPORE_SURV.equals(deploy.getDeployType())) {
+// Page bPage = new Page<>(pageNo, pageSize);
+//
+// IPage survs = sporeService.lambdaQuery()
+// .eq(FSurvSpore::getDeployId, deployId)
+// .eq(FSurvSpore::getIsDel, 0)
+// .ge(startDate != null, FSurvSpore::getAddtime, startDate)
+// .le(endDate != null, FSurvSpore::getAddtime, endDate)
+// .orderByDesc(FSurvSpore::getAddtime).page(bPage);
+// voTransData.setTransData(CommonUtils.constructSpore(survs.getRecords()));
+// voTransData.setCurrent(survs.getCurrent());
+// voTransData.setPages(survs.getPages());
+// voTransData.setSize(survs.getSize());
+// voTransData.setTotal(survs.getTotal());
+// return voTransData;
+// }else if (PollutionConstants.PEST_LIGHT.equals(deploy.getDeployType())) {
+// Page pPage = new Page<>(pageNo, pageSize);
+//
+// IPage lights = pestlightService.lambdaQuery()
+// .eq(FPreventPestlight::getDeployId, deployId)
+// .eq(FPreventPestlight::getIsDel, 0)
+// .ge(startDate != null, FPreventPestlight::getSyncTime, startDate)
+// .le(endDate != null, FPreventPestlight::getSyncTime, endDate)
+// .orderByDesc(FPreventPestlight::getSyncTime).page(pPage);
+// voTransData.setTransData(CommonUtils.constructPestLight(lights.getRecords()));
+// voTransData.setCurrent(lights.getCurrent());
+// voTransData.setPages(lights.getPages());
+// voTransData.setSize(lights.getSize());
+// voTransData.setTotal(lights.getTotal());
+// return voTransData;
+//
+// }
+ voTransData.setTransData(new ArrayList<>());
+ return voTransData;
+ }
+
+
+ /**
+ * 组装空气数据
+ */
+ public static List constructAir(SurvTransdataAir transdataAir) {
+ if (transdataAir == null) {
+ return new ArrayList<>();
+ }
+ List listFinal = new ArrayList<>();
+ String timeGap = DateUtilTools.calTimeGap(transdataAir.getDataDateTime(), LocalDateTime.now());
+ if("1042".equals(transdataAir.getTenantId())){
+ timeGap = "1";
+ }
+ SurvConfig fSurvConfig = survConfigService.getOneByTypeWithTenant(transdataAir.getTenantId(), IotConstants.surv_itemname);
+ cn.hutool.json.JSONObject configs = null;
+ if (fSurvConfig != null) {
+ configs = fSurvConfig.getConfigJson();
+ }
+ cn.hutool.json.JSONObject desConfig = null;
+ cn.hutool.json.JSONObject iconConfig = null;
+ String bsIconPath = "";
+ String bsIconPath2 = "";
+ String h5IconPath = "";
+ String appIconPath = "";
+ String midIconPath = "";
+ if (configs != null) {
+ desConfig = configs.getJSONObject("des");
+ iconConfig = configs.getJSONObject("icons");
+ bsIconPath = configs.getStr("bsIconPath");
+ bsIconPath2 = configs.getStr("bsIconPath2");
+ h5IconPath = configs.getStr("h5IconPath");
+ appIconPath = configs.getStr("appIconPath");
+ midIconPath = configs.getStr("midIconPath");
+ }
+ Class extends SurvTransdataAir> personClass = transdataAir.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if (field.getName().startsWith("data") && !field.getName().equals("dataDateTime") && !field.getName().equals("dataGatherType")) {
+ Object values = field.get(transdataAir);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ PollutionEnum pollutionEnum = PollutionEnum.catchMessage(field.getName());
+ CommonDataTrans e4 = new CommonDataTrans();//温度
+
+ String iconFinalName = pollutionEnum.getIconName();
+ String itemFinalName = pollutionEnum.getDescription();
+ String bsIcon = pollutionEnum.getBsIcon();
+ //20241227增加可以按照租户自定义监测项的名称
+ if (configs != null) {
+ String itemName = desConfig != null ? desConfig.getStr(pollutionEnum.getCode()) : "";
+ String iconName = iconConfig != null ? iconConfig.getStr(pollutionEnum.getCode()) : "";
+ if (StringUtils.isNotBlank(itemName)) {
+ itemFinalName = itemName;
+ }
+ if (StringUtils.isNotBlank(iconName)) {
+ iconFinalName = iconName;
+ }
+ if (StringUtils.isNotBlank(bsIconPath)) {
+ bsIcon = bsIconPath + iconFinalName;
+ }
+ e4.setBsIconPath(bsIconPath);
+ e4.setBsIconPath2(bsIconPath2);
+ e4.setH5IconPath(h5IconPath);
+ e4.setAppIconPath(appIconPath);
+ e4.setMidIconPath(midIconPath);
+ }
+
+ e4.setUnit(pollutionEnum.getUnit());
+ e4.setName(itemFinalName);
+ e4.setColor(pollutionEnum.getColor());
+ e4.setIcon(pollutionEnum.getIcon());
+ e4.setMobileIcon(pollutionEnum.getMobileIcon());
+ e4.setBsIcon(bsIcon);
+ e4.setSurvItem(pollutionEnum.getCode());
+ e4.setValue(val);
+ e4.setLastUpdate(timeGap);
+ e4.setDataDateTime(transdataAir.getDataDateTime());
+ e4.setDeployId(transdataAir.getDeployId());
+ e4.setIconName(iconFinalName);
+ e4.setSurvType(IotConstants.AIR_DATA);
+
+
+ listFinal.add(e4);
+ }
+ }
+
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return listFinal;
+ }
+
+ /**
+ * 组装空气数据,旧版,弃用
+ */
+ public static List constructAir2(SurvTransdataAir transdataAir) {
+ if (transdataAir == null) {
+ return new ArrayList<>();
+ }
+ List listFinal = new ArrayList<>();
+ String timeGap = DateUtilTools.calTimeGap(transdataAir.getDataDateTime(), LocalDateTime.now());
+
+
+ CommonDataTrans e4 = new CommonDataTrans();//温度
+ e4.setUnit(PollutionEnum.dataAirTemp.getUnit());
+ e4.setName(PollutionEnum.dataAirTemp.getDescription());
+ e4.setColor(PollutionEnum.dataAirTemp.getColor());
+ e4.setIcon(PollutionEnum.dataAirTemp.getIcon());
+ e4.setMobileIcon(PollutionEnum.dataAirTemp.getMobileIcon());
+ e4.setBsIcon(PollutionEnum.dataAirTemp.getBsIcon());
+ e4.setSurvItem(PollutionEnum.dataAirTemp.getCode());
+ e4.setValue(transdataAir.getDataAirTemp());
+ e4.setLastUpdate(timeGap);
+ e4.setDataDateTime(transdataAir.getDataDateTime());
+ e4.setDeployId(transdataAir.getDeployId());
+
+ CommonDataTrans e5 = new CommonDataTrans();//湿度
+ e5.setUnit(PollutionEnum.dataAirWet.getUnit());
+ e5.setName(PollutionEnum.dataAirWet.getDescription());
+ e5.setColor(PollutionEnum.dataAirWet.getColor());
+ e5.setIcon(PollutionEnum.dataAirWet.getIcon());
+ e5.setMobileIcon(PollutionEnum.dataAirWet.getMobileIcon());
+ e5.setBsIcon(PollutionEnum.dataAirWet.getBsIcon());
+ e5.setSurvItem(PollutionEnum.dataAirWet.getCode());
+ e5.setValue(transdataAir.getDataAirWet());
+ e5.setLastUpdate(timeGap);
+ e5.setDataDateTime(transdataAir.getDataDateTime());
+ e5.setDeployId(transdataAir.getDeployId());
+
+// CommonDataTrans e6 = new CommonDataTrans();//照度
+// e6.setUnit(PollutionEnum.dataSunRate.getUnit());
+// e6.setName(PollutionEnum.dataSunRate.getDescription());
+// e6.setColor(PollutionEnum.dataSunRate.getColor());
+// e6.setIcon(PollutionEnum.dataSunRate.getIcon());
+// e6.setMobileIcon(PollutionEnum.dataSunRate.getMobileIcon());
+// e6.setBsIcon(PollutionEnum.dataSunRate.getBsIcon());
+// e6.setSurvItem(PollutionEnum.dataSunRate.getCode());
+// e6.setValue(transdataAir.getDataSunRate());
+// e6.setLastUpdate(timeGap);
+// e6.setDataDateTime(transdataAir.getDataDateTime());
+// e6.setDeployId(transdataAir.getDeployId());
+//
+// CommonDataTrans e7 = new CommonDataTrans();//二氧化碳
+// e7.setUnit(PollutionEnum.dataAirCod.getUnit());
+// e7.setName(PollutionEnum.dataAirCod.getDescription());
+// e7.setColor(PollutionEnum.dataAirCod.getColor());
+// e7.setIcon(PollutionEnum.dataAirCod.getIcon());
+// e7.setMobileIcon(PollutionEnum.dataAirCod.getMobileIcon());
+// e7.setBsIcon(PollutionEnum.dataAirCod.getBsIcon());
+// e7.setSurvItem(PollutionEnum.dataAirCod.getCode());
+// e7.setValue(transdataAir.getDataAirCod());
+// e7.setLastUpdate(timeGap);
+// e7.setDataDateTime(transdataAir.getDataDateTime());
+// e7.setDeployId(transdataAir.getDeployId());
+//
+// CommonDataTrans e14 = new CommonDataTrans();//叶面温度
+// e14.setUnit(PollutionEnum.dataLeafTemp.getUnit());
+// e14.setName(PollutionEnum.dataLeafTemp.getDescription());
+// e14.setColor(PollutionEnum.dataLeafTemp.getColor());
+// e14.setIcon(PollutionEnum.dataLeafTemp.getIcon());
+// e14.setBsIcon(PollutionEnum.dataLeafTemp.getBsIcon());
+// e14.setMobileIcon(PollutionEnum.dataLeafTemp.getMobileIcon());
+// e14.setSurvItem(PollutionEnum.dataLeafTemp.getCode());
+// e14.setValue(transdataAir.getDataLeafTemp());
+// e14.setLastUpdate(timeGap);
+// e14.setDataDateTime(transdataAir.getDataDateTime());
+// e14.setDeployId(transdataAir.getDeployId());
+//
+// CommonDataTrans e15 = new CommonDataTrans();//叶面湿度
+// e15.setUnit(PollutionEnum.dataLeafWet.getUnit());
+// e15.setName(PollutionEnum.dataLeafWet.getDescription());
+// e15.setColor(PollutionEnum.dataLeafWet.getColor());
+// e15.setIcon(PollutionEnum.dataLeafWet.getIcon());
+// e15.setMobileIcon(PollutionEnum.dataLeafWet.getMobileIcon());
+// e15.setBsIcon(PollutionEnum.dataLeafWet.getBsIcon());
+// e15.setSurvItem(PollutionEnum.dataLeafWet.getCode());
+// e15.setValue(transdataAir.getDataLeafWet());
+// e15.setLastUpdate(timeGap);
+// e15.setDataDateTime(transdataAir.getDataDateTime());
+// e15.setDeployId(transdataAir.getDeployId());
+
+// CommonDataTrans e16 = new CommonDataTrans();//风向
+// e15.setUnit(PollutionEnum.dataWindDirection.getUnit());
+// e15.setName(PollutionEnum.dataWindDirection.getDescription());
+// e15.setColor(PollutionEnum.dataWindDirection.getColor());
+// e15.setIcon(PollutionEnum.dataWindDirection.getIcon());
+// e15.setMobileIcon(PollutionEnum.dataWindDirection.getMobileIcon());
+// e15.setBsIcon(PollutionEnum.dataWindDirection.getBsIcon());
+// e15.setSurvItem(PollutionEnum.dataWindDirection.getCode());
+// e15.setValue(windDirectionSwitch(Float.valueOf(transdataAir.getDataWindDirection())));
+// e15.setLastUpdate(timeGap);
+// e15.setDataDateTime(transdataAir.getDataDateTime());
+// e15.setDeployId(transdataAir.getDeployId());
+
+ listFinal.add(e4);
+ listFinal.add(e5);
+// listFinal.add(e6);
+// listFinal.add(e7);
+// listFinal.add(e14);
+// listFinal.add(e15);
+// listFinal.add(e16);
+
+ return listFinal;
+ }
+
+
+ /**
+ * 组装土壤数据
+ */
+ public static List constructSoil(SurvTransdataSoil transdataSoil) {
+ //调整为从数据库获取
+ if (transdataSoil == null) {
+ return new ArrayList<>();
+ }
+ List listFinal = new ArrayList<>();
+ String timeGap = DateUtilTools.calTimeGap(transdataSoil.getDataDateTime(), LocalDateTime.now());
+ if("1042".equals(transdataSoil.getTenantId())){
+ timeGap = "1";
+ }
+ Class extends SurvTransdataSoil> personClass = transdataSoil.getClass();
+ Field[] fields = personClass.getDeclaredFields();
+ try {
+ //查找租户配置
+ SurvConfig fSurvConfig = survConfigService.getOneByTypeWithTenant(transdataSoil.getTenantId(), IotConstants.surv_itemname);
+ cn.hutool.json.JSONObject configs = null;
+ if (fSurvConfig != null) {
+ configs = fSurvConfig.getConfigJson();
+ }
+ cn.hutool.json.JSONObject desConfig = null;
+ cn.hutool.json.JSONObject iconConfig = null;
+ if (configs != null) {
+ desConfig = configs.getJSONObject("des");
+ iconConfig = configs.getJSONObject("icons");
+ }
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if (field.getName().startsWith("data") && !field.getName().equals("dataDateTime") && !field.getName().equals("dataGatherType")) {
+ Object values = field.get(transdataSoil);
+ if (values != null) {
+ String val = values.toString();
+ if (StringUtils.isNotBlank(val)) {
+ PollutionEnum pollutionEnum = PollutionEnum.catchMessage(field.getName());
+ CommonDataTrans e4 = new CommonDataTrans();//温度
+
+ String iconFinalName = pollutionEnum.getIconName();
+ String itemFinalName = pollutionEnum.getDescription();
+ String bsIcon = pollutionEnum.getBsIcon();
+ //20241227增加可以按照租户自定义监测项的名称
+ if (configs != null) {
+ String itemName = desConfig != null ? desConfig.getStr(pollutionEnum.getCode()) : "";
+ String bsIconPath = configs.getStr("bsIconPath");
+ String bsIconPath2 = configs.getStr("bsIconPath2");
+ String h5IconPath = configs.getStr("h5IconPath");
+ String appIconPath = configs.getStr("appIconPath");
+ String midIconPath = configs.getStr("midIconPath");
+ String iconName = iconConfig != null ? iconConfig.getStr(pollutionEnum.getCode()) : "";
+ if (StringUtils.isNotBlank(itemName)) {
+ itemFinalName = itemName;
+ }
+ if (StringUtils.isNotBlank(iconName)) {
+ iconFinalName = iconName;
+ }
+ if (StringUtils.isNotBlank(bsIconPath)) {
+ bsIcon = bsIconPath + iconFinalName;
+ }
+ e4.setBsIconPath(bsIconPath);
+ e4.setBsIconPath2(bsIconPath2);
+ e4.setH5IconPath(h5IconPath);
+ e4.setAppIconPath(appIconPath);
+ e4.setMidIconPath(midIconPath);
+ }
+ e4.setUnit(pollutionEnum.getUnit());
+ e4.setName(itemFinalName);
+ e4.setColor(pollutionEnum.getColor());
+ e4.setIcon(pollutionEnum.getIcon());
+ e4.setMobileIcon(pollutionEnum.getMobileIcon());
+ e4.setBsIcon(bsIcon);
+ e4.setSurvItem(pollutionEnum.getCode());
+ e4.setValue(val);
+ e4.setLastUpdate(timeGap);
+ e4.setDataDateTime(transdataSoil.getDataDateTime());
+ e4.setDeployId(transdataSoil.getDeployId());
+ e4.setIconName(iconFinalName);
+ e4.setSurvType(IotConstants.SOIL_DATA);
+ listFinal.add(e4);
+ }
+ }
+
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return listFinal;
+ }
+
+
+ /**
+ * 组装土壤数据,旧版弃用
+ */
+ public static List constructSoil2(SurvTransdataSoil transdataSoil) {
+ if (transdataSoil == null) {
+ return new ArrayList<>();
+ }
+ List listFinal = new ArrayList<>();
+ String timeGap = DateUtilTools.calTimeGap(transdataSoil.getDataDateTime(), LocalDateTime.now());
+
+ CommonDataTrans e1 = new CommonDataTrans();//土壤温度
+ e1.setUnit(PollutionEnum.dataSoilTemp.getUnit());
+ e1.setName(PollutionEnum.dataSoilTemp.getDescription());
+ e1.setColor(PollutionEnum.dataSoilTemp.getColor());
+ e1.setIcon(PollutionEnum.dataSoilTemp.getIcon());
+ e1.setMobileIcon(PollutionEnum.dataSoilTemp.getMobileIcon());
+ e1.setBsIcon(PollutionEnum.dataSoilTemp.getBsIcon());
+ e1.setSurvItem(PollutionEnum.dataSoilTemp.getCode());
+ e1.setValue(transdataSoil.getDataSoilTemp());
+ e1.setLastUpdate(timeGap);
+ e1.setDataDateTime(transdataSoil.getDataDateTime());
+ e1.setDeployId(transdataSoil.getDeployId());
+
+ CommonDataTrans e2 = new CommonDataTrans();//土壤湿度
+ e2.setUnit(PollutionEnum.dataSoilWet.getUnit());
+ e2.setName(PollutionEnum.dataSoilWet.getDescription());
+ e2.setColor(PollutionEnum.dataSoilWet.getColor());
+ e2.setIcon(PollutionEnum.dataSoilWet.getIcon());
+ e2.setMobileIcon(PollutionEnum.dataSoilWet.getMobileIcon());
+ e2.setBsIcon(PollutionEnum.dataSoilWet.getBsIcon());
+ e2.setSurvItem(PollutionEnum.dataSoilWet.getCode());
+ e2.setValue(transdataSoil.getDataSoilWet());
+ e2.setLastUpdate(timeGap);
+ e2.setDataDateTime(transdataSoil.getDataDateTime());
+ e2.setDeployId(transdataSoil.getDeployId());
+
+ CommonDataTrans e3 = new CommonDataTrans();//电导率
+ e3.setUnit(PollutionEnum.dataSoilDdl.getUnit());
+ e3.setName(PollutionEnum.dataSoilDdl.getDescription());
+ e3.setColor(PollutionEnum.dataSoilDdl.getColor());
+ e3.setIcon(PollutionEnum.dataSoilDdl.getIcon());
+ e3.setMobileIcon(PollutionEnum.dataSoilDdl.getMobileIcon());
+ e3.setBsIcon(PollutionEnum.dataSoilDdl.getBsIcon());
+ e3.setSurvItem(PollutionEnum.dataSoilDdl.getCode());
+ e3.setValue(transdataSoil.getDataSoilDdl());
+ e3.setLastUpdate(timeGap);
+ e3.setDataDateTime(transdataSoil.getDataDateTime());
+ e3.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e8 = new CommonDataTrans();//ph
+// e8.setUnit(PollutionEnum.dataSoilPh.getUnit());
+// e8.setName(PollutionEnum.dataSoilPh.getDescription());
+// e8.setColor(PollutionEnum.dataSoilPh.getColor());
+// e8.setIcon(PollutionEnum.dataSoilPh.getIcon());
+// e8.setMobileIcon(PollutionEnum.dataSoilPh.getMobileIcon());
+// e8.setBsIcon(PollutionEnum.dataSoilPh.getBsIcon());
+// e8.setSurvItem(PollutionEnum.dataSoilPh.getCode());
+// e8.setValue(transdataSoil.getDataSoilPh());
+// e8.setLastUpdate(timeGap);
+// e8.setDataDateTime(transdataSoil.getDataDateTime());
+// e8.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e9 = new CommonDataTrans();//氮离子
+// e9.setUnit(PollutionEnum.dataSoilNion.getUnit());
+// e9.setName(PollutionEnum.dataSoilNion.getDescription());
+// e9.setColor(PollutionEnum.dataSoilNion.getColor());
+// e9.setIcon(PollutionEnum.dataSoilNion.getIcon());
+// e9.setMobileIcon(PollutionEnum.dataSoilNion.getMobileIcon());
+// e9.setBsIcon(PollutionEnum.dataSoilNion.getBsIcon());
+// e9.setSurvItem(PollutionEnum.dataSoilNion.getCode());
+// e9.setValue(transdataSoil.getDataSoilNion());
+// e9.setLastUpdate(timeGap);
+// e9.setDataDateTime(transdataSoil.getDataDateTime());
+// e9.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e10 = new CommonDataTrans();//磷离子
+// e10.setUnit(PollutionEnum.dataSoilPion.getUnit());
+// e10.setName(PollutionEnum.dataSoilPion.getDescription());
+// e10.setColor(PollutionEnum.dataSoilPion.getColor());
+// e10.setIcon(PollutionEnum.dataSoilPion.getIcon());
+// e10.setMobileIcon(PollutionEnum.dataSoilPion.getMobileIcon());
+// e10.setBsIcon(PollutionEnum.dataSoilPion.getBsIcon());
+// e10.setSurvItem(PollutionEnum.dataSoilPion.getCode());
+// e10.setValue(transdataSoil.getDataSoilPion());
+// e10.setLastUpdate(timeGap);
+// e10.setDataDateTime(transdataSoil.getDataDateTime());
+// e10.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e11 = new CommonDataTrans();//钾离子
+// e11.setUnit(PollutionEnum.dataSoilKion.getUnit());
+// e11.setName(PollutionEnum.dataSoilKion.getDescription());
+// e11.setColor(PollutionEnum.dataSoilKion.getColor());
+// e11.setIcon(PollutionEnum.dataSoilKion.getIcon());
+// e11.setMobileIcon(PollutionEnum.dataSoilKion.getMobileIcon());
+// e11.setBsIcon(PollutionEnum.dataSoilKion.getBsIcon());
+// e11.setSurvItem(PollutionEnum.dataSoilKion.getCode());
+// e11.setValue(transdataSoil.getDataSoilKion());
+// e11.setLastUpdate(timeGap);
+// e11.setDataDateTime(transdataSoil.getDataDateTime());
+// e11.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e12 = new CommonDataTrans();//土壤铵离子
+// e12.setUnit(PollutionEnum.dataSoilNhion.getUnit());
+// e12.setName(PollutionEnum.dataSoilNhion.getDescription());
+// e12.setColor(PollutionEnum.dataSoilNhion.getColor());
+// e12.setIcon(PollutionEnum.dataSoilNhion.getIcon());
+// e12.setMobileIcon(PollutionEnum.dataSoilNhion.getMobileIcon());
+// e12.setBsIcon(PollutionEnum.dataSoilNhion.getBsIcon());
+// e12.setSurvItem(PollutionEnum.dataSoilNhion.getCode());
+// e12.setValue(transdataSoil.getDataSoilNhion());
+// e12.setLastUpdate(timeGap);
+// e12.setDataDateTime(transdataSoil.getDataDateTime());
+// e12.setDeployId(transdataSoil.getDeployId());
+//
+// CommonDataTrans e13 = new CommonDataTrans();//土壤硝酸根离子
+// e13.setUnit(PollutionEnum.dataSoilNoion.getUnit());
+// e13.setName(PollutionEnum.dataSoilNoion.getDescription());
+// e13.setColor(PollutionEnum.dataSoilNoion.getColor());
+// e13.setIcon(PollutionEnum.dataSoilNoion.getIcon());
+// e13.setMobileIcon(PollutionEnum.dataSoilNoion.getMobileIcon());
+// e13.setBsIcon(PollutionEnum.dataSoilNoion.getBsIcon());
+// e13.setSurvItem(PollutionEnum.dataSoilNoion.getCode());
+// e13.setValue(transdataSoil.getDataSoilNoion());
+// e13.setLastUpdate(timeGap);
+// e13.setDataDateTime(transdataSoil.getDataDateTime());
+// e13.setDeployId(transdataSoil.getDeployId());
+
+ listFinal.add(e1);
+ listFinal.add(e2);
+ listFinal.add(e3);
+// listFinal.add(e8);
+// listFinal.add(e9);
+// listFinal.add(e10);
+// listFinal.add(e11);
+// listFinal.add(e12);
+// listFinal.add(e13);
+
+ return listFinal;
+ }
+
+
+ /**
+ * 组装水质数据
+ */
+ public static List constructWater(SurvTransdataSoil transdataSoil) {
+ if (transdataSoil == null) {
+ return new ArrayList<>();
+ }
+ List listFinal = new ArrayList<>();
+ String timeGap = DateUtilTools.calTimeGap(transdataSoil.getDataDateTime(), LocalDateTime.now());
+ if("1042".equals(transdataSoil.getTenantId())){
+ timeGap = "1";
+ }
+ CommonDataTrans e1 = new CommonDataTrans();//土壤温度
+ e1.setUnit(PollutionEnum.dataSoilTemp.getUnit());
+ e1.setName(PollutionEnum.dataSoilTemp.getDescription().replace("土壤", ""));
+ e1.setColor(PollutionEnum.dataSoilTemp.getColor());
+ e1.setIcon(PollutionEnum.dataSoilTemp.getIcon());
+ e1.setMobileIcon(PollutionEnum.dataSoilTemp.getMobileIcon());
+ e1.setBsIcon(PollutionEnum.dataSoilTemp.getBsIcon());
+ e1.setSurvItem(PollutionEnum.dataSoilTemp.getCode());
+ e1.setValue(transdataSoil.getDataSoilTemp());
+ e1.setLastUpdate(timeGap);
+ e1.setDataDateTime(transdataSoil.getDataDateTime());
+ e1.setDeployId(transdataSoil.getDeployId());
+ e1.setIconName(PollutionEnum.dataSoilTemp.getIconName());
+ e1.setSurvType(IotConstants.WATER_DATA);
+
+ CommonDataTrans e3 = new CommonDataTrans();//电导率
+ e3.setUnit(PollutionEnum.dataSoilDdl.getUnit());
+ e3.setName(PollutionEnum.dataSoilDdl.getDescription());
+ e3.setColor(PollutionEnum.dataSoilDdl.getColor());
+ e3.setIcon(PollutionEnum.dataSoilDdl.getIcon());
+ e3.setMobileIcon(PollutionEnum.dataSoilDdl.getMobileIcon());
+ e3.setBsIcon(PollutionEnum.dataSoilDdl.getBsIcon());
+ e3.setSurvItem(PollutionEnum.dataSoilDdl.getCode());
+ e3.setValue(transdataSoil.getDataSoilDdl());
+ e3.setLastUpdate(timeGap);
+ e3.setDataDateTime(transdataSoil.getDataDateTime());
+ e3.setDeployId(transdataSoil.getDeployId());
+ e3.setIconName(PollutionEnum.dataSoilDdl.getIconName());
+ e3.setSurvType(IotConstants.WATER_DATA);
+
+// CommonDataTrans e8 = new CommonDataTrans();//ph
+// e8.setUnit(PollutionEnum.dataSoilPh.getUnit());
+// e8.setName(PollutionEnum.dataSoilPh.getDescription().replace("土壤", ""));
+// e8.setColor(PollutionEnum.dataSoilPh.getColor());
+// e8.setIcon(PollutionEnum.dataSoilPh.getIcon());
+// e8.setMobileIcon(PollutionEnum.dataSoilPh.getMobileIcon());
+// e8.setBsIcon(PollutionEnum.dataSoilPh.getBsIcon());
+// e8.setSurvItem(PollutionEnum.dataSoilPh.getCode());
+// e8.setValue(transdataSoil.getDataSoilPh());
+// e8.setLastUpdate(timeGap);
+// e8.setDataDateTime(transdataSoil.getDataDateTime());
+// e8.setDeployId(transdataSoil.getDeployId());
+// e8.setIconName(PollutionEnum.dataSoilPh.getIconName());
+// e8.setSurvType(IotConstants.WATER_DATA);
+//
+//
+// CommonDataTrans e11 = new CommonDataTrans();//钾离子
+// e11.setUnit(PollutionEnum.dataSoilKion.getUnit());
+// e11.setName(PollutionEnum.dataSoilKion.getDescription());
+// e11.setColor(PollutionEnum.dataSoilKion.getColor());
+// e11.setIcon(PollutionEnum.dataSoilKion.getIcon());
+// e11.setMobileIcon(PollutionEnum.dataSoilKion.getMobileIcon());
+// e11.setBsIcon(PollutionEnum.dataSoilKion.getBsIcon());
+// e11.setSurvItem(PollutionEnum.dataSoilKion.getCode());
+// e11.setValue(transdataSoil.getDataSoilKion());
+// e11.setLastUpdate(timeGap);
+// e11.setDataDateTime(transdataSoil.getDataDateTime());
+// e11.setDeployId(transdataSoil.getDeployId());
+// e11.setIconName(PollutionEnum.dataSoilKion.getIconName());
+// e11.setSurvType(IotConstants.WATER_DATA);
+//
+// CommonDataTrans e12 = new CommonDataTrans();//土壤铵离子
+// e12.setUnit(PollutionEnum.dataSoilNhion.getUnit());
+// e12.setName(PollutionEnum.dataSoilNhion.getDescription().replace("土壤", ""));
+// e12.setColor(PollutionEnum.dataSoilNhion.getColor());
+// e12.setIcon(PollutionEnum.dataSoilNhion.getIcon());
+// e12.setMobileIcon(PollutionEnum.dataSoilNhion.getMobileIcon());
+// e12.setBsIcon(PollutionEnum.dataSoilNhion.getBsIcon());
+// e12.setSurvItem(PollutionEnum.dataSoilNhion.getCode());
+// e12.setValue(transdataSoil.getDataSoilNhion());
+// e12.setLastUpdate(timeGap);
+// e12.setDataDateTime(transdataSoil.getDataDateTime());
+// e12.setDeployId(transdataSoil.getDeployId());
+// e12.setIconName(PollutionEnum.dataSoilNhion.getIconName());
+// e12.setSurvType(IotConstants.WATER_DATA);
+//
+// CommonDataTrans e13 = new CommonDataTrans();//土壤硝酸根离子
+// e13.setUnit(PollutionEnum.dataSoilNoion.getUnit());
+// e13.setName(PollutionEnum.dataSoilNoion.getDescription().replace("土壤", ""));
+// e13.setColor(PollutionEnum.dataSoilNoion.getColor());
+// e13.setIcon(PollutionEnum.dataSoilNoion.getIcon());
+// e13.setMobileIcon(PollutionEnum.dataSoilNoion.getMobileIcon());
+// e13.setBsIcon(PollutionEnum.dataSoilNoion.getBsIcon());
+// e13.setSurvItem(PollutionEnum.dataSoilNoion.getCode());
+// e13.setValue(transdataSoil.getDataSoilNoion());
+// e13.setLastUpdate(timeGap);
+// e13.setDataDateTime(transdataSoil.getDataDateTime());
+// e13.setDeployId(transdataSoil.getDeployId());
+// e13.setIconName(PollutionEnum.dataSoilNoion.getIconName());
+// e13.setSurvType(IotConstants.WATER_DATA);
+
+ listFinal.add(e1);
+ listFinal.add(e3);
+// listFinal.add(e8);
+// listFinal.add(e11);
+// listFinal.add(e12);
+// listFinal.add(e13);
+
+ return listFinal;
+ }
+
+
+ public static List markZhibiao(List dataList, List zhibiaoList) {
+ if (dataList == null || dataList.size() == 0) {//无数据直接返回
+ System.out.println("无数据直接返回");
+ return dataList;
+ }
+// List zhibiaoList = zhibiaoMap.get(dataList.get(0).getDeployId());
+ if (zhibiaoList == null || zhibiaoList.size() == 0) {//无指标直接返回
+ System.out.println("无指标直接返回");
+ return dataList;
+ }
+ Map zhiBiaoMap = new HashMap<>();
+ zhibiaoList.forEach(item ->
+ {
+ VOZhiBiao voZhiBiao = new VOZhiBiao();
+ voZhiBiao.setValHigh(item.getValHeight());
+ voZhiBiao.setValLow(item.getValLow());
+ voZhiBiao.setFieldName(item.getEntityField());
+ zhiBiaoMap.put(item.getEntityField(), voZhiBiao);
+ });
+
+ for (CommonDataTrans commonDataTrans : dataList) {
+ VOZhiBiao curZhibiao = zhiBiaoMap.get(commonDataTrans.getSurvItem());
+ if (curZhibiao != null) {//如果存在指标则进行高低判断
+ System.out.println(curZhibiao.getValLow() + "=========查询到指标============" + curZhibiao.getValHigh());
+ commonDataTrans.setReadStatus(DeviceReadConstants.READ_NORMAL);//默认正常
+ if (StringUtils.isNotBlank(commonDataTrans.getValue())) {
+ String lowStr = curZhibiao.getValLow() != null ? curZhibiao.getValLow().toString() : "";
+ String highStr = curZhibiao.getValHigh() != null ? curZhibiao.getValHigh().toString() : "";
+ if (StringUtils.isBlank(lowStr)) {
+ lowStr = "*";
+ }
+ if (StringUtils.isBlank(highStr)) {
+ highStr = "*";
+ }
+ commonDataTrans.setLimitStr(lowStr + "~" + highStr);
+ Double curRead = Double.valueOf(commonDataTrans.getValue());
+ if (curZhibiao.getValHigh() != null) {//高阈值
+ if (curRead > curZhibiao.getValHigh()) {
+ commonDataTrans.setReadStatus(DeviceReadConstants.READ_TOO_HIGH);
+ }
+ }
+ if (curZhibiao.getValLow() != null) {//低阈值判断
+ if (curRead < curZhibiao.getValLow()) {
+ commonDataTrans.setReadStatus(DeviceReadConstants.READ_TOO_LOW);
+ }
+ }
+ }
+ } else {
+ System.out.println("无指标跳过====================" + commonDataTrans.getSurvItem());
+ }
+ }
+
+
+ return dataList;
+ }
+
+
+
+ //风向描述类型一
+ private static final String[] directArrOne = new String[]{
+ "北", "东北偏北", "东北", "东北偏东",
+ "东", "东南偏东", "东南", "东南偏南",
+ "南", "西南偏南", "西南", "西南偏西",
+ "西", "西北偏西", "西北", "西北偏北"};
+
+ //风向描述类型二
+ private static final String[] directArrTwo = new String[]{
+ "北", "北东北", "东北", "东东北",
+ "东", "东东南", "东南", "南东南",
+ "南", "南西南", "西南", "西西南",
+ "西", "西西北", "西北", "北西北"};
+
+ /**
+ * 风向角度转具体风向
+ *
+ * @param degrees 风向角度 0 <= degrees <= 360
+ * @return 具体风向
+ */
+ public static String windDirectionSwitch(float degrees) {
+ int index = 0;
+ if (348.75 <= degrees && degrees <= 360) {
+ index = 0;
+ } else if (0 <= degrees && degrees <= 11.25) {
+ index = 0;
+ } else if (11.25 < degrees && degrees <= 33.75) {
+ index = 1;
+ } else if (33.75 < degrees && degrees <= 56.25) {
+ index = 2;
+ } else if (56.25 < degrees && degrees <= 78.75) {
+ index = 3;
+ } else if (78.75 < degrees && degrees <= 101.25) {
+ index = 4;
+ } else if (101.25 < degrees && degrees <= 123.75) {
+ index = 5;
+ } else if (123.75 < degrees && degrees <= 146.25) {
+ index = 6;
+ } else if (146.25 < degrees && degrees <= 168.75) {
+ index = 7;
+ } else if (168.75 < degrees && degrees <= 191.25) {
+ index = 8;
+ } else if (191.25 < degrees && degrees <= 213.75) {
+ index = 9;
+ } else if (213.75 < degrees && degrees <= 236.25) {
+ index = 10;
+ } else if (236.25 < degrees && degrees <= 258.75) {
+ index = 11;
+ } else if (258.75 < degrees && degrees <= 281.25) {
+ index = 12;
+ } else if (281.25 < degrees && degrees <= 303.75) {
+ index = 13;
+ } else if (303.75 < degrees && degrees <= 326.25) {
+ index = 14;
+ } else if (326.25 < degrees && degrees < 348.75) {
+ index = 15;
+ } else {
+ System.out.println("风向角度[{}] 大于 360," + degrees);
+ }
+ return directArrOne[index];
+ }
+
+
+ public static JSONArray addTotalCount(JSONArray jsonArray) {
+ JSONArray returns = new JSONArray();
+
+ if (jsonArray != null && !jsonArray.isEmpty()) {
+ int totalCount = 1;
+ for (Object o : jsonArray) {
+ int count = 1;
+ BigDecimal maxPh = BigDecimal.ZERO;
+ BigDecimal minPh = BigDecimal.ZERO;
+ BigDecimal PhTotal = BigDecimal.ZERO;
+
+ BigDecimal maxEc = BigDecimal.ZERO;
+ BigDecimal minEc = BigDecimal.ZERO;
+ BigDecimal ecTotal = BigDecimal.ZERO;
+ JSONObject job = JSONObject.parseObject(o.toString());
+ job.put("totalCount", "第" + totalCount + "/" + jsonArray.size() + "次");
+ job.put("end_datetimes", job.getString("end_datetime").split("T")[0]);
+ job.put("start_datetimes", job.getString("start_datetime").split("T")[0]);
+
+ JSONArray jarrs = job.getJSONArray("RecordDetails");
+
+ for (Object jarr : jarrs) {
+ JSONObject details = JSONObject.parseObject(jarr.toString());
+
+ String curEc = details.getString("ec");
+ String curPh = details.getString("ph");
+ BigDecimal ecc = new BigDecimal(curEc);
+ BigDecimal phh = new BigDecimal(curPh);
+
+ if (count == 1) {
+ maxPh = phh;
+ minPh = phh;
+ maxEc = ecc;
+ minEc = ecc;
+ } else {
+ if (ecc.compareTo(maxEc) > 0) {
+ maxEc = ecc;
+ }
+ if (ecc.compareTo(minEc) < 0) {
+ minEc = ecc;
+ }
+ if (phh.compareTo(maxPh) > 0) {
+ maxPh = phh;
+ }
+ if (phh.compareTo(minPh) < 0) {
+ minPh = phh;
+ }
+ }
+ PhTotal = PhTotal.add(phh);
+ ecTotal = ecTotal.add(ecc);
+ count++;
+ }
+ BigDecimal avgEc = ecTotal.divide(new BigDecimal(jsonArray.size()), BigDecimal.ROUND_HALF_UP);
+ BigDecimal avgPh = PhTotal.divide(new BigDecimal(jsonArray.size()), BigDecimal.ROUND_HALF_UP);
+
+ job.put("maxEc", maxEc.stripTrailingZeros().toPlainString());
+ job.put("minEc", minEc.stripTrailingZeros().toPlainString());
+ job.put("avgEc", avgEc.stripTrailingZeros().toPlainString());
+ job.put("maxPh", maxPh.stripTrailingZeros().toPlainString());
+ job.put("minPh", minPh.stripTrailingZeros().toPlainString());
+ job.put("avgPh", avgPh.stripTrailingZeros().toPlainString());
+ returns.add(job);
+ totalCount++;
+ }
+ }
+ return returns;
+ }
+
+//
+//
+// public static List constructBug(List survs) {
+// List datas = new ArrayList<>();
+// if (survs != null && !survs.isEmpty()) {
+// for (FBugSurv surv : survs) {
+// CommonDataTrans dataTrans = new CommonDataTrans();
+// dataTrans.setValue(surv.getLocalPicUrl());
+// dataTrans.setDeployId(surv.getDeployId());
+// dataTrans.setName(surv.getDeviceName());
+// dataTrans.setDataDateTime(surv.getCollecTime());
+// datas.add(dataTrans);
+// }
+// }
+// return datas;
+// }
+//
+// public static List constructSpore(List survs) {
+// List datas = new ArrayList<>();
+// if (survs != null && !survs.isEmpty()) {
+// for (FSurvSpore surv : survs) {
+// CommonDataTrans dataTrans = new CommonDataTrans();
+// dataTrans.setValue(surv.getLocalPicUrl());
+// dataTrans.setDeployId(surv.getDeployId());
+// dataTrans.setName("孢子仪");
+// dataTrans.setDataDateTime(surv.getAddtime());
+// datas.add(dataTrans);
+// }
+// }
+// return datas;
+// }
+//
+// public static List constructPestLight(List pestlights) {
+// List datas = new ArrayList<>();
+// if (pestlights != null && !pestlights.isEmpty()) {
+// for (FPreventPestlight surv : pestlights) {
+// CommonDataTrans dataTrans = new CommonDataTrans();
+// dataTrans.setValue(surv.getCt());
+// dataTrans.setDeployId(surv.getDeployId());
+// dataTrans.setName("杀虫灯");
+// dataTrans.setDataDateTime(surv.getSyncTime());
+// datas.add(dataTrans);
+// }
+// }
+// return datas;
+// }
+
+ public static String generateRandomString(int length) {
+// String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ StringBuilder sb = new StringBuilder(length);
+ SecureRandom random = new SecureRandom();
+ for (int i = 0; i < length; i++) {
+ sb.append(characters.charAt(random.nextInt(characters.length())));
+ }
+ return sb.toString();
+ }
+
+
+ public static String processRelayOprateName(String relayName, String relayValue) {
+ String finalDes = "其他";
+ if (StringUtils.isNotBlank(relayName) && StringUtils.isNotBlank(relayValue)) {
+ if ("1".equals(relayValue)) {
+ finalDes = relayName + "开";
+ } else if ("0".equals(relayValue)) {
+ finalDes = relayName + "关";
+ }
+ }
+ return finalDes;
+ }
+
+
+ /**
+ * 随机编码生成
+ *
+ * @return
+ */
+ public static String genRandomCode(String prefixStr) {
+// Integer ranCode = (int)((Math.random()*9+1)*100);
+// String tempStr = String.valueOf(new Date().getTime());
+// String timestampstr= tempStr.substring(tempStr.length(),tempStr.length());
+
+ Random rand = new Random();
+ char[] letters = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
+ 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
+ String str = "";
+ int index;
+ boolean[] flags = new boolean[letters.length];//默认为false
+ for (int i = 0; i < 5; i++) {
+ do {
+ index = rand.nextInt(letters.length);
+ } while (flags[index] == true);
+ char c = letters[index];
+ str += c;
+ flags[index] = true;
+ }
+
+ return prefixStr + str;
+ }
+
+}
diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/Iotutils.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/Iotutils.java
index 0db7f47..44f9e87 100644
--- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/Iotutils.java
+++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/Iotutils.java
@@ -1,11 +1,17 @@
package org.jeecg.modules.appmana.utils;
+import cn.hutool.core.util.StrUtil;
+import org.jeecg.common.constant.enums.PollutionEnum;
import org.jeecg.common.entity.SurvDeviceDeploy;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.appmana.service.ISurvConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -18,6 +24,17 @@ public class Iotutils {
@Autowired
private ISurvConfigService survConfigService ;
+ public static String isValidTimeFormat(String time, String format) {
+ try {
+ DateFormat dateFormat = new SimpleDateFormat(format);
+ dateFormat.setLenient(false); // 设置为不宽容模式,如果输入不匹配将抛出异常
+ Date date = dateFormat.parse(time);
+ return dateFormat.format(date);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
public Integer checkIsOnline(String tenantId, String protocolCode, Date lastSyncTime, String deployType) {
long limitTime = survConfigService.getOfflineConfig(tenantId,deployType);
@@ -61,4 +78,51 @@ public class Iotutils {
}
return deploy;
}
+
+
+
+ /**
+ * 校验是否为累计类型的监测项
+ */
+ public static boolean isAccumulate(String survItem){
+ String column = StrUtil.toCamelCase(survItem);
+ return isEntityAccumulate(column);
+ }
+
+
+ /**
+ * 除了这还要改sql FHisdataAirMapper中的sql,用于综合统计,目前只有空气有累计情况,20250928
+ * @param entityColumnName
+ * @return
+ */
+ public static boolean isEntityAccumulate(String entityColumnName){
+ boolean flag = false;
+ if(PollutionEnum.dataRainTotal.getCode().equals(entityColumnName)){//雨量累计
+ flag = true;
+ }
+ else if (PollutionEnum.dataSunHour.getCode().equals(entityColumnName)) {//日照时数
+ flag = true;
+ }
+ else if (PollutionEnum.dataSunTotal.getCode().equals(entityColumnName)) {//辐射累计
+ flag = true;
+ }
+ else if (PollutionEnum.dataEvaporation.getCode().equals(entityColumnName)) {//蒸发
+ flag = true;
+ }
+ return flag;
+ }
+
+ /**
+ * 统一的四舍五入,保留2位小小数,无负值
+ */
+ public static String toStringData(BigDecimal datas){
+ String result = "0";
+ if(datas!=null){
+// if(datas.compareTo(BigDecimal.ZERO)<0){
+// datas = BigDecimal.ZERO;
+// }
+ result = datas.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
+ }
+ return result;
+ }
}
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml
index e046fd4..8557b71 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml
@@ -57,10 +57,14 @@
select STATION_TYPE from surv_station_info where STATION_CODE = #{STATION_CODE}
-
+
select * from surv_device_info where DEVICE_CODE = #{DEVICE_CODE}
+
+ select * from surv_dict_device_detail where ID = #{DEVICE_CODE}
+
+
ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL,DEVICE_LONGLAT,PROTOCOL_CODE,PROTOCOL_TYPE,DEPLOY_CATE,DEPLOY_SECONDARY_TYPE,CATE_ID,SURV_CONFIG_ID
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataAirMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataAirMapper.xml
index 48ae9ee..3719fcc 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataAirMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataAirMapper.xml
@@ -14,6 +14,7 @@
+
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataSoilMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataSoilMapper.xml
index df9c860..9ad2dff 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataSoilMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvHisdataSoilMapper.xml
@@ -16,6 +16,7 @@
+
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvStationInfoMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvStationInfoMapper.xml
index 9055000..63f5b7c 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvStationInfoMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvStationInfoMapper.xml
@@ -45,26 +45,26 @@
- select count(*) from surv_device_deploy where STATION_CODE = #{STATION_CODE}
+ select count(*) from surv_device_deploy where IS_DEL = 0 AND STATION_CODE = #{STATION_CODE}
- select SUM(LENGTH(di.SURV_ITEM) - LENGTH(replace (di.SURV_ITEM,',','')) +1) from surv_device_info di where di.DEVICE_CODE in (select dd.DEVICE_CODE from surv_device_deploy dd where dd.STATION_CODE = #{STATION_CODE})
+ select SUM(LENGTH(di.SURV_ITEM) - LENGTH(replace (di.SURV_ITEM,',','')) +1) from surv_device_info di where di.DEVICE_CODE in (select dd.DEVICE_CODE from surv_device_deploy dd where dd.IS_DEL = 0 AND dd.STATION_CODE = #{STATION_CODE})
- select count(s.name) from surv_device_deploy t join sc_equ_zhibiao s on t.id = s.equ_id and t.STATION_CODE = #{STATION_CODE} and s.zhibiao_type = '1'
+ select count(s.name) from surv_device_deploy t join sc_equ_zhibiao s on t.id = s.equ_id and t.IS_DEL =0 and t.STATION_CODE = #{STATION_CODE} and s.zhibiao_type = '1'
- select ID,DEPLOY_TYPE,DEVICE_URL,DEPLOY_CODE,DEVICE_CODE,DEPLOY_DES,#{ysToken} as ysToken from surv_device_deploy where STATION_CODE = #{STATION_CODE}
+ select ID,DEPLOY_TYPE,DEVICE_URL,DEPLOY_CODE,DEVICE_CODE,DEPLOY_DES,#{ysToken} as ysToken from surv_device_deploy where IS_DEL = 0 AND STATION_CODE = #{STATION_CODE}
AND DEPLOY_TYPE = #{deviceType}
- select ID,DEPLOY_TYPE,DEVICE_URL,DEPLOY_CODE,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC from surv_device_deploy where STATION_CODE = #{STATION_CODE}
+ select ID,DEPLOY_TYPE,DEVICE_URL,DEPLOY_CODE,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC from surv_device_deploy where IS_DEL = 0 AND STATION_CODE = #{STATION_CODE}
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataAirMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataAirMapper.xml
index d81c544..fc82fd2 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataAirMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataAirMapper.xml
@@ -14,6 +14,7 @@
+
diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataSoilMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataSoilMapper.xml
index e9a73b8..b5c7dba 100644
--- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataSoilMapper.xml
+++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvTransdataSoilMapper.xml
@@ -15,6 +15,7 @@
+
diff --git a/zh-module-applet/zh-applet-common/pom.xml b/zh-module-applet/zh-applet-common/pom.xml
index 93f6bea..e0a7426 100644
--- a/zh-module-applet/zh-applet-common/pom.xml
+++ b/zh-module-applet/zh-applet-common/pom.xml
@@ -68,6 +68,16 @@
knife4j-spring-boot-starter
${knife4j-spring-boot-starter.version}
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
+ com.alibaba
+ easyexcel
+ ${EasyExcel.version}
+
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/DeviceReadConstants.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/DeviceReadConstants.java
new file mode 100644
index 0000000..db6cccd
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/DeviceReadConstants.java
@@ -0,0 +1,10 @@
+package org.jeecg.common.constant;
+
+
+public interface DeviceReadConstants {
+ String READ_NORMAL = "normal";
+
+ String READ_TOO_HIGH = "high";
+
+ String READ_TOO_LOW = "low";
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnum.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnum.java
index f0ebb70..e934df7 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnum.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnum.java
@@ -3,81 +3,154 @@ package org.jeecg.common.constant.enums;
import com.alibaba.fastjson.JSONObject;
public enum PollutionEnum {
- dataAirTemp("dataAirTemp","大气温度","℃","sys/icon/shebei_icon_qixiang.png","air","#22BB8A"),
- dataAirWet("dataAirWet","大气湿度","%RH","sys/icon/zhandian_icon_kongqishidu.png","air","#EE701C"),
- dataAirPress("dataAirPress","大气压力","hPa","sys/icon/zhandian_icon_daqiyali.png","air","#52AC2A"),
- dataRainFall("dataRainFall","雨量","mm","sys/icon/zhandian_icon_jiangyuliang.png","air","#2BADB9"),
- dataRainTotal("dataRainTotal","雨量累计","mm","sys/icon/zhandian_icon_jiangyuliang.png","air","#102B6A"),
- dataWindSpeed("dataWindSpeed","风速","m/s","sys/icon/zhandian_icon_fengsu.png","air","#7CD6CF"),
- dataWindDirection("dataWindDirection","风向","°","sys/icon/zhandian_icon_fengxiang.png","air","#26A3CC"),
- dataSunTotal("dataSunTotal","辐射累计","MJ/m2","sys/icon/zhandian_icon_taiyangquanfushe.png","air","#6C48C7"),
- dataSunFallout("dataSunFallout","太阳全辐射","W/m2","sys/icon/zhandian_icon_taiyangquanfushe.png","air","#22BB8A"),
- dataSoilWet("dataSoilWet","20CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#6495ED"),
- dataSoilWet2("dataSoilWet2","40CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#4169E1"),
- dataSoilWet3("dataSoilWet3","60CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#0000CD"),
- dataSoilTemp("dataSoilTemp","20CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#C71585"),
- dataSoilTemp2("dataSoilTemp2","40CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#FF1493"),
- dataSoilTemp3("dataSoilTemp3","60CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#FF69B4"),
- dataSoilDdl("dataSoilDdl","20CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#92D0D0"),
- dataSoilDdl2("dataSoilDdl2","40CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#73A2A2"),
- dataSoilDdl3("dataSoilDdl3","60CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#567777"),
- dataSoilSalt("dataSoilSalt","土壤盐分","","sys/icon/zhandian_icon_ec.png","soil","#4F5555"),
+ dataAirTemp("dataAirTemp", "大气温度", "℃", "sys/icon/shebei_icon_qixiang.png", "air", "#22BB8A", "sys/mobile/icon/shebei_icon_qixiang.png", "sys/bs/icon/shebei_icon_qixiang.png", "shebei_icon_qixiang.png"),
+ dataAirWet("dataAirWet", "大气湿度", "%RH", "sys/icon/zhandian_icon_kongqishidu.png", "air", "#EE701C", "sys/mobile/icon/zhandian_icon_kongqishidu.png", "sys/bs/icon/zhandian_icon_kongqishidu.png", "zhandian_icon_kongqishidu.png"),
+ dataAirPress("dataAirPress", "大气压力", "hPa", "sys/icon/zhandian_icon_daqiyali.png", "air", "#52AC2A", "sys/mobile/icon/zhandian_icon_daqiyali.png", "sys/bs/icon/zhandian_icon_daqiyali.png", "zhandian_icon_daqiyali.png"),
+ dataRainFall("dataRainFall", "雨量", "mm", "sys/icon/zhandian_icon_jiangyuliang.png", "air", "#2BADB9", "sys/mobile/icon/zhandian_icon_jiangyuliang.png", "sys/bs/icon/zhandian_icon_jiangyuliang.png", "zhandian_icon_jiangyuliang.png"),
+ dataRainTotal("dataRainTotal", "雨量累计", "mm", "sys/icon/zhandian_icon_jiangyuliangtotal.png", "air", "#102B6A", "sys/mobile/icon/zhandian_icon_jiangyuliangtotal.png", "sys/bs/icon/zhandian_icon_jiangyuliangtotal.png", "zhandian_icon_jiangyuliangtotal.png"),
+ dataWindSpeed("dataWindSpeed", "风速", "m/s", "sys/icon/zhandian_icon_fengsu.png", "air", "#7CD6CF", "sys/mobile/icon/zhandian_icon_fengsu.png", "sys/bs/icon/zhandian_icon_fengsu.png", "zhandian_icon_fengsu.png"),
+ dataWindDirection("dataWindDirection", "风向", "°", "sys/icon/zhandian_icon_fengxiang.png", "air", "#26A3CC", "sys/mobile/icon/zhandian_icon_fengxiang.png", "sys/bs/icon/zhandian_icon_fengxiang.png", "zhandian_icon_fengxiang.png"),
+ dataSunTotal("dataSunTotal", "辐射累计", "MJ/m2", "sys/icon/zhandian_icon_fusheleiji.png", "air", "#6C48C7", "sys/mobile/icon/zhandian_icon_fusheleiji.png", "sys/bs/icon/zhandian_icon_fusheleiji.png", "zhandian_icon_fusheleiji.png"),
+ dataSunFallout("dataSunFallout", "太阳全辐射", "W/m2", "sys/icon/zhandian_icon_taiyangquanfushe.png", "air", "#22BB8A", "sys/mobile/icon/zhandian_icon_taiyangquanfushe.png", "sys/bs/icon/zhandian_icon_taiyangquanfushe.png", "zhandian_icon_taiyangquanfushe.png"),
+ dataSunHour("dataSunHour", "日照时数", "h", "sys/icon/shebei_icon_sunhour.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_sunhour.png", "sys/bs/icon/shebei_icon_sunhour.png", "shebei_icon_sunhour.png"),
+ dataPhotosynthetic("dataPhotosynthetic", "光合", "W/M2", "sys/icon/shebei_icon_photosynthetic.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_photosynthetic.png", "sys/bs/icon/shebei_icon_photosynthetic.png", "shebei_icon_photosynthetic.png"),
+ dataEvaporation("dataEvaporation", "蒸发", "mm", "sys/icon/shebei_icon_evaporation.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_evaporation.png", "sys/bs/icon/shebei_icon_evaporation.png", "shebei_icon_evaporation.png"),
- dataSoilWetMark("dataSoilWetMark","土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#6495ED"),
- dataSoilMark("dataSoilMark","土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#C71585"),
- dataSoilDdlMark("dataSoilDdlMark","电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#92D0D0"),
+ dataSunRate("dataSunRate", "照度", "Lux", "sys/icon/zhandian_icon_sunrate.png", "air", "#EE400F", "sys/mobile/icon/zhandian_icon_sunrate.png", "sys/bs/icon/zhandian_icon_sunrate.png", "zhandian_icon_sunrate.png"),
+ dataPm25("dataPm25", "PM2.5", "ug/m3", "sys/icon/zhandian_icon_pm25.png", "air", "#26A3AA", "sys/mobile/icon/zhandian_icon_pm25.png", "sys/bs/icon/zhandian_icon_pm25.png", "zhandian_icon_pm25.png"),
+ dataAirCod("dataAirCod", "二氧化碳", "ppm", "sys/icon/zhandian_icon_cod2.png", "air", "#72a680", "sys/mobile/icon/zhandian_icon_cod2.png", "sys/bs/icon/zhandian_icon_cod2.png", "zhandian_icon_cod2.png"),
- dataWaterTp("dataWaterTp","总磷","mg/L","sys/icon/shebei_icon_tp.png","water","#C8CC00"),
- dataWaterTn("dataWaterTn","总氮","mg/L","sys/icon/shebei_icon_tn.png","water","#009DB2"),
- dataWaterNo("dataWaterNo","硝态氮","mg/L","sys/icon/shebei_icon_no3n.png","water_orient","#72BAA7"),
- dataWaterNh("dataWaterNh","氨氮","mg/L","sys/icon/shebei_icon_nh3n.png","water_live","#225A1F"),
- dataWaterCod("dataWaterCod","化学需氧量","mg/L","sys/icon/shebei_icon_cod.png","water_live","#FDB933"),
+ dataAirNeo("dataAirNeo", "负氧离子", "个/cm³", "sys/icon/shebei_icon_airneo.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_airneo.png", "sys/bs/icon/shebei_icon_airneo.png", "shebei_icon_airneo.png"),
+ dataAirTotalRadiation("dataAirTotalRadiation", "全辐射", "mm", "sys/icon/shebei_icon_total_radiation.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_total_radiation.png", "sys/bs/icon/shebei_icon_total_radiation.png", "shebei_icon_total_radiation.png"),
+
+ //仁科 20250911
+ dataAirNh("dataAirNh", "氨气", "ppm", "sys/icon/shebei_icon_airnh3.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_airnh3.png", "sys/bs/icon/shebei_icon_airnh3.png", "shebei_icon_airnh3.png"),
+ dataAirHs("dataAirHs", "硫化氢", "ppm", "sys/icon/shebei_icon_airh2s.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_airh2s.png", "sys/bs/icon/shebei_icon_airh2s.png", "shebei_icon_airh2s.png"),
+ dataAirEone("dataAirEone", "预留1", "ppm", "sys/icon/shebei_icon_eone.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_eone.png", "sys/bs/icon/shebei_icon_eone.png", "shebei_icon_eone.png"),
+ dataAirETwo("dataAirETWO", "预留2", "ppm", "sys/icon/shebei_icon_etwo.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_etwo.png", "sys/bs/icon/shebei_icon_etwo.png", "shebei_icon_etwo.png"),
+ dataAirEThree("dataAirEThree", "预留3", "ppm", "sys/icon/shebei_icon_ethree.png", "air", "#72a680", "sys/mobile/icon/shebei_icon_ethree.png", "sys/bs/icon/shebei_icon_ethree.png", "shebei_icon_ethree.png"),
- dataStinkOu("dataOu","臭气浓度","mg/m³","sys/icon/zhandian_icon_ou.png","stink","#f47a75"),
- dataStinkNh3("dataNh3","氨气","mg/m³","sys/icon/zhandian_icon_nh3.png","stink","#d05c7c"),
- dataStinkH2s("dataH2s","硫化氢","mg/m³","sys/icon/zhandian_icon_h2s.png","stink","#d05c9f"),
- dataStinkTvoc("dataTvoc","总挥发性有机物","mg/m³","sys/icon/zhandian_icon_tvoc.png","stink","#f06464"),
+ dataSoilWet("dataSoilWet", "土壤湿度", "%", "sys/icon/zhandian_icon_turangshidu.png", "soil", "#6495ED", "sys/mobile/icon/zhandian_icon_turangshidu.png", "sys/bs/icon/zhandian_icon_turangshidu.png", "zhandian_icon_turangshidu.png"),
+ dataSoilWet2("dataSoilWet2", "40CM土壤湿度", "%", "sys/icon/zhandian_icon_turangshidu.png", "soil", "#4169E1", "sys/mobile/icon/zhandian_icon_turangshidu.png", "sys/bs/icon/zhandian_icon_turangshidu.png", "zhandian_icon_turangshidu.png"),
+ dataSoilWet3("dataSoilWet3", "60CM土壤湿度", "%", "sys/icon/zhandian_icon_turangshidu.png", "soil", "#0000CD", "sys/mobile/icon/zhandian_icon_turangshidu.png", "sys/bs/icon/zhandian_icon_turangshidu.png", "zhandian_icon_turangshidu.png"),
+ dataSoilWet4("dataSoilWet4", "80CM土壤湿度", "%", "sys/icon/zhandian_icon_turangshidu.png", "soil", "#0000CG", "sys/mobile/icon/zhandian_icon_turangshidu.png", "sys/bs/icon/zhandian_icon_turangshidu.png", "zhandian_icon_turangshidu.png"),
+ dataSoilTemp("dataSoilTemp", "土壤温度", "℃", "sys/icon/zhandian_icon_turangwendu.png", "soil", "#C71585", "sys/mobile/icon/zhandian_icon_turangwendu.png", "sys/bs/icon/zhandian_icon_turangwendu.png", "zhandian_icon_turangwendu.png"),
+ dataSoilTemp2("dataSoilTemp2", "40CM土壤温度", "℃", "sys/icon/zhandian_icon_turangwendu.png", "soil", "#FF1493", "sys/mobile/icon/zhandian_icon_turangwendu.png", "sys/bs/icon/zhandian_icon_turangwendu.png", "zhandian_icon_turangwendu.png"),
+ dataSoilTemp3("dataSoilTemp3", "60CM土壤温度", "℃", "sys/icon/zhandian_icon_turangwendu.png", "soil", "#FF69B4", "sys/mobile/icon/zhandian_icon_turangwendu.png", "sys/bs/icon/zhandian_icon_turangwendu.png", "zhandian_icon_turangwendu.png"),
+ dataSoilTemp4("dataSoilTemp4", "80CM土壤温度", "℃", "sys/icon/zhandian_icon_turangwendu.png", "soil", "#FF69B9", "sys/mobile/icon/zhandian_icon_turangwendu.png", "sys/bs/icon/zhandian_icon_turangwendu.png", "zhandian_icon_turangwendu.png"),
+ dataSoilDdl("dataSoilDdl", "电导率", "uS/cm", "sys/icon/zhandian_icon_ec.png", "soil", "#92D0D0", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
+ dataSoilDdl2("dataSoilDdl2", "40CM电导率", "uS/cm", "sys/icon/zhandian_icon_ec.png", "soil", "#73A2A2", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
+ dataSoilDdl3("dataSoilDdl3", "60CM电导率", "uS/cm", "sys/icon/zhandian_icon_ec.png", "soil", "#567777", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
+ dataSoilDdl4("dataSoilDdl4", "80CM电导率", "uS/cm", "sys/icon/zhandian_icon_ec.png", "soil", "#567789", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
+
+ dataSoilSalt("dataSoilSalt", "土壤盐分", "", "sys/icon/zhandian_icon_ec.png", "soil", "#4F5555", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
+
+ dataSoilWetMark("dataSoilWetMark", "土壤湿度mark", "%", "sys/icon/zhandian_icon_turangshidu.png", "soil", "#6495ED", "sys/mobile/icon/zhandian_icon_turangshidu.png", "sys/bs/icon/zhandian_icon_turangshidu.png", "zhandian_icon_turangshidu.png"),
+ dataSoilMark("dataSoilMark", "土壤温度mark", "℃", "sys/icon/zhandian_icon_turangwendu.png", "soil", "#C71585", "sys/mobile/icon/zhandian_icon_turangwendu.png", "sys/bs/icon/zhandian_icon_turangwendu.png", "zhandian_icon_turangwendu.png"),
+ dataSoilDdlMark("dataSoilDdlMark", "电导率mark", "uS/cm", "sys/icon/zhandian_icon_ec.png", "soil", "#92D0D0", "sys/mobile/icon/zhandian_icon_ec.png", "sys/bs/icon/zhandian_icon_ec.png", "zhandian_icon_ec.png"),
- dataDefault("default","默认","台","","default","#DEAB8A");
+ dataLeafTemp("dataLeafTemp", "叶面温度", "℃", "sys/icon/zhandian_icon_leaftemp.png", "air", "#FF1493", "sys/mobile/icon/zhandian_icon_leaftemp.png", "sys/bs/icon/zhandian_icon_leaftemp.png", "zhandian_icon_leaftemp.png"),
+ dataLeafWet("dataLeafWet", "叶面湿度", "%", "sys/icon/zhandian_icon_leafwet.png", "air", "#4169E1", "sys/mobile/icon/zhandian_icon_leafwet.png", "sys/bs/icon/zhandian_icon_leafwet.png", "zhandian_icon_leafwet.png"),
+
+ dataSoilPh("dataSoilPh", "土壤PH", "", "sys/icon/zhandian_icon_ph.png", "soil", "#92D0F1", "sys/mobile/icon/zhandian_icon_ph.png", "sys/bs/icon/zhandian_icon_ph.png", "zhandian_icon_ph.png"),
+ dataSoilNion("dataSoilNion", "氮离子", "mg/KG", "sys/icon/zhandian_icon_nion.png", "soil", "#92D0F3", "sys/mobile/icon/zhandian_icon_nion.png", "sys/bs/icon/zhandian_icon_nion.png", "zhandian_icon_nion.png"),
+ dataSoilPion("dataSoilPion", "磷离子", "mg/KG", "sys/icon/zhandian_icon_pion.png", "soil", "#92D0F5", "sys/mobile/icon/zhandian_icon_pion.png", "sys/bs/icon/zhandian_icon_pion.png", "zhandian_icon_pion.png"),
+ dataSoilKion("dataSoilKion", "钾离子", "mg/KG", "sys/icon/shebei_icon_k-.png", "soil", "#92D0F7", "sys/mobile/icon/shebei_icon_k-.png", "sys/bs/icon/shebei_icon_k-.png", "shebei_icon_k-.png"),
+
+ dataSoilNion2("dataSoilNion2", "氮离子", "mg/KG", "sys/icon/zhandian_icon_nion.png", "soil", "#92D0F3", "sys/mobile/icon/zhandian_icon_nion.png", "sys/bs/icon/zhandian_icon_nion.png", "zhandian_icon_nion.png"),
+ dataSoilPion2("dataSoilPion2", "磷离子", "mg/KG", "sys/icon/zhandian_icon_pion.png", "soil", "#92D0F5", "sys/mobile/icon/zhandian_icon_pion.png", "sys/bs/icon/zhandian_icon_pion.png", "zhandian_icon_pion.png"),
+ dataSoilKion2("dataSoilKion2", "钾离子", "mg/KG", "sys/icon/shebei_icon_k-.png", "soil", "#92D0F7", "sys/mobile/icon/shebei_icon_k-.png", "sys/bs/icon/shebei_icon_k-.png", "shebei_icon_k-.png"),
+
+
+ dataSoilNion3("dataSoilNion3", "氮离子", "mg/KG", "sys/icon/zhandian_icon_nion.png", "soil", "#92D0F3", "sys/mobile/icon/zhandian_icon_nion.png", "sys/bs/icon/zhandian_icon_nion.png", "zhandian_icon_nion.png"),
+ dataSoilPion3("dataSoilPion3", "磷离子", "mg/KG", "sys/icon/zhandian_icon_pion.png", "soil", "#92D0F5", "sys/mobile/icon/zhandian_icon_pion.png", "sys/bs/icon/zhandian_icon_pion.png", "zhandian_icon_pion.png"),
+ dataSoilKion3("dataSoilKion3", "钾离子", "mg/KG", "sys/icon/shebei_icon_k-.png", "soil", "#92D0F7", "sys/mobile/icon/shebei_icon_k-.png", "sys/bs/icon/shebei_icon_k-.png", "shebei_icon_k-.png"),
+
+
+ dataSoilNion4("dataSoilNion4", "氮离子", "mg/KG", "sys/icon/zhandian_icon_nion.png", "soil", "#92D0F3", "sys/mobile/icon/zhandian_icon_nion.png", "sys/bs/icon/zhandian_icon_nion.png", "zhandian_icon_nion.png"),
+ dataSoilPion4("dataSoilPion4", "磷离子", "mg/KG", "sys/icon/zhandian_icon_pion.png", "soil", "#92D0F5", "sys/mobile/icon/zhandian_icon_pion.png", "sys/bs/icon/zhandian_icon_pion.png", "zhandian_icon_pion.png"),
+ dataSoilKion4("dataSoilKion4", "钾离子", "mg/KG", "sys/icon/shebei_icon_k-.png", "soil", "#92D0F7", "sys/mobile/icon/shebei_icon_k-.png", "sys/bs/icon/shebei_icon_k-.png", "shebei_icon_k-.png"),
+
+
+ dataSoilNhion("dataSoilNhion", "土壤铵离子", "mg-L", "sys/icon/shebei_icon_nh4-.png", "soil", "#92D0F9", "sys/mobile/icon/shebei_icon_nh4-.png", "sys/bs/icon/shebei_icon_nh4-.png", "shebei_icon_nh4-.png"),
+ dataSoilNoion("dataSoilNoion", "土壤硝酸根离子", "ppm", "sys/icon/shebei_icon_no3-.png", "soil", "#92D0FE", "sys/mobile/icon/shebei_icon_no3-.png", "sys/bs/icon/shebei_icon_no3-.png", "shebei_icon_no3-.png"),
+ dataSoilCuion("dataSoilCuion", "土壤铜离子", "ppm", "sys/icon/zhandian_icon_cu-.png", "soil", "#92D1F1", "sys/mobile/icon/zhandian_icon_cu-.png", "sys/bs/icon/zhandian_icon_cu-.png", "zhandian_icon_cu-.png"),
+ dataSoilPbion("dataSoilPbion", "土壤铅离子", "ppm", "sys/icon/zhandian_icon_pb-.png", "soil", "#92D1F3", "sys/mobile/icon/zhandian_icon_pb-.png", "sys/bs/icon/zhandian_icon_pb-.png", "zhandian_icon_pb-.png"),
+ dataSoilCdion("dataSoilCdion", "土壤镉离子", "ppm", "sys/icon/zhandian_icon_cd-.png", "soil", "#92D1F5", "sys/mobile/icon/zhandian_icon_cd-.png", "sys/bs/icon/zhandian_icon_cd-.png", "zhandian_icon_cd-.png"),
+
+
+ dataWaterTp("dataWaterTp", "总磷", "mg/L", "sys/icon/shebei_icon_tp.png", "water", "#C8CC00", "sys/mobile/icon/shebei_icon_tp.png", "sys/bs/icon/shebei_icon_tp.png", "shebei_icon_tp.png"),
+ dataWaterTn("dataWaterTn", "总氮", "mg/L", "sys/icon/shebei_icon_tn.png", "water", "#009DB2", "sys/mobile/icon/shebei_icon_tn.png", "sys/bs/icon/shebei_icon_tn.png", "shebei_icon_tn.png"),
+ dataWaterNo("dataWaterNo", "硝态氮", "mg/L", "sys/icon/shebei_icon_no3n.png", "water_orient", "#72BAA7", "sys/mobile/icon/shebei_icon_no3n.png", "sys/bs/icon/shebei_icon_no3n.png", "shebei_icon_no3n.png"),
+ dataWaterNh("dataWaterNh", "氨氮", "mg/L", "sys/icon/shebei_icon_nh3n.png", "water_live", "#225A1F", "sys/mobile/icon/shebei_icon_nh3n.png", "sys/bs/icon/shebei_icon_nh3n.png", "shebei_icon_nh3n.png"),
+ dataWaterCod("dataWaterCod", "化学需氧量", "mg/L", "sys/icon/shebei_icon_cod.png", "water_live", "#FDB933", "sys/mobile/icon/shebei_icon_cod.png", "sys/bs/icon/shebei_icon_cod.png", "shebei_icon_cod.png"),
+
+ dataStinkOu("dataOu","臭气浓度","mg/m³","sys/icon/zhandian_icon_ou.png","stink","#f47a75", "sys/mobile/icon/shebei_icon_ou.png", "sys/bs/icon/shebei_icon_ou.png", "shebei_icon_ou.png"),
+ dataStinkNh3("dataNh3","氨气","mg/m³","sys/icon/zhandian_icon_nh3.png","stink","#d05c7c", "sys/mobile/icon/shebei_icon_nh3.png", "sys/bs/icon/shebei_icon_nh3.png", "shebei_icon_nh3.png"),
+ dataStinkH2s("dataH2s","硫化氢","mg/m³","sys/icon/zhandian_icon_h2s.png","stink","#d05c9f", "sys/mobile/icon/shebei_icon_h2s.png", "sys/bs/icon/shebei_icon_h2s.png", "shebei_icon_h2s.png"),
+ dataStinkTvoc("dataTvoc","总挥发性有机物","mg/m³","sys/icon/zhandian_icon_tvoc.png","stink","#f06464", "sys/mobile/icon/shebei_icon_tvoc.png", "sys/bs/icon/shebei_icon_tvoc.png", "shebei_icon_tvoc.png"),
+
+ dataPestLight("ct","杀虫次数","次","","9_pestlight","","","",""),
+
+ dataDefault("default", "默认", "台", "", "default", "#DEAB8A", "", "", "");
/**
* 类型
*/
- private String code;
+ private String code;
/**
* 描述
*/
- private String description;
+ private String description;
/**
* 单位
*/
- private String unit;
+ private String unit;
/**
* 污染物类别
*/
- private String type;
+ private String type;
/**
* 图标
*/
- private String icon;
+ private String icon;
/**
* 图标
*/
- private String color;
+ private String color;
- PollutionEnum(String code,String description,String unit,String icon,String type,String color) {
+
+ /**
+ * 手机端图标
+ */
+ private String mobileIcon;
+
+ /**
+ * 大屏图标
+ */
+ private String bsIcon;
+
+ /**
+ * 大屏图标
+ */
+ private String iconName;
+
+ PollutionEnum(String code, String description, String unit, String icon, String type, String color, String mobileIcon, String bsIcon, String iconName) {
this.code = code;
this.description = description;
this.unit = unit;
this.icon = icon;
- this.type= type;
- this.color=color;
+ this.type = type;
+ this.color = color;
+ this.mobileIcon = mobileIcon;
+ this.bsIcon = bsIcon;
+ this.iconName = iconName;
}
public String getCode() {
@@ -128,20 +201,43 @@ public enum PollutionEnum {
this.color = color;
}
+ public String getMobileIcon() {
+ return mobileIcon;
+ }
+ public void setMobileIcon(String mobileIcon) {
+ this.mobileIcon = mobileIcon;
+ }
+
+ public String getBsIcon() {
+ return bsIcon;
+ }
+
+ public void setBsIcon(String bsIcon) {
+ this.bsIcon = bsIcon;
+ }
+
+
+ public String getIconName() {
+ return iconName;
+ }
+
+ public void setIconName(String iconName) {
+ this.iconName = iconName;
+ }
public static PollutionEnum catchMessage(String msg) {
PollutionEnum result = null;
for (PollutionEnum s : values()) {
- if (s.description.equals(msg)) {
+ if (s.code.equals(msg)) {
result = s;
break;
}
}
- if(result==null){
+ if (result == null) {
return dataDefault;
}
return result;
@@ -165,15 +261,17 @@ public enum PollutionEnum {
return result;
}
-
- public JSONObject getJsonStr(){
- JSONObject job = new JSONObject();
- job.put("code",this.code);
- job.put("description",this.description);
- job.put("unit",this.unit);
- job.put("type",this.type);
- job.put("icon",this.icon);
- job.put("color",this.color);
+ public JSONObject getJsonStr() {
+ JSONObject job = new JSONObject();
+ job.put("code", this.code);
+ job.put("description", this.description);
+ job.put("unit", this.unit);
+ job.put("type", this.type);
+ job.put("icon", this.icon);
+ job.put("color", this.color);
+ job.put("mobileIcon", this.mobileIcon);
+ job.put("bsIcon", this.bsIcon);
+ job.put("iconName", this.iconName);
return job;
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnumBak.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnumBak.java
new file mode 100644
index 0000000..994bc85
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnumBak.java
@@ -0,0 +1,180 @@
+package org.jeecg.common.constant.enums;
+
+import com.alibaba.fastjson.JSONObject;
+
+public enum PollutionEnumBak {
+ dataAirTemp("dataAirTemp","大气温度","℃","sys/icon/shebei_icon_qixiang.png","air","#22BB8A"),
+ dataAirWet("dataAirWet","大气湿度","%RH","sys/icon/zhandian_icon_kongqishidu.png","air","#EE701C"),
+ dataAirPress("dataAirPress","大气压力","hPa","sys/icon/zhandian_icon_daqiyali.png","air","#52AC2A"),
+ dataRainFall("dataRainFall","雨量","mm","sys/icon/zhandian_icon_jiangyuliang.png","air","#2BADB9"),
+ dataRainTotal("dataRainTotal","雨量累计","mm","sys/icon/zhandian_icon_jiangyuliang.png","air","#102B6A"),
+ dataWindSpeed("dataWindSpeed","风速","m/s","sys/icon/zhandian_icon_fengsu.png","air","#7CD6CF"),
+ dataWindDirection("dataWindDirection","风向","°","sys/icon/zhandian_icon_fengxiang.png","air","#26A3CC"),
+ dataSunTotal("dataSunTotal","辐射累计","MJ/m2","sys/icon/zhandian_icon_taiyangquanfushe.png","air","#6C48C7"),
+ dataSunFallout("dataSunFallout","太阳全辐射","W/m2","sys/icon/zhandian_icon_taiyangquanfushe.png","air","#22BB8A"),
+ dataSoilWet("dataSoilWet","20CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#6495ED"),
+ dataSoilWet2("dataSoilWet2","40CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#4169E1"),
+ dataSoilWet3("dataSoilWet3","60CM土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#0000CD"),
+ dataSoilTemp("dataSoilTemp","20CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#C71585"),
+ dataSoilTemp2("dataSoilTemp2","40CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#FF1493"),
+ dataSoilTemp3("dataSoilTemp3","60CM土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#FF69B4"),
+ dataSoilDdl("dataSoilDdl","20CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#92D0D0"),
+ dataSoilDdl2("dataSoilDdl2","40CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#73A2A2"),
+ dataSoilDdl3("dataSoilDdl3","60CM电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#567777"),
+ dataSoilSalt("dataSoilSalt","土壤盐分","","sys/icon/zhandian_icon_ec.png","soil","#4F5555"),
+
+ dataSoilWetMark("dataSoilWetMark","土壤湿度","%","sys/icon/zhandian_icon_turangshidu.png","soil","#6495ED"),
+ dataSoilMark("dataSoilMark","土壤温度","℃","sys/icon/zhandian_icon_turangwendu.png","soil","#C71585"),
+ dataSoilDdlMark("dataSoilDdlMark","电导率","uS/cm","sys/icon/zhandian_icon_ec.png","soil","#92D0D0"),
+
+ dataWaterTp("dataWaterTp","总磷","mg/L","sys/icon/shebei_icon_tp.png","water","#C8CC00"),
+ dataWaterTn("dataWaterTn","总氮","mg/L","sys/icon/shebei_icon_tn.png","water","#009DB2"),
+ dataWaterNo("dataWaterNo","硝态氮","mg/L","sys/icon/shebei_icon_no3n.png","water_orient","#72BAA7"),
+ dataWaterNh("dataWaterNh","氨氮","mg/L","sys/icon/shebei_icon_nh3n.png","water_live","#225A1F"),
+ dataWaterCod("dataWaterCod","化学需氧量","mg/L","sys/icon/shebei_icon_cod.png","water_live","#FDB933"),
+
+
+ dataStinkOu("dataOu","臭气浓度","mg/m³","sys/icon/zhandian_icon_ou.png","stink","#f47a75"),
+ dataStinkNh3("dataNh3","氨气","mg/m³","sys/icon/zhandian_icon_nh3.png","stink","#d05c7c"),
+ dataStinkH2s("dataH2s","硫化氢","mg/m³","sys/icon/zhandian_icon_h2s.png","stink","#d05c9f"),
+ dataStinkTvoc("dataTvoc","总挥发性有机物","mg/m³","sys/icon/zhandian_icon_tvoc.png","stink","#f06464"),
+
+
+ dataDefault("default","默认","台","","default","#DEAB8A");
+
+ /**
+ * 类型
+ */
+ private String code;
+ /**
+ * 描述
+ */
+ private String description;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 污染物类别
+ */
+ private String type;
+
+ /**
+ * 图标
+ */
+ private String icon;
+
+ /**
+ * 图标
+ */
+ private String color;
+
+ PollutionEnumBak(String code,String description,String unit,String icon,String type,String color) {
+ this.code = code;
+ this.description = description;
+ this.unit = unit;
+ this.icon = icon;
+ this.type= type;
+ this.color=color;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getUnit() {
+ return unit;
+ }
+
+ public void setUnit(String unit) {
+ this.unit = unit;
+ }
+
+ public String getIcon() {
+ return icon;
+ }
+
+ public void setIcon(String icon) {
+ this.icon = icon;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+
+
+ public static PollutionEnumBak catchMessage(String msg) {
+
+ PollutionEnumBak result = null;
+
+ for (PollutionEnumBak s : values()) {
+ if (s.description.equals(msg)) {
+ result = s;
+ break;
+ }
+ }
+
+ if(result==null){
+ return dataDefault;
+ }
+ return result;
+ }
+
+
+ public static PollutionEnumBak catchPollution(String survItem) {
+
+ PollutionEnumBak result = null;
+
+ for (PollutionEnumBak s : values()) {
+ if (s.code.equals(survItem)) {
+ result = s;
+ break;
+ }
+ }
+
+ if(result==null){
+ return dataDefault;
+ }
+ return result;
+ }
+
+
+ public JSONObject getJsonStr(){
+ JSONObject job = new JSONObject();
+ job.put("code",this.code);
+ job.put("description",this.description);
+ job.put("unit",this.unit);
+ job.put("type",this.type);
+ job.put("icon",this.icon);
+ job.put("color",this.color);
+ return job;
+ }
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDeviceDeploy.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDeviceDeploy.java
index ee0a2da..bf84c17 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDeviceDeploy.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDeviceDeploy.java
@@ -64,6 +64,7 @@ public class SurvDeviceDeploy implements Serializable {
/**逻辑删除*/
@Excel(name = "逻辑删除", width = 15)
@ApiModelProperty(value = "逻辑删除")
+ @TableLogic
private java.lang.Integer isDel;
/**更新时间*/
@Excel(name = "更新时间", width = 15, format = "yyyy-MM-dd")
@@ -213,7 +214,7 @@ public class SurvDeviceDeploy implements Serializable {
private String deviceName;
@TableField(exist = false)
- private SurvDeviceInfo deviceInfo;
+ private SurvDictDeviceDetail deviceInfo;
@TableField(exist = false)
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataAir.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataAir.java
index 311c2ee..6df9113 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataAir.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataAir.java
@@ -1,6 +1,7 @@
package org.jeecg.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -144,4 +145,10 @@ public class SurvHisdataAir implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "转储时间")
private Date transDate;
+
+ /**
+ * 更新时间
+ */
+ @TableField("DEPLOY_ID")
+ private String deployId;
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataSoil.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataSoil.java
index 94940ce..ffd9b43 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataSoil.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvHisdataSoil.java
@@ -1,6 +1,7 @@
package org.jeecg.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -155,4 +156,10 @@ public class SurvHisdataSoil implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "转储时间")
private Date transDate;
+
+ /**
+ * 更新时间
+ */
+ @TableField("DEPLOY_ID")
+ private String deployId;
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataAir.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataAir.java
index c4f23a4..0b2da81 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataAir.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataAir.java
@@ -1,6 +1,7 @@
package org.jeecg.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -13,6 +14,7 @@ import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
+import java.time.LocalDateTime;
import java.util.Date;
/**
@@ -105,7 +107,7 @@ public class SurvTransdataAir implements Serializable {
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "数据更新时间")
- private Date dataDateTime;
+ private LocalDateTime dataDateTime;
/**数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据*/
@Excel(name = "数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据", width = 15)
@ApiModelProperty(value = "数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据")
@@ -138,4 +140,10 @@ public class SurvTransdataAir implements Serializable {
@Excel(name = "设备名称", width = 15)
@ApiModelProperty(value = "设备名称")
private String deviceName;
+
+ /**
+ * 更新时间
+ */
+ @TableField("DEPLOY_ID")
+ private String deployId;
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataSoil.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataSoil.java
index a633d8c..42e9124 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataSoil.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvTransdataSoil.java
@@ -1,6 +1,7 @@
package org.jeecg.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -13,6 +14,7 @@ import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
+import java.time.LocalDateTime;
import java.util.Date;
/**
@@ -117,7 +119,7 @@ public class SurvTransdataSoil implements Serializable {
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "数据更新时间")
- private Date dataDateTime;
+ private LocalDateTime dataDateTime;
/**数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据*/
@Excel(name = "数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据", width = 15)
@ApiModelProperty(value = "数据类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据")
@@ -150,4 +152,10 @@ public class SurvTransdataSoil implements Serializable {
@Excel(name = "设备名称", width = 15)
@ApiModelProperty(value = "设备名称")
private String deviceName;
+
+ /**
+ * 更新时间
+ */
+ @TableField("DEPLOY_ID")
+ private String deployId;
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/IotSurvDistinctDeploy.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/IotSurvDistinctDeploy.java
new file mode 100644
index 0000000..adacae0
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/IotSurvDistinctDeploy.java
@@ -0,0 +1,22 @@
+package org.jeecg.common.iot.common;
+
+import lombok.Data;
+import org.jeecg.common.entity.SurvDeviceDeploy;
+
+import java.util.List;
+
+/**
+ * 不同的物联网监测设备,不同定义为监测项不同,即配置的监测项不完全一致
+ */
+
+@Data
+public class IotSurvDistinctDeploy {
+ /**
+ * 设备列表
+ */
+ private List deploys;
+ /**
+ * 监测项目
+ */
+ private List survItems;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeployGroupId.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeployGroupId.java
new file mode 100644
index 0000000..87f2063
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeployGroupId.java
@@ -0,0 +1,9 @@
+package org.jeecg.common.iot.common;
+
+import lombok.Data;
+
+@Data
+public class VODeployGroupId {
+ private String groupName;
+ private String groupId;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceCate.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceCate.java
new file mode 100644
index 0000000..5a45d38
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceCate.java
@@ -0,0 +1,9 @@
+package org.jeecg.common.iot.common;
+
+import lombok.Data;
+
+@Data
+public class VODeviceCate {
+ private String deviceCate;
+ private String deviceCount;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceWithData.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceWithData.java
new file mode 100644
index 0000000..1a46a60
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceWithData.java
@@ -0,0 +1,26 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.entity.SurvDeviceDeploy;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class VODeviceWithData {
+ @ApiModelProperty("设备统计")
+ private List deviceCate = new ArrayList<>();
+ @ApiModelProperty("设备统计对象格式")
+ private Map deviceCateMap = new HashMap<>();
+ @ApiModelProperty("总设备数")
+ private String deviceCounts;
+ @ApiModelProperty("空气设备")
+ private List airDevice = new ArrayList<>();
+ @ApiModelProperty("土壤设备")
+ private List soilDevice = new ArrayList<>();
+ @ApiModelProperty("水质设备")
+ private List waterDevice = new ArrayList<>();
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOIntegrateStatistic.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOIntegrateStatistic.java
new file mode 100644
index 0000000..e07d160
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOIntegrateStatistic.java
@@ -0,0 +1,25 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.vo.CommonDataTrans;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+
+@Data
+public class VOIntegrateStatistic {
+ @ApiModelProperty("对象格式结果")
+ private LinkedHashMap> objResults;
+ @ApiModelProperty("表头")
+ private List tableHead;
+ @ApiModelProperty("表序号")
+ private List tableIndex;
+ @ApiModelProperty("数组格式结果")
+ private List> tableData;
+ @ApiModelProperty("二维数据格式结果")
+ private String[][] tableData2;
+ @ApiModelProperty("实时数据")
+ private List realTimeData;
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElement.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElement.java
new file mode 100644
index 0000000..d77d4ce
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElement.java
@@ -0,0 +1,15 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 监测数据元素说明
+ */
+@Data
+public class VOSurvElement {
+ @ApiModelProperty("元素字段")
+ private String eleField;
+ @ApiModelProperty("元素中文")
+ private String eleDesc;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElementValue.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElementValue.java
new file mode 100644
index 0000000..e4f8f57
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElementValue.java
@@ -0,0 +1,15 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 监测数据元素说明
+ */
+@Data
+public class VOSurvElementValue {
+ @ApiModelProperty("元素字段")
+ private String eleField;
+ @ApiModelProperty("元素值")
+ private String eleValue;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrate.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrate.java
new file mode 100644
index 0000000..e9b17d3
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrate.java
@@ -0,0 +1,13 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 监测数据综合统计
+ */
+@Data
+public class VOSurvIntegrate {
+ @ApiModelProperty("空气温度")
+ private String airTempOne;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateAirDetail.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateAirDetail.java
new file mode 100644
index 0000000..0905c34
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateAirDetail.java
@@ -0,0 +1,158 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+@Data
+public class VOSurvIntegrateAirDetail {
+ @ApiModelProperty("时间")
+ private String dates;
+
+ /**
+ * 大气温度
+ */
+ @Excel(name = "大气温度(℃)", width = 15)
+ @ApiModelProperty(value = "大气温度(℃)")
+ private String dataAirTemp;
+
+ /**
+ * 大气湿度
+ */
+ @Excel(name = "大气湿度(%RH)", width = 15)
+ @ApiModelProperty(value = "大气湿度(%RH)")
+ private String dataAirWet;
+
+ /**
+ * 大气压力
+ */
+// @Excel(name = "大气压力", width = 15)
+ @ApiModelProperty(value = "大气压力")
+ private String dataAirPress;
+
+ /**
+ * 雨量
+ */
+// @Excel(name = "雨量", width = 15)
+ @ApiModelProperty(value = "雨量")
+ private String dataRainFall;
+
+ /**
+ * 风速
+ */
+// @Excel(name = "风速", width = 15)
+ @ApiModelProperty(value = "风速")
+ private String dataWindSpeed;
+
+ /**
+ * 风向
+ */
+// @Excel(name = "风向", width = 15)
+ @ApiModelProperty(value = "风向")
+ private String dataWindDirection;
+
+ /**
+ * 太阳全辐射
+ */
+// @Excel(name = "太阳全辐射", width = 15)
+ @ApiModelProperty(value = "太阳全辐射")
+ private String dataSunFallout;
+
+ /**
+ * 辐射累计
+ */
+// @Excel(name = "辐射累计", width = 15)
+ @ApiModelProperty(value = "辐射累计")
+ private String dataSunTotal;
+
+ @ApiModelProperty(value = "日照时数")
+ private String dataSunHour;
+
+ /**
+ * 雨量累计
+ */
+// @Excel(name = "雨量累计", width = 15)
+ @ApiModelProperty(value = "雨量累计")
+ private String dataRainTotal;
+
+ /**
+ * pm2.5
+ */
+ @ApiModelProperty(value = "pm2.5")
+ private String dataPm25;
+
+ /**
+ * 照度
+ */
+ @Excel(name = "照度(Lux)", width = 15)
+ @ApiModelProperty(value = "照度(Lux)")
+ private String dataSunRate;
+
+ /**
+ * 二氧化碳
+ */
+ @Excel(name = "二氧化碳(ppm)", width = 15)
+ @ApiModelProperty(value = "二氧化碳(ppm)")
+ private String dataAirCod;
+
+ /**
+ * 叶面温度
+ */
+ @Excel(name = "叶面温度(℃)", width = 15)
+ @ApiModelProperty(value = "叶面温度(℃)")
+ private String dataLeafTemp;
+ /**
+ * 叶面湿度
+ */
+ @Excel(name = "叶面湿度(%)", width = 15)
+ @ApiModelProperty(value = "叶面湿度(%)")
+ private String dataLeafWet;
+
+
+ /**
+ * 光合
+ */
+ private String dataPhotosynthetic;
+
+ /**
+ * 蒸发
+ */
+ private String dataEvaporation;
+
+ /**
+ * 负氧离子
+ */
+ private String dataAirNeo;
+
+
+ /**
+ * 全辐射
+ */
+ private String dataAirTotalRadiation;
+
+ /**
+ * 氨气
+ */
+ private String dataAirNh;
+
+ /**
+ * 硫化氢
+ */
+ private String dataAirHs;
+
+ /**
+ * 预备一
+ */
+ private String dataAirEone;
+
+ /**
+ * 预备二
+ */
+ private String dataAirEtwo;
+
+ /**
+ * 预备三
+ */
+ private String dataAirEthree;
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateParam.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateParam.java
new file mode 100644
index 0000000..c6f7fb2
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateParam.java
@@ -0,0 +1,18 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VOSurvIntegrateParam {
+ @ApiModelProperty("设备部署id")
+ private List deployIds;
+ @ApiModelProperty("开始时间")
+ private String startTime;
+ @ApiModelProperty("结束时间")
+ private String endTime;
+ @ApiModelProperty("统计模式,dayhours=日小时统计,monthDays=月每日统计,yearMonth=年每月统计")
+ private String summrayMode;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateResult.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateResult.java
new file mode 100644
index 0000000..908e2e3
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateResult.java
@@ -0,0 +1,25 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.vo.CommonDataTrans;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ * 监测数据综合统计
+ */
+@Data
+public class VOSurvIntegrateResult {
+ @ApiModelProperty("统计结果")
+ private LinkedHashMap> survResult;
+ @ApiModelProperty("表头")
+ private List headers;
+ @ApiModelProperty("表序号")
+ private List indexs;
+ @ApiModelProperty("内部用序号,前端不调")
+ private List subIndexs;
+ @ApiModelProperty("实时数据")
+ private List liveData;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateSoilDetail.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateSoilDetail.java
new file mode 100644
index 0000000..46b044c
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateSoilDetail.java
@@ -0,0 +1,205 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+@Data
+public class VOSurvIntegrateSoilDetail {
+ @ApiModelProperty("时间")
+ private String dates;
+ /**
+ * 土壤温度1;106
+ */
+ @Excel(name = "土壤温度(%)", width = 15)
+ @ApiModelProperty(value = "土壤温度(%)")
+ private String dataSoilTemp;
+
+ /**
+ * 土壤湿度1;107
+ */
+ @Excel(name = "土壤湿度(%)", width = 15)
+ @ApiModelProperty(value = "土壤湿度(%)")
+ private String dataSoilWet;
+
+ /**
+ * 土壤盐分;198
+ */
+// @Excel(name = "土壤盐分", width = 15)
+ @ApiModelProperty(value = "土壤盐分")
+ private String dataSoilSalt;
+
+ /**
+ * 土壤温度2
+ */
+ @ApiModelProperty(value = "土壤温度2")
+ private String dataSoilTemp2;
+
+ /**
+ * 土壤湿度2
+ */
+ @ApiModelProperty(value = "土壤湿度2")
+ private String dataSoilWet2;
+
+ /**
+ * 土壤温度3
+ */
+ @ApiModelProperty(value = "土壤温度3")
+ private String dataSoilTemp3;
+
+ /**
+ * 土壤湿度3
+ */
+
+ @ApiModelProperty(value = "土壤湿度3")
+ private String dataSoilWet3;
+
+ /**
+ * 土壤温度4
+ */
+ @ApiModelProperty(value = "土壤温度4")
+ private String dataSoilTemp4;
+
+ /**
+ * 土壤湿度4
+ */
+
+ @ApiModelProperty(value = "土壤湿度4")
+ private String dataSoilWet4;
+
+ /**
+ * 电导率1
+ */
+ @Excel(name = "电导率(uS/cm)", width = 15)
+ @ApiModelProperty(value = "电导率(uS/cm)")
+ private String dataSoilDdl;
+
+ /**
+ * 电导率2
+ */
+ @ApiModelProperty(value = "电导率2")
+ private String dataSoilDdl2;
+
+ /**
+ * 电导率3
+ */
+ @ApiModelProperty(value = "电导率3")
+ private String dataSoilDdl3;
+
+ /**
+ * 电导率4
+ */
+ @ApiModelProperty(value = "电导率4")
+ private String dataSoilDdl4;
+
+ /**
+ * 土壤PH
+ */
+ @Excel(name = "土壤PH", width = 15)
+ private String dataSoilPh;
+
+ /**
+ * 氮离子
+ */
+ @Excel(name = "氮离子(mg/KG)", width = 15)
+ private String dataSoilNion;
+
+ /**
+ * 磷离子
+ */
+ @Excel(name = "磷离子(mg/KG)", width = 15)
+ private String dataSoilPion;
+
+ /**
+ * 钾离子
+ */
+ @Excel(name = "钾离子(mg/KG)", width = 15)
+ private String dataSoilKion;
+
+
+ /**
+ * 氮离子
+ */
+ private String dataSoilNion2;
+
+ /**
+ * 磷离子
+ */
+ private String dataSoilPion2;
+
+ /**
+ * 钾离子
+ */
+ private String dataSoilKion2;
+
+
+ /**
+ * 氮离子
+ */
+ private String dataSoilNion3;
+
+ /**
+ * 磷离子
+ */
+ private String dataSoilPion3;
+
+ /**
+ * 钾离子
+ */
+ private String dataSoilKion3;
+
+
+ /**
+ * 氮离子
+ */
+ private String dataSoilNion4;
+
+ /**
+ * 磷离子
+ */
+ private String dataSoilPion4;
+
+ /**
+ * 钾离子
+ */
+ private String dataSoilKion4;
+
+ /**
+ * 土壤铵离子
+ */
+ @Excel(name = "土壤铵离子(mg-L)", width = 15)
+ private String dataSoilNhion;
+
+ /**
+ * 土壤硝酸根离子
+ */
+ @Excel(name = "土壤硝酸根离子(ppm)", width = 15)
+ private String dataSoilNoion;
+
+ /**
+ * 土壤铜离子
+ */
+ private String dataSoilCuion;
+
+ /**
+ * 土壤铅离子
+ */
+ private String dataSoilPbion;
+
+ /**
+ * 土壤镉离子
+ */
+ private String dataSoilCdion;
+
+ /**
+ * 叶面温度
+ */
+ @ApiModelProperty(value = "叶面温度")
+ private String dataLeafTemp;
+ /**
+ * 叶面湿度
+ */
+ @ApiModelProperty(value = "叶面湿度")
+ private String dataLeafWet;
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateTotal.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateTotal.java
new file mode 100644
index 0000000..f02a7c5
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateTotal.java
@@ -0,0 +1,120 @@
+package org.jeecg.common.iot.common;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
+import lombok.Data;
+
+@Data
+@ExcelIgnoreUnannotated
+
+@HeadStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)//表头样式
+@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)//内容样式
+public class VOSurvIntegrateTotal {
+
+ @ExcelProperty(value = "时间", index = 0)
+ @ColumnWidth(20)
+ private String dates;
+
+ @ExcelProperty(value = "20cm-土壤湿度", index = 1)
+ @ColumnWidth(20)
+ private String dataSoilWet;
+
+ @ExcelProperty(value = "40cm-土壤湿度", index = 2)
+ @ColumnWidth(20)
+ private String dataSoilWet2;
+
+ @ExcelProperty(value = "20cm-土壤温度", index = 3)
+ @ColumnWidth(20)
+ private String dataSoilTemp;
+
+ @ExcelProperty(value = "40cm-土壤温度", index = 4)
+ @ColumnWidth(20)
+ private String dataSoilTemp2;
+
+
+
+ @ExcelProperty(value = "20cm-电导率", index = 5)
+ @ColumnWidth(20)
+ private String dataSoilDdl;
+
+ @ExcelProperty(value = "40cm-电导率", index = 6)
+ @ColumnWidth(20)
+ private String dataSoilDdl2;
+
+
+
+ @ExcelProperty(value = "20cm-钾离子", index = 7)
+ @ColumnWidth(20)
+ private String dataSoilKion;
+
+ @ExcelProperty(value = "20cm-氮离子", index = 8)
+ @ColumnWidth(20)
+ private String dataSoilNion;
+
+ @ExcelProperty(value = "40cm-磷离子", index = 9)
+ @ColumnWidth(20)
+ private String dataSoilPion;
+
+ @ExcelProperty(value = "40cm-钾离子", index = 10)
+ @ColumnWidth(20)
+ private String dataSoilKion2;
+ @ExcelProperty(value = "40cm-氮离子", index = 11)
+ @ColumnWidth(20)
+ private String dataSoilNion2;
+ @ExcelProperty(value = "40cm-磷离子", index = 12)
+ @ColumnWidth(20)
+ private String dataSoilPion2;
+
+
+ @ExcelProperty(value = "风速", index = 13)
+ @ColumnWidth(20)
+ private String dataWindSpeed;
+
+ @ExcelProperty(value = "雨量累计", index = 14)
+ @ColumnWidth(20)
+ private String dataRainTotal;
+
+ @ExcelProperty(value = "大气温度", index = 15)
+ @ColumnWidth(20)
+ private String dataAirTemp;
+
+ @ExcelProperty(value = "大气湿度", index = 16)
+ @ColumnWidth(20)
+ private String dataAirWet;
+
+ @ExcelProperty(value = "数字气压", index = 17)
+ @ColumnWidth(20)
+ private String dataAirPress;
+
+ @ExcelProperty(value = "PM2.5", index = 18)
+ @ColumnWidth(20)
+ private String dataPm25;
+
+ @ExcelProperty(value = "风向", index = 19)
+ @ColumnWidth(20)
+ private String dataWindDirection;
+
+ @ExcelProperty(value = "日照时数", index = 20)
+ @ColumnWidth(20)
+ private String dataSunHour;
+
+ @ExcelProperty(value = "总辐射", index = 21)
+ @ColumnWidth(20)
+ private String dataAirTotalRadiation;
+
+ @ExcelProperty(value = "辐射累计", index = 22)
+ @ColumnWidth(20)
+ private String dataSunTotal;
+
+ @ExcelProperty(value = "蒸发", index = 23)
+ @ColumnWidth(20)
+ private String dataEvaporation;
+
+ @ExcelProperty(value = "负氧离子", index = 24)
+ @ColumnWidth(20)
+ private String dataAirNeo;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOTransData.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOTransData.java
new file mode 100644
index 0000000..3f1ec21
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOTransData.java
@@ -0,0 +1,17 @@
+package org.jeecg.common.iot.common;
+
+import lombok.Data;
+import org.jeecg.common.entity.SurvDeviceDeploy;
+import org.jeecg.common.vo.CommonDataTrans;
+
+import java.util.List;
+
+@Data
+public class VOTransData {
+ private List transData;
+ private SurvDeviceDeploy deploy;
+ private long current;
+ private long pages;
+ private long size;
+ private long total;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOWaterSurvIntegrateParam.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOWaterSurvIntegrateParam.java
new file mode 100644
index 0000000..2fef321
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOWaterSurvIntegrateParam.java
@@ -0,0 +1,18 @@
+package org.jeecg.common.iot.common;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VOWaterSurvIntegrateParam {
+ @ApiModelProperty("设备部署id")
+ private List deployIds;
+ @ApiModelProperty("开始时间")
+ private String startTime;
+ @ApiModelProperty("结束时间")
+ private String endTime;
+ @ApiModelProperty("统计模式,dayhours=日小时统计,monthDays=月每日统计,yearMonth=年每月统计")
+ private String summrayMode;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOZhiBiao.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOZhiBiao.java
new file mode 100644
index 0000000..6c2db20
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOZhiBiao.java
@@ -0,0 +1,11 @@
+package org.jeecg.common.iot.common;
+
+import lombok.Data;
+
+@Data
+public class VOZhiBiao {
+ private String fieldName;
+ private Double valHigh;
+ private Double valLow;
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateTimeRangeUtils.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateTimeRangeUtils.java
new file mode 100644
index 0000000..b8151c6
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateTimeRangeUtils.java
@@ -0,0 +1,192 @@
+package org.jeecg.common.util;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 时间范围工具类 - JDK 1.8兼容版本
+ */
+public class DateTimeRangeUtils {
+
+ /**
+ * 时间单位枚举
+ */
+ public enum TimeUnit {
+ YEAR, // 年
+ MONTH, // 月
+ DAY, // 日
+ HOUR // 小时
+ }
+
+ /**
+ * 获取时间范围内的所有时间点列表
+ * @param start 开始时间
+ * @param end 结束时间
+ * @param unit 时间单位
+ * @return 按照正序排列的时间列表
+ */
+ public static List getDateTimeRange2(LocalDateTime start, LocalDateTime end, TimeUnit unit) {
+ // 参数校验
+ if (start == null || end == null || unit == null) {
+ throw new IllegalArgumentException("参数不能为null");
+ }
+
+ if (start.isAfter(end)) {
+ throw new IllegalArgumentException("开始时间不能晚于结束时间");
+ }
+
+ List result = new ArrayList<>();
+
+ switch (unit) {
+ case YEAR:
+ result = getYearRange(start, end);
+ break;
+ case MONTH:
+ result = getMonthRange(start, end);
+ break;
+ case DAY:
+ result = getDayRange(start, end);
+ break;
+ case HOUR:
+ result = getHourRange(start, end);
+ break;
+ default:
+ throw new IllegalArgumentException("不支持的时间单位: " + unit);
+ }
+
+ return result;
+ }
+
+ /**
+ * 获取年份范围
+ */
+ private static List getYearRange(LocalDateTime start, LocalDateTime end) {
+ LocalDateTime adjustedStart = start.withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+ LocalDateTime adjustedEnd = end.withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+
+ return generateRange(adjustedStart, adjustedEnd, ChronoUnit.YEARS);
+ }
+
+ /**
+ * 获取月份范围
+ */
+ private static List getMonthRange(LocalDateTime start, LocalDateTime end) {
+ LocalDateTime adjustedStart = start.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+ LocalDateTime adjustedEnd = end.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+
+ return generateRange(adjustedStart, adjustedEnd, ChronoUnit.MONTHS);
+ }
+
+ /**
+ * 获取日期范围
+ */
+ private static List getDayRange(LocalDateTime start, LocalDateTime end) {
+ LocalDateTime adjustedStart = start.withHour(0).withMinute(0).withSecond(0).withNano(0);
+ LocalDateTime adjustedEnd = end.withHour(0).withMinute(0).withSecond(0).withNano(0);
+
+ return generateRange(adjustedStart, adjustedEnd, ChronoUnit.DAYS);
+ }
+
+ /**
+ * 获取小时范围
+ */
+ private static List getHourRange(LocalDateTime start, LocalDateTime end) {
+ LocalDateTime adjustedStart = start.withMinute(0).withSecond(0).withNano(0);
+ LocalDateTime adjustedEnd = end.withMinute(0).withSecond(0).withNano(0);
+
+ return generateRange(adjustedStart, adjustedEnd, ChronoUnit.HOURS);
+ }
+
+ /**
+ * 生成时间范围 - JDK 1.8兼容版本
+ */
+ private static List generateRange(LocalDateTime start, LocalDateTime end, ChronoUnit unit) {
+ List result = new ArrayList<>();
+
+ LocalDateTime current = start;
+ while (!current.isAfter(end)) {
+ result.add(current);
+ current = current.plus(1, unit);
+ }
+
+ return result;
+ }
+
+ /**
+ * 重载方法:返回字符串列表(格式化的时间)
+ */
+ public static List getDateTimeRange(LocalDateTime start, LocalDateTime end,
+ TimeUnit unit, String pattern) {
+ List dateTimes = getDateTimeRange2(start, end, unit);
+
+ java.time.format.DateTimeFormatter formatter =
+ java.time.format.DateTimeFormatter.ofPattern(pattern);
+
+ return dateTimes.stream()
+ .map(formatter::format)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 重载方法:返回特定格式的字符串列表
+ */
+ public static List getDateTimeRange(LocalDateTime start, LocalDateTime end, TimeUnit unit) {
+ List dateTimes = getDateTimeRange2(start, end, unit);
+
+ // 根据时间单位返回合适的格式
+ String pattern;
+ switch (unit) {
+ case YEAR:
+ pattern = "yyyy";
+ break;
+ case MONTH:
+ pattern = "yyyy-MM";
+ break;
+ case DAY:
+ pattern = "yyyy-MM-dd";
+ break;
+ case HOUR:
+ pattern = "yyyy-MM-dd HH";
+ break;
+ default:
+ pattern = "yyyy-MM-dd HH:mm:ss";
+ }
+
+ java.time.format.DateTimeFormatter formatter =
+ java.time.format.DateTimeFormatter.ofPattern(pattern);
+
+ return dateTimes.stream()
+ .map(formatter::format)
+ .collect(Collectors.toList());
+ }
+
+ public static void main(String[] args) {
+ LocalDateTime start = LocalDateTime.of(2023, 1, 15, 10, 30);
+ LocalDateTime end = LocalDateTime.of(2023, 3, 20, 15, 45);
+
+ // 测试月份范围
+ System.out.println("月份范围 (LocalDateTime):");
+ List months = DateTimeRangeUtils.getDateTimeRange2(
+ start, end, TimeUnit.MONTH);
+ months.forEach(System.out::println);
+
+ System.out.println("\n月份范围 (格式化字符串):");
+ List monthStrs = DateTimeRangeUtils.getDateTimeRange(
+ start, end, TimeUnit.MONTH);
+ monthStrs.forEach(System.out::println);
+
+ // 测试日期范围
+ System.out.println("\n日期范围:");
+ List days = DateTimeRangeUtils.getDateTimeRange(
+ start, end, TimeUnit.DAY);
+ days.forEach(System.out::println);
+
+ // 测试自定义格式
+ System.out.println("\n自定义格式:");
+ List customFormat = DateTimeRangeUtils.getDateTimeRange(
+ start, end, TimeUnit.MONTH, "yyyy年MM月");
+ customFormat.forEach(System.out::println);
+ }
+}
\ No newline at end of file
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateUtilTools.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateUtilTools.java
new file mode 100644
index 0000000..2da47b0
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateUtilTools.java
@@ -0,0 +1,699 @@
+/**
+ * Copyright © 2012-2016 JeeSite All rights reserved.
+ */
+package org.jeecg.common.util;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+/**
+ * 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
+ *
+ * @author WGX
+ * @version 2014-4-15
+ */
+public class DateUtilTools extends org.apache.commons.lang3.time.DateUtils {
+
+ private static String[] parsePatterns = {
+ "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss:SSS", "yyyy-MM-dd HH:mm", "yyyy-MM",
+ "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+ "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+// public static void main(String[] args) throws ParseException {
+// String d = "2020-3-31 3:5";
+// Date da = parseDate(d, parsePatterns[2]);
+// System.out.println(formatDate(da, parsePatterns[1]));
+// System.out.println(formatDate(plusOneDay(da), parsePatterns[1]));
+// System.out.println(formatDate(getNextDateZero(da), parsePatterns[1]));
+// }
+
+ /**
+ * 日期加一天
+ *
+ * @param date
+ * @return
+ */
+ public static Date plusOneDay(Date date) {
+ if (date == null) {
+ return null;
+ }
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(date);
+ calendar.add(calendar.DATE, 1); //把日期往后增加一天,整数 往后推,负数往前移动
+ return calendar.getTime(); //这个时间就是日期往后推一天的结果
+ }
+
+ public static Date plusDay(Date date, int num) {
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(date);
+ calendar.add(calendar.DATE, num); //把日期往后增加一天,整数 往后推,负数往前移动
+ return calendar.getTime(); //这个时间就是日期往后推一天的结果
+ }
+
+ /**
+ * 获取本周星期一
+ *
+ * @return
+ */
+ public static Date getFirstDayOfWeek(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.set(Calendar.DAY_OF_WEEK, 2);//星期一
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取本周星期日
+ *
+ * @return
+ */
+ public static Date getLastDayOfWeek(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.set(Calendar.DAY_OF_WEEK, 1);//星期日
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取下星期一
+ *
+ * @return
+ */
+ public static Date getFirstDateOfLastWeek(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.add(Calendar.DAY_OF_YEAR, 7);//星期日
+ cale.set(Calendar.DAY_OF_WEEK, 2);//星期日
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取下月第一天
+ *
+ * @return
+ */
+ public static Date getFirstDayOfNextMonth(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.add(Calendar.MONTH, 1);
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取当月第一天
+ *
+ * @return
+ */
+ public static Date getFirstDayOfMonth(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.add(Calendar.MONTH, 0);
+ cale.set(Calendar.DAY_OF_MONTH, 1);
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取当月最后一天
+ *
+ * @return
+ */
+ public static Date getLastDayOfMonth(Date date) {
+ Calendar cale = Calendar.getInstance();
+ cale.setTime(date);
+ cale.add(Calendar.MONTH, 1);
+ cale.set(Calendar.DAY_OF_MONTH, 1);
+ cale.set(Calendar.HOUR_OF_DAY, 0);
+ cale.set(Calendar.MINUTE, 0);
+ cale.set(Calendar.SECOND, 0);
+ cale.set(Calendar.MILLISECOND, 0);
+ return cale.getTime();
+ }
+
+ /**
+ * 获取当前日期是本月第几天
+ *
+ * @param date
+ * @return
+ */
+ public static int getDaysOfMonth(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ return calendar.get(Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ * 获取本月最大天数
+ *
+ * @param date
+ * @return
+ */
+ public static int getMaxDaysOfMonth(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ * 获取下一天的零点
+ *
+ * @param date
+ * @return
+ */
+ public static Date getNextDateZero(Date date) {
+ if (date == null) {
+ return null;
+ }
+ return getDateZero(plusOneDay(date));
+ }
+
+ /**
+ * 获取日期0点Date
+ *
+ * @return
+ */
+ public static Date getDateZero(Date date) {
+ if (date == null) {
+ return null;
+ }
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.MILLISECOND, 000);
+// long l = System.currentTimeMillis()/86400000 * 86400000 - TimeZone.getTimeZone("Hongkong").getRawOffset()+86400000;
+// long zero = date.getTime() / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
+ return new Date(cal.getTimeInMillis());
+ }
+
+ /**
+ * 获取今日0点Date
+ *
+ * @return
+ */
+ public static Date getDateZero() {
+ return getDateZero(new Date());
+ }
+
+ /**
+ * 得到当前日期字符串 格式(yyyy-MM-dd)
+ */
+ public static String getDate() {
+ return getDate("yyyy-MM-dd");
+ }
+
+ /**
+ * 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
+ */
+ public static String getDate(String pattern) {
+ return DateFormatUtils.format(new Date(), pattern);
+ }
+
+ /**
+ * 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
+ */
+ public static String formatDate(Date date, Object... pattern) {
+ String formatDate = null;
+ if (pattern != null && pattern.length > 0) {
+ formatDate = DateFormatUtils.format(date, pattern[0].toString());
+ } else {
+ formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
+ }
+ return formatDate;
+ }
+
+ /**
+ * 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss)
+ */
+ public static String formatDateTime(Date date) {
+ return formatDate(date, "yyyy-MM-dd HH:mm:ss");
+ }
+
+ /**
+ * 得到当前时间字符串 格式(HH:mm:ss)
+ */
+ public static String getTime() {
+ return formatDate(new Date(), "HH:mm:ss");
+ }
+
+ /**
+ * 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)
+ */
+ public static String getDateTime() {
+ return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
+ }
+
+ /**
+ * 得到当前年份字符串 格式(yyyy)
+ */
+ public static String getYear() {
+ return formatDate(new Date(), "yyyy");
+ }
+
+ /**
+ * 得到当前月份字符串 格式(MM)
+ */
+ public static String getMonth() {
+ return formatDate(new Date(), "MM");
+ }
+
+ /**
+ * 得到当天字符串 格式(dd)
+ */
+ public static String getDay() {
+ return formatDate(new Date(), "dd");
+ }
+
+ /**
+ * 得到当前星期字符串 格式(E)星期几
+ */
+ public static String getWeek() {
+ return formatDate(new Date(), "E");
+ }
+
+ /**
+ * 日期型字符串转化为日期 格式
+ * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
+ * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
+ * "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
+ */
+ public static Date parseDate(Object str) {
+ if (str == null) {
+ return null;
+ }
+ try {
+ String text = str.toString();
+ try {
+ long time = Long.parseLong(text);
+ return new Date(time);
+ } catch (NumberFormatException e) {
+ }
+ return parseDate(text, parsePatterns);
+ } catch (ParseException e) {
+ return null;
+ }
+ }
+
+ /**
+ * 获取过去的天数
+ *
+ * @param date
+ * @return
+ */
+ public static long pastDays(Date date) {
+ long t = new Date().getTime() - date.getTime();
+ return t / (24 * 60 * 60 * 1000);
+ }
+
+ /**
+ * 获取过去的小时
+ *
+ * @param date
+ * @return
+ */
+ public static long pastHour(Date date) {
+ long t = new Date().getTime() - date.getTime();
+ return t / (60 * 60 * 1000);
+ }
+
+ /**
+ * 获取过去的分钟
+ *
+ * @param date
+ * @return
+ */
+ public static long pastMinutes(Date date) {
+ long t = new Date().getTime() - date.getTime();
+ return t / (60 * 1000);
+ }
+
+ /**
+ * 转换为时间(天,时:分:秒.毫秒)
+ *
+ * @param timeMillis
+ * @return
+ */
+ public static String formatDateTime(long timeMillis) {
+ long day = timeMillis / (24 * 60 * 60 * 1000);
+ long hour = (timeMillis / (60 * 60 * 1000) - day * 24);
+ long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);
+ long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
+ long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
+ return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;
+ }
+
+ /**
+ * 获取两个日期之间的天数
+ *
+ * @param before
+ * @param after
+ * @return
+ */
+ public static double getDistanceOfTwoDate(Date before, Date after) {
+ long beforeTime = before.getTime();
+ long afterTime = after.getTime();
+ return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
+ }
+
+ //毫秒数转天时分秒
+ public static String millisecondsConvertToDHMS(long milliseconds) {
+
+ final long day = TimeUnit.MILLISECONDS.toDays(milliseconds);
+
+ final long hours = TimeUnit.MILLISECONDS.toHours(milliseconds)
+ - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(milliseconds));
+
+ final long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds)
+ - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds));
+
+ final long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds)
+ - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds));
+
+ final long ms = TimeUnit.MILLISECONDS.toMillis(milliseconds)
+ - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(milliseconds));
+
+ String format = String.format("%d 天 %d 小时 %d 分钟 ", day, hours, minutes);
+ if (ms < 0) {
+ return "0 天";
+ }
+ return format;
+ }
+
+ public static String calTimeGap(LocalDateTime date1, LocalDateTime date2) {
+ Instant instant1 = date1.toInstant(ZoneOffset.UTC);
+ Instant instant2 = date2.toInstant(ZoneOffset.UTC);
+ Duration duration = Duration.between(date1, date2);
+
+// Long mins = TimeUnit.MILLISECONDS.toMinutes(duration.toMillis());
+ Long senconds = Math.abs(duration.getSeconds());
+ return String.valueOf(senconds) + "秒";
+ }
+
+ public static String convertSecondsToMinutes(int seconds) {
+ int minutes = seconds / 60; // 计算整数部分
+ double remainingSeconds = seconds % 60; // 计算小数部分
+ double minutesWithSeconds = minutes + remainingSeconds / 60; // 整数部分加上小数部分
+ return String.valueOf(minutesWithSeconds);
+ }
+
+ public static List getDatesBetween(LocalDate startDate, LocalDate endDate) {
+ List dates = new ArrayList<>();
+ long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);
+ for (int i = 0; i <= numOfDaysBetween; i++) {
+ LocalDate date = startDate.plusDays(i);
+ dates.add(date);
+ }
+ return dates;
+ }
+ public static List getStringDatesBetween(String startDate, String endDate) {
+ List dates = new ArrayList<>();
+ DateTimeFormatter datef = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ LocalDate sDate = LocalDate.parse(startDate, datef);
+ LocalDate eDate = LocalDate.parse(endDate, datef);
+ long numOfDaysBetween = ChronoUnit.DAYS.between(sDate, eDate);
+ for (int i = 0; i <= numOfDaysBetween; i++) {
+ LocalDate date = sDate.plusDays(i);
+ dates.add(datef.format(date));
+ }
+ return dates;
+ }
+
+
+ /**
+ * 将秒级时间戳转换为 Date 对象
+ * @param timestamp 秒级时间戳
+ * @return Date 对象
+ */
+ public static Date toDateFromSeconds(long timestamp) {
+ return new Date(timestamp * 1000L);
+ }
+
+ /**
+ * 将毫秒级时间戳转换为 Date 对象
+ * @param timestamp 毫秒级时间戳
+ * @return Date 对象
+ */
+ public static Date toDateFromMillis(long timestamp) {
+ return new Date(timestamp);
+ }
+
+
+
+ /**
+ * 严格验证字符串是否符合指定的时间格式(使用java.time API)
+ * @param dateTimeStr 要验证的时间字符串
+ * @param formatPattern 时间格式模式
+ * @return true-完全匹配,false-不匹配
+ */
+ public static boolean isStrictlyValidFormat(String dateTimeStr, String formatPattern) {
+ if (dateTimeStr == null || formatPattern == null) {
+ return false;
+ }
+
+ try {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatPattern, Locale.getDefault());
+ // 根据格式长度进行初步筛选
+ if (dateTimeStr.length() != formatPattern.replaceAll("'[^']*'", "").length()) {
+ return false;
+ }
+ // 反向验证:将解析后的对象重新格式化为字符串,必须与原字符串完全一致
+ String reformatted;
+ if (formatPattern.startsWith("HH") || formatPattern.startsWith("hh")) {
+ reformatted = LocalTime.parse(dateTimeStr, formatter).format(formatter);
+ } else if (formatPattern.equals("yyyy")){
+ DateTimeFormatter temp = DateTimeFormatter.ofPattern(formatPattern+"-MM-dd", Locale.getDefault());
+ reformatted = LocalDate.parse(dateTimeStr+"-01-01", temp).format(formatter);
+ }else if (formatPattern.equals("yyyy-MM")){
+ DateTimeFormatter temp = DateTimeFormatter.ofPattern(formatPattern+"-dd", Locale.getDefault());
+ reformatted = LocalDate.parse(dateTimeStr+"-01", temp).format(formatter);
+ }
+ else if (formatPattern.contains("yyyy") && !formatPattern.contains("HH") && !formatPattern.contains("hh") && !formatPattern.contains("mm") && !formatPattern.contains("ss")) {
+ reformatted = LocalDate.parse(dateTimeStr, formatter).format(formatter);
+ }else{
+ reformatted = LocalDateTime.parse(dateTimeStr, formatter).format(formatter);
+ }
+ return dateTimeStr.equals(reformatted);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 严格验证日期格式(Legacy API版本)
+ * @param dateStr 日期字符串
+ * @param formatPattern 格式模式
+ * @return true-完全匹配,false-不匹配
+ */
+ public static boolean isStrictlyValidLegacyFormat(String dateStr, String formatPattern) {
+ if (dateStr == null || formatPattern == null) {
+ return false;
+ }
+
+ SimpleDateFormat sdf = new SimpleDateFormat(formatPattern, Locale.getDefault());
+ sdf.setLenient(false);
+
+ try {
+ sdf.parse(dateStr);
+ // 反向验证
+ return dateStr.equals(sdf.format(sdf.parse(dateStr)));
+ } catch (ParseException e) {
+ return false;
+ }
+ }
+
+ // 常用格式的快捷验证方法
+ public static boolean isStrictlyValidISODate(String dateStr) {
+ return isStrictlyValidFormat(dateStr, "yyyy-MM-dd");
+ }
+
+ public static boolean isStrictlyValidISOTime(String timeStr) {
+ return isStrictlyValidFormat(timeStr, "HH:mm:ss");
+ }
+
+ public static boolean isStrictlyValidISODateTime(String dateTimeStr) {
+ return isStrictlyValidFormat(dateTimeStr, "yyyy-MM-dd HH:mm:ss");
+ }
+
+ public static boolean isStrictlyValidChineseDate(String dateStr) {
+ return isStrictlyValidFormat(dateStr, "yyyy年MM月dd日");
+ }
+
+
+ private static void validateYears(int startYear, int endYear) {
+ if (startYear < 0 || endYear < 0) {
+ throw new IllegalArgumentException("年份不能为负数");
+ }
+ if (startYear > endYear) {
+ throw new IllegalArgumentException("开始年份不能大于结束年份");
+ }
+ }
+
+ /**
+ * 获取指定日期的月初和月末日期(LocalDate版本)
+ * @param date 当前日期
+ * @return 包含月初和月末的数组,[0]=月初,[1]=月末
+ */
+ public static String[] getMonthStartAndEnd(LocalDate date) {
+ DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ YearMonth yearMonth = YearMonth.from(date);
+ LocalDate start = yearMonth.atDay(1);
+ LocalDate end = yearMonth.atEndOfMonth();
+ return new String[]{sdf.format(start), sdf.format(end)};
+ }
+
+
+
+ /**
+ * 获取两个年份之间的所有月份(格式:yyyy-MM)
+ * @param startYear 开始年份(包含)
+ * @param endYear 结束年份(包含)
+ * @return 月份字符串列表,按正序排列
+ */
+ public static List getMonthsBetweenYears(int startYear, int endYear) {
+ validateYears(startYear, endYear);
+
+ List yearMonths = new ArrayList<>();
+ YearMonth start = YearMonth.of(startYear, 1);
+ YearMonth end = YearMonth.of(endYear, 12);
+
+ while (!start.isAfter(end)) {
+ yearMonths.add(start);
+ start = start.plusMonths(1);
+ }
+
+ return yearMonths.stream()
+ .map(ym -> ym.format(DateTimeFormatter.ofPattern("yyyy-MM")))
+ .collect(Collectors.toList());
+ }
+
+
+ /**
+ * 获取两个日期之间的所有月份(默认格式:yyyy-MM)
+ * @param startDateStr 开始日期(格式:yyyy-MM-dd)
+ * @param endDateStr 结束日期(格式:yyyy-MM-dd)
+ * @return 月份字符串列表,按正序排列
+ * @throws DateTimeParseException 如果日期格式无效
+ */
+ public static List getMonthsBetweenDates(String startDateStr, String endDateStr) throws DateTimeParseException {
+ return getMonthsBetweenDates(startDateStr, endDateStr, "yyyy-MM-dd", "yyyy-MM");
+ }
+
+ /**
+ * 获取两个日期之间的所有月份(自定义格式)
+ * @param startDateStr 开始日期字符串
+ * @param endDateStr 结束日期字符串
+ * @param inputPattern 输入日期格式(如 "yyyy-MM-dd")
+ * @param outputPattern 输出月份格式(如 "yyyy年MM月")
+ * @return 月份字符串列表,按正序排列
+ * @throws DateTimeParseException 如果日期格式无效
+ */
+ public static List getMonthsBetweenDates(String startDateStr, String endDateStr,
+ String inputPattern, String outputPattern) throws DateTimeParseException {
+ // 验证输入
+ if (startDateStr == null || endDateStr == null || inputPattern == null || outputPattern == null) {
+ throw new IllegalArgumentException("参数不能为null");
+ }
+
+ // 解析日期
+ DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputPattern);
+ LocalDate startDate = LocalDate.parse(startDateStr, inputFormatter);
+ LocalDate endDate = LocalDate.parse(endDateStr, inputFormatter);
+
+ // 验证日期顺序
+ if (startDate.isAfter(endDate)) {
+// throw new IllegalArgumentException("开始日期不能晚于结束日期");
+ return new ArrayList<>();
+ }
+
+ // 转换为YearMonth
+ YearMonth startYearMonth = YearMonth.from(startDate);
+ YearMonth endYearMonth = YearMonth.from(endDate);
+
+ // 收集所有月份
+ List yearMonths = new ArrayList<>();
+ YearMonth current = startYearMonth;
+ while (!current.isAfter(endYearMonth)) {
+ yearMonths.add(current);
+ current = current.plusMonths(1);
+ }
+
+ // 格式化为字符串
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputPattern);
+ return yearMonths.stream()
+ .map(ym -> ym.format(outputFormatter))
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 获取两个年份之间的所有年份(包含开始和结束年份)
+ * @param startYearStr 开始年份字符串(如 "2020")
+ * @param endYearStr 结束年份字符串(如 "2023")
+ * @return 年份字符串列表,按正序排列
+ * @throws IllegalArgumentException 如果年份无效或开始年份大于结束年份
+ */
+ public static List getYearsBetween(String startYearStr, String endYearStr) {
+ // 参数校验
+ if (startYearStr == null || endYearStr == null) {
+ throw new IllegalArgumentException("年份参数不能为null");
+ }
+
+ // 转换为整数
+ int startYear = parseYear(startYearStr);
+ int endYear = parseYear(endYearStr);
+
+ // 验证年份顺序
+ if (startYear > endYear) {
+// throw new IllegalArgumentException("开始年份不能大于结束年份");
+ return new ArrayList<>();
+ }
+
+ // 生成年份范围
+ return IntStream.rangeClosed(startYear, endYear)
+ .mapToObj(String::valueOf)
+ .collect(Collectors.toList());
+ }
+
+ // 解析年份字符串
+ private static int parseYear(String yearStr) {
+ try {
+ int year = Integer.parseInt(yearStr);
+ if (year < 0) {
+ throw new IllegalArgumentException("年份不能为负数: " + yearStr);
+ }
+ return year;
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("无效的年份格式: " + yearStr);
+ }
+ }
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/ReflectionUtils.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/ReflectionUtils.java
new file mode 100644
index 0000000..4e42584
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/ReflectionUtils.java
@@ -0,0 +1,168 @@
+package org.jeecg.common.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Java 反射工具类
+ *
+ * @author wgx
+ * date 2022.3.21
+ */
+public class ReflectionUtils extends org.springframework.util.ReflectionUtils {
+
+
+ /**
+ * 递归查找包括所有父类class内field属性
+ *
+ * @param clazz
+ * @param name
+ * @return
+ */
+ public static Field getField(Class clazz, String name) {
+ Field f = null;
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getName().equals(name)) {
+ f = field;
+ break;
+ }
+ }
+ if (f == null) {
+ Class superclass = clazz.getSuperclass();
+ if (null != superclass && !(superclass.equals(Object.class))) {
+ f = getField(superclass, name);
+ }
+ }
+ return f;
+ }
+
+ public static Object getValueByFieldName(Object clazz, String fieldName) {
+ Class> aClass = clazz.getClass();
+ Field field = getField(aClass, fieldName);
+ if (field == null) {
+ return null;
+ }
+ field.setAccessible(true);
+ try {
+ return field.get(clazz);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 获取Class所有field,包含继承父类的
+ *
+ * @param clazz
+ * @return
+ */
+ public static List getAllFields(Class clazz) {
+ Field[] f = clazz.getDeclaredFields();
+ List fields = new ArrayList(Arrays.asList(f));
+ Class superclass = clazz.getSuperclass();
+ if (null != superclass && !(superclass.equals(Object.class))) {
+ List fields1 = getAllFields(superclass);
+ if (!fields1.isEmpty()) {
+ fields.addAll(fields1);
+ }
+ }
+ return fields;
+ }
+
+ public static boolean setField(Object target, String fieldName, Object val) {
+ List allFields = getAllFields(target.getClass());
+ for (Field field : allFields) {
+ if (field.getName().equals(fieldName)) {
+ field.setAccessible(true);
+ try {
+ field.set(target, val);
+ return true;
+ } catch (IllegalAccessException e) {
+ System.out.println("反射设置值失败.: " + ReflectionUtils.class.getName() + ".setField()");
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 反射获取 class 实例,待用
+ *
+ * @param clazz
+ * @param objects
+ * @param
+ * @return
+ */
+ private E getInstance(Class clazz, Object... objects) {
+ int length = objects.length;
+ Class[] classes = new Class[length];
+ for (int i = 0; i < length; i++) {
+ classes[i] = objects[i].getClass();
+ }
+ try {
+ Constructor constructor = clazz.getConstructor(classes);
+ E e = constructor.newInstance(objects);
+ return e;
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 通过反射获取 对象指定field list
+ * 示例: getIntegerIdList(list, "userId", "");
+ *
+ * @param list
+ * @param fieldName
+ * @param
+ * @return
+ */
+ public static List getStringIdList(List list, String fieldName, Class c) {
+ ArrayList arrayList = Lists.newArrayList();
+ if (list != null && !list.isEmpty()) {
+ Field field1 = ReflectionUtils.getField(list.get(0).getClass(), fieldName);
+ if (field1 == null) {
+ return arrayList;
+ }
+// Class> aClass = c.getClass();
+ try {
+ field1.setAccessible(true);
+ for (E o : list) {
+ Object o1 = field1.get(o);
+ if (o1 != null && c.equals(o1.getClass())) {
+ arrayList.add((R) o1);
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ //去重
+ if (!arrayList.isEmpty()) {
+ Set set = Sets.newHashSet();
+ set.addAll(arrayList);
+ arrayList.clear();
+ arrayList.addAll(set);
+ }
+ return arrayList;
+ }
+
+
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans.java
index 95cd246..7ab6154 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans.java
@@ -2,28 +2,72 @@ package org.jeecg.common.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import org.jeecg.common.constant.DeviceReadConstants;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
-import java.util.Date;
@Data
public class CommonDataTrans {
+ @ApiModelProperty("设备编号")
+ private String deployId;
+ @ApiModelProperty("监测类型")
+ private String survType;
+ @ApiModelProperty("监测项名称")
private String name;
+ @ApiModelProperty("单位")
private String unit;
+ @ApiModelProperty("图标")
+ private String icon;
+ @ApiModelProperty("手机端图标")
+ private String mobileIcon;
+ @ApiModelProperty("大屏图标")
+ private String bsIcon;
+// @ApiModelProperty("监测项字段名")
+// private String item;
+ @ApiModelProperty("监测值")
private String value;
+ @ApiModelProperty("颜色")
private String color;
+ @ApiModelProperty("图标名称")
+ private String iconName;
+ @ApiModelProperty("更新时间")
+ private String lastUpdate;
+ @ApiModelProperty("读数情况")
+ private String readStatus = DeviceReadConstants.READ_NORMAL;
+ @ApiModelProperty
+ private String limitStr = "*~*";
+ @ApiModelProperty("h5图标路径")
+ private String h5IconPath;
+ @ApiModelProperty("中台图标路径")
+ private String midIconPath;
+ @ApiModelProperty("app图标路径")
+ private String appIconPath;
+ @ApiModelProperty("大屏图标路径")
+ private String bsIconPath;
+ @ApiModelProperty("大屏图标路径2")
+ private String bsIconPath2;
+
+
+ @ApiModelProperty("监测项名称")
private String trend;
private String survItem;
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "数据更新时间")
+ @JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
+ @JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
private LocalDateTime dataDateTime;
private String stationName;
private String stationCode;
private String stationType;
private Integer dataCounts;
+
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans_bak.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans_bak.java
new file mode 100644
index 0000000..ac71623
--- /dev/null
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans_bak.java
@@ -0,0 +1,29 @@
+package org.jeecg.common.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+public class CommonDataTrans_bak {
+ private String name;
+ private String unit;
+ private String value;
+ private String color;
+ private String trend;
+ private String survItem;
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "数据更新时间")
+ private LocalDateTime dataDateTime;
+ private String stationName;
+ private String stationCode;
+ private String stationType;
+ private Integer dataCounts;
+}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataAirVo.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataAirVo.java
index 9e62836..547db46 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataAirVo.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataAirVo.java
@@ -86,4 +86,9 @@ public class SurvTransdataAirVo implements Serializable {
@TableField(exist = false)
private Integer dataCounts;
+ /**设备ID*/
+ @Excel(name = "设备ID", width = 15)
+ @ApiModelProperty(value = "设备ID")
+ private String deployId;
+
}
diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataSoilVo.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataSoilVo.java
index 8fa851f..b0981af 100644
--- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataSoilVo.java
+++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/SurvTransdataSoilVo.java
@@ -101,4 +101,9 @@ public class SurvTransdataSoilVo implements Serializable {
@TableField(exist = false)
private Integer dataCounts;
+ /**设备ID*/
+ @Excel(name = "设备ID", width = 15)
+ @ApiModelProperty(value = "设备ID")
+ private String deployId;
+
}