Jelajahi Sumber

精准饲喂2

wwh 1 tahun lalu
induk
melakukan
1d16989ae9
37 mengubah file dengan 2318 tambahan dan 0 penghapusan
  1. 127 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/controller/FeedingEnvController.java
  2. 69 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/entity/FeedingEnv.java
  3. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/enums/FeedingEnvEnum.java
  4. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/mapper/FeedingEnvMapper.java
  5. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/mapper/mapping/FeedingEnvMapper.xml
  6. 66 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvAddParam.java
  7. 71 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvEditParam.java
  8. 36 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvIdParam.java
  9. 55 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvPageParam.java
  10. 88 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/service/FeedingEnvService.java
  11. 151 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/service/impl/FeedingEnvServiceImpl.java
  12. 101 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/controller/FeedingFatController.java
  13. 86 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/entity/FeedingFat.java
  14. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/enums/FeedingFatEnum.java
  15. 43 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/mapper/FeedingFatMapper.java
  16. 62 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/mapper/mapping/FeedingFatMapper.xml
  17. 77 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatAddParam.java
  18. 75 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatEditParam.java
  19. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatIdParam.java
  20. 51 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatPageParam.java
  21. 42 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/service/FeedingFatService.java
  22. 239 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/service/impl/FeedingFatServiceImpl.java
  23. 28 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/vo/FeedingFatVo.java
  24. 14 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/vo/FeedingFatVo2.java
  25. 114 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/controller/FeedingListController.java
  26. 66 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/entity/FeedingList.java
  27. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/enums/FeedingListEnum.java
  28. 36 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/mapper/FeedingListMapper.java
  29. 21 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/mapper/mapping/FeedingListMapper.xml
  30. 58 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListAddParam.java
  31. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListEditParam.java
  32. 36 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListIdParam.java
  33. 55 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListPageParam.java
  34. 66 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/service/FeedingListService.java
  35. 128 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/service/impl/FeedingListServiceImpl.java
  36. 10 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/vo/FeedingListVo.java
  37. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/vo/FeedingListVo2.java

+ 127 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/controller/FeedingEnvController.java

@@ -0,0 +1,127 @@
+/*
+ * 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.feed.feedingenv.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.fastjson.JSONObject;
+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.feed.feedingenv.entity.FeedingEnv;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvAddParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvEditParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvIdParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvPageParam;
+import vip.xiaonuo.modular.feed.feedingenv.service.FeedingEnvService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.Map;
+
+/**
+ * 精准饲喂设备控制器
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ */
+@Api(tags = "精准饲喂设备控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class FeedingEnvController {
+
+    @Resource
+    private FeedingEnvService feedingEnvService;
+
+    /**
+     * 获取精准饲喂设备分页
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取精准饲喂设备分页")
+    @GetMapping("/feed/feedingenv/page")
+    public CommonResult<Page<FeedingEnv>> page(FeedingEnvPageParam feedingEnvPageParam) {
+        return CommonResult.data(feedingEnvService.page(feedingEnvPageParam));
+    }
+
+    /**
+     * 添加精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加精准饲喂设备")
+    @CommonLog("添加精准饲喂设备")
+    @PostMapping("/feed/feedingenv/add")
+    public CommonResult<String> add(@RequestBody @Valid FeedingEnvAddParam feedingEnvAddParam) {
+        return feedingEnvService.add(feedingEnvAddParam);
+    }
+
+    /**
+     * 编辑精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑精准饲喂设备")
+    @CommonLog("编辑精准饲喂设备")
+    @PostMapping("/feed/feedingenv/edit")
+    public CommonResult<String> edit(@RequestBody @Valid FeedingEnvEditParam feedingEnvEditParam) {
+        return feedingEnvService.edit(feedingEnvEditParam);
+    }
+
+    /**
+     * 删除精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除精准饲喂设备")
+    @CommonLog("删除精准饲喂设备")
+    @PostMapping("/feed/feedingenv/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                               CommonValidList<FeedingEnvIdParam> feedingEnvIdParamList) {
+        feedingEnvService.delete(feedingEnvIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 设备汇总
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("设备汇总")
+    @CommonLog("设备汇总")
+    @PostMapping("/feed/feedingenv/listEnv")
+    public CommonResult<JSONObject> listEnv(@RequestBody String orgId) {
+        return CommonResult.data(feedingEnvService.listEnv(orgId));
+    }
+}

+ 69 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/entity/FeedingEnv.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.feed.feedingenv.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 wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+@Setter
+@TableName("feeding_env")
+public class FeedingEnv {
+
+    /** ID */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "ID", position = 1)
+    private Integer id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", position = 3)
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String unitId;
+
+    /** 安装位置名称 */
+    @ApiModelProperty(value = "安装位置名称", position = 6)
+    private String unitName;
+
+    /** 关联母猪耳标号 */
+    @ApiModelProperty(value = "关联母猪耳标号", position = 7)
+    private String eartagNum;
+
+    /** 设备状态 0为在线 1为离线 */
+    @ApiModelProperty(value = "设备状态 0为在线 1为离线", position = 8)
+    private Integer deviceStatus;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/enums/FeedingEnvEnum.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.feed.feedingenv.enums;
+
+import lombok.Getter;
+
+/**
+ * 精准饲喂设备枚举
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+public enum FeedingEnvEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    FeedingEnvEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/mapper/FeedingEnvMapper.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.feed.feedingenv.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.feed.feedingenv.entity.FeedingEnv;
+
+/**
+ * 精准饲喂设备Mapper接口
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ **/
+public interface FeedingEnvMapper extends BaseMapper<FeedingEnv> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/mapper/mapping/FeedingEnvMapper.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.feed.feedingenv.mapper.FeedingEnvMapper">
+
+</mapper>

+ 66 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvAddParam.java

