Преглед на файлове

Merge remote-tracking branch 'origin/master'

yang преди 3 години
родител
ревизия
a8a7f924b5
променени са 94 файла, в които са добавени 4098 реда и са изтрити 42 реда
  1. 5 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/pom.xml
  2. 85 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BaseFarmInfoController.java
  3. 39 2
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BasePigpenController.java
  4. 83 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BaseRegionController.java
  5. 33 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/CollectorRegisterController.java
  6. 10 1
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/DailyTabulateDataController.java
  7. 24 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EartagDataController.java
  8. 85 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EartagOffineController.java
  9. 7 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EnvironmentDataController.java
  10. 96 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/FarmStockController.java
  11. 56 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BaseFarmInfoEntity.java
  12. 2 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BasePigpenEntity.java
  13. 40 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BaseRegionEntity.java
  14. 19 2
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/CollectorRegisterEntity.java
  15. 22 6
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/DailyTabulateDataEntity.java
  16. 11 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EartagDataEntity.java
  17. 48 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EartagOffineEntity.java
  18. 22 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EnvironmentDataEntity.java
  19. 88 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/FarmStockEntity.java
  20. 19 2
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/CollectorRegisterVo.java
  21. 22 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/EartagDataCountVo.java
  22. 22 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/EnvironmentDataVo.java
  23. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/BaseFarmInfoDao.java
  24. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/BaseRegionDao.java
  25. 1 1
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/CollectorRegisterDao.java
  26. 2 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/DailyTabulateDataDao.java
  27. 10 1
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EartagDataDao.java
  28. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EartagOffineDao.java
  29. 9 1
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EnvironmentDataDao.java
  30. 27 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/FarmStockDao.java
  31. 20 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/BaseFarmInfoService.java
  32. 20 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/BaseRegionService.java
  33. 3 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/CollectorRegisterService.java
  34. 2 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/DailyTabulateDataService.java
  35. 6 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EartagDataService.java
  36. 20 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EartagOffineService.java
  37. 3 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EnvironmentDataService.java
  38. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/FarmStockService.java
  39. 35 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/BaseFarmInfoServiceImpl.java
  40. 35 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/BaseRegionServiceImpl.java
  41. 39 9
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/CollectorRegisterServiceImpl.java
  42. 59 1
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/DailyTabulateDataServiceImpl.java
  43. 261 7
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EartagDataServiceImpl.java
  44. 34 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EartagOffineServiceImpl.java
  45. 31 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EnvironmentDataServiceImpl.java
  46. 322 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/FarmStockServiceImpl.java
  47. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/BaseFarmInfoDao.xml
  48. 15 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/BaseRegionDao.xml
  49. 10 4
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/CollectorRegisterDao.xml
  50. 7 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EartagDataDao.xml
  51. 17 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EartagOffineDao.xml
  52. 6 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EnvironmentDataDao.xml
  53. 32 0
      smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/FarmStockDao.xml
  54. 9 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/pom.xml
  55. 4 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/HuimvSmartEartagDataTransmissionApplication.java
  56. 28 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/autoconfigure/MybatisPlusConfiguration.java
  57. 62 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/controller/PigDataProcessingController.java
  58. 55 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/BaseFarmInfoEntity.java
  59. 87 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/DailyTabulateDataEntity.java
  60. 127 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/EartagDataEntity.java
  61. 27 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/FarmEartagChangeEntity.java
  62. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/NewAndOffLineEartagEntity.java
  63. 42 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/BaseForm.java
  64. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/EartagForm.java
  65. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/PigStockForm.java
  66. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/ChangeEartagDataVo.java
  67. 51 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/DailyTabulateDataVo.java
  68. 34 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/EartagDataVo.java
  69. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/BaseFarmInfoDao.java
  70. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/DailyTabulateDataDao.java
  71. 28 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/EartagDataDao.java
  72. 38 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/FarmEartagChangeDao.java
  73. 59 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/R.java
  74. 48 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRException.java
  75. 130 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRExceptionHandler.java
  76. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DailyTabulateDataService.java
  77. 23 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DataPushService.java
  78. 22 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/EartagDataService.java
  79. 18 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/FarmEartagChangeService.java
  80. 53 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DailyTabulateDataServiceImpl.java
  81. 51 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DataPushServiceImpl.java
  82. 115 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/EartagDataServiceImpl.java
  83. 32 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/FarmEartagChangeServiceImpl.java
  84. 163 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/task/DataProcessingTask.java
  85. 131 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Constant.java
  86. 112 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/PageUtils.java
  87. 76 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Query.java
  88. 50 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/SQLFilter.java
  89. 24 5
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/application-dev.yml
  90. 18 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/DailyTabulateDataDao.xml
  91. 78 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/EartagDataDao.xml
  92. 41 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/FarmEartagChangeDao.xml
  93. 94 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/test/java/com.huimv.transmission/HuimvSmartEartagDataManagerTest.java
  94. 22 0
      smart.eartag.data.platform/pom.xml

+ 5 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/pom.xml

@@ -20,6 +20,11 @@
             <artifactId>commons-lang</artifactId>
             <version>2.6</version>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.5</version>
+        </dependency>
     </dependencies>
 
 

+ 85 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BaseFarmInfoController.java

