浏览代码

基础配置

Newspaper 1 年之前
父节点
当前提交
cc0b48eb83
共有 26 个文件被更改,包括 1627 次插入0 次删除
  1. 18 0
      snowy-web-app/src/main/java/vip/xiaonuo/core/enums/EnvDataTypeEnum.java
  2. 82 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/controller/BaseSeasonController.java
  3. 94 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/entity/BaseSeason.java
  4. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/enums/BaseSeasonEnum.java
  5. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/mapper/BaseSeasonMapper.java
  6. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/mapper/mapping/BaseSeasonMapper.xml
  7. 82 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonAddParam.java
  8. 96 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonEditParam.java
  9. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonIdParam.java
  10. 51 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonPageParam.java
  11. 36 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonTypeParam.java
  12. 48 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/service/BaseSeasonService.java
  13. 109 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/service/impl/BaseSeasonServiceImpl.java
  14. 72 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/inventoryUse/entity/vo/InventoryUseDetailVo.java
  15. 68 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/base/inventoryUse/entity/vo/InventoryUseVo.java
  16. 140 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/controller/EnvDeviceController.java
  17. 82 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/entity/EnvDevice.java
  18. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/enums/EnvDeviceEnum.java
  19. 32 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/mapper/EnvDeviceMapper.java
  20. 15 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/mapper/mapping/EnvDeviceMapper.xml
  21. 64 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceAddParam.java
  22. 69 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceEditParam.java
  23. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceIdParam.java
  24. 59 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDevicePageParam.java
  25. 83 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/service/EnvDeviceService.java
  26. 159 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/service/impl/EnvDeviceServiceImpl.java

+ 18 - 0
snowy-web-app/src/main/java/vip/xiaonuo/core/enums/EnvDataTypeEnum.java

@@ -0,0 +1,18 @@
+package vip.xiaonuo.core.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum EnvDataTypeEnum {
+
+    /**
+     * 设备
+     */
+    DEVICE("DEVICE");
+
+    private final String value;
+
+    EnvDataTypeEnum(String value){
+        this.value = value;
+    }
+}

+ 82 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/controller/BaseSeasonController.java