@@ -0,0 +1,66 @@
+/*
+ * 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.feed.feedingenv.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 wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+@Setter
+public class FeedingEnvAddParam {
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", position = 3)
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String unitId;
+
+    /** 安装位置名称 */
+    @ApiModelProperty(value = "安装位置名称", position = 6)
+    private String unitName;
+
+    /** 关联母猪耳标号 */
+    @ApiModelProperty(value = "关联母猪耳标号", position = 7)
+    private String eartagNum;
+
+    /** 设备状态 0为在线 1为离线 */
+    @ApiModelProperty(value = "设备状态 0为离线 1为在线", position = 8)
+    private Integer deviceStatus;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+
+}

+ 71 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvEditParam.java

@@ -0,0 +1,71 @@
+/*
+ * 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.feed.feedingenv.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 wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+@Setter
+public class FeedingEnvEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型 */
+    @ApiModelProperty(value = "设备类型", position = 3)
+    private String deviceType;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String unitId;
+
+    /** 安装位置名称 */
+    @ApiModelProperty(value = "安装位置名称", position = 6)
+    private String unitName;
+
+    /** 关联母猪耳标号 */
+    @ApiModelProperty(value = "关联母猪耳标号", position = 7)
+    private String eartagNum;
+
+    /** 设备状态 0为在线 1为离线 */
+    @ApiModelProperty(value = "设备状态 0为在线 1为离线", position = 8)
+    private Integer deviceStatus;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+
+}

+ 36 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvIdParam.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.feed.feedingenv.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 精准饲喂设备Id参数
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+@Setter
+public class FeedingEnvIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
+    @NotNull(message = "id不能为空")
+    private Integer id;
+}

+ 55 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/param/FeedingEnvPageParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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.feed.feedingenv.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 精准饲喂设备查询参数
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ **/
+@Getter
+@Setter
+public class FeedingEnvPageParam {
+
+    /** 当前页 */
+    @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;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id")
+    private String unitId;
+
+}

+ 88 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/service/FeedingEnvService.java

@@ -0,0 +1,88 @@
+/*
+ * 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.feed.feedingenv.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.modular.feed.feedingenv.entity.FeedingEnv;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvAddParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvEditParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvIdParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvPageParam;
+
+import java.util.List;
+
+/**
+ * 精准饲喂设备Service接口
+ *
+ * @author wang
+ * @date  2023/12/28 11:26
+ **/
+public interface FeedingEnvService extends IService<FeedingEnv> {
+
+    /**
+     * 获取精准饲喂设备分页
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    Page<FeedingEnv> page(FeedingEnvPageParam feedingEnvPageParam);
+
+    /**
+     * 添加精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    CommonResult add(FeedingEnvAddParam feedingEnvAddParam);
+
+    /**
+     * 编辑精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    CommonResult edit(FeedingEnvEditParam feedingEnvEditParam);
+
+    /**
+     * 删除精准饲喂设备
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    void delete(List<FeedingEnvIdParam> feedingEnvIdParamList);
+
+    /**
+     * 获取精准饲喂设备详情
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     */
+    FeedingEnv detail(FeedingEnvIdParam feedingEnvIdParam);
+
+    /**
+     * 获取精准饲喂设备详情
+     *
+     * @author wang
+     * @date  2023/12/28 11:26
+     **/
+    FeedingEnv queryEntity(String id);
+
+    /*
+     * 设备汇总
+     *
+     * */
+    JSONObject listEnv(String orgId);
+}

+ 151 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingenv/service/impl/FeedingEnvServiceImpl.java