@@ -0,0 +1,85 @@
+ package com.huimv.manager.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import com.huimv.manager.entity.BaseFarmInfoEntity;
+import com.huimv.manager.result.R;
+import com.huimv.manager.service.BaseFarmInfoService;
+import com.huimv.manager.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+ /**
+  *
+  *
+  * @author yinhao
+  * @version ${version}
+  * @date 2021-07-27 14:50:11
+  */
+@RestController
+@RequestMapping("management/basefarminfo")
+@CrossOrigin
+public class BaseFarmInfoController {
+    @Autowired
+    private BaseFarmInfoService baseFarmInfoService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    public R list(@RequestParam Map<String, Object> params){
+        PageUtils page = baseFarmInfoService.queryPage(params);
+
+        return R.ok().put("page", page);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public R info(@PathVariable("id") Integer id){
+		BaseFarmInfoEntity baseFarmInfo = baseFarmInfoService.getById(id);
+
+        return R.ok().put("baseFarmInfo", baseFarmInfo);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public R save(@RequestBody BaseFarmInfoEntity baseFarmInfo){
+		baseFarmInfoService.save(baseFarmInfo);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public R update(@RequestBody BaseFarmInfoEntity baseFarmInfo){
+		baseFarmInfoService.updateById(baseFarmInfo);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public R delete(@RequestBody Integer[] ids){
+		baseFarmInfoService.removeByIds(Arrays.asList(ids));
+
+        return R.ok();
+    }
+    @RequestMapping("/findAll")
+    public R findAll(){
+
+        return R.ok().put("data",baseFarmInfoService.list());
+    }
+
+
+}

+ 39 - 2
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BasePigpenController.java

@@ -1,7 +1,6 @@
  package com.huimv.manager.controller;
 
-import java.util.Arrays;
-import java.util.Map;
+import java.util.*;
 
 import com.huimv.manager.result.R;
 import com.huimv.manager.utils.PageUtils;
@@ -78,4 +77,42 @@ public class BasePigpenController {
         return R.ok();
     }
 
+    @RequestMapping("/listAll")
+    public R countAll(){
+        List endList = new ArrayList();
+        List<BasePigpenEntity> list = basePigpenService.list();
+        for (BasePigpenEntity basePigpenEntity : list) {
+            if (basePigpenEntity.getParentId() ==null){
+                Map map =new HashMap();
+                map.put("id",basePigpenEntity.getId());
+                map.put("farmCode",basePigpenEntity.getFarmCode());
+                map.put("parentId",basePigpenEntity.getParentId());
+                map.put("pigpenName",basePigpenEntity.getPigpenName());
+                map.put("type",basePigpenEntity.getType());
+                map.put("children",getChildren(basePigpenEntity.getId(),list));
+                endList.add(map);
+            }
+
+        }
+        return R.ok().put("page", endList);
+    }
+
+    private List getChildren(Integer id, List<BasePigpenEntity> list) {
+        List endList = new ArrayList();
+        for (BasePigpenEntity basePigpenEntity : list) {
+            if (id.equals( basePigpenEntity.getParentId())){
+                Map map =new HashMap();
+                map.put("id",basePigpenEntity.getId());
+                map.put("farmCode",basePigpenEntity.getFarmCode());
+                map.put("parentId",basePigpenEntity.getParentId());
+                map.put("pigpenName",basePigpenEntity.getPigpenName());
+                map.put("type",basePigpenEntity.getType());
+                map.put("children",getChildren(basePigpenEntity.getId(),list));
+                endList.add(map);
+            }
+        }
+        return  endList;
+    }
+
+
 }

+ 83 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/BaseRegionController.java

@@ -0,0 +1,83 @@
+ package com.huimv.manager.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import com.huimv.manager.entity.BaseRegionEntity;
+import com.huimv.manager.result.R;
+import com.huimv.manager.service.BaseRegionService;
+import com.huimv.manager.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@RestController
+@RequestMapping("manager/baseregion")
+public class BaseRegionController {
+    @Autowired
+    private BaseRegionService baseRegionService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    public R list(@RequestParam Map<String, Object> params){
+        PageUtils page = baseRegionService.queryPage(params);
+
+        return R.ok().put("page", page);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public R info(@PathVariable("id") Integer id){
+		BaseRegionEntity baseRegion = baseRegionService.getById(id);
+
+        return R.ok().put("baseRegion", baseRegion);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public R save(@RequestBody BaseRegionEntity baseRegion){
+		baseRegionService.save(baseRegion);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public R update(@RequestBody BaseRegionEntity baseRegion){
+		baseRegionService.updateById(baseRegion);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public R delete(@RequestBody Integer[] ids){
+		baseRegionService.removeByIds(Arrays.asList(ids));
+
+        return R.ok();
+    }
+
+}

+ 33 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/CollectorRegisterController.java

@@ -1,8 +1,13 @@
  package com.huimv.manager.controller;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.manager.entity.EartagDataEntity;
+import com.huimv.manager.result.RRException;
+import com.huimv.manager.service.EartagDataService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -25,6 +30,8 @@ import com.huimv.manager.utils.PageUtils;
 public class CollectorRegisterController {
     @Autowired
     private CollectorRegisterService collectorRegisterService;
+    @Autowired
+    private EartagDataService eartagDataService;
 
     /**
      * 列表
@@ -37,6 +44,8 @@ public class CollectorRegisterController {
     }
 
 
+
+
     /**
      * 信息
      */
@@ -72,9 +81,33 @@ public class CollectorRegisterController {
      */
     @RequestMapping("/delete")
     public R delete(@RequestBody Integer[] ids){
+
+        if (ids == null || ids.length == 0){
+            return R.error("未选择");
+        }
+        for (Integer id : ids) {
+            CollectorRegisterEntity  collectorRegisterEntity= collectorRegisterService.getById(id);
+            String deviceCode = collectorRegisterEntity.getDeviceCode();
+            int count = eartagDataService.count(Wrappers.<EartagDataEntity>lambdaQuery().eq(EartagDataEntity::getDeviceCode, deviceCode));
+            if (count >0){
+                throw new RRException("删除失败,编号为"+deviceCode+"的设备有尚未清理的耳标");
+            }
+        }
 		collectorRegisterService.removeByIds(Arrays.asList(ids));
 
         return R.ok();
     }
 
+    /**
+     * 统计设备状态
+     */
+    @RequestMapping("/countState")
+    public R countState(@RequestParam Map<String, Object> params){
+        Map map  = collectorRegisterService.countState(params);
+
+        return R.ok().put("data", map);
+    }
+
+
+
 }

+ 10 - 1
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/DailyTabulateDataController.java

@@ -29,6 +29,16 @@ public class DailyTabulateDataController {
     /**
      * 列表
      */
+    @RequestMapping("/listByFarm")
+    public R listByFarm(@RequestParam Map<String, Object> params){
+         DailyTabulateDataEntity dataEntity = dailyTabulateDataService.listByFarm(params);
+
+        return R.ok().put("page", dataEntity);
+    }
+
+    /**
+     * 列表
+     */
     @RequestMapping("/list")
     public R list(@RequestParam Map<String, Object> params){
         PageUtils page = dailyTabulateDataService.queryPage(params);
@@ -36,7 +46,6 @@ public class DailyTabulateDataController {
         return R.ok().put("page", page);
     }
 
-
     /**
      * 信息
      */

+ 24 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EartagDataController.java

@@ -1,9 +1,11 @@
  package com.huimv.manager.controller;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 
 import com.huimv.manager.entity.EartagDataEntity;
@@ -78,4 +80,26 @@ public class EartagDataController {
         return R.ok();
     }
 
+    /**
+     * 查询每小时的上传量
+     */
+    @RequestMapping("/countByTime")
+    public R countByTime(@RequestParam Map<String, Object> params){
+       List list =  eartagDataService.countByTime(params);
+
+        return R.ok().put("data",list);
+    }
+
+    /*
+    * 获取每日数据统计
+    */
+    @Scheduled(cron = "1 1 1 * * ? ")
+//    @RequestMapping("/test")
+    private void updateDailyData(){
+        eartagDataService.updateDailyData();
+    }
+
+
+
+
 }

+ 85 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EartagOffineController.java

@@ -0,0 +1,85 @@
+ package com.huimv.manager.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import com.huimv.manager.entity.EartagOffineEntity;
+import com.huimv.manager.result.R;
+import com.huimv.manager.service.EartagOffineService;
+import com.huimv.manager.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+
+
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@RestController
+@RequestMapping("manager/eartagoffine")
+public class EartagOffineController {
+    @Autowired
+    private EartagOffineService eartagOffineService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    public R list(@RequestParam Map<String, Object> params){
+        PageUtils page = eartagOffineService.queryPage(params);
+
+        return R.ok().put("page", page);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public R info(@PathVariable("id") Integer id){
+		EartagOffineEntity eartagOffine = eartagOffineService.getById(id);
+
+        return R.ok().put("eartagOffine", eartagOffine);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public R save(@RequestBody EartagOffineEntity eartagOffine){
+		eartagOffineService.save(eartagOffine);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public R update(@RequestBody EartagOffineEntity eartagOffine){
+		eartagOffineService.updateById(eartagOffine);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public R delete(@RequestBody Integer[] ids){
+		eartagOffineService.removeByIds(Arrays.asList(ids));
+
+        return R.ok();
+    }
+
+}

+ 7 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/EnvironmentDataController.java

@@ -1,6 +1,7 @@
  package com.huimv.manager.controller;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +38,12 @@ public class EnvironmentDataController {
         return R.ok().put("page", page);
     }
 
+    @RequestMapping("/countEnvironmentTemperature")
+    public R findAll(@RequestParam Map<String, Object> params){
+        List list = environmentDataService.countEnvironmentTemperature(params);
+
+        return R.ok().put("page", list);
+    }
 
     /**
      * 信息

+ 96 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/controller/FarmStockController.java

@@ -0,0 +1,96 @@
+ package com.huimv.manager.controller;
+
+import java.util.*;
+
+import com.huimv.manager.entity.BasePigpenEntity;
+import com.huimv.manager.entity.FarmStockEntity;
+import com.huimv.manager.result.R;
+import com.huimv.manager.service.FarmStockService;
+import com.huimv.manager.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+ /**
+  *
+  *
+  * @author yinhao
+  * @version ${version}
+  * @date 2021-07-28 10:39:17
+  */
+@RestController
+@RequestMapping("manager/farmstock")
+@CrossOrigin
+public class FarmStockController {
+    @Autowired
+    private FarmStockService farmStockService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    public R list(@RequestParam Map<String, Object> params){
+        PageUtils page = farmStockService.queryPage(params);
+
+        return R.ok().put("page", page);
+    }
+
+    /**
+     * 全部
+     */
+    @RequestMapping("/countAll")
+    public R countAll(@RequestParam Map<String, Object> params){
+        List list = farmStockService.countAll(params);
+        return R.ok().put("page", list);
+    }
+
+     /**
+      * 市全部
+      */
+     @RequestMapping("/cityCountAll")
+     public R cityCountAll(@RequestParam Map<String, Object> params){
+         List list = farmStockService.cityCountAll(params);
+         return R.ok().put("page", list);
+     }
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public R info(@PathVariable("id") Integer id){
+		FarmStockEntity farmStock = farmStockService.getById(id);
+
+        return R.ok().put("farmStock", farmStock);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public R save(@RequestBody FarmStockEntity farmStock){
+		farmStockService.save(farmStock);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public R update(@RequestBody FarmStockEntity farmStock){
+		farmStockService.updateById(farmStock);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public R delete(@RequestBody Integer[] ids){
+		farmStockService.removeByIds(Arrays.asList(ids));
+
+        return R.ok();
+    }
+
+}

+ 56 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BaseFarmInfoEntity.java

@@ -0,0 +1,56 @@
+package com.huimv.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Data
+@TableName("base_farm_info")
+public class BaseFarmInfoEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 牧场编码
+	 */
+	private String farmCode;
+	/**
+	 * 牧场名称
+	 */
+	private String farmName;
+	/**
+	 * 联系人
+	 */
+	private String man;
+	/**
+	 * 联系电话
+	 */
+	private String phone;
+	/**
+	 * 区县   行政区划代码
+	 */
+	private String county;
+	/**
+	 * 地市   行政区划代码
+	 */
+	private String city;
+	/**
+	 * 备用
+	 */
+	private String province;
+
+}

+ 2 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BasePigpenEntity.java

@@ -36,4 +36,6 @@ public class BasePigpenEntity implements Serializable {
      */
     private Integer type;
 
+    private String farmCode;
+
 }

+ 40 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/BaseRegionEntity.java

@@ -0,0 +1,40 @@
+package com.huimv.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Data
+@TableName("base_region")
+public class BaseRegionEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 行政区域代码
+	 */
+	private String regionCode;
+	/**
+	 * 行政区域名称
+	 */
+	private String regionName;
+	/**
+	 * 上级行政区域代码
+	 */
+	private String parentCode;
+
+}

+ 19 - 2
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/CollectorRegisterEntity.java

@@ -1,6 +1,7 @@
 package com.huimv.manager.entity;
 
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -85,8 +86,24 @@ public class CollectorRegisterEntity implements Serializable {
     private Date lastTime;
 
     /**
-     * 状态 默认值 1  1.正常 2.异常
+     * 采集状态 默认值 1  1.正常 0.异常
      */
-    private Integer state;
+    private Integer acqStatus;
+
+    /**
+     * 网络通信状态 默认值 1  1.正常 0.异常
+     */
+    private Integer networkStatus;
+
+    /**
+     * 注销状态 默认值 1  1.正常 0.注销
+     */
+    private Integer canStatus;
+
+    /**
+     * 删除状态 默认值 1  1.正常 0.注销
+     */
+    @TableLogic(delval = "0",value = "1")
+    private Integer delStatus;
 
 }

+ 22 - 6
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/DailyTabulateDataEntity.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.sql.Date;
+import java.util.Date;
 
 /**
  * 耳标每日汇总表
@@ -39,25 +39,31 @@ public class DailyTabulateDataEntity implements Serializable {
      */
     private Integer offlineNo;
 
+
+    /**
+     * 能繁母猪
+     */
+    private Integer sowStock;
+
     /**
      * 日龄占比(250-1000)
      */
-    private Double ratio1;
+    private String ratio1;
 
     /**
      * 日龄(1000-1700)
      */
-    private Double ratio2;
+    private String ratio2;
 
     /**
      * 日龄(1700-2400)
      */
-    private Double ratio3;
+    private String ratio3;
 
     /**
      * 日龄(>2400)
      */
-    private Double ratio4;
+    private String ratio4;
 
     /**
      * 配怀存栏
@@ -75,8 +81,18 @@ public class DailyTabulateDataEntity implements Serializable {
     private Integer stock3;
 
     /**
-     * 公猪存栏
+     * 空怀母猪
      */
     private Integer stock4;
 
+    /**
+     * 公猪存栏
+     */
+    private Integer stock5;
+
+    /*
+    * 牧场编号
+    */
+    private String farmCode;
+
 }

+ 11 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EartagDataEntity.java

@@ -114,4 +114,15 @@ public class EartagDataEntity implements Serializable {
      */
     private String tail;
 
+    private String farmCode;
+    /**
+     * 阶段
+     */
+    private Integer stage;
+
+    /**
+     * 区间运动量
+     */
+    private Integer sportGap;
+
 }

+ 48 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EartagOffineEntity.java

@@ -0,0 +1,48 @@
+package com.huimv.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Data
+@TableName("eartag_offine")
+public class EartagOffineEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 
+	 */
+	private String eartagNo;
+	/**
+	 * 
+	 */
+	private Date registerDate;
+	/**
+	 * 
+	 */
+	private String deviceCode;
+	/**
+	 * 
+	 */
+	private String farmCode;
+	/**
+	 * 
+	 */
+	private Date lastDate;
+
+}

+ 22 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/EnvironmentDataEntity.java

@@ -2,9 +2,11 @@ package com.huimv.manager.entity;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 环境数据表
@@ -31,4 +33,24 @@ public class EnvironmentDataEntity implements Serializable {
      */
     private Integer envTemp;
 
+
+
+    /**
+     * 同步时间
+     */
+    private String time;
+
+    /**
+     * 采集时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
+    private Date acqDate;
+
+    /**
+     * 牧场编码
+     */
+    private String farmCode;
+
+
+
 }

+ 88 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/FarmStockEntity.java

@@ -0,0 +1,88 @@
+package com.huimv.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Data
+@TableName("farm_stock")
+public class FarmStockEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 牧场代码
+	 */
+	private String farmCode;
+	/**
+	 * 牧场名称
+	 */
+	private String farmName;
+	/**
+	 * 母猪总存栏
+	 */
+	private Integer sowTotalStock;
+	/**
+	 * 母猪新增
+	 */
+	private Integer eartagNew;
+	/**
+	 * 耳标离线
+	 */
+	private Integer eartagOffone;
+	/**
+	 * 能繁母猪存栏
+	 */
+	private Integer sowStock;
+	/**
+	 * 配怀存栏
+	 */
+	private Integer stock1;
+	/**
+	 * 分娩存栏
+	 */
+	private Integer stock2;
+	/**
+	 * 空怀存栏
+	 */
+	private Integer stock3;
+	/**
+	 * 后备存栏
+	 */
+	private Integer stock4;
+	/**
+	 * 公猪存栏
+	 */
+	private Integer stock5;
+	/**
+	 * 月份
+	 */
+	private Integer month;
+	/**
+	 * 年度
+	 */
+	private Integer year;
+	/**
+	 * 地市代码
+	 */
+	private String cityCode;
+	/**
+	 * 区县代码
+	 */
+	private String countyCode;
+
+}

+ 19 - 2
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/CollectorRegisterVo.java

@@ -1,5 +1,6 @@
 package com.huimv.manager.entity.vo;
 
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -80,7 +81,23 @@ public class CollectorRegisterVo implements Serializable {
     private Date lastTime;
 
     /**
-     * 状态 默认值 1  1.正常 2.异常
+     * 采集状态 默认值 1  1.正常 0.异常
      */
-    private Integer state;
+    private Integer acqStatus;
+
+    /**
+     * 网络通信状态 默认值 1  1.正常 0.异常
+     */
+    private Integer networkStatus;
+
+    /**
+     * 注销状态 默认值 1  1.正常 0.注销
+     */
+    private Integer canStatus;
+
+    /**
+     * 删除状态 默认值 1  1.正常 0.注销
+     */
+    @TableLogic(delval = "0",value = "1")
+    private Integer delStatus;
 }

+ 22 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/EartagDataCountVo.java

@@ -0,0 +1,22 @@
+package com.huimv.manager.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.manager.entity.vo
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/7/26 0026 14:28
+ **/
+@Data
+public class EartagDataCountVo {
+
+    private int uploadCount;
+
+
+    private String countTime;
+}

+ 22 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/entity/vo/EnvironmentDataVo.java

@@ -0,0 +1,22 @@
+package com.huimv.manager.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.manager.entity.vo
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/7/26 0026 14:28
+ **/
+@Data
+public class EnvironmentDataVo {
+
+    private int envTemp;
+
+    //日期:  MM-dd HH
+    private String acq;
+}

+ 19 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/BaseFarmInfoDao.java

@@ -0,0 +1,19 @@
+package com.huimv.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.manager.entity.BaseFarmInfoEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Mapper
+@Repository
+public interface BaseFarmInfoDao extends BaseMapper<BaseFarmInfoEntity> {
+	
+}

+ 19 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/BaseRegionDao.java

@@ -0,0 +1,19 @@
+package com.huimv.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.manager.entity.BaseRegionEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Mapper
+@Repository
+public interface BaseRegionDao extends BaseMapper<BaseRegionEntity> {
+	
+}

+ 1 - 1
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/CollectorRegisterDao.java

@@ -19,5 +19,5 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface CollectorRegisterDao extends BaseMapper<CollectorRegisterEntity> {
 
-    IPage<CollectorRegisterVo> page(IPage<Object> page,@Param(Constants.WRAPPER) QueryWrapper<CollectorRegisterEntity> wrapper);
+    IPage<CollectorRegisterVo> page(@Param("page")IPage page,@Param(Constants.WRAPPER) QueryWrapper<CollectorRegisterEntity> wrapper);
 }

+ 2 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/DailyTabulateDataDao.java

@@ -3,6 +3,7 @@ package com.huimv.manager.mapper;
 import com.huimv.manager.entity.DailyTabulateDataEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * 耳标每日汇总表
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @date 2021-07-24 16:29:33
  */
 @Mapper
+@Repository
 public interface DailyTabulateDataDao extends BaseMapper<DailyTabulateDataEntity> {
 	
 }

+ 10 - 1
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EartagDataDao.java

@@ -1,8 +1,15 @@
 package com.huimv.manager.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.manager.entity.EartagDataEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.manager.entity.vo.EartagDataCountVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 
@@ -13,5 +20,7 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface EartagDataDao extends BaseMapper<EartagDataEntity> {
-	
+
+    List<EartagDataCountVo> countByTime(@Param(Constants.WRAPPER) QueryWrapper<EartagDataEntity> wrapper);
+
 }

+ 19 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EartagOffineDao.java

@@ -0,0 +1,19 @@
+package com.huimv.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.manager.entity.EartagOffineEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Mapper
+@Repository
+public interface EartagOffineDao extends BaseMapper<EartagOffineEntity> {
+	
+}

+ 9 - 1
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/EnvironmentDataDao.java

@@ -1,8 +1,15 @@
 package com.huimv.manager.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.manager.entity.EnvironmentDataEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.manager.entity.vo.EnvironmentDataVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 环境数据表
@@ -13,5 +20,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface EnvironmentDataDao extends BaseMapper<EnvironmentDataEntity> {
-	
+
+    List<EnvironmentDataVo> countEnvironmentTemperature(@Param(Constants.WRAPPER) QueryWrapper<EnvironmentDataEntity> wrapper);
 }

+ 27 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/mapper/FarmStockDao.java

@@ -0,0 +1,27 @@
+package com.huimv.manager.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.huimv.manager.entity.CollectorRegisterEntity;
+import com.huimv.manager.entity.FarmStockEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Map;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Mapper
+@Repository
+public interface FarmStockDao extends BaseMapper<FarmStockEntity> {
+
+    IPage<FarmStockEntity> page(@Param("page")IPage page,@Param(Constants.WRAPPER) QueryWrapper<FarmStockEntity> wrapper);
+}

+ 20 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/BaseFarmInfoService.java

@@ -0,0 +1,20 @@
+package com.huimv.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.manager.entity.BaseFarmInfoEntity;
+import com.huimv.manager.utils.PageUtils;
+
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+public interface BaseFarmInfoService extends IService<BaseFarmInfoEntity> {
+
+    PageUtils queryPage(Map<String, Object> params);
+}
+

+ 20 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/BaseRegionService.java

@@ -0,0 +1,20 @@
+package com.huimv.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.manager.entity.BaseRegionEntity;
+import com.huimv.manager.utils.PageUtils;
+
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+public interface BaseRegionService extends IService<BaseRegionEntity> {
+
+    PageUtils queryPage(Map<String, Object> params);
+}
+

+ 3 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/CollectorRegisterService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.manager.utils.PageUtils;
 import com.huimv.manager.entity.CollectorRegisterEntity;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,5 +17,7 @@ import java.util.Map;
 public interface CollectorRegisterService extends IService<CollectorRegisterEntity> {
 
     PageUtils queryPage(Map<String, Object> params);
+
+    Map countState(Map<String, Object> params);
 }
 

+ 2 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/DailyTabulateDataService.java

@@ -16,5 +16,7 @@ import java.util.Map;
 public interface DailyTabulateDataService extends IService<DailyTabulateDataEntity> {
 
     PageUtils queryPage(Map<String, Object> params);
+
+    DailyTabulateDataEntity listByFarm(Map<String, Object> params);
 }
 

+ 6 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EartagDataService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.manager.utils.PageUtils;
 import com.huimv.manager.entity.EartagDataEntity;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,5 +17,10 @@ import java.util.Map;
 public interface EartagDataService extends IService<EartagDataEntity> {
 
     PageUtils queryPage(Map<String, Object> params);
+
+    List countByTime(Map<String, Object> params);
+
+
+    void updateDailyData();
 }
 

+ 20 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EartagOffineService.java

@@ -0,0 +1,20 @@
+package com.huimv.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.manager.entity.EartagOffineEntity;
+import com.huimv.manager.utils.PageUtils;
+
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+public interface EartagOffineService extends IService<EartagOffineEntity> {
+
+    PageUtils queryPage(Map<String, Object> params);
+}
+

+ 3 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/EnvironmentDataService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.manager.utils.PageUtils;
 import com.huimv.manager.entity.EnvironmentDataEntity;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,5 +17,7 @@ import java.util.Map;
 public interface EnvironmentDataService extends IService<EnvironmentDataEntity> {
 
     PageUtils queryPage(Map<String, Object> params);
+
+    List countEnvironmentTemperature(Map<String, Object> params);
 }
 

+ 25 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/FarmStockService.java

@@ -0,0 +1,25 @@
+package com.huimv.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.manager.entity.FarmStockEntity;
+import com.huimv.manager.utils.PageUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+public interface FarmStockService extends IService<FarmStockEntity> {
+
+    PageUtils queryPage(Map<String, Object> params);
+
+    List countAll(Map<String, Object> params);
+
+    List cityCountAll(Map<String, Object> params);
+}
+

+ 35 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/BaseFarmInfoServiceImpl.java

@@ -0,0 +1,35 @@
+package com.huimv.manager.service.impl;
+
+import com.huimv.manager.entity.BaseFarmInfoEntity;
+import com.huimv.manager.mapper.BaseFarmInfoDao;
+import com.huimv.manager.service.BaseFarmInfoService;
+import com.huimv.manager.utils.PageUtils;
+import com.huimv.manager.utils.Query;
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Service("baseFarmInfoService")
+public class BaseFarmInfoServiceImpl extends ServiceImpl<BaseFarmInfoDao, BaseFarmInfoEntity> implements BaseFarmInfoService {
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        IPage<BaseFarmInfoEntity> page = this.page(
+                new Query<BaseFarmInfoEntity>().getPage(params),
+                new QueryWrapper<BaseFarmInfoEntity>()
+        );
+
+        return new PageUtils(page);
+    }
+
+}

+ 35 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/BaseRegionServiceImpl.java

@@ -0,0 +1,35 @@
+package com.huimv.manager.service.impl;
+
+import com.huimv.manager.entity.BaseRegionEntity;
+import com.huimv.manager.mapper.BaseRegionDao;
+import com.huimv.manager.service.BaseRegionService;
+import com.huimv.manager.utils.PageUtils;
+import com.huimv.manager.utils.Query;
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Service("baseRegionService")
+public class BaseRegionServiceImpl extends ServiceImpl<BaseRegionDao, BaseRegionEntity> implements BaseRegionService {
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        IPage<BaseRegionEntity> page = this.page(
+                new Query<BaseRegionEntity>().getPage(params),
+                new QueryWrapper<BaseRegionEntity>()
+        );
+
+        return new PageUtils(page);
+    }
+
+}

+ 39 - 9
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/CollectorRegisterServiceImpl.java

@@ -1,10 +1,15 @@
 package com.huimv.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huimv.manager.entity.vo.CollectorRegisterVo;
 import com.huimv.manager.mapper.CollectorRegisterDao;
+import com.huimv.manager.result.RRException;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -30,29 +35,54 @@ public class CollectorRegisterServiceImpl extends ServiceImpl<CollectorRegisterD
     @Override
     public PageUtils queryPage(Map<String, Object> params) {
         QueryWrapper<CollectorRegisterEntity> wrapper = new QueryWrapper<>();
+        String farmCode = (String)params.get("farmCode");
+//        if (StringUtils.isBlank(farmCode)){
+//            throw new RRException("牧场未选择");
+//        }
         String registerStartTime = (String)params.get("registerStartTime");
         String registerEndTime = (String)params.get("registerEndTime");
         String deviceCode = (String)params.get("deviceCode");
         String countyName = (String)params.get("countyName");
         String farmName = (String)params.get("farmName");
-        String state = (String)params.get("state");
-
-        wrapper.like(StringUtils.isNotBlank(deviceCode),"device_code",deviceCode)
-        .or().like(StringUtils.isNotBlank(countyName),"county_name",countyName)
-        .or().like(StringUtils.isNotBlank(farmName),"farm_name",farmName);
+        String state = (String)params.get("acqStatus");
 
+        wrapper.like(StringUtils.isNotBlank(deviceCode),"register.device_code",deviceCode)
+        .or().like(StringUtils.isNotBlank(countyName),"register.county_name",countyName)
+        .or().like(StringUtils.isNotBlank(farmName),"register.farm_name",farmName);
+        wrapper.eq(StringUtils.isNotBlank(farmCode),"register.farm_code",farmCode);
         if (StringUtils.isNotBlank(state)){
             wrapper.eq("state",Integer.parseInt(state));
         }
-        wrapper.le(StringUtils.isNotBlank(registerEndTime),"register_time",registerEndTime);
-        wrapper.ge(StringUtils.isNotBlank(registerEndTime),"register_time",registerStartTime);
+        wrapper.le(StringUtils.isNotBlank(registerEndTime),"rregister.egister_time",registerEndTime);
+        wrapper.ge(StringUtils.isNotBlank(registerEndTime),"register.register_time",registerStartTime);
+
+        wrapper.apply("register.del_status  = 1");
 
+        String sortord = (String)params.get("sortord");
+        wrapper.orderByDesc(sortord);
         IPage<CollectorRegisterVo> page = baseMapper.page(new Query<>().getPage(params),wrapper);
 
+        return new PageUtils(page);
+    }
+
+    @Override
+    public Map countState(Map<String, Object> params) {
+
+        String farmCode = (String)params.get("farmCode");
+        if (StringUtils.isBlank(farmCode)){
+            throw new RRException("牧场未选择");
+        }
 
+        QueryWrapper<CollectorRegisterEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("farm_code",farmCode);
 
+        List<CollectorRegisterEntity> collectorRegisterEntities = baseMapper.selectList(wrapper);
+        Map map = new HashMap();
+        map.put("allCount",collectorRegisterEntities.size());
+        map.put("normalStatus",collectorRegisterEntities.stream().filter(o->o.getNetworkStatus().equals(1) && o.getAcqStatus().equals(1) && o.getCanStatus().equals(1)).count());
+        map.put( "abnormalStatus",collectorRegisterEntities.stream().filter(o->o.getAcqStatus().equals(0)).count());
+        map.put("cancelStatus",collectorRegisterEntities.stream().filter(o->o.getCanStatus().equals(0)).count());
 
-        return new PageUtils(page);
+        return map;
     }
-
 }

+ 59 - 1
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/DailyTabulateDataServiceImpl.java

@@ -1,7 +1,13 @@
 package com.huimv.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.huimv.manager.mapper.DailyTabulateDataDao;
+import com.huimv.manager.result.R;
+import com.huimv.manager.result.RRException;
 import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Map;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -24,12 +30,64 @@ public class DailyTabulateDataServiceImpl extends ServiceImpl<DailyTabulateDataD
 
     @Override
     public PageUtils queryPage(Map<String, Object> params) {
+       String farmCode =(String) params.get("farmCode");
+       if (StringUtils.isBlank(farmCode)){
+           throw new RRException("牧场未选择");
+       }
+       String startTime =(String) params.get("startTime");
+       String endTime =(String) params.get("endTime");
+       String minStockTotal =(String) params.get("minStockTotal");
+       String maxStockTotal =(String) params.get("maxStockTotal");
+       String minStockNew =(String) params.get("minStockNew");
+       String maxStockNew =(String) params.get("maxStockNew");
+       String minOfflineNo =(String) params.get("minOfflineNo");
+       String maxOfflineNo =(String) params.get("maxOfflineNo");
+       String minSowStock =(String) params.get("minSowStock");
+       String maxSowStock =(String) params.get("maxSowStock");
+
+        QueryWrapper<DailyTabulateDataEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("farm_code",farmCode);
+
+        wrapper.ge(StringUtils.isNotBlank(startTime),"statistic_date",startTime);
+        wrapper.le(StringUtils.isNotBlank(startTime),"statistic_date",endTime);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockTotal),"stock_total",minStockTotal);
+        wrapper.le(StringUtils.isNotBlank(maxStockTotal),"stock_total",maxStockTotal);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockNew),"stock_new",minStockNew);
+        wrapper.le(StringUtils.isNotBlank(maxStockNew),"stock_new",maxStockNew);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"offline_no",minOfflineNo);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"offline_no",maxOfflineNo);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"sow_stock",minSowStock);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"sow_stock",maxSowStock);
+
+
         IPage<DailyTabulateDataEntity> page = this.page(
                 new Query<DailyTabulateDataEntity>().getPage(params),
-                new QueryWrapper<DailyTabulateDataEntity>()
+                wrapper
         );
 
         return new PageUtils(page);
     }
 