@@ -0,0 +1,82 @@
+/*
+ * 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.baseSeason.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+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;
+import io.swagger.annotations.ApiOperation;
+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.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.base.baseSeason.entity.BaseSeason;
+import vip.xiaonuo.modular.base.baseSeason.param.*;
+import vip.xiaonuo.modular.base.baseSeason.service.BaseSeasonService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.text.ParseException;
+
+/**
+ * 季节控制器
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ */
+@Api(tags = "季节控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class BaseSeasonController {
+
+    @Resource
+    private BaseSeasonService baseSeasonService;
+
+    /**
+     * 获取季节详情
+     *
+     * @author newspaper
+     * @date  2023/12/18 11:14
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取季节详情")
+    @CommonLog("获取季节详情")
+    @GetMapping("/base/baseSeason/getSeason")
+    public CommonResult<BaseSeason> getSeason(BaseSeasonTypeParam baseSeasonTypeParam) throws ParseException {
+        return CommonResult.data(baseSeasonService.getSeason(baseSeasonTypeParam));
+    }
+
+
+    /**
+     * 编辑季节
+     *
+     * @author newspaper
+     * @date  2023/12/18 11:14
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("编辑季节")
+    @CommonLog("编辑季节")
+    @PostMapping("/base/baseSeason/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BaseSeasonEditParam baseSeasonEditParam) {
+        baseSeasonService.edit(baseSeasonEditParam);
+        return CommonResult.ok();
+    }
+}

+ 94 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/entity/BaseSeason.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.base.baseSeason.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fhs.core.trans.vo.TransPojo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 季节实体
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+@TableName("base_season")
+public class BaseSeason extends CommonEntity implements TransPojo {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 春季开始时间 */
+    @ApiModelProperty(value = "春季开始时间", position = 2)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date springStartTime;
+
+    /** 春季结束时间 */
+    @ApiModelProperty(value = "春季结束时间", position = 3)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date springEndTime;
+
+    /** 夏季开始时间 */
+    @ApiModelProperty(value = "夏季开始时间", position = 4)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date summerStartTime;
+
+    /** 夏季结束时间 */
+    @ApiModelProperty(value = "夏季结束时间", position = 5)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date summerEndTime;
+
+    /** 秋季开始时间 */
+    @ApiModelProperty(value = "秋季开始时间", position = 6)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date autumnStartTime;
+
+    /** 秋季结束时间 */
+    @ApiModelProperty(value = "秋季结束时间", position = 7)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date autumnEndTime;
+
+    /** 冬季开始时间 */
+    @ApiModelProperty(value = "冬季开始时间", position = 8)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date winterStartTime;
+
+    /** 冬季结束时间 */
+    @ApiModelProperty(value = "冬季结束时间", position = 9)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    private Date winterEndTime;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 10)
+    private Integer status;
+
+    /** 季节类型 */
+    @ApiModelProperty(value = "季节类型", position = 11)
+    private Integer seasonType;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 12)
+    @TableField(fill = FieldFill.INSERT)
+    private String orgId;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/enums/BaseSeasonEnum.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.base.baseSeason.enums;
+
+import lombok.Getter;
+
+/**
+ * 季节枚举
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+public enum BaseSeasonEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BaseSeasonEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/mapper/BaseSeasonMapper.java

@@ -0,0 +1,25 @@
+/*
+ * 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.baseSeason.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.base.baseSeason.entity.BaseSeason;
+
+/**
+ * 季节Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+public interface BaseSeasonMapper extends BaseMapper<BaseSeason> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/mapper/mapping/BaseSeasonMapper.xml

@@ -0,0 +1,5 @@
+<?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.base.baseSeason.mapper.BaseSeasonMapper">
+
+</mapper>

+ 82 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonAddParam.java

@@ -0,0 +1,82 @@
+/*
+ * 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.baseSeason.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 季节添加参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+public class BaseSeasonAddParam {
+
+    /** 春季开始时间 */
+    @ApiModelProperty(value = "春季开始时间", required = true, position = 2)
+    @NotNull(message = "springStartTime不能为空")
+    private Date springStartTime;
+
+    /** 春季结束时间 */
+    @ApiModelProperty(value = "春季结束时间", required = true, position = 3)
+    @NotNull(message = "springEndTime不能为空")
+    private Date springEndTime;
+
+    /** 夏季开始时间 */
+    @ApiModelProperty(value = "夏季开始时间", required = true, position = 4)
+    @NotNull(message = "summerStartTime不能为空")
+    private Date summerStartTime;
+
+    /** 夏季结束时间 */
+    @ApiModelProperty(value = "夏季结束时间", required = true, position = 5)
+    @NotNull(message = "summerEndTime不能为空")
+    private Date summerEndTime;
+
+    /** 秋季开始时间 */
+    @ApiModelProperty(value = "秋季开始时间", required = true, position = 6)
+    @NotNull(message = "autumnStartTime不能为空")
+    private Date autumnStartTime;
+
+    /** 秋季结束时间 */
+    @ApiModelProperty(value = "秋季结束时间", required = true, position = 7)
+    @NotNull(message = "autumnEndTime不能为空")
+    private Date autumnEndTime;
+
+    /** 冬季开始时间 */
+    @ApiModelProperty(value = "冬季开始时间", required = true, position = 8)
+    @NotNull(message = "winterStartTime不能为空")
+    private Date winterStartTime;
+
+    /** 冬季结束时间 */
+    @ApiModelProperty(value = "冬季结束时间", required = true, position = 9)
+    @NotNull(message = "winterEndTime不能为空")
+    private Date winterEndTime;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 10)
+    private Integer status;
+
+    /** 季节类型 */
+    @ApiModelProperty(value = "季节类型", position = 11)
+    private Integer seasonType;
+
+}

+ 96 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonEditParam.java

