yinhao 3 years ago
parent
commit
3d07a18338
41 changed files with 2133 additions and 5 deletions
  1. 9 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/pom.xml
  2. 4 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/HuimvSmartEartagDataTransmissionApplication.java
  3. 28 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/autoconfigure/MybatisPlusConfiguration.java
  4. 62 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/controller/PigDataProcessingController.java
  5. 55 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/BaseFarmInfoEntity.java
  6. 87 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/DailyTabulateDataEntity.java
  7. 127 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/EartagDataEntity.java
  8. 27 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/FarmEartagChangeEntity.java
  9. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/NewAndOffLineEartagEntity.java
  10. 42 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/BaseForm.java
  11. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/EartagForm.java
  12. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/form/PigStockForm.java
  13. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/ChangeEartagDataVo.java
  14. 51 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/DailyTabulateDataVo.java
  15. 34 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/entity/vo/EartagDataVo.java
  16. 19 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/BaseFarmInfoDao.java
  17. 25 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/DailyTabulateDataDao.java
  18. 28 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/EartagDataDao.java
  19. 38 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/mapper/FarmEartagChangeDao.java
  20. 59 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/R.java
  21. 48 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRException.java
  22. 130 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/result/RRExceptionHandler.java
  23. 29 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DailyTabulateDataService.java
  24. 23 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/DataPushService.java
  25. 22 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/EartagDataService.java
  26. 18 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/FarmEartagChangeService.java
  27. 53 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DailyTabulateDataServiceImpl.java
  28. 51 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/DataPushServiceImpl.java
  29. 115 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/EartagDataServiceImpl.java
  30. 32 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/service/impl/FarmEartagChangeServiceImpl.java
  31. 163 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/task/DataProcessingTask.java
  32. 131 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Constant.java
  33. 112 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/PageUtils.java
  34. 76 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Query.java
  35. 50 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/SQLFilter.java
  36. 24 5
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/application-dev.yml
  37. 18 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/DailyTabulateDataDao.xml
  38. 78 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/EartagDataDao.xml
  39. 41 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/resources/mapper/transmission/FarmEartagChangeDao.xml
  40. 94 0
      smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/test/java/com.huimv.transmission/HuimvSmartEartagDataManagerTest.java
  41. 22 0
      smart.eartag.data.platform/pom.xml

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File diff suppressed because it is too large
+ 131 - 0
smart.eartag.data.platform/huimv-smart-eartag-data-transmission/src/main/java/com/huimv/transmission/utils/Constant.java


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

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

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

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

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

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

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

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

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

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+
+<mapper namespace="com.huimv.transmission.mapper.DailyTabulateDataDao">
+
+
+    <select id="getPigStockPage" resultType="com.huimv.transmission.entity.vo.DailyTabulateDataVo">
+        SELECT
+          farm_code farmID,
+          stock_total quantity,
+          stock_new new_count,
+          offline_no eliminate,
+          statistic_date time
+        FROM daily_tabulate_data
+        ${ew.customSqlSegment}
+    </select>
+</mapper>

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

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

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

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+
+<mapper namespace="com.huimv.transmission.mapper.FarmEartagChangeDao">
+
+
+    <resultMap id="ChangeEartagDataVoMap" type="com.huimv.transmission.entity.vo.ChangeEartagDataVo">
+        <result column="farm_id" property="farmID"/>
+        <result column="change_type" property="type"/>
+        <collection column="{farmId=farm_id,type=change_type}" property="newEartagNo"
+                    select="com.huimv.transmission.mapper.FarmEartagChangeDao.getEartags">
+        </collection>
+    </resultMap>
+
+    <select id="getPigStockByChangeType" resultMap="ChangeEartagDataVoMap">
+        SELECT distinct
+          farm_id,change_type
+        FROM
+          farm_eartag_change
+        ${ew.customSqlSegment}
+    </select>
+
+    <select id="getEartags" resultType="string">
+        select eartag_no
+        from farm_eartag_change
+        where farm_id = #{farmId} AND change_type = #{type}
+    </select>
+
+
+    <insert id="batchInsertNewEartags">
+        INSERT INTO farm_eartag_change(farm_id, eartag_no, change_type) VALUES
+        <foreach collection="todaySet" separator="," item="item">
+            (
+            #{farmCode},
+            #{item},
+            #{changeType}
+            )
+        </foreach>
+    </insert>
+</mapper>

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

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

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

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