@@ -0,0 +1,151 @@
+/*
+ * 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.feed.feedingenv.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 com.alibaba.fastjson.JSONObject;
+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.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.modular.feed.feedingenv.entity.FeedingEnv;
+import vip.xiaonuo.modular.feed.feedingenv.mapper.FeedingEnvMapper;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvAddParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvEditParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvIdParam;
+import vip.xiaonuo.modular.feed.feedingenv.param.FeedingEnvPageParam;
+import vip.xiaonuo.modular.feed.feedingenv.service.FeedingEnvService;
+
+import java.text.DecimalFormat;
+import java.util.List;
+
+/**
+ * 精准饲喂设备Service接口实现类
+ *
+ * @author wang
+ * @date 2023/12/28 11:26
+ **/
+@Service
+public class FeedingEnvServiceImpl extends ServiceImpl<FeedingEnvMapper, FeedingEnv> implements FeedingEnvService {
+
+    @Autowired
+    private FeedingEnvMapper envMapper;
+
+    @Override
+    public Page<FeedingEnv> page(FeedingEnvPageParam feedingEnvPageParam) {
+        QueryWrapper<FeedingEnv> queryWrapper = new QueryWrapper<>();
+        if (ObjectUtil.isNotEmpty(feedingEnvPageParam.getUnitId())) {
+            queryWrapper.lambda().eq(FeedingEnv::getUnitId, feedingEnvPageParam.getUnitId());
+        }
+        if (ObjectUtil.isAllNotEmpty(feedingEnvPageParam.getSortField(), feedingEnvPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(feedingEnvPageParam.getSortOrder());
+            queryWrapper.orderBy(true, feedingEnvPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(feedingEnvPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(FeedingEnv::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult add(FeedingEnvAddParam feedingEnvAddParam) {
+        FeedingEnv feedingEnv = BeanUtil.toBean(feedingEnvAddParam, FeedingEnv.class);
+        QueryWrapper<FeedingEnv> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", feedingEnv.getOrgId())
+                .eq("device_code", feedingEnv.getDeviceCode())
+                .or().eq("unit_id", feedingEnv.getUnitId());
+        if (ObjectUtil.isNotEmpty(envMapper.selectOne(queryWrapper))) {
+            return new CommonResult(500, "编号重复或者栋舍已被绑定", false);
+        } else {
+            this.save(feedingEnv);
+            return CommonResult.ok();
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult edit(FeedingEnvEditParam feedingEnvEditParam) {
+        if (this.count(new QueryWrapper<FeedingEnv>().lambda().eq(FeedingEnv::getOrgId, feedingEnvEditParam.getOrgId())
+                .eq(FeedingEnv::getUnitId, feedingEnvEditParam.getUnitId())) > 0) {
+            return new CommonResult(500, "栋舍已被绑定", false);
+        }
+        if (this.count(new QueryWrapper<FeedingEnv>().lambda().eq(FeedingEnv::getOrgId, feedingEnvEditParam.getOrgId())
+                .eq(FeedingEnv::getDeviceCode, feedingEnvEditParam.getDeviceCode())) > 0) {
+            return new CommonResult(500, "设备编号已存在!", false);
+        }
+        FeedingEnv feedingEnv = this.queryEntity(feedingEnvEditParam.getId().toString());
+        BeanUtil.copyProperties(feedingEnvEditParam, feedingEnv);
+        this.updateById(feedingEnv);
+        return CommonResult.ok();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<FeedingEnvIdParam> feedingEnvIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(feedingEnvIdParamList, FeedingEnvIdParam::getId));
+    }
+
+    @Override
+    public FeedingEnv detail(FeedingEnvIdParam feedingEnvIdParam) {
+        return this.queryEntity(feedingEnvIdParam.getId().toString());
+    }
+
+    @Override
+    public FeedingEnv queryEntity(String id) {
+        FeedingEnv feedingEnv = this.getById(id);
+        if (ObjectUtil.isEmpty(feedingEnv)) {
+            throw new CommonException("精准饲喂设备不存在,id值为:{}", id);
+        }
+        return feedingEnv;
+    }
+
+    @Override
+    public JSONObject listEnv(String orgId) {
+        QueryWrapper<FeedingEnv> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId);
+        List<FeedingEnv> envs = envMapper.selectList(queryWrapper);
+        Integer onliveCount = 0;
+        Integer offliveCount = 0;
+        for (FeedingEnv env : envs) {
+            if (env.getDeviceStatus() == 0) {
+                //在线
+                onliveCount = onliveCount + 1;
+            }
+            if (env.getDeviceStatus() == 1) {
+                //离线
+                offliveCount = offliveCount + 1;
+            }
+        }
+        double v = Double.parseDouble(onliveCount.toString());
+        double rank = v / Double.parseDouble(String.valueOf(envs.size()));
+        DecimalFormat dft = new DecimalFormat("0.00");
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("envCount", envs.size());
+        jsonObject.put("onliveCount", onliveCount);
+        jsonObject.put("offliveCount", offliveCount);
+        jsonObject.put("rank", dft.format(rank));
+        return jsonObject;
+    }
+}

+ 101 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/controller/FeedingFatController.java

@@ -0,0 +1,101 @@
+/*
+ * 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.feed.feedingfat.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.feed.feedingfat.entity.FeedingFat;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatAddParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatEditParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatIdParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatPageParam;
+import vip.xiaonuo.modular.feed.feedingfat.service.FeedingFatService;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 精准饲喂母猪采食控制器
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ */
+@Api(tags = "精准饲喂母猪采食控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class FeedingFatController {
+
+    @Resource
+    private FeedingFatService feedingFatService;
+
+    /**
+     * 肥猪采食
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("肥猪采食")
+    @GetMapping("/feed/feedinglist/listFat")
+    public CommonResult<FeedingFatVo> listFat(@RequestBody Map<String,String> paramsMap) {
+        return CommonResult.data(feedingFatService.listFat(paramsMap));
+    }
+
+    /**
+     * 肥猪采食
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("获取料塔曲线")
+    @GetMapping("/feed/feedinglist/fatPage")
+    public CommonResult<IPage<FeedingFatVo>> fatPage(@RequestBody Map<String,String> paramsMap) {
+        return CommonResult.data(feedingFatService.fatPage(paramsMap));
+    }
+
+
+    /**
+     * 采食曲线
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("采食曲线")
+    @GetMapping("/feed/feedinglist/listDetail")
+    public CommonResult<List<FeedingFatVo2>> listDetail(@RequestBody Map<String,String> paramsMap) {
+        return CommonResult.data(feedingFatService.listDetail(paramsMap));
+    }
+
+}

+ 86 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/entity/FeedingFat.java

@@ -0,0 +1,86 @@
+/*
+ * 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.feed.feedingfat.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 wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+@Setter
+@TableName("feeding_fat")
+public class FeedingFat {
+
+    /** ID */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "ID", position = 1)
+    private Integer id;
+
+    /** 栋舍id */
+    @ApiModelProperty(value = "栋舍id", position = 2)
+    private String unitId;
+
+    /** 栋舍名称 */
+    @ApiModelProperty(value = "栋舍名称", position = 3)
+    private String unitName;
+
+    /** 母猪耳标号 */
+    @ApiModelProperty(value = "母猪耳标号", position = 4)
+    private String eartagNum;
+
+    /** 饮水量 */
+    @ApiModelProperty(value = "饮水量", position = 5)
+    private String waterValue;
+
+    /** 采食量 */
+    @ApiModelProperty(value = "采食量", position = 6)
+    private String feedValue;
+
+    /** 体重 */
+    @ApiModelProperty(value = "体重", position = 7)
+    private String weigthValue;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 9)
+    private Date uploadTime;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 10)
+    private String deviceCode;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 11)
+    private String orgId;
+
+    /** 运动量 */
+    @ApiModelProperty(value = "运动量", position = 12)
+    private String feedAct;
+
+    /** 体温 */
+    @ApiModelProperty(value = "体温", position = 13)
+    private String temp;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/enums/FeedingFatEnum.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.feed.modular.feedingfat.enums;
+
+import lombok.Getter;
+
+/**
+ * 精准饲喂母猪采食枚举
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+public enum FeedingFatEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    FeedingFatEnum(String value) {
+        this.value = value;
+    }
+}

+ 43 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/mapper/FeedingFatMapper.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.feed.feedingfat.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.data.repository.query.Param;
+import vip.xiaonuo.modular.feed.feedingfat.entity.FeedingFat;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2;
+
+import java.util.List;
+
+/**
+ * 精准饲喂母猪采食Mapper接口
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+public interface FeedingFatMapper extends BaseMapper<FeedingFat> {
+
+    FeedingFatVo getFeed(@Param("unitId") List<String> unitId, @Param("orgId") String orgId);
+
+    IPage<FeedingFatVo> listPage(Page<FeedingFat> page, @Param(Constants.WRAPPER) QueryWrapper<FeedingFat> queryWrapper);
+
+    List<FeedingFatVo2> listFeedDetail(@Param(Constants.WRAPPER) QueryWrapper<FeedingFat> queryWrapper);
+    List<FeedingFatVo2> listTempDetail(@Param(Constants.WRAPPER) QueryWrapper<FeedingFat> queryWrapper);
+    List<FeedingFatVo2> listActDetail(@Param(Constants.WRAPPER) QueryWrapper<FeedingFat> queryWrapper);
+    List<FeedingFatVo2> listWeightDetail(@Param(Constants.WRAPPER) QueryWrapper<FeedingFat> queryWrapper);
+}

+ 62 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/mapper/mapping/FeedingFatMapper.xml

@@ -0,0 +1,62 @@
+<?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.feed.feedingfat.mapper.FeedingFatMapper">
+
+<select id="getFeed" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo">
+    select
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN feed_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS todayFeed,
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN water_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS todayWater,
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN weigth_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS dayWeight,
+ -- 昨日用量
+    CONVERT(IFNULL(SUM(CASE WHEN create_time=DATE_SUB(CURDATE(),INTERVAL 1 DAY) THEN water_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS yesterdayWater,
+    CONVERT(IFNULL(SUM(CASE WHEN create_time=DATE_SUB(CURDATE(),INTERVAL 1 DAY) THEN feed_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS yesterdayFeed
+    FROM `feeding_fat` WHERE unit_id in ${unitId} AND org_id =${orgId}
+</select>
+
+    <select id="listPage" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo">
+    select
+    create_time createDate,eartag_num eartagNum,device_code deviceCode,
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN feed_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS todayFeed,
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN water_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS todayWater,
+    CONVERT(IFNULL(SUM(CASE WHEN  DATE(create_date) =CURRENT_DATE THEN weigth_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS dayWeight,
+ -- 昨日用量
+    CONVERT(IFNULL(SUM(CASE WHEN create_time=DATE_SUB(CURDATE(),INTERVAL 1 DAY) THEN water_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS yesterdayWater,
+    CONVERT(IFNULL(SUM(CASE WHEN create_time=DATE_SUB(CURDATE(),INTERVAL 1 DAY) THEN feed_value ELSE 0 END), '0'), DECIMAL(10, 2)) AS yesterdayFeed
+    FROM `feeding_fat`
+    ${ew.customSqlSegment}
+    group by eartag_num
+    </select>
+
+    <select id="listFeedDetail" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2">
+        select create_time 'createTime',
+        CONVERT(IFNULL(SUM(feed_value), '0'), DECIMAL(10, 2)) 'value'
+        FROM feeding_fat
+        ${ew.customSqlSegment}
+        group BY DATE_FORMAT(create_time,'%Y-%m-%d')
+        ORDER BY create_time ASC
+    </select>
+    <select id="listTempDetail" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2">
+        select create_time 'createTime',
+        CONVERT(IFNULL(SUM(temp), '0'), DECIMAL(10, 2)) 'value'
+        FROM feeding_fat
+        ${ew.customSqlSegment}
+        group BY DATE_FORMAT(create_time,'%Y-%m-%d')
+        ORDER BY create_time ASC
+    </select>
+    <select id="listActDetail" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2">
+        select create_time 'createTime',
+        CONVERT(IFNULL(SUM(feed_act), '0'), DECIMAL(10, 2)) 'value'
+        FROM feeding_fat
+        ${ew.customSqlSegment}
+        group BY DATE_FORMAT(create_time,'%Y-%m-%d')
+        ORDER BY create_time ASC
+    </select>
+    <select id="listWeightDetail" resultType="vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2">
+        select create_time 'createTime',
+        CONVERT(IFNULL(SUM(weigth_value), '0'), DECIMAL(10, 2)) 'value'
+        FROM feeding_fat
+        ${ew.customSqlSegment}
+        group BY DATE_FORMAT(create_time,'%Y-%m-%d')
+        ORDER BY create_time ASC
+    </select>
+</mapper>

+ 77 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatAddParam.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.feed.feedingfat.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 wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+@Setter
+public class FeedingFatAddParam {
+
+    /** 栋舍id */
+    @ApiModelProperty(value = "栋舍id", position = 2)
+    private String unitId;
+
+    /** 栋舍名称 */
+    @ApiModelProperty(value = "栋舍名称", position = 3)
+    private String unitName;
+
+    /** 母猪耳标号 */
+    @ApiModelProperty(value = "母猪耳标号", position = 4)
+    private String eartagNum;
+
+    /** 饮水量 */
+    @ApiModelProperty(value = "饮水量", position = 5)
+    private String waterValue;
+
+    /** 采食量 */
+    @ApiModelProperty(value = "采食量", position = 6)
+    private String feedValue;
+
+    /** 体重 */
+    @ApiModelProperty(value = "体重", position = 7)
+    private String weigthValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 9)
+    private Date uploadTime;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 10)
+    private String deviceCode;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 11)
+    private String orgId;
+
+    /** 运动量 */
+    @ApiModelProperty(value = "运动量", position = 12)
+    private String feedAct;
+
+    /** 体温 */
+    @ApiModelProperty(value = "体温", position = 13)
+    private String temp;
+}