@@ -0,0 +1,96 @@
+/*
+ * 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.baseSeason.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 季节编辑参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+public class BaseSeasonEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 春季开始时间 */
+    @ApiModelProperty(value = "春季开始时间", required = true, position = 2)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "springStartTime不能为空")
+    private Date springStartTime;
+
+    /** 春季结束时间 */
+    @ApiModelProperty(value = "春季结束时间", required = true, position = 3)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "springEndTime不能为空")
+    private Date springEndTime;
+
+    /** 夏季开始时间 */
+    @ApiModelProperty(value = "夏季开始时间", required = true, position = 4)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "summerStartTime不能为空")
+    private Date summerStartTime;
+
+    /** 夏季结束时间 */
+    @ApiModelProperty(value = "夏季结束时间", required = true, position = 5)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "summerEndTime不能为空")
+    private Date summerEndTime;
+
+    /** 秋季开始时间 */
+    @ApiModelProperty(value = "秋季开始时间", required = true, position = 6)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "autumnStartTime不能为空")
+    private Date autumnStartTime;
+
+    /** 秋季结束时间 */
+    @ApiModelProperty(value = "秋季结束时间", required = true, position = 7)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "autumnEndTime不能为空")
+    private Date autumnEndTime;
+
+    /** 冬季开始时间 */
+    @ApiModelProperty(value = "冬季开始时间", required = true, position = 8)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "winterStartTime不能为空")
+    private Date winterStartTime;
+
+    /** 冬季结束时间 */
+    @ApiModelProperty(value = "冬季结束时间", required = true, position = 9)
+    @JsonFormat(pattern = "MM-dd",timezone = "GMT+8")
+    @NotNull(message = "winterEndTime不能为空")
+    private Date winterEndTime;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 10)
+    private Integer status;
+
+    /** 季节类型 */
+    @ApiModelProperty(value = "季节类型", position = 11)
+    private Integer seasonType;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonIdParam.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.base.baseSeason.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 季节Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+public class BaseSeasonIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 51 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonPageParam.java

@@ -0,0 +1,51 @@
+/*
+ * 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.baseSeason.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 季节查询参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+public class BaseSeasonPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+}

+ 36 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/param/BaseSeasonTypeParam.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.base.baseSeason.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 季节Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Getter
+@Setter
+public class BaseSeasonTypeParam {
+
+    /** seasonType */
+    @ApiModelProperty(value = "seasonType", required = true)
+    @NotBlank(message = "seasonType不能为空")
+    private Integer seasonType;
+}

+ 48 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/service/BaseSeasonService.java

@@ -0,0 +1,48 @@
+/*
+ * 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.baseSeason.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.base.baseSeason.entity.BaseSeason;
+import vip.xiaonuo.modular.base.baseSeason.param.*;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * 季节Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+public interface BaseSeasonService extends IService<BaseSeason> {
+
+    /**
+     * 编辑季节
+     *
+     * @author newspaper
+     * @date  2023/12/18 11:14
+     */
+    void edit(BaseSeasonEditParam baseSeasonEditParam);
+
+    /**
+     * 获取季节详情
+     *
+     * @author newspaper
+     * @date  2023/12/18 11:14
+     **/
+    BaseSeason queryEntity(String id);
+
+    BaseSeason getSeason(BaseSeasonTypeParam baseSeasonTypeParam) throws ParseException;
+}

+ 109 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/baseSeason/service/impl/BaseSeasonServiceImpl.java