+    @Override
+    public DailyTabulateDataEntity listByFarm(Map<String, Object> params) {
+        String date = (String) params.get("date");
+        String farmCode = (String) params.get("farmCode");
+        if (StringUtils.isBlank(farmCode)){
+            throw new RRException("请选择牧场");
+        }
+        if (StringUtils.isBlank(date) ){
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            date = simpleDateFormat.format(new Date());
+        }
+        QueryWrapper<DailyTabulateDataEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("statistic_date",date);
+        wrapper.eq("farm_code",farmCode);
+
+
+        return   baseMapper.selectOne(wrapper);
+    }
 }

+ 261 - 7
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EartagDataServiceImpl.java

@@ -1,15 +1,25 @@
 package com.huimv.manager.service.impl;
 
-import com.huimv.manager.mapper.EartagDataDao;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.manager.entity.*;
+import com.huimv.manager.entity.vo.EartagDataCountVo;
+import com.huimv.manager.mapper.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.Map;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.manager.utils.PageUtils;
 import com.huimv.manager.utils.Query;
 
-import com.huimv.manager.entity.EartagDataEntity;
 import com.huimv.manager.service.EartagDataService;
 
 /**
@@ -24,12 +34,256 @@ public class EartagDataServiceImpl extends ServiceImpl<EartagDataDao, EartagData
 
     @Override
     public PageUtils queryPage(Map<String, Object> params) {
-        IPage<EartagDataEntity> page = this.page(
-                new Query<EartagDataEntity>().getPage(params),
-                new QueryWrapper<EartagDataEntity>()
-        );
 
+
+        String time = (String)params.get("time");//采集时间
+        String farmName = (String)params.get("farmName");//牧场名称
+        String eartagNo = (String)params.get("eartagNo");//耳标号
+        String dayAge = (String)params.get("dayAge");//耳标号
+        String earTemp = (String)params.get("earTemp");//耳根温度
+        String envTemp = (String)params.get("envTemp");//环境温度
+        String bat = (String)params.get("bat");//电量
+        String rssi = (String)params.get("rssi");//信号强度
+        String pigpenName = (String)params.get("pigpenName");
+        String deviceCode = (String)params.get("deviceCode");
+
+        //TODO 多条件查询
+        QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
+
+
+
+
+        IPage<EartagDataEntity> page = this.page(new Query<EartagDataEntity>().getPage(params),wrapper);
         return new PageUtils(page);
     }
 
+    @Override
+    public List countByTime(Map<String, Object> params) {
+        String  startTime = (String)params.get("startTime");
+        String  endTime = (String) params.get("endTime");
+        String deviceCode = (String)params.get("deviceCode");
+
+
+        QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("device_code",deviceCode);
+        wrapper.ge(StringUtils.isNotBlank(startTime),"time",startTime);
+        wrapper.le(StringUtils.isNotBlank(endTime),"time",endTime);
+        wrapper.groupBy("count_time");
+        List<EartagDataCountVo> list = baseMapper.countByTime(wrapper);
+
+        return list;
+    }
+
+
+    @Autowired
+    private DailyTabulateDataDao dailyTabulateDataDao;
+
+    @Autowired
+    private EartagOffineDao eartagOffineDao;
+
+    @Autowired
+    private BaseFarmInfoDao baseFarmInfoDao;
+
+    @Autowired
+    private FarmStockDao farmStockDao;
+
+
+    @Override
+    public void updateDailyData() {
+        QueryWrapper<BaseFarmInfoEntity> baseFarmInfoWrapper = new QueryWrapper<>();
+        List<BaseFarmInfoEntity> baseFarmInfoEntities = baseFarmInfoDao.selectList(baseFarmInfoWrapper);
+        for (BaseFarmInfoEntity baseFarmInfoEntity : baseFarmInfoEntities) {
+            String farmCode = baseFarmInfoEntity.getFarmCode();
+            String farmName = baseFarmInfoEntity.getFarmName();
+            String county = baseFarmInfoEntity.getCounty();
+            String city = baseFarmInfoEntity.getCity();
+
+
+
+            //查询当日牧场下耳标数据
+            Date now = new Date();
+            QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
+            wrapper.eq("farm_code",farmCode);
+            wrapper.ge("time", DateUtil.beginOfDay(now));
+            wrapper.groupBy("eartag_no");
+            List<EartagDataEntity> eartagDataEntities = baseMapper.selectList(wrapper);
+
+            //过滤
+            Set<String>  nowSet = new HashSet();
+            for (EartagDataEntity eartagDataEntity : eartagDataEntities) {
+                nowSet.add(eartagDataEntity.getEartagNo());
+            }
+
+            //查询昨日牧场下耳标数据
+            wrapper.clear();
+            wrapper.eq("farm_code",farmCode);
+            wrapper.le("time", DateUtil.beginOfDay(now));
+            wrapper.ge("time", DateUtil.offsetDay(DateUtil.beginOfDay(now),-1));
+            wrapper.groupBy("eartag_no");
+            List<EartagDataEntity> yesterdayEartagDataEntities = baseMapper.selectList(wrapper);
+
+            //过滤
+            Set<String> yesterdaySet = new HashSet();
+            for (EartagDataEntity eartagDataEntity : yesterdayEartagDataEntities) {
+                yesterdaySet.add(eartagDataEntity.getEartagNo());
+            }
+            Set<String>  set = ObjectUtil.cloneByStream(nowSet);
+
+            //当日母猪总存栏
+            int allSow = nowSet.size();
+
+            //得到新增
+            nowSet.removeAll(yesterdaySet);
+            int newSow = nowSet.size();
+            //得到离线
+            yesterdaySet.removeAll(set);
+            int offSow = yesterdaySet.size();
+
+            //添加离线表
+            for (String eartagNo : yesterdaySet) {
+                wrapper.clear();
+                wrapper.eq("eartag_no",eartagNo);
+                wrapper.eq("farm_code",farmCode);
+                wrapper.orderByDesc("time");
+                EartagDataEntity dataEntity = baseMapper.selectList(wrapper).get(0);
+
+                EartagOffineEntity eartagOffineEntity = new EartagOffineEntity();
+                eartagOffineEntity.setEartagNo(eartagNo);
+                eartagOffineEntity.setFarmCode(farmCode);
+                eartagOffineEntity.setDeviceCode(dataEntity.getDeviceCode());
+                eartagOffineEntity.setLastDate(dataEntity.getTime());
+                eartagOffineEntity.setRegisterDate(now);
+                eartagOffineDao.insert(eartagOffineEntity);
+            }
+
+
+            //计算日龄
+            Integer ratio1 = 0 ,ratio2 = 0,ratio3= 0,ratio4 = 0;
+            //1:配怀存栏,2:分娩存栏,3:后备存栏,4:空怀母猪,5:公猪存栏,
+            Integer stock1 = 0 ,stock2 = 0,stock3= 0,stock4 = 0,stock5=0;
+            for (EartagDataEntity eartagDataEntity : eartagDataEntities) {
+                Integer dayAge = eartagDataEntity.getDayAge2();
+                if (dayAge != null ){
+                    if (dayAge>250 &&  dayAge < 1000 ){
+                        ratio1++;
+                    }
+
+                    if (dayAge >=1000 &&  dayAge < 1700 ){
+                        ratio2++;
+                    }
+
+                    if (dayAge >= 1700 &&  dayAge < 2400 ){
+                        ratio3++;
+                    }
+
+                    if (dayAge >= 2400 ){
+                        ratio4++;
+                    }
+
+                    Integer stage = eartagDataEntity.getStage();
+                    if (stage== 1){
+                        stock1++;
+                    }
+                    if (stage== 2){
+                        stock2++;
+                    }
+                    if (stage== 3){
+                        stock3++;
+                    }
+                    if (stage== 4){
+                        stock4++;
+                    }
+                    if (stage== 5){
+                        stock5++;
+                    }
+                }
+            }
+            String ratioStr1 = CalculateUtil(BigDecimal.valueOf(ratio1), BigDecimal.valueOf(allSow));
+            String ratioStr2 = CalculateUtil(BigDecimal.valueOf(ratio2),BigDecimal.valueOf(allSow));
+            String ratioStr3 = CalculateUtil(BigDecimal.valueOf(ratio3),BigDecimal.valueOf(allSow));
+            String ratioStr4 = CalculateUtil(BigDecimal.valueOf(ratio4),BigDecimal.valueOf(allSow));
+
+
+            //新数据
+            QueryWrapper<DailyTabulateDataEntity> dailyWrapper = new QueryWrapper<>();
+            dailyWrapper.eq("statistic_date",DateUtil.beginOfDay(now));
+            dailyWrapper.eq("farm_code",farmCode);
+            DailyTabulateDataEntity dailyTabulateDataEntity = dailyTabulateDataDao.selectOne(dailyWrapper);
+            if (dailyTabulateDataEntity == null){
+                dailyTabulateDataEntity = new DailyTabulateDataEntity();
+            }
+            dailyTabulateDataEntity.setFarmCode(farmCode);
+            dailyTabulateDataEntity.setStockTotal(allSow);
+            dailyTabulateDataEntity.setStatisticDate(now);
+            dailyTabulateDataEntity.setStockNew(newSow);
+            dailyTabulateDataEntity.setOfflineNo(offSow);
+            dailyTabulateDataEntity.setRatio1(ratio1 +" ("+ratioStr1+")");
+            dailyTabulateDataEntity.setRatio2(ratio2 +" ("+ratioStr2+")");
+            dailyTabulateDataEntity.setRatio3(ratio3 +" ("+ratioStr3+")");
+            dailyTabulateDataEntity.setRatio4(ratio4 +" ("+ratioStr4+")");
+            dailyTabulateDataEntity.setStock1(stock1);
+            dailyTabulateDataEntity.setStock2(stock2);
+            dailyTabulateDataEntity.setStock3(stock3);
+            dailyTabulateDataEntity.setStock4(stock4);
+            dailyTabulateDataEntity.setStock5(stock5);
+            dailyTabulateDataEntity.setSowStock(stock1+stock2+stock3);
+
+            if (dailyTabulateDataEntity.getId()==null){
+                dailyTabulateDataDao.insert(dailyTabulateDataEntity);
+            }else {
+                dailyTabulateDataDao.updateById(dailyTabulateDataEntity);
+            }
+
+
+
+            //牧场存栏统计
+            QueryWrapper<FarmStockEntity> farmStockEQueryWrapper = new QueryWrapper<>();
+            farmStockEQueryWrapper.eq("year",DateUtil.year(now));
+            farmStockEQueryWrapper.eq("month",DateUtil.month(now));
+            farmStockEQueryWrapper.eq("farm_code",farmCode);
+            FarmStockEntity farmStockEntity = farmStockDao.selectOne(farmStockEQueryWrapper);
+            if (farmStockEntity == null){
+                farmStockEntity = new FarmStockEntity();
+            }
+
+            farmStockEntity.setFarmCode(farmCode);
+            farmStockEntity.setFarmName(farmName);
+            farmStockEntity.setSowTotalStock(allSow);
+            farmStockEntity.setEartagNew(newSow);
+            farmStockEntity.setEartagOffone(offSow);
+            farmStockEntity.setSowStock(stock1+stock2+stock3);
+            farmStockEntity.setStock1(stock1);
+            farmStockEntity.setStock2(stock2);
+            farmStockEntity.setStock3(stock3);
+            farmStockEntity.setStock4(stock4);
+            farmStockEntity.setStock5(stock5);
+            farmStockEntity.setYear(DateUtil.year(now));
+            farmStockEntity.setMonth(DateUtil.month(now));
+            farmStockEntity.setCityCode(city);
+            farmStockEntity.setCountyCode(county);
+            if(farmStockEntity.getId() == null){
+                farmStockDao.insert(farmStockEntity);
+            }else {
+                farmStockDao.updateById(farmStockEntity);
+            }
+
+
+
+        }
+
+
+
+
+
+    }
+
+    //计算百分比
+    public  String CalculateUtil(BigDecimal a, BigDecimal b){
+        String percent =
+                b == null ? "-" :
+                        b.compareTo(new BigDecimal(0)) == 0 ? "-":
+                                a == null ? "0.00%" :
+                                        a.multiply(new BigDecimal(100)).divide(b,2,BigDecimal.ROUND_HALF_UP) + "%";
+        return percent;
+    }
 }

+ 34 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EartagOffineServiceImpl.java

@@ -0,0 +1,34 @@
+package com.huimv.manager.service.impl;
+
+import com.huimv.manager.entity.EartagOffineEntity;
+import com.huimv.manager.mapper.EartagOffineDao;
+import com.huimv.manager.service.EartagOffineService;
+import com.huimv.manager.utils.PageUtils;
+import com.huimv.manager.utils.Query;
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Service("eartagOffineService")
+public class EartagOffineServiceImpl extends ServiceImpl<EartagOffineDao, EartagOffineEntity> implements EartagOffineService {
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        IPage<EartagOffineEntity> page = this.page(
+                new Query<EartagOffineEntity>().getPage(params),
+                new QueryWrapper<EartagOffineEntity>()
+        );
+
+        return new PageUtils(page);
+    }
+
+}

+ 31 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/EnvironmentDataServiceImpl.java

@@ -1,7 +1,14 @@
 package com.huimv.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.manager.entity.vo.EnvironmentDataVo;
 import com.huimv.manager.mapper.EnvironmentDataDao;
+import com.huimv.manager.result.RRException;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 import java.util.Map;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -32,4 +39,28 @@ public class EnvironmentDataServiceImpl extends ServiceImpl<EnvironmentDataDao,
         return new PageUtils(page);
     }
 
+    @Override
+    public List countEnvironmentTemperature(Map<String, Object> params) {
+//        String farmCode = (String) params.get("farmCode");
+//        if (org.apache.commons.lang.StringUtils.isBlank(farmCode)){
+//            throw new RRException("牧场未选择");
+//        }
+        String startTime = (String) params.get("startTime");
+        String endTime = (String) params.get("endTime");
+        String deviceCode = (String) params.get("deviceCode");
+
+        QueryWrapper<EnvironmentDataEntity> wrapper = new QueryWrapper<>();
+//        wrapper.eq(StringUtils.isNotBlank(farmCode),"farm_code",farmCode);
+        wrapper.eq("device_code",deviceCode);
+        wrapper.ge(StringUtils.isNotBlank(startTime),"acq_date",startTime);
+        wrapper.le(StringUtils.isNotBlank(endTime),"acq_date",endTime);
+
+
+       wrapper.groupBy("acq");
+        List<EnvironmentDataEntity> environmentDataEntities = baseMapper.selectList(wrapper);
+        List<EnvironmentDataVo> list = baseMapper.countEnvironmentTemperature(wrapper);
+
+
+        return list;
+    }
 }

+ 322 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/java/com/huimv/manager/service/impl/FarmStockServiceImpl.java

@@ -0,0 +1,322 @@
+package com.huimv.manager.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.huimv.manager.entity.BaseRegionEntity;
+import com.huimv.manager.entity.FarmStockEntity;
+import com.huimv.manager.entity.InterfaceRegisterEntity;
+import com.huimv.manager.mapper.BaseRegionDao;
+import com.huimv.manager.mapper.FarmStockDao;
+import com.huimv.manager.service.FarmStockService;
+import com.huimv.manager.utils.PageUtils;
+import com.huimv.manager.utils.Query;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+/**
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-28 10:39:17
+ */
+@Service("farmStockService")
+public class FarmStockServiceImpl extends ServiceImpl<FarmStockDao, FarmStockEntity> implements FarmStockService {
+
+    @Autowired
+    private FarmStockDao farmStockDao;
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+
+        String countyCode =(String) params.get("countyCode");
+
+        String farmName = (String) params.get("farmName");
+        String minStockTotal =(String) params.get("minStockTotal");
+        String maxStockTotal =(String) params.get("maxStockTotal");
+        String minStockNew =(String) params.get("minStockNew");
+        String maxStockNew =(String) params.get("maxStockNew");
+        String minOfflineNo =(String) params.get("minOfflineNo");
+        String maxOfflineNo =(String) params.get("maxOfflineNo");
+        String minSowStock =(String) params.get("minSowStock");
+        String maxSowStock =(String) params.get("maxSowStock");
+
+        QueryWrapper<FarmStockEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq(StringUtils.isNotBlank(countyCode),"county_code",countyCode).or().eq(StringUtils.isNotBlank(countyCode),"city_code",countyCode);
+
+        wrapper.like(StringUtils.isNotBlank(farmName),"farm_name",farmName);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockTotal),"stock_total",minStockTotal);
+        wrapper.le(StringUtils.isNotBlank(maxStockTotal),"stock_total",maxStockTotal);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockNew),"stock_new",minStockNew);
+        wrapper.le(StringUtils.isNotBlank(maxStockNew),"stock_new",maxStockNew);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"offline_no",minOfflineNo);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"offline_no",maxOfflineNo);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"sow_stock",minSowStock);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"sow_stock",maxSowStock);
+        wrapper.apply("id IN( SELECT MAX(id) FROM `farm_stock` GROUP BY farm_code)");
+
+
+        IPage<FarmStockEntity> page = this.page(
+                new Query<FarmStockEntity>().getPage(params),
+                wrapper
+        );
+
+        return new PageUtils(page);
+    }
+
+    @Autowired
+    private BaseRegionDao baseRegionDao;
+    @Override
+    public List countAll(Map<String, Object> params) {
+        QueryWrapper<BaseRegionEntity> baseRegionwrapper = new QueryWrapper<>();
+        List<BaseRegionEntity> baseRegionEntities = baseRegionDao.selectList(baseRegionwrapper);
+
+        String countyCode =(String) params.get("countyCode");
+
+        String farmName = (String) params.get("farmName");
+        String minStockTotal =(String) params.get("minStockTotal");
+        String maxStockTotal =(String) params.get("maxStockTotal");
+        String minStockNew =(String) params.get("minStockNew");
+        String maxStockNew =(String) params.get("maxStockNew");
+        String minOfflineNo =(String) params.get("minOfflineNo");
+        String maxOfflineNo =(String) params.get("maxOfflineNo");
+        String minSowStock =(String) params.get("minSowStock");
+        String maxSowStock =(String) params.get("maxSowStock");
+
+        QueryWrapper<FarmStockEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq(StringUtils.isNotBlank(countyCode),"county_code",countyCode).or().eq(StringUtils.isNotBlank(countyCode),"city_code",countyCode);
+
+        wrapper.like(StringUtils.isNotBlank(farmName),"farm_name",farmName);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockTotal),"stock_total",minStockTotal);
+        wrapper.le(StringUtils.isNotBlank(maxStockTotal),"stock_total",maxStockTotal);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockNew),"stock_new",minStockNew);
+        wrapper.le(StringUtils.isNotBlank(maxStockNew),"stock_new",maxStockNew);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"offline_no",minOfflineNo);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"offline_no",maxOfflineNo);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"sow_stock",minSowStock);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"sow_stock",maxSowStock);
+        wrapper.apply("id IN( SELECT MAX(id) FROM `farm_stock` GROUP BY farm_code)");
+
+
+        List<FarmStockEntity> farmStockEntities = baseMapper.selectList(wrapper);
+        List list = new ArrayList();
+
+        for (BaseRegionEntity baseRegionEntity : baseRegionEntities) {
+            if (baseRegionEntity.getParentCode() ==null){
+                for (BaseRegionEntity regionEntity : baseRegionEntities) {
+                    if(baseRegionEntity.getRegionCode().equals(regionEntity.getParentCode())){
+                        Integer sowTotalStock = 0,eartagNew = 0,eartagOffone =0,sowStock =0,stock1=0,stock2=0,stock3=0,stock4=0,stock5=0;
+
+                        Map map =new HashMap();
+                        for (FarmStockEntity farmStockEntity : farmStockEntities) {
+                            if (farmStockEntity.getCityCode().equals(regionEntity.getRegionCode())){
+                                sowTotalStock += farmStockEntity.getSowTotalStock();
+                                eartagNew += farmStockEntity.getEartagNew();
+                                eartagOffone += farmStockEntity.getEartagOffone();
+                                sowStock += farmStockEntity.getSowStock();
+                                stock1 += farmStockEntity.getStock1();
+                                stock2 += farmStockEntity.getStock2();
+                                stock3 += farmStockEntity.getStock3();
+                                stock4 += farmStockEntity.getStock4();
+                                stock5 += farmStockEntity.getStock5();
+                            }
+                        }
+                        map.put("sowTotalStock",sowTotalStock);
+                        map.put("eartagNew",eartagNew);
+                        map.put("sowStock",sowStock);
+                        map.put("eartagOffone",eartagOffone);
+                        map.put("stock1",stock1);
+                        map.put("stock2",stock2);
+                        map.put("stock3",stock3);
+                        map.put("stock4",stock4);
+                        map.put("stock5",stock5);
+                        map.put("name",regionEntity.getRegionName());
+                        map.put("code",regionEntity.getRegionCode());
+                        map.put("children",getChildren(regionEntity.getRegionCode(),farmStockEntities,baseRegionEntities));
+                        map.put("type",1);
+                        list.add(map);
+                    }
+
+                }
+            }
+        }
+
+
+        return list;
+    }
+
+    //县级
+    private List getChildren(String cityCode, List<FarmStockEntity> farmStockEntities,List<BaseRegionEntity> baseRegionEntities) {
+
+
+        List endList = new ArrayList();
+        for (BaseRegionEntity baseRegionEntity : baseRegionEntities) {
+            if (cityCode.equals(baseRegionEntity.getParentCode())){
+                String countyCode = baseRegionEntity.getRegionCode();
+
+                Integer sowTotalStock = 0,eartagNew = 0,sowStock =0,eartagOffone =0,stock1=0,stock2=0,stock3=0,stock4=0,stock5=0;
+                Map map =new HashMap();
+                for (FarmStockEntity farmStockEntity : farmStockEntities) {
+                    if (countyCode.equals(farmStockEntity.getCountyCode())){
+                        sowTotalStock += farmStockEntity.getSowTotalStock();
+                        eartagNew += farmStockEntity.getEartagNew();
+                        eartagOffone += farmStockEntity.getEartagOffone();
+                        sowStock += farmStockEntity.getSowStock();
+                        stock1 += farmStockEntity.getStock1();
+                        stock2 += farmStockEntity.getStock2();
+                        stock3 += farmStockEntity.getStock3();
+                        stock4 += farmStockEntity.getStock4();
+                        stock5 += farmStockEntity.getStock5();
+                    }
+                }
+                map.put("sowTotalStock",sowTotalStock);
+                map.put("eartagNew",eartagNew);
+                map.put("eartagOffone",eartagOffone);
+                map.put("sowStock",sowStock);
+                map.put("stock1",stock1);
+                map.put("stock2",stock2);
+                map.put("stock3",stock3);
+                map.put("stock4",stock4);
+                map.put("stock5",stock5);
+                map.put("name",baseRegionEntity.getRegionName());
+                map.put("code",baseRegionEntity.getRegionCode());
+                map.put("children",null);
+                map.put("type",2);
+                endList.add(map);
+            }
+        }
+
+        return  endList;
+    }
+
+    @Override
+    public List cityCountAll(Map<String, Object> params) {
+
+        QueryWrapper<BaseRegionEntity> baseRegionwrapper = new QueryWrapper<>();
+        List<BaseRegionEntity> baseRegionEntities = baseRegionDao.selectList(baseRegionwrapper);
+
+        String countyCode =(String) params.get("countyCode");
+
+        String farmName = (String) params.get("farmName");
+        String minStockTotal =(String) params.get("minStockTotal");
+        String maxStockTotal =(String) params.get("maxStockTotal");
+        String minStockNew =(String) params.get("minStockNew");
+        String maxStockNew =(String) params.get("maxStockNew");
+        String minOfflineNo =(String) params.get("minOfflineNo");
+        String maxOfflineNo =(String) params.get("maxOfflineNo");
+        String minSowStock =(String) params.get("minSowStock");
+        String maxSowStock =(String) params.get("maxSowStock");
+
+        QueryWrapper<FarmStockEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq(StringUtils.isNotBlank(countyCode),"county_code",countyCode).or().eq(StringUtils.isNotBlank(countyCode),"city_code",countyCode);
+
+        wrapper.like(StringUtils.isNotBlank(farmName),"farm_name",farmName);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockTotal),"stock_total",minStockTotal);
+        wrapper.le(StringUtils.isNotBlank(maxStockTotal),"stock_total",maxStockTotal);
+
+        wrapper.ge(StringUtils.isNotBlank(minStockNew),"stock_new",minStockNew);
+        wrapper.le(StringUtils.isNotBlank(maxStockNew),"stock_new",maxStockNew);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"offline_no",minOfflineNo);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"offline_no",maxOfflineNo);
+
+        wrapper.ge(StringUtils.isNotBlank(minOfflineNo),"sow_stock",minSowStock);
+        wrapper.le(StringUtils.isNotBlank(maxOfflineNo),"sow_stock",maxSowStock);
+        wrapper.apply("id IN( SELECT MAX(id) FROM `farm_stock` GROUP BY farm_code)");
+
+
+        List<FarmStockEntity> farmStockEntities = baseMapper.selectList(wrapper);
+        List list = new ArrayList();
+
+        for (BaseRegionEntity baseRegionEntity : baseRegionEntities) {
+            if (baseRegionEntity.getParentCode() ==null){
+                for (BaseRegionEntity regionEntity : baseRegionEntities) {
+                    if(baseRegionEntity.getRegionCode().equals(regionEntity.getParentCode())) {
+                        for (BaseRegionEntity regionEntity1 : baseRegionEntities) {
+                            if (regionEntity.getRegionCode().equals(regionEntity1.getParentCode())) {
+                                Integer sowTotalStock = 0, eartagNew = 0, eartagOffone = 0, sowStock = 0, stock1 = 0, stock2 = 0, stock3 = 0, stock4 = 0, stock5 = 0;
+                                Map map = new HashMap();
+                                for (FarmStockEntity farmStockEntity : farmStockEntities) {
+                                    if (farmStockEntity.getCityCode().equals(regionEntity1.getRegionCode())) {
+                                        sowTotalStock += farmStockEntity.getSowTotalStock();
+                                        eartagNew += farmStockEntity.getEartagNew();
+                                        eartagOffone += farmStockEntity.getEartagOffone();
+                                        sowStock += farmStockEntity.getSowStock();
+                                        stock1 += farmStockEntity.getStock1();
+                                        stock2 += farmStockEntity.getStock2();
+                                        stock3 += farmStockEntity.getStock3();
+                                        stock4 += farmStockEntity.getStock4();
+                                        stock5 += farmStockEntity.getStock5();
+                                    }
+                                }
+                                map.put("sowTotalStock", sowTotalStock);
+                                map.put("eartagNew", eartagNew);
+                                map.put("sowStock", sowStock);
+                                map.put("eartagOffone", eartagOffone);
+                                map.put("stock1", stock1);
+                                map.put("stock2", stock2);
+                                map.put("stock3", stock3);
+                                map.put("stock4", stock4);
+                                map.put("stock5", stock5);
+                                map.put("name", regionEntity1.getRegionName());
+                                map.put("code", regionEntity1.getRegionCode());
+                                map.put("children", getChildren1(regionEntity1, farmStockEntities));
+                                map.put("type",2);
+                                list.add(map);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+
+        return list;
+    }
+
+    private List getChildren1(BaseRegionEntity regionCode, List<FarmStockEntity> farmStockEntities) {
+        List endList = new ArrayList();
+        for (FarmStockEntity farmStockEntity : farmStockEntities) {
+            Map map = new HashMap();
+            if (regionCode.getRegionCode().equals(farmStockEntity.getCountyCode())){
+                map.put("id", farmStockEntity.getId());
+                map.put("farmCode", farmStockEntity.getFarmCode());
+//                map.put("farmName", farmStockEntity.getFarmName());
+                map.put("month", farmStockEntity.getMonth());
+                map.put("year", farmStockEntity.getYear());
+
+                map.put("sowTotalStock", farmStockEntity.getSowTotalStock());
+                map.put("eartagNew", farmStockEntity.getEartagNew());
+                map.put("sowStock", farmStockEntity.getSowStock());
+                map.put("eartagOffone", farmStockEntity.getEartagOffone());
+                map.put("stock1", farmStockEntity.getStock1());
+                map.put("stock2", farmStockEntity.getStock1());
+                map.put("stock3", farmStockEntity.getStock1());
+                map.put("stock4", farmStockEntity.getStock1());
+                map.put("stock5", farmStockEntity.getStock1());
+                map.put("name", farmStockEntity.getFarmName());
+                map.put("code", regionCode.getRegionCode());
+                map.put("children",null);
+                map.put("tpye",4);
+                endList.add(map);
+            }
+        }
+        return endList;
+    }
+}

+ 19 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/BaseFarmInfoDao.xml

@@ -0,0 +1,19 @@
+<?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="com.huimv.manager.mapper.BaseFarmInfoDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.huimv.manager.entity.BaseFarmInfoEntity" id="baseFarmInfoMap">
+        <result property="id" column="id"/>
+        <result property="farmCode" column="farm_code"/>
+        <result property="farmName" column="farm_name"/>
+        <result property="man" column="man"/>
+        <result property="phone" column="phone"/>
+        <result property="county" column="county"/>
+        <result property="city" column="city"/>
+        <result property="province" column="province"/>
+    </resultMap>
+
+
+</mapper>

+ 15 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/BaseRegionDao.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="com.huimv.manager.mapper.BaseRegionDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.huimv.manager.entity.BaseRegionEntity" id="baseRegionMap">
+        <result property="id" column="id"/>
+        <result property="regionCode" column="region_code"/>
+        <result property="regionName" column="region_name"/>
+        <result property="parentCode" column="parent_code"/>
+    </resultMap>
+
+
+</mapper>

+ 10 - 4
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/CollectorRegisterDao.xml

@@ -19,7 +19,10 @@
         <result property="port" column="port"/>
         <result property="registerTime" column="register_time"/>
         <result property="lastTime" column="last_time"/>
-        <result property="state" column="state"/>
+        <result property="networkStatus" column="network_status"/>
+        <result property="acqStatus" column="acq_status"/>
+        <result property="canStatus" column="can_status"/>
+        <result property="delStatus" column="del_status"/>
     </resultMap>
     <select id="page" resultType="com.huimv.manager.entity.vo.CollectorRegisterVo">
 
@@ -40,10 +43,13 @@
             register.port,
             register.register_time,
             register.last_time,
-            register.state
+            register.network_status,
+            register.acq_status,
+            register.can_status,
+            register.del_status
         from collector_register register
-        join base_pigpen pigpen on pigpen.id = register.pigpen_id and  pigpen.type = 1
-        join base_pigpen unit on unit.id = register.unit_id and unit.type = 2
+        join base_pigpen pigpen on pigpen.id = register.pigpen_id
+        join base_pigpen unit on unit.id = register.unit_id
       ${ew.customSqlSegment}
     </select>
 

+ 7 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EartagDataDao.xml

@@ -26,6 +26,13 @@
         <result property="chk" column="chk"/>
         <result property="tail" column="tail"/>
     </resultMap>
+    <select id="countByTime" resultType="com.huimv.manager.entity.vo.EartagDataCountVo">
+         SELECT
+          DATE_FORMAT(`time`,"%y-%m-%d %H") count_time,COUNT(*) upload_count
+	        FROM `eartag_data`
+	        ${ew.customSqlSegment}
+    </select>
+
 
 
 </mapper>

+ 17 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EartagOffineDao.xml

@@ -0,0 +1,17 @@
+<?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="com.huimv.manager.mapper.EartagOffineDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.huimv.manager.entity.EartagOffineEntity" id="eartagOffineMap">
+        <result property="id" column="id"/>
+        <result property="eartagNo" column="eartag_no"/>
+        <result property="registerDate" column="register_date"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="farmCode" column="farm_code"/>
+        <result property="lastDate" column="last_date"/>
+    </resultMap>
+
+
+</mapper>

+ 6 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/EnvironmentDataDao.xml

@@ -9,6 +9,12 @@
         <result property="deviceCode" column="device_code"/>
         <result property="envTemp" column="env_temp"/>
     </resultMap>
+    <select id="countEnvironmentTemperature" resultType="com.huimv.manager.entity.vo.EnvironmentDataVo">
+
+        SELECT  DATE_FORMAT(acq_date,"%m-%d %H") acq , env_temp
+         FROM `environment_data`
+         ${ew.customSqlSegment}
+    </select>
 
 
 </mapper>

+ 32 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-manager/src/main/resources/mapper/manager/FarmStockDao.xml

@@ -0,0 +1,32 @@
+<?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="com.huimv.manager.mapper.FarmStockDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.huimv.manager.entity.FarmStockEntity" id="farmStockMap">
+        <result property="id" column="id"/>
+        <result property="farmCode" column="farm_code"/>
+        <result property="farmName" column="farm_name"/>
+        <result property="sowTotalStock" column="sow_total_stock"/>
+        <result property="eartagNew" column="eartag_new"/>
+        <result property="eartagOffone" column="eartag_offone"/>
+        <result property="sowStock" column="sow_stock"/>
+        <result property="stock1" column="stock1"/>
+        <result property="stock2" column="stock2"/>
+        <result property="stock3" column="stock3"/>
+        <result property="stock4" column="stock4"/>
+        <result property="stock5" column="stock5"/>
+        <result property="month" column="month"/>
+        <result property="year" column="year"/>
+        <result property="cityCode" column="city_code"/>
+        <result property="countyCode" column="county_code"/>
+    </resultMap>
+    <select id="page" resultType="com.huimv.manager.entity.FarmStockEntity">
+
+        SELECT * FROM  `farm_stock`  WHERE id IN( SELECT MAX(id) FROM `farm_stock` GROUP BY farm_code)
+
+    </select>
+
+
+</mapper>

+ 9 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/pom.xml

@@ -12,4 +12,13 @@
     <artifactId>huimv-smart-eartag-data-transmission</artifactId>
 
 
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+    </dependencies>
+
+
 </project>

+ 4 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/HuimvSmartEartagDataTransmissionApplication.java

@@ -1,7 +1,9 @@
 package com.huimv.transmission;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * @Project : huimv.shiwan
@@ -11,6 +13,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  * @Author : ZhuoNing
  * @Create : 2020-12-25
  **/
+@MapperScan("com.huimv.transmission.mapper")
+@EnableScheduling
 @SpringBootApplication
 public class HuimvSmartEartagDataTransmissionApplication {
     public static void main(String[] args) {

+ 28 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/autoconfigure/MybatisPlusConfiguration.java

@@ -0,0 +1,28 @@
+package com.huimv.transmission.autoconfigure;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/27 9:01
+ * @Description
+ */
+@Configuration
+public class MybatisPlusConfiguration {
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+
+//    @Bean
+//    public ConfigurationCustomizer configurationCustomizer() {
+//        return configuration -> configuration.setUseDeprecatedExecutor(false);
+//    }
+}

+ 62 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/controller/PigDataProcessingController.java

@@ -0,0 +1,62 @@
+package com.huimv.transmission.controller;
+
+import com.huimv.transmission.entity.form.EartagForm;
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.result.R;
+import com.huimv.transmission.service.DataPushService;
+import com.huimv.transmission.service.EartagDataService;
+import com.huimv.transmission.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 数据推送
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 10:19
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/pig")
+public class PigDataProcessingController {
+
+    @Autowired
+    private DataPushService dataPushService;
+
+    @Autowired
+    private EartagDataService eartagDataService;
+
+    @GetMapping("/getPigStock")
+    public R getPigStock(PigStockForm pigStockForm) {
+        PageUtils page = dataPushService.getPigStock(pigStockForm);
+        return R.ok().put("resultData",page);
+    }
+
+    @GetMapping("/getNewPigStock")
+    public R getNewPigStock() {
+        PageUtils page =  dataPushService.getNewPigStock(1,10);
+        return R.ok().put("resultData",page);
+    }
+
+    @GetMapping("/getOffLinePigStock")
+    public R getOffLinePigStock() {
+        PageUtils page =  dataPushService.getOffLinePigStock(1,10);
+        return R.ok().put("resultData",page);
+    }
+
+    @PostMapping("/recive")
+    public void receiveData(@RequestBody String body) {
+        System.out.println(body);
+    }
+
+
+    @GetMapping("/getEartag")
+    public R getEartag(@Validated EartagForm eartagForm) {
+        PageUtils page = eartagDataService.getEartag(eartagForm);
+        return R.ok().put("resultData", page);
+    }
+}

+ 55 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/BaseFarmInfoEntity.java

@@ -0,0 +1,55 @@
+package com.huimv.transmission.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Data
+@TableName("base_farm_info")
+public class BaseFarmInfoEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 牧场编码
+	 */
+	private String farmCode;
+	/**
+	 * 牧场名称
+	 */
+	private String farmName;
+	/**
+	 * 联系人
+	 */
+	private String man;
+	/**
+	 * 联系电话
+	 */
+	private String phone;
+	/**
+	 * 区县   行政区划代码
+	 */
+	private String county;
+	/**
+	 * 地市   行政区划代码
+	 */
+	private String city;
+	/**
+	 * 备用
+	 */
+	private String province;
+
+}

+ 87 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/DailyTabulateDataEntity.java

@@ -0,0 +1,87 @@
+package com.huimv.transmission.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * 耳标每日汇总表
+ */
+@Data
+@TableName("daily_tabulate_data")
+public class DailyTabulateDataEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    private Integer id;
+
+    /**
+     * 统计日期
+     */
+    private Date statisticDate;
+
+    /**
+     * 当日母猪总存栏
+     */
+    private Integer stockTotal;
+
+    /**
+     * 每日母猪新增耳标数
+     */
+    private Integer stockNew;
+
+    /**
+     * 每日离线耳标数
+     */
+    private Integer offlineNo;
+
+    /**
+     * 日龄占比(250-1000)
+     */
+    private Double ratio1;
+
+    /**
+     * 日龄(1000-1700)
+     */
+    private Double ratio2;
+
+    /**
+     * 日龄(1700-2400)
+     */
+    private Double ratio3;
+
+    /**
+     * 日龄(>2400)
+     */
+    private Double ratio4;
+
+    /**
+     * 配怀存栏
+     */
+    private Integer stock1;
+
+    /**
+     * 分娩存栏
+     */
+    private Integer stock2;
+
+    /**
+     * 后备存栏
+     */
+    private Integer stock3;
+
+    /**
+     * 公猪存栏
+     */
+    private Integer stock4;
+
+    /**
+     * 牧场编码
+     */
+    private String farmId;
+
+}

+ 127 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/EartagDataEntity.java

@@ -0,0 +1,127 @@
+package com.huimv.transmission.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("eartag_data")
+public class EartagDataEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 记录id(主键)
+     */
+    @TableId
+    private Integer id;
+
+    /**
+     * 采集器编码
+     */
+    private String deviceCode;
+
+    /**
+     * 耳标号
+     */
+    private String eartagNo;
+
+    /**
+     * 采集时间
+     */
+    private Date time;
+
+    /**
+     * 佩标日龄
+     */
+    private Integer dayAge;
+
+    /**
+     * 日龄
+     */
+    private Integer dayAge2;
+
+    /**
+     * 耳根温度
+     */
+    private Integer earTemp;
+
+    /**
+     * 运动量
+     */
+    private Integer exercise;
+
+    /**
+     * 栋舍
+     */
+    private String pigpen;
+
+    /**
+     * 环境温度
+     */
+    private Integer envTemp;
+
+    /**
+     * 电池电量
+     */
+    private Integer bat;
+
+    /**
+     * 信号强度
+     */
+    private Integer rssi;
+
+    /**
+     * 命令头
+     */
+    private String head;
+
+    /**
+     * 指令
+     */
+    private String command;
+
+    /**
+     * 版本号
+     */
+    private String version;
+
+    /**
+     * 耳标帧序号
+     */
+    private Integer frameSerialNo;
+
+    /**
+     * 重启次数
+     */
+    private Integer rebootTimes;
+
+    /**
+     * 预留字段
+     */
+    private String prepareField;
+
+    /**
+     * 校验码
+     */
+    private String chk;
+
+    /**
+     * 命令尾
+     */
+    private String tail;
+
+    /**
+     * 牧场编码
+     */
+    private String farmCode;
+
+    /**
+     * 阶段
+     */
+    private Integer stage;
+
+}

+ 27 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/FarmEartagChangeEntity.java

@@ -0,0 +1,27 @@
+package com.huimv.transmission.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 17:18
+ */
+@Data
+public class FarmEartagChangeEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    private String farmId;
+
+    private String eartagNo;
+
+    private String changeType;
+}

+ 25 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/NewAndOffLineEartagEntity.java

@@ -0,0 +1,25 @@
+package com.huimv.transmission.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 8:54
+ */
+@Data
+public class NewAndOffLineEartagEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String farmCode;
+
+    private String todayEartags;
+
+    private String beforeEartags;
+
+}

+ 42 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/BaseForm.java

@@ -0,0 +1,42 @@
+package com.huimv.transmission.entity.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 20:16
+ */
+@Data
+public class BaseForm {
+
+    @NotBlank(message = "accessToken不能为空!")
+    protected String accessToken;
+
+    @NotBlank(message = "serviceNo不能为空!")
+    protected String serviceNo;
+
+    protected Integer pageNo = 1;
+
+    protected Integer pageSize = 100;
+
+    protected Date startDate;
+
+    protected Date endDate;
+
+    protected String farmID;
+
+    public BaseForm() {
+    }
+
+    public BaseForm(Integer pageNo, Integer pageSize) {
+        this.pageNo = pageNo;
+        this.pageSize = pageSize;
+    }
+}

+ 29 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/EartagForm.java

@@ -0,0 +1,29 @@
+package com.huimv.transmission.entity.form;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 17:06
+ */
+@Data
+public class EartagForm extends BaseForm implements Serializable {
+
+    private static final long serialVersionUID = -1817518629892847905L;
+
+    private String eartag;
+
+    public EartagForm() {
+    }
+
+    public EartagForm(Integer pageNo, Integer pageSize) {
+        super(pageNo,pageSize);
+    }
+}

+ 25 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/PigStockForm.java

@@ -0,0 +1,25 @@
+package com.huimv.transmission.entity.form;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 20:14
+ */
+@Data
+public class PigStockForm extends BaseForm implements Serializable {
+
+    private static final long serialVersionUID = 5510009107881650812L;
+
+    private Integer stage;
+
+    public PigStockForm(Integer pageNo, Integer pageSize) {
+        super(pageNo, pageSize);
+    }
+}

+ 29 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/ChangeEartagDataVo.java

@@ -0,0 +1,29 @@
+package com.huimv.transmission.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.annotation.JSONType;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 17:25
+ */
+@Data
+@JSONType(orders={"farmID","newEartagNo"})
+public class ChangeEartagDataVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String farmID;
+
+    private List<String> newEartagNo;
+
+    @JSONField(serialize = false)
+    private Integer type;
+}

