Browse Source

环控、能耗

Newspaper 1 năm trước cách đây
mục cha
commit
5348ef247a
61 tập tin đã thay đổi với 2297 bổ sung328 xóa
  1. 17 1
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/controller/BaseConfigController.java
  2. 0 1
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/entity/BaseConfig.java
  3. 0 5
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigEditParam.java
  4. 1 1
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigIdParam.java
  5. 43 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigListChildParam.java
  6. 4 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/service/BaseConfigService.java
  7. 15 2
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/service/impl/BaseConfigServiceImpl.java
  8. 15 10
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/pigpen/entity/BasePigpen.java
  9. 5 3
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/pigpen/service/impl/BasePigpenServiceImpl.java
  10. 0 22
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/controller/EnergyElectricityController.java
  11. 0 20
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/controller/EnergyWaterController.java
  12. 94 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/controller/EnergyElectricityController.java
  13. 65 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/EnergyElectricity.java
  14. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityListVo.java
  15. 20 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityProportionVo.java
  16. 18 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityRateVo.java
  17. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityTopVo.java
  18. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityTrendVo.java
  19. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/enums/EnergyElectricityEnum.java
  20. 57 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/mapper/EnergyElectricityMapper.java
  21. 216 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/mapper/mapping/EnergyElectricityMapper.xml
  22. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityListParm.java
  23. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityProportionParam.java
  24. 24 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityTopParm.java
  25. 40 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/service/EnergyElectricityService.java
  26. 140 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/service/impl/EnergyElectricityServiceImpl.java
  27. 98 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/controller/EnergyWaterController.java
  28. 65 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/EnergyWater.java
  29. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterListVo.java
  30. 20 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterProportionVo.java
  31. 18 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterRateVo.java
  32. 16 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterTopVo.java
  33. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterTrendVo.java
  34. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/enums/EnergyWaterEnum.java
  35. 58 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/mapper/EnergyWaterMapper.java
  36. 214 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/mapper/mapping/EnergyWaterMapper.xml
  37. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterListParm.java
  38. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterProportionParam.java
  39. 24 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterTopParm.java
  40. 40 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/service/EnergyWaterService.java
  41. 142 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/service/impl/EnergyWaterServiceImpl.java
  42. 0 67
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/entity/EnergyElectricity.java
  43. 0 67
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/entity/EnergyWater.java
  44. 0 16
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/mapper/EnergyElectricityMapper.java
  45. 0 16
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/mapper/EnergyWaterMapper.java
  46. 0 20
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/IEnergyElectricityService.java
  47. 0 16
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/IEnergyWaterService.java
  48. 0 41
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/impl/EnergyElectricityServiceImpl.java
  49. 0 20
      snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/impl/EnergyWaterServiceImpl.java
  50. 77 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/controller/EnvDataController.java
  51. 93 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/EnvData.java
  52. 20 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataListVo.java
  53. 22 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataRecentVo.java
  54. 16 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataTrendVo.java
  55. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/enums/EnvDataEnum.java
  56. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/mapper/EnvDataMapper.java
  57. 64 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/mapper/mapping/EnvDataMapper.xml
  58. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/param/EnvDataListParm.java
  59. 16 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/param/EnvDataPigpenIdParm.java
  60. 36 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/service/EnvDataService.java
  61. 105 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/service/impl/EnvDataServiceImpl.java

+ 17 - 1
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/controller/BaseConfigController.java

@@ -14,6 +14,8 @@ package vip.xiaonuo.modular.base.baseConfig.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import io.swagger.annotations.Api;
@@ -30,6 +32,7 @@ import vip.xiaonuo.modular.base.baseConfig.entity.BaseConfig;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigAddParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigEditParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigIdParam;
+import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigListChildParam;
 import vip.xiaonuo.modular.base.baseConfig.service.BaseConfigService;
 
 import javax.annotation.Resource;
@@ -119,9 +122,22 @@ public class BaseConfigController {
      */
     @ApiOperationSupport(order = 5)
     @ApiOperation("获取基础设置详情")
-    @SaCheckPermission("/biz/baseConfig/detail")
     @GetMapping("/base/baseConfig/detail")
     public CommonResult<BaseConfig> detail(@Valid BaseConfigIdParam baseConfigIdParam) {
         return CommonResult.data(baseConfigService.detail(baseConfigIdParam));
     }
+
+    /**
+     * 根据父ID获取下级配置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("根据父ID获取下级配置")
+    @GetMapping("/base/baseConfig/listChild")
+    public CommonResult<Page<BaseConfig>> listChild(@Valid BaseConfigListChildParam baseConfigListChildParam) {
+        return CommonResult.data(baseConfigService.listChild(baseConfigListChildParam));
+    }
+
 }

+ 0 - 1
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/entity/BaseConfig.java

@@ -45,7 +45,6 @@ public class BaseConfig extends CommonEntity implements TransPojo {
 
     /** 父ID */
     @ApiModelProperty(value = "父ID", position = 3)
-    @Trans(type = TransType.SIMPLE, target = BaseConfig.class, fields = "name", alias = "config", ref = "configName")
     private String parentId;
 
     /** 状态 0:禁用 1:启用 */

+ 0 - 5
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigEditParam.java

@@ -39,11 +39,6 @@ public class BaseConfigEditParam {
     @NotBlank(message = "configName不能为空")
     private String configName;
 
-    /** 父ID */
-    @ApiModelProperty(value = "父ID", required = true, position = 3)
-    @NotBlank(message = "parentId不能为空")
-    private String parentId;
-
     /** 状态 0:禁用 1:启用 */
     @ApiModelProperty(value = "状态 0:禁用 1:启用", required = true, position = 4)
     @NotNull(message = "status不能为空")

+ 1 - 1
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigIdParam.java

@@ -29,7 +29,7 @@ import javax.validation.constraints.NotBlank;
 public class BaseConfigIdParam {
 
     /** ID */
-    @ApiModelProperty(value = "ID", required = true)
+    @ApiModelProperty(value = "ID", required = true,position = 1)
     @NotBlank(message = "id不能为空")
     private String id;
 }

+ 43 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/param/BaseConfigListChildParam.java

@@ -0,0 +1,43 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.base.baseConfig.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 基础设置Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Getter
+@Setter
+public class BaseConfigListChildParam {
+
+    /** ID */
+    @ApiModelProperty(value = "父id", required = true,position = 1)
+    @NotBlank(message = "父id不能为空")
+    private String parentId;
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码",position = 2)
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数",position = 3)
+    private Integer size;
+}

+ 4 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/service/BaseConfigService.java

@@ -13,11 +13,14 @@
 package vip.xiaonuo.modular.base.baseConfig.service;
 
 import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import vip.xiaonuo.modular.base.baseConfig.entity.BaseConfig;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigAddParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigEditParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigIdParam;
+import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigListChildParam;
 
 import java.util.List;
 
@@ -78,4 +81,5 @@ public interface BaseConfigService extends IService<BaseConfig> {
     BaseConfig queryEntity(String id);
 
 
+    Page<BaseConfig> listChild(BaseConfigListChildParam baseConfigListChildParam);
 }

+ 15 - 2
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseConfig/service/impl/BaseConfigServiceImpl.java

@@ -20,18 +20,22 @@ import cn.hutool.core.lang.tree.TreeUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
+import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.core.enums.BaseDataTypeEnum;
 import vip.xiaonuo.modular.base.baseConfig.entity.BaseConfig;
 import vip.xiaonuo.modular.base.baseConfig.mapper.BaseConfigMapper;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigAddParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigEditParam;
 import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigIdParam;
+import vip.xiaonuo.modular.base.baseConfig.param.BaseConfigListChildParam;
 import vip.xiaonuo.modular.base.baseConfig.service.BaseConfigService;
 
 import javax.validation.constraints.NotBlank;
@@ -52,8 +56,8 @@ public class BaseConfigServiceImpl extends ServiceImpl<BaseConfigMapper, BaseCon
     public List<Tree<String>> tree() {
         String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
         List<BaseConfig> allConfigs = new ArrayList<>();
-        List<BaseConfig> baseConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getParentId, 0));
-        List<BaseConfig> childConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getOrgId, orgId));
+        List<BaseConfig> baseConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getParentId, 0).orderByAsc(BaseConfig::getSortCode));
+        List<BaseConfig> childConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getOrgId, orgId).orderByAsc(BaseConfig::getSortCode));
 
         allConfigs.addAll(baseConfigs);
         allConfigs.addAll(childConfigs);
@@ -110,5 +114,14 @@ public class BaseConfigServiceImpl extends ServiceImpl<BaseConfigMapper, BaseCon
         return baseConfig;
     }
 