@@ -0,0 +1,109 @@
+/*
+ * 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.baseSeason.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.enums.CommonSortOrderEnum;
+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.baseSeason.entity.BaseSeason;
+import vip.xiaonuo.modular.base.baseSeason.mapper.BaseSeasonMapper;
+import vip.xiaonuo.modular.base.baseSeason.param.*;
+import vip.xiaonuo.modular.base.baseSeason.service.BaseSeasonService;
+
+import javax.validation.constraints.NotBlank;
+import java.sql.Date;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.Month;
+import java.time.temporal.TemporalAdjusters;
+import java.util.List;
+
+/**
+ * 季节Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/18 11:14
+ **/
+@Service
+public class BaseSeasonServiceImpl extends ServiceImpl<BaseSeasonMapper, BaseSeason> implements BaseSeasonService {
+    @Override
+    public BaseSeason getSeason(BaseSeasonTypeParam baseSeasonTypeParam) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
+        LocalDate currentDate = LocalDate.now();
+
+        // 获取下一年的二月的最后一天
+        LocalDate nextYearFebruaryLastDay = currentDate
+                .plusYears(1)          // 加一年
+                .withMonth(Month.FEBRUARY.getValue())  // 设置月份为二月
+                .with(TemporalAdjusters.lastDayOfMonth());  // 获取月份的最后一天
+
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        Integer seasonType = baseSeasonTypeParam.getSeasonType();
+        BaseSeason baseSeason = this.getOne(new QueryWrapper<BaseSeason>().lambda().eq(BaseSeason::getOrgId, orgId).eq(BaseSeason::getSeasonType, seasonType));
+        if (ObjectUtil.isEmpty(baseSeason)){
+            baseSeason = new BaseSeason();
+            baseSeason.setOrgId(orgId);
+            baseSeason.setSeasonType(seasonType);
+            baseSeason.setSpringStartTime(sdf.parse("03-01"));
+            baseSeason.setSpringEndTime(sdf.parse("05-31"));
+            baseSeason.setSummerStartTime(sdf.parse("06-01"));
+            baseSeason.setSummerEndTime(sdf.parse("08-31"));
+            baseSeason.setAutumnStartTime(sdf.parse("09-01"));
+            baseSeason.setAutumnEndTime(sdf.parse("11-30"));
+            baseSeason.setWinterStartTime(sdf.parse("12-01"));
+            baseSeason.setWinterEndTime(Date.valueOf(nextYearFebruaryLastDay));
+            this.save(baseSeason);
+        }
+        return baseSeason;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BaseSeasonEditParam baseSeasonEditParam) {
+        BaseSeason baseSeason = this.queryEntity(baseSeasonEditParam.getId());
+        BeanUtil.copyProperties(baseSeasonEditParam, baseSeason);
+        if (baseSeason.getStatus() == 1){
+            this.update(new UpdateWrapper<BaseSeason>().lambda().set(BaseSeason::getStatus,0)
+                    .eq(BaseSeason::getOrgId,baseSeason.getOrgId()).ne(BaseSeason::getId,baseSeason.getId()));
+        }
+        this.updateById(baseSeason);
+
+        CommonDataChangeEventCenter.doUpdateWithData(BaseDataTypeEnum.SEASON.getValue(), JSONUtil.createArray().put(baseSeason));
+    }
+
+    @Override
+    public BaseSeason queryEntity(String id) {
+        BaseSeason baseSeason = this.getById(id);
+        if(ObjectUtil.isEmpty(baseSeason)) {
+            throw new CommonException("季节不存在,id值为:{}", id);
+        }
+        return baseSeason;
+    }
+
+
+}

+ 72 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/inventoryUse/entity/vo/InventoryUseDetailVo.java

@@ -0,0 +1,72 @@
+package vip.xiaonuo.modular.base.inventoryUse.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Getter
+@Setter
+public class InventoryUseDetailVo {
+    /** ID */
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** 物资编号 */
+    @ApiModelProperty(value = "物资编号", position = 2)
+    private String itemCode;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称", position = 3)
+    private String itemName;
+
+    /** 物资类别 */
+    @ApiModelProperty(value = "物资类别", position = 4)
+    private String itemType;
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌", position = 5)
+    private String brand;
+
+    /** 型号规格 */
+    @ApiModelProperty(value = "型号规格", position = 6)
+    private String specification;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位", position = 7)
+    private String unit;
+
+    /** 仓库ID */
+    @ApiModelProperty(value = "仓库ID", position = 8)
+    private String warehouseId;
+
+    /** 领用时间 */
+    @ApiModelProperty(value = "领用时间", position = 9)
+    private Date useTime;
+
+    /** 领用数量 */
+    @ApiModelProperty(value = "领用数量", position = 10)
+    private BigDecimal useQuantity;
+
+    /** 领用部门 */
+    @ApiModelProperty(value = "领用部门", position = 11)
+    private String useDepartmentName;
+
+    /** 领用人 */
+    @ApiModelProperty(value = "领用人", position = 12)
+    private String userName;
+
+    /** 归还时间 */
+    @ApiModelProperty(value = "归还时间", position = 13)
+    private Date returnTime;
+
+    /** 归还图片地址 */
+    @ApiModelProperty(value = "归还图片地址", position = 14)
+    private String returnImgUrl;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 15)
+    private String remarks;
+}