+ 75 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatEditParam.java

@@ -0,0 +1,75 @@
+/*
+ * 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.feed.feedingfat.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 wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+@Setter
+public class FeedingFatEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    /** 栋舍id */
+    @ApiModelProperty(value = "栋舍id", position = 2)
+    private String unitId;
+
+    /** 栋舍名称 */
+    @ApiModelProperty(value = "栋舍名称", position = 3)
+    private String unitName;
+
+    /** 母猪耳标号 */
+    @ApiModelProperty(value = "母猪耳标号", position = 4)
+    private String eartagNum;
+
+    /** 饮水量 */
+    @ApiModelProperty(value = "饮水量", position = 5)
+    private String waterValue;
+
+    /** 采食量 */
+    @ApiModelProperty(value = "采食量", position = 6)
+    private String feedValue;
+
+    /** 体重 */
+    @ApiModelProperty(value = "体重", position = 7)
+    private String weigthValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 9)
+    private Date uploadTime;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 10)
+    private String deviceCode;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 11)
+    private String orgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatIdParam.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.feed.feedingfat.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 精准饲喂母猪采食Id参数
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+@Setter
+public class FeedingFatIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
+    @NotBlank(message = "id不能为空")
+    private Integer id;
+}

+ 51 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/param/FeedingFatPageParam.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.feed.feedingfat.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 精准饲喂母猪采食查询参数
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+@Getter
+@Setter
+public class FeedingFatPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 42 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/service/FeedingFatService.java