+ 51 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/DailyTabulateDataVo.java

@@ -0,0 +1,51 @@
+package com.huimv.transmission.entity.vo;
+
+
+import com.alibaba.fastjson.annotation.JSONType;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 13:23
+ */
+@Data
+@JSONType(orders={"farmID","time","stage","quantity","newCount","eliminate"})
+public class DailyTabulateDataVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 牧场编码
+     */
+    private String farmID;
+    /**
+     * 存栏时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date time;
+    /**
+     * 阶段
+     */
+    private Integer stage;
+    /**
+     * 当前存栏总数量
+     */
+    private Integer quantity;
+    /**
+     * 新增存栏量
+     */
+    @JsonProperty("new")
+    private Integer newCount;
+    /**
+     * 离线存栏量
+     */
+    private Integer eliminate;
+}

+ 34 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/EartagDataVo.java

@@ -0,0 +1,34 @@
+package com.huimv.transmission.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 18:54
+ */
+@Data
+public class EartagDataVo implements Serializable {
+    private static final long serialVersionUID = 7520745117501011521L;
+
+    private String farmID;
+
+    private String eartag;
+
+    private Date time2;
+
+    private Double temp1;
+
+    private Integer bat;
+
+    private Integer rssi;
+
+    private Double temp2;
+
+}