+ 68 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/base/inventoryUse/entity/vo/InventoryUseVo.java

@@ -0,0 +1,68 @@
+package vip.xiaonuo.modular.base.inventoryUse.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Getter
+@Setter
+public class InventoryUseVo {
+    /** ID */
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** 物资编号 */
+    @ApiModelProperty(value = "物资编号", position = 2)
+    private String itemCode;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称", position = 3)
+    private String itemName;
+
+    /** 物资类别 */
+    @ApiModelProperty(value = "物资类别", position = 4)
+    private String itemType;
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌", position = 5)
+    private String brand;
+
+    /** 型号规格 */
+    @ApiModelProperty(value = "型号规格", position = 6)
+    private String specification;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位", position = 7)
+    private String unit;
+
+    /** 仓库ID */
+    @ApiModelProperty(value = "仓库ID", position = 8)
+    private String warehouseId;
+
+    /** 领用时间 */
+    @ApiModelProperty(value = "领用时间", position = 9)
+    private Date useTime;
+
+    /** 领用数量 */
+    @ApiModelProperty(value = "领用数量", position = 10)
+    private BigDecimal useQuantity;
+
+    /** 领用部门 */
+    @ApiModelProperty(value = "领用部门", position = 11)
+    private String useDepartmentName;
+
+    /** 领用人 */
+    @ApiModelProperty(value = "领用人", position = 12)
+    private String userName;
+
+    /** 归还时间 */
+    @ApiModelProperty(value = "归还时间", position = 13)
+    private Date returnTime;
+}