@@ -0,0 +1,42 @@
+/*
+ * 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.feed.feedingfat.service;
+
+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.feed.feedingfat.entity.FeedingFat;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatAddParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatEditParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatIdParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatPageParam;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 精准饲喂母猪采食Service接口
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+public interface FeedingFatService extends IService<FeedingFat> {
+
+    FeedingFatVo listFat(Map<String,String> paramsMap);
+
+    IPage<FeedingFatVo> fatPage(Map<String,String> paramsMap);
+
+    List<FeedingFatVo2> listDetail(Map<String,String> paramsMap);
+}

+ 239 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/service/impl/FeedingFatServiceImpl.java

@@ -0,0 +1,239 @@
+/*
+ * 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.feed.feedingfat.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.modular.base.pigpen.entity.BasePigpen;
+import vip.xiaonuo.modular.base.pigpen.mapper.BasePigpenMapper;
+import vip.xiaonuo.modular.bi.utils.DataUill;
+import vip.xiaonuo.modular.feed.feedingenv.entity.FeedingEnv;
+import vip.xiaonuo.modular.feed.feedingenv.mapper.FeedingEnvMapper;
+import vip.xiaonuo.modular.feed.feedingfat.entity.FeedingFat;
+import vip.xiaonuo.modular.feed.feedingfat.mapper.FeedingFatMapper;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatAddParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatEditParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatIdParam;
+import vip.xiaonuo.modular.feed.feedingfat.param.FeedingFatPageParam;
+import vip.xiaonuo.modular.feed.feedingfat.service.FeedingFatService;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo;
+import vip.xiaonuo.modular.feed.feedingfat.vo.FeedingFatVo2;
+import vip.xiaonuo.modular.feed.feedinglist.entity.FeedingList;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 精准饲喂母猪采食Service接口实现类
+ *
+ * @author wang
+ * @date  2023/12/28 09:22
+ **/
+@Service
+public class FeedingFatServiceImpl extends ServiceImpl<FeedingFatMapper, FeedingFat> implements FeedingFatService {
+    @Autowired
+    private FeedingFatMapper fatMapper;
+    @Autowired
+    private FeedingEnvMapper envMapper;
+    @Autowired
+    private BasePigpenMapper pigpenMapper;
+
+
+    @Override
+    public FeedingFatVo listFat(Map<String, String> paramsMap) {
+        String orgId = paramsMap.get("orgId");
+        String unitId = paramsMap.get("unitId");
+        QueryWrapper<BasePigpen> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId).like("pids", unitId).ne("id", unitId);
+        List<BasePigpen> basePigpens = pigpenMapper.selectList(queryWrapper);
+        List<String> idList = new ArrayList<>();
+        basePigpens.forEach(item->{
+            idList.add(item.getId());
+        });
+        QueryWrapper<FeedingEnv> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("org_id", orgId).in("unit_id", idList);
+        List<FeedingEnv> envs = envMapper.selectList(queryWrapper1);//饲养头数
+        List<String> unitList = new ArrayList<>();
+        envs.forEach(i->{
+            unitList.add(i.getDeviceCode());
+        });
+        FeedingFatVo feed = fatMapper.getFeed(unitList, orgId);
+        double aDouble = Double.parseDouble(feed.getTodayFeed());
+        double aDouble1 = Double.parseDouble(feed.getDayWeight());
+        double rank = aDouble / aDouble1;
+        DecimalFormat def = new DecimalFormat("0.00");
+        feed.setFatCount(envs.size());
+        feed.setRank(def.format(rank));
+        return feed;
+    }
+
+    @Override
+    public IPage<FeedingFatVo> fatPage(Map<String, String> paramsMap) {
+        String orgId = paramsMap.get("orgId");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        String eartagNum = paramsMap.get("eartagNum");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+        }
+        if ("".equals(pageSize) || null == pageSize) {
+            pageSize = "10";
+        }
+        QueryWrapper<FeedingFat> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId).eq(StringUtils.isNotBlank(eartagNum), "eartag_num", eartagNum);
+        Page<FeedingFat> page = new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+        IPage<FeedingFatVo> fatVoIPage = fatMapper.listPage(page, queryWrapper);
+        return fatVoIPage;
+    }
+
+    @Override
+    public List<FeedingFatVo2> listDetail(Map<String, String> paramsMap) {
+        String orgId = paramsMap.get("orgId");
+        String eartagNum = paramsMap.get("eartagNum");
+        String dataType = paramsMap.get("dataType");//数据类型 1为采食 2为体温 3为活跃量 4为膘体
+        String timeType = paramsMap.get("timeType");//时间类型 1为今日 2为本周 3为本月 4为自定义
+        if ("".equals(timeType) || null == timeType) {
+            timeType = "1";
+        }
+        List<FeedingFatVo2> list = new ArrayList<>();
+        QueryWrapper<FeedingFat> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId).eq("eartag_num", eartagNum);
+        Date timesmorning = DataUill.getTimesmorning();
+        DateTime dateTime = DateUtil.beginOfWeek(new Date());
+        Date monthmorning = DataUill.getTimesMonthmorning();
+        if ("1".equals(dataType)) {
+            if ("1".equals(timeType)) {
+                queryWrapper.ge("create_time",timesmorning).orderByAsc("create_time");
+                List<FeedingFat> fats = fatMapper.selectList(queryWrapper);
+                for (FeedingFat fat : fats) {
+                    FeedingFatVo2 fatVo2 = new FeedingFatVo2();
+                    fatVo2.setValue(fat.getFeedValue());
+                    fatVo2.setCreateDate(fat.getCreateTime());
+                    list.add(fatVo2);
+                }
+            }else if ("2".equals(timeType)){
+                queryWrapper.ge("create_time", dateTime);
+                list = fatMapper.listFeedDetail(queryWrapper);
+            }
+            else if ("3".equals(timeType)){
+                queryWrapper.ge("create_time", monthmorning);
+                list = fatMapper.listFeedDetail(queryWrapper);
+            }
+            else if ("4".equals(timeType)){
+                String startTime = paramsMap.get("startTime") + " 00:00:00";
+                String endTime = paramsMap.get("endTime") + " 23:59:59";
+                queryWrapper.between("create_time", startTime,endTime);
+                list = fatMapper.listFeedDetail(queryWrapper);
+            }
+        }
+        if ("2".equals(dataType)) {
+            if ("1".equals(timeType)) {
+                queryWrapper.ge("create_time",timesmorning).orderByAsc("create_time");
+                List<FeedingFat> fats = fatMapper.selectList(queryWrapper);
+                for (FeedingFat fat : fats) {
+                    FeedingFatVo2 fatVo2 = new FeedingFatVo2();
+                    fatVo2.setValue(fat.getTemp());
+                    fatVo2.setCreateDate(fat.getCreateTime());
+                    list.add(fatVo2);
+                }
+            }else if ("2".equals(timeType)){
+                queryWrapper.ge("create_time", dateTime);
+                list = fatMapper.listTempDetail(queryWrapper);
+            }
+            else if ("3".equals(timeType)){
+                queryWrapper.ge("create_time", monthmorning);
+                list = fatMapper.listTempDetail(queryWrapper);
+            }
+            else if ("4".equals(timeType)){
+                String startTime = paramsMap.get("startTime") + " 00:00:00";
+                String endTime = paramsMap.get("endTime") + " 23:59:59";
+                queryWrapper.between("create_time", startTime,endTime);
+                list = fatMapper.listTempDetail(queryWrapper);
+            }
+        }
+        if ("3".equals(dataType)) {
+            if ("1".equals(timeType)) {
+                queryWrapper.ge("create_time",timesmorning).orderByAsc("create_time");
+                List<FeedingFat> fats = fatMapper.selectList(queryWrapper);
+                for (FeedingFat fat : fats) {
+                    FeedingFatVo2 fatVo2 = new FeedingFatVo2();
+                    fatVo2.setValue(fat.getFeedAct());
+                    fatVo2.setCreateDate(fat.getCreateTime());
+                    list.add(fatVo2);
+                }
+            }else if ("2".equals(timeType)){
+                queryWrapper.ge("create_time", dateTime);
+                list = fatMapper.listActDetail(queryWrapper);
+            }
+            else if ("3".equals(timeType)){
+                queryWrapper.ge("create_time", monthmorning);
+                list = fatMapper.listActDetail(queryWrapper);
+            }
+            else if ("4".equals(timeType)){
+                String startTime = paramsMap.get("startTime") + " 00:00:00";
+                String endTime = paramsMap.get("endTime") + " 23:59:59";
+                queryWrapper.between("create_time", startTime,endTime);
+                list = fatMapper.listActDetail(queryWrapper);
+            }
+        }
+        if ("4".equals(dataType)) {
+            if ("1".equals(timeType)) {
+                queryWrapper.ge("create_time",timesmorning).orderByAsc("create_time");
+                List<FeedingFat> fats = fatMapper.selectList(queryWrapper);
+                for (FeedingFat fat : fats) {
+                    FeedingFatVo2 fatVo2 = new FeedingFatVo2();
+                    fatVo2.setValue(fat.getWeigthValue());
+                    fatVo2.setCreateDate(fat.getCreateTime());
+                    list.add(fatVo2);
+                }
+            }else if ("2".equals(timeType)){
+                queryWrapper.ge("create_time", dateTime);
+                list = fatMapper.listWeightDetail(queryWrapper);
+            }
+            else if ("3".equals(timeType)){
+                queryWrapper.ge("create_time", monthmorning);
+                list = fatMapper.listWeightDetail(queryWrapper);
+            }
+            else if ("4".equals(timeType)){
+                String startTime = paramsMap.get("startTime") + " 00:00:00";
+                String endTime = paramsMap.get("endTime") + " 23:59:59";
+                queryWrapper.between("create_time", startTime,endTime);
+                list = fatMapper.listWeightDetail(queryWrapper);
+            }
+        }
+        return list;
+    }
+
+
+}