+ 19 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/BaseFarmInfoDao.java

@@ -0,0 +1,19 @@
+package com.huimv.transmission.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.transmission.entity.BaseFarmInfoEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-27 14:50:11
+ */
+@Mapper
+@Repository
+public interface BaseFarmInfoDao extends BaseMapper<BaseFarmInfoEntity> {
+	
+}

+ 25 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/DailyTabulateDataDao.java

@@ -0,0 +1,25 @@
+package com.huimv.transmission.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.transmission.entity.DailyTabulateDataEntity;
+import com.huimv.transmission.entity.vo.DailyTabulateDataVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 耳标每日汇总表
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+@Mapper
+@Repository
+public interface DailyTabulateDataDao extends BaseMapper<DailyTabulateDataEntity> {
+
+    IPage<DailyTabulateDataVo> getPigStockPage(@Param("page") IPage<DailyTabulateDataVo> iPage,@Param(Constants.WRAPPER) LambdaQueryWrapper<DailyTabulateDataEntity> lambdaQuery);
+}

+ 28 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/EartagDataDao.java

@@ -0,0 +1,28 @@
+package com.huimv.transmission.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.transmission.entity.EartagDataEntity;
+import com.huimv.transmission.entity.NewAndOffLineEartagEntity;
+import com.huimv.transmission.entity.vo.EartagDataVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 
+ * 
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+@Mapper
+public interface EartagDataDao extends BaseMapper<EartagDataEntity> {
+
+    List<NewAndOffLineEartagEntity> selectChangeEartagList();
+
+    IPage<EartagDataVo> selectByConditions(@Param("page") IPage<EartagDataVo> ipage,@Param(Constants.WRAPPER) LambdaQueryWrapper<EartagDataEntity> lambdaQuery);
+}

