wwh 7 ヶ月 前
コミット
0f0dd32933
96 ファイル変更2705 行追加113 行削除
  1. 63 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedBatchController.java
  2. 10 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedCureController.java
  3. 5 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedFeedController.java
  4. 42 1
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedMuskInfoController.java
  5. 18 4
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedMuskStockController.java
  6. 11 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedTuppingController.java
  7. 15 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedVaccinationController.java
  8. 35 1
      musk/src/main/java/com/huimv/farm/musk/breed/controller/MuskEarmarkController.java
  9. 20 0
      musk/src/main/java/com/huimv/farm/musk/breed/controller/MuskEarmarkRankController.java
  10. 66 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedBatch.java
  11. 1 1
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedCure.java
  12. 2 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedFeed.java
  13. 4 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMedicine.java
  14. 10 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMuskInfo.java
  15. 5 21
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMuskStock.java
  16. 3 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedVaccination.java
  17. 51 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/MuskEarmarkRank.java
  18. 55 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/AppMuskInfoVo.java
  19. 16 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/EarmarkActVo.java
  20. 22 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/MuskStockVo.java
  21. 12 0
      musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/VaccinationVo.java
  22. 16 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedBatchMapper.java
  23. 8 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedFeedMapper.java
  24. 9 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedMuskInfoMapper.java
  25. 7 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedMuskStockMapper.java
  26. 7 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedVaccinationMapper.java
  27. 8 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/MuskEarmarkMapper.java
  28. 16 0
      musk/src/main/java/com/huimv/farm/musk/breed/mapper/MuskEarmarkRankMapper.java
  29. 27 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedBatchService.java
  30. 2 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedFeedService.java
  31. 1 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMedicineService.java
  32. 11 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMuskInfoService.java
  33. 8 1
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMuskStockService.java
  34. 2 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedVaccinationService.java
  35. 16 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/IMuskEarmarkRankService.java
  36. 117 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedBatchServiceImpl.java
  37. 67 4
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedFeedServiceImpl.java
  38. 51 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedLeaveServiceImpl.java
  39. 29 2
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMedicineServiceImpl.java
  40. 239 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMuskInfoServiceImpl.java
  41. 156 15
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMuskStockServiceImpl.java
  42. 36 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedTransferServiceImpl.java
  43. 14 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedVaccinationServiceImpl.java
  44. 20 0
      musk/src/main/java/com/huimv/farm/musk/breed/service/impl/MuskEarmarkRankServiceImpl.java
  45. 39 17
      musk/src/main/java/com/huimv/farm/musk/controller/BaseBuildingController.java
  46. 11 0
      musk/src/main/java/com/huimv/farm/musk/controller/DevEnergyController.java
  47. 16 1
      musk/src/main/java/com/huimv/farm/musk/controller/DevEnvController.java
  48. 8 0
      musk/src/main/java/com/huimv/farm/musk/controller/SysCameraController.java
  49. 204 0
      musk/src/main/java/com/huimv/farm/musk/controller/SysCameraFunctionController.java
  50. 1 1
      musk/src/main/java/com/huimv/farm/musk/entity/BaseBuilding.java
  51. 1 1
      musk/src/main/java/com/huimv/farm/musk/entity/DevWarning.java
  52. 61 0
      musk/src/main/java/com/huimv/farm/musk/entity/SysCameraFunction.java
  53. 15 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/DataVo.java
  54. 16 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/DataVo2.java
  55. 23 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/EnvDataVo.java
  56. 22 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/EnvDataVo2.java
  57. 21 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/FeedDataVo.java
  58. 3 1
      musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeBasePigpen.java
  59. 23 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeBasePigpen2.java
  60. 18 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeFunctionPage.java
  61. 31 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeMuskInfo.java
  62. 24 0
      musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeSysCameraFunction.java
  63. 17 0
      musk/src/main/java/com/huimv/farm/musk/health/controller/HealthThresholdController.java
  64. 31 0
      musk/src/main/java/com/huimv/farm/musk/health/controller/HealthWarningController.java
  65. 5 1
      musk/src/main/java/com/huimv/farm/musk/health/entity/HealthData.java
  66. 3 0
      musk/src/main/java/com/huimv/farm/musk/health/entity/HealthThreshold.java
  67. 5 1
      musk/src/main/java/com/huimv/farm/musk/health/entity/HealthWarning.java
  68. 7 0
      musk/src/main/java/com/huimv/farm/musk/health/mapper/HealthDataMapper.java
  69. 1 0
      musk/src/main/java/com/huimv/farm/musk/health/service/impl/HealthThresholdServiceImpl.java
  70. 7 0
      musk/src/main/java/com/huimv/farm/musk/mapper/DevEnergyMapper.java
  71. 7 0
      musk/src/main/java/com/huimv/farm/musk/mapper/DevEnvMapper.java
  72. 16 0
      musk/src/main/java/com/huimv/farm/musk/mapper/SysCameraFunctionMapper.java
  73. 5 2
      musk/src/main/java/com/huimv/farm/musk/service/IBaseBuildingService.java
  74. 6 0
      musk/src/main/java/com/huimv/farm/musk/service/IDevEnergyService.java
  75. 9 0
      musk/src/main/java/com/huimv/farm/musk/service/IDevEnvService.java
  76. 16 0
      musk/src/main/java/com/huimv/farm/musk/service/ISysCameraFunctionService.java
  77. 139 13
      musk/src/main/java/com/huimv/farm/musk/service/impl/BaseBuildingServiceImpl.java
  78. 133 10
      musk/src/main/java/com/huimv/farm/musk/service/impl/DevEnergyServiceImpl.java
  79. 109 13
      musk/src/main/java/com/huimv/farm/musk/service/impl/DevEnvServiceImpl.java
  80. 20 0
      musk/src/main/java/com/huimv/farm/musk/service/impl/SysCameraFunctionServiceImpl.java
  81. 2 2
      musk/src/main/java/com/huimv/farm/musk/timer/DevTimer.java
  82. 79 0
      musk/src/main/java/com/huimv/farm/musk/timer/HealthTimer.java
  83. 22 0
      musk/src/main/java/com/huimv/farm/musk/timer/UpdateDayAge.java
  84. 72 0
      musk/src/main/java/com/huimv/farm/musk/timer/UpdateEarmarkRank.java
  85. 38 0
      musk/src/main/java/com/huimv/farm/musk/timer/UpdateStock.java
  86. 12 0
      musk/src/main/resources/com/huimv/farm/musk/mapper/DevEnergyMapper.xml
  87. 12 0
      musk/src/main/resources/com/huimv/farm/musk/mapper/DevEnvMapper.xml
  88. 5 0
      musk/src/main/resources/mapper/BreedBatchMapper.xml
  89. 8 0
      musk/src/main/resources/mapper/BreedFeedMapper.xml
  90. 15 0
      musk/src/main/resources/mapper/BreedMuskInfoMapper.xml
  91. 7 0
      musk/src/main/resources/mapper/BreedMuskStockMapper.xml
  92. 5 0
      musk/src/main/resources/mapper/BreedVaccinationMapper.xml
  93. 6 0
      musk/src/main/resources/mapper/HealthDataMapper.xml
  94. 6 0
      musk/src/main/resources/mapper/MuskEarmarkMapper.xml
  95. 5 0
      musk/src/main/resources/mapper/MuskEarmarkRankMapper.xml
  96. 5 0
      musk/src/main/resources/mapper/SysCameraFunctionMapper.xml

+ 63 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedBatchController.java

@@ -0,0 +1,63 @@
+package com.huimv.farm.musk.breed.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.huimv.farm.musk.breed.entity.BreedBatch;
+import com.huimv.farm.musk.breed.entity.BreedFeed;
+import com.huimv.farm.musk.breed.service.IBreedBatchService;
+import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 编组管理 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-19
+ */
+@RestController
+@RequestMapping("/breed-batch")
+@CrossOrigin
+public class BreedBatchController {
+
+    @Autowired
+    private IBreedBatchService batchService;
+
+
+    @RequestMapping("/listPage")
+    public Result listPage(@RequestBody Map<String, String> paramsMap) {
+        return batchService.listPage(paramsMap);
+    }
+
+    @RequestMapping("/add")
+    public Result add(@RequestBody BreedBatch breedBatch) {
+        return batchService.add(breedBatch);
+    }
+
+    @RequestMapping("/edit")
+    public Result edit(@RequestBody BreedBatch breedBatch) {
+        return batchService.edit(breedBatch);
+    }
+    @RequestMapping("/remove")
+    public Result remove(@RequestBody Map<String, String> paramsMap) {
+        return batchService.remove(paramsMap);
+    }
+
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String batchName = paramsMap.get("batchName");
+        return new Result(ResultCode.SUCCESS, batchService.list(new QueryWrapper<BreedBatch>().eq("farm_id", farmId)
+                .like(StringUtils.isNotBlank(batchName), "batch_name", batchName)));
+    }
+}

+ 10 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedCureController.java

@@ -1,10 +1,12 @@
 package com.huimv.farm.musk.breed.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.breed.entity.BreedCure;
 import com.huimv.farm.musk.breed.entity.BreedInspect;
 import com.huimv.farm.musk.breed.service.IBreedCureService;
 import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -12,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -49,4 +52,11 @@ public class BreedCureController {
     }
 
 
+    //大屏疾病治疗记录
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<BreedCure> list = cureService.list(new QueryWrapper<BreedCure>().eq("farm_id", farmId).orderByDesc("create_time"));
+        return new Result(ResultCode.SUCCESS, list);
+    }
 }

+ 5 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedFeedController.java

@@ -48,4 +48,9 @@ public class BreedFeedController {
         return feedService.remove(paramsMap);
     }
 
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        return feedService.list(paramsMap);
+    }
+
 }

+ 42 - 1
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedMuskInfoController.java

@@ -2,6 +2,7 @@ package com.huimv.farm.musk.breed.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
 import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
 import com.huimv.farm.musk.common.utils.Result;
@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -53,8 +55,47 @@ public class BreedMuskInfoController {
     @RequestMapping("/list")
     public Result list(@RequestBody Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
+        String muskId = paramsMap.get("muskId");
+        String stage = paramsMap.get("stage");
         QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("farm_id", farmId).eq("is_leave", 0);
+        queryWrapper.eq("farm_id", farmId).eq("is_leave", 0)
+                .eq(StringUtils.isNotBlank(muskId), "musk_id", muskId)
+                .eq(StringUtils.isNotBlank(stage),"stage",stage);
+        List<BreedMuskInfo> list = muskInfoService.list(queryWrapper);
+        if (list.size() == 0) {
+            return new Result(10001, "", false);
+        } else {
+            return new Result(ResultCode.SUCCESS,list);
+        }
+
+    }
+
+    //谱系追踪
+    @RequestMapping("/pedigree")
+    public Result pedigree(@RequestBody Map<String, String> paramsMap) {
+        return muskInfoService.pedigree(paramsMap);
+    }
+
+    //app档案登记页面
+    @RequestMapping("/appMuskInfo")
+    public Result appMuskInfo(@RequestBody Map<String, String> paramsMap) {
+        return muskInfoService.appMuskInfo(paramsMap);
+    }
+
+    //app使用未绑定的list
+    @RequestMapping("/listApp")
+    public Result listApp(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String isBatch = paramsMap.get("isBatch");
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id",farmId);
+        if ("0".equals(isBatch)) {
+            queryWrapper.eq("is_batch", 0);
+        } else {
+            queryWrapper.eq("is_batch", 1);
+        }
+
+
         return new Result(ResultCode.SUCCESS, muskInfoService.list(queryWrapper));
     }
 }

+ 18 - 4
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedMuskStockController.java

@@ -30,14 +30,16 @@ public class BreedMuskStockController {
     @Autowired
     private IBreedMuskStockService stockService;
 
-    @RequestMapping("/listPage")
+    //大屏存栏结构统计
+    @RequestMapping("/list")
     public Result listPage(@RequestBody Map<String, String> paramsMap) {
         return stockService.listPage(paramsMap);
     }
 
-    @RequestMapping("/add")
-    public Result add(@RequestBody BreedMuskStock muskStock) {
-        return stockService.add(muskStock);
+    //存栏数量变化曲线
+    @RequestMapping("/listDetail")
+    public Result listDetail(@RequestBody Map<String, String> paramsMap) {
+        return stockService.listDetail(paramsMap);
     }
 
     @RequestMapping("/edit")
@@ -48,4 +50,16 @@ public class BreedMuskStockController {
     public Result remove(@RequestBody Map<String, String> paramsMap) {
         return stockService.remove(paramsMap);
     }
+
+    //健康监测横栏
+    @RequestMapping("/listTop")
+    public Result listTop(@RequestBody Map<String, String> paramsMap) {
+        return stockService.listTop(paramsMap);
+    }
+
+    //养殖档案横栏
+    @RequestMapping("/listStock")
+    public Result listStock(@RequestBody Map<String, String> paramsMap) {
+        return stockService.listStock(paramsMap);
+    }
 }

+ 11 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedTuppingController.java

@@ -1,10 +1,13 @@
 package com.huimv.farm.musk.breed.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.breed.entity.BreedCure;
 import com.huimv.farm.musk.breed.entity.BreedTupping;
+import com.huimv.farm.musk.breed.entity.BreedVaccination;
 import com.huimv.farm.musk.breed.service.IBreedTuppingService;
 import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -48,4 +51,12 @@ public class BreedTuppingController {
         return tuppingService.remove(paramsMap);
     }
 
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        QueryWrapper<BreedTupping> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).orderByDesc("create_time");
+        return new Result(ResultCode.SUCCESS, tuppingService.list(queryWrapper));
+    }
+
 }

+ 15 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/BreedVaccinationController.java

@@ -1,10 +1,12 @@
 package com.huimv.farm.musk.breed.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.breed.entity.BreedMuskStock;
 import com.huimv.farm.musk.breed.entity.BreedVaccination;
 import com.huimv.farm.musk.breed.service.IBreedVaccinationService;
 import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -48,4 +50,17 @@ public class BreedVaccinationController {
         return vaccinationService.remove(paramsMap);
     }
 
+
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        QueryWrapper<BreedVaccination> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).orderByDesc("create_time");
+        return new Result(ResultCode.SUCCESS, vaccinationService.list(queryWrapper));
+    }
+
+    @RequestMapping("/listCount")
+    public Result listCount(@RequestBody Map<String, String> paramsMap) {
+        return vaccinationService.listCount(paramsMap);
+    }
 }

+ 35 - 1
musk/src/main/java/com/huimv/farm/musk/breed/controller/MuskEarmarkController.java

@@ -3,9 +3,15 @@ package com.huimv.farm.musk.breed.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.breed.entity.MuskEarmark;
+import com.huimv.farm.musk.breed.entity.MuskEarmarkRank;
+import com.huimv.farm.musk.breed.entity.vo.EarmarkActVo;
+import com.huimv.farm.musk.breed.mapper.MuskEarmarkMapper;
+import com.huimv.farm.musk.breed.service.IMuskEarmarkRankService;
 import com.huimv.farm.musk.breed.service.IMuskEarmarkService;
+import com.huimv.farm.musk.common.utils.DataUill;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.health.entity.HealthData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -13,6 +19,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -30,11 +38,37 @@ import java.util.Map;
 public class MuskEarmarkController {
     @Autowired
     private IMuskEarmarkService earmarkService;
+    @Autowired
+    private IMuskEarmarkRankService rankService;
+    @Autowired
+    private MuskEarmarkMapper earmarkMapper;
 
     @RequestMapping("/list")
     public Result list(@RequestBody Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
         List<MuskEarmark> earmarks = earmarkService.list(new QueryWrapper<MuskEarmark>().eq("farm_id", farmId));
-        return new Result(ResultCode.SUCCESS,earmarks);
+        return new Result(ResultCode.SUCCESS, earmarks);
+    }
+
+    //大屏物联监测的设备在线率
+    @RequestMapping("/earmarkRank")
+    public Result EarmarkRank(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7);
+        QueryWrapper<MuskEarmarkRank> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("farm_id", farmId).ge("create_time", calendar.getTime());
+        List<MuskEarmarkRank> ranks = rankService.list(queryWrapper);
+        return new Result(ResultCode.SUCCESS,ranks);
+    }
+    //大屏运动检测
+    @RequestMapping("/earmarkAct")
+    public Result EarmarkAct(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Date timesmorning = DataUill.getTimesmorning();
+        QueryWrapper<HealthData> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("farm_id", farmId).ge("create_time",timesmorning);
+        List<EarmarkActVo> earmarkActVos = earmarkMapper.listScreen(queryWrapper);
+        return new Result(ResultCode.SUCCESS,earmarkActVos);
     }
 }

+ 20 - 0
musk/src/main/java/com/huimv/farm/musk/breed/controller/MuskEarmarkRankController.java

@@ -0,0 +1,20 @@
+package com.huimv.farm.musk.breed.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 设备在线率统计 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-06
+ */
+@RestController
+@RequestMapping("/musk-earmark-rank")
+public class MuskEarmarkRankController {
+
+}

+ 66 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedBatch.java

@@ -0,0 +1,66 @@
+package com.huimv.farm.musk.breed.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 编组管理
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("breed_batch")
+public class BreedBatch implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 编组编码
+     */
+    private String breedMusk;
+
+    /**
+     * 编组名称
+     */
+    private String batchName;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 牧场编码
+     */
+    private Integer farmId;
+
+    /**
+     * 操作人
+     */
+    private String registerUser;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 1 - 1
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedCure.java

