Explorar el Código

2021/7/22 apiservice采食睡眠记录修改

yinhao hace 4 años
padre
commit
2eb5e8a8f4
Se han modificado 15 ficheros con 427 adiciones y 189 borrados
  1. 7 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/HuimvSmartApiServiceApplication.java
  2. 20 9
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/MathTestMain.java
  3. 15 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/FeedRecordDao.java
  4. 13 9
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/EartagDataEntity.java
  5. 4 15
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/FeedRecordEntity.java
  6. 3 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/EnvVo.java
  7. 34 0
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/FeedRecordVo.java
  8. 1 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/PigHealthStatusVo.java
  9. 1 1
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/SleepStatusVo.java
  10. 26 50
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/impl/PigServiceImpl.java
  11. 110 3
      huimv-smart-apiservice/src/main/java/com/huimv/apiservice/task/DataCollectTask.java
  12. 9 0
      huimv-smart-apiservice/src/main/resources/application.properties
  13. 65 0
      huimv-smart-apiservice/src/main/resources/mapper/apiservice/FeedRecordDao.xml
  14. 117 99
      huimv-smart-apiservice/src/test/java/com/huimv/apiservice/HuimvSmartApiserviceApplicationTests.java
  15. 2 1
      huimv-smart-management/src/main/java/com/huimv/management/controller/EartagDataController.java

+ 7 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/HuimvSmartApiServiceApplication.java

@@ -3,7 +3,9 @@ package com.huimv.apiservice;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.client.RestTemplate;
 
 /**
  * @author huimv
@@ -18,4 +20,9 @@ public class HuimvSmartApiServiceApplication {
         SpringApplication.run(HuimvSmartApiServiceApplication.class, args);
     }
 
+    @Bean
+    public RestTemplate getRestTemplate() {
+        return new RestTemplate();
+    }
+
 }

+ 20 - 9
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/MathTestMain.java

@@ -1,5 +1,7 @@
 package com.huimv.apiservice;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import org.apache.commons.codec.binary.Hex;
 
 import java.nio.charset.StandardCharsets;
@@ -38,15 +40,24 @@ public class MathTestMain {
 //            System.out.println(num);
 //        }
 
-        MessageDigest md = MessageDigest.getInstance("MD5");
-
-        long currentTimeMillis = System.currentTimeMillis();
-        System.out.println(currentTimeMillis);
-        String data = 20 + ";" + currentTimeMillis;
-        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
-        oneSign = oneSign + "HuiMv";
-        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
-        System.out.println(twoSign);
+//        MessageDigest md = MessageDigest.getInstance("MD5");
+//
+//        long currentTimeMillis = System.currentTimeMillis();
+//        System.out.println(currentTimeMillis);
+//        String data = 20 + ";" + currentTimeMillis;
+//        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
+//        oneSign = oneSign + "HuiMv";
+//        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
+//        System.out.println(twoSign);
+
+//        DateTime currentTime = DateUtil.parse("2021-07-22 00:00:00", "yyyy-MM-dd HH:mm:ss");
+//        String startTime = null;
+//        if (currentTime.hour(true) == 0) {
+//            startTime = DateUtil.format(DateUtil.offsetDay(currentTime, -1), "yyyy-MM-dd");
+//        } else {
+//            startTime = DateUtil.format(currentTime, "yyyy-MM-dd");
+//        }
+//        System.out.println(startTime);
 
     }
 }

+ 15 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/dao/FeedRecordDao.java

@@ -1,10 +1,18 @@
 package com.huimv.apiservice.dao;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.apiservice.entity.EartagDataEntity;
 import com.huimv.apiservice.entity.FeedRecordEntity;
+import com.huimv.apiservice.entity.vo.FeedRecordVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  * 饲喂记录
@@ -16,4 +24,11 @@ import org.springframework.stereotype.Repository;
 @Mapper
 @Repository
 public interface FeedRecordDao extends BaseMapper<FeedRecordEntity> {
+
+
+    void batchInsertData(List<FeedRecordEntity> feedRecordEntities);
+
+    List<FeedRecordEntity> select(@Param("ew") LambdaQueryWrapper ew);
+
+    List<FeedRecordVo> queryFeedRecords(@Param(Constants.WRAPPER) Wrapper ew);
 }

+ 13 - 9
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/EartagDataEntity.java

@@ -3,6 +3,7 @@ package com.huimv.apiservice.entity;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import org.springframework.stereotype.Repository;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -11,11 +12,12 @@ import java.util.Date;
  * 
  * 
  * @author yinhao
- * @email yinhao@163.com
- * @date 2021-06-21 10:00:18
+ * @version ${version}
+ * @date 2021-07-20 15:20:36
  */
 @Data
 @TableName("eartag_data")