+ 38 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/FarmEartagChangeDao.java

@@ -0,0 +1,38 @@
+package com.huimv.transmission.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.transmission.entity.FarmEartagChangeEntity;
+import com.huimv.transmission.entity.vo.ChangeEartagDataVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 17:47
+ */
+@Mapper
+@Repository
+public interface FarmEartagChangeDao extends BaseMapper<FarmEartagChangeEntity> {
+
+    IPage<ChangeEartagDataVo> getPigStockByChangeType(@Param("page") IPage<ChangeEartagDataVo> iPage, @Param(Constants.WRAPPER) LambdaQueryWrapper<FarmEartagChangeEntity> lambdaQuery);
+
+    List<String> getEartags(Integer type);
+
+    void batchInsertNewEartags(@Param("farmCode") String farmCode,@Param("changeType") Integer changeType, @Param("todaySet") HashSet<String> todaySet);
+
+    @Update("truncate table farm_eartag_change")
+    void truncateTable();
+}

+ 59 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/R.java

@@ -0,0 +1,59 @@
+package com.huimv.transmission.result;
+
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class R extends LinkedHashMap<String, Object> {
+
+    private static final long serialVersionUID = 1L;
+
+    public R() {
+        put("resultCode", 10000);
+        put("resultMsg", "查询成功");
+    }
+
+    public static R error() {
+        return error(10001, "未知异常,请联系管理员");
+    }
+
+    public static R error(String msg) {
+        return error(10001, msg);
+    }
+
+    public static R error(int code, String msg) {
+        R r = new R();
+        r.put("resultCode", code);
+        r.put("resultMsg", msg);
+        return r;
+    }
+
+    public static R ok(String msg) {
+        R r = new R();
+        r.put("resultMsg", msg);
+        return r;
+    }
+
+    public static R ok(Map<String, Object> map) {
+        R r = new R();
+        r.putAll(map);
+        return r;
+    }
+
+    public static R ok() {
+        return new R();
+    }
+
+    @Override
+    public R put(String key, Object value) {
+        super.put(key, value);
+        return this;
+    }
+
+    public static void main(String[] args) {
+        R r = new R();
+        System.out.println(r);
+
+    }
+}

+ 48 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRException.java

@@ -0,0 +1,48 @@
+package com.huimv.transmission.result;
+
+public class RRException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+	
+    private String msg;
+    private int code = 500;
+    
+    public RRException(String msg) {
+		super(msg);
+		this.msg = msg;
+	}
+	
+	public RRException(String msg, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+	}
+	
+	public RRException(String msg, int code) {
+		super(msg);
+		this.msg = msg;
+		this.code = code;
+	}
+	
+	public RRException(String msg, int code, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+	
+	
+}

+ 130 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRExceptionHandler.java