@@ -54,7 +54,7 @@ public class BreedCure implements Serializable {
     /**
      * 治疗效果
      */
-    private String cureResult;
+    private Integer cureResult;
 
     /**
      * 创建日期

+ 2 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedFeed.java

@@ -67,5 +67,7 @@ public class BreedFeed implements Serializable {
      */
     private Integer farmId;
 
+    private Integer isBatch;
+
 
 }

+ 4 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMedicine.java

@@ -57,5 +57,9 @@ public class BreedMedicine implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date createTime;
 
+    private String muskId;
 
+    private Integer isBatch;
+
+    private Integer batchNum;
 }

+ 10 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMuskInfo.java

@@ -113,5 +113,15 @@ public class BreedMuskInfo implements Serializable {
      */
     private Integer act;
 
+    private Integer stage;
+
+    private Integer batchNum;
+
+    private String batchName;
+
+    private Integer appStatus;
+
+    private Integer isBatch;
+
 
 }

+ 5 - 21
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedMuskStock.java

@@ -31,30 +31,15 @@ public class BreedMuskStock implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    /**
-     * 品种
-     */
-    private String breed;
 
-    /**
-     * 性别0母1公
-     */
-    private Integer sex;
+    private Integer maleNumber;
 
-    /**
-     * 养殖阶段
-     */
-    private String stage;
 
-    /**
-     * 栋舍名称
-     */
-    private String unitName;
+    private Integer femaleNumber;
+
+
+    private Integer youngNumber;
 
-    /**
-     * 栋舍id
-     */
-    private Integer unitId;
 
     /**
      * 牧场编码
@@ -68,7 +53,6 @@ public class BreedMuskStock implements Serializable {
     private Date createTime;
 
 
-    private Integer number;
 
 
 }

+ 3 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/BreedVaccination.java

@@ -52,5 +52,8 @@ public class BreedVaccination implements Serializable {
      */
     private Integer farmId;
 
+    private String dosage;
+
+    private Integer number;
 
 }

+ 51 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/MuskEarmarkRank.java

@@ -0,0 +1,51 @@
+package com.huimv.farm.musk.breed.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 设备在线率统计
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("musk_earmark_rank")
+public class MuskEarmarkRank implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 在线率统计
+     */
+    private String rankValue;
+
+    /**
+     * 牧场编码
+     */
+    private Integer farmId;
+
+
+}

+ 55 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/AppMuskInfoVo.java

