Procházet zdrojové kódy

6个接口初步测试

yinhao před 4 roky
rodič
revize
bbc5c536bc
20 změnil soubory, kde provedl 433 přidání a 262 odebrání
  1. 47 56
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/controller/PigController.java
  2. 2 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/IndoorEnvironmentDao.java
  3. 2 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/OutdoorEnvironmentDao.java
  4. 4 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/PigDao.java
  5. 6 6
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/IndoorEnvironmentEntity.java
  6. 15 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/OutdoorEnvironmentEntity.java
  7. 22 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/YearPigBaseEntity.java
  8. 19 3
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/EnvVo.java
  9. 27 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/IndoorEnvVo.java
  10. 25 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/OutdoorEnvVo.java
  11. 23 5
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigBaseVo.java
  12. 5 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigPedigreeFatherVo.java
  13. 7 2
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigPedigreeMotherVo.java
  14. 6 9
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/interceptor/JWTInterceptor.java
  15. 27 14
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/PigService.java
  16. 124 162
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/impl/PigServiceImpl.java
  17. 39 0
      huimv-smart-apiservice/src/main/resources/mapper/apiservice/YearPigBaseDao.xml
  18. 1 1
      huimv-smart-common/pom.xml
  19. 19 0
      huimv-smart-common/src/main/java/com/huimv/common/exception/RRExceptionHandler.java
  20. 13 0
      huimv-smart-common/src/main/java/com/huimv/common/validate/ListValue.java

+ 47 - 56
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/controller/PigController.java

@@ -1,14 +1,15 @@
 package com.huimv.apiservice.controller;
 
-import com.huimv.apiservice.entity.SleepStatusEntity;
 import com.huimv.apiservice.entity.vo.*;
 import com.huimv.apiservice.limit.annotation.Limit;
 import com.huimv.apiservice.service.PigService;
+import com.huimv.common.utils.PageUtils;
 import com.huimv.common.utils.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
 import java.util.Map;
 import java.util.Objects;
 