+ 28 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/vo/FeedingFatVo.java

@@ -0,0 +1,28 @@
+package vip.xiaonuo.modular.feed.feedingfat.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FeedingFatVo {
+    private Integer fatCount;
+
+    private String todayFeed;
+
+    private String todayWater;
+
+    private String yesterdayFeed;
+
+    private String yesterdayWater;
+
+    private String dayWeight;
+
+    private String rank;
+
+    private Date createDate;
+
+    private String eartagNum;
+
+    private String deviceCode;
+}

+ 14 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingfat/vo/FeedingFatVo2.java

@@ -0,0 +1,14 @@
+package vip.xiaonuo.modular.feed.feedingfat.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FeedingFatVo2 {
+
+    private String value;
+
+    private Date createDate;
+
+}

+ 114 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/controller/FeedingListController.java

@@ -0,0 +1,114 @@
+/*
+ * 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.feed.feedinglist.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.feed.feedinglist.entity.FeedingList;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListAddParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListEditParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListIdParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListPageParam;
+import vip.xiaonuo.modular.feed.feedinglist.service.FeedingListService;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 料塔控制器
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ */
+@Api(tags = "料塔控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class FeedingListController {
+
+    @Resource
+    private FeedingListService feedingListService;
+
+    /**
+     * 获取料塔分页
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取料塔分页")
+    @GetMapping("/modular/feedinglist/page")
+    public CommonResult<Page<FeedingList>> page(FeedingListPageParam feedingListPageParam) {
+        return CommonResult.data(feedingListService.page(feedingListPageParam));
+    }
+
+    /**
+     * 添加料塔
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加料塔")
+    @CommonLog("添加料塔")
+    @PostMapping("/modular/feedinglist/add")
+    public CommonResult<String> add(@RequestBody @Valid FeedingListAddParam feedingListAddParam) {
+        feedingListService.add(feedingListAddParam);
+        return CommonResult.ok();
+    }
+
+
+
+    /**
+     * 获取料塔列表
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取料塔详情")
+    @GetMapping("/modular/feedinglist/listFeed")
+    public CommonResult<List<FeedingListVo>> listFeed(@Valid FeedingListIdParam feedingListIdParam) {
+        return CommonResult.data(feedingListService.listFeed(feedingListIdParam.getOrgId()));
+    }
+
+    /**
+     * 获取料塔曲线
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("获取料塔曲线")
+    @GetMapping("/modular/feedinglist/feedList")
+    public CommonResult<List<FeedingListVo2>> feedList(@RequestBody Map<String,String> paramsMap) {
+        return CommonResult.data(feedingListService.feedingList(paramsMap));
+    }
+}

+ 66 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/entity/FeedingList.java

@@ -0,0 +1,66 @@
+/*
+ * 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.feed.feedinglist.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 wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+@Setter
+@TableName("feeding_list")
+public class FeedingList {
+
+    /** ID */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "ID", position = 1)
+    private Integer id;
+
+    /** 料塔位置 */
+    @ApiModelProperty(value = "料塔位置", position = 2)
+    private String unitId;
+
+    /** 料塔名称 */
+    @ApiModelProperty(value = "料塔名称", position = 3)
+    private String unitName;
+
+    /** 料塔消耗量 */
+    @ApiModelProperty(value = "料塔消耗量", position = 4)
+    private String feedValue;
+
+    /** 料塔余量 */
+    @ApiModelProperty(value = "料塔余量", position = 5)
+    private String marginValue;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 6)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 7)
+    private Date uploadTime;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 8)
+    private String orgId;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/enums/FeedingListEnum.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.feed.feedinglist.enums;
+
+import lombok.Getter;
+
+/**
+ * 料塔枚举
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+public enum FeedingListEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    FeedingListEnum(String value) {
+        this.value = value;
+    }
+}

+ 36 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/mapper/FeedingListMapper.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.feed.feedinglist.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import io.netty.util.Constant;
+import org.apache.ibatis.annotations.Param;
+import vip.xiaonuo.modular.feed.feedinglist.entity.FeedingList;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+import java.util.List;
+
+/**
+ * 料塔Mapper接口
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+public interface FeedingListMapper extends BaseMapper<FeedingList> {
+    List<FeedingListVo> listFeed(@Param(Constants.WRAPPER) QueryWrapper<FeedingList> queryWrapper);
+
+    List<FeedingListVo2> feedList(@Param(Constants.WRAPPER) QueryWrapper<FeedingList> queryWrapper);
+}

+ 21 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/mapper/mapping/FeedingListMapper.xml

@@ -0,0 +1,21 @@
+<?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.feed.feedinglist.mapper.FeedingListMapper">
+
+    <select id="listFeed" resultType="vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo">
+SELECT a.unit_id 'unitId',a.unit_name 'unitName',a.margin_value 'value' FROM `feeding_list` a
+INNER JOIN(
+select unit_id,max(upload_time) upload_time FROM feeding_list
+${ew.customSqlSegment}
+GROUP BY unit_id
+) b
+ON a.upload_time=b.upload_time
+</select>
+
+    <select id="feedList" resultType="vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2">
+ SELECT unit_id 'unitId',unit_name 'unitName',IFNULL(sum(feed_value),'0') 'feedValue',IFNULL(sum(margin_value),'0') 'marginValue',create_time 'createTime' FROM feeding_list
+    ${ew.customSqlSegment}
+    group BY DATE_FORMAT(create_time,'%Y-%m-%d')
+    ORDER BY create_time ASC
+</select>
+</mapper>

+ 58 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListAddParam.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.feed.feedinglist.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 wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+@Setter
+public class FeedingListAddParam {
+
+    /** 料塔位置 */
+    @ApiModelProperty(value = "料塔位置", position = 2)
+    private String unitId;
+
+    /** 料塔名称 */
+    @ApiModelProperty(value = "料塔名称", position = 3)
+    private String unitName;
+
+    /** 料塔消耗量 */
+    @ApiModelProperty(value = "料塔消耗量", position = 4)
+    private String feedValue;
+
+    /** 料塔余量 */
+    @ApiModelProperty(value = "料塔余量", position = 5)
+    private String marginValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 7)
+    private Date uploadTime;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 8)
+    private String orgId;
+
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * 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.feed.feedinglist.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 wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+@Setter
+public class FeedingListEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    /** 料塔位置 */
+    @ApiModelProperty(value = "料塔位置", position = 2)
+    private String unitId;
+
+    /** 料塔名称 */
+    @ApiModelProperty(value = "料塔名称", position = 3)
+    private String unitName;
+
+    /** 料塔消耗量 */
+    @ApiModelProperty(value = "料塔消耗量", position = 4)
+    private String feedValue;
+
+    /** 料塔余量 */
+    @ApiModelProperty(value = "料塔余量", position = 5)
+    private String marginValue;
+
+    /** 上传时间 */
+    @ApiModelProperty(value = "上传时间", position = 7)
+    private Date uploadTime;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 8)
+    private String orgId;
+
+}