+    @Override
+    public Page<BaseConfig> listChild(BaseConfigListChildParam baseConfigListChildParam) {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        QueryWrapper<BaseConfig> queryWrapper = new QueryWrapper();
+        queryWrapper.lambda().eq(BaseConfig::getParentId, baseConfigListChildParam.getParentId()).eq(BaseConfig::getOrgId, orgId);
+        Page<BaseConfig> baseConfigList = this.page(CommonPageRequest.defaultPage(),queryWrapper);
+        return baseConfigList;
+    }
+
 
 }

+ 15 - 10
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/pigpen/entity/BasePigpen.java

@@ -46,28 +46,33 @@ public class BasePigpen extends CommonEntity implements TransPojo {
     @ApiModelProperty(value = "父级ID", position = 3)
     private String parentId;
 
+    /** 所有父级ID */
+    @ApiModelProperty(value = "所有父级ID", position = 4)
+    private String pids;
+
+    /** 排序 */
+    @ApiModelProperty(value = "栋舍全名", position = 5)
+    private String fullName;
+
     /** 类型 0:栋舍 1:楼层 2:单元 */
-    @ApiModelProperty(value = "类型 0:栋舍 1:楼层 2:单元", position = 4)
+    @ApiModelProperty(value = "类型 0:栋舍 1:楼层 2:单元", position = 6)
     private Integer type;
 
     /** 阶段 */
-    @ApiModelProperty(value = "阶段", position = 5)
-    private String remarks;
-
+    @ApiModelProperty(value = "阶段", position = 7)
+    private String stage;
 
     /** 容量 */
-    @ApiModelProperty(value = "容量", position = 6)
+    @ApiModelProperty(value = "容量", position = 8)
     private Integer capacity;
 
     /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 7)
+    @ApiModelProperty(value = "组织id", position = 9)
     private String orgId;
 
     /** 排序 */
-    @ApiModelProperty(value = "排序", position = 8)
+    @ApiModelProperty(value = "排序", position = 10)
     private Integer sort;
 
-    /** 排序 */
-    @ApiModelProperty(value = "栋舍全名", position = 9)
-    private String fullName;
+
 }

+ 5 - 3
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/pigpen/service/impl/BasePigpenServiceImpl.java

@@ -87,15 +87,16 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
         SaBaseLoginUser user = StpLoginUserUtil.getLoginUser();
         String orgId = user.getOrgId();
         BasePigpen basePigpen = BeanUtil.toBean(basePigpenAddParam, BasePigpen.class);
-
         if (basePigpen.getParentId().equals("0")){
             basePigpen.setType(0);
+            basePigpen.setPids("0");
             basePigpen.setFullName(basePigpen.getBuildName());
         }else {
             BasePigpen pigpen = this.getById(basePigpen.getParentId());
             if (pigpen.getType() == 2){
                 throw new CommonException("无法将单元作为上级栋舍!");
             }
+            basePigpen.setPids(pigpen.getPids() + "," + pigpen.getId());
             basePigpen.setFullName(pigpen.getFullName()+basePigpen.getBuildName());
             basePigpen.setType(this.queryEntity(basePigpen.getParentId()).getType()+1);
         }
@@ -121,17 +122,17 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
                 throw new CommonException("顶级只能作为栋舍的上级栋舍!");
             }
             basePigpen.setType(0);
+            basePigpen.setPids("0");
             basePigpen.setFullName(basePigpen.getBuildName());
         }else {
             BasePigpen pigpen = this.getById(basePigpen.getParentId());
-            System.out.println(pigpen.getType());
-            System.out.println(basePigpen.getType());
             if (!basePigpen.getType().equals(pigpen.getType()+1)){
                 throw new CommonException("上级栋舍只能为上一级!");
             }
             if (pigpen.getType() == 2){
                 throw new CommonException("无法将单元作为上级栋舍!");
             }
+            basePigpen.setPids(pigpen.getPids() + "," + pigpen.getId());
             basePigpen.setFullName(pigpen.getFullName()+basePigpen.getBuildName());
             basePigpen.setType(this.queryEntity(basePigpen.getParentId()).getType()+1);
         }
@@ -151,6 +152,7 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
         List<BasePigpen> child = this.list(new QueryWrapper<BasePigpen>().lambda().eq(BasePigpen::getParentId, basePigpen.getId()));
         if (CollectionUtil.isNotEmpty(child)){
             for (BasePigpen pigpen : child) {
+                pigpen.setPids(basePigpen.getPids()+","+basePigpen.getId());
                 pigpen.setFullName(basePigpen.getFullName()+pigpen.getBuildName());
                 this.updateById(pigpen);
             }

+ 0 - 22
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/controller/EnergyElectricityController.java

@@ -1,22 +0,0 @@
-package vip.xiaonuo.modular.energy.controller;
-
-
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 能耗电表 前端控制器
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@RestController
-@RequestMapping("/energy-electricity")
-@CrossOrigin
-public class EnergyElectricityController {
-
-}

+ 0 - 20
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/controller/EnergyWaterController.java

@@ -1,20 +0,0 @@
-package vip.xiaonuo.modular.energy.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 能耗水表 前端控制器
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@RestController
-@RequestMapping("/energy-water")
-public class EnergyWaterController {
-
-}

+ 94 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/controller/EnergyElectricityController.java

@@ -0,0 +1,94 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityProportionVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTrendVo;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityListParm;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityProportionParam;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityTopParm;
+import vip.xiaonuo.modular.energy.energyElectricity.service.EnergyElectricityService;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+import java.util.Map;
+
+/**
+ * 能耗电表控制器
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ */
+@Api(tags = "能耗电表控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class EnergyElectricityController {
+
+    @Resource
+    private EnergyElectricityService energyElectricityService;
+
+    /**
+     * 获取用电占比
+     *
+     * @author newspaper
+     * @date  2023/12/21 09:15
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取用电占比")
+    @GetMapping("/energy/energyElectricity/getProportion")
+    public CommonResult<EnergyElectricityProportionVo> getProportion(EnergyElectricityProportionParam energyElectricityProportionParam) {
+        String type = energyElectricityProportionParam.getType();
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        return CommonResult.data(energyElectricityService.getProportion(orgId,type));
+    }
+
+    /**
+     * 获取用电量趋势
+     *
+     * @author newspaper
+     * @date  2023/12/21 14:54
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("获取用电量趋势")
+    @GetMapping("/energy/energyElectricity/listTrend")
+    public CommonResult<EnergyElectricityTrendVo> listTrend(EnergyElectricityListParm energyElectricityListParm) {
+        return CommonResult.data(energyElectricityService.listTrend(energyElectricityListParm));
+    }
+
+
+    /**
+     * 获取用电量排名
+     *
+     * @author newspaper
+     * @date  2023/12/21 14:54
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("获取用电量排名")
+    @GetMapping("/energy/energyElectricity/listTop")
+    public CommonResult<EnergyElectricityTopVo> listTop(EnergyElectricityTopParm energyElectricityTopParm) {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        return CommonResult.data(energyElectricityService.listTop(energyElectricityTopParm,orgId));
+    }
+
+}

+ 65 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/EnergyElectricity.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 能耗电表实体
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+@Setter
+@TableName("energy_electricity")
+public class EnergyElectricity {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 用电量 */
+    @ApiModelProperty(value = "用电量", position = 2)
+    private String electricityValue;
+
+    /** 原始电量 */
+    @ApiModelProperty(value = "原始电量", position = 3)
+    private String originalValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 4)
+    private Date originalDate;
+
+    /** 单元ID */
+    @ApiModelProperty(value = "单元ID", position = 5)
+    private String unitId;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 6)
+    private String orgId;
+
+    /** 设备编码 */
+    @ApiModelProperty(value = "设备编码", position = 7)
+    private String deviceCode;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    private Date createDate;
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityListVo.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.energy.energyElectricity.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+@Data
+public class EnergyElectricityListVo {
+    @ApiModelProperty(value = "用电量", position = 1)
+    private BigDecimal electricityValue;
+
+    @ApiModelProperty(value = "创建时间", position = 2)
+    private Date createTime;
+
+}

+ 20 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityProportionVo.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.modular.energy.energyElectricity.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EnergyElectricityProportionVo {
+
+    @ApiModelProperty(value = "累计", position = 1)
+    private BigDecimal total;
+
+    @ApiModelProperty(value = "环比", position = 2)
+    private BigDecimal qoq;
+
+    @ApiModelProperty(value = "比例列表", position = 3)
+    private List<EnergyElectricityRateVo> rateList;
+}

+ 18 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityRateVo.java