+ 140 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/controller/EnvDeviceController.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.env.envdevice.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+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;
+import io.swagger.annotations.ApiOperation;
+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.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.env.envdevice.entity.EnvDevice;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceAddParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceEditParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceIdParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDevicePageParam;
+import vip.xiaonuo.modular.env.envdevice.service.EnvDeviceService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.Map;
+
+/**
+ * 环控设备控制器
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ */
+@Api(tags = "环控设备控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class EnvDeviceController {
+
+    @Resource
+    private EnvDeviceService envDeviceService;
+
+    /**
+     * 获取环控设备分页
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取环控设备分页")
+    @GetMapping("/env/envdevice/page")
+    public CommonResult<Page<EnvDevice>> page(EnvDevicePageParam envDevicePageParam) {
+        return CommonResult.data(envDeviceService.page(envDevicePageParam));
+    }
+
+    /**
+     * 添加环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加环控设备")
+    @CommonLog("添加环控设备")
+    @PostMapping("/env/envdevice/add")
+    public CommonResult<String> add(@RequestBody @Valid EnvDeviceAddParam envDeviceAddParam) {
+        envDeviceService.add(envDeviceAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑环控设备")
+    @CommonLog("编辑环控设备")
+    @PostMapping("/env/envdevice/edit")
+    public CommonResult<String> edit(@RequestBody @Valid EnvDeviceEditParam envDeviceEditParam) {
+        envDeviceService.edit(envDeviceEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除环控设备")
+    @CommonLog("删除环控设备")
+    @PostMapping("/env/envdevice/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<EnvDeviceIdParam> envDeviceIdParamList) {
+        envDeviceService.delete(envDeviceIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取环控设备详情
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取环控设备详情")
+    @GetMapping("/env/envdevice/detail")
+    public CommonResult<EnvDevice> detail(@Valid EnvDeviceIdParam envDeviceIdParam) {
+        return CommonResult.data(envDeviceService.detail(envDeviceIdParam));
+    }
+
+    /**
+     * 获取环控设备汇总
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取环控设备汇总")
+    @GetMapping("/env/envdevice/deviceCount")
+    public CommonResult<Map> deviceCount() {
+        return CommonResult.data(envDeviceService.deviceCount());
+    }
+}

+ 82 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/entity/EnvDevice.java

@@ -0,0 +1,82 @@
+/*
+ * 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.envdevice.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.common.pojo.CommonEntity;
+import vip.xiaonuo.modular.base.pigpen.entity.BasePigpen;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 环控设备实体
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+@Setter
+@TableName(value = "env_device", autoResultMap = true)
+public class EnvDevice extends CommonEntity implements TransPojo {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", position = 3)
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置 */
+    @ApiModelProperty(value = "安装位置ID", position = 5)
+    @Trans(type = TransType.SIMPLE, target = BasePigpen.class,fields = "fullName", alias = "pigpen", ref = "buildName")
+    private String installPosition;
+
+    /** 风机数量 */
+    @ApiModelProperty(value = "风机数量", position = 6)
+    private Integer fanNum;
+
+    /** 水帘数量 */
+    @ApiModelProperty(value = "水帘数量", position = 7)
+    private Integer curtainNum;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 8)
+    private Integer status;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 9)
+    @TableField(fill = FieldFill.INSERT)
+    private String orgId;
+
+    /** 栋舍名称 */
+    @ApiModelProperty(value = "栋舍名称", position = 10)
+    @TableField(exist = false)
+    private String buildName;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/enums/EnvDeviceEnum.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.envdevice.enums;
+
+import lombok.Getter;
+
+/**
+ * 环控设备枚举
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+public enum EnvDeviceEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    EnvDeviceEnum(String value) {
+        this.value = value;
+    }
+}

+ 32 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/mapper/EnvDeviceMapper.java

@@ -0,0 +1,32 @@
+/*
+ * 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.envdevice.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import vip.xiaonuo.modular.env.envdevice.entity.EnvDevice;
+
+/**
+ * 环控设备Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+public interface EnvDeviceMapper extends BaseMapper<EnvDevice> {
+    Page<EnvDevice> page(Page<Object> defaultPage,@Param(Constants.WRAPPER) QueryWrapper<EnvDevice> queryWrapper);
+
+    EnvDevice detail(String id);
+}

+ 15 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/mapper/mapping/EnvDeviceMapper.xml

@@ -0,0 +1,15 @@
+<?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.envdevice.mapper.EnvDeviceMapper">
+
+    <select id="page" resultType="vip.xiaonuo.modular.env.envdevice.entity.EnvDevice">
+        SELECT d.id,d.device_code,d.device_type,d.device_name,p.build_name AS installPosition,d.status
+        FROM `env_device` d LEFT JOIN `base_pigpen` p ON d.install_position = p.id
+        ${ew.customSqlSegment}
+    </select>
+    <select id="detail" resultType="vip.xiaonuo.modular.env.envdevice.entity.EnvDevice">
+        SELECT d.id,d.device_code,d.device_type,d.device_name,p.build_name AS installPosition,d.status
+        FROM `env_device` d LEFT JOIN `base_pigpen` p ON d.install_position = p.id
+        WHERE d.id = #{id}
+    </select>
+</mapper>

+ 64 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceAddParam.java

@@ -0,0 +1,64 @@
+/*
+ * 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.envdevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 环控设备添加参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+@Setter
+public class EnvDeviceAddParam {
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", required = true, position = 2)
+    @NotBlank(message = "deviceCode不能为空")
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", required = true, position = 3)
+    @NotBlank(message = "deviceType不能为空")
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", required = true, position = 4)
+    @NotBlank(message = "deviceName不能为空")
+    private String deviceName;
+
+    /** 安装位置ID */
+    @ApiModelProperty(value = "安装位置ID", required = true, position = 5)
+    @NotBlank(message = "installPosition不能为空")
+    private String installPosition;
+
+    /** 风机数量 */
+    @ApiModelProperty(value = "风机数量", required = true, position = 6)
+    @NotNull(message = "fanNum不能为空")
+    private Integer fanNum;
+
+    /** 水帘数量 */
+    @ApiModelProperty(value = "水帘数量", required = true, position = 7)
+    @NotNull(message = "curtainNum不能为空")
+    private Integer curtainNum;
+
+}

+ 69 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceEditParam.java