@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ * <p>
+ * https://www.renren.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.transmission.result;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.validation.ConstraintViolationException;
+import java.util.List;
+
+/**
+ * 异常处理器
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@RestControllerAdvice
+public class RRExceptionHandler {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 处理自定义异常
+     */
+    @ExceptionHandler(RRException.class)
+    public R handleRRException(RRException e) {
+        R r = new R();
+        r.put("resultCode", e.getCode());
+        r.put("resultMsg", e.getMessage());
+        logger.error(e.getMsg(), e);
+        return r;
+    }
+
+    @ExceptionHandler(NoHandlerFoundException.class)
+    public R handlerNoFoundException(Exception e) {
+        logger.error(e.getMessage(), e);
+        return R.error(404, "路径不存在,请检查路径是否正确");
+    }
+
+    @ExceptionHandler(DuplicateKeyException.class)
+    public R handleDuplicateKeyException(DuplicateKeyException e) {
+        logger.error(e.toString());
+        String message = e.getCause().getMessage();
+        String[] s = message.split(" ");
+        return R.error(600, s[2].replace("'", "") + " 已经存在!");
+    }
+
+//	@ExceptionHandler(AuthorizationException.class)
+//	public R handleAuthorizationException(AuthorizationException e){
+//		logger.error(e.getMessage(), e);
+//		return R.error("没有权限,请联系管理员授权");
+//	}
+//
+//	@ExceptionHandler(value = LimitAccessException.class)
+//	public R handleLimitAccessException(LimitAccessException e) {
+//		logger.error("LimitAccessException", e);
+//		return  R.error(429,e.getMessage());
+//	}
+
+    //当校验失败时,会抛出MethodArgumentNotValidException
+    //输出错误原因到前端
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public R handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
+        logger.error(ex.getMessage(), ex);
+        StringBuilder sb = new StringBuilder();
+        for (ObjectError error : ex.getBindingResult().getAllErrors()) {
+            if (error instanceof FieldError) {
+                FieldError e = (FieldError) error;
+                sb.append(e.getField()).append(e.getDefaultMessage()).append(" ");
+            }
+        }
+        return R.error(10001, sb.toString());
+    }
+
+    @ExceptionHandler(ConstraintViolationException.class)
+    public R handleConstraintViolationException(ConstraintViolationException e) {
+        logger.error(e.getMessage(), e);
+        StringBuilder sb = new StringBuilder();
+        e.getConstraintViolations().forEach(constraintViolation -> sb.append(constraintViolation.getMessage()).append(" "));
+        return R.error(10001, sb.toString().substring(0, sb.length() - 1));
+    }
+
+    @ExceptionHandler(MissingServletRequestParameterException.class)
+    public R handMissingServletRequestParameterException(MissingServletRequestParameterException e) {
+        logger.error(e.getMessage(), e);
+        return R.error(1001, e.getMessage());
+    }
+
+    @ExceptionHandler(DataIntegrityViolationException.class)
+    public R handDataIntegrityViolationException(DataIntegrityViolationException e) {
+        logger.error(e.getMessage(), e);
+        return R.error(10001, e.getCause().getMessage());
+    }
+
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    public R handHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
+        logger.error(e.getMessage(), e);
+        return R.error(10001, e.getMessage());
+    }
+
+    @ExceptionHandler(BindException.class)
+    public R handleBindException(BindException e) {
+        StringBuilder sb = new StringBuilder();
+        e.getFieldErrors().forEach(fieldError -> sb.append(fieldError.getDefaultMessage()).append(" "));
+        logger.error(e.getMessage(), e);
+        return R.error(10001, sb.toString().substring(0, sb.length() - 1));
+    }
+
+
+    @ExceptionHandler(Exception.class)
+    public R handleException(Exception e) {
+        logger.error(e.getMessage(), e);
+        return R.error();
+    }
+}

+ 29 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DailyTabulateDataService.java

@@ -0,0 +1,29 @@
+package com.huimv.transmission.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.transmission.entity.DailyTabulateDataEntity;
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.entity.vo.DailyTabulateDataVo;
+import com.huimv.transmission.utils.PageUtils;
+import org.apache.ibatis.annotations.Param;
+
+
+import java.util.Map;
+
+/**
+ * 耳标每日汇总表
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+public interface DailyTabulateDataService extends IService<DailyTabulateDataEntity> {
+
+    PageUtils queryPage(Map<String, Object> params);
+
+    IPage<DailyTabulateDataVo> getPigStockPage(PigStockForm pigStockForm);
+}
+

+ 23 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DataPushService.java

@@ -0,0 +1,23 @@
+package com.huimv.transmission.service;
+
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.utils.PageUtils;
+
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 10:23
+ */
+public interface DataPushService {
+
+    PageUtils getPigStock(PigStockForm pigStockForm);
+
+    PageUtils getNewPigStock(Integer currPage,Integer pageSize);
+
+    PageUtils getOffLinePigStock(Integer currPage,Integer pageSize);
+
+}

+ 22 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/EartagDataService.java

@@ -0,0 +1,22 @@
+package com.huimv.transmission.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.transmission.entity.EartagDataEntity;
+import com.huimv.transmission.entity.form.EartagForm;
+import com.huimv.transmission.utils.PageUtils;
+
+
+/**
+ * 
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+public interface EartagDataService extends IService<EartagDataEntity> {
+
+    void handleNewAndOffLineEartag();
+
+    PageUtils getEartag(EartagForm eartagForm);
+}
+

+ 18 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/FarmEartagChangeService.java

@@ -0,0 +1,18 @@
+package com.huimv.transmission.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.transmission.entity.FarmEartagChangeEntity;
+import com.huimv.transmission.entity.vo.ChangeEartagDataVo;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 17:46
+ */
+public interface FarmEartagChangeService extends IService<FarmEartagChangeEntity> {
+    IPage<ChangeEartagDataVo> getPigStockByChangeType(Integer currPage, Integer pageSize, Integer type);
+}

+ 53 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DailyTabulateDataServiceImpl.java

@@ -0,0 +1,53 @@
+package com.huimv.transmission.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.huimv.transmission.entity.DailyTabulateDataEntity;
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.entity.vo.DailyTabulateDataVo;
+import com.huimv.transmission.mapper.DailyTabulateDataDao;
+import com.huimv.transmission.service.DailyTabulateDataService;
+import com.huimv.transmission.utils.PageUtils;
+import com.huimv.transmission.utils.Query;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 耳标每日汇总表
+ *
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+@Service("dailyTabulateDataService")
+public class DailyTabulateDataServiceImpl extends ServiceImpl<DailyTabulateDataDao, DailyTabulateDataEntity> implements DailyTabulateDataService {
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        IPage<DailyTabulateDataEntity> page = this.page(
+                new Query<DailyTabulateDataEntity>().getPage(params),
+                new QueryWrapper<>()
+        );
+
+        return new PageUtils(page);
+    }
+
+    @Override
+    public IPage<DailyTabulateDataVo> getPigStockPage(PigStockForm pigStockForm) {
+        IPage<DailyTabulateDataVo> iPage = new Page<>(pigStockForm.getPageNo(), pigStockForm.getPageSize());
+        LambdaQueryWrapper<DailyTabulateDataEntity> lambdaQuery = Wrappers.lambdaQuery();
+        String yesterday = DateUtil.format(new Date(), "yyyy-MM-dd");
+        lambdaQuery.eq(DailyTabulateDataEntity::getStatisticDate, yesterday);
+
+        return baseMapper.getPigStockPage(iPage, lambdaQuery);
+
+    }
+}

+ 51 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DataPushServiceImpl.java

@@ -0,0 +1,51 @@
+package com.huimv.transmission.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.entity.vo.DailyTabulateDataVo;
+import com.huimv.transmission.entity.vo.ChangeEartagDataVo;
+import com.huimv.transmission.service.DailyTabulateDataService;
+import com.huimv.transmission.service.DataPushService;
+import com.huimv.transmission.service.FarmEartagChangeService;
+import com.huimv.transmission.utils.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 10:24
+ */
+@Service("dataPushService")
+public class DataPushServiceImpl implements DataPushService {
+
+    @Autowired
+    private DailyTabulateDataService dailyTabulateDataService;
+
+    @Autowired
+    private FarmEartagChangeService farmEartagChangeService;
+
+    @Override
+    public PageUtils getPigStock(PigStockForm pigStockForm) {
+        IPage<DailyTabulateDataVo> page = dailyTabulateDataService.getPigStockPage(pigStockForm);
+        return new PageUtils(page);
+    }
+
+    @Override
+    public PageUtils getNewPigStock(Integer currPage, Integer pageSize) {
+        return getPigStockByChangeType(currPage, currPage, 1);
+    }
+
+    @Override
+    public PageUtils getOffLinePigStock(Integer currPage, Integer pageSize) {
+        return getPigStockByChangeType(currPage, pageSize, 2);
+    }
+
+    private PageUtils getPigStockByChangeType(Integer currPage, Integer pageSize, Integer type) {
+        IPage<ChangeEartagDataVo> page = farmEartagChangeService.getPigStockByChangeType(currPage, pageSize, type);
+        return new PageUtils(page);
+    }
+}

+ 115 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/EartagDataServiceImpl.java

@@ -0,0 +1,115 @@
+package com.huimv.transmission.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.transmission.entity.BaseFarmInfoEntity;
+import com.huimv.transmission.entity.EartagDataEntity;
+import com.huimv.transmission.entity.NewAndOffLineEartagEntity;
+import com.huimv.transmission.entity.form.EartagForm;
+import com.huimv.transmission.entity.vo.EartagDataVo;
+import com.huimv.transmission.mapper.BaseFarmInfoDao;
+import com.huimv.transmission.mapper.EartagDataDao;
+import com.huimv.transmission.mapper.FarmEartagChangeDao;
+import com.huimv.transmission.result.RRException;
+import com.huimv.transmission.service.EartagDataService;
+import com.huimv.transmission.utils.PageUtils;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author yinhao
+ * @version ${version}
+ * @date 2021-07-24 16:29:33
+ */
+@Service("eartagDataService")
+public class EartagDataServiceImpl extends ServiceImpl<EartagDataDao, EartagDataEntity> implements EartagDataService {
+
+    @Autowired
+    private FarmEartagChangeDao farmEartagChangeDao;
+
+    @Autowired
+    private BaseFarmInfoDao baseFarmInfoDao;
+
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class)
+    public void handleNewAndOffLineEartag() {
+        List<NewAndOffLineEartagEntity> list = baseMapper.selectChangeEartagList();
+        HashSet<String> todaySet = new HashSet<>();
+        HashSet<String> todaySetTemp = new HashSet<>();
+        HashSet<String> beforeSet = new HashSet<>();
+
+        if (CollUtil.isEmpty(list)) {
+            farmEartagChangeDao.truncateTable();
+            return;
+        }
+
+        for (NewAndOffLineEartagEntity entity : list) {
+            String farmCode = entity.getFarmCode();
+            String todayEartags = entity.getTodayEartags();
+            if (StringUtils.isNotEmpty(todayEartags)) {
+                String[] split = todayEartags.split(",");
+                todaySet.addAll(Arrays.asList(split));
+                todaySetTemp.addAll(Arrays.asList(split));
+            }
+
+            String beforeEartags = entity.getBeforeEartags();
+            if (StringUtils.isNotEmpty(beforeEartags)) {
+                String[] split = beforeEartags.split(",");
+                beforeSet.addAll(Arrays.asList(split));
+            }
+
+            todaySet.removeAll(beforeSet);
+            beforeSet.removeAll(todaySetTemp);
+
+            farmEartagChangeDao.truncateTable();
+
+            if (CollUtil.isNotEmpty(todaySet)) {
+                farmEartagChangeDao.batchInsertNewEartags(farmCode, 1, todaySet);
+            }
+            if (CollUtil.isNotEmpty(beforeSet)) {
+                farmEartagChangeDao.batchInsertNewEartags(farmCode, 2, beforeSet);
+            }
+        }
+    }
+
+    @Override
+    public PageUtils getEartag(EartagForm eartagForm) {
+
+        String farmID = eartagForm.getFarmID();
+        if (StringUtils.isNotEmpty(farmID)) {
+            Integer count = baseFarmInfoDao.selectCount(Wrappers.<BaseFarmInfoEntity>lambdaQuery().eq(BaseFarmInfoEntity::getFarmCode, farmID).last("limit 1"));
+            if (count <= 0) {
+                throw new RRException("farmID不存在,请检查!", 10001);
+            }
+        }
+        String eartag = eartagForm.getEartag();
+        if (StringUtils.isNotEmpty(eartag)) {
+            int count = count(Wrappers.<EartagDataEntity>lambdaQuery().eq(EartagDataEntity::getEartagNo, eartag).last("limit 1"));
+            if (count <= 0) {
+                throw new RRException("耳标信息不存在,请检查!", 10001);
+            }
+        }
+
+        IPage<EartagDataVo> ipage = new Page<>(eartagForm.getPageNo(), eartagForm.getPageSize());
+
+        LambdaQueryWrapper<EartagDataEntity> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.ge(eartagForm.getStartDate() != null, EartagDataEntity::getTime, eartagForm.getStartDate())
+                .le(eartagForm.getEndDate() != null, EartagDataEntity::getTime, eartagForm.getEndDate())
+                .eq(farmID != null, EartagDataEntity::getFarmCode, farmID)
+                .like(eartag != null, EartagDataEntity::getEartagNo, eartag)
+                .orderByDesc(EartagDataEntity::getId);
+
+        IPage<EartagDataVo> page = baseMapper.selectByConditions(ipage, lambdaQuery);
+        return new PageUtils(page);
+    }
+}

+ 32 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/FarmEartagChangeServiceImpl.java

@@ -0,0 +1,32 @@
+package com.huimv.transmission.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.transmission.entity.FarmEartagChangeEntity;
+import com.huimv.transmission.entity.vo.ChangeEartagDataVo;
+import com.huimv.transmission.mapper.FarmEartagChangeDao;
+import com.huimv.transmission.service.FarmEartagChangeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/26 17:48
+ */
+@Service("farmEartagChangeService")
+public class FarmEartagChangeServiceImpl extends ServiceImpl<FarmEartagChangeDao, FarmEartagChangeEntity> implements FarmEartagChangeService {
+
+    @Override
+    public IPage<ChangeEartagDataVo> getPigStockByChangeType(Integer currPage, Integer pageSize, Integer type) {
+        IPage<ChangeEartagDataVo> iPage = new Page<>(currPage, pageSize);
+        LambdaQueryWrapper<FarmEartagChangeEntity> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(FarmEartagChangeEntity::getChangeType, type);
+        return baseMapper.getPigStockByChangeType(iPage, lambdaQuery);
+    }
+}

+ 163 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/task/DataProcessingTask.java