@@ -0,0 +1,55 @@
+package com.huimv.farm.musk.breed.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class AppMuskInfoVo {
+
+    private String unitName;
+
+    private String muskId;
+
+    private Integer batchNum;
+
+    private String batchName;
+
+    private Integer unitId;
+
+    private Integer appStatus;
+
+    private Integer parentId;
+
+    private Integer isLeave;
+
+
+    private String breed;
+
+    private Integer sex;
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date birthDate;
+
+    private String inspectResult;
+
+    private String weight;
+
+    private String femaleId;
+
+    private String maleId;
+
+    private Integer dayNum;
+
+    private Integer farmId;
+
+    private String temp;
+
+    private Integer act;
+
+    private Integer stage;
+
+
+}

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/EarmarkActVo.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.breed.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EarmarkActVo {
+
+    private String actValue;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 22 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/MuskStockVo.java

@@ -0,0 +1,22 @@
+package com.huimv.farm.musk.breed.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MuskStockVo {
+
+    private Integer maleNumber;
+
+
+    private Integer femaleNumber;
+
+
+    private Integer youngNumber;
+
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+}

+ 12 - 0
musk/src/main/java/com/huimv/farm/musk/breed/entity/vo/VaccinationVo.java

@@ -0,0 +1,12 @@
+package com.huimv.farm.musk.breed.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class VaccinationVo {
+
+    private String vaccinationName;
+
+    private Integer numbers;
+
+}

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedBatchMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.breed.mapper;
+
+import com.huimv.farm.musk.breed.entity.BreedBatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 编组管理 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-19
+ */
+public interface BreedBatchMapper extends BaseMapper<BreedBatch> {
+
+}

+ 8 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedFeedMapper.java

@@ -1,7 +1,14 @@
 package com.huimv.farm.musk.breed.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.breed.entity.BreedFeed;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.entity.vo.DataVo;
+import com.huimv.farm.musk.entity.vo.FeedDataVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BreedFeedMapper extends BaseMapper<BreedFeed> {
 
+    List<FeedDataVo> listFeed(@Param(Constants.WRAPPER) QueryWrapper<BreedFeed> queryWrapper);
 }

+ 9 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedMuskInfoMapper.java

@@ -1,7 +1,13 @@
 package com.huimv.farm.musk.breed.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.breed.entity.vo.AppMuskInfoVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BreedMuskInfoMapper extends BaseMapper<BreedMuskInfo> {
 
+    void updateDayAge();
+
+    List<AppMuskInfoVo> listMuskAndBuild(String farmId);
 }

+ 7 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedMuskStockMapper.java

@@ -1,7 +1,13 @@
 package com.huimv.farm.musk.breed.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.breed.entity.BreedMuskStock;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.breed.entity.vo.MuskStockVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BreedMuskStockMapper extends BaseMapper<BreedMuskStock> {
 
+    List<MuskStockVo> listScreen(@Param(Constants.WRAPPER) QueryWrapper<BreedMuskStock> queryWrapper);
 }

+ 7 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/BreedVaccinationMapper.java

@@ -1,7 +1,13 @@
 package com.huimv.farm.musk.breed.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.breed.entity.BreedVaccination;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.breed.entity.vo.VaccinationVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BreedVaccinationMapper extends BaseMapper<BreedVaccination> {
 
+    List<VaccinationVo> listCount(@Param(Constants.WRAPPER) QueryWrapper<BreedVaccination> queryWrapper);
 }

+ 8 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/MuskEarmarkMapper.java

@@ -1,7 +1,14 @@
 package com.huimv.farm.musk.breed.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.breed.entity.MuskEarmark;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.breed.entity.vo.EarmarkActVo;
+import com.huimv.farm.musk.health.entity.HealthData;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MuskEarmarkMapper extends BaseMapper<MuskEarmark> {
 
+    List<EarmarkActVo> listScreen(@Param(Constants.WRAPPER) QueryWrapper<HealthData> queryWrapper);
 }

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/breed/mapper/MuskEarmarkRankMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.breed.mapper;
+
+import com.huimv.farm.musk.breed.entity.MuskEarmarkRank;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 设备在线率统计 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-06
+ */
+public interface MuskEarmarkRankMapper extends BaseMapper<MuskEarmarkRank> {
+
+}

+ 27 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedBatchService.java

@@ -0,0 +1,27 @@
+package com.huimv.farm.musk.breed.service;
+
+import com.huimv.farm.musk.breed.entity.BreedBatch;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
+import com.huimv.farm.musk.common.utils.Result;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 编组管理 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-19
+ */
+public interface IBreedBatchService extends IService<BreedBatch> {
+
+    Result listPage(Map<String, String> paramsMap);
+
+    Result add(BreedBatch breedBatch);
+
+    Result edit(BreedBatch breedBatch);
+
+    Result remove(Map<String, String> paramsMap);
+}

+ 2 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedFeedService.java

@@ -24,4 +24,6 @@ public interface IBreedFeedService extends IService<BreedFeed> {
     Result edit(BreedFeed breedFeed);
 
     Result remove(Map<String, String> paramsMap);
+
+    Result list(Map<String, String> paramsMap);
 }

+ 1 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMedicineService.java

@@ -3,6 +3,7 @@ package com.huimv.farm.musk.breed.service;
 import com.huimv.farm.musk.breed.entity.BreedMedicine;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.farm.musk.breed.entity.BreedVaccination;
+
 import com.huimv.farm.musk.common.utils.Result;
 
 import java.util.Map;

+ 11 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMuskInfoService.java

@@ -23,4 +23,15 @@ public interface IBreedMuskInfoService extends IService<BreedMuskInfo> {
     Result edit(BreedMuskInfo muskInfo);
 
     Result remove(Map<String, String> paramsMap);
+
+    //谱系追踪
+    Result pedigree(Map<String,String> paramsMap);
+
+    //更新日龄
+    void updateDayAge();
+
+    Result appMuskInfo(Map<String,String> paramsMap);
+
+    //app修改档案状态
+    Result appUpdateMuskInfo(Map<String,String> paramsMap);
 }

+ 8 - 1
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedMuskStockService.java

@@ -19,9 +19,16 @@ public interface IBreedMuskStockService extends IService<BreedMuskStock> {
 
     Result listPage(Map<String, String> paramsMap);
 
-    Result add(BreedMuskStock muskStock);
+    Result listDetail(Map<String, String> paramsMap);
 
     Result edit(BreedMuskStock muskStock);
 
     Result remove(Map<String, String> paramsMap);
+
+
+    //健康监测横栏
+    Result listTop(Map<String, String> paramsMap);
+
+    //大屏养殖档案横栏
+    Result listStock(Map<String, String> paramsMap);
 }

+ 2 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IBreedVaccinationService.java

@@ -24,4 +24,6 @@ public interface IBreedVaccinationService extends IService<BreedVaccination> {
     Result edit(BreedVaccination vaccination);
 
     Result remove(Map<String, String> paramsMap);
+
+    Result listCount(Map<String, String> paramsMap);
 }

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/IMuskEarmarkRankService.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.breed.service;
+
+import com.huimv.farm.musk.breed.entity.MuskEarmarkRank;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 设备在线率统计 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-06
+ */
+public interface IMuskEarmarkRankService extends IService<MuskEarmarkRank> {
+
+}

+ 117 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedBatchServiceImpl.java

@@ -0,0 +1,117 @@
+package com.huimv.farm.musk.breed.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.farm.musk.breed.entity.BreedBatch;
+import com.huimv.farm.musk.breed.entity.BreedFeed;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
+import com.huimv.farm.musk.breed.mapper.BreedBatchMapper;
+import com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper;
+import com.huimv.farm.musk.breed.service.IBreedBatchService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * <p>
+ * 编组管理 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-19
+ */
+@Service
+public class BreedBatchServiceImpl extends ServiceImpl<BreedBatchMapper, BreedBatch> implements IBreedBatchService {
+
+    @Autowired
+    private BreedBatchMapper batchMapper;
+    @Autowired
+    private BreedMuskInfoMapper muskInfoMapper;
+    @Override
+    public Result listPage(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        String batchName = paramsMap.get("batchName");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+            pageSize = "20";
+        }
+        QueryWrapper<BreedBatch> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).like(StringUtils.isNotBlank(batchName), "batch_name", batchName);
+        Page page = new Page(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS, batchMapper.selectPage(page, queryWrapper));
+    }
+
+    @Transactional
+    @Override
+    public Result add(BreedBatch breedBatch) {
+        QueryWrapper<BreedBatch> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", breedBatch.getFarmId()).eq("batch_name", breedBatch.getBatchName());
+        Integer count = batchMapper.selectCount(queryWrapper);
+        if (count != 0) {
+            return new Result(10001, "添加失败!编组名称已存在!", false);
+        }
+        breedBatch.setCreateTime(new Date());
+        batchMapper.insert(breedBatch);
+        BreedBatch batch = batchMapper.selectOne(new QueryWrapper<BreedBatch>()
+                .eq("farm_id", breedBatch.getFarmId()).eq("batch_name", breedBatch.getBatchName()));
+        String batchBreedMusk = breedBatch.getBreedMusk();
+        String[] split = batchBreedMusk.split(",");
+        for (String muskId : split) {
+            BreedMuskInfo muskInfo = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", muskId));
+            muskInfo.setBatchNum(batch.getId());
+            muskInfo.setBatchName(batch.getBatchName());
+            muskInfo.setIsBatch(1);
+            muskInfoMapper.updateById(muskInfo);
+        }
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    @Transactional
+    @Override
+    public Result edit(BreedBatch breedBatch) {
+        Integer count = batchMapper.selectCount(new QueryWrapper<BreedBatch>().eq("farm_id", breedBatch.getFarmId())
+                .eq("batch_name", breedBatch.getBatchName()).ne("id", breedBatch.getId()));
+        if (count != 0) {
+            return new Result(10001, "修改失败!编组名称已存在!", false);
+        }
+        String batchBreedMusk = breedBatch.getBreedMusk();
+        String[] split = batchBreedMusk.split(",");
+        for (String muskId : split) {
+            BreedMuskInfo muskInfo = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", muskId));
+            muskInfo.setBatchNum(breedBatch.getId());
+            muskInfo.setBatchName(breedBatch.getBatchName());
+            muskInfo.setIsBatch(1);
+            muskInfoMapper.updateById(muskInfo);
+        }
+        batchMapper.updateById(breedBatch);
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    @Transactional
+    @Override
+    public Result remove(Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        BreedBatch breedBatch = batchMapper.selectById(id);
+        String batchBreedMusk = breedBatch.getBreedMusk();
+        String[] split = batchBreedMusk.split(",");
+        for (String muskId : split) {
+            BreedMuskInfo muskInfo = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", muskId));
+            muskInfo.setBatchNum(null);
+            muskInfo.setBatchName(null);
+            muskInfo.setIsBatch(0);
+            muskInfoMapper.updateById(muskInfo);
+        }
+        batchMapper.deleteById(id);
+        return new Result(ResultCode.SUCCESS);
+    }
+}

+ 67 - 4
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedFeedServiceImpl.java

@@ -3,18 +3,22 @@ package com.huimv.farm.musk.breed.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.farm.musk.breed.entity.BreedBatch;
 import com.huimv.farm.musk.breed.entity.BreedFeed;
 import com.huimv.farm.musk.breed.entity.BreedTransfer;
+import com.huimv.farm.musk.breed.mapper.BreedBatchMapper;
 import com.huimv.farm.musk.breed.mapper.BreedFeedMapper;
 import com.huimv.farm.musk.breed.service.IBreedFeedService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.entity.vo.DataVo;
+import com.huimv.farm.musk.entity.vo.FeedDataVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.Map;
+import java.text.DecimalFormat;
+import java.util.*;
 
 /**
  * <p>
@@ -29,6 +33,8 @@ public class BreedFeedServiceImpl extends ServiceImpl<BreedFeedMapper, BreedFeed
 
     @Autowired
     private BreedFeedMapper feedMapper;
+    @Autowired
+    private BreedBatchMapper batchMapper;
     @Override
     public Result listPage(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
@@ -47,8 +53,46 @@ public class BreedFeedServiceImpl extends ServiceImpl<BreedFeedMapper, BreedFeed
 
     @Override
     public Result add(BreedFeed breedFeed) {
-        breedFeed.setCreateTime(new Date());
-        return new Result(ResultCode.SUCCESS, feedMapper.insert(breedFeed));
+        Integer isBatch = breedFeed.getIsBatch();
+        if (isBatch == 1) {
+            QueryWrapper<BreedBatch> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("farm_id", breedFeed.getFarmId()).eq("id", breedFeed.getMuskId());
+            BreedBatch batch = batchMapper.selectOne(queryWrapper);
+            String breedMusk = batch.getBreedMusk();
+            String[] split = breedMusk.split(",");
+            Double dry = Double.valueOf(breedFeed.getDryLeaf());
+            Double wet = Double.valueOf(breedFeed.getWetLeaf());
+            Double vegetable = Double.valueOf(breedFeed.getVegetable());
+            Double feed = Double.valueOf(breedFeed.getFeed());
+            DecimalFormat def = new DecimalFormat();
+            double d = dry / 4;
+            double w = wet / 4;
+            double v = vegetable / 4;
+            double f = feed / 4;
+            for (String muskId : split) {
+                BreedFeed breedFeed1 = new BreedFeed();
+                breedFeed1.setDryLeaf(def.format(d));
+                breedFeed1.setWetLeaf(def.format(w));
+                breedFeed1.setVegetable(def.format(v));
+                breedFeed1.setFeed(def.format(f));
+                breedFeed1.setMuskId(muskId);
+                breedFeed1.setCreateTime(new Date());
+                breedFeed1.setFarmId(breedFeed.getFarmId());
+                feedMapper.insert(breedFeed1);
+            }
+        } else {
+            BreedFeed breedFeed1 = new BreedFeed();
+            breedFeed1.setMuskId(breedFeed.getMuskId());
+            breedFeed1.setDryLeaf(breedFeed.getDryLeaf());
+            breedFeed1.setWetLeaf(breedFeed.getWetLeaf());
+            breedFeed1.setVegetable(breedFeed.getVegetable());
+            breedFeed1.setFeed(breedFeed.getFeed());
+            breedFeed1.setFarmId(breedFeed.getFarmId());
+            breedFeed.setCreateTime(new Date());
+            feedMapper.insert(breedFeed1);
+        }
+
+        return new Result(ResultCode.SUCCESS);
     }
 
     @Override
@@ -65,4 +109,23 @@ public class BreedFeedServiceImpl extends ServiceImpl<BreedFeedMapper, BreedFeed
         }
         return new Result(ResultCode.SUCCESS);
     }
+
+    @Override
+    public Result list(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7);
+        QueryWrapper<BreedFeed> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("create_time", calendar.getTime());
+        List<FeedDataVo> feedDataVos = feedMapper.listFeed(queryWrapper);
+        List<DataVo> list = new ArrayList<>();
+        for (FeedDataVo feedDataVo : feedDataVos) {
+            DataVo dataVo = new DataVo();
+            dataVo.setCreateTime(feedDataVo.getCreateTime());
+            double values = feedDataVo.getDryLeaf() + feedDataVo.getWetLeaf() + feedDataVo.getVegetable() + feedDataVo.getFeed();
+            dataVo.setValues(String.valueOf(values));
+            list.add(dataVo);
+        }
+        return new Result(ResultCode.SUCCESS, list);
+    }
 }

+ 51 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedLeaveServiceImpl.java

@@ -1,15 +1,22 @@
 package com.huimv.farm.musk.breed.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.farm.musk.breed.entity.BreedLeave;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
 import com.huimv.farm.musk.breed.entity.BreedTransfer;
+import com.huimv.farm.musk.breed.entity.MuskEarmark;
 import com.huimv.farm.musk.breed.mapper.BreedLeaveMapper;
+import com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper;
+import com.huimv.farm.musk.breed.mapper.MuskEarmarkMapper;
 import com.huimv.farm.musk.breed.service.IBreedLeaveService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.entity.BaseBuilding;
+import com.huimv.farm.musk.mapper.BaseBuildingMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -29,6 +36,13 @@ public class BreedLeaveServiceImpl extends ServiceImpl<BreedLeaveMapper, BreedLe
 
     @Autowired
     private BreedLeaveMapper leaveMapper;
+    @Autowired
+    private BreedMuskInfoMapper infoMapper;
+    @Autowired
+    private MuskEarmarkMapper earmarkMapper;
+    @Autowired
+    private BaseBuildingMapper buildingMapper;
+
     @Override
     public Result listPage(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
@@ -47,12 +61,49 @@ public class BreedLeaveServiceImpl extends ServiceImpl<BreedLeaveMapper, BreedLe
 
     @Override
     public Result add(BreedLeave breedLeave) {
+        String muskId = breedLeave.getMuskId();
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("musk_id", muskId);
+        BreedMuskInfo muskInfo = infoMapper.selectOne(queryWrapper);
+        muskInfo.setIsLeave(1);
+        infoMapper.updateById(muskInfo);
+        QueryWrapper<MuskEarmark> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("earmark", muskId);
+        MuskEarmark muskEarmark = earmarkMapper.selectOne(queryWrapper1);
+        if (ObjectUtil.isNotEmpty(muskEarmark)) {
+            muskEarmark.setIsUse(1);
+            muskEarmark.setStatus(1);
+            earmarkMapper.updateById(muskEarmark);
+        }
+        BaseBuilding building = buildingMapper.selectById(muskInfo.getUnitId());
+        building.setDisabled(0);
+        buildingMapper.updateById(building);
         breedLeave.setCreateTime(new Date());
         return new Result(ResultCode.SUCCESS, leaveMapper.insert(breedLeave));
     }
 
     @Override
     public Result edit(BreedLeave breedLeave) {
+        if (breedLeave.getIsWithdraw() == 1) {
+            //撤回离场
+            String muskId = breedLeave.getMuskId();
+            QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("musk_id", muskId);
+            BreedMuskInfo muskInfo = infoMapper.selectOne(queryWrapper);
+            muskInfo.setIsLeave(0);
+            infoMapper.updateById(muskInfo);
+            QueryWrapper<MuskEarmark> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("earmark", muskId);
+            MuskEarmark earmark = earmarkMapper.selectOne(queryWrapper1);
+            if (ObjectUtil.isNotEmpty(earmark)) {
+                earmark.setIsUse(0);
+                earmark.setIsUse(0);
+                earmarkMapper.updateById(earmark);
+            }
+            BaseBuilding building = buildingMapper.selectById(muskInfo.getUnitId());
+            building.setDisabled(0);
+            buildingMapper.updateById(building);
+        }
         return new Result(ResultCode.SUCCESS, leaveMapper.updateById(breedLeave));
     }
 

+ 29 - 2
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMedicineServiceImpl.java

@@ -3,8 +3,10 @@ package com.huimv.farm.musk.breed.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.farm.musk.breed.entity.BreedBatch;
 import com.huimv.farm.musk.breed.entity.BreedMedicine;
 import com.huimv.farm.musk.breed.entity.BreedVaccination;
+import com.huimv.farm.musk.breed.mapper.BreedBatchMapper;
 import com.huimv.farm.musk.breed.mapper.BreedMedicineMapper;
 import com.huimv.farm.musk.breed.mapper.BreedVaccinationMapper;
 import com.huimv.farm.musk.breed.service.IBreedMedicineService;
@@ -30,6 +32,8 @@ public class BreedMedicineServiceImpl extends ServiceImpl<BreedMedicineMapper, B
 
     @Autowired
     private BreedMedicineMapper medicineMapper;
+    @Autowired
+    private BreedBatchMapper batchMapper;
 
     @Override
     public Result listPage(Map<String, String> paramsMap) {
@@ -49,8 +53,31 @@ public class BreedMedicineServiceImpl extends ServiceImpl<BreedMedicineMapper, B
 
     @Override
     public Result add(BreedMedicine medicine) {
-        medicine.setCreateTime(new Date());
-        return new Result(ResultCode.SUCCESS, medicineMapper.insert(medicine));
+        if (medicine.getIsBatch() == 1) {
+            QueryWrapper<BreedBatch> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("farm_id", medicine.getFarmId()).eq("id", medicine.getMuskId());
+            BreedBatch batch = batchMapper.selectOne(queryWrapper);
+            String breedMusk = batch.getBreedMusk();
+            BreedMedicine breedMedicine = new BreedMedicine();
+            breedMedicine.setCreateTime(new Date());
+            breedMedicine.setMuskId(breedMusk);
+            breedMedicine.setFarmId(medicine.getFarmId());
+            breedMedicine.setMedicine(medicine.getMedicine());
+            breedMedicine.setDosage(medicine.getDosage());
+            breedMedicine.setIsBatch(1);
+            breedMedicine.setBatchNum(Integer.parseInt(medicine.getMuskId()));
+            medicineMapper.insert(breedMedicine);
+        } else {
+            BreedMedicine breedMedicine = new BreedMedicine();
+            breedMedicine.setCreateTime(new Date());
+            breedMedicine.setMuskId(medicine.getMuskId());
+            breedMedicine.setFarmId(medicine.getFarmId());
+            breedMedicine.setMedicine(medicine.getMedicine());
+            breedMedicine.setDosage(medicine.getDosage());
+            breedMedicine.setIsBatch(0);
+            medicineMapper.insert(breedMedicine);
+        }
+        return new Result(ResultCode.SUCCESS);
     }
 
     @Override

+ 239 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMuskInfoServiceImpl.java

@@ -1,21 +1,29 @@
 package com.huimv.farm.musk.breed.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
 import com.huimv.farm.musk.breed.entity.MuskEarmark;
+import com.huimv.farm.musk.breed.entity.vo.AppMuskInfoVo;
 import com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper;
 import com.huimv.farm.musk.breed.mapper.MuskEarmarkMapper;
 import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.entity.BaseBuilding;
+import com.huimv.farm.musk.entity.vo.TreeMuskInfo;
+import com.huimv.farm.musk.mapper.BaseBuildingMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -33,6 +41,8 @@ public class BreedMuskInfoServiceImpl extends ServiceImpl<BreedMuskInfoMapper, B
     private BreedMuskInfoMapper muskInfoMapper;
     @Autowired
     private MuskEarmarkMapper earmarkMapper;
+    @Autowired
+    private BaseBuildingMapper buildingMapper;
 
 
     @Override
@@ -51,21 +61,35 @@ public class BreedMuskInfoServiceImpl extends ServiceImpl<BreedMuskInfoMapper, B
         return new Result(ResultCode.SUCCESS, muskInfoMapper.selectPage(page, queryWrapper));
     }
 
+    @Transactional
     @Override
     public Result add(BreedMuskInfo muskInfo) {
         Integer count = muskInfoMapper.selectCount(new QueryWrapper<BreedMuskInfo>().eq("farm_id", muskInfo.getFarmId()).eq("musk_id", muskInfo.getMuskId()));
         if (count != 0) {
             return new Result(10001, "添加失败!林麝id编号已存在!", false);
         }
+        Integer count1 = muskInfoMapper.selectCount(new QueryWrapper<BreedMuskInfo>().eq("farm_id", muskInfo.getFarmId()).eq("unit_id", muskInfo.getUnitId()));
+        if (count1 != 0) {
+            return new Result(10001, "添加失败!该栏位已存在林麝!", false);
+        }
         MuskEarmark earmark = earmarkMapper.selectOne(new QueryWrapper<MuskEarmark>().eq("earmark", muskInfo.getMuskId()));
         if (ObjectUtil.isNotEmpty(earmark)) {
             earmark.setIsUse(1);
+            earmark.setStatus(1);
             earmarkMapper.updateById(earmark);
         }
         Date date = new Date();
         long l = date.getTime() - muskInfo.getBirthDate().getTime();
         long l1 = l / (24 * 60 * 60 * 1000);
         muskInfo.setDayNum((int) l1);
+        Integer unitId = muskInfo.getUnitId();
+        BaseBuilding building = buildingMapper.selectById(unitId);
+        building.setDisabled(1);
+        buildingMapper.updateById(building);
+        QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("id", building.getParentId());
+        BaseBuilding baseBuilding = buildingMapper.selectOne(queryWrapper);
+        muskInfo.setUnitName(baseBuilding.getBuildName() + building.getBuildName());
         muskInfoMapper.insert(muskInfo);
         return new Result(ResultCode.SUCCESS);
     }
@@ -77,6 +101,11 @@ public class BreedMuskInfoServiceImpl extends ServiceImpl<BreedMuskInfoMapper, B
         if (count > 0) {
             return new Result(10001, "修改失败,羊只档案已存在", false);
         }
+        Date date = new Date();
+        long l = date.getTime() - muskInfo.getBirthDate().getTime();
+        long l1 = l / (24 * 60 * 60 * 1000);
+        muskInfo.setDayNum((int) l1);
+        muskInfoMapper.insert(muskInfo);
         muskInfoMapper.updateById(muskInfo);
         return new Result(10000, "修改成功!", true);
     }
@@ -93,10 +122,220 @@ public class BreedMuskInfoServiceImpl extends ServiceImpl<BreedMuskInfoMapper, B
             MuskEarmark earmark = earmarkMapper.selectOne(new QueryWrapper<MuskEarmark>().eq("earmark", muskInfo.getMuskId()));
             if (ObjectUtil.isNotEmpty(earmark)) {
                 earmark.setIsUse(0);
+                earmark.setStatus(0);
                 earmarkMapper.updateById(earmark);
             }
             muskInfoMapper.deleteById(s);
         }
         return new Result(10000, "删除成功!", true);
     }
+
+    @Override
+    public Result pedigree(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String sheepId = paramsMap.get("muskId");
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("musk_id", sheepId).eq("is_leave", 0);
+        BreedMuskInfo sheepInfo = muskInfoMapper.selectOne(queryWrapper);
+        TreeMuskInfo treeSheepInfo = new TreeMuskInfo();
+        if (ObjectUtil.isNotEmpty(sheepInfo)) {
+            treeSheepInfo.setDayNum(sheepInfo.getDayNum());
+            treeSheepInfo.setSex(sheepInfo.getSex());
+            treeSheepInfo.setMuskId(sheepInfo.getMuskId());
+            treeSheepInfo.setMuskVariety(sheepInfo.getBreed());
+            treeSheepInfo.setUnitName(sheepInfo.getUnitName());
+            treeSheepInfo.setId(sheepInfo.getId());
+            if (StringUtils.isNotBlank(sheepInfo.getFemaleId())) {
+                BreedMuskInfo mother = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", sheepInfo.getFemaleId()));
+                TreeMuskInfo treeSheepInfo1 = new TreeMuskInfo();
+                treeSheepInfo1.setDayNum(mother.getDayNum());
+                treeSheepInfo1.setSex(mother.getSex());
+                treeSheepInfo1.setMuskId(mother.getMuskId());
+                treeSheepInfo1.setMuskVariety(mother.getBreed());
+                treeSheepInfo1.setUnitName(mother.getUnitName());
+                treeSheepInfo1.setId(mother.getId());
+                treeSheepInfo.setMotherMusk(treeSheepInfo1);
+                if (StringUtils.isNotBlank(mother.getFemaleId())) {
+                    BreedMuskInfo grandma = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", mother.getFemaleId()));
+                    TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                    treeSheepInfo2.setDayNum(grandma.getDayNum());
+                    treeSheepInfo2.setSex(grandma.getSex());
+                    treeSheepInfo2.setMuskId(grandma.getMuskId());
+                    treeSheepInfo2.setMuskVariety(grandma.getBreed());
+                    treeSheepInfo2.setUnitName(grandma.getUnitName());
+                    treeSheepInfo2.setId(grandma.getId());
+                    treeSheepInfo1.setMotherMusk(treeSheepInfo2);
+                } else {
+                    TreeMuskInfo treeSheepInfo3 = new TreeMuskInfo();
+                    treeSheepInfo1.setFatherMusk(treeSheepInfo3);
+                }
+                if (StringUtils.isNotBlank(mother.getMaleId())) {
+                    BreedMuskInfo grandma = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", mother.getMaleId()));
+                    TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                    treeSheepInfo2.setDayNum(grandma.getDayNum());
+                    treeSheepInfo2.setSex(grandma.getSex());
+                    treeSheepInfo2.setMuskId(grandma.getMuskId());
+                    treeSheepInfo2.setMuskVariety(grandma.getBreed());
+                    treeSheepInfo2.setUnitName(grandma.getUnitName());
+                    treeSheepInfo2.setId(grandma.getId());
+                    treeSheepInfo1.setFatherMusk(treeSheepInfo2);
+                } else {
+                    TreeMuskInfo treeSheepInfo3 = new TreeMuskInfo();
+                    treeSheepInfo1.setFatherMusk(treeSheepInfo3);
+                }
+
+
+            } else {
+                TreeMuskInfo treeSheepInfo1 = new TreeMuskInfo();
+                treeSheepInfo.setMotherMusk(treeSheepInfo1);
+                TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                treeSheepInfo1.setMotherMusk(treeSheepInfo2);
+                TreeMuskInfo treeSheepInfo3 = new TreeMuskInfo();
+                treeSheepInfo1.setFatherMusk(treeSheepInfo3);
+            }
+
+
+            if (StringUtils.isNotBlank(sheepInfo.getMaleId())) {
+                BreedMuskInfo father = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", sheepInfo.getMaleId()));
+                TreeMuskInfo treeSheepInfo1 = new TreeMuskInfo();
+                treeSheepInfo1.setDayNum(father.getDayNum());
+                treeSheepInfo1.setSex(father.getSex());
+                treeSheepInfo1.setMuskId(father.getMuskId());
+                treeSheepInfo1.setMuskVariety(father.getBreed());
+                treeSheepInfo1.setUnitName(father.getUnitName());
+                treeSheepInfo1.setId(father.getId());
+                treeSheepInfo.setFatherMusk(treeSheepInfo1);
+                if (StringUtils.isNotBlank(father.getMaleId())) {
+                    BreedMuskInfo grandfa = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", father.getMaleId()));
+                    TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                    treeSheepInfo2.setDayNum(grandfa.getDayNum());
+                    treeSheepInfo2.setSex(grandfa.getSex());
+                    treeSheepInfo2.setMuskId(grandfa.getMuskId());
+                    treeSheepInfo2.setMuskVariety(grandfa.getBreed());
+                    treeSheepInfo2.setUnitName(grandfa.getUnitName());
+                    treeSheepInfo2.setId(grandfa.getId());
+                    treeSheepInfo1.setFatherMusk(treeSheepInfo2);
+                } else {
+                    TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                    treeSheepInfo1.setFatherMusk(treeSheepInfo2);
+                }
+                if (StringUtils.isNotBlank(father.getFemaleId())) {
+                    BreedMuskInfo grandfa = muskInfoMapper.selectOne(new QueryWrapper<BreedMuskInfo>().eq("musk_id", father.getFemaleId()));
+                    TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                    treeSheepInfo2.setDayNum(grandfa.getDayNum());
+                    treeSheepInfo2.setSex(grandfa.getSex());
+                    treeSheepInfo2.setMuskId(grandfa.getMuskId());
+                    treeSheepInfo2.setMuskVariety(grandfa.getBreed());
+                    treeSheepInfo2.setUnitName(grandfa.getUnitName());
+                    treeSheepInfo2.setId(grandfa.getId());
+                    treeSheepInfo1.setMotherMusk(treeSheepInfo2);
+                } else {
+                    TreeMuskInfo treeSheepInfo3 = new TreeMuskInfo();
+                    treeSheepInfo1.setMotherMusk(treeSheepInfo3);
+                }
+
+
+            } else {
+                TreeMuskInfo treeSheepInfo1 = new TreeMuskInfo();
+                treeSheepInfo.setFatherMusk(treeSheepInfo1);
+                TreeMuskInfo treeSheepInfo2 = new TreeMuskInfo();
+                treeSheepInfo1.setFatherMusk(treeSheepInfo2);
+                TreeMuskInfo treeSheepInfo3 = new TreeMuskInfo();
+                treeSheepInfo1.setMotherMusk(treeSheepInfo3);
+            }
+        } else {
+            TreeMuskInfo treeMuskInfo = new TreeMuskInfo();
+            TreeMuskInfo treeMuskInfo1 = new TreeMuskInfo();
+            treeSheepInfo.setFatherMusk(treeMuskInfo);
+            treeSheepInfo.setMotherMusk(treeMuskInfo1);
+            TreeMuskInfo treeMuskInfo2 = new TreeMuskInfo();
+            TreeMuskInfo treeMuskInfo3 = new TreeMuskInfo();
+            treeMuskInfo.setFatherMusk(treeMuskInfo2);
+            treeMuskInfo.setMotherMusk(treeMuskInfo3);
+            TreeMuskInfo treeMuskInfo4 = new TreeMuskInfo();
+            TreeMuskInfo treeMuskInfo5 = new TreeMuskInfo();
+            treeMuskInfo1.setMotherMusk(treeMuskInfo4);
+            treeMuskInfo1.setFatherMusk(treeMuskInfo5);
+        }
+
+        return new Result(ResultCode.SUCCESS, treeSheepInfo);
+    }
+
+    @Override
+    public void updateDayAge() {
+        muskInfoMapper.updateDayAge();
+    }
+
+    @Override
+    public Result appMuskInfo(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("f_type", 1).orderByAsc("id");
+        List<BaseBuilding> buildings = buildingMapper.selectList(queryWrapper);
+        List<AppMuskInfoVo> muskInfoVos = muskInfoMapper.listMuskAndBuild(farmId);
+        JSONArray jsonArray = new JSONArray();
+        for (BaseBuilding building : buildings) {
+            JSONObject jsonObject = new JSONObject();
+            JSONArray jsonArray1 = new JSONArray();
+            Integer buildCount = 0;
+            Integer muskCount = 0;
+            for (AppMuskInfoVo muskInfoVo : muskInfoVos) {
+                if (muskInfoVo.getParentId().equals(building.getId())) {
+                    JSONObject jsonObject1 = new JSONObject();
+                    if (null==muskInfoVo.getIsLeave()) {
+                        buildCount = buildCount + 1;
+                        jsonObject1.put("unitId", muskInfoVo.getUnitId());
+                        jsonObject1.put("unitName", muskInfoVo.getUnitName());
+                        jsonObject1.put("result", 4);
+                        jsonObject1.put("muskId", muskInfoVo.getMuskId());
+                        jsonObject1.put("batchName", muskInfoVo.getBatchName());
+                        jsonObject1.put("batchNum", muskInfoVo.getBatchNum());
+                    } else if (muskInfoVo.getIsLeave() == 0) {
+                        muskCount = muskCount + 1;
+                        buildCount = buildCount + 1;
+                        jsonObject1.put("unitId", muskInfoVo.getUnitId());
+                        jsonObject1.put("unitName", muskInfoVo.getUnitName());
+                        jsonObject1.put("result", muskInfoVo.getAppStatus());
+                        jsonObject1.put("muskId", muskInfoVo.getMuskId());
+                        jsonObject1.put("batchName", muskInfoVo.getBatchName());
+                        jsonObject1.put("batchNum", muskInfoVo.getBatchNum());
+                    }
+                    jsonObject1.put("breed", muskInfoVo.getBreed());
+                    jsonObject1.put("sex", muskInfoVo.getSex());
+                    jsonObject1.put("birthDate", muskInfoVo.getBirthDate());
+                    jsonObject1.put("inspectResult", muskInfoVo.getInspectResult());
+                    jsonObject1.put("weight", muskInfoVo.getWeight());
+                    jsonObject1.put("femaleId", muskInfoVo.getFemaleId());
+                    jsonObject1.put("maleId", muskInfoVo.getMaleId());
+                    jsonObject1.put("dayNum", muskInfoVo.getDayNum());
+                    jsonObject1.put("farmId", muskInfoVo.getFarmId());
+                    jsonObject1.put("temp", muskInfoVo.getTemp());
+                    jsonObject1.put("act", muskInfoVo.getAct());
+                    jsonObject1.put("stage", muskInfoVo.getStage());
+                    jsonArray1.add(jsonObject1);
+                }
+            }
+            jsonObject.put("buildCount", buildCount);
+            jsonObject.put("muskCount", muskCount);
+            jsonObject.put("buildName", building.getBuildName());
+            jsonObject.put("buildUnit", building.getId());
+            jsonObject.put("list", jsonArray1);
+            jsonArray.add(jsonObject);
+        }
+        return new Result(ResultCode.SUCCESS, jsonArray);
+    }
+
+    @Override
+    public Result appUpdateMuskInfo(Map<String, String> paramsMap) {
+        String unitId = paramsMap.get("unitId");
+        String result = paramsMap.get("result");
+        String farmId = paramsMap.get("farmId");
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("unit_id", unitId).eq("is_leave", 0);
+        BreedMuskInfo muskInfo = muskInfoMapper.selectOne(queryWrapper);
+        muskInfo.setAppStatus(Integer.parseInt(result));
+        muskInfoMapper.updateById(muskInfo);
+        return new Result(ResultCode.SUCCESS);
+    }
+
 }

+ 156 - 15
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedMuskStockServiceImpl.java

@@ -1,19 +1,27 @@
 package com.huimv.farm.musk.breed.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
-import com.huimv.farm.musk.breed.entity.BreedMuskStock;
+import com.huimv.farm.musk.breed.entity.*;
+import com.huimv.farm.musk.breed.entity.vo.MuskStockVo;
+import com.huimv.farm.musk.breed.mapper.BreedCureMapper;
+import com.huimv.farm.musk.breed.mapper.BreedInspectMapper;
 import com.huimv.farm.musk.breed.mapper.BreedMuskStockMapper;
+import com.huimv.farm.musk.breed.mapper.BreedVaccinationMapper;
 import com.huimv.farm.musk.breed.service.IBreedMuskStockService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.farm.musk.common.utils.DataUill;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.DecimalFormat;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -29,26 +37,42 @@ public class BreedMuskStockServiceImpl extends ServiceImpl<BreedMuskStockMapper,
 
     @Autowired
     private BreedMuskStockMapper stockMapper;
+    @Autowired
+    private BreedInspectMapper inspectMapper;
+    @Autowired
+    private BreedCureMapper cureMapper;
+    @Autowired
+    private BreedVaccinationMapper vaccinationMapper;
     @Override
     public Result listPage(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
-        String pageNum = paramsMap.get("pageNum");
-        String pageSize = paramsMap.get("pageSize");
-        String stage = paramsMap.get("stage");
-        if ("".equals(pageNum) || null == pageNum) {
-            pageNum = "1";
-            pageSize = "20";
-        }
         QueryWrapper<BreedMuskStock> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("farm_id", farmId).eq(StringUtils.isNotBlank(stage), "stage", stage);
-        Page page = new Page<BreedMuskStock>(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
-        return new Result(ResultCode.SUCCESS, stockMapper.selectPage(page, queryWrapper));
+        queryWrapper.eq("farm_id", farmId);
+        List<BreedMuskStock> muskStocks = stockMapper.selectList(queryWrapper);
+        Integer maleNumber = 0;
+        Integer femaleNumber = 0;
+        Integer youngNumber = 0;
+        JSONObject jsonObject = new JSONObject();
+        if (muskStocks.size() != 0) {
+            for (BreedMuskStock muskStock : muskStocks) {
+                maleNumber = maleNumber + muskStock.getMaleNumber();
+                femaleNumber = femaleNumber + muskStock.getFemaleNumber();
+                youngNumber = youngNumber + muskStock.getYoungNumber();
+            }
+        }
+        jsonObject.put("maleNumber", maleNumber);
+        jsonObject.put("femaleNumber", femaleNumber);
+        jsonObject.put("youngNumber", youngNumber);
+        return new Result(ResultCode.SUCCESS, jsonObject);
     }
 
     @Override
-    public Result add(BreedMuskStock muskStock) {
-        muskStock.setCreateTime(new Date());
-        return new Result(ResultCode.SUCCESS, stockMapper.insert(muskStock));
+    public Result listDetail(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        QueryWrapper<BreedMuskStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId);
+        List<MuskStockVo> stockVos = stockMapper.listScreen(queryWrapper);
+        return new Result(ResultCode.SUCCESS, stockVos);
     }
 
     @Override
@@ -66,4 +90,121 @@ public class BreedMuskStockServiceImpl extends ServiceImpl<BreedMuskStockMapper,
         return new Result(ResultCode.SUCCESS);
     }
 
+    @Override
+    public Result listTop(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        JSONObject jsonObject = new JSONObject();
+
+        Date monthmorning = DataUill.getTimesMonthmorning();
+        QueryWrapper<BreedMuskStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("create_time", monthmorning);
+        BreedMuskStock muskStock = stockMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isNotEmpty(muskStock)) {
+            jsonObject.put("stock", muskStock.getFemaleNumber() + muskStock.getMaleNumber() + muskStock.getYoungNumber());
+        } else {
+            jsonObject.put("stock", 0);
+        }
+        Date timesmorning = DataUill.getTimesmorning();
+        QueryWrapper<BreedInspect> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("farm_id", farmId).ge("create_time", timesmorning);
+        BreedInspect inspect = inspectMapper.selectOne(queryWrapper1);
+        if (ObjectUtil.isNotEmpty(inspect)) {
+            String inspectMuskId = inspect.getMuskId();
+            String[] split = inspectMuskId.split(",");
+            jsonObject.put("inspect", split.length);
+        } else {
+            jsonObject.put("inspect", 0);
+        }
+
+        QueryWrapper<BreedCure> queryWrapper2 = new QueryWrapper<>();
+        queryWrapper2.eq("farm_id", farmId).ge("create_time", timesmorning);
+        List<BreedCure> breedCures = cureMapper.selectList(queryWrapper2);
+        if (breedCures.size() != 0) {
+            Integer liveCount = 0;
+            Integer deathCount = 0;
+            Integer size = breedCures.size();
+            for (BreedCure breedCure : breedCures) {
+                if (breedCure.getCureResult() == 0) {
+                    liveCount = liveCount + 1;
+                } else {
+                    deathCount = deathCount + 1;
+                }
+            }
+            if (deathCount == 0) {
+                jsonObject.put("cure", 100);
+            } else {
+                double v = deathCount.doubleValue() / size.doubleValue();
+                DecimalFormat def = new DecimalFormat("0.00");
+                String format = def.format(v);
+                float aFloat = Float.parseFloat(format);
+                float v1 = (1 - aFloat) * 100;
+                jsonObject.put("cure", v1);
+            }
+        } else {
+            jsonObject.put("cure", 100);
+        }
+
+        return new Result(ResultCode.SUCCESS, jsonObject);
+    }
+
+    @Override
+    public Result listStock(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        JSONObject jsonObject = new JSONObject();
+        Date monthmorning = DataUill.getTimesMonthmorning();
+        QueryWrapper<BreedMuskStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("create_time", monthmorning);
+        BreedMuskStock muskStock = stockMapper.selectOne(queryWrapper);
+
+        if (ObjectUtil.isNotEmpty(muskStock)) {
+            jsonObject.put("stock", muskStock.getFemaleNumber() + muskStock.getMaleNumber() + muskStock.getYoungNumber());
+        } else {
+            jsonObject.put("stock", 0);
+        }
+        QueryWrapper<BreedCure> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("farm_id", farmId).ge("create_time", monthmorning);
+        List<BreedCure> breedCures = cureMapper.selectList(queryWrapper1);
+        Integer cure = 0;
+        if (breedCures.size() != 0) {
+            for (BreedCure breedCure : breedCures) {
+                if (breedCure.getCureResult() == 1) {
+                    cure = cure + 1;
+                }
+            }
+            if (ObjectUtil.isNotEmpty(muskStock)) {
+                Integer i = muskStock.getFemaleNumber() + muskStock.getMaleNumber() + muskStock.getYoungNumber();
+                Integer live = i - cure;
+                double v = live.doubleValue() / i.doubleValue();
+                DecimalFormat def = new DecimalFormat("0.00");
+                String format = def.format(v);
+                float aFloat = Float.parseFloat(format)*100;
+                jsonObject.put("death", aFloat);
+            } else {
+                jsonObject.put("death", 0.00);
+            }
+        } else {
+            jsonObject.put("death", cure);
+        }
+
+        QueryWrapper<BreedVaccination> queryWrapper2 = new QueryWrapper<>();
+        queryWrapper2.eq("farm_id", farmId).ge("create_time", monthmorning);
+        queryWrapper2.select("IFNULL(max(number),'0') 'number' ");
+        BreedVaccination breedVaccination = vaccinationMapper.selectOne(queryWrapper2);
+        if (ObjectUtil.isNotEmpty(breedVaccination)) {
+            if (ObjectUtil.isNotEmpty(muskStock)) {
+                Integer i = muskStock.getFemaleNumber() + muskStock.getMaleNumber() + muskStock.getYoungNumber();
+                double v = breedVaccination.getNumber().doubleValue() / i.doubleValue();
+                DecimalFormat def = new DecimalFormat("0.00");
+                String format = def.format(v);
+                float aFloat = Float.parseFloat(format)*100;
+                jsonObject.put("vaccination", aFloat);
+            } else {
+                jsonObject.put("vaccination", 0.00);
+            }
+        } else {
+            jsonObject.put("vaccination", 0.00);
+        }
+        return new Result(ResultCode.SUCCESS, jsonObject);
+    }
+
 }

+ 36 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedTransferServiceImpl.java

@@ -3,13 +3,17 @@ package com.huimv.farm.musk.breed.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
 import com.huimv.farm.musk.breed.entity.BreedTransfer;
 import com.huimv.farm.musk.breed.entity.BreedTupping;
+import com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper;
 import com.huimv.farm.musk.breed.mapper.BreedTransferMapper;
 import com.huimv.farm.musk.breed.service.IBreedTransferService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.entity.BaseBuilding;
+import com.huimv.farm.musk.mapper.BaseBuildingMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -29,6 +33,10 @@ public class BreedTransferServiceImpl extends ServiceImpl<BreedTransferMapper, B
 
     @Autowired
     private BreedTransferMapper transferMapper;
+    @Autowired
+    private BreedMuskInfoMapper infoMapper;
+    @Autowired
+    private BaseBuildingMapper buildingMapper;
     @Override
     public Result listPage(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
@@ -47,12 +55,40 @@ public class BreedTransferServiceImpl extends ServiceImpl<BreedTransferMapper, B
 
     @Override
     public Result add(BreedTransfer transfer) {
+        //TODO:补充林麝档案的位置信息
+        String muskId = transfer.getMuskId();
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("musk_id", muskId);
+        BreedMuskInfo muskInfo = infoMapper.selectOne(queryWrapper);
+        muskInfo.setUnitId(transfer.getToBuildId());
+        muskInfo.setUnitName(transfer.getToBuildName());
+        BaseBuilding building = buildingMapper.selectById(transfer.getFromBuildId());
+        building.setDisabled(0);
+        buildingMapper.updateById(building);
+        BaseBuilding building1 = buildingMapper.selectById(transfer.getToBuildId());
+        building1.setDisabled(1);
+        buildingMapper.updateById(building1);
+        infoMapper.updateById(muskInfo);
         transfer.setCreateTime(new Date());
         return new Result(ResultCode.SUCCESS, transferMapper.insert(transfer));
     }
 
     @Override
     public Result edit(BreedTransfer transfer) {
+        //TODO:补充林麝档案的位置信息
+        String muskId = transfer.getMuskId();
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("musk_id", muskId);
+        BreedMuskInfo muskInfo = infoMapper.selectOne(queryWrapper);
+        muskInfo.setUnitId(transfer.getToBuildId());
+        muskInfo.setUnitName(transfer.getToBuildName());
+        BaseBuilding building = buildingMapper.selectById(transfer.getFromBuildId());
+        building.setDisabled(0);
+        buildingMapper.updateById(building);
+        BaseBuilding building1 = buildingMapper.selectById(transfer.getToBuildId());
+        building1.setDisabled(1);
+        buildingMapper.updateById(building1);
+        infoMapper.updateById(muskInfo);
         return new Result(ResultCode.SUCCESS, transferMapper.updateById(transfer));
     }
 

+ 14 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/BreedVaccinationServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.farm.musk.breed.entity.BreedMuskStock;
 import com.huimv.farm.musk.breed.entity.BreedVaccination;
+import com.huimv.farm.musk.breed.entity.vo.VaccinationVo;
 import com.huimv.farm.musk.breed.mapper.BreedVaccinationMapper;
 import com.huimv.farm.musk.breed.service.IBreedVaccinationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,7 +14,9 @@ import com.huimv.farm.musk.common.utils.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -66,4 +69,15 @@ public class BreedVaccinationServiceImpl extends ServiceImpl<BreedVaccinationMap
         }
         return new Result(ResultCode.SUCCESS);
     }
+
+    @Override
+    public Result listCount(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7);
+        QueryWrapper<BreedVaccination> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("create_time", calendar.getTime());
+        List<VaccinationVo> vaccinationVos = vaccinationMapper.listCount(queryWrapper);
+        return new Result(ResultCode.SUCCESS, vaccinationVos);
+    }
 }

+ 20 - 0
musk/src/main/java/com/huimv/farm/musk/breed/service/impl/MuskEarmarkRankServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.farm.musk.breed.service.impl;
+
+import com.huimv.farm.musk.breed.entity.MuskEarmarkRank;
+import com.huimv.farm.musk.breed.mapper.MuskEarmarkRankMapper;
+import com.huimv.farm.musk.breed.service.IMuskEarmarkRankService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 设备在线率统计 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-06
+ */
+@Service
+public class MuskEarmarkRankServiceImpl extends ServiceImpl<MuskEarmarkRankMapper, MuskEarmarkRank> implements IMuskEarmarkRankService {
+
+}

+ 39 - 17
musk/src/main/java/com/huimv/farm/musk/controller/BaseBuildingController.java

@@ -1,6 +1,8 @@
 package com.huimv.farm.musk.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultUtil;
 import com.huimv.farm.musk.entity.BaseBuilding;
@@ -27,23 +29,43 @@ public class BaseBuildingController {
     private IBaseBuildingService baseBuildingService;
 
     @PostMapping("/addBuilding")
-    public Result addBuilding(@RequestBody BaseBuilding baseBuilding) {
-        return baseBuildingService.addBuilding(baseBuilding);
+    public Result addBuilding(@RequestBody Map<String,String> map) {
+        return baseBuildingService.addBuilding(map);
     }
 
-    @PostMapping("/addUnit")
-    public Result addUnit(@RequestBody Map<String,String> map) {
-        String farmId = map.get("farmId");
-        String parentId = map.get("parentId");
-        String unitName = map.get("unitName");
-        BaseBuilding baseBuilding = new BaseBuilding();
-        baseBuilding.setBuildName(unitName);
-        baseBuilding.setParentId(Integer.parseInt(parentId));
-        baseBuilding.setFarmId(Integer.parseInt(farmId));
-        baseBuilding.setFType(2);
-        baseBuildingService.save(baseBuilding);
-        return ResultUtil.addResult(1);
-    }
+//    @PostMapping("/addUnit")
+//    public Result addUnit(@RequestBody Map<String,String> map) {
+//        String farmId = map.get("farmId");
+//        String parentId = map.get("parentId");
+//        String number = map.get("number");
+//        QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("farm_id", farmId).eq("parent_id", parentId).orderByDesc("id").last(" limit 1");
+//        BaseBuilding building = baseBuildingService.getOne(queryWrapper);
+//        if (ObjectUtil.isEmpty(building)) {
+//            for (int i = 1; i < Integer.parseInt(number) + 1; i++) {
+//                BaseBuilding baseBuilding = new BaseBuilding();
+//                baseBuilding.setBuildName(i + "号栏");
+//                baseBuilding.setOther2(String.valueOf(i));
+//                baseBuilding.setParentId(Integer.parseInt(parentId));
+//                baseBuilding.setFarmId(Integer.parseInt(farmId));
+//                baseBuilding.setFType(2);
+//                baseBuildingService.save(baseBuilding);
+//            }
+//        } else {
+//            String other2 = building.getOther2();
+//            for (int i =  1; i <Integer.parseInt(number) + 1; i++) {
+//                BaseBuilding baseBuilding = new BaseBuilding();
+//                baseBuilding.setBuildName(Integer.parseInt(other2) + i + "号栏");
+//                baseBuilding.setOther2(String.valueOf(Integer.parseInt(other2) + i));
+//                baseBuilding.setParentId(Integer.parseInt(parentId));
+//                baseBuilding.setFarmId(Integer.parseInt(farmId));
+//                baseBuilding.setFType(2);
+//                baseBuildingService.save(baseBuilding);
+//            }
+//        }
+//
+//        return ResultUtil.addResult(1);
+//    }
     @PostMapping("/updateUnit")
     public Result updateUnit(@RequestBody Map<String,String> map) {
         String buildName = map.get("farmId");
@@ -60,8 +82,8 @@ public class BaseBuildingController {
         return ResultUtil.deleteResult(1);
     }
     @PostMapping("/updateBuilding")
-    public Result updateBuilding(@RequestBody BaseBuilding baseBuilding) {
-        return  baseBuildingService.updateBuilding(baseBuilding);
+    public Result updateBuilding(@RequestBody Map<String,String> map) {
+        return  baseBuildingService.updateBuilding(map);
     }
 
     @PostMapping("/deleteBuilding")

+ 11 - 0
musk/src/main/java/com/huimv/farm/musk/controller/DevEnergyController.java

@@ -80,4 +80,15 @@ public class DevEnergyController {
         return energyService.listScreen(paramsMap);
     }
 
+    //物联监测的能耗监测
+    @RequestMapping("/listWeek")
+    public Result listWeek(@RequestBody Map<String, String> paramsMap) {
+        return energyService.listWeek(paramsMap);
+    }
+
+    //能耗区域排名
+    @RequestMapping("/listRank")
+    public Result listRank(@RequestBody Map<String, String> paramsMap) {
+        return energyService.listRank(paramsMap);
+    }
 }

+ 16 - 1
musk/src/main/java/com/huimv/farm/musk/controller/DevEnvController.java

@@ -76,11 +76,26 @@ public class DevEnvController {
         return envService.listHistory(paramsMap);
     }
 
-//    //大屏环境监测
+//    //大屏物联监测数据
     @RequestMapping("/listScreen")
     public Result listScreen(@RequestBody Map<String, String> paramsMap) {
         return envService.listScreen(paramsMap);
     }
+    //大屏物联监测数据2
+    @RequestMapping("/listScreen2")
+    public Result listScreen2(@RequestBody Map<String, String> paramsMap) {
+        return envService.listScreen2(paramsMap);
+    }
 
+    //大屏主页物联监测
+    @RequestMapping("/listByType")
+    public Result listByType(@RequestBody Map<String, String> paramsMap) {
+        return envService.listByType(paramsMap);
+    }
 
+    //健康监测中的温度监测
+    @RequestMapping("/listAll")
+    public Result listAll(@RequestBody Map<String, String> paramsMap) {
+        return envService.listAll(paramsMap);
+    }
 }

+ 8 - 0
musk/src/main/java/com/huimv/farm/musk/controller/SysCameraController.java

@@ -1,6 +1,7 @@
 package com.huimv.farm.musk.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.farm.musk.common.token.TokenSign;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
@@ -51,6 +52,13 @@ public class SysCameraController {
 
     }
 
+    @PostMapping("/listDetail")
+    public Result listDetail(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<SysCamera> list = cameraService.list(new QueryWrapper<SysCamera>().eq("farm_id", farmId));
+        return new Result(ResultCode.SUCCESS, list);
+    }
+
     @PostMapping("/update")
     public Result update(@RequestBody SysCamera camera) {
         return cameraService.updates(camera);

+ 204 - 0
musk/src/main/java/com/huimv/farm/musk/controller/SysCameraFunctionController.java

@@ -0,0 +1,204 @@
+package com.huimv.farm.musk.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.entity.SysCamera;
+import com.huimv.farm.musk.entity.SysCameraFunction;
+import com.huimv.farm.musk.entity.vo.TreeFunctionPage;
+import com.huimv.farm.musk.entity.vo.TreeSysCameraFunction;
+import com.huimv.farm.musk.service.ISysCameraFunctionService;
+import com.huimv.farm.musk.service.ISysCameraService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 功能点 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-11
+ */
+@RestController
+@RequestMapping("/sys-camera-function")
+@CrossOrigin
+public class SysCameraFunctionController {
+
+    @Autowired
+    private ISysCameraFunctionService functionService;
+    @Autowired
+    private ISysCameraService cameraService;
+
+    @RequestMapping("/listAll")
+    public Result listAll(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<SysCameraFunction> list = functionService.list(new QueryWrapper<SysCameraFunction>().eq("farm_id", farmId));
+        List<TreeSysCameraFunction> functions = parseBizBaseArea(list);
+        return new Result(ResultCode.SUCCESS, functions);
+    }
+
+    @RequestMapping("/listPage")
+    public Result listPage(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+            pageSize = "20";
+        }
+        List<SysCameraFunction> list = functionService.list(new QueryWrapper<SysCameraFunction>().eq("farm_id", farmId));
+        List<TreeSysCameraFunction> functions = parseBizBaseArea(list);
+        List<TreeSysCameraFunction> cameraFunctions = paginateList(functions, Integer.parseInt(pageSize), Integer.parseInt(pageNum));
+        TreeFunctionPage page = new TreeFunctionPage();
+        page.setTotal(cameraFunctions.size());
+        page.setSize(Integer.parseInt(pageSize));
+        page.setCurrent(Integer.parseInt(pageNum));
+        page.setRecords(cameraFunctions);
+        int i = (cameraFunctions.size() + Integer.parseInt(pageSize) - 1) / Integer.parseInt(pageSize);
+        page.setPages(i);
+        return new Result(ResultCode.SUCCESS, page);
+    }
+
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<SysCameraFunction> list = functionService.list(new QueryWrapper<SysCameraFunction>().eq("farm_id", farmId).eq("f_type", 1));
+        List<TreeSysCameraFunction> functions = parseBizBaseArea(list);
+        return new Result(ResultCode.SUCCESS, functions);
+    }
+
+    @RequestMapping("/add")
+    public Result add(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String functionName = paramsMap.get("functionName");
+        QueryWrapper<SysCameraFunction> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("function_name", functionName).eq("f_type", 1);
+        int count = functionService.count(queryWrapper);
+        if (count != 0) {
+            return new Result(10001, "功能点名称已存在!", false);
+        }
+        SysCameraFunction function = new SysCameraFunction();
+        function.setFunctionName(functionName);
+        function.setParentId(0);
+        function.setFType(1);
+        function.setFarmId(Integer.parseInt(farmId));
+        functionService.save(function);
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    @RequestMapping("/edit")
+    public Result edit(@RequestBody Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        String farmId = paramsMap.get("farmId");
+        String functionName = paramsMap.get("functionName");
+        QueryWrapper<SysCameraFunction> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("function_name", functionName).eq("f_type", 1)
+                .ne("id", id);
+        int count = functionService.count(queryWrapper);
+        if (count != 0) {
+            return new Result(10001, "功能点名称已存在!", false);
+        }
+        SysCameraFunction function = functionService.getById(id);
+        function.setFunctionName(functionName);
+        function.setParentId(0);
+        function.setFType(1);
+        functionService.updateById(function);
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        QueryWrapper<SysCameraFunction> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("parent_id", id);
+        List<SysCameraFunction> list = functionService.list(queryWrapper);
+        if (list.size() != 0) {
+            for (SysCameraFunction function : list) {
+                functionService.removeById(function.getId());
+            }
+        }
+        functionService.removeById(id);
+
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    //摄像头的添加
+    @RequestMapping("/addCamera")
+    public Result addCamera(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String id = paramsMap.get("id");//功能点id
+        functionService.remove(new QueryWrapper<SysCameraFunction>().eq("parent_id", id));
+        String ids = paramsMap.get("ids");
+        String[] split = ids.split(",");
+        for (String s : split) {
+            SysCamera camera = cameraService.getById(s);
+
+            SysCameraFunction function1 = new SysCameraFunction();
+            function1.setFType(2);
+            function1.setParentId(Integer.parseInt(id));
+            function1.setFarmId(Integer.parseInt(farmId));
+            function1.setCameraId(Integer.parseInt(s));
+            function1.setFunctionName(camera.getCameraName());
+            function1.setCameraIp(camera.getCameraIp());
+            functionService.save(function1);
+        }
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    @RequestMapping("/deleteCamera")
+    public Result editCamera(@RequestBody Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        functionService.removeById(id);
+        return new Result(ResultCode.SUCCESS);
+    }
+
+    public List<TreeSysCameraFunction> parseBizBaseArea(List<SysCameraFunction> bizBaseAreas) {
+        //构建需要展示的树形节点结构
+        Map<Object, TreeSysCameraFunction> nodeMap = bizBaseAreas.stream().map(basePigpen -> {
+            TreeSysCameraFunction baseVo = new TreeSysCameraFunction();
+            baseVo.setId(basePigpen.getId());
+            baseVo.setFarmId(basePigpen.getFarmId());
+            baseVo.setParentId(basePigpen.getParentId());
+            baseVo.setFunctionName(basePigpen.getFunctionName());
+            baseVo.setCameraId(basePigpen.getCameraId());
+            baseVo.setList(new ArrayList<>());
+            return baseVo;
+        }).collect(Collectors.toMap(TreeSysCameraFunction::getId, b -> b, (k1, k2) -> k1));
+        //创建数组存父亲节点
+        ArrayList<TreeSysCameraFunction> roots = new ArrayList<>();
+        //构建树形
+        nodeMap.values().forEach(item -> {
+            Integer parentCode = item.getParentId();
+            if (nodeMap.get(parentCode) == null) {
+                //父节点为空,说明当前节点就已经是父节点了 将该节点存起来
+                roots.add(item);
+            } else {
+                //父节点 不为空,说明有父节点,拿到该节点的父节点的孩子节点(就是我自己),将该节点存起来
+                nodeMap.get(parentCode).getList().add(item);
+            }
+        });
+        return roots;
+    }
+
+    public List<TreeSysCameraFunction> paginateList(List<TreeSysCameraFunction> list, int pageSize, int pageNumber) {
+        List<TreeSysCameraFunction> result = new ArrayList<>();
+        int startIndex = (pageNumber - 1) * pageSize;
+        int endIndex = Math.min(startIndex + pageSize, list.size());
+        for (int i = startIndex; i < endIndex; i++) {
+            result.add(list.get(i));
+        }
+        return result;
+    }
+
+}

+ 1 - 1
musk/src/main/java/com/huimv/farm/musk/entity/BaseBuilding.java

@@ -64,7 +64,7 @@ public class BaseBuilding implements Serializable {
 
     private String other2;
 
-    private String other3;
+    private Integer disabled;
 
 
 }

+ 1 - 1
musk/src/main/java/com/huimv/farm/musk/entity/DevWarning.java

@@ -34,7 +34,7 @@ public class DevWarning implements Serializable {
     /**
      * 创建时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**

+ 61 - 0
musk/src/main/java/com/huimv/farm/musk/entity/SysCameraFunction.java

@@ -0,0 +1,61 @@
+package com.huimv.farm.musk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 功能点
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sys_camera_function")
+public class SysCameraFunction implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 功能点名称(摄像头名称)
+     */
+    private String functionName;
+
+    /**
+     * 摄像头id
+     */
+    private Integer cameraId;
+
+    /**
+     * 摄像头ip
+     */
+    private String cameraIp;
+
+    /**
+     * 牧场编码
+     */
+    private Integer farmId;
+
+    /**
+     * 父级id
+     */
+    private Integer parentId;
+
+    /**
+     * 1为功能点 2为摄像头
+     */
+    private Integer fType;
+
+
+}

+ 15 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/DataVo.java

@@ -0,0 +1,15 @@
+package com.huimv.farm.musk.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DataVo {
+
+    private String values;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+}

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/DataVo2.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DataVo2 {
+
+    private String envTemp;
+
+    private String healthTemp;
+
+    private String time;
+}

+ 23 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/EnvDataVo.java

@@ -0,0 +1,23 @@
+package com.huimv.farm.musk.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EnvDataVo {
+
+    private String humi;
+    private String tem;
+
+    private String gas;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date dateTime;
+
+    private String unitName;
+
+    private Integer unitId;
+
+}

+ 22 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/EnvDataVo2.java

@@ -0,0 +1,22 @@
+package com.huimv.farm.musk.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EnvDataVo2 {
+    private String unitName;
+
+    private Integer unitId;
+
+    private List<EnvDataVo> list;
+
+    private String tem;
+
+    private String humi;
+
+    private String gas;
+
+
+}

+ 21 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/FeedDataVo.java

@@ -0,0 +1,21 @@
+package com.huimv.farm.musk.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FeedDataVo {
+
+    private Double dryLeaf;
+
+    private Double wetLeaf;
+
+    private Double vegetable;
+
+    private Double feed;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+}

+ 3 - 1
musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeBasePigpen.java

@@ -10,7 +10,7 @@ import java.util.List;
 public class TreeBasePigpen {
     private static final long serialVersionUID=1L;
 
-    private String id;
+    private Integer id;
 
     private String buildName;
 
@@ -18,5 +18,7 @@ public class TreeBasePigpen {
 
     private Integer farmId;
 
+    private Boolean disabled;
+
     private List<TreeBasePigpen> childNode;
 }

+ 23 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeBasePigpen2.java

@@ -0,0 +1,23 @@
+package com.huimv.farm.musk.entity.vo;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TreeBasePigpen2 {
+    private static final long serialVersionUID=1L;
+
+    private Integer id;
+
+    private String buildName;
+
+    private Integer parentId;
+
+    private Integer farmId;
+
+    private Boolean disAble;
+
+    private List<TreeBasePigpen2> childNode;
+}

+ 18 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeFunctionPage.java

@@ -0,0 +1,18 @@
+package com.huimv.farm.musk.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TreeFunctionPage {
+    private Integer total;
+
+    private Integer size;
+
+    private Integer current;
+
+    private Integer pages;
+
+    private List<TreeSysCameraFunction> records;
+}

+ 31 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeMuskInfo.java

@@ -0,0 +1,31 @@
+package com.huimv.farm.musk.entity.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TreeMuskInfo implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    private Integer id;
+
+    private String muskId;
+
+    private Integer dayNum;
+
+    private Integer sex;
+
+    private String muskVariety;
+
+    private String unitName;
+
+    private TreeMuskInfo fatherMusk;
+
+    private TreeMuskInfo motherMusk;
+}

+ 24 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/TreeSysCameraFunction.java

@@ -0,0 +1,24 @@
+package com.huimv.farm.musk.entity.vo;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TreeSysCameraFunction {
+
+    private static final long serialVersionUID=1L;
+
+    private Integer id;
+
+    private String functionName;
+
+    private Integer parentId;
+
+    private Integer farmId;
+
+    private Integer cameraId;
+
+    private List<TreeSysCameraFunction> list;
+}

+ 17 - 0
musk/src/main/java/com/huimv/farm/musk/health/controller/HealthThresholdController.java

@@ -1,11 +1,18 @@
 package com.huimv.farm.musk.health.controller;
 
 
+import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.health.entity.HealthThreshold;
+import com.huimv.farm.musk.health.service.IHealthThresholdService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * <p>
  * 健康阈值设置 前端控制器
@@ -18,6 +25,16 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/health-threshold")
 @CrossOrigin
 public class HealthThresholdController {
+    @Autowired
+    private IHealthThresholdService thresholdService;
 
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        return thresholdService.listThreshold(paramsMap);
+    }
 
+    @RequestMapping("/addOrEdit")
+    public Result addOrEdit(@RequestBody HealthThreshold threshold) {
+        return thresholdService.addOrEdit(threshold);
+    }
 }

+ 31 - 0
musk/src/main/java/com/huimv/farm/musk/health/controller/HealthWarningController.java

@@ -1,10 +1,22 @@
 package com.huimv.farm.musk.health.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.farm.musk.common.utils.Result;
+import com.huimv.farm.musk.common.utils.ResultCode;
+import com.huimv.farm.musk.health.entity.HealthWarning;
+import com.huimv.farm.musk.health.service.IHealthWarningService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * <p>
  * 健康监测预警 前端控制器
@@ -15,6 +27,25 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/health-warning")
+@CrossOrigin
 public class HealthWarningController {
+    @Autowired
+    private IHealthWarningService warningService;
+
+    @RequestMapping("/listPage")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String type = paramsMap.get("type");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+            pageSize = "20";
+        }
+        Page<HealthWarning> page = new Page(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+        QueryWrapper<HealthWarning> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq(StringUtils.isNotBlank(type), "warning_type", type);
+        return new Result(ResultCode.SUCCESS,warningService.page(page,queryWrapper));
+    }
 
 }

+ 5 - 1
musk/src/main/java/com/huimv/farm/musk/health/entity/HealthData.java

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -41,7 +44,8 @@ public class HealthData implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
 
     /**
      * 牧场编码

+ 3 - 0
musk/src/main/java/com/huimv/farm/musk/health/entity/HealthThreshold.java

@@ -68,4 +68,7 @@ public class HealthThreshold implements Serializable {
     private String user;
 
 
+    private String stage;
+
+
 }

+ 5 - 1
musk/src/main/java/com/huimv/farm/musk/health/entity/HealthWarning.java

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -46,7 +49,8 @@ public class HealthWarning implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
 
     /**
      * 牧场编码

+ 7 - 0
musk/src/main/java/com/huimv/farm/musk/health/mapper/HealthDataMapper.java

@@ -1,7 +1,13 @@
 package com.huimv.farm.musk.health.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.farm.musk.entity.vo.DataVo;
 import com.huimv.farm.musk.health.entity.HealthData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface HealthDataMapper extends BaseMapper<HealthData> {
 
+    List<DataVo> listTemp(@Param(Constants.WRAPPER) QueryWrapper<HealthData> queryWrapper);
 }

+ 1 - 0
musk/src/main/java/com/huimv/farm/musk/health/service/impl/HealthThresholdServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**

+ 7 - 0
musk/src/main/java/com/huimv/farm/musk/mapper/DevEnergyMapper.java

@@ -23,4 +23,11 @@ public interface DevEnergyMapper extends BaseMapper<DevEnergy> {
 
 
     List<DevEnergy> listData(@Param(Constants.WRAPPER)QueryWrapper<DevEnergy> queryWrapper);
+
+
+    List<DevEnergy> listScreen(@Param(Constants.WRAPPER)QueryWrapper<DevEnergy> queryWrapper);
+
+
+    List<DevEnergy> listRank(@Param(Constants.WRAPPER)QueryWrapper<DevEnergy> queryWrapper);
+
 }

+ 7 - 0
musk/src/main/java/com/huimv/farm/musk/mapper/DevEnvMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.farm.musk.entity.DevEnv;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.farm.musk.entity.vo.DataVo;
+import com.huimv.farm.musk.entity.vo.EnvDataVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -21,4 +23,9 @@ public interface DevEnvMapper extends BaseMapper<DevEnv> {
     List<DevEnv> listDataDay(@Param(Constants.WRAPPER)QueryWrapper<DevEnv> queryWrapper);
 
     List<DevEnv> listData(@Param(Constants.WRAPPER)QueryWrapper<DevEnv> queryWrapper);
+
+    List<EnvDataVo> listScreen(@Param(Constants.WRAPPER) QueryWrapper<DevEnv> queryWrapper);
+
+    List<DataVo> listTem(@Param(Constants.WRAPPER) QueryWrapper<DevEnv> queryWrapper);
+
 }

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/mapper/SysCameraFunctionMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.mapper;
+
+import com.huimv.farm.musk.entity.SysCameraFunction;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 功能点 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-11
+ */
+public interface SysCameraFunctionMapper extends BaseMapper<SysCameraFunction> {
+
+}

+ 5 - 2
musk/src/main/java/com/huimv/farm/musk/service/IBaseBuildingService.java

@@ -17,9 +17,9 @@ import java.util.Map;
  */
 public interface IBaseBuildingService extends IService<BaseBuilding> {
 
-    Result addBuilding(BaseBuilding baseBuilding);
+    Result addBuilding(Map<String,String> map);
 
-    Result updateBuilding(BaseBuilding baseBuilding);
+    Result updateBuilding(Map<String,String> map);
 
     Result deleteBuilding(Map<String, Integer> map);
 
@@ -29,4 +29,7 @@ public interface IBaseBuildingService extends IService<BaseBuilding> {
     Result listTreeBuilding(Map<String, String> map);
 
     List<BaseBuilding> listUnit();
+
+    //app使用
+    Result listTreeBuilding2(Map<String, String> map);
 }

+ 6 - 0
musk/src/main/java/com/huimv/farm/musk/service/IDevEnergyService.java

@@ -23,4 +23,10 @@ public interface IDevEnergyService extends IService<DevEnergy> {
     Result listHistory(Map<String, String> paramsMap);
 
     Result listScreen(Map<String, String> paramsMap);
+
+    //大屏物联监测的能耗监测
+    Result listWeek(Map<String, String> paramsMap);
+
+    //大屏物联监测能耗区域排名
+    Result listRank(Map<String, String> paramsMap);
 }

+ 9 - 0
musk/src/main/java/com/huimv/farm/musk/service/IDevEnvService.java

@@ -23,4 +23,13 @@ public interface IDevEnvService extends IService<DevEnv> {
     Result listHistory(Map<String, String> paramsMap);
 
     Result listScreen(Map<String, String> paramsMap);
+
+    //大屏物联监测数据2
+    Result listScreen2(Map<String, String> paramsMap);
+
+    //大屏主页物联监测
+    Result listByType(Map<String, String> paramsMap);
+
+    //健康监测中的温度监测
+    Result listAll(Map<String, String> paramsMap);
 }

+ 16 - 0
musk/src/main/java/com/huimv/farm/musk/service/ISysCameraFunctionService.java

@@ -0,0 +1,16 @@
+package com.huimv.farm.musk.service;
+
+import com.huimv.farm.musk.entity.SysCameraFunction;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 功能点 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-11
+ */
+public interface ISysCameraFunctionService extends IService<SysCameraFunction> {
+
+}

+ 139 - 13
musk/src/main/java/com/huimv/farm/musk/service/impl/BaseBuildingServiceImpl.java

@@ -1,12 +1,17 @@
 package com.huimv.farm.musk.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
+import com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper;
+import com.huimv.farm.musk.breed.mapper.MuskEarmarkMapper;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
 import com.huimv.farm.musk.common.utils.ResultUtil;
 import com.huimv.farm.musk.entity.BaseBuilding;
 import com.huimv.farm.musk.entity.vo.TreeBasePigpen;
+import com.huimv.farm.musk.entity.vo.TreeBasePigpen2;
 import com.huimv.farm.musk.mapper.BaseBuildingMapper;
 import com.huimv.farm.musk.service.IBaseBuildingService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,37 +36,109 @@ public class BaseBuildingServiceImpl extends ServiceImpl<BaseBuildingMapper, Bas
 
     @Autowired
     private BaseBuildingMapper baseBuildingMapper;
+    @Autowired
+    private BreedMuskInfoMapper muskInfoMapper;
+    @Autowired
+    private MuskEarmarkMapper earmarkMapper;
 
 
     @Override
     @Transactional
-    public Result addBuilding(BaseBuilding baseBuilding) {
-        if (this.count(new QueryWrapper<BaseBuilding>().eq("build_name", baseBuilding.getBuildName())) != 0) {
+    public Result addBuilding(Map<String,String> map) {
+        String farmId = map.get("farmId");
+        String number = map.get("number");
+        String buildName = map.get("buildName");
+        if (this.count(new QueryWrapper<BaseBuilding>().eq("build_name", buildName)) != 0) {
             return new Result(10001, "栋舍名已存在", false);
         }
+        BaseBuilding baseBuilding = new BaseBuilding();
+        baseBuilding.setBuildName(buildName);
         baseBuilding.setParentId(0);
         baseBuilding.setFType(1);
+        baseBuilding.setFarmId(Integer.parseInt(farmId));
         this.save(baseBuilding);
+        BaseBuilding baseBuilding1 = baseBuildingMapper.selectOne(new QueryWrapper<BaseBuilding>().eq("farm_id", farmId)
+                .eq("build_name", buildName).eq("f_type",1));
+
+        QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
+        Integer parentId = baseBuilding1.getId();
+        queryWrapper.eq("farm_id", farmId).eq("parent_id", parentId).orderByDesc("id").last(" limit 1");
+        BaseBuilding building = baseBuildingMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isEmpty(building)) {
+            for (int i = 1; i < Integer.parseInt(number) + 1; i++) {
+                BaseBuilding baseBuilding2 = new BaseBuilding();
+                baseBuilding2.setBuildName(i + "号栏");
+                baseBuilding2.setOther2(String.valueOf(i));
+                baseBuilding2.setParentId(parentId);
+                baseBuilding2.setFarmId(Integer.parseInt(farmId));
+                baseBuilding2.setFType(2);
+                baseBuildingMapper.insert(baseBuilding2);
+            }
+        } else {
+            String other2 = building.getOther2();
+            for (int i =  1; i <Integer.parseInt(number) + 1; i++) {
+                BaseBuilding baseBuilding2 = new BaseBuilding();
+                baseBuilding2.setBuildName(Integer.parseInt(other2) + i + "号栏");
+                baseBuilding2.setOther2(String.valueOf(Integer.parseInt(other2) + i));
+                baseBuilding2.setParentId(parentId);
+                baseBuilding2.setFarmId(Integer.parseInt(farmId));
+                baseBuilding2.setFType(2);
+                baseBuildingMapper.insert(baseBuilding);
+            }
+        }
+
         return Result.SUCCESS();
     }
 
     @Override
     @Transactional
-    public Result updateBuilding(BaseBuilding baseBuilding) {
-        if (this.count(new QueryWrapper<BaseBuilding>().eq("build_name", baseBuilding.getBuildName()).ne("id", baseBuilding.getId())) != 0) {
+    public Result updateBuilding(Map<String,String> map) {
+        String farmId = map.get("farmId");
+        String number = map.get("number");
+        String buildName = map.get("buildName");
+        String id = map.get("id");
+        if (this.count(new QueryWrapper<BaseBuilding>().eq("build_name", buildName).ne("id", id)) != 0) {
             return new Result(10001, "栋舍名已存在", false);
         }
         QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("parent_id", baseBuilding.getId());
+        queryWrapper.eq("parent_id", id);
         List<BaseBuilding> buildings = baseBuildingMapper.selectList(queryWrapper);
         if (buildings.size() != 0) {
-            for (BaseBuilding building : buildings) {
-                baseBuildingMapper.updateById(building);
-
+            List<Integer> idList = new ArrayList<>();
+            buildings.forEach(i->{
+                idList.add(i.getId());
+            });
+            QueryWrapper<BreedMuskInfo> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.in("unit_id",idList).eq("is_leave",0);
+            List<BreedMuskInfo> muskInfos = muskInfoMapper.selectList(queryWrapper1);
+            if (muskInfos.size() != 0) {
+                return new Result(10001, "栏位中存在林麝,请先转舍后再进行栋舍栏位修改", false);
+            }
+            BaseBuilding building = this.getById(id);
+            building.setBuildName(buildName);
+            this.updateById(building);
+            this.removeByIds(idList);
+            for (int i = 1; i < Integer.parseInt(number) + 1; i++) {
+                BaseBuilding baseBuilding = new BaseBuilding();
+                baseBuilding.setBuildName(i + "号栏");
+                baseBuilding.setOther2(String.valueOf(i));
+                baseBuilding.setParentId(Integer.parseInt(id));
+                baseBuilding.setFarmId(Integer.parseInt(farmId));
+                baseBuilding.setFType(2);
+                baseBuildingMapper.insert(baseBuilding);
+            }
+        }else {
+            for (int i = 1; i < Integer.parseInt(number) + 1; i++) {
+                BaseBuilding baseBuilding = new BaseBuilding();
+                baseBuilding.setBuildName(i + "号栏");
+                baseBuilding.setOther2(String.valueOf(i));
+                baseBuilding.setParentId(Integer.parseInt(id));
+                baseBuilding.setFarmId(Integer.parseInt(farmId));
+                baseBuilding.setFType(2);
+                baseBuildingMapper.insert(baseBuilding);
             }
         }
         //TODO:后面补充羊只和设备的名称修改
-        baseBuildingMapper.updateById(baseBuilding);
         return ResultUtil.updateResult(1);
     }
 
@@ -70,6 +147,12 @@ public class BaseBuildingServiceImpl extends ServiceImpl<BaseBuildingMapper, Bas
     public Result deleteBuilding(Map<String, Integer> map) {
         Integer id = map.get("id");
         //TODO:后面再进行补充羊只和设备情况
+        QueryWrapper<BreedMuskInfo> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("unit_id", id).eq("is_leave", 0);
+        Integer count = muskInfoMapper.selectCount(queryWrapper1);
+        if (count != 0) {
+            return new Result(10001,"删除失败,该栋舍存在林麝",false);
+        }
 //        if (ObjectUtil.isNotEmpty(cageIds)){
 //            if (ObjectUtil.isNotEmpty(baseDuckInfoMapper.selectList(new QueryWrapper<BaseDuckInfo>().in("unit_id",cageIds)))) {
 //                return new Result(10001,"删除失败,该栋舍下属笼中存在鸭只",false);
@@ -110,7 +193,17 @@ public class BaseBuildingServiceImpl extends ServiceImpl<BaseBuildingMapper, Bas
 
     @Override
     public List<BaseBuilding> listUnit() {
-        return this.list(new QueryWrapper<BaseBuilding>().eq("f_type",2));
+        return this.list(new QueryWrapper<BaseBuilding>().eq("f_type",1));
+    }
+
+    @Override
+    public Result listTreeBuilding2(Map<String, String> map) {
+        String farmId = map.get("farmId");
+        List<BaseBuilding> baseBuildings = this.list(new QueryWrapper<BaseBuilding>()
+                .eq("farm_id", farmId)
+                .orderByAsc("id"));
+        List<TreeBasePigpen2> treeBasePigpens = parseBizBaseArea2(baseBuildings);
+        return new Result(ResultCode.SUCCESS, treeBasePigpens);
     }
 
     /**
@@ -121,12 +214,17 @@ public class BaseBuildingServiceImpl extends ServiceImpl<BaseBuildingMapper, Bas
      */
     private List<TreeBasePigpen> parseBizBaseArea(List<BaseBuilding> bizBaseAreas) {
         //构建需要展示的树形节点结构
-        Map<String, TreeBasePigpen> nodeMap = bizBaseAreas.stream().map(basePigpen -> {
+        Map<Object, TreeBasePigpen> nodeMap = bizBaseAreas.stream().map(basePigpen -> {
             TreeBasePigpen baseVo = new TreeBasePigpen();
-            baseVo.setId(basePigpen.getId() + "");
+            baseVo.setId(basePigpen.getId());
             baseVo.setFarmId(basePigpen.getFarmId());
             baseVo.setParentId(basePigpen.getParentId());
             baseVo.setBuildName(basePigpen.getBuildName());
+            if (basePigpen.getFType() == 2 && basePigpen.getDisabled() == 1) {
+                baseVo.setDisabled(true);
+            } else {
+                baseVo.setDisabled(false);
+            }
             baseVo.setChildNode(new ArrayList<>());
             return baseVo;
         }).collect(Collectors.toMap(TreeBasePigpen::getId, b -> b, (k1, k2) -> k1));
@@ -134,7 +232,35 @@ public class BaseBuildingServiceImpl extends ServiceImpl<BaseBuildingMapper, Bas
         ArrayList<TreeBasePigpen> roots = new ArrayList<>();
         //构建树形
         nodeMap.values().forEach(item -> {
-            String parentCode = item.getParentId() + "";
+            Integer parentCode = item.getParentId();
+            if (nodeMap.get(parentCode) == null) {
+                //父节点为空,说明当前节点就已经是父节点了 将该节点存起来
+                roots.add(item);
+            } else {
+                //父节点 不为空,说明有父节点,拿到该节点的父节点的孩子节点(就是我自己),将该节点存起来
+                nodeMap.get(parentCode).getChildNode().add(item);
+            }
+        });
+        return roots;
+    }
+
+
+    private List<TreeBasePigpen2> parseBizBaseArea2(List<BaseBuilding> bizBaseAreas) {
+        //构建需要展示的树形节点结构
+        Map<Object, TreeBasePigpen2> nodeMap = bizBaseAreas.stream().map(basePigpen -> {
+            TreeBasePigpen2 baseVo = new TreeBasePigpen2();
+            baseVo.setId(basePigpen.getId());
+            baseVo.setFarmId(basePigpen.getFarmId());
+            baseVo.setParentId(basePigpen.getParentId());
+            baseVo.setBuildName(basePigpen.getBuildName());
+            baseVo.setChildNode(new ArrayList<>());
+            return baseVo;
+        }).collect(Collectors.toMap(TreeBasePigpen2::getId, b -> b, (k1, k2) -> k1));
+        //创建数组存父亲节点
+        ArrayList<TreeBasePigpen2> roots = new ArrayList<>();
+        //构建树形
+        nodeMap.values().forEach(item -> {
+            Integer parentCode = item.getParentId();
             if (nodeMap.get(parentCode) == null) {
                 //父节点为空,说明当前节点就已经是父节点了 将该节点存起来
                 roots.add(item);

+ 133 - 10
musk/src/main/java/com/huimv/farm/musk/service/impl/DevEnergyServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONException;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -24,13 +25,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author author
@@ -53,7 +52,7 @@ public class DevEnergyServiceImpl extends ServiceImpl<DevEnergyMapper, DevEnergy
         String farmId = (String) map.get("farmId");
         String unitId = (String) map.get("unitId");
 
-        IPage<DevEnergy> list = page(new Page<>(current, size), new QueryWrapper<DevEnergy>().eq(StringUtils.isNotBlank(unitId),"unit_id",unitId).eq("farm_id", farmId));
+        IPage<DevEnergy> list = page(new Page<>(current, size), new QueryWrapper<DevEnergy>().eq(StringUtils.isNotBlank(unitId), "unit_id", unitId).eq("farm_id", farmId));
 
         return new Result(ResultCode.SUCCESS, list);
     }
@@ -63,8 +62,8 @@ public class DevEnergyServiceImpl extends ServiceImpl<DevEnergyMapper, DevEnergy
         String startDate = map.get("startDate");
         String endDate = map.get("endDate");
         String unitId = map.get("unitId");
-        return new Result(ResultCode.SUCCESS, this.list( new QueryWrapper<DevEnergy>().eq(StringUtils.isNotBlank(unitId),"unit_id",unitId)
-                .ge(StringUtils.isNotBlank(startDate),"date_time",startDate).le(StringUtils.isNotBlank(endDate),"date_time",endDate)));
+        return new Result(ResultCode.SUCCESS, this.list(new QueryWrapper<DevEnergy>().eq(StringUtils.isNotBlank(unitId), "unit_id", unitId)
+                .ge(StringUtils.isNotBlank(startDate), "date_time", startDate).le(StringUtils.isNotBlank(endDate), "date_time", endDate)));
 
     }
 
@@ -80,11 +79,11 @@ public class DevEnergyServiceImpl extends ServiceImpl<DevEnergyMapper, DevEnergy
         QueryWrapper<DevEnergy> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("farm_id", farmId).eq("unit_id", unitId);
         //今日
-        List<DevEnergy> protEnvData =null ;
+        List<DevEnergy> protEnvData = null;
         if ("1".equals(timeType)) {
             Date timesmorning = DataUill.getTimesmorning();
             queryWrapper.ge("date_time", timesmorning);
-            protEnvData = energyMapper.selectList(queryWrapper);
+            protEnvData = energyMapper.listDataDay(queryWrapper);
         }
         //本周
         else if ("2".equals(timeType)) {
@@ -112,7 +111,7 @@ public class DevEnergyServiceImpl extends ServiceImpl<DevEnergyMapper, DevEnergy
     public Result listScreen(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
         QueryWrapper<BaseBuilding> buildingQueryWrapper = new QueryWrapper<>();
-        buildingQueryWrapper.eq("farm_id", farmId).eq("f_type", 2);
+        buildingQueryWrapper.eq("farm_id", farmId).eq("f_type", 1);
         List<BaseBuilding> buildings = baseBuildingMapper.selectList(buildingQueryWrapper);
         JSONArray jsonArray = new JSONArray();
         if (buildings.size() != 0) {
@@ -135,4 +134,128 @@ public class DevEnergyServiceImpl extends ServiceImpl<DevEnergyMapper, DevEnergy
         }
         return new Result(ResultCode.SUCCESS, jsonArray);
     }
+
+    @Override
+    public Result listWeek(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7);
+        QueryWrapper<DevEnergy> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("date_time", calendar.getTime());
+        List<DevEnergy> energies = energyMapper.listScreen(queryWrapper);
+        return new Result(ResultCode.SUCCESS, energies);
+    }
+
+    @Override
+    public Result listRank(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+
+        JSONArray jsonArray = new JSONArray();
+        QueryWrapper<BaseBuilding> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).eq("f_type", 1);
+        List<BaseBuilding> buildings = baseBuildingMapper.selectList(queryWrapper);//得到所有的楼层
+        Date monthmorning = DataUill.getTimesMonthmorning();
+        for (BaseBuilding pigpen : buildings) {
+            Float value = 0.00f;
+            JSONObject jsonObject = new JSONObject();
+
+            QueryWrapper<DevEnergy> queryWrapper2 = new QueryWrapper<>();
+            queryWrapper2.eq("farm_id", farmId).ge("date_time",monthmorning)
+                    .eq("unit_id",pigpen.getId()).select(" IFNULL(SUM(water),0) water,IFNULL(SUM(elec),0) elec ");
+            DevEnergy devEnergy = energyMapper.selectOne(queryWrapper2);
+            jsonObject.put("water", devEnergy.getWater());
+            jsonObject.put("elec", devEnergy.getElec());
+
+            jsonObject.put("buildName", pigpen.getBuildName());
+            jsonArray.add(jsonObject);
+        }
+
+        JSONArray arraySort = jsonArraySort(jsonArray, "water", true);
+        return new Result(ResultCode.SUCCESS, arraySort);
+
+    }
+
+    /*数组排序*/
+    public static JSONArray jsonArraySort(JSONArray jsonArr, String sortKey, boolean is_desc) {
+        //存放排序结果json数组
+        JSONArray sortedJsonArray = new JSONArray();
+        //用于排序的list
+        List<JSONObject> jsonValues = new ArrayList<JSONObject>();
+        //将参数json数组每一项取出,放入list
+        if (jsonArr.size() < 4) {
+            for (int i = 0; i < jsonArr.size(); i++) {
+                jsonValues.add(jsonArr.getJSONObject(i));
+            }
+            //快速排序,重写compare方法,完成按指定字段比较,完成排序
+            Collections.sort(jsonValues, new Comparator<JSONObject>() {
+                //排序字段
+                private final String KEY_NAME = sortKey;
+
+                //重写compare方法
+                @Override
+                public int compare(JSONObject a, JSONObject b) {
+                    //如果用String接会导致一位数和两位数混合比对的时候不能准确比出来,要用int类型接
+                    //String valA = new String();
+                    //String valB = new String();
+                    Float valA = 0.00f;
+                    Float valB = 0.00f;
+                    try {
+                        valA = Float.parseFloat(a.getString(KEY_NAME));
+                        valB = Float.parseFloat(b.getString(KEY_NAME));
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+                    //是升序还是降序
+                    if (is_desc) {
+                        return -valA.compareTo(valB);
+                    } else {
+                        return -valB.compareTo(valA);
+                    }
+
+                }
+            });
+            //将排序后结果放入结果jsonArray
+            for (int i = 0; i < jsonArr.size(); i++) {
+                sortedJsonArray.add(jsonValues.get(i));
+            }
+        } else {
+            for (int i = 0; i < jsonArr.size(); i++) {
+                jsonValues.add(jsonArr.getJSONObject(i));
+            }
+            //快速排序,重写compare方法,完成按指定字段比较,完成排序
+            Collections.sort(jsonValues, new Comparator<JSONObject>() {
+                //排序字段
+                private final String KEY_NAME = sortKey;
+
+                //重写compare方法
+                @Override
+                public int compare(JSONObject a, JSONObject b) {
+                    //如果用String接会导致一位数和两位数混合比对的时候不能准确比出来,要用int类型接
+                    //String valA = new String();
+                    //String valB = new String();
+                    Float valA = 0.00f;
+                    Float valB = 0.00f;
+                    try {
+                        valA = Float.parseFloat(a.getString(KEY_NAME));
+                        valB = Float.parseFloat(b.getString(KEY_NAME));
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+                    //是升序还是降序
+                    if (is_desc) {
+                        return -valA.compareTo(valB);
+                    } else {
+                        return -valB.compareTo(valA);
+                    }
+
+                }
+            });
+            //将排序后结果放入结果jsonArray
+            for (int i = 0; i < 4; i++) {
+                sortedJsonArray.add(jsonValues.get(i));
+            }
+        }
+
+        return sortedJsonArray;
+    }
 }

+ 109 - 13
musk/src/main/java/com/huimv/farm/musk/service/impl/DevEnvServiceImpl.java

@@ -15,6 +15,12 @@ import com.huimv.farm.musk.common.utils.ResultCode;
 import com.huimv.farm.musk.entity.BaseBuilding;
 import com.huimv.farm.musk.entity.DevEnergy;
 import com.huimv.farm.musk.entity.DevEnv;
+import com.huimv.farm.musk.entity.vo.DataVo;
+import com.huimv.farm.musk.entity.vo.DataVo2;
+import com.huimv.farm.musk.entity.vo.EnvDataVo;
+import com.huimv.farm.musk.entity.vo.EnvDataVo2;
+import com.huimv.farm.musk.health.entity.HealthData;
+import com.huimv.farm.musk.health.mapper.HealthDataMapper;
 import com.huimv.farm.musk.mapper.BaseBuildingMapper;
 import com.huimv.farm.musk.mapper.DevEnvMapper;
 import com.huimv.farm.musk.service.IDevEnvService;
@@ -23,13 +29,15 @@ import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author author
@@ -42,6 +50,9 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
     private DevEnvMapper devEnvMapper;
     @Autowired
     private BaseBuildingMapper baseBuildingMapper;
+    @Autowired
+    private HealthDataMapper dataMapper;
+
 
 
     @Override
@@ -51,7 +62,7 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
         String farmId = (String) map.get("farmId");
         String unitId = (String) map.get("unitId");
 
-        IPage<DevEnv> list = page(new Page<>(current, size), new QueryWrapper<DevEnv>().eq(StringUtils.isNotBlank(unitId),"unit_id",unitId).eq("farm_id", farmId));
+        IPage<DevEnv> list = page(new Page<>(current, size), new QueryWrapper<DevEnv>().eq(StringUtils.isNotBlank(unitId), "unit_id", unitId).eq("farm_id", farmId));
 
         return new Result(ResultCode.SUCCESS, list);
     }
@@ -61,8 +72,8 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
         String startDate = map.get("startDate");
         String endDate = map.get("endDate");
         String unitId = map.get("unitId");
-        return new Result(ResultCode.SUCCESS, this.list( new QueryWrapper<DevEnv>().eq(StringUtils.isNotBlank(unitId),"unit_id",unitId)
-                .ge(StringUtils.isNotBlank(startDate),"date_time",startDate).le(StringUtils.isNotBlank(endDate),"date_time",endDate)));
+        return new Result(ResultCode.SUCCESS, this.list(new QueryWrapper<DevEnv>().eq(StringUtils.isNotBlank(unitId), "unit_id", unitId)
+                .ge(StringUtils.isNotBlank(startDate), "date_time", startDate).le(StringUtils.isNotBlank(endDate), "date_time", endDate)));
 
     }
 
@@ -79,11 +90,11 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
         QueryWrapper<DevEnv> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("farm_id", farmId).eq("unit_id", unitId);
         //今日
-        List<DevEnv> protEnvData =null ;
+        List<DevEnv> protEnvData = null;
         if ("1".equals(timeType)) {
             Date timesmorning = DataUill.getTimesmorning();
             queryWrapper.ge("date_time", timesmorning);
-            protEnvData = devEnvMapper.selectList(queryWrapper);
+            protEnvData = devEnvMapper.listDataDay(queryWrapper);
         }
         //本周
         else if ("2".equals(timeType)) {
@@ -111,16 +122,16 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
     public Result listScreen(Map<String, String> paramsMap) {
         String farmId = paramsMap.get("farmId");
         QueryWrapper<BaseBuilding> buildingQueryWrapper = new QueryWrapper<>();
-        buildingQueryWrapper.eq("farm_id", farmId).eq("f_type", 2);
-        List<BaseBuilding> buildings = baseBuildingMapper.selectList(buildingQueryWrapper);
+        buildingQueryWrapper.eq("farm_id", farmId).eq("id", 3);
+        List<BaseBuilding> baseBuildings = baseBuildingMapper.selectList(buildingQueryWrapper);
         JSONArray jsonArray = new JSONArray();
-        if (buildings.size() != 0) {
-            for (BaseBuilding building : buildings) {
+        if (baseBuildings.size() != 0) {
+            for (BaseBuilding baseBuilding : baseBuildings) {
                 JSONObject jsonObject = new JSONObject();
-                jsonObject.put("unitName", building.getBuildName());
-                jsonObject.put("unitId", building.getId());
+                jsonObject.put("unitName", baseBuilding.getBuildName());
+                jsonObject.put("unitId", baseBuilding.getId());
                 QueryWrapper<DevEnv> devEnvQueryWrapper = new QueryWrapper<>();
-                devEnvQueryWrapper.eq("farm_id", farmId).orderByDesc("id").last(" limit 1").eq("unit_id", building.getId());
+                devEnvQueryWrapper.eq("farm_id", farmId).orderByDesc("id").last(" limit 1").eq("unit_id", baseBuilding.getId());
                 DevEnv devEnv = devEnvMapper.selectOne(devEnvQueryWrapper);
                 if (ObjectUtil.isNotEmpty(devEnv)) {
                     jsonObject.put("humi", devEnv.getHumi());
@@ -136,5 +147,90 @@ public class DevEnvServiceImpl extends ServiceImpl<DevEnvMapper, DevEnv> impleme
             }
         }
         return new Result(ResultCode.SUCCESS, jsonArray);
+}
+
+    @Override
+    public Result listScreen2(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String id = paramsMap.get("id");//栋舍id
+        Date timesmorning = DataUill.getTimesmorning();
+        QueryWrapper<DevEnv> devEnvQueryWrapper = new QueryWrapper<>();
+        devEnvQueryWrapper.eq("farm_id", farmId).ge("date_time", timesmorning)
+                .eq("unit_id", 3).orderByAsc("date_time");
+        return new Result(ResultCode.SUCCESS, devEnvMapper.selectList(devEnvQueryWrapper));
+    }
+
+    @Override
+    public Result listByType(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Date timesmorning = DataUill.getTimesmorning();
+        List<EnvDataVo2> list = new ArrayList<>();
+
+        QueryWrapper<BaseBuilding> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("farm_id", farmId).eq("f_type", 1);
+        List<BaseBuilding> buildings = baseBuildingMapper.selectList(queryWrapper1);
+        if (buildings.size() != 0) {
+            for (BaseBuilding building : buildings) {
+                EnvDataVo2 protDataVo2 = new EnvDataVo2();
+                protDataVo2.setUnitId(building.getId());
+                protDataVo2.setUnitName(building.getBuildName());
+                QueryWrapper<DevEnv> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("farm_id", farmId).eq("unit_id", building.getId()).ge("date_time", timesmorning);
+                List<EnvDataVo> protDataVos = devEnvMapper.listScreen(queryWrapper);
+                protDataVo2.setList(protDataVos);
+                if (protDataVos.size() != 0) {
+                    EnvDataVo protDataVo = protDataVos.get(protDataVos.size() - 1);
+                    protDataVo2.setGas(protDataVo.getGas());
+                    protDataVo2.setHumi(protDataVo.getHumi());
+                    protDataVo2.setTem(protDataVo.getTem());
+                } else {
+                    protDataVo2.setGas("0");
+                    protDataVo2.setHumi("0");
+                    protDataVo2.setTem("0");
+                }
+                list.add(protDataVo2);
+            }
+        }
+        return new Result(ResultCode.SUCCESS, list);
+    }
+
+    @Override
+    public Result listAll(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        Date timesmorning = DataUill.getTimesmorning();
+        QueryWrapper<DevEnv> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).ge("date_time", timesmorning);
+        List<DataVo> envTemps = devEnvMapper.listTem(queryWrapper);
+
+        QueryWrapper<HealthData> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("farm_id", farmId).ge("create_time", timesmorning);
+        List<DataVo> healths = dataMapper.listTemp(queryWrapper1);
+
+        List<DataVo2> list = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        for (int i = 0; i < 24; i++) {
+            DataVo2 dataVo2 = new DataVo2();
+            if (i < 10) {
+                dataVo2.setTime(sdf.format(timesmorning)+" 0" + i+":00:00");
+            } else {
+                dataVo2.setTime(sdf.format(timesmorning)+" "+i+":00:00");
+            }
+            if (envTemps.size() != 0) {
+                for (DataVo envTemp : envTemps) {
+                    if (envTemp.getCreateTime().getHours() == i) {
+                        dataVo2.setEnvTemp(envTemp.getValues());
+                    }
+                }
+            }
+            if (healths.size() != 0) {
+                for (DataVo health : healths) {
+                    if (health.getCreateTime().getHours() == i) {
+                        dataVo2.setHealthTemp(health.getValues());
+                    }
+                }
+            }
+            list.add(dataVo2);
+        }
+        return new Result(ResultCode.SUCCESS, list);
     }
 }

+ 20 - 0
musk/src/main/java/com/huimv/farm/musk/service/impl/SysCameraFunctionServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.farm.musk.service.impl;
+
+import com.huimv.farm.musk.entity.SysCameraFunction;
+import com.huimv.farm.musk.mapper.SysCameraFunctionMapper;
+import com.huimv.farm.musk.service.ISysCameraFunctionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 功能点 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2024-09-11
+ */
+@Service
+public class SysCameraFunctionServiceImpl extends ServiceImpl<SysCameraFunctionMapper, SysCameraFunction> implements ISysCameraFunctionService {
+
+}

+ 2 - 2
musk/src/main/java/com/huimv/farm/musk/timer/DevTimer.java

@@ -47,8 +47,8 @@ public class DevTimer {
             DevEnergy devEnergy = new DevEnergy();
             String hum  =  NumberUtils.getNum(humidity -5, humidity +5, 0);
             String tem  =  NumberUtils.getNum(temp -1, temp +2, 1);
-            String elec = NumberUtils.getNum(100, 200, 0);
-            String water = NumberUtils.getNum(5, 15, 0);
+            String elec = NumberUtils.getNum(0, 15, 0);
+            String water = NumberUtils.getNum(0, 5, 0);
 
             devEnv.setHumi(hum);
             devEnv.setTem(tem);

+ 79 - 0
musk/src/main/java/com/huimv/farm/musk/timer/HealthTimer.java

@@ -1,14 +1,27 @@
 package com.huimv.farm.musk.timer;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
+import com.huimv.farm.musk.breed.entity.MuskEarmark;
+import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
 import com.huimv.farm.musk.breed.service.IMuskEarmarkService;
+import com.huimv.farm.musk.common.utils.NumberUtils;
+import com.huimv.farm.musk.health.entity.HealthData;
+import com.huimv.farm.musk.health.entity.HealthThreshold;
+import com.huimv.farm.musk.health.entity.HealthWarning;
 import com.huimv.farm.musk.health.service.IHealthDataService;
 import com.huimv.farm.musk.health.service.IHealthThresholdService;
 import com.huimv.farm.musk.health.service.IHealthWarningService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
+import java.util.List;
+
 @Component
 @EnableScheduling
 public class HealthTimer {
@@ -21,8 +34,74 @@ public class HealthTimer {
     private IHealthWarningService warningService;
     @Autowired
     private IMuskEarmarkService muskEarmarkService;
+    @Autowired
+    private IBreedMuskInfoService infoService;
 
+    @Scheduled(cron = "0 0 * * * ?")
     public void healthTimer() {
+        HealthThreshold threshold = thresholdService.getOne(new QueryWrapper<HealthThreshold>().eq("farm_id", 330110007));
+        List<MuskEarmark> earmarks = muskEarmarkService.list(new QueryWrapper<MuskEarmark>().eq("farm_id", 330110007)
+                .eq("is_use",1).eq("status", 1));
+        for (MuskEarmark earmark : earmarks) {
+            String temp = NumberUtils.getNumFloat(37.0, 40.0);
+            String act = NumberUtils.getNum(0, 400, 0);
+            if (Double.valueOf(temp) > Double.valueOf(threshold.getTempUpper())) {
+                HealthWarning warning = new HealthWarning();
+                warning.setCreateTime(new Date());
+                warning.setMuskId(earmark.getEarmark());
+                warning.setFarmId(330110007);
+                warning.setWarningType(1);
+                warning.setContent(earmark.getEarmark()+"当前体温为"+temp+",体温过高");
+                warningService.save(warning);
+            }
+            if (Double.valueOf(temp) < Double.valueOf(threshold.getTempDown())) {
+                HealthWarning warning = new HealthWarning();
+                warning.setCreateTime(new Date());
+                warning.setMuskId(earmark.getEarmark());
+                warning.setFarmId(330110007);
+                warning.setWarningType(2);
+                warning.setContent(earmark.getEarmark()+"当前体温为"+temp+",体温过低");
+                warningService.save(warning);
+            }
+            if (Double.valueOf(act) > Double.valueOf(threshold.getActUpper())) {
+                HealthWarning warning = new HealthWarning();
+                warning.setCreateTime(new Date());
+                warning.setMuskId(earmark.getEarmark());
+                warning.setFarmId(330110007);
+                warning.setWarningType(3);
+                warning.setContent(earmark.getEarmark()+"当前运动量为"+act+",运动量过大");
+                warningService.save(warning);
+            }
+            if (Double.valueOf(act) < Double.valueOf(threshold.getActDown())) {
+                HealthWarning warning = new HealthWarning();
+                warning.setCreateTime(new Date());
+                warning.setMuskId(earmark.getEarmark());
+                warning.setFarmId(330110007);
+                warning.setWarningType(4);
+                warning.setContent(earmark.getEarmark()+"当前运动量为"+act+",运动量过小");
+                warningService.save(warning);
+            }
+
+            HealthData data = new HealthData();
+            data.setAct(act);
+            data.setTemp(temp);
+            data.setFarmId(330110007);
+            data.setCreateTime(new Date());
+            data.setEarmark(earmark.getEarmark());
+            dataService.save(data);
+
+            earmark.setAct(act);
+            earmark.setTemp(temp);
+            earmark.setUpdateTime(new Date());
+            muskEarmarkService.updateById(earmark);
 
+            BreedMuskInfo muskInfo = infoService.getOne(new QueryWrapper<BreedMuskInfo>().eq("farm_id", 330110007)
+                    .eq("musk_id", earmark.getEarmark()).eq("is_leave", 0));
+            if (ObjectUtil.isNotEmpty(muskInfo)) {
+                muskInfo.setAct(Integer.parseInt(act));
+                muskInfo.setTemp(temp);
+                infoService.updateById(muskInfo);
+            }
+        }
     }
 }

+ 22 - 0
musk/src/main/java/com/huimv/farm/musk/timer/UpdateDayAge.java

@@ -0,0 +1,22 @@
+package com.huimv.farm.musk.timer;
+
+import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@EnableScheduling
+public class UpdateDayAge {
+
+    @Autowired
+    private IBreedMuskInfoService muskInfoService;
+    @Scheduled(cron = "0 0 23 * * ?")
+    private void setDayAge(){
+        System.out.println("--->更新日龄");
+        muskInfoService.updateDayAge();
+        System.out.println("--->更新成功");
+    }
+}

+ 72 - 0
musk/src/main/java/com/huimv/farm/musk/timer/UpdateEarmarkRank.java

@@ -0,0 +1,72 @@
+package com.huimv.farm.musk.timer;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.farm.musk.breed.entity.MuskEarmark;
+import com.huimv.farm.musk.breed.entity.MuskEarmarkRank;
+import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
+import com.huimv.farm.musk.breed.service.IMuskEarmarkRankService;
+import com.huimv.farm.musk.breed.service.IMuskEarmarkService;
+import com.huimv.farm.musk.common.utils.DataUill;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.DecimalFormat;
+import java.util.Date;
+import java.util.List;
+
+
+@Component
+@EnableScheduling
+public class UpdateEarmarkRank {
+
+    @Autowired
+    private IMuskEarmarkRankService rankService;
+    @Autowired
+    private IMuskEarmarkService earmarkService;
+
+    @Scheduled(cron = "0 0 * * * ?")
+    private void setDayAge() {
+        Integer onStatus = 0;
+        List<MuskEarmark> earmarks = earmarkService.list();
+        for (MuskEarmark earmark : earmarks) {
+            if (earmark.getStatus() == 1) {
+                onStatus = onStatus + 1;
+            }
+        }
+        Integer size = earmarks.size();
+        Date timesmorning = DataUill.getTimesmorning();
+        QueryWrapper<MuskEarmarkRank> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ge("create_time", timesmorning);
+        MuskEarmarkRank rank = rankService.getOne(queryWrapper);
+        if (ObjectUtil.isNotEmpty(rank)) {
+            rank.setCreateTime(new Date());
+            if (size != 0) {
+                double v = onStatus.doubleValue() / size.doubleValue();
+                DecimalFormat def = new DecimalFormat("0.00");
+                String format = def.format(v);
+                float aFloat = Float.parseFloat(format) * 100;
+                rank.setRankValue(String.valueOf(aFloat));
+            } else {
+                rank.setRankValue("0.00");
+            }
+            rankService.updateById(rank);
+        } else {
+            MuskEarmarkRank rank1 = new MuskEarmarkRank();
+            rank1.setCreateTime(new Date());
+            rank1.setFarmId(330110007);
+            if (size != 0) {
+                double v = onStatus.doubleValue() / size.doubleValue();
+                DecimalFormat def = new DecimalFormat("0.00");
+                String format = def.format(v);
+                float aFloat = Float.parseFloat(format) * 100;
+                rank1.setRankValue(String.valueOf(aFloat));
+            } else {
+                rank1.setRankValue("0.00");
+            }
+            rankService.save(rank1);
+        }
+    }
+}

+ 38 - 0
musk/src/main/java/com/huimv/farm/musk/timer/UpdateStock.java

@@ -0,0 +1,38 @@
+package com.huimv.farm.musk.timer;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.farm.musk.breed.entity.BreedMuskInfo;
+import com.huimv.farm.musk.breed.service.IBreedMuskInfoService;
+import com.huimv.farm.musk.breed.service.IBreedMuskStockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+@Component
+@EnableScheduling
+public class UpdateStock {
+
+    @Autowired
+    private IBreedMuskStockService stockService;
+    @Autowired
+    private IBreedMuskInfoService muskInfoService;
+    @Scheduled(cron = "0 0 23 * * ?")
+    private void setDayAge(){
+        QueryWrapper<BreedMuskInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_leave", 0).eq("farm_id", 330110007);
+        List<BreedMuskInfo> muskInfos = muskInfoService.list(queryWrapper);
+        Integer maleCount = 0;
+        Integer femaleCount = 0;
+        Integer youngCount = 0;
+        for (BreedMuskInfo muskInfo : muskInfos) {
+            if (muskInfo.getStage() == 1) {
+                youngCount = youngCount + 1;
+            }
+
+        }
+    }
+}

+ 12 - 0
musk/src/main/resources/com/huimv/farm/musk/mapper/DevEnergyMapper.xml

@@ -32,4 +32,16 @@
         ORDER BY date_time ASC
     </select>
 
+    <select id="listScreen" resultType="com.huimv.farm.musk.entity.DevEnergy">
+        select sum(water) 'water',sum(elec) 'elec',date_time 'dateTime' from dev_energy
+        ${ew.customSqlSegment}
+        group by DATE_FORMAT(date_time,'%y-%m-%d')
+        ORDER BY date_time ASC
+    </select>
+
+    <select id="listRank" resultType="com.huimv.farm.musk.entity.DevEnergy">
+        select sum(water) 'water',sum(elec) 'elec',unit_id 'unitId'  from dev_energy
+        ${ew.customSqlSegment}
+        group by unit_id;
+    </select>
 </mapper>

+ 12 - 0
musk/src/main/resources/com/huimv/farm/musk/mapper/DevEnvMapper.xml

@@ -38,4 +38,16 @@ select Convert((IFNUll(avg(humi),'0')),DECIMAL(10,2)) 'humi',
         ORDER BY date_time ASC
     </select>
 
+    <select id="listScreen" resultType="com.huimv.farm.musk.entity.vo.EnvDataVo">
+        select IFNULL(humi,'0') 'humi',IFNULL(tem,'0') 'tem',IFNULL(gas,'0') 'gas',date_time 'dateTime',unit_id 'unitId',unit_name 'unitName' from dev_env
+        ${ew.customSqlSegment}
+        order by date_time
+    </select>
+
+    <select id="listTem" resultType="com.huimv.farm.musk.entity.vo.DataVo">
+        select Convert((IFNULL(avg(tem),'0')),DECIMAL(10,2)) 'values',date_time 'createTime' from dev_env
+        ${ew.customSqlSegment}
+        group by DATE_FORMAT(date_time,'%y-%m-%d %H')
+        order by date_time asc
+    </select>
 </mapper>

+ 5 - 0
musk/src/main/resources/mapper/BreedBatchMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.farm.musk.breed.mapper.BreedBatchMapper">
+
+</mapper>

+ 8 - 0
musk/src/main/resources/mapper/BreedFeedMapper.xml

@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.breed.mapper.BreedFeedMapper">
 
+    <select id="listFeed" resultType="com.huimv.farm.musk.entity.vo.FeedDataVo">
+     select CONVERT((IFNULL(sum(dry_leaf),'0')),decimal(10,2)) 'dryLeaf',CONVERT((IFNULL(sum(wet_leaf),'0')),decimal(10,2)) 'wetLeaf',
+     CONVERT((IFNULL(sum(vegetable),'0')),decimal(10,2)) 'vegetable',CONVERT((IFNULL(sum(feed),'0')),decimal(10,2)) 'feed',create_time 'createTime'
+     from breed_feed
+     ${ew.customSqlSegment}
+     group by DATE_FORMAT(create_time,'%y-%m-%d')
+     order by create_time
+    </select>
 </mapper>

+ 15 - 0
musk/src/main/resources/mapper/BreedMuskInfoMapper.xml

@@ -2,4 +2,19 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.breed.mapper.BreedMuskInfoMapper">
 
+
+    <update id="updateDayAge">
+        update breed_musk_info set day_num=day_num + 1 where is_leave=0;
+
+    </update>
+
+    <select id="listMuskAndBuild" resultType="com.huimv.farm.musk.breed.entity.vo.AppMuskInfoVo">
+        select b.id 'unitId',b.build_name 'unitName',b.parent_id 'parentId',m.musk_id 'muskId',m.app_status 'appStatus'
+        ,m.batch_num 'batchNum',m.batch_name 'batchName',m.is_leave 'isLeave',m.breed 'breed',m.sex 'sex',m.birth_date 'birthDate'
+        ,m.inspect_result 'inspectResult',m.weight 'weight',m.female_id 'femaleId',m.male_id 'maleId',m.day_num 'dayNum'
+        ,m.farm_id 'farmId',m.temp 'temp',m.act 'act',m.stage 'stage' from base_building b left join breed_musk_info m
+        on b.id=m.unit_id
+        where b.farm_id=#{farmId} and b.f_type=2
+        order by b.id asc
+    </select>
 </mapper>

+ 7 - 0
musk/src/main/resources/mapper/BreedMuskStockMapper.xml

@@ -2,4 +2,11 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.breed.mapper.BreedMuskStockMapper">
 
+    <select id="listScreen" resultType="com.huimv.farm.musk.breed.entity.vo.MuskStockVo">
+        select IFNULL(sum(male_number),'0') 'maleNumber',IFNULL(sum(female_number),'0') 'femaleNumber',IFNULL(sum(young_number),'0') 'youngNumber'
+        ,create_time 'createTime' from breed_musk_stock
+        ${ew.customSqlSegment}
+        group by DATE_FORMAT(create_time,'%y-%m-%d')
+        order by create_time asc
+    </select>
 </mapper>

+ 5 - 0
musk/src/main/resources/mapper/BreedVaccinationMapper.xml

@@ -2,4 +2,9 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.breed.mapper.BreedVaccinationMapper">
 
+    <select id="listCount" resultType="com.huimv.farm.musk.breed.entity.vo.VaccinationVo">
+        select IFNULL(sum(number),'0') 'numbers',vaccination_name 'vaccinationName' from breed_vaccination
+        ${ew.customSqlSegment}
+        group by vaccination_name
+    </select>
 </mapper>

+ 6 - 0
musk/src/main/resources/mapper/HealthDataMapper.xml

@@ -2,4 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.health.mapper.HealthDataMapper">
 
+    <select id="listTemp" resultType="com.huimv.farm.musk.entity.vo.DataVo">
+        select Convert((IFNUll(avg(temp),'0')),DECIMAL(10,2)) 'values',create_time 'createTime' from  health_data
+        ${ew.customSqlSegment}
+        group by DATE_FORMAT(create_time,'%y-%m-%d %H')
+        order by create_time
+    </select>
 </mapper>

+ 6 - 0
musk/src/main/resources/mapper/MuskEarmarkMapper.xml

@@ -2,4 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.farm.musk.breed.mapper.MuskEarmarkMapper">
 
+    <select id="listScreen" resultType="com.huimv.farm.musk.breed.entity.vo.EarmarkActVo">
+        select ROUND(IFNUll(avg(act),'0')) 'actValue',create_time 'createTime' from health_data
+        ${ew.customSqlSegment}
+        group by DATE_FORMAT(create_time,'%y-%m-%d %H')
+        order by create_time asc
+    </select>
 </mapper>

+ 5 - 0
musk/src/main/resources/mapper/MuskEarmarkRankMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.farm.musk.breed.mapper.MuskEarmarkRankMapper">
+
+</mapper>

+ 5 - 0
musk/src/main/resources/mapper/SysCameraFunctionMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.farm.musk.mapper.SysCameraFunctionMapper">
+
+</mapper>