+@Repository
 public class EartagDataEntity implements Serializable {
 	private static final long serialVersionUID = 1L;
 
@@ -99,18 +101,20 @@ public class EartagDataEntity implements Serializable {
 	/**
 	 * 备用字段 1
 	 */
-	private String backFirst;
+	private Integer sleepStatus;
+
+	private String remark;
 	/**
-	 * 备用字段2
+	 * 睡眠开始
 	 */
-	private String backSecong;
+	private Date sleepBegin;
 	/**
-	 * 备用字段3
+	 * 睡眠结束
 	 */
-	private String backThird;
+	private Date sleepEnd;
 	/**
-	 * 备注
+	 * 睡眠时间段标志
 	 */
-	private String remark;
+	private Integer sleepGap;
 
 }

+ 4 - 15
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/FeedRecordEntity.java

@@ -3,6 +3,7 @@ package com.huimv.apiservice.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -24,7 +25,7 @@ public class FeedRecordEntity implements Serializable {
      * 主键id
      */
     @TableId
-    private Long id;
+    private String id;
     /**
      * 牧场名称
      */
@@ -85,10 +86,6 @@ public class FeedRecordEntity implements Serializable {
      */
     private Date startTime;
     /**
-     * 数据id
-     */
-    private String dataId;
-    /**
      * 采食结束时间
      */
     private Date endTime;
@@ -99,11 +96,11 @@ public class FeedRecordEntity implements Serializable {
     private String pmsPig__earNumber;
 
 
-    public Long getId() {
+    public String getId() {
         return id;
     }
 
-    public void setId(Long id) {
+    public void setId(String id) {
         this.id = id;
     }
 
@@ -211,14 +208,6 @@ public class FeedRecordEntity implements Serializable {
         this.startTime = startTime;
     }
 
-    public String getDataId() {
-        return dataId;
-    }
-
-    public void setDataId(String dataId) {
-        this.dataId = dataId;
-    }
-
     public Date getEndTime() {
         return endTime;
     }

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

@@ -2,6 +2,7 @@ package com.huimv.apiservice.entity.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -13,8 +14,9 @@ import java.util.List;
  * @date 2021/5/10 17:18
  */
 @Data
-public class EnvVo {
+public class EnvVo implements Serializable {
 
+    private static final long serialVersionUID = -3339486812231874599L;
     /**
      * 耳标号
      */

+ 34 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/entity/vo/FeedRecordVo.java

@@ -0,0 +1,34 @@
+package com.huimv.apiservice.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 饲喂记录vo
+ * </p>
+ *
+ * @author yinhao
+ * @date 2021/7/22 15:05
+ */
+@Data
+public class FeedRecordVo implements Serializable {
+    private static final long serialVersionUID = -7058138242588589068L;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 采食量
+     */
+    private Integer feedWeight;
+}

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

@@ -26,7 +26,7 @@ public class PigHealthStatusVo implements Serializable {
     /**
      * 进食量
      */
-    private List<EatTimeVo> feedingStatus;
+    private List<FeedRecordVo> feedingStatus;
 
     /**
      * 健康状态

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

@@ -26,5 +26,5 @@ public class SleepStatusVo implements Serializable {
     /**
      * 时长
      */
-    private Double duration;
+    private String duration;
 }

+ 26 - 50
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/service/impl/PigServiceImpl.java

@@ -42,12 +42,6 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
     private EartagDataDao eartagDataDao;
 
     @Autowired
-    private AnimalHeatDao animalHeatDao;
-
-    @Autowired
-    private EatTimeDao eatTimeDao;
-
-    @Autowired
     private PeriodDao periodDao;
 
     @Autowired
@@ -60,13 +54,10 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
     private YearPigHistoryImgDao yearPigHistoryImgDao;
 
     @Autowired
-    private SleepStatusDao sleepStatusDao;
+    private HealthMedicalRecordDao healthMedicalRecordDao;
 
     @Autowired
-    private SportTimeDao sportTimeDao;
-
-    @Autowired
-    private HealthMedicalRecordDao healthMedicalRecordDao;
+    private FeedRecordDao feedRecordDao;
 
     @Override
     public PigHealthStatusVo getPigInfoByEarTagNo(String pigEarTagNo) {
@@ -76,24 +67,29 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
 
         //当前时间节点
         DateTime currentTime = DateUtil.date();
+        //一天前该时间节点的时间
+        DateTime oneDayBefore = DateUtil.offsetDay(currentTime, -1);
 
 //        String lastGetDataTime = (String) redisTemplate.opsForHash().get("offset_record", "getPigInfo");
 //        redisTemplate.opsForHash().put("offset_record", "getPigInfo",currentTime.toString());
 
+        //健康状态
         PigHealthStatusVo pigHealthStatusVo = new PigHealthStatusVo();
         boolean health = baseMapper.selectHealthStatus(pigEarTagNo);
         pigHealthStatusVo.setHealthStatus(health ? "健康" : "不健康");
 
         //公用时间 -> 当前日期
         String today = DateUtil.format(currentTime, "yyyy-MM-dd");
+
         LambdaQueryWrapper<EartagDataEntity> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(EartagDataEntity::getEartagId, pigEarTagNo)
-                .ge(EartagDataEntity::getCreateTime, DateUtil.offsetDay(new Date(), -1));
-
+                .ge(EartagDataEntity::getCreateTime, oneDayBefore);
 
+        //查询耳标上传数据
         List<EartagDataEntity> eartagDataEntityList = eartagDataDao.selectList(lambdaQueryWrapper);
         List<AnimalHeatVo> animalHeatVoList = new ArrayList<>();
         List<SportTimeVo> sportTimeVoList = new ArrayList<>();
+        List<SleepStatusVo> sleepStatusVoList = new ArrayList<>();
         if (CollUtil.isNotEmpty(eartagDataEntityList)) {
             for (EartagDataEntity eartagDataEntity : eartagDataEntityList) {
                 AnimalHeatVo animalHeatVo = new AnimalHeatVo();
@@ -106,46 +102,29 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
                 sportTimeVo.setCollectTime(createTime);
                 sportTimeVo.setSportCount(eartagDataEntity.getCountSport());
                 sportTimeVoList.add(sportTimeVo);
+
+                if (eartagDataEntity.getSleepGap() == 1) {
+                    SleepStatusVo sleepStatusVo = new SleepStatusVo();
+                    sleepStatusVo.setSleepStartTime(eartagDataEntity.getSleepBegin());
+                    sleepStatusVo.setDuration(eartagDataEntity.getRemark());
+                    sleepStatusVoList.add(sleepStatusVo);
+                }
             }
         }
+        //温度状态
         pigHealthStatusVo.setTemperature(animalHeatVoList);
+        //运动状态
         pigHealthStatusVo.setSportStatus(sportTimeVoList);
-
-//        //体温数据sql构建和查询
-//        LambdaQueryWrapper<AnimalHeatEntity> temperatureLambdaQuery = Wrappers.lambdaQuery();
-//        temperatureLambdaQuery.eq(AnimalHeatEntity::getEartag, pigEarTagNo)
-//                .eq(AnimalHeatEntity::getNowDate, today)
-//                .eq(AnimalHeatEntity::getDeleted, 0)
-//                .orderByDesc(AnimalHeatEntity::getId);
-//        List<AnimalHeatVo> animalHeatVoList = animalHeatDao.selectAnimalHeatVoList(temperatureLambdaQuery);
-//        pigHealthStatusVo.setTemperature(animalHeatVoList);
-
-        //采食状态数据sql构建及查询
-        LambdaQueryWrapper<EatTimeEntity> eatTimeLambdaQuery = Wrappers.lambdaQuery();
-        eatTimeLambdaQuery.eq(EatTimeEntity::getEartag, pigEarTagNo)
-                .eq(EatTimeEntity::getNowDate, today)
-                .eq(EatTimeEntity::getDeleted, 0)
-                .orderByDesc(EatTimeEntity::getId);
-        List<EatTimeVo> eatTimeVoList = eatTimeDao.selectEatTimeVoList(eatTimeLambdaQuery);
-        pigHealthStatusVo.setFeedingStatus(eatTimeVoList);
-
-        //睡眠状态数据sql构建及查询
-        LambdaQueryWrapper<SleepStatusEntity> sleepStatusLambdaQuery = Wrappers.lambdaQuery();
-        sleepStatusLambdaQuery.eq(SleepStatusEntity::getEartag, pigEarTagNo)
-                .eq(SleepStatusEntity::getNowDate, today)
-                .eq(SleepStatusEntity::getDeleted, 0)
-                .orderByDesc(SleepStatusEntity::getId);
-        List<SleepStatusVo> sleepStatusVoList = sleepStatusDao.selectSleepStatusVoList(sleepStatusLambdaQuery);
+        //睡眠状态
         pigHealthStatusVo.setSleepStatus(sleepStatusVoList);
 
-//        //运动状态数据sql构建及查询
-//        LambdaQueryWrapper<SportTimeEntity> sportStatusLambdaQuery = Wrappers.lambdaQuery();
-//        sportStatusLambdaQuery.eq(SportTimeEntity::getEartag, pigEarTagNo)
-//                .eq(SportTimeEntity::getNowDate, today)
-//                .eq(SportTimeEntity::getDeleted, 0)
-//                .orderByDesc(SportTimeEntity::getId);
-//        List<SportTimeVo> sportTimeVoList = sportTimeDao.selectSportTimeVoList(sportStatusLambdaQuery);
-//        pigHealthStatusVo.setSportStatus(sportTimeVoList);
+        //采食量
+        LambdaQueryWrapper<FeedRecordEntity> feedRecordQuery = Wrappers.lambdaQuery();
+        feedRecordQuery.eq(FeedRecordEntity::getPmsPig__earNumber, pigEarTagNo)
+                .ge(FeedRecordEntity::getStartTime, oneDayBefore);
+
+        List<FeedRecordVo> feedRecords = feedRecordDao.queryFeedRecords(feedRecordQuery);
+        pigHealthStatusVo.setFeedingStatus(feedRecords);
 
         return pigHealthStatusVo;
     }
@@ -271,9 +250,6 @@ public class PigServiceImpl extends ServiceImpl<PigDao, YearPigBaseEntity> imple
 
         checkPigEarTagNo(pigEarTagNo);
 
-//        if (!status.equals(1) && !status.equals(2) && !status.equals(3)) {
-//            throw new RRException("出栏状态有误,请检查!", 1001);
-//        }
         LambdaQueryWrapper<YearPigBaseEntity> pigBaseLambdaQuery = Wrappers.lambdaQuery();
         pigBaseLambdaQuery.eq(YearPigBaseEntity::getEartag, pigEarTagNo);
         YearPigBaseEntity yearPigBaseEntity = baseMapper.selectOne(pigBaseLambdaQuery);

+ 110 - 3
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/task/DataCollectTask.java

@@ -1,12 +1,31 @@
 package com.huimv.apiservice.task;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.apiservice.dao.FeedRecordDao;
+import com.huimv.apiservice.entity.FeedRecordEntity;
+import com.huimv.common.exception.RRException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
- *
+ * 数据采集定时任务
  * </p>
  *
  * @author yinhao
@@ -14,11 +33,99 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  */
 @Configuration
 @EnableScheduling
-@EnableAsync
+//@EnableAsync
 public class DataCollectTask {
 
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${runnong.host}")
+    private String host;
+    @Value("${runnong.login}")
+    private String loginUrl;
+    @Value("${runnong.feed-record}")
+    private String feedRecordUrl;
+    @Value("${runnong.xiuzhou.nick-name}")
+    private String XzNickName;
+    @Value("${runnong.xiuzhou.password}")
+    private String XzPassword;
+
+    @Autowired
+    private FeedRecordDao feedRecordDao;
+
+
+    /**
+     * 润农测定站读取每天读取4次饲喂记录数据
+     */
+    @Scheduled(cron = "0 0 0/6 * * ? ")
+    void getFeedRecords() {
+
+        //当前时间
+        DateTime currentTime = DateUtil.date();
+
+        //组装请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+
+        //form表单参数
+        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
+        multiValueMap.add("nickName", XzNickName);
+        multiValueMap.add("password", XzPassword);
+        //构建请求对象
+        HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(multiValueMap, headers);
+        System.out.println(request.getBody());
+        System.out.println(request.getHeaders());
+
+
+        try {
+            //发送获取sessionId的请求
+            ResponseEntity<Map> responseEntity = restTemplate.postForEntity(host + loginUrl, request, Map.class);
+
+            //取出响应中的sessionId
+            Map body = responseEntity.getBody();
+            System.out.println(body);
+            if (body == null) {
+                throw new RRException("获取登录信息异常!", 1001);
+            }
+            String sessionId = (String) ((Map) body.get("content")).get("sessionId");
+            System.out.println(sessionId);
+
+            //放入获取feedRecord的请求头当中
+            headers.set("Cookie", "JSESSIONID=" + sessionId);
+            //复用表单,清空条件
+            multiValueMap.clear();
+            //添加页码
+            multiValueMap.add("page", String.valueOf(1));
+            //添加行数
+            multiValueMap.add("rows", String.valueOf(10000));
+            //添加开始时间(获取当天)
+            String startTime = null;
+            if (currentTime.hour(true) == 0) {
+                startTime = DateUtil.format(DateUtil.offsetDay(currentTime, -1), "yyyy-MM-dd");
+            } else {
+                startTime = DateUtil.format(currentTime, "yyyy-MM-dd");
+            }
+            multiValueMap.add("dateStart", startTime);
+            //添加过滤条件(isValid=true)
+            multiValueMap.add("isValid", true);
+
+            //构建请求对象
+            request = new HttpEntity<>(multiValueMap, headers);
 
+            //发送获取数据的POST请求
+            ResponseEntity<JSONObject> feedRecordResponseEntity = restTemplate.postForEntity(host + feedRecordUrl, request, JSONObject.class);
+            //解析响应数据,存入数据库
+            JSONObject feedRecordJson = feedRecordResponseEntity.getBody();
+            if (feedRecordJson != null) {
+                JSONArray rows = feedRecordJson.getJSONArray("rows");
+                List<FeedRecordEntity> feedRecordEntities = rows.toJavaList(FeedRecordEntity.class);
+                feedRecordDao.batchInsertData(feedRecordEntities);
+            }
+        } catch (Exception e) {
+            throw new RRException(e.getMessage(), 1001, e);
+        }
 
+    }
 
 
 }

+ 9 - 0
huimv-smart-apiservice/src/main/resources/application.properties

@@ -1,2 +1,11 @@
 # \u73AF\u5883 dev|test|prod
 spring.profiles.active=dev
+
+# \u6DA6\u519C\u63A5\u53E3
+runnong.host=http://iotadmin.rnpig.com
+runnong.login=/api/gf2/login
+runnong.feed-record=/hadmin/pms/feeding/pmsFeedRecord/query?ajax=1
+
+# \u83B7\u53D6\u4E91\u5E73\u53F0\u7684\u8D26\u6237
+runnong.xiuzhou.nick-name=xzadmin
+runnong.xiuzhou.password=123456

+ 65 - 0
huimv-smart-apiservice/src/main/resources/mapper/apiservice/FeedRecordDao.xml

@@ -0,0 +1,65 @@
+<?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.apiservice.dao.FeedRecordDao">
+
+    <resultMap id="feedRecordMap" type="com.huimv.apiservice.entity.FeedRecordEntity">
+        <id column="id" property="id" />
+        <result column="pig_farm_name" property="pigFarm__name" />
+        <result column="pig_farm_id" property="pigFarm__id" />
+        <result column="pms_device_list_name" property="pmsDeviceList__name" />
+        <result column="is_valid" property="isValid" />
+        <result column="feed_weight" property="feedWeight" />
+        <result column="weight" property="weight" />
+        <result column="pms_pig_id" property="pmsPig__id" />
+        <result column="times" property="times" />
+        <result column="feed_speed" property="feedSpeed" />
+        <result column="pms_pig_ear_identify" property="pmsPig__earIdentify" />
+        <result column="unit_amount" property="unitAmount" />
+        <result column="feed_weight_rate" property="feedWeightRate" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="pms_pig_ear_number" property="pmsPig__earNumber" />
+    </resultMap>
+
+
+    <insert id="batchInsertData">
+        INSERT ignore INTO mgt_feed_record(id, pig_farm_name, pig_farm_id, pms_device_list_name, is_valid, feed_weight, weight, pms_pig_id, times, feed_speed, pms_pig_ear_identify, unit_amount, feed_weight_rate, start_time, end_time, pms_pig_ear_number)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.id},
+            #{item.pigFarm__name},
+            #{item.pigFarm__id},
+            #{item.pmsDeviceList__name},
+            #{item.isValid},
+            #{item.feedWeight},
+            #{item.weight},
+            #{item.pmsPig__id},
+            #{item.times},
+            #{item.feedSpeed},
+            #{item.pmsPig__earIdentify},
+            #{item.unitAmount},
+            #{item.feedWeightRate},
+            #{item.startTime},
+            #{item.endTime},
+            #{item.pmsPig__earNumber}
+            )
+        </foreach>
+    </insert>
+
+    <select id="select" resultMap="feedRecordMap">
+        select * from mgt_feed_record
+        ${ew.customSqlSegment}
+    </select>
+
+    <select id="queryFeedRecords" resultType="com.huimv.apiservice.entity.vo.FeedRecordVo">
+        SELECT
+          start_time,
+          end_time,
+          feed_weight
+        FROM mgt_feed_record
+        ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 117 - 99
huimv-smart-apiservice/src/test/java/com/huimv/apiservice/HuimvSmartApiserviceApplicationTests.java

@@ -1,22 +1,27 @@
-//package com.huimv.apiservice;
-//
-//import cn.hutool.core.date.DateTime;
-//import cn.hutool.core.date.DateUtil;
-//import com.huimv.apiservice.dao.IndoorEnvironmentDao;
-//import com.huimv.apiservice.dao.OutdoorEnvironmentDao;
-//import com.huimv.apiservice.dao.PigDao;
-//import com.huimv.apiservice.entity.IndoorEnvironmentEntity;
-//import com.huimv.apiservice.entity.OutdoorEnvironmentEntity;
-//import org.junit.jupiter.api.Test;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.context.SpringBootTest;
-//
-//import java.math.BigDecimal;
-//import java.util.*;
-//
-//@SpringBootTest
-//class HuimvSmartApiserviceApplicationTests {
-//
+package com.huimv.apiservice;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.apiservice.dao.FeedRecordDao;
+import com.huimv.apiservice.dao.IndoorEnvironmentDao;
+import com.huimv.apiservice.dao.OutdoorEnvironmentDao;
+import com.huimv.apiservice.dao.PigDao;
+import com.huimv.apiservice.entity.FeedRecordEntity;
+import com.huimv.apiservice.entity.IndoorEnvironmentEntity;
+import com.huimv.apiservice.entity.OutdoorEnvironmentEntity;
+import com.huimv.apiservice.entity.vo.FeedRecordVo;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@SpringBootTest
+class HuimvSmartApiserviceApplicationTests {
+
 //    @Autowired
 //    private IndoorEnvironmentDao indoorEnvironmentDao;
 //
@@ -25,14 +30,27 @@
 //
 //    @Autowired
 //    private PigDao pigDao;
-//
-//
-//    @Test
-//    void contextLoads() {
-//
-//    }
-//
-//
+
+    @Autowired
+    private FeedRecordDao feedRecordDao;
+
+
+    @Test
+    void contextLoads() {
+
+        LambdaQueryWrapper<FeedRecordEntity> query = Wrappers.lambdaQuery();
+        query.eq(FeedRecordEntity::getPmsPig__earNumber, "156000020947069")
+                .ge(FeedRecordEntity::getStartTime, DateUtil.offsetDay(DateUtil.date(), -1));
+
+        List<FeedRecordVo> feedRecordVos = feedRecordDao.queryFeedRecords(query);
+        System.out.println(feedRecordVos);
+
+//        List<FeedRecordEntity> feedRecordEntities = feedRecordDao.select(query);
+//        System.out.println(feedRecordEntities);
+
+    }
+
+
 //    @Test
 //    void createIndoorEnv() {
 //
@@ -118,77 +136,77 @@
 //
 //        outdoorEnvironmentDao.batchInsertData(list);
 //    }
+
+
+//    @Test
+//    void createPigData() {
 //
+//        String[] breeds = {"黑猪","金华两头乌","杜巴嘉","巴嘉","杜洛克","嘉兴黑猪","大白猪"};
+//        String[] originPlace = {"金华","杭州"};
 //
-////    @Test
-////    void createPigData() {
-////
-////        String[] breeds = {"黑猪","金华两头乌","杜巴嘉","巴嘉","杜洛克","嘉兴黑猪","大白猪"};
-////        String[] originPlace = {"金华","杭州"};
-////
-////        List<YearPigBaseEntity> all = new ArrayList<>();
-////        List<YearPigBaseEntity> mothers = new ArrayList<>();
-////        List<YearPigBaseEntity> fathers = new ArrayList<>();
-////
-////        Random random = new Random();
-////        for (int i = 5; i < 2001; i++) {
-////            YearPigBaseEntity entity = new YearPigBaseEntity();
-////            String number = String.valueOf(i);
-////            String earTag = "N00000".substring(0, 6 - number.length()) + number;
-////            entity.setEartag(earTag);
-////            int dayAge = random.nextInt(200) + 50;
-////            entity.setDayAge(dayAge);
-////            entity.setUnitId(random.nextInt(4) + 1);
-////            BigDecimal bigDecimal = new BigDecimal(dayAge);
-////            BigDecimal weight = bigDecimal.multiply(new BigDecimal(0.8)).setScale(2, BigDecimal.ROUND_HALF_UP);
-////            entity.setWeight(weight.doubleValue());
-////            entity.setBreed(breeds[random.nextInt(breeds.length)]);
-////            String sex = i % 2 == 0 ? "公" : "母";
-////            entity.setSex(sex);
-////            if (dayAge >= 150 && "母".equals(sex)) {
-////                mothers.add(entity);
-////            }
-////            if (dayAge >= 150 && "公".equals(sex)) {
-////                fathers.add(entity);
-////            }
-////            entity.setBirthday(DateUtil.offsetDay(DateUtil.date(),i % 200));
-////            entity.setOriginPlace(originPlace[random.nextInt(2)]);
-////            //System.out.println(entity.getDayAge() + " " + " " + entity.getUnitId() + " " +  entity.getWeight());
-////            entity.setPigstyId(random.nextInt(4) + 1);
-////            entity.setPeriodId(1);
-////            entity.setInFenceTime(DateUtil.offsetDay(DateUtil.parseDate("2021-01-01"),random.nextInt(91) - 30));
-////            all.add(entity);
-////        }
-////
-////        for (YearPigBaseEntity yearPigBaseEntity : all) {
-////            if (yearPigBaseEntity.getDayAge() < 150) {
-////                yearPigBaseEntity.setMotherEartag(mothers.get(random.nextInt(mothers.size())).getEartag());
-////                yearPigBaseEntity.setFatherEartag(fathers.get(random.nextInt(fathers.size())).getEartag());
-////            }
-////        }
-////        pigDao.batchInsertData(all);
-////
-////        List<SowChildbirthEntity> sowChildbirthEntityList = new ArrayList<>();
-////        for (YearPigBaseEntity mother : mothers) {
-////            SowChildbirthEntity entity = new SowChildbirthEntity();
-////            entity.setEartag(mother.getEartag());
-////            entity.setChildbirthWeight(mother.getWeight());
-////            entity.setPregnancyDate(DateUtil.offsetMonth(mother.getInFenceTime(),3));
-////            entity.setChildbirthCount(random.nextInt(10) + 5);
-////            sowChildbirthEntityList.add(entity);
-////        }
-////        sowChildbirthDao.batchInsertData(sowChildbirthEntityList);
-////
-////
-////
-////
-////    }
-//
-//
-//
-//
-//
-//
-//
-//
-//}
+//        List<YearPigBaseEntity> all = new ArrayList<>();
+//        List<YearPigBaseEntity> mothers = new ArrayList<>();
+//        List<YearPigBaseEntity> fathers = new ArrayList<>();
+//
+//        Random random = new Random();
+//        for (int i = 5; i < 2001; i++) {
+//            YearPigBaseEntity entity = new YearPigBaseEntity();
+//            String number = String.valueOf(i);
+//            String earTag = "N00000".substring(0, 6 - number.length()) + number;
+//            entity.setEartag(earTag);
+//            int dayAge = random.nextInt(200) + 50;
+//            entity.setDayAge(dayAge);
+//            entity.setUnitId(random.nextInt(4) + 1);
+//            BigDecimal bigDecimal = new BigDecimal(dayAge);
+//            BigDecimal weight = bigDecimal.multiply(new BigDecimal(0.8)).setScale(2, BigDecimal.ROUND_HALF_UP);
+//            entity.setWeight(weight.doubleValue());
+//            entity.setBreed(breeds[random.nextInt(breeds.length)]);
+//            String sex = i % 2 == 0 ? "公" : "母";
+//            entity.setSex(sex);
+//            if (dayAge >= 150 && "母".equals(sex)) {
+//                mothers.add(entity);
+//            }
+//            if (dayAge >= 150 && "公".equals(sex)) {
+//                fathers.add(entity);
+//            }
+//            entity.setBirthday(DateUtil.offsetDay(DateUtil.date(),i % 200));
+//            entity.setOriginPlace(originPlace[random.nextInt(2)]);
+//            //System.out.println(entity.getDayAge() + " " + " " + entity.getUnitId() + " " +  entity.getWeight());
+//            entity.setPigstyId(random.nextInt(4) + 1);
+//            entity.setPeriodId(1);
+//            entity.setInFenceTime(DateUtil.offsetDay(DateUtil.parseDate("2021-01-01"),random.nextInt(91) - 30));
+//            all.add(entity);
+//        }
+//
+//        for (YearPigBaseEntity yearPigBaseEntity : all) {
+//            if (yearPigBaseEntity.getDayAge() < 150) {
+//                yearPigBaseEntity.setMotherEartag(mothers.get(random.nextInt(mothers.size())).getEartag());
+//                yearPigBaseEntity.setFatherEartag(fathers.get(random.nextInt(fathers.size())).getEartag());
+//            }
+//        }
+//        pigDao.batchInsertData(all);
+//
+//        List<SowChildbirthEntity> sowChildbirthEntityList = new ArrayList<>();
+//        for (YearPigBaseEntity mother : mothers) {
+//            SowChildbirthEntity entity = new SowChildbirthEntity();
+//            entity.setEartag(mother.getEartag());
+//            entity.setChildbirthWeight(mother.getWeight());
+//            entity.setPregnancyDate(DateUtil.offsetMonth(mother.getInFenceTime(),3));
+//            entity.setChildbirthCount(random.nextInt(10) + 5);
+//            sowChildbirthEntityList.add(entity);
+//        }
+//        sowChildbirthDao.batchInsertData(sowChildbirthEntityList);
+//
+//
+//
+//
+//    }
+
+
+
+
+
+
+
+
+}

+ 2 - 1
huimv-smart-management/src/main/java/com/huimv/management/controller/EartagDataController.java

@@ -1,5 +1,6 @@
  package com.huimv.management.controller;
 
+import java.text.ParseException;
 import java.util.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,7 +42,7 @@ public class EartagDataController {
 
 
      @RequestMapping("/searchDateByCondition")
-     public R listby(@RequestParam Map<String, Object> params) throws InterruptedException {
+     public R listby(@RequestParam Map<String, Object> params) throws InterruptedException, ParseException {
          Map ResultMap = eartagDataService.queryPageBytimeAndEartag(params);
          return R.ok().put("page", ResultMap);
      }