+ 36 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListIdParam.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.feed.feedinglist.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 料塔Id参数
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+@Setter
+public class FeedingListIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "orgId", required = true)
+    @NotNull(message = "id不能为空")
+    private String orgId;
+}

+ 55 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/param/FeedingListPageParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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.feed.feedinglist.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 料塔查询参数
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+@Getter
+@Setter
+public class FeedingListPageParam {
+
+    /** 当前页 */
+    @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 unitId;
+
+}

+ 66 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/service/FeedingListService.java

@@ -0,0 +1,66 @@
+/*
+ * 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.feed.feedinglist.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.feed.feedinglist.entity.FeedingList;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListAddParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListEditParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListIdParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListPageParam;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 料塔Service接口
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+public interface FeedingListService extends IService<FeedingList> {
+
+    /**
+     * 获取料塔分页
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    Page<FeedingList> page(FeedingListPageParam feedingListPageParam);
+
+    /**
+     * 添加料塔
+     *
+     * @author wang
+     * @date  2023/12/27 15:34
+     */
+    void add(FeedingListAddParam feedingListAddParam);
+
+
+
+    /*
+     * 料塔余量列表
+     *
+     * */
+    List<FeedingListVo> listFeed(String orgId);
+
+    /*
+     * 料塔余量曲线
+     *
+     * */
+    List<FeedingListVo2> feedingList(Map<String,String> paramsMap);
+
+}