@@ -0,0 +1,69 @@
+/*
+ * 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.envdevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 环控设备编辑参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+@Setter
+public class EnvDeviceEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", required = true, position = 2)
+    @NotBlank(message = "deviceCode不能为空")
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", required = true, position = 3)
+    @NotBlank(message = "deviceType不能为空")
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", required = true, position = 4)
+    @NotBlank(message = "deviceName不能为空")
+    private String deviceName;
+
+    /** 安装位置 */
+    @ApiModelProperty(value = "安装位置", required = true, position = 5)
+    @NotBlank(message = "installPosition不能为空")
+    private String installPosition;
+
+    /** 风机数量 */
+    @ApiModelProperty(value = "风机数量", required = true, position = 6)
+    @NotNull(message = "fanNum不能为空")
+    private Integer fanNum;
+
+    /** 水帘数量 */
+    @ApiModelProperty(value = "水帘数量", required = true, position = 7)
+    @NotNull(message = "curtainNum不能为空")
+    private Integer curtainNum;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDeviceIdParam.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.envdevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 环控设备Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+@Setter
+public class EnvDeviceIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 59 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/param/EnvDevicePageParam.java

@@ -0,0 +1,59 @@
+/*
+ * 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.envdevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 环控设备查询参数
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Getter
+@Setter
+public class EnvDevicePageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型")
+    private String deviceType;
+
+    /** 安装位置 */
+    @ApiModelProperty(value = "安装位置")
+    private String installPosition;
+
+}

+ 83 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/service/EnvDeviceService.java

@@ -0,0 +1,83 @@
+/*
+ * 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.envdevice.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.env.envdevice.entity.EnvDevice;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceAddParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceEditParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceIdParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDevicePageParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 环控设备Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+public interface EnvDeviceService extends IService<EnvDevice> {
+
+    /**
+     * 获取环控设备分页
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    Page<EnvDevice> page(EnvDevicePageParam envDevicePageParam);
+
+    /**
+     * 添加环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    void add(EnvDeviceAddParam envDeviceAddParam);
+
+    /**
+     * 编辑环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    void edit(EnvDeviceEditParam envDeviceEditParam);
+
+    /**
+     * 删除环控设备
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    void delete(List<EnvDeviceIdParam> envDeviceIdParamList);
+
+    /**
+     * 获取环控设备详情
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     */
+    EnvDevice detail(EnvDeviceIdParam envDeviceIdParam);
+
+    /**
+     * 获取环控设备详情
+     *
+     * @author newspaper
+     * @date  2023/12/18 09:58
+     **/
+    EnvDevice queryEntity(String id);
+
+    Map deviceCount();
+}

+ 159 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/env/envdevice/service/impl/EnvDeviceServiceImpl.java

