From 14ba1cd442f90cee70031685b5d069116450624b Mon Sep 17 00:00:00 2001 From: zy <82248909@qq.com> Date: Wed, 19 Nov 2025 17:33:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/config/shiro/ShiroConfig.java | 2 + pom.xml | 1 + zh-module-applet/zh-applet-admin/pom.xml | 1 + .../appmana/controller/InnerController.java | 50 + .../controller/StatisticsContoller.java | 44 + .../mapper/SurvDeviceDeployMapper.java | 2 + .../appmana/mapper/SurvHisdataAirMapper.java | 3 + .../appmana/mapper/SurvHisdataSoilMapper.java | 2 + .../appmana/mapper/xml/ScEquZhibiaoMapper.xml | 24 +- .../mapper/xml/SurvAlertRecordMapper.xml | 2 +- .../mapper/xml/SurvDeviceDeployMapper.xml | 24 +- .../mapper/xml/SurvHisdataAirMapper.xml | 43 +- .../mapper/xml/SurvHisdataSoilMapper.xml | 53 +- .../mapper/xml/SurvTransdataAirMapper.xml | 4 +- .../mapper/xml/SurvTransdataSoilMapper.xml | 6 +- .../appmana/service/IScEquZhibiaoService.java | 2 + .../service/ISurvDeviceDeployService.java | 5 + .../service/ISurvHisdataAirService.java | 3 + .../service/ISurvHisdataSoilService.java | 3 + .../service/ISurvTransdataAirService.java | 2 + .../service/ISurvTransdataSoilService.java | 2 + .../service/impl/IotCommonServiceImpl.java | 1045 +++++++++++++++++ .../service/impl/ScEquZhibiaoServiceImpl.java | 13 + .../impl/SurvDeviceDeployServiceImpl.java | 19 + .../impl/SurvHisdataAirServiceImpl.java | 7 +- .../SurvHisdataLivestockwaterServiceImpl.java | 8 - .../SurvHisdataOrientwaterServiceImpl.java | 10 - .../impl/SurvHisdataSoilServiceImpl.java | 6 + .../impl/SurvTransdataAirServiceImpl.java | 9 + .../impl/SurvTransdataSoilServiceImpl.java | 7 + .../modules/appmana/utils/CommonUtils.java | 1020 ++++++++++++++++ .../jeecg/modules/appmana/utils/Iotutils.java | 64 + .../mapper/xml/SurvDeviceDeployMapper.xml | 6 +- .../mapper/xml/SurvHisdataAirMapper.xml | 1 + .../mapper/xml/SurvHisdataSoilMapper.xml | 1 + .../mapper/xml/SurvStationInfoMapper.xml | 10 +- .../mapper/xml/SurvTransdataAirMapper.xml | 1 + .../mapper/xml/SurvTransdataSoilMapper.xml | 1 + zh-module-applet/zh-applet-common/pom.xml | 10 + .../common/constant/DeviceReadConstants.java | 10 + .../common/constant/enums/PollutionEnum.java | 202 +++- .../constant/enums/PollutionEnumBak.java | 180 +++ .../jeecg/common/entity/SurvDeviceDeploy.java | 3 +- .../jeecg/common/entity/SurvHisdataAir.java | 7 + .../jeecg/common/entity/SurvHisdataSoil.java | 7 + .../jeecg/common/entity/SurvTransdataAir.java | 10 +- .../common/entity/SurvTransdataSoil.java | 10 +- .../iot/common/IotSurvDistinctDeploy.java | 22 + .../common/iot/common/VODeployGroupId.java | 9 + .../jeecg/common/iot/common/VODeviceCate.java | 9 + .../common/iot/common/VODeviceWithData.java | 26 + .../iot/common/VOIntegrateStatistic.java | 25 + .../common/iot/common/VOSurvElement.java | 15 + .../common/iot/common/VOSurvElementValue.java | 15 + .../common/iot/common/VOSurvIntegrate.java | 13 + .../iot/common/VOSurvIntegrateAirDetail.java | 158 +++ .../iot/common/VOSurvIntegrateParam.java | 18 + .../iot/common/VOSurvIntegrateResult.java | 25 + .../iot/common/VOSurvIntegrateSoilDetail.java | 205 ++++ .../iot/common/VOSurvIntegrateTotal.java | 120 ++ .../jeecg/common/iot/common/VOTransData.java | 17 + .../iot/common/VOWaterSurvIntegrateParam.java | 18 + .../jeecg/common/iot/common/VOZhiBiao.java | 11 + .../jeecg/common/util/DateTimeRangeUtils.java | 192 +++ .../org/jeecg/common/util/DateUtilTools.java | 699 +++++++++++ .../jeecg/common/util/ReflectionUtils.java | 168 +++ .../org/jeecg/common/vo/CommonDataTrans.java | 50 +- .../jeecg/common/vo/CommonDataTrans_bak.java | 29 + .../jeecg/common/vo/SurvTransdataAirVo.java | 5 + .../jeecg/common/vo/SurvTransdataSoilVo.java | 5 + 70 files changed, 4698 insertions(+), 101 deletions(-) create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/InnerController.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/StatisticsContoller.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/CommonUtils.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/DeviceReadConstants.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/PollutionEnumBak.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/IotSurvDistinctDeploy.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeployGroupId.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceCate.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VODeviceWithData.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOIntegrateStatistic.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElement.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvElementValue.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrate.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateAirDetail.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateParam.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateResult.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateSoilDetail.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOSurvIntegrateTotal.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOTransData.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOWaterSurvIntegrateParam.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/common/VOZhiBiao.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateTimeRangeUtils.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/DateUtilTools.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/ReflectionUtils.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/CommonDataTrans_bak.java 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 @@ - + select * from sc_equ_zhibiao where zhibiao_type = '1' AND equ_id IN + + #{id} + + order by sort_no,create_time desc - + select count(distinct name) from sc_equ_zhibiao + + + \ 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 @@ + + + \ 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 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 + + \ 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 @@ + + + \ 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/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 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 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 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 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 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 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 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 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 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 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 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 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} + + 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/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 @@ 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-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; + }