@@ -0,0 +1,163 @@
+package com.huimv.transmission.task;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.transmission.entity.form.PigStockForm;
+import com.huimv.transmission.result.R;
+import com.huimv.transmission.service.DataPushService;
+import com.huimv.transmission.service.EartagDataService;
+import com.huimv.transmission.utils.PageUtils;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 8:39
+ */
+@EnableAsync
+@Configuration
+public class DataProcessingTask {
+
+    @Autowired
+    private DataPushService dataPushService;
+
+    @Autowired
+    private EartagDataService eartagDataService;
+
+
+    @Async
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void getNewEartagList() {
+
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpPost httpPost = new HttpPost("http://127.0.0.1:8220/pig/recive");
+            httpPost.addHeader("Content-Type", "application/json");
+            httpClient = HttpClients.createDefault();
+
+            eartagDataService.handleNewAndOffLineEartag();
+
+            PageUtils page = dataPushService.getNewPigStock(1, 1000);
+            handleDataAndPush(page, httpPost, httpClient, 1);
+
+            int pageSize = page.getPageSize();
+            int totalPage = page.getTotalPage();
+            for (int i = 2; i <= totalPage; i++) {
+                PageUtils pigStock = dataPushService.getNewPigStock(i, pageSize);
+                handleDataAndPush(pigStock, httpPost, httpClient, 1);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Async
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void getOffLineEartagList() {
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpPost httpPost = new HttpPost("http://127.0.0.1:8220/pig/recive");
+            httpPost.addHeader("Content-Type", "application/json");
+            httpClient = HttpClients.createDefault();
+
+            eartagDataService.handleNewAndOffLineEartag();
+
+            PageUtils page = dataPushService.getOffLinePigStock(1, 1000);
+            handleDataAndPush(page, httpPost, httpClient, 2);
+
+            int pageSize = page.getPageSize();
+            int totalPage = page.getTotalPage();
+            for (int i = 2; i <= totalPage; i++) {
+                PageUtils pigStock = dataPushService.getOffLinePigStock(i, pageSize);
+                handleDataAndPush(pigStock, httpPost, httpClient, 2);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    private void handleDataAndPush(PageUtils page, HttpPost httpPost, CloseableHttpClient httpClient, Integer type) throws IOException {
+        R resultData = R.ok().put("resultData", page);
+        String string = null;
+        if (type == 2) {
+            string = JSONObject.toJSONString(resultData).replace("new", "eliminate");
+        } else {
+            string = JSONObject.toJSONString(resultData);
+        }
+        System.out.println(string);
+        httpPost.setEntity(new StringEntity(string, Charset.defaultCharset()));
+        httpClient.execute(httpPost);
+    }
+
+    @Async
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void pushPigStock() {
+
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpPost httpPost = new HttpPost("http://127.0.0.1:8220/dataPush/recive");
+            httpPost.addHeader("Content-Type", "application/json");
+            httpClient = HttpClients.createDefault();
+
+            PigStockForm pigStockForm = new PigStockForm(1,1000);
+            PageUtils page = dataPushService.getPigStock(pigStockForm);
+            R resultData = R.ok().put("resultData", page);
+            String string = JSONObject.toJSONString(resultData).replace("newCount", "new");
+            System.out.println(string);
+
+            httpPost.setEntity(new StringEntity(string, Charset.defaultCharset()));
+            httpClient.execute(httpPost);
+
+            int totalPage = page.getTotalPage();
+            for (int i = 2; i <= totalPage; i++) {
+                pigStockForm.setPageNo(i);
+                PageUtils pigStock = dataPushService.getPigStock(pigStockForm);
+                R result = R.ok().put("resultData", pigStock);
+                String jsonData = JSONObject.toJSONString(result).replace("newCount", "new");
+                httpPost.setEntity(new StringEntity(jsonData, Charset.defaultCharset()));
+                httpClient.execute(httpPost);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+}

Файловите разлики са ограничени, защото са твърде много
+ 131 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Constant.java


+ 112 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/PageUtils.java

@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.transmission.utils;
+
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页工具类
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@JSONType(orders={"totalCount","pageSize","totalPage","currPage","data"})
+public class PageUtils implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 总记录数
+	 */
+	private int totalCount;
+	/**
+	 * 每页记录数
+	 */
+	private int pageSize;
+	/**
+	 * 总页数
+	 */
+	private int totalPage;
+	/**
+	 * 当前页数
+	 */
+	private int currPage;
+	/**
+	 * 列表数据
+	 */
+	private List<?> data;
+	
+	/**
+	 * 分页
+	 * @param data        列表数据
+	 * @param totalCount  总记录数
+	 * @param pageSize    每页记录数
+	 * @param currPage    当前页数
+	 */
+	public PageUtils(List<?> data, int totalCount, int pageSize, int currPage) {
+		this.data = data;
+		this.totalCount = totalCount;
+		this.pageSize = pageSize;
+		this.currPage = currPage;
+		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
+	}
+
+	/**
+	 * 分页
+	 */
+	public PageUtils(IPage<?> page) {
+		this.data = page.getRecords();
+		this.totalCount = (int)page.getTotal();
+		this.pageSize = (int)page.getSize();
+		this.currPage = (int)page.getCurrent();
+		this.totalPage = (int)page.getPages();
+	}
+
+	public int getTotalCount() {
+		return totalCount;
+	}
+
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+
+	public int getPageSize() {
+		return pageSize;
+	}
+
+	public void setPageSize(int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public int getTotalPage() {
+		return totalPage;
+	}
+
+	public void setTotalPage(int totalPage) {
+		this.totalPage = totalPage;
+	}
+
+	public int getCurrPage() {
+		return currPage;
+	}
+
+	public void setCurrPage(int currPage) {
+		this.currPage = currPage;
+	}
+
+	public List<?> getData() {
+		return data;
+	}
+
+	public void setData(List<?> data) {
+		this.data = data;
+	}
+	
+}

+ 76 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Query.java

@@ -0,0 +1,76 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.transmission.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Map;
+
+/**
+ * 查询参数
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class Query<T> {
+
+    public IPage<T> getPage(Map<String, Object> params) {
+        return this.getPage(params, null, false);
+    }
+
+    public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
+        //分页参数
+        long curPage = 1;
+        long limit = 10;
+
+        if(params.get(Constant.PAGE) != null){
+            curPage = Long.parseLong((String)params.get(Constant.PAGE));
+        }
+        if(params.get(Constant.LIMIT) != null){
+            limit = Long.parseLong((String)params.get(Constant.LIMIT));
+        }
+
+        //分页对象
+        Page<T> page = new Page<>(curPage, limit);
+
+        //分页参数
+        params.put(Constant.PAGE, page);
+
+        //排序字段
+        //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
+        String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
+        String order = (String)params.get(Constant.ORDER);
+
+
+        //前端字段排序
+        if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
+            if(Constant.ASC.equalsIgnoreCase(order)) {
+                return  page.addOrder(OrderItem.asc(orderField));
+            }else {
+                return page.addOrder(OrderItem.desc(orderField));
+            }
+        }
+
+        //没有排序字段,则不排序
+        if(StringUtils.isBlank(defaultOrderField)){
+            return page;
+        }
+
+        //默认排序
+        if(isAsc) {
+            page.addOrder(OrderItem.asc(defaultOrderField));
+        }else {
+            page.addOrder(OrderItem.desc(defaultOrderField));
+        }
+
+        return page;
+    }
+}

+ 50 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/SQLFilter.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.transmission.utils;
+
+import com.huimv.transmission.result.RRException;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * SQL过滤
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class SQLFilter {
+
+    /**
+     * SQL注入过滤
+     * @param str  待验证的字符串
+     */
+    public static String sqlInject(String str){
+        if(StringUtils.isBlank(str)){
+            return null;
+        }
+        //去掉'|"|;|\字符
+        str = StringUtils.replace(str, "'", "");
+        str = StringUtils.replace(str, "\"", "");
+        str = StringUtils.replace(str, ";", "");
+        str = StringUtils.replace(str, "\\", "");
+
+        //转换成小写
+        str = str.toLowerCase();
+
+        //非法字符
+        String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};
+
+        //判断是否包含非法字符
+        for(String keyword : keywords){
+            if(str.indexOf(keyword) != -1){
+                throw new RRException("包含非法字符");
+            }
+        }
+
+        return str;
+    }
+}

+ 24 - 5
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/application-dev.yml

@@ -1,21 +1,25 @@
 server:
-  port: 8230
+  port: 8220
 
 spring:
   datasource:
-    url: jdbc:mysql://192.168.1.7:3306/huimv-video2_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.1.7:3306/smart_eartag_data_platform?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
     username: root
     password: hm123456
     driver-class-name: com.mysql.cj.jdbc.Driver
   jpa:
-    hibernate:
-      ddl-auto: update  #validate
+    #    hibernate:
+    #      ddl-auto: update  #validate
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     show-sql: true
   servlet:
     multipart:
       max-file-size: 100MB
       max-request-size: 1000MB
+    # jackson时间格式化
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
   mvc:
     view:
       prefix: /
@@ -33,4 +37,19 @@ spring:
 #        max-wait: -1
 #        max-idle: 10
 #        min-idle: 0
-#    timeout: 5000
+#    timeout: 5000
+
+# mybatis-plus相关配置
+mybatis-plus:
+  type-aliases-package: com.huimv.*.entity
+  global-config:
+    banner: false
+    db-config:
+      id-type: auto
+  #原生配置
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+    call-setters-on-nulls: true
+    jdbc-type-for-null: 'null'
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 18 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/DailyTabulateDataDao.xml

@@ -0,0 +1,18 @@
+<?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="com.huimv.transmission.mapper.DailyTabulateDataDao">
+
+
+    <select id="getPigStockPage" resultType="com.huimv.transmission.entity.vo.DailyTabulateDataVo">
+        SELECT
+          farm_code farmID,
+          stock_total quantity,
+          stock_new new_count,
+          offline_no eliminate,
+          statistic_date time
+        FROM daily_tabulate_data
+        ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 78 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/EartagDataDao.xml

@@ -0,0 +1,78 @@
+<?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="com.huimv.transmission.mapper.EartagDataDao">
+
+    <!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.huimv.transmission.entity.EartagDataEntity" id="eartagDataMap">
+        <result property="id" column="id"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="eartagNo" column="eartag_no"/>
+        <result property="time" column="time"/>
+        <result property="dayAge" column="day_age"/>
+        <result property="dayAge2" column="day_age2"/>
+        <result property="earTemp" column="ear_temp"/>
+        <result property="exercise" column="exercise"/>
+        <result property="pigpen" column="pigpen"/>
+        <result property="envTemp" column="env_temp"/>
+        <result property="bat" column="bat"/>
+        <result property="rssi" column="rssi"/>
+        <result property="head" column="head"/>
+        <result property="command" column="command"/>
+        <result property="version" column="version"/>
+        <result property="frameSerialNo" column="frame_serial_no"/>
+        <result property="rebootTimes" column="reboot_times"/>
+        <result property="prepareField" column="prepare_field"/>
+        <result property="chk" column="chk"/>
+        <result property="tail" column="tail"/>
+    </resultMap>
+
+    <select id="selectChangeEartagList" resultType="com.huimv.transmission.entity.NewAndOffLineEartagEntity">
+        SELECT
+        today.farm_code,
+        today.today_eartags,
+        old.before_eartags
+        FROM
+            (
+            SELECT
+            ed.farm_code,
+            GROUP_CONCAT( DISTINCT ed.eartag_no ) AS today_eartags
+            FROM
+            eartag_data ed
+            WHERE
+            DATE_FORMAT( ed.time, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
+            AND farm_code IS NOT NULL
+            GROUP BY
+            ed.farm_code
+            ) today
+        LEFT JOIN
+            (
+            SELECT
+            ed.farm_code,
+            GROUP_CONCAT( DISTINCT ed.eartag_no ) AS before_eartags
+            FROM
+            eartag_data ed
+            WHERE
+            DATE_FORMAT( ed.time, '%Y-%m-%d' ) &lt; DATE_FORMAT( NOW(), '%Y-%m-%d' )
+            GROUP BY
+            ed.farm_code
+            ) old
+        ON today.farm_code = old.farm_code
+    </select>
+
+
+    <select id="selectByConditions" resultType="com.huimv.transmission.entity.vo.EartagDataVo">
+        SELECT
+          farm_code farm_ID,
+          eartag_no eartag,
+          time time2,
+          ear_temp temp1,
+          bat,
+          rssi,
+          env_temp temp2
+        FROM eartag_data
+        ${ew.customSqlSegment}
+    </select>
+
+
+</mapper>

+ 41 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/FarmEartagChangeDao.xml

@@ -0,0 +1,41 @@
+<?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="com.huimv.transmission.mapper.FarmEartagChangeDao">
+
+
+    <resultMap id="ChangeEartagDataVoMap" type="com.huimv.transmission.entity.vo.ChangeEartagDataVo">
+        <result column="farm_id" property="farmID"/>
+        <result column="change_type" property="type"/>
+        <collection column="{farmId=farm_id,type=change_type}" property="newEartagNo"
+                    select="com.huimv.transmission.mapper.FarmEartagChangeDao.getEartags">
+        </collection>
+    </resultMap>
+
+    <select id="getPigStockByChangeType" resultMap="ChangeEartagDataVoMap">
+        SELECT distinct
+          farm_id,change_type
+        FROM
+          farm_eartag_change
+        ${ew.customSqlSegment}
+    </select>
+
+    <select id="getEartags" resultType="string">
+        select eartag_no
+        from farm_eartag_change
+        where farm_id = #{farmId} AND change_type = #{type}
+    </select>
+
+
+    <insert id="batchInsertNewEartags">
+        INSERT INTO farm_eartag_change(farm_id, eartag_no, change_type) VALUES
+        <foreach collection="todaySet" separator="," item="item">
+            (
+            #{farmCode},
+            #{item},
+            #{changeType}
+            )
+        </foreach>
+    </insert>
+</mapper>

+ 94 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/test/java/com.huimv.transmission/HuimvSmartEartagDataManagerTest.java

@@ -0,0 +1,94 @@
+package com.huimv.transmission;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.transmission.result.R;
+import com.huimv.transmission.service.DataPushService;
+import com.huimv.transmission.service.EartagDataService;
+import com.huimv.transmission.utils.PageUtils;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/27 13:24
+ */
+@SpringBootTest
+public class HuimvSmartEartagDataManagerTest {
+
+    @Autowired
+    private DataPushService dataPushService;
+
+    @Autowired
+    private EartagDataService eartagDataService;
+
+    @Test
+    void contextLoads() throws IOException {
+//        PageUtils page = dataPushService.getPigStock(1,1000);
+//        HttpPost httpPost = new HttpPost("http://127.0.0.1:8220/dataPush/recive");
+//        httpPost.addHeader("Content-Type", "application/json");
+//        R resultData = R.ok().put("resultData", page);
+//        String string = JSONObject.toJSONString(resultData).replace("newCount","new");
+//        System.out.println(string);
+//        httpPost.setEntity(new StringEntity(string, Charset.defaultCharset()));
+//        CloseableHttpClient httpClient = HttpClients.createDefault();
+//        httpClient.execute(httpPost);
+//        httpClient.close();
+//        eartagDataService.handleNewAndOffLineEartag();
+
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpPost httpPost = new HttpPost("http://127.0.0.1:8220/pig/recive");
+            httpPost.addHeader("Content-Type", "application/json");
+            httpClient = HttpClients.createDefault();
+
+            eartagDataService.handleNewAndOffLineEartag();
+
+            PageUtils page = dataPushService.getOffLinePigStock(1, 1000);
+            handleDataAndPush(page, httpPost, httpClient,2);
+
+            int pageSize = page.getPageSize();
+            int totalPage = page.getTotalPage();
+            for (int i = 2; i <= totalPage; i++) {
+                PageUtils pigStock = dataPushService.getOffLinePigStock(i, pageSize);
+                handleDataAndPush(pigStock, httpPost, httpClient,2);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    private void handleDataAndPush(PageUtils page, HttpPost httpPost, CloseableHttpClient httpClient, Integer type) throws IOException {
+        R resultData = R.ok().put("resultData", page);
+        String string = null;
+        if (type == 2) {
+            string = JSONObject.toJSONString(resultData).replace("new", "eliminate");
+        } else {
+            string = JSONObject.toJSONString(resultData);
+        }
+        System.out.println(string);
+        httpPost.setEntity(new StringEntity(string, Charset.defaultCharset()));
+        httpClient.execute(httpPost);
+    }
+}

+ 22 - 0
smart.eartag.data.platform/pom.xml

@@ -54,6 +54,16 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.62</version>
@@ -63,6 +73,18 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <!--JSR303校验validation-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <!--hutool-->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>LATEST</version>
+        </dependency>
 
     </dependencies>