+ 128 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/service/impl/FeedingListServiceImpl.java

@@ -0,0 +1,128 @@
+/*
+ * 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.feed.feedinglist.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+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.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.modular.bi.utils.DataUill;
+import vip.xiaonuo.modular.feed.feedinglist.entity.FeedingList;
+import vip.xiaonuo.modular.feed.feedinglist.mapper.FeedingListMapper;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListAddParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListEditParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListIdParam;
+import vip.xiaonuo.modular.feed.feedinglist.param.FeedingListPageParam;
+import vip.xiaonuo.modular.feed.feedinglist.service.FeedingListService;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo;
+import vip.xiaonuo.modular.feed.feedinglist.vo.FeedingListVo2;
+
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 料塔Service接口实现类
+ *
+ * @author wang
+ * @date  2023/12/27 15:34
+ **/
+@Service
+public class FeedingListServiceImpl extends ServiceImpl<FeedingListMapper, FeedingList> implements FeedingListService {
+
+    @Autowired
+    private FeedingListMapper feedingListMapper;
+    @Override
+    public Page<FeedingList> page(FeedingListPageParam feedingListPageParam) {
+        QueryWrapper<FeedingList> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(feedingListPageParam.getUnitId())) {
+            queryWrapper.lambda().notLike(FeedingList::getUnitId, feedingListPageParam.getUnitId());
+        }
+        if(ObjectUtil.isAllNotEmpty(feedingListPageParam.getSortField(), feedingListPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(feedingListPageParam.getSortOrder());
+            queryWrapper.orderBy(true, feedingListPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(feedingListPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(FeedingList::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(FeedingListAddParam feedingListAddParam) {
+        FeedingList feedingList = BeanUtil.toBean(feedingListAddParam, FeedingList.class);
+        this.save(feedingList);
+    }
+
+
+    @Override
+    public List<FeedingListVo> listFeed(String orgId) {
+        QueryWrapper<FeedingList> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId);
+        List<FeedingListVo> feedingListVos = feedingListMapper.listFeed(queryWrapper);
+        return feedingListVos;
+    }
+
+    @Override
+    public List<FeedingListVo2> feedingList(Map<String,String> paramsMap) {
+        String type = paramsMap.get("type");
+        if ("".equals(type) || null == type) {
+            type = "1";
+        }
+        List<FeedingListVo2> list = new ArrayList<>();
+        QueryWrapper<FeedingList> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("unit_id", paramsMap.get("unitId"));
+        if ("1".equals(type)) {
+            Date timesmorning = DataUill.getTimesmorning();
+            queryWrapper.ge("create_time",timesmorning).orderByAsc("create_time");
+            List<FeedingList> feedingLists = feedingListMapper.selectList(queryWrapper);
+            for (FeedingList feedingList : feedingLists) {
+                FeedingListVo2 listVo2 = new FeedingListVo2();
+                listVo2.setFeedValue(feedingList.getFeedValue());
+                listVo2.setMarginValue(feedingList.getMarginValue());
+                listVo2.setUploadTime(feedingList.getCreateTime());
+                listVo2.setUnitId(feedingList.getUnitId());
+                listVo2.setUnitName(feedingList.getUnitName());
+                list.add(listVo2);
+            }
+        } else if ("2".equals(type)) {
+            DateTime dateTime = DateUtil.beginOfWeek(new Date());
+            queryWrapper.ge("create_time", dateTime);
+             list = feedingListMapper.feedList(queryWrapper);
+        }else if ("3".equals(type)) {
+            Date monthmorning = DataUill.getTimesMonthmorning();
+            queryWrapper.ge("create_time", monthmorning);
+             list = feedingListMapper.feedList(queryWrapper);
+        }else if ("4".equals(type)) {
+            String startTime = paramsMap.get("startTime") + " 00:00:00";
+            String endTime = paramsMap.get("endTime") + " 23:59:59";
+            queryWrapper.between("create_time", startTime,endTime);
+             list = feedingListMapper.feedList(queryWrapper);
+        }
+        return list;
+    }
+}

+ 10 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/vo/FeedingListVo.java

@@ -0,0 +1,10 @@
+package vip.xiaonuo.modular.feed.feedinglist.vo;
+
+import lombok.Data;
+
+@Data
+public class FeedingListVo {
+    private String unitId;
+    private String unitName;
+    private String value;
+}

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedinglist/vo/FeedingListVo2.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.modular.feed.feedinglist.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FeedingListVo2 {
+    private String unitId;
+    private String unitName;
+    /*饲料消耗量*/
+    private String feedValue;
+    /*饲料余量*/
+    private String marginValue;
+
+    private Date uploadTime;
+}