@@ -0,0 +1,159 @@
+/*
+ * 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.envdevice.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+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.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.core.enums.EnvDataTypeEnum;
+import vip.xiaonuo.modular.env.envdevice.entity.EnvDevice;
+import vip.xiaonuo.modular.env.envdevice.mapper.EnvDeviceMapper;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceAddParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceEditParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDeviceIdParam;
+import vip.xiaonuo.modular.env.envdevice.param.EnvDevicePageParam;
+import vip.xiaonuo.modular.env.envdevice.service.EnvDeviceService;
+
+import javax.validation.constraints.NotBlank;
+import java.text.NumberFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 环控设备Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/18 09:58
+ **/
+@Service
+public class EnvDeviceServiceImpl extends ServiceImpl<EnvDeviceMapper, EnvDevice> implements EnvDeviceService {
+
+    @Autowired
+    private EnvDeviceMapper envDeviceMapper;
+
+//    @Override
+//    public Page<EnvDevice> page(EnvDevicePageParam envDevicePageParam) {
+//        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+//        QueryWrapper<EnvDevice> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("d.org_id",orgId).orderByAsc("d.id");
+//        if(ObjectUtil.isNotEmpty(envDevicePageParam.getDeviceType())) {
+//            queryWrapper.eq("d.device_type", envDevicePageParam.getDeviceType());
+//        }
+//        if(ObjectUtil.isNotEmpty(envDevicePageParam.getInstallPosition())) {
+//            queryWrapper.eq("d.install_position", envDevicePageParam.getInstallPosition());
+//        }
+//        return envDeviceMapper.page(CommonPageRequest.defaultPage(), queryWrapper);
+//
+//
+//    }
+
+    @Override
+    public Page<EnvDevice> page(EnvDevicePageParam envDevicePageParam) {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        QueryWrapper<EnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id",orgId).orderByAsc("id");
+        if(ObjectUtil.isNotEmpty(envDevicePageParam.getDeviceType())) {
+            queryWrapper.eq("device_type", envDevicePageParam.getDeviceType());
+        }
+        if(ObjectUtil.isNotEmpty(envDevicePageParam.getInstallPosition())) {
+            queryWrapper.eq("install_position", envDevicePageParam.getInstallPosition());
+        }
+        return  this.page(CommonPageRequest.defaultPage(), queryWrapper);
+
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(EnvDeviceAddParam envDeviceAddParam) {
+        EnvDevice envDevice = BeanUtil.toBean(envDeviceAddParam, EnvDevice.class);
+        this.save(envDevice);
+
+        CommonDataChangeEventCenter.doAddWithData(EnvDataTypeEnum.DEVICE.getValue(), JSONUtil.createArray().put(envDevice));
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(EnvDeviceEditParam envDeviceEditParam) {
+        EnvDevice envDevice = this.queryEntity(envDeviceEditParam.getId());
+        BeanUtil.copyProperties(envDeviceEditParam, envDevice);
+        this.updateById(envDevice);
+
+        CommonDataChangeEventCenter.doUpdateWithData(EnvDataTypeEnum.DEVICE.getValue(), JSONUtil.createArray().put(envDevice));
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<EnvDeviceIdParam> envDeviceIdParamList) {
+        List<String> toDeleteDeviceIdList = CollStreamUtil.toList(envDeviceIdParamList, EnvDeviceIdParam::getId);
+        // 执行删除
+        this.removeByIds(toDeleteDeviceIdList);
+
+        CommonDataChangeEventCenter.doDeleteWithDataId(EnvDataTypeEnum.DEVICE.getValue(), toDeleteDeviceIdList);
+    }
+
+    @Override
+    public EnvDevice detail(EnvDeviceIdParam envDeviceIdParam) {
+        return envDeviceMapper.detail(envDeviceIdParam.getId());
+    }
+
+    @Override
+    public EnvDevice queryEntity(String id) {
+        EnvDevice envDevice = this.getById(id);
+        if(ObjectUtil.isEmpty(envDevice)) {
+            throw new CommonException("环控设备不存在,id值为:{}", id);
+        }
+        return envDevice;
+    }
+
+    @Override
+    public Map deviceCount() {
+        Map resultMap = new HashMap();
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+//        .eq(EnvDevice::getDeleteFlag,"NOT_DELETE")
+        long deviceNum = this.count(new QueryWrapper<EnvDevice>().lambda().eq(EnvDevice::getOrgId, orgId));
+        if (deviceNum == 0){
+            resultMap.put("deviceNum",0);
+            resultMap.put("onDeviceNum",0);
+            resultMap.put("offDeviceNum",0);
+            resultMap.put("onlineRate",0);
+        }else {
+            resultMap.put("deviceNum",deviceNum);
+            long onDeviceNum = this.count(new QueryWrapper<EnvDevice>().lambda().eq(EnvDevice::getStatus,"1").eq(EnvDevice::getOrgId, orgId));
+            resultMap.put("onDeviceNum",onDeviceNum);
+            long offDeviceNum = this.count(new QueryWrapper<EnvDevice>().lambda().eq(EnvDevice::getStatus,"1").eq(EnvDevice::getOrgId, orgId));
+            resultMap.put("offDeviceNum",offDeviceNum);
+            //创建一个数值格式化对象
+            NumberFormat numberFormat = NumberFormat.getInstance();
+            //设置精确到小数点后两位
+            numberFormat.setMaximumFractionDigits(2);
+            String onlineRate = numberFormat.format((float)onDeviceNum / (float) deviceNum* 100) + "%";
+            resultMap.put("onlineRate",onlineRate);
+        }
+        return resultMap;
+    }
+}