@@ -0,0 +1,18 @@
+package vip.xiaonuo.modular.energy.energyElectricity.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class EnergyElectricityRateVo {
+    @ApiModelProperty(value = "栋舍名", position = 1)
+    private String buildName;
+
+    @ApiModelProperty(value = "消耗数量", position = 2)
+    private BigDecimal consumptionQuantity;
+
+    @ApiModelProperty(value = "占比", position = 3)
+    private BigDecimal proportion;
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityTopVo.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.energy.energyElectricity.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EnergyElectricityTopVo {
+    @ApiModelProperty(value = "位置", position = 1)
+    private String location;
+
+    @ApiModelProperty(value = "数据", position = 2)
+    private BigDecimal energyElectricityValue;
+
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/entity/vo/EnergyElectricityTrendVo.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.energy.energyElectricity.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo;
+
+import java.util.List;
+
+@Data
+public class EnergyElectricityTrendVo {
+    @ApiModelProperty(value = "位置", position = 1)
+    private String location;
+
+    @ApiModelProperty(value = "数据", position = 2)
+    private List<EnergyElectricityListVo> energyElectricityList;
+
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/enums/EnergyElectricityEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.enums;
+
+import lombok.Getter;
+
+/**
+ * 能耗电表枚举
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+public enum EnergyElectricityEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    EnergyElectricityEnum(String value) {
+        this.value = value;
+    }
+}

+ 57 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/mapper/EnergyElectricityMapper.java

@@ -0,0 +1,57 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.EnergyElectricity;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 能耗电表Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+public interface EnergyElectricityMapper extends BaseMapper<EnergyElectricity> {
+    BigDecimal getWeekTotal(String orgId);
+
+    BigDecimal getMonthTotal(String orgId);
+
+    BigDecimal getLastWeekTotal(String orgId);
+
+    BigDecimal getLastMonthTotal(String orgId);
+
+    BigDecimal getWeekTotalByType(String stage, String orgId);
+
+    BigDecimal getMonthTotalByType(String stage, String orgId);
+
+    List<EnergyElectricityListVo> listToday(String pigpenId);
+
+    List<EnergyElectricityListVo> listWeek(String pigpenId);
+
+    List<EnergyElectricityListVo> listMonth(String pigpenId);
+
+    List<EnergyElectricityListVo> listCustom(String pigpenId, String startDate, String endDate);
+
+    EnergyElectricityTopVo listTodayTop(String orgId);
+
+    EnergyElectricityTopVo listWeekTop(String orgId);
+
+    EnergyElectricityTopVo listMonthTop(String orgId);
+
+    EnergyElectricityTopVo listCustomTop(String orgId, String startDate, String endDate);
+}

+ 216 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/mapper/mapping/EnergyElectricityMapper.xml

@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.energy.energyElectricity.mapper.EnergyElectricityMapper">
+
+    <select id="getWeekTotal" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity`
+        WHERE
+            org_id = #{orgId}
+            AND YEARWEEK(create_date, 1) = YEARWEEK(CURDATE(), 1)
+    </select>
+
+
+    <select id="getMonthTotal" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity`
+        WHERE
+            org_id = #{orgId}
+            AND MONTH(create_date) = MONTH(CURDATE())
+            AND YEAR(create_date) = YEAR(CURDATE())
+    </select>
+
+    <select id="getLastWeekTotal" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity`
+        WHERE
+            org_id = #{orgId}
+            AND create_date BETWEEN
+                CURDATE() - INTERVAL 1 WEEK AND CURDATE() - INTERVAL 1 DAY;
+    </select>
+
+    <select id="getLastMonthTotal" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity`
+        WHERE
+            org_id = #{orgId}
+            AND MONTH(create_date) = MONTH(CURDATE() - INTERVAL 1 MONTH)
+            AND YEAR(create_date) = YEAR(CURDATE() - INTERVAL 1 MONTH);
+    </select>
+
+    <select id="getWeekTotalByType" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(e.electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            p.stage = #{stage}
+            AND YEARWEEK(e.create_date, 1) = YEARWEEK(CURDATE(), 1)
+    </select>
+    <select id="getMonthTotalByType" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(e.electricity_value), 2), 0) AS 'electricityValue'
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            p.stage = #{stage}
+            AND MONTH(e.create_date) = MONTH(CURDATE())
+            AND YEAR(e.create_date) = YEAR(CURDATE())
+    </select>
+
+    <select id="listToday" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo">
+        SELECT
+            electricity_value AS 'electricityValue', create_date AS 'createTime'
+        FROM
+            `energy_electricity`
+        WHERE
+            unit_id = #{pigpenId}
+            AND DATE(create_date) = CURRENT_DATE
+        ORDER BY
+         createTime ASC
+    </select>
+
+    <select id="listWeek" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo">
+        SELECT
+            ROUND(AVG(electricity_value), 2) AS 'electricityValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_electricity`
+        WHERE
+            unit_id = #{pigpenId}
+            AND YEARWEEK(create_date, 1) = YEARWEEK(CURDATE(), 1)
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+    <select id="listMonth" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo">
+        SELECT
+            ROUND(AVG(electricity_value), 2) AS 'electricityValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_electricity`
+        WHERE
+            unit_id = #{pigpenId}
+            AND MONTH(create_date) = MONTH(CURDATE())
+            AND YEAR(create_date) = YEAR(CURDATE())
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+
+    <select id="listCustom" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo">
+        SELECT
+            ROUND(AVG(electricity_value), 2) AS 'electricityValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_electricity`
+        WHERE
+            unit_id = #{pigpenId}
+            AND create_date BETWEEN #{startDate} AND #{endDate}
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+
+    <select id="listTodayTop" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(electricity_value), 2) as 'energyElectricityValue'
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            AND DATE(create_date) = CURRENT_DATE
+        GROUP BY
+            e.unit_id
+        ORDER BY
+            energyElectricityValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listWeekTop" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(electricity_value), 2) as 'energyElectricityValue'
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            AND YEARWEEK(e.create_date, 1) = YEARWEEK(CURDATE(), 1)
+        GROUP BY
+            e.unit_id
+        ORDER BY
+            energyElectricityValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listMonthTop" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(electricity_value), 2) as 'energyElectricityValue'
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            AND MONTH(e.create_date) = MONTH(CURDATE())
+            AND YEAR(e.create_date) = YEAR(CURDATE())
+        GROUP BY
+            e.unit_id
+        ORDER BY
+            energyElectricityValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listCustomTop" resultType="vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(electricity_value), 2) as 'energyElectricityValue''
+        FROM
+            `energy_electricity` e
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            e.unit_id = p.id
+        WHERE
+            e.org_id = #{orgId}
+            AND e.create_date BETWEEN #{startDate} AND #{endDate}
+        GROUP BY
+            e.unit_id
+        ORDER BY
+            energyElectricityValue DESC
+        LIMIT 6
+    </select>
+</mapper>

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityListParm.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.modular.energy.energyElectricity.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnergyElectricityListParm {
+    /** 栋舍ID */
+    @ApiModelProperty(value = "栋舍ID", required = true, position = 1)
+    @NotBlank(message = "栋舍ID不能为空")
+    private String pigpenId;
+
+    /** 显示类型 */
+    @ApiModelProperty(value = "显示类型", required = true, position = 2, example = "0:今日, 1:本周, 2:本月, 3:自定义")
+    @NotBlank(message = "显示类型不能为空")
+    private String type;
+
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间", position = 3)
+        private String startDate;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", position = 4)
+    private String endDate;
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityProportionParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 能耗电表Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+@Setter
+public class EnergyElectricityProportionParam {
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型", required = true, example = "0:本周, 1:本月")
+    @NotBlank(message = "type不能为空")
+    private String type;
+}

+ 24 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/param/EnergyElectricityTopParm.java

@@ -0,0 +1,24 @@
+package vip.xiaonuo.modular.energy.energyElectricity.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnergyElectricityTopParm {
+    /** 显示类型 */
+    @ApiModelProperty(value = "显示类型", required = true, position = 1, example = "0:今日, 1:本周, 2:本月, 3:自定义")
+    @NotBlank(message = "显示类型不能为空")
+    private String type;
+
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间", position = 2)
+        private String startDate;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", position = 3)
+    private String endDate;
+}

+ 40 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/service/EnergyElectricityService.java

@@ -0,0 +1,40 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.EnergyElectricity;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityProportionVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTrendVo;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityListParm;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityTopParm;
+
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 能耗电表Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+public interface EnergyElectricityService extends IService<EnergyElectricity> {
+
+    EnergyElectricityProportionVo getProportion(String orgId, String type);
+
+    EnergyElectricityTrendVo listTrend(EnergyElectricityListParm energyElectricityListParm);
+
+    EnergyElectricityTopVo listTop(EnergyElectricityTopParm energyElectricityTopParm, String orgId);
+}

+ 140 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyElectricity/service/impl/EnergyElectricityServiceImpl.java

@@ -0,0 +1,140 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyElectricity.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.modular.base.baseConfig.entity.BaseConfig;
+import vip.xiaonuo.modular.base.baseConfig.mapper.BaseConfigMapper;
+import vip.xiaonuo.modular.base.pigpen.mapper.BasePigpenMapper;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.EnergyElectricity;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.*;
+import vip.xiaonuo.modular.energy.energyElectricity.mapper.EnergyElectricityMapper;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityListParm;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityTopParm;
+import vip.xiaonuo.modular.energy.energyElectricity.service.EnergyElectricityService;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 能耗电表Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Service
+public class EnergyElectricityServiceImpl extends ServiceImpl<EnergyElectricityMapper, EnergyElectricity> implements EnergyElectricityService {
+
+    @Autowired
+    private EnergyElectricityMapper energyElectricityMapper;
+
+    @Autowired
+    private BaseConfigMapper baseConfigMapper;
+
+    @Autowired
+    private BasePigpenMapper basePigpenMapper;
+
+    @Override
+    public EnergyElectricityProportionVo getProportion(String orgId, String type) {
+        EnergyElectricityProportionVo electricityProportion = new EnergyElectricityProportionVo();
+        BigDecimal thisTotal,lastTotal;
+        BigDecimal qoq = BigDecimal.valueOf(100);
+        String parentId = baseConfigMapper.selectOne(new QueryWrapper<BaseConfig>().eq("config_name", "栋舍阶段").eq("parent_id", 0)).getId();
+        List<BaseConfig> buildStage = baseConfigMapper.selectList(new QueryWrapper<BaseConfig>().eq("parent_id", parentId).orderByAsc("sort_code"));
+        List<String> stages = buildStage.stream().map(config -> config.getConfigName()).collect(Collectors.toList());
+        List<EnergyElectricityRateVo> rateList = null;
+        if (type.equals("0")){
+            thisTotal = energyElectricityMapper.getWeekTotal(orgId);
+            lastTotal = energyElectricityMapper.getLastWeekTotal(orgId);
+            for (String stage : stages) {
+                EnergyElectricityRateVo rate = new EnergyElectricityRateVo();
+                BigDecimal proportion = BigDecimal.ZERO;
+                BigDecimal weekTotal = energyElectricityMapper.getWeekTotalByType(stage, orgId);
+                rate.setBuildName(stage+"舍");
+                rate.setConsumptionQuantity(weekTotal);
+                if (!thisTotal.equals(BigDecimal.ZERO)){
+                    proportion = weekTotal.divide(thisTotal).multiply(BigDecimal.valueOf(100));
+                }
+                rate.setProportion(proportion);
+                rateList.add(rate);
+            }
+        }else {
+            thisTotal = energyElectricityMapper.getMonthTotal(orgId);
+            lastTotal = energyElectricityMapper.getLastMonthTotal(orgId);
+            for (String stage : stages) {
+                EnergyElectricityRateVo rate = new EnergyElectricityRateVo();
+                BigDecimal proportion = BigDecimal.ZERO;
+                BigDecimal weekTotal = energyElectricityMapper.getMonthTotalByType(stage, orgId);
+                rate.setBuildName(stage+"舍");
+                rate.setConsumptionQuantity(weekTotal);
+                if (!thisTotal.equals(BigDecimal.ZERO)){
+                    proportion = weekTotal.divide(thisTotal).multiply(BigDecimal.valueOf(100));
+                }
+                rate.setProportion(proportion);
+                rateList.add(rate);
+            }
+        }
+        if (!lastTotal.equals(BigDecimal.ZERO)){
+            qoq = thisTotal.subtract(lastTotal).divide(lastTotal).multiply(BigDecimal.valueOf(100));
+        }
+        electricityProportion.setTotal(thisTotal);
+        electricityProportion.setQoq(qoq);
+        electricityProportion.setRateList(rateList);
+        return electricityProportion;
+    }
+
+    @Override
+    public EnergyElectricityTrendVo listTrend(EnergyElectricityListParm energyElectricityListParm) {
+        String type = energyElectricityListParm.getType();
+        String pigpenId = energyElectricityListParm.getPigpenId();
+        String location = basePigpenMapper.selectById(pigpenId).getFullName();
+        EnergyElectricityTrendVo electricityTrend = new EnergyElectricityTrendVo();
+        List<EnergyElectricityListVo> energyElectricityList;
+        if (type.equals("0")){
+            energyElectricityList = energyElectricityMapper.listToday(pigpenId);
+        }else if (type.equals("1")){
+            energyElectricityList = energyElectricityMapper.listWeek(pigpenId);
+        }else if (type.equals("2")){
+            energyElectricityList = energyElectricityMapper.listMonth(pigpenId);
+        }else {
+            String startDate = energyElectricityListParm.getStartDate() + " 00:00:00";
+            String endDate = energyElectricityListParm.getEndDate() + " 23:59:59";
+            energyElectricityList = energyElectricityMapper.listCustom(pigpenId,startDate,endDate);
+        }
+        electricityTrend.setLocation(location);
+        electricityTrend.setEnergyElectricityList(energyElectricityList);
+        return electricityTrend;
+    }
+
+    @Override
+    public EnergyElectricityTopVo listTop(EnergyElectricityTopParm energyElectricityTopParm, String orgId) {
+        String type = energyElectricityTopParm.getType();
+        EnergyElectricityTopVo electricityTop;
+        if (type.equals("0")){
+            electricityTop = energyElectricityMapper.listTodayTop(orgId);
+        }else if (type.equals("1")){
+            electricityTop = energyElectricityMapper.listWeekTop(orgId);
+        }else if (type.equals("2")){
+            electricityTop = energyElectricityMapper.listMonthTop(orgId);
+        }else {
+            String startDate = energyElectricityTopParm.getStartDate() + " 00:00:00";
+            String endDate = energyElectricityTopParm.getEndDate() + " 23:59:59";
+            electricityTop = energyElectricityMapper.listCustomTop(orgId,startDate,endDate);
+        }
+        return electricityTop;
+    }
+}

+ 98 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/controller/EnergyWaterController.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityProportionVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTopVo;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityTrendVo;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityListParm;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityProportionParam;
+import vip.xiaonuo.modular.energy.energyElectricity.param.EnergyElectricityTopParm;
+import vip.xiaonuo.modular.energy.energyWater.entity.EnergyWater;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterProportionVo;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTrendVo;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterListParm;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterProportionParam;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterTopParm;
+import vip.xiaonuo.modular.energy.energyWater.service.EnergyWaterService;
+
+
+import javax.annotation.Resource;
+
+/**
+ * 能耗水表控制器
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ */
+@Api(tags = "能耗水表控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class EnergyWaterController {
+
+    @Resource
+    private EnergyWaterService energyWaterService;
+
+    /**
+     * 获取用水占比
+     *
+     * @author newspaper
+     * @date  2023/12/21 09:15
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取用水占比")
+    @GetMapping("/energy/energyWater/getProportion")
+    public CommonResult<EnergyWaterProportionVo> getProportion(EnergyWaterProportionParam energyWaterProportionParam) {
+        String type = energyWaterProportionParam.getType();
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        return CommonResult.data(energyWaterService.getProportion(orgId,type));
+    }
+
+    /**
+     * 获取用水量趋势
+     *
+     * @author newspaper
+     * @date  2023/12/21 14:54
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("获取用水量趋势")
+    @GetMapping("/energy/energyWater/listTrend")
+    public CommonResult<EnergyWaterTrendVo> listTrend(EnergyWaterListParm energyWaterListParm) {
+        return CommonResult.data(energyWaterService.listTrend(energyWaterListParm));
+    }
+
+    /**
+     * 获取用水量排名
+     *
+     * @author newspaper
+     * @date  2023/12/21 14:54
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("获取用水量排名")
+    @GetMapping("/energy/energyWater/listTop")
+    public CommonResult<EnergyWaterTopVo> listTop(EnergyWaterTopParm energyWaterTopParm) {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        return CommonResult.data(energyWaterService.listTop(energyWaterTopParm,orgId));
+    }
+}

+ 65 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/EnergyWater.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 能耗水表实体
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+@Setter
+@TableName("energy_water")
+public class EnergyWater {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private Integer id;
+
+    /** 用水量 */
+    @ApiModelProperty(value = "用水量", position = 2)
+    private String waterValue;
+
+    /** 原始水量 */
+    @ApiModelProperty(value = "原始水量", position = 3)
+    private String originalValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 4)
+    private Date originalDate;
+
+    /** 单元id */
+    @ApiModelProperty(value = "单元id", position = 5)
+    private Integer unitId;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+    /** 设备编码 */
+    @ApiModelProperty(value = "设备编码", position = 7)
+    private String deviceCode;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    private Date createDate;
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterListVo.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.energy.energyWater.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+@Data
+public class EnergyWaterListVo {
+    @ApiModelProperty(value = "用水量", position = 1)
+    private BigDecimal waterValue;
+
+    @ApiModelProperty(value = "创建时间", position = 2)
+    private Date createTime;
+
+}

+ 20 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterProportionVo.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.modular.energy.energyWater.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EnergyWaterProportionVo {
+
+    @ApiModelProperty(value = "累计", position = 1)
+    private BigDecimal total;
+
+    @ApiModelProperty(value = "环比", position = 2)
+    private BigDecimal qoq;
+
+    @ApiModelProperty(value = "比例列表", position = 3)
+    private List<EnergyWaterRateVo> rateList;
+}

+ 18 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterRateVo.java

@@ -0,0 +1,18 @@
+package vip.xiaonuo.modular.energy.energyWater.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class EnergyWaterRateVo {
+    @ApiModelProperty(value = "栋舍名", position = 1)
+    private String buildName;
+
+    @ApiModelProperty(value = "消耗数量", position = 2)
+    private BigDecimal consumptionQuantity;
+
+    @ApiModelProperty(value = "占比", position = 3)
+    private BigDecimal proportion;
+}

+ 16 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterTopVo.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.modular.energy.energyWater.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class EnergyWaterTopVo {
+    @ApiModelProperty(value = "位置", position = 1)
+    private String location;
+
+    @ApiModelProperty(value = "数据", position = 2)
+    private BigDecimal energyWaterValue;
+
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/entity/vo/EnergyWaterTrendVo.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.energy.energyWater.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.EnergyElectricityListVo;
+
+import java.util.List;
+
+@Data
+public class EnergyWaterTrendVo {
+    @ApiModelProperty(value = "位置", position = 1)
+    private String location;
+
+    @ApiModelProperty(value = "数据", position = 2)
+    private List<EnergyWaterListVo> energyWaterList;
+
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/enums/EnergyWaterEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.enums;
+
+import lombok.Getter;
+
+/**
+ * 能耗水表枚举
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+public enum EnergyWaterEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    EnergyWaterEnum(String value) {
+        this.value = value;
+    }
+}

+ 58 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/mapper/EnergyWaterMapper.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.energy.energyWater.entity.EnergyWater;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterListVo;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 能耗水表Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+public interface EnergyWaterMapper extends BaseMapper<EnergyWater> {
+    BigDecimal getWeekTotal(String orgId);
+
+    BigDecimal getLastWeekTotal(String orgId);
+
+    BigDecimal getWeekTotalByType(String stage, String orgId);
+
+    BigDecimal getMonthTotal(String orgId);
+
+    BigDecimal getLastMonthTotal(String orgId);
+
+    BigDecimal getMonthTotalByType(String stage, String orgId);
+
+    List<EnergyWaterListVo> listToday(String pigpenId);
+
+    List<EnergyWaterListVo> listWeek(String pigpenId);
+
+    List<EnergyWaterListVo> listMonth(String pigpenId);
+
+    List<EnergyWaterListVo> listCustom(String pigpenId, String startDate, String endDate);
+
+    EnergyWaterTopVo listTodayTop(String orgId);
+
+    EnergyWaterTopVo listWeekTop(String orgId);
+
+    EnergyWaterTopVo listMonthTop(String orgId);
+
+    EnergyWaterTopVo listCustomTop(String orgId, String startDate, String endDate);
+}

+ 214 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/mapper/mapping/EnergyWaterMapper.xml

@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.energy.energyWater.mapper.EnergyWaterMapper">
+
+    <select id="getWeekTotal" resultType="java.math.BigDecimal" parameterType="java.lang.String">
+         SELECT
+            COALESCE(ROUND(SUM(water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water`
+        WHERE
+            org_id = #{orgId}
+            AND YEARWEEK(create_date, 1) = YEARWEEK(CURDATE(), 1)
+    </select>
+
+    <select id="getLastWeekTotal" resultType="java.math.BigDecimal" parameterType="java.lang.String">
+        SELECT
+            COALESCE(ROUND(SUM(water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water`
+        WHERE
+            org_id = #{orgId}
+            AND create_date BETWEEN
+                CURDATE() - INTERVAL 1 WEEK AND CURDATE() - INTERVAL 1 DAY;
+    </select>
+
+    <select id="getWeekTotalByType" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(w.water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            p.stage = #{stage}
+            AND YEARWEEK(e.create_date, 1) = YEARWEEK(CURDATE(), 1)
+    </select>
+
+    <select id="getMonthTotal" resultType="java.math.BigDecimal" parameterType="java.lang.String">
+        SELECT
+            COALESCE(ROUND(SUM(water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water`
+        WHERE
+            org_id = #{orgId}
+            AND MONTH(create_date) = MONTH(CURDATE())
+            AND YEAR(create_date) = YEAR(CURDATE())
+    </select>
+
+    <select id="getLastMonthTotal" resultType="java.math.BigDecimal" parameterType="java.lang.String">
+        SELECT
+            COALESCE(ROUND(SUM(water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water`
+        WHERE
+            org_id = #{orgId}
+            AND MONTH(create_date) = MONTH(CURDATE() - INTERVAL 1 MONTH)
+            AND YEAR(create_date) = YEAR(CURDATE() - INTERVAL 1 MONTH);
+    </select>
+
+    <select id="getMonthTotalByType" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(w.water_value), 2), 0) AS 'waterValue'
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            p.stage = #{stage}
+            AND MONTH(e.create_date) = MONTH(CURDATE())
+            AND YEAR(e.create_date) = YEAR(CURDATE())
+    </select>
+    <select id="listToday" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterListVo" parameterType="java.lang.String">
+        SELECT
+            water_value AS 'waterValue', create_date AS 'createTime'
+        FROM
+            `energy_water`
+        WHERE
+            unit_id = #{pigpenId}
+            AND DATE(create_date) = CURRENT_DATE
+        ORDER BY
+         createTime ASC
+    </select>
+
+    <select id="listWeek" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterListVo" parameterType="java.lang.String">
+        SELECT
+            ROUND(AVG(water_value), 2) AS 'waterValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_water`
+        WHERE
+            unit_id = #{pigpenId}
+            AND YEARWEEK(create_date, 1) = YEARWEEK(CURDATE(), 1)
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+
+    <select id="listMonth" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterListVo" parameterType="java.lang.String">
+        SELECT
+            ROUND(AVG(water_value), 2) AS 'waterValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_water`
+        WHERE
+            unit_id = #{pigpenId}
+            AND MONTH(create_date) = MONTH(CURDATE())
+            AND YEAR(create_date) = YEAR(CURDATE())
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+    <select id="listCustom" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterListVo">
+        SELECT
+            ROUND(AVG(water_value), 2) AS 'waterValue',
+            DATE(create_date) AS 'createTime'
+        FROM
+            `energy_water`
+        WHERE
+            unit_id = #{pigpenId}
+            AND create_date BETWEEN #{startDate} AND #{endDate}
+        GROUP BY
+            DATE(create_date)
+        ORDER BY
+            DATE(create_date) ASC;
+    </select>
+    <select id="listTodayTop" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo" parameterType="java.lang.String">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(w.water_value), 2) as 'energyWaterValue'
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            AND DATE(w.create_date) = CURRENT_DATE
+        GROUP BY
+            w.unit_id
+        ORDER BY
+            energyWaterValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listWeekTop" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo" parameterType="java.lang.String">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(w.water_value), 2) as 'energyWaterValue'
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            AND YEARWEEK(w.create_date, 1) = YEARWEEK(CURDATE(), 1)
+        GROUP BY
+            w.unit_id
+        ORDER BY
+            energyWaterValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listMonthTop" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo" parameterType="java.lang.String">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(w.water_value), 2) as 'energyWaterValue'
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            AND MONTH(w.create_date) = MONTH(CURDATE())
+            AND YEAR(w.create_date) = YEAR(CURDATE())
+        GROUP BY
+            w.unit_id
+        ORDER BY
+            energyWaterValue DESC
+        LIMIT 6
+    </select>
+
+    <select id="listCustomTop" resultType="vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo">
+        SELECT
+            p.full_name as 'location',
+            ROUND(SUM(w.water_value), 2) as 'energyWaterValue''
+        FROM
+            `energy_water` w
+        LEFT JOIN
+            `base_pigpen` p
+        ON
+            w.unit_id = p.id
+        WHERE
+            w.org_id = #{orgId}
+            AND w.create_date BETWEEN #{startDate} AND #{endDate}
+        GROUP BY
+            w.unit_id
+        ORDER BY
+            energyWaterValue DESC
+        LIMIT 6
+    </select>
+</mapper>

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterListParm.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.modular.energy.energyWater.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnergyWaterListParm {
+    /** 栋舍ID */
+    @ApiModelProperty(value = "栋舍ID", required = true, position = 1)
+    @NotBlank(message = "栋舍ID不能为空")
+    private String pigpenId;
+
+    /** 显示类型 */
+    @ApiModelProperty(value = "显示类型", required = true, position = 2, example = "0:今日, 1:本周, 2:本月, 3:自定义")
+    @NotBlank(message = "显示类型不能为空")
+    private String type;
+
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间", position = 3)
+    private String startDate;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", position = 4)
+    private String endDate;
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterProportionParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 能耗电表Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Getter
+@Setter
+public class EnergyWaterProportionParam {
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型", required = true)
+    @NotBlank(message = "type不能为空")
+    private String type;
+}

+ 24 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/param/EnergyWaterTopParm.java

@@ -0,0 +1,24 @@
+package vip.xiaonuo.modular.energy.energyWater.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnergyWaterTopParm {
+    /** 显示类型 */
+    @ApiModelProperty(value = "显示类型", required = true, position = 1, example = "0:今日, 1:本周, 2:本月, 3:自定义")
+    @NotBlank(message = "显示类型不能为空")
+    private String type;
+
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间", position = 2)
+        private String startDate;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", position = 3)
+    private String endDate;
+}

+ 40 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/service/EnergyWaterService.java

@@ -0,0 +1,40 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.service;
+
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.energy.energyWater.entity.EnergyWater;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterProportionVo;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTopVo;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.EnergyWaterTrendVo;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterListParm;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterTopParm;
+
+import java.util.List;
+
+/**
+ * 能耗水表Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+public interface EnergyWaterService extends IService<EnergyWater> {
+
+    EnergyWaterProportionVo getProportion(String orgId, String type);
+
+    EnergyWaterTrendVo listTrend(EnergyWaterListParm energyWaterListParm);
+
+    EnergyWaterTopVo listTop(EnergyWaterTopParm energyWaterTopParm, String orgId);
+}

+ 142 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/energyWater/service/impl/EnergyWaterServiceImpl.java

@@ -0,0 +1,142 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.energy.energyWater.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.modular.base.baseConfig.entity.BaseConfig;
+import vip.xiaonuo.modular.base.baseConfig.mapper.BaseConfigMapper;
+import vip.xiaonuo.modular.base.pigpen.mapper.BasePigpenMapper;
+import vip.xiaonuo.modular.energy.energyElectricity.entity.vo.*;
+import vip.xiaonuo.modular.energy.energyWater.entity.EnergyWater;
+import vip.xiaonuo.modular.energy.energyWater.entity.vo.*;
+import vip.xiaonuo.modular.energy.energyWater.mapper.EnergyWaterMapper;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterListParm;
+import vip.xiaonuo.modular.energy.energyWater.param.EnergyWaterTopParm;
+import vip.xiaonuo.modular.energy.energyWater.service.EnergyWaterService;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 能耗水表Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/21 09:15
+ **/
+@Service
+public class EnergyWaterServiceImpl extends ServiceImpl<EnergyWaterMapper, EnergyWater> implements EnergyWaterService {
+
+    @Autowired
+    private BaseConfigMapper baseConfigMapper;
+
+    @Autowired
+    private EnergyWaterMapper energyWaterMapper;
+
+    @Autowired
+    private BasePigpenMapper basePigpenMapper;
+
+    @Override
+    public EnergyWaterProportionVo getProportion(String orgId, String type) {
+        EnergyWaterProportionVo energyWaterProportion = new EnergyWaterProportionVo();
+        BigDecimal thisTotal,lastTotal;
+        BigDecimal qoq = BigDecimal.valueOf(100);
+        String parentId = baseConfigMapper.selectOne(new QueryWrapper<BaseConfig>().eq("config_name", "栋舍阶段").eq("parent_id", 0)).getId();
+        List<BaseConfig> buildStage = baseConfigMapper.selectList(new QueryWrapper<BaseConfig>().eq("parent_id", parentId).orderByAsc("sort_code"));
+        List<String> stages = buildStage.stream().map(config -> config.getConfigName()).collect(Collectors.toList());
+        List<EnergyWaterRateVo> rateList = null;
+        if (type.equals("0")){
+            thisTotal = energyWaterMapper.getWeekTotal(orgId);
+            lastTotal = energyWaterMapper.getLastWeekTotal(orgId);
+            for (String stage : stages) {
+                EnergyWaterRateVo rate = new EnergyWaterRateVo();
+                BigDecimal proportion = BigDecimal.ZERO;
+                BigDecimal weekTotal = energyWaterMapper.getWeekTotalByType(stage, orgId);
+                rate.setBuildName(stage+"舍");
+                rate.setConsumptionQuantity(weekTotal);
+                if (!thisTotal.equals(BigDecimal.ZERO)){
+                    proportion = weekTotal.divide(thisTotal).multiply(BigDecimal.valueOf(100));
+                }
+                rate.setProportion(proportion);
+                rateList.add(rate);
+            }
+        }else {
+            thisTotal = energyWaterMapper.getMonthTotal(orgId);
+            lastTotal = energyWaterMapper.getLastMonthTotal(orgId);
+            for (String stage : stages) {
+                EnergyWaterRateVo rate = new EnergyWaterRateVo();
+                BigDecimal proportion = BigDecimal.ZERO;
+                BigDecimal weekTotal = energyWaterMapper.getMonthTotalByType(stage, orgId);
+                rate.setBuildName(stage+"舍");
+                rate.setConsumptionQuantity(weekTotal);
+                if (!thisTotal.equals(BigDecimal.ZERO)){
+                    proportion = weekTotal.divide(thisTotal).multiply(BigDecimal.valueOf(100));
+                }
+                rate.setProportion(proportion);
+                rateList.add(rate);
+            }
+        }
+        if (!lastTotal.equals(BigDecimal.ZERO)){
+            qoq = thisTotal.subtract(lastTotal).divide(lastTotal).multiply(BigDecimal.valueOf(100));
+        }
+        energyWaterProportion.setTotal(thisTotal);
+        energyWaterProportion.setQoq(qoq);
+        energyWaterProportion.setRateList(rateList);
+        return energyWaterProportion;
+    }
+
+    @Override
+    public EnergyWaterTrendVo listTrend(EnergyWaterListParm energyWaterListParm) {
+        String type = energyWaterListParm.getType();
+        String pigpenId = energyWaterListParm.getPigpenId();
+        String location = basePigpenMapper.selectById(pigpenId).getFullName();
+        EnergyWaterTrendVo waterTrend = new EnergyWaterTrendVo();
+        List<EnergyWaterListVo> energyWaterList;
+        if (type.equals("0")){
+            energyWaterList = energyWaterMapper.listToday(pigpenId);
+        }else if (type.equals("1")){
+            energyWaterList = energyWaterMapper.listWeek(pigpenId);
+        }else if (type.equals("2")){
+            energyWaterList = energyWaterMapper.listMonth(pigpenId);
+        }else {
+            String startDate = energyWaterListParm.getStartDate() + " 00:00:00";
+            String endDate = energyWaterListParm.getEndDate() + " 23:59:59";
+            energyWaterList = energyWaterMapper.listCustom(pigpenId,startDate,endDate);
+        }
+        waterTrend.setLocation(location);
+        waterTrend.setEnergyWaterList(energyWaterList);
+        return waterTrend;
+    }
+
+    @Override
+    public EnergyWaterTopVo listTop(EnergyWaterTopParm energyWaterTopParm, String orgId) {
+        String type = energyWaterTopParm.getType();
+        EnergyWaterTopVo waterTop;
+        if (type.equals("0")){
+            waterTop = energyWaterMapper.listTodayTop(orgId);
+        }else if (type.equals("1")){
+            waterTop = energyWaterMapper.listWeekTop(orgId);
+        }else if (type.equals("2")){
+            waterTop = energyWaterMapper.listMonthTop(orgId);
+        }else {
+            String startDate = energyWaterTopParm.getStartDate() + " 00:00:00";
+            String endDate = energyWaterTopParm.getEndDate() + " 23:59:59";
+            waterTop = energyWaterMapper.listCustomTop(orgId,startDate,endDate);
+        }
+        return waterTop;
+    }
+}

+ 0 - 67
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/entity/EnergyElectricity.java

@@ -1,67 +0,0 @@
-package vip.xiaonuo.modular.energy.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * <p>
- * 能耗电表
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@TableName("energy_electricity")
-public class EnergyElectricity implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 用水量
-     */
-    private String electricityValue;
-
-    /**
-     * 原始水量
-     */
-    private String originalValue;
-
-    /**
-     * 上传时间
-     */
-    private LocalDateTime originalDate;
-
-    /**
-     * 单元id
-     */
-    private Integer unitId;
-
-    /**
-     * 单元名称
-     */
-    private String unitName;
-
-    /**
-     * 组织id
-     */
-    private String orgId;
-
-    /**
-     * 设备编码
-     */
-    private String deviceCode;
-
-
-}

+ 0 - 67
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/entity/EnergyWater.java

@@ -1,67 +0,0 @@
-package vip.xiaonuo.modular.energy.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * <p>
- * 能耗水表
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@TableName("energy_water")
-public class EnergyWater implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 用水量
-     */
-    private String waterValue;
-
-    /**
-     * 原始水量
-     */
-    private String originalValue;
-
-    /**
-     * 上传时间
-     */
-    private LocalDateTime originalDate;
-
-    /**
-     * 单元id
-     */
-    private Integer unitId;
-
-    /**
-     * 单元名称
-     */
-    private String unitName;
-
-    /**
-     * 组织id
-     */
-    private String orgId;
-
-    /**
-     * 设备编码
-     */
-    private String deviceCode;
-
-
-}

+ 0 - 16
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/mapper/EnergyElectricityMapper.java

@@ -1,16 +0,0 @@
-package vip.xiaonuo.modular.energy.mapper;
-
-import vip.xiaonuo.modular.energy.entity.EnergyElectricity;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * <p>
- * 能耗电表 Mapper 接口
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-public interface EnergyElectricityMapper extends BaseMapper<EnergyElectricity> {
-
-}

+ 0 - 16
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/mapper/EnergyWaterMapper.java

@@ -1,16 +0,0 @@
-package vip.xiaonuo.modular.energy.mapper;
-
-import vip.xiaonuo.modular.energy.entity.EnergyWater;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * <p>
- * 能耗水表 Mapper 接口
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-public interface EnergyWaterMapper extends BaseMapper<EnergyWater> {
-
-}

+ 0 - 20
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/IEnergyElectricityService.java

@@ -1,20 +0,0 @@
-package vip.xiaonuo.modular.energy.service;
-
-import vip.xiaonuo.common.pojo.CommonResult;
-import vip.xiaonuo.modular.energy.entity.EnergyElectricity;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-import java.util.Map;
-
-/**
- * <p>
- * 能耗电表 服务类
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-public interface IEnergyElectricityService extends IService<EnergyElectricity> {
-
-    CommonResult listElectricity(Map<String, String> paramsMap);
-}

+ 0 - 16
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/IEnergyWaterService.java

@@ -1,16 +0,0 @@
-package vip.xiaonuo.modular.energy.service;
-
-import vip.xiaonuo.modular.energy.entity.EnergyWater;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- * 能耗水表 服务类
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-public interface IEnergyWaterService extends IService<EnergyWater> {
-
-}

+ 0 - 41
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/impl/EnergyElectricityServiceImpl.java

@@ -1,41 +0,0 @@
-package vip.xiaonuo.modular.energy.service.impl;
-
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.beans.factory.annotation.Autowired;
-import vip.xiaonuo.common.pojo.CommonResult;
-import vip.xiaonuo.modular.energy.entity.EnergyElectricity;
-import vip.xiaonuo.modular.energy.mapper.EnergyElectricityMapper;
-import vip.xiaonuo.modular.energy.service.IEnergyElectricityService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-import java.util.Map;
-
-/**
- * <p>
- * 能耗电表 服务实现类
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@Service
-public class EnergyElectricityServiceImpl extends ServiceImpl<EnergyElectricityMapper, EnergyElectricity> implements IEnergyElectricityService {
-
-    @Autowired
-    private EnergyElectricityMapper electricityMapper;
-
-    @Override
-    public CommonResult listElectricity(Map<String, String> paramsMap) {
-        String orgId = paramsMap.get("orgId");
-        String type = paramsMap.get("type");
-
-        if ("".equals(type) || null == type) {
-            type = "1";
-        }
-        if ("1".equals(type)) {
-
-        }
-        return null;
-    }
-}

+ 0 - 20
snowy-web-app/src/main/java/vip/xiaonuo/modular/energy/service/impl/EnergyWaterServiceImpl.java

@@ -1,20 +0,0 @@
-package vip.xiaonuo.modular.energy.service.impl;
-
-import vip.xiaonuo.modular.energy.entity.EnergyWater;
-import vip.xiaonuo.modular.energy.mapper.EnergyWaterMapper;
-import vip.xiaonuo.modular.energy.service.IEnergyWaterService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 能耗水表 服务实现类
- * </p>
- *
- * @author author
- * @since 2023-12-06
- */
-@Service
-public class EnergyWaterServiceImpl extends ServiceImpl<EnergyWaterMapper, EnergyWater> implements IEnergyWaterService {
-
-}

+ 77 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/controller/EnvDataController.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataRecentVo;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataTrendVo;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataListParm;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataPigpenIdParm;
+import vip.xiaonuo.modular.env.envdata.service.EnvDataService;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 环控数据控制器
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ */
+@Api(tags = "环控数据控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class EnvDataController {
+    @Autowired
+    private EnvDataService envDataService;
+
+    /**
+     * 根据楼层ID获取最新环控数据
+     *
+     * @author newspaper
+     * @date  2023/12/20 14:38
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("根据楼层ID获取最新环控数据")
+    @PostMapping("/env/envData/getLastDataByPigpenId")
+    public CommonResult<List<EnvDataRecentVo>> getLastDataByPigpenId(@RequestBody @Valid EnvDataPigpenIdParm envDataPigpenIdParm){
+        return CommonResult.data(envDataService.getLastDataByPigpenId(envDataPigpenIdParm));
+    }
+
+    /**
+     * 根据单元ID获取环控数据
+     *
+     * @author newspaper
+     * @date  2023/12/20 14:38
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("根据单元ID获取环控数据")
+    @PostMapping("/env/envData/listDataByPigpenId")
+    public CommonResult<EnvDataTrendVo> listDataByPigpenId(@RequestBody @Valid EnvDataListParm envDataListParm){
+        return CommonResult.data(envDataService.listDataByPigpenId(envDataListParm));
+    }
+
+
+}

+ 93 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/EnvData.java

@@ -0,0 +1,93 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fhs.core.trans.anno.Trans;
+import com.fhs.core.trans.constant.TransType;
+import com.fhs.core.trans.vo.TransPojo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.modular.base.pigpen.entity.BasePigpen;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 环控数据实体
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ **/
+@Getter
+@Setter
+@TableName("env_data")
+public class EnvData implements TransPojo {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private Integer id;
+
+    /** 芯片ID */
+    @ApiModelProperty(value = "芯片ID", position = 2)
+    private String chipCode;
+
+    /** 设备ID */
+    @ApiModelProperty(value = "设备ID", position = 3)
+    private String deviceCode;
+
+    /** 栋舍ID */
+    @ApiModelProperty(value = "栋舍ID", position = 4)
+    @Trans(type = TransType.SIMPLE,target = BasePigpen.class,fields = "fullName", alias = "pigpen", ref = "buildName")
+    private String pigpenId;
+
+    /** 温度原始值记录 */
+    @ApiModelProperty(value = "温度原始值记录", position = 5)
+    private BigDecimal temOriginalValue;
+
+    /** 温度处理后的值 */
+    @ApiModelProperty(value = "温度处理后的值", position = 6)
+    private BigDecimal temHandleValue;
+
+    /** 湿度原始值记录 */
+    @ApiModelProperty(value = "湿度原始值记录", position = 7)
+    private BigDecimal humiOriginalValue;
+
+    /** 湿度处理后的值 */
+    @ApiModelProperty(value = "湿度处理后的值", position = 8)
+    private BigDecimal humiHandleValue;
+
+    /** 应答时间 */
+    @ApiModelProperty(value = "应答时间", position = 9)
+    private Date askTime;
+
+    /** 入库时间 */
+    @ApiModelProperty(value = "入库时间", position = 10)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 11)
+    private Integer orgId;
+
+    /** 0显示,1不显示 */
+    @ApiModelProperty(value = "0显示,1不显示", position = 12)
+    private Integer isShow;
+
+    /** 栋舍名称 */
+    @ApiModelProperty(value = "栋舍名称", position = 13)
+    @TableField(exist = false)
+    private String buildName;
+}

+ 20 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataListVo.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.modular.env.envdata.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+@Data
+public class EnvDataListVo {
+    @ApiModelProperty(value = "温度", position = 1)
+    private BigDecimal temp;
+
+    @ApiModelProperty(value = "湿度", position = 2)
+    private BigDecimal hum;
+
+    @ApiModelProperty(value = "创建时间", position = 3)
+    private Date createTime;
+
+}

+ 22 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataRecentVo.java

@@ -0,0 +1,22 @@
+package vip.xiaonuo.modular.env.envdata.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+@Data
+public class EnvDataRecentVo {
+    @ApiModelProperty(value = "温度", position = 1)
+    private BigDecimal temp;
+
+    @ApiModelProperty(value = "湿度", position = 2)
+    private BigDecimal hum;
+
+    @ApiModelProperty(value = "位置", position = 3)
+    private String location;
+
+    @ApiModelProperty(value = "栋舍ID", position = 4)
+    private String pigpenId;
+}

+ 16 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/entity/vo/EnvDataTrendVo.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.modular.env.envdata.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EnvDataTrendVo {
+    @ApiModelProperty(value = "位置", position = 1)
+    private String location;
+
+    @ApiModelProperty(value = "数据", position = 2)
+    private List<EnvDataListVo> envDataList;
+
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/enums/EnvDataEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.enums;
+
+import lombok.Getter;
+
+/**
+ * 环控数据枚举
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ **/
+@Getter
+public enum EnvDataEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    EnvDataEnum(String value) {
+        this.value = value;
+    }
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/mapper/EnvDataMapper.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.env.envdata.entity.EnvData;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo;
+
+import java.util.List;
+
+/**
+ * 环控数据Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ **/
+public interface EnvDataMapper extends BaseMapper<EnvData> {
+    List<EnvDataListVo> listToday(String pigpenId);
+
+    List<EnvDataListVo> listWeek(String pigpenId);
+
+    List<EnvDataListVo> listMonth(String pigpenId);
+
+    List<EnvDataListVo> listCustom(String pigpenId, String startDate, String endDate);
+}

+ 64 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/mapper/mapping/EnvDataMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.env.envdata.mapper.EnvDataMapper">
+
+    <select id="listToday" resultType="vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo">
+        SELECT tem_handle_value AS 'temp', humi_handle_value AS 'hum', update_time AS 'createTime'
+        FROM `env_data`
+        WHERE pigpen_id = #{pigpenId} AND DATE(update_time) = CURRENT_DATE AND is_show = 0
+        ORDER BY update_time ASC
+    </select>
+
+    <select id="listWeek" resultType="vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo">
+        SELECT
+            DATE(update_time) AS 'createTime',
+            ROUND(AVG(tem_handle_value), 2) AS 'temp',
+            ROUND(AVG(humi_handle_value), 2) AS 'hum'
+        FROM
+            `env_data`
+        WHERE
+            pigpen_id = #{pigpenId}
+            AND YEARWEEK(update_time, 1) = YEARWEEK(CURDATE(), 1)
+            AND is_show = 0
+        GROUP BY
+            DATE(update_time)
+        ORDER BY
+            DATE(update_time) ASC;
+    </select>
+
+    <select id="listMonth" resultType="vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo">
+        SELECT
+            DATE(update_time) AS 'createTime',
+            ROUND(AVG(tem_handle_value), 2) AS 'temp',
+            ROUND(AVG(humi_handle_value), 2) AS 'hum'
+        FROM
+            `env_data`
+        WHERE
+            pigpen_id = #{pigpenId}
+            AND MONTH(update_time) = MONTH(CURDATE())
+            AND YEAR(update_time) = YEAR(CURDATE())
+            AND is_show = 0
+        GROUP BY
+            DATE(update_time)
+        ORDER BY
+            DATE(update_time) ASC;
+    </select>
+
+    <select id="listCustom" resultType="vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo">
+        SELECT
+            DATE(update_time) AS 'createTime',
+            ROUND(AVG(tem_handle_value), 2) AS 'temp',
+            ROUND(AVG(humi_handle_value), 2) AS 'hum'
+
+        FROM
+            `env_data`
+        WHERE
+            pigpen_id = #{pigpenId}
+            AND update_time BETWEEN #{startDate} AND #{endDate}
+            AND is_show = 0
+        GROUP BY
+            DATE(update_time)
+        ORDER BY
+            DATE(update_time) ASC;
+    </select>
+</mapper>

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/param/EnvDataListParm.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.modular.env.envdata.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnvDataListParm {
+    /** 栋舍ID */
+    @ApiModelProperty(value = "栋舍ID", required = true, position = 1)
+    @NotBlank(message = "栋舍ID不能为空")
+    private String pigpenId;
+
+    /** 显示类型 */
+    @ApiModelProperty(value = "显示类型", required = true, position = 2, example = "0:今日, 1:本周, 2:本月, 3:自定义")
+    @NotBlank(message = "显示类型不能为空")
+    private String type;
+
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间", position = 3)
+        private String startDate;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", position = 4)
+    private String endDate;
+}

+ 16 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/param/EnvDataPigpenIdParm.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.modular.env.envdata.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class EnvDataPigpenIdParm {
+    /** 栋舍ID */
+    @ApiModelProperty(value = "栋舍ID", required = true)
+    @NotBlank(message = "栋舍ID不能为空")
+    private String pigpenId;
+}

+ 36 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/service/EnvDataService.java

@@ -0,0 +1,36 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.env.envdata.entity.EnvData;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataRecentVo;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataTrendVo;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataListParm;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataPigpenIdParm;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 环控数据Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ **/
+public interface EnvDataService extends IService<EnvData> {
+
+    List<EnvDataRecentVo> getLastDataByPigpenId(EnvDataPigpenIdParm envDataPigpenIdParm);
+
+    EnvDataTrendVo listDataByPigpenId(EnvDataListParm envDataListParm);
+}

+ 105 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdata/service/impl/EnvDataServiceImpl.java

@@ -0,0 +1,105 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.env.envdata.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.modular.base.pigpen.entity.BasePigpen;
+import vip.xiaonuo.modular.base.pigpen.mapper.BasePigpenMapper;
+import vip.xiaonuo.modular.env.envdata.entity.EnvData;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataListVo;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataRecentVo;
+import vip.xiaonuo.modular.env.envdata.entity.vo.EnvDataTrendVo;
+import vip.xiaonuo.modular.env.envdata.mapper.EnvDataMapper;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataListParm;
+import vip.xiaonuo.modular.env.envdata.param.EnvDataPigpenIdParm;
+import vip.xiaonuo.modular.env.envdata.service.EnvDataService;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 环控数据Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/20 14:38
+ **/
+@Service
+public class EnvDataServiceImpl extends ServiceImpl<EnvDataMapper, EnvData> implements EnvDataService {
+
+    @Autowired
+    private BasePigpenMapper basePigpenMapper;
+
+    @Autowired
+    private EnvDataMapper envDataMapper;
+
+    @Override
+    public List<EnvDataRecentVo> getLastDataByPigpenId(EnvDataPigpenIdParm envDataPigpenIdParm) {
+        String pigpenId = envDataPigpenIdParm.getPigpenId();
+        List<EnvDataRecentVo> resultList = new ArrayList();
+        List<BasePigpen> basePigpens = basePigpenMapper.selectList(new QueryWrapper<BasePigpen>().eq("parent_id", pigpenId));
+        for (BasePigpen basePigpen : basePigpens) {
+            EnvData envData = this.getOne(new QueryWrapper<EnvData>().lambda()
+                    .eq(EnvData::getPigpenId, basePigpen.getId())
+                    .eq(EnvData::getIsShow,0)
+                    .orderByDesc(EnvData::getUpdateTime)
+
+                    .last("limit 1"));
+            EnvDataRecentVo envDataRecent = new EnvDataRecentVo();
+            if (ObjectUtil.isEmpty(envData)){
+                envDataRecent.setTemp(BigDecimal.ZERO);
+                envDataRecent.setHum(BigDecimal.ZERO);
+                envDataRecent.setLocation(basePigpen.getFullName());
+                envDataRecent.setPigpenId(basePigpen.getId());
+            }else {
+                envDataRecent.setTemp(envData.getTemHandleValue());
+                envDataRecent.setHum(envData.getHumiHandleValue());
+                envDataRecent.setLocation(basePigpen.getFullName());
+                envDataRecent.setPigpenId(basePigpen.getId());
+            }
+            resultList.add(envDataRecent);
+        }
+        return resultList;
+    }
+
+    @Override
+    public EnvDataTrendVo listDataByPigpenId(EnvDataListParm envDataListParm) {
+        String type = envDataListParm.getType();
+        String pigpenId = envDataListParm.getPigpenId();
+        String location = basePigpenMapper.selectById(pigpenId).getFullName();
+        EnvDataTrendVo envDataTrend = new EnvDataTrendVo();
+        List<EnvDataListVo> envDataList;
+        if (type.equals("0")){
+            envDataList = envDataMapper.listToday(pigpenId);
+        }else if (type.equals("1")){
+            envDataList = envDataMapper.listWeek(pigpenId);
+        }else if (type.equals("2")){
+            envDataList = envDataMapper.listMonth(pigpenId);
+        }else {
+            String startDate = envDataListParm.getStartDate() + " 00:00:00";
+            String endDate = envDataListParm.getEndDate() + " 23:59:59";
+            envDataList = envDataMapper.listCustom(pigpenId,startDate,endDate);
+        }
+        envDataTrend.setLocation(location);
+        envDataTrend.setEnvDataList(envDataList);
+        return envDataTrend;
+    }
+
+}