@@ -35,7 +36,6 @@ public class PigController {
     @GetMapping("/getPigInfo")
     public R getPigInfo(@RequestParam(value = "accessToken") String accessToken,
                         @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
         Map<String, Object> map = pigService.getPigInfoByEarTagNo(pigEarTagNo);
         return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", map);
     }
@@ -50,74 +50,65 @@ public class PigController {
      */
     @GetMapping("/getImage")
     public R getImage(@RequestParam(value = "accessToken") String accessToken,
-                      @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
+                      @Valid @NotBlank @RequestParam("pigEarTagNo") String pigEarTagNo) {
         PigImageVo pigImageVo = pigService.getImageByEarTagNo(pigEarTagNo);
         return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", pigImageVo);
     }
 
+    /**
+     * 根据品种名称获取猪的数量和基本信息
+     *
+     * @param accessToken token
+     * @param breedName   品种名称
+     * @return
+     */
     @GetMapping("/getListByBreed")
     public R getListByBreed(@RequestParam(value = "accessToken") String accessToken,
                             @RequestParam("breedName") String breedName) {
-        //TODO token校验
-        List<PigBaseVo> pigBaseVoList = pigService.getListByBreed(breedName);
-        return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", pigBaseVoList);
-    }
-
-    @RequestMapping("/getPigPedigree")
-    public R getPigPedigree(@RequestParam(value = "accessToken", required = false) String accessToken,
-                            @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
-        PigPedigreeVo pigPedigreeVo = pigService.getPigPedigree(pigEarTagNo);
-        return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", pigPedigreeVo);
-    }
-
-    @RequestMapping("/getKeeper")
-    public R getKeeper(@RequestParam(value = "accessToken", required = false) String accessToken,
-                       @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
-        PigKeeperVo pigKeeperVo = pigService.getKeeper(pigEarTagNo);
-        return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", pigKeeperVo);
+        PageUtils page = pigService.getListByBreed(breedName);
+        return Objects.requireNonNull(R.ok().put("code", 1000)).put("page", page);
     }
 
-    @RequestMapping("/getIndoorEnv")
-    public R getIndoorEnv(@RequestParam(value = "accessToken", required = false) String accessToken,
+    /**
+     * 获取环境数据
+     *
+     * @param accessToken token
+     * @param pigEarTagNo 耳标号
+     * @return
+     */
+    @GetMapping("/getIndoorEnv")
+    public R getIndoorEnv(@RequestParam(value = "accessToken") String accessToken,
                           @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
         EnvVo envVo = pigService.getIndoorEnv(pigEarTagNo);
         return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", envVo);
     }
 
-    @RequestMapping("/getFeedTimes")
-    public R getFeedTimes(@RequestParam(value = "accessToken", required = false) String accessToken,
-                          @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
-
-//          = pigService.getFeedTimes(pigEarTagNo);
-//        return Objects.requireNonNull(R.ok().put("code", 1000)).put("data", envVo);
-        return null;
-    }
-
-    //8.获取当天的睡眠状态数据接⼝
-    @RequestMapping("/getSleepStatus")
-    public R getSleepStatus(@RequestParam(value = "accessToken", required = false) String accessToken,
-                            @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
-        SleepStatusEntity sleepStatusEntity = pigService.getSleepStatus(pigEarTagNo);
-
-
-        return Objects.requireNonNull(Objects.requireNonNull(R.ok().put("code", 1000)).put("msg", "查询成功")).put("data", sleepStatusEntity);
+    /**
+     * 修改认养状态
+     *
+     * @param accessToken token
+     * @param pigEarTagNo 耳标号
+     * @return
+     */
+    @GetMapping("/adopt")
+    public R adopt(@RequestParam(value = "accessToken") String accessToken,
+                   @RequestParam("pigEarTagNo") String pigEarTagNo) {
+        pigService.adopt(pigEarTagNo);
+        return Objects.requireNonNull(R.ok().put("code", 1000)).put("msg", "认养成功!");
     }
 
-    //9.获取当天的运动数据接⼝
-    @RequestMapping("/getActivityAmount")
-    public R getActivityAmount(@RequestParam(value = "accessToken", required = false) String accessToken,
-                               @RequestParam("pigEarTagNo") String pigEarTagNo) {
-        //TODO token校验
-        PigSportVo pigSportVo = pigService.getActivityAmount(pigEarTagNo);
-
-
-        return Objects.requireNonNull(Objects.requireNonNull(R.ok().put("code", 1000)).put("msg", "查询成功")).put("data", pigSportVo);
+    /**
+     * 出栏
+     *
+     * @param accessToken token
+     * @param pigEarTagNo 耳标号
+     * @return
+     */
+    @GetMapping("/outFence")
+    public R outFence(@RequestParam(value = "accessToken", required = false) String accessToken,
+                      @RequestParam("pigEarTagNo") String pigEarTagNo,
+                      @RequestParam("status") Integer status) {
+        pigService.outFence(pigEarTagNo,status);
+        return Objects.requireNonNull(R.ok().put("code", 1000)).put("msg", "更新出栏状态成功!");
     }
-
 }

+ 2 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/IndoorEnvironmentDao.java

@@ -3,6 +3,7 @@ package com.huimv.apiservice.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huimv.apiservice.entity.IndoorEnvironmentEntity;
 import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * 室内环境信息表
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @date 2021-05-07 15:32:42
  */
 @Mapper
+@Repository
 public interface IndoorEnvironmentDao extends BaseMapper<IndoorEnvironmentEntity> {
 	
 }

+ 2 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/OutdoorEnvironmentDao.java

@@ -3,6 +3,7 @@ package com.huimv.apiservice.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huimv.apiservice.entity.OutdoorEnvironmentEntity;
 import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * 室外环境信息表
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @date 2021-05-07 15:32:42
  */
 @Mapper
+@Repository
 public interface OutdoorEnvironmentDao extends BaseMapper<OutdoorEnvironmentEntity> {
 
 }

+ 4 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/PigDao.java

@@ -1,8 +1,10 @@
 package com.huimv.apiservice.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huimv.apiservice.entity.EmployeeEntity;
 import com.huimv.apiservice.entity.YearPigBaseEntity;
+import com.huimv.apiservice.entity.vo.PigBaseVo;
 import org.mapstruct.Mapper;
 import org.springframework.stereotype.Repository;
 
@@ -18,4 +20,6 @@ public interface PigDao extends BaseMapper<YearPigBaseEntity> {
     EmployeeEntity selectFeederInfoByPigEarTagNo(String pigEarTagNo);
 
     String selectPastureNameByPigstyId(Integer pigstyId);
+
+    IPage<PigBaseVo> selectPagePigBaseVoByBreedName(IPage<PigBaseVo> page, String breedName);
 }

+ 6 - 6
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/IndoorEnvironmentEntity.java

@@ -20,7 +20,7 @@ public class IndoorEnvironmentEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     *
+     * id
      */
     @TableId
     private Integer id;
@@ -29,6 +29,11 @@ public class IndoorEnvironmentEntity implements Serializable {
      */
     private Integer pigstyId;
     /**
+     * 日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date date;
+    /**
      * 温度
      */
     private Double temperature;
@@ -41,11 +46,6 @@ public class IndoorEnvironmentEntity implements Serializable {
      */
     private String gas;
     /**
-     * 日期
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
-    private Date date;
-    /**
      * 采集时间
      */
     private Date collectTime;

+ 15 - 1
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/OutdoorEnvironmentEntity.java

@@ -1,6 +1,7 @@
 package com.huimv.apiservice.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -19,15 +20,28 @@ public class OutdoorEnvironmentEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     *
+     * id
      */
     @TableId
     private Integer id;
     /**
      * 日期
      */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private Date date;
     /**
+     * 温度
+     */
+    private Double temperature;
+    /**
+     * 湿度
+     */
+    private Double humidity;
+    /**
+     * 气体
+     */
+    private String gas;
+    /**
      * 采集时间
      */
     private Date collectTime;

+ 22 - 1
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/YearPigBaseEntity.java

@@ -19,7 +19,7 @@ public class YearPigBaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     *
+     * id
      */
     @TableId
     private Integer id;
@@ -68,6 +68,11 @@ public class YearPigBaseEntity implements Serializable {
     private Date birthday;
 
     /**
+     * 产地
+     */
+    private String originPlace;
+
+    /**
      * 豬舍id
      */
     private Integer pigstyId;
@@ -76,6 +81,22 @@ public class YearPigBaseEntity implements Serializable {
      * 栏期id
      */
     private Integer periodId;
+
+    /**
+     * 出栏状态
+     */
+    private Integer outFenceStatus;
+
+    /**
+     * 母亲耳标
+     */
+    private String motherEartag;
+
+    /**
+     * 父亲耳标
+     */
+    private String fatherEartag;
+
     /**
      * 删除状态 0正常 1已删除
      */

+ 19 - 3
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/EnvVo.java

@@ -2,9 +2,11 @@ package com.huimv.apiservice.entity.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * <p>
- *
+ * 环境数据VO
  * </p>
  *
  * @author yinhao
@@ -13,9 +15,23 @@ import lombok.Data;
 @Data
 public class EnvVo {
 
+    /**
+     * 耳标号
+     */
     private String pigEarTagNo;
 
-    private IndoorEnvVo indoorEnv;
+    /**
+     * 日期
+     */
+    private String date;
+
+    /**
+     * 室内环境
+     */
+    private List<IndoorEnvVo> indoorEnvList;
 
-    private OutdoorEnvVo outdoorEnv;
+    /**
+     * 室外环境
+     */
+    private List<OutdoorEnvVo> outdoorEnvList;
 }

+ 27 - 1
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/IndoorEnvVo.java

@@ -1,12 +1,38 @@
 package com.huimv.apiservice.entity.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
 /**
  * <p>
- *
+ * 室内环境VO
  * </p>
  *
  * @author yinhao
  * @date 2021/5/10 17:19
  */
+@Data
 public class IndoorEnvVo {
+
+    /**
+     * 采集时间
+     */
+    private Date collectTime;
+
+    /**
+     * 温度
+     */
+    private Double temperature;
+
+    /**
+     * 湿度
+     */
+    private Double humidity;
+
+    /**
+     * 气体
+     */
+    private String gas;
 }

+ 25 - 1
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/OutdoorEnvVo.java

@@ -1,10 +1,13 @@
 package com.huimv.apiservice.entity.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * <p>
- *
+ * 室外环境VO
  * </p>
  *
  * @author yinhao
@@ -12,4 +15,25 @@ import lombok.Data;
  */
 @Data
 public class OutdoorEnvVo {
+
+    /**
+     * 采集时间
+     */
+    private Date collectTime;
+
+
+    /**
+     * 温度
+     */
+    private Double temperature;
+
+    /**
+     * 湿度
+     */
+    private Double humidity;
+
+    /**
+     * 气体
+     */
+    private String gas;
 }

+ 23 - 5
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigBaseVo.java

@@ -6,14 +6,19 @@ import lombok.Data;
 import java.util.Date;
 
 /**
- * @Author yinhao
- * @Date 2021/5/8 16:50
+ * @author yinhao
+ * @date 2021/5/8 16:50
  * @Description
  */
 @Data
 public class PigBaseVo {
 
     /**
+     * 耳标号
+     */
+    private String eartag;
+
+    /**
      * 体重
      */
     private Double weight;
@@ -35,14 +40,27 @@ public class PigBaseVo {
     private Date birthday;
 
     /**
+     * 养殖员
+     */
+    private String feeder;
+
+    /**
      * 养殖场名称
      */
-    private String pasture;
+    private String pigsty;
 
     /**
-     * 体温
+     * 母亲
      */
-    private Double bodyTemperature;
+    private PigPedigreeMotherVo mother;
+
+    /**
+     * 父亲
+     */
+    private PigPedigreeFatherVo father;
+
+
+
 
 
 }

+ 5 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigPedigreeFatherVo.java

@@ -13,6 +13,11 @@ import lombok.Data;
 public class PigPedigreeFatherVo {
 
     /**
+     * 耳标号
+     */
+    private String eartag;
+
+    /**
      * 品种
      */
     private String breed;

+ 7 - 2
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigPedigreeMotherVo.java

@@ -14,14 +14,19 @@ import java.util.Date;
 public class PigPedigreeMotherVo {
 
     /**
+     * 耳标号
+     */
+    private String eartag;
+
+    /**
      * 品种
      */
     private String breed;
 
     /**
-     * 体重
+     * 产子时体重
      */
-    private Double weight;
+    private Double childbirthWeight;
 
     /**
      * 产地

+ 6 - 9
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/interceptor/JWTInterceptor.java

@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -28,6 +29,11 @@ public class JWTInterceptor implements HandlerInterceptor {
         if (!(handler instanceof HandlerMethod)) {
             return true;
         }
+
+        if (response.getStatus() == 404 || response.getStatus() == 500) {
+            return false;
+        }
+
         response.setContentType("application/json;charset=utf-8");
 
         // 获取token
@@ -41,13 +47,4 @@ public class JWTInterceptor implements HandlerInterceptor {
     }
 
 
-    @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
-
-    }
-
-    @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-
-    }
 }

+ 27 - 14
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/PigService.java

@@ -1,20 +1,17 @@
 package com.huimv.apiservice.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.huimv.apiservice.entity.SleepStatusEntity;
 import com.huimv.apiservice.entity.YearPigBaseEntity;
 import com.huimv.apiservice.entity.vo.*;
-import com.huimv.apiservice.entity.vo.PigBaseVo;
 import com.huimv.apiservice.entity.vo.PigImageVo;
-import com.huimv.apiservice.entity.vo.PigPedigreeVo;
-import com.huimv.apiservice.entity.vo.PigSportVo;
 
-import java.util.List;
+import com.huimv.common.utils.PageUtils;
+
 import java.util.Map;
 
 /**
- * @Author yinhao
- * @Date 2021/5/8 17:13
+ * @author yinhao
+ * @date 2021/5/8 17:13
  * @Description
  */
 public interface PigService extends IService<YearPigBaseEntity> {
@@ -34,15 +31,31 @@ public interface PigService extends IService<YearPigBaseEntity> {
     PigImageVo getImageByEarTagNo(String pigEarTagNo);
 
 
-    List<PigBaseVo> getListByBreed(String breedName);
-
-    PigPedigreeVo getPigPedigree(String pigEarTagNo);
-
-    PigKeeperVo getKeeper(String pigEarTagNo);
+    /**
+     * 根据品种名称获取猪的数量和基本信息
+     * @param breedName 品种名称
+     * @return
+     */
+    PageUtils getListByBreed(String breedName);
 
+    /**
+     * 根据猪耳标号获取环境数据
+     * @param pigEarTagNo
+     * @return
+     */
     EnvVo getIndoorEnv(String pigEarTagNo);
 
-    PigSportVo getActivityAmount(String pigEarTagNo);
+    /**
+     * 修改认养状态
+     * @param pigEarTagNo 耳标号
+     */
+    void adopt(String pigEarTagNo);
+
+    /**
+     * 修改出栏状态
+     * @param pigEarTagNo 耳标号
+     * @param status 状态
+     */
+    void outFence(String pigEarTagNo, Integer status);
 
-    SleepStatusEntity getSleepStatus(String pigEarTagNo);
 }

+ 124 - 162
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/impl/PigServiceImpl.java

@@ -1,24 +1,23 @@
 package com.huimv.apiservice.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
+
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.apiservice.dao.PigDao;
-import com.huimv.apiservice.dao.PigstyDao;
 import com.huimv.apiservice.dao.YearPigHistoryImgDao;
-import com.huimv.apiservice.dao.YearPigPedigreeDao;
-import com.huimv.apiservice.entity.EmployeeEntity;
-import com.huimv.apiservice.entity.PigstyEntity;
 import com.huimv.apiservice.entity.YearPigBaseEntity;
-import com.huimv.apiservice.entity.YearPigPedigreeEntity;
 import com.huimv.apiservice.dao.*;
 import com.huimv.apiservice.entity.*;
 import com.huimv.apiservice.entity.vo.*;
 import com.huimv.apiservice.service.PigService;
+import com.huimv.common.exception.RRException;
+import com.huimv.common.utils.PageUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -26,27 +25,30 @@ import org.springframework.stereotype.Service;
 import java.util.*;
 
 /**
- * @Author yinhao
- * @Date 2021/5/8 17:22
- * @Description
+ * <p>
+ * 业务层
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/5/8 17:22
  */
 @Service
 public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> implements PigService {
 
     @Autowired
-    private PigstyDao pigstyDao;
-
-    @Autowired
     private AnimalHeatDao animalHeatDao;
 
     @Autowired
     private EatTimeDao eatTimeDao;
 
     @Autowired
-    private YearPigHistoryImgDao yearPigHistoryImgDao;
+    private IndoorEnvironmentDao indoorEnvironmentDao;
 
     @Autowired
-    private YearPigPedigreeDao yearPigPedigreeDao;
+    private OutdoorEnvironmentDao outdoorEnvironmentDao;
+
+    @Autowired
+    private YearPigHistoryImgDao yearPigHistoryImgDao;
 
     @Autowired
     private SleepStatusDao sleepStatusDao;
@@ -57,6 +59,8 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
     @Override
     public Map<String, Object> getPigInfoByEarTagNo(String pigEarTagNo) {
 
+        checkPigEarTagNo(pigEarTagNo);
+
         Map<String, Object> result = new LinkedHashMap<>(16);
         List<Map<String, Object>> temperature = new ArrayList<>();
 //        List<Map<String, Object>> healthStatus = new ArrayList<>();
@@ -72,6 +76,7 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
         //公用时间 -> 当前日期
         String today = DateUtil.format(DateUtil.date(), "yyyy-MM-dd");
 
+
         //java代码对集合排序
         //CollectionUtil.sort(animalHeatEntityList,(o1, o2) -> o2.getCollectTime().compareTo(o1.getCollectTime()));
 
@@ -138,8 +143,8 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
 
         //运动状态数据sql构建及查询
         LambdaQueryWrapper<SportTimeEntity> sportStatusLambdaQuery = Wrappers.lambdaQuery();
-        sportStatusLambdaQuery.eq(SportTimeEntity::getEartag,pigEarTagNo)
-                .eq(SportTimeEntity::getNowDate,today)
+        sportStatusLambdaQuery.eq(SportTimeEntity::getEartag, pigEarTagNo)
+                .eq(SportTimeEntity::getNowDate, today)
                 .orderByDesc(SportTimeEntity::getId);
         List<SportTimeEntity> sportTimeEntityList = sportTimeDao.selectList(sportStatusLambdaQuery);
 
@@ -153,48 +158,15 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
             }
         }
 
-
-//        //构建根据耳标查询的表达式
-//        LambdaQueryWrapper<YearPigBaseEntity> yearPigLambdaQuery = Wrappers.lambdaQuery();
-//        yearPigLambdaQuery.eq(YearPigBaseEntity::getEartag, pigEarTagNo);
-//
-//        //根据耳标查询猪的信息
-//        YearPigBaseEntity yearPigBaseEntity = baseMapper.selectOne(yearPigLambdaQuery);
-//
-//        //构建返回前端的VO对象
-//        PigBaseVo pigBaseVo = new PigBaseVo();
-//        if (ObjectUtil.isNotNull(yearPigBaseEntity)) {
-//            pigBaseVo.setWeight(yearPigBaseEntity.getWeight());
-//            pigBaseVo.setDayAge(yearPigBaseEntity.getDayAge());
-//            pigBaseVo.setBreed(yearPigBaseEntity.getBreed());
-//            pigBaseVo.setBirthday(yearPigBaseEntity.getBirthday());
-//
-//            Integer pigstyId = yearPigBaseEntity.getPigstyId();
-//            if (pigstyId != null) {
-//                String pastureName = baseMapper.selectPastureNameByPigstyId(pigstyId);
-//                if (StringUtils.isNotEmpty(pastureName)) {
-//                    pigBaseVo.setPasture(pastureName);
-//                }
-//            }
-//
-//            LambdaQueryWrapper<AnimalHeatEntity> animalHeatLambdaQuery = Wrappers.lambdaQuery();
-//            animalHeatLambdaQuery.eq(AnimalHeatEntity::getEartag, pigEarTagNo).orderByDesc(AnimalHeatEntity::getCollectTime);
-//            animalHeatLambdaQuery.last("limit 1");
-//            AnimalHeatEntity animalHeatEntity = animalHeatDao.selectOne(animalHeatLambdaQuery);
-//            if (ObjectUtil.isNotNull(animalHeatEntity)) {
-//                Double temperature = animalHeatEntity.getTemperature();
-//                if (temperature != null) {
-//                    pigBaseVo.setBodyTemperature(temperature);
-//                }
-//            }
-//
-//        }
         return result;
     }
 
+
     @Override
     public PigImageVo getImageByEarTagNo(String pigEarTagNo) {
 
+        checkPigEarTagNo(pigEarTagNo);
+
         PigImageVo pigImageVo = new PigImageVo();
 
         pigImageVo.setPigEarTagNo(pigEarTagNo);
@@ -206,137 +178,127 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
         return pigImageVo;
     }
 
+
     @Override
-    public List<PigBaseVo> getListByBreed(String breedName) {
-        LambdaQueryWrapper<YearPigBaseEntity> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(YearPigBaseEntity::getBreed, breedName);
-        List<YearPigBaseEntity> yearPigBaseEntityList = baseMapper.selectList(lambdaQueryWrapper);
-
-        List<PigBaseVo> pigBaseVoList = new ArrayList<>();
-        if (CollUtil.isNotEmpty(yearPigBaseEntityList)) {
-            for (YearPigBaseEntity yearPigBaseEntity : yearPigBaseEntityList) {
-                PigBaseVo pigBaseVo = new PigBaseVo();
-                pigBaseVo.setWeight(yearPigBaseEntity.getWeight());
-                pigBaseVo.setDayAge(yearPigBaseEntity.getDayAge());
-                pigBaseVo.setBreed(yearPigBaseEntity.getBreed());
-                //虚拟数据 待填充
-                pigBaseVo.setBirthday(new Date());
-                Integer unitId = yearPigBaseEntity.getUnitId();
-                PigstyEntity pigstyEntity = null;
-                if (unitId != null) {
-                    pigstyEntity = pigstyDao.selectById(unitId);
-                }
-                if (ObjectUtil.isNotNull(pigstyEntity)) {
-                    String number = pigstyEntity.getNumber();
-                    if (StringUtils.isNotEmpty(number)) {
-//                        pigBaseVo.setPigsty(number);
-                    }
-                }
-                //虚拟数据 待填充
-                pigBaseVo.setBodyTemperature(100D);
-                pigBaseVoList.add(pigBaseVo);
-            }
+    public PageUtils getListByBreed(String breedName) {
+
+        if (StringUtils.isEmpty(breedName)) {
+            throw new RRException("品种名称不能为空!",1001);
         }
-        return pigBaseVoList;
-    }
 
-    @Override
-    public PigPedigreeVo getPigPedigree(String pigEarTagNo) {
-
-        LambdaQueryWrapper<YearPigBaseEntity> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(YearPigBaseEntity::getEartag, pigEarTagNo);
-
-        YearPigBaseEntity yearPigBaseEntity = baseMapper.selectOne(lambdaQueryWrapper);
-        PigPedigreeVo pigPedigreeVo = new PigPedigreeVo();
-
-        if (ObjectUtil.isNotNull(yearPigBaseEntity)) {
-            pigPedigreeVo.setBreed(yearPigBaseEntity.getBreed());
-            //虚拟数据 待填充
-            pigPedigreeVo.setBirthday(new Date());
-
-            LambdaQueryWrapper<YearPigPedigreeEntity> lambdaQuery = Wrappers.lambdaQuery();
-            lambdaQuery.eq(YearPigPedigreeEntity::getPigletEartag, pigEarTagNo);
-            YearPigPedigreeEntity yearPigPedigreeEntity = yearPigPedigreeDao.selectOne(lambdaQuery);
-
-            String motherEarTag = yearPigPedigreeEntity.getSowEartag();
-            String fatherEarTag = yearPigPedigreeEntity.getBoarEartag();
-
-            lambdaQueryWrapper.clear();
-            lambdaQueryWrapper.eq(YearPigBaseEntity::getEartag, motherEarTag);
-            YearPigBaseEntity mother = baseMapper.selectOne(lambdaQueryWrapper);
-            PigPedigreeMotherVo pigPedigreeMotherVo = new PigPedigreeMotherVo();
-            if (ObjectUtil.isNotNull(mother)) {
-                pigPedigreeMotherVo.setBreed(mother.getBreed());
-                pigPedigreeMotherVo.setWeight(mother.getWeight());
-                //虚拟数据 待填充
-                pigPedigreeMotherVo.setPregnancyDate(new Date());
-                pigPedigreeMotherVo.setChildCount(10);
-                pigPedigreeMotherVo.setOriginPlace("产地信息");
-            }
-            pigPedigreeVo.setMother(pigPedigreeMotherVo);
-
-            lambdaQuery.clear();
-            lambdaQueryWrapper.eq(YearPigBaseEntity::getEartag, fatherEarTag);
-            PigPedigreeFatherVo pigPedigreeFatherVo = new PigPedigreeFatherVo();
-            YearPigBaseEntity father = baseMapper.selectOne(lambdaQueryWrapper);
-            if (ObjectUtil.isNotNull(father)) {
-                pigPedigreeFatherVo.setBreed(father.getBreed());
-                //虚拟数据 待填充
-                pigPedigreeFatherVo.setOriginPlace("产地信息");
-            }
-            pigPedigreeVo.setFather(pigPedigreeFatherVo);
+        Integer count = baseMapper.selectCount(Wrappers.<YearPigBaseEntity>lambdaQuery().eq(YearPigBaseEntity::getBreed, breedName));
+        if (count <= 0) {
+            throw new RRException("品种名称不存在,请检查!",1001);
         }
 
-        return pigPedigreeVo;
+        IPage<PigBaseVo> page = new Page<>(1, 10);
+        IPage<PigBaseVo> pigBaseVoList = baseMapper.selectPagePigBaseVoByBreedName(page, breedName);
+
+        return new PageUtils(pigBaseVoList);
     }
 
     @Override
-    public PigKeeperVo getKeeper(String pigEarTagNo) {
-
-        PigKeeperVo pigKeeperVo = new PigKeeperVo();
-        pigKeeperVo.setPigEarTagNo(pigEarTagNo);
-
-        EmployeeEntity employeeEntity = baseMapper.selectFeederInfoByPigEarTagNo(pigEarTagNo);
-        FeederVo feederVo = pigKeeperVo.getFeeder();
-        if (employeeEntity != null) {
-            feederVo.setName(employeeEntity.getName());
-            feederVo.setPosition(employeeEntity.getPosition());
-            feederVo.setApproachTime(employeeEntity.getApproachTime());
-            feederVo.setDepartureTime(employeeEntity.getDepartureTime());
+    public EnvVo getIndoorEnv(String pigEarTagNo) {
+
+        String today = DateUtil.format(DateUtil.date(), "yyyy-MM-dd");
+
+        LambdaQueryWrapper<YearPigBaseEntity> pigBaseLambdaQuery = Wrappers.lambdaQuery();
+        pigBaseLambdaQuery.eq(YearPigBaseEntity::getEartag, pigEarTagNo);
+        YearPigBaseEntity yearPigBaseEntity = baseMapper.selectOne(pigBaseLambdaQuery);
+        if (yearPigBaseEntity == null) {
+            throw new RRException("耳标信息不存在,请检查!", 1001);
         }
 
-        return pigKeeperVo;
+        EnvVo envVo = new EnvVo();
+        envVo.setPigEarTagNo(pigEarTagNo);
+        envVo.setDate(today);
+        List<IndoorEnvVo> indoorEnvVoList = new ArrayList<>();
+        envVo.setIndoorEnvList(indoorEnvVoList);
+        List<OutdoorEnvVo> outdoorEnvVoList = new ArrayList<>();
+        envVo.setOutdoorEnvList(outdoorEnvVoList);
+
+        Integer pigstyId = yearPigBaseEntity.getPigstyId();
+        if (pigstyId != null) {
+            LambdaQueryWrapper<IndoorEnvironmentEntity> indoorEnvLambdaQuery = Wrappers.lambdaQuery();
+            indoorEnvLambdaQuery.eq(IndoorEnvironmentEntity::getPigstyId, pigstyId)
+                    .eq(IndoorEnvironmentEntity::getDate, today)
+                    .orderByDesc(IndoorEnvironmentEntity::getId);
+            List<IndoorEnvironmentEntity> indoorEnvironmentEntityList = indoorEnvironmentDao.selectList(indoorEnvLambdaQuery);
+
+            if (CollectionUtil.isNotEmpty(indoorEnvironmentEntityList)) {
+                for (IndoorEnvironmentEntity indoorEnvironmentEntity : indoorEnvironmentEntityList) {
+                    IndoorEnvVo indoorEnvVo = new IndoorEnvVo();
+                    indoorEnvVo.setCollectTime(indoorEnvironmentEntity.getCollectTime());
+                    indoorEnvVo.setTemperature(indoorEnvironmentEntity.getTemperature());
+                    indoorEnvVo.setHumidity(indoorEnvironmentEntity.getHumidity());
+                    indoorEnvVo.setGas(indoorEnvironmentEntity.getGas());
+                    indoorEnvVoList.add(indoorEnvVo);
+                }
+            }
+        }
+
+        LambdaQueryWrapper<OutdoorEnvironmentEntity> outdoorEnvLambdaQuery = Wrappers.lambdaQuery();
+        outdoorEnvLambdaQuery.eq(OutdoorEnvironmentEntity::getDate, today)
+                .orderByDesc(OutdoorEnvironmentEntity::getId);
+        List<OutdoorEnvironmentEntity> outdoorEnvironmentEntityList = outdoorEnvironmentDao.selectList(outdoorEnvLambdaQuery);
+        if (CollectionUtil.isNotEmpty(outdoorEnvironmentEntityList)) {
+            for (OutdoorEnvironmentEntity outdoorEnvironmentEntity : outdoorEnvironmentEntityList) {
+                OutdoorEnvVo outdoorEnvVo = new OutdoorEnvVo();
+                outdoorEnvVo.setCollectTime(outdoorEnvironmentEntity.getCollectTime());
+                outdoorEnvVo.setTemperature(outdoorEnvironmentEntity.getTemperature());
+                outdoorEnvVo.setHumidity(outdoorEnvironmentEntity.getHumidity());
+                outdoorEnvVo.setGas(outdoorEnvironmentEntity.getGas());
+                outdoorEnvVoList.add(outdoorEnvVo);
+            }
+        }
+        return envVo;
     }
 
     @Override
-    public PigSportVo getActivityAmount(String pigEarTagNo) {
-        PigSportVo sportVo = new PigSportVo();
+    public void adopt(String pigEarTagNo) {
 
-        LambdaQueryWrapper<SportTimeEntity> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        LambdaQueryWrapper<YearPigBaseEntity> eq = Wrappers.<YearPigBaseEntity>lambdaQuery().eq(YearPigBaseEntity::getEartag, pigEarTagNo);
+        YearPigBaseEntity yearPigBaseEntity = baseMapper.selectOne(eq);
+        if (yearPigBaseEntity == null) {
+            throw new RRException("耳标信息不存在,请检查!", 1001);
+        }
+        if (yearPigBaseEntity.getFosterStatus()) {
+            throw new RRException("本猪已被其他人认养!", 1001);
+        }
+        LambdaUpdateWrapper<YearPigBaseEntity> pigBaseLambdaUpdate = Wrappers.lambdaUpdate();
+        pigBaseLambdaUpdate.eq(YearPigBaseEntity::getEartag, pigEarTagNo)
+                .set(YearPigBaseEntity::getFosterStatus, true);
 
-        //虚假数据
-        lambdaQueryWrapper.eq(SportTimeEntity::getEartag, pigEarTagNo);
-        SportTimeEntity sportTimeEntity = sportTimeDao.selectOne(lambdaQueryWrapper);
-        sportVo.setActivityAmount(sportTimeEntity.getSportCount());
-        sportVo.setPigEarTagNo(pigEarTagNo);
-        return sportVo;
+        update(pigBaseLambdaUpdate);
     }
 
     @Override
-    public SleepStatusEntity getSleepStatus(String pigEarTagNo) {
+    public void outFence(String pigEarTagNo, Integer status) {
 
-        //虚假数据
-        LambdaQueryWrapper<SleepStatusEntity> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(SleepStatusEntity::getEartag, pigEarTagNo);
-        SleepStatusEntity sleepStatusEntity = sleepStatusDao.selectOne(lambdaQueryWrapper);
+        checkPigEarTagNo(pigEarTagNo);
 
+        if (!status.equals(1) && !status.equals(2) && !status.equals(3)) {
+            throw new RRException("出栏状态有误,请检查!",1001);
+        }
 
-        return sleepStatusEntity;
-    }
+        LambdaUpdateWrapper<YearPigBaseEntity> pigBaseLambdaUpdate = Wrappers.lambdaUpdate();
+        pigBaseLambdaUpdate.eq(YearPigBaseEntity::getEartag, pigEarTagNo)
+                .set(YearPigBaseEntity::getOutFenceStatus, status);
 
-    @Override
-    public EnvVo getIndoorEnv(String pigEarTagNo) {
+        update(pigBaseLambdaUpdate);
 
-        return null;
     }
+
+    /**
+     * 公用检查耳标方法
+     *
+     * @param pigEarTagNo 耳标号
+     */
+    private void checkPigEarTagNo(String pigEarTagNo) {
+        Integer count = baseMapper.selectCount(Wrappers.<YearPigBaseEntity>lambdaQuery().eq(YearPigBaseEntity::getEartag, pigEarTagNo));
+        if (count <= 0) {
+            throw new RRException("耳标信息不存在,请检查!", 1001);
+        }
+    }
+
 }

+ 39 - 0
huimv-smart-apiservice/src/main/resources/mapper/apiservice/YearPigBaseDao.xml

@@ -24,6 +24,32 @@
     </resultMap>
 
 
+    <resultMap id="pigBaseVoMap" type="com.huimv.apiservice.entity.vo.PigBaseVo">
+        <result property="eartag" column="c_eartag" />
+        <result property="weight" column="weight" />
+        <result property="dayAge" column="day_age" />
+        <result property="breed" column="breed" />
+        <result property="birthday" column="birthday" />
+        <result property="feeder" column="feeder" />
+        <result property="pigsty" column="pigsty" />
+
+        <association property="mother" javaType="com.huimv.apiservice.entity.vo.PigPedigreeMotherVo">
+            <result property="eartag" column="m_eartag" />
+            <result property="breed" column="m_breed" />
+            <result property="childbirthWeight" column="m_weight" />
+            <result property="originPlace" column="m_origin_place" />
+            <result property="pregnancyDate" column="pregnancy_date" />
+            <result property="childCount" column="child_count" />
+        </association>
+
+        <association property="father" javaType="com.huimv.apiservice.entity.vo.PigPedigreeFatherVo">
+            <result property="eartag" column="f_eartag" />
+            <result property="breed" column="f_breed" />
+            <result property="originPlace" column="f_origin_place" />
+        </association>
+    </resultMap>
+
+
     <select id="selectFeederInfoByPigEarTagNo" parameterType="string" resultType="com.huimv.apiservice.entity.EmployeeEntity">
         SELECT me.*
         FROM mgt_employee me
@@ -43,5 +69,18 @@
         WHERE zs.id = #{pigstyId}
     </select>
 
+    <select id="selectPagePigBaseVoByBreedName" resultMap="pigBaseVoMap">
+        SELECT child.eartag c_eartag,child.weight,child.day_age,child.breed,child.birthday,feeder.`name` feeder,zs.number pigsty,
+               mother.eartag m_eartag,m.breed m_breed,mother.childbirth_weight m_weight,m.origin_place m_origin_place,mother.pregnancy_date pregnancy_date,mother.childbirth_count child_count,
+               father.eartag f_eartag,father.breed f_breed,father.origin_place f_origin_place
+        FROM mgt_year_pig_base child
+        LEFT JOIN mgt_pigsty zs ON child.pigsty_id = zs.id
+        LEFT JOIN mgt_employee feeder ON zs.feeder_id = feeder.id
+        LEFT JOIN mgt_sow_childbirth mother ON child.mother_eartag = mother.eartag
+        LEFT JOIN mgt_year_pig_base m ON child.mother_eartag = m.eartag
+        LEFT JOIN mgt_year_pig_base father ON child.father_eartag = father.eartag
+        WHERE child.deleted = 0 AND child.breed = #{breedName}
+    </select>
+
 
 </mapper>

+ 1 - 1
huimv-smart-common/pom.xml

@@ -153,7 +153,7 @@
             <!--<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
         <!--</dependency>-->
 
-        <!--JSR3.3校验validation-->
+        <!--JSR303校验validation-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>

+ 19 - 0
huimv-smart-common/src/main/java/com/huimv/common/exception/RRExceptionHandler.java

@@ -13,7 +13,11 @@ import org.apache.shiro.authz.AuthorizationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.servlet.NoHandlerFoundException;
 
@@ -62,6 +66,21 @@ public class RRExceptionHandler {
 		return  R.error(429,e.getMessage());
 	}
 
+	//当校验失败时,会抛出MethodArgumentNotValidException
+	//输出错误原因到前端
+	@ExceptionHandler(MethodArgumentNotValidException.class)
+	@ResponseBody
+	public R binding(MethodArgumentNotValidException ex) {
+		StringBuilder sb = new StringBuilder();
+		for(ObjectError error : ex.getBindingResult().getAllErrors()){
+			if(error instanceof FieldError){
+				FieldError e = (FieldError) error;
+				sb.append(e.getField()).append(e.getDefaultMessage()).append(" ");
+			}
+		}
+		return R.error(1001,sb.toString());
+	}
+
 	@ExceptionHandler(Exception.class)
 	public R handleException(Exception e){
 		logger.error(e.getMessage(), e);

+ 13 - 0
huimv-smart-common/src/main/java/com/huimv/common/validate/ListValue.java

@@ -0,0 +1,13 @@
+package com.huimv.common.validate;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/5/14 16:28
+ */
+
+public class ListValue {
+}