Bladeren bron

增加定时更新耳标连线状态

zhuoning 2 jaren geleden
bovenliggende
commit
42f19c35d1
13 gewijzigde bestanden met toevoegingen van 413 en 7 verwijderingen
  1. 2 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/HuimvManageApplication.java
  2. 21 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/controller/EartagOnlineStatusController.java
  3. 16 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/EartagOnlineStatusMapper.java
  4. 24 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/xml/EartagOnlineStatusMapper.xml
  5. 47 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/pojo/EartagOnlineStatus.java
  6. 42 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/EartagTask.java
  7. 28 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/RunnableTaskEartagOnlineStatus.java
  8. 16 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/EartagOnlineStatusService.java
  9. 8 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/IEartagService.java
  10. 17 7
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagEartagRegister2ServiceImpl.java
  11. 20 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagOnlineStatusServiceImpl.java
  12. 143 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagServiceImpl.java
  13. 29 0
      huimv-eartag2-platform/huimv-eartag2-manage2/src/test/java/com/huimv/eartag2/manage2/service/IEartagServiceTest.java

+ 2 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/HuimvManageApplication.java

@@ -8,6 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Import;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.client.RestTemplate;
 
 /**
@@ -19,6 +20,7 @@ import org.springframework.web.client.RestTemplate;
  * @Create : 2020-12-25
  **/
 @SpringBootApplication
+@EnableScheduling
 @MapperScan("com.huimv.eartag2.manage2.mapper")
 @Import(InterceptorConfig.class)
 public class HuimvManageApplication {

+ 21 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/controller/EartagOnlineStatusController.java

@@ -0,0 +1,21 @@
+package com.huimv.eartag2.manage2.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-08-06
+ */
+@RestController
+@RequestMapping("/eartag-online-status")
+public class EartagOnlineStatusController {
+
+}
+

+ 16 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/EartagOnlineStatusMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.eartag2.manage2.mapper;
+
+import com.huimv.eartag2.manage2.pojo.EartagOnlineStatus;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-08-06
+ */
+public interface EartagOnlineStatusMapper extends BaseMapper<EartagOnlineStatus> {
+
+}

+ 24 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/xml/EartagOnlineStatusMapper.xml

@@ -0,0 +1,24 @@
+<?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.eartag2.manage2.mapper.EartagOnlineStatusMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.eartag2.manage2.pojo.EartagOnlineStatus">
+        <id column="id" property="id" />
+        <result column="farm_id" property="farmId" />
+        <result column="unit_id" property="unitId" />
+        <result column="unit_name" property="unitName" />
+        <result column="total" property="total" />
+        <result column="online" property="online" />
+        <result column="offline" property="offline" />
+        <result column="online_earmark" property="onlineEarmark" />
+        <result column="offline_earmark" property="offlineEarmark" />
+        <result column="add_time" property="addTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, farm_id, unit_id, unit_name, total, online, offline, online_earmark, offline_earmark, add_time
+    </sql>
+
+</mapper>

+ 47 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/pojo/EartagOnlineStatus.java

@@ -0,0 +1,47 @@
+package com.huimv.eartag2.manage2.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-08-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class EartagOnlineStatus implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String farmId;
+
+    private String unitId;
+
+    private String unitName;
+
+    private Integer total;
+
+    private Integer online;
+
+    private Integer offline;
+
+    private String onlineEarmark;
+
+    private String offlineEarmark;
+
+    private Date addTime;
+
+
+}

+ 42 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/EartagTask.java

@@ -0,0 +1,42 @@
+package com.huimv.eartag2.manage2.schedule;
+
+import com.huimv.eartag2.manage2.service.IEartagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+public class EartagTask {
+
+    @Autowired
+    private IEartagService eartagService;
+
+    // 10分钟
+    @Scheduled(cron = "0 0/10 * * * ? ")
+    private void countEartagOnlineTimes() throws IOException {
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
+        System.out.println("时间戳="+nowTimestamp);
+
+//        ExecutorService service = Executors.newFixedThreadPool(5);
+//        ExecutorService service = Executors.newSingleThreadExecutor();
+//        RunnableTaskEartagOnlineStatus task1 = new RunnableTaskEartagOnlineStatus();
+//        service.execute(task1);
+        //更新耳标在线状态
+        eartagService.updateEartagLiveStatusAndCount();
+    }
+}

+ 28 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/RunnableTaskEartagOnlineStatus.java

@@ -0,0 +1,28 @@
+package com.huimv.eartag2.manage2.schedule;
+
+import com.huimv.eartag2.manage2.service.IEartagService;
+import com.huimv.eartag2.manage2.service.impl.EartagServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+public class RunnableTaskEartagOnlineStatus implements Runnable {
+    @Autowired
+    private IEartagService eartagService;
+
+    @Override
+    public void run() {
+        // 更新计算耳标连线状态
+//        IEartagService eartagService = new EartagServiceImpl();
+        System.out.println("eartagService="+eartagService);
+        eartagService.updateEartagLiveStatusAndCount();
+
+    }
+
+}

+ 16 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/EartagOnlineStatusService.java

@@ -0,0 +1,16 @@
+package com.huimv.eartag2.manage2.service;
+
+import com.huimv.eartag2.manage2.pojo.EartagOnlineStatus;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-08-06
+ */
+public interface EartagOnlineStatusService extends IService<EartagOnlineStatus> {
+
+}

+ 8 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/IEartagService.java

@@ -0,0 +1,8 @@
+package com.huimv.eartag2.manage2.service;
+
+public interface IEartagService {
+//    void getUnitByPigpen();
+
+    void updateEartagLiveStatusAndCount();
+
+}

+ 17 - 7
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagEartagRegister2ServiceImpl.java

@@ -51,21 +51,31 @@ public class EartagEartagRegister2ServiceImpl extends ServiceImpl<EartagEartagRe
         wrapper.like(StringUtils.isNotBlank(earmark),"earmark",earmark);
         wrapper.orderByDesc("ask_time");
         Page<EartagEartagRegister2> page = this.page(new Page<>(Long.parseLong(pageNo), Long.parseLong(pageSize)), wrapper);
+        int onlineCount = 0;
+        int offlineCount = 0;
         for (EartagEartagRegister2 record : page.getRecords()) {
             Float earTemp1 = record.getEarTemp1();
             maxEarTemp = Math.max(earTemp1,maxEarTemp);
             minEarTemp = Math.min(earTemp1,minEarTemp);
+            if(record.getLiveStatus() == 1){
+                onlineCount++;
+            }else{
+                offlineCount++;
+            }
         }
 
         Map map = new HashMap();
-        long allCount = this.count(wrapper);
-        //在线
-        wrapper.eq("active_status", 1);
-        long onCount = this.count(wrapper);
+//        long allCount = this.count(wrapper);
+//        //在线
+//        wrapper.eq("active_status", 1);
+//        long onCount = this.count(wrapper);
+//        map.put("countOff",allCount-onCount);
+//        map.put("countOn",onCount);
+//        map.put("countAll",allCount);
 
-        map.put("countOff",allCount-onCount);
-        map.put("countOn",onCount);
-        map.put("countAll",allCount);
+        map.put("countOff",offlineCount);
+        map.put("countOn",onlineCount);
+        map.put("countAll",onlineCount+offlineCount);
         map.put("maxEarTemp",maxEarTemp);
         map.put("minEarTemp",minEarTemp);
         map.put("page",page);

+ 20 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagOnlineStatusServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.eartag2.manage2.service.impl;
+
+import com.huimv.eartag2.manage2.pojo.EartagOnlineStatus;
+import com.huimv.eartag2.manage2.mapper.EartagOnlineStatusMapper;
+import com.huimv.eartag2.manage2.service.EartagOnlineStatusService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-08-06
+ */
+@Service
+public class EartagOnlineStatusServiceImpl extends ServiceImpl<EartagOnlineStatusMapper, EartagOnlineStatus> implements EartagOnlineStatusService {
+
+}

+ 143 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagServiceImpl.java

@@ -0,0 +1,143 @@
+package com.huimv.eartag2.manage2.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.eartag2.common.dao.entity.SysBaseConfigEntity;
+import com.huimv.eartag2.common.dao.repo.SysBaseConfigEntityRepo;
+import com.huimv.eartag2.manage2.mapper.BasePigpenMapper;
+import com.huimv.eartag2.manage2.mapper.EartagEartagRegister2Mapper;
+import com.huimv.eartag2.manage2.mapper.EartagOnlineStatusMapper;
+import com.huimv.eartag2.manage2.mapper.SysBaseConfigMapper;
+import com.huimv.eartag2.manage2.pojo.BasePigpen;
+import com.huimv.eartag2.manage2.pojo.EartagEartagRegister2;
+import com.huimv.eartag2.manage2.pojo.EartagOnlineStatus;
+import com.huimv.eartag2.manage2.pojo.SysBaseConfig;
+import com.huimv.eartag2.manage2.service.IEartagService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.*;
+
+/**
+ * @Project :
+ * @Package :
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+@Slf4j
+public class EartagServiceImpl implements IEartagService {
+    @Autowired
+    private BasePigpenMapper basePigpenMapper;
+    @Autowired
+    private EartagEartagRegister2Mapper eartagEartagRegister2Mapper;
+    @Autowired
+    private com.huimv.eartag2.manage2.mapper.SysBaseConfigMapper SysBaseConfigMapper;
+    @Autowired
+    private EartagOnlineStatusMapper eartagOnlineStatusMapper;
+
+    @Override
+    public void updateEartagLiveStatusAndCount() {
+        System.out.println("updateEartagLiveStatusAndCount 123");
+        // {}
+        List<BasePigpen> basePigpenList =  getUnitByPigpen();
+        System.out.println("basePigpenList.size="+basePigpenList.size());
+        if(basePigpenList.size()==0){
+            System.out.println("单元数为0");
+        }
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
+        int offlineTimeDef = 30;
+        Map confMap = new HashMap();
+         confMap.put("config_key","eartagOfflineTime");
+        List<SysBaseConfig> configList = SysBaseConfigMapper.selectByMap(confMap);
+        if(configList.size()>0){
+            offlineTimeDef = Integer.parseInt(configList.get(0).getConfigValue());
+            log.info("耳标离线时间="+offlineTimeDef);
+        }else{
+            log.error("耳标离线时间属性未配置.");
+        }
+        List countList = new ArrayList();
+        for(BasePigpen basePigpen:basePigpenList){
+//            System.out.println("basePigpen="+basePigpen);
+            String farmId = basePigpen.getFarmCode();
+            Integer unitId = basePigpen.getId();
+            String unitName = basePigpen.getPigpenName();
+            Map countMap = new HashMap<String,Object>();
+            countList.add(countMap);
+            int onlineTimes = 0;
+            int offlineTimes = 0;
+            StringBuilder onlineSb = new StringBuilder();
+            StringBuilder offlineSb = new StringBuilder();
+            // 用330110002测试
+            if(farmId.trim().equalsIgnoreCase("330110002")){
+                // {读取相关耳标注册记录}
+                List<EartagEartagRegister2> eartagEartagRegister2List = getEartagRegister(farmId,unitId);
+                if(eartagEartagRegister2List.size() == 0){
+                    System.out.println("该单元没有耳标。");
+                }
+                System.out.println("该单元没有耳标 eartagEartagRegister2List.size="+eartagEartagRegister2List.size());
+                for(EartagEartagRegister2 eartagEartagRegister2:eartagEartagRegister2List){
+                    Date lastTime = eartagEartagRegister2.getLastTime();
+                    System.out.println("lastTime.getTime()="+lastTime.getTime());
+                    long offlineTimeDiff = nowTimestamp.getTime()-lastTime.getTime();
+                    if(offlineTimeDiff/(1000*60) >= offlineTimeDef){
+                        eartagEartagRegister2.setLiveStatus(0);
+                        offlineTimes++;
+                        if(offlineSb.length()>0){
+                            offlineSb.append(",");
+                        }
+                        offlineSb.append(eartagEartagRegister2.getEarmark());
+                    }else{
+                        eartagEartagRegister2.setLiveStatus(1);
+                        onlineTimes++;
+                        if(onlineSb.length()>0){
+                            onlineSb.append(",");
+                        }
+                        onlineSb.append(eartagEartagRegister2.getEarmark());
+                    }
+                    eartagEartagRegister2Mapper.updateById(eartagEartagRegister2);
+                }
+            }
+            countMap.put("farmId",farmId);
+            countMap.put("unitId",unitId);
+            countMap.put("unitName",unitName);
+            countMap.put("total",onlineTimes+offlineTimes);
+            countMap.put("online",onlineTimes);
+            countMap.put("offline",offlineTimes);
+            countMap.put("onlineEarmark",onlineSb.toString());
+            countMap.put("offlineEarmark",offlineSb.toString());
+        }
+
+        for(int a=0;a<countList.size();a++){
+            Map countMap = (Map) countList.get(a);
+            EartagOnlineStatus eartagOnlineStatus = new EartagOnlineStatus();
+            eartagOnlineStatus.setFarmId(countMap.get("farmId").toString());
+            eartagOnlineStatus.setUnitId(countMap.get("unitId").toString());
+            eartagOnlineStatus.setUnitName(countMap.get("unitName").toString());
+            eartagOnlineStatus.setTotal(Integer.parseInt(countMap.get("total").toString()));
+            eartagOnlineStatus.setOnline(Integer.parseInt(countMap.get("online").toString()));
+            eartagOnlineStatus.setOffline(Integer.parseInt(countMap.get("offline").toString()));
+            eartagOnlineStatus.setOnlineEarmark(countMap.get("onlineEarmark").toString());
+            eartagOnlineStatus.setOfflineEarmark(countMap.get("offlineEarmark").toString());
+            eartagOnlineStatus.setAddTime(nowTimestamp);
+            eartagOnlineStatusMapper.insert(eartagOnlineStatus);
+        }
+    }
+
+    private List<EartagEartagRegister2> getEartagRegister(String farmId, Integer unitId) {
+        HashMap paramsMap = new HashMap();
+        paramsMap.put("farm_id",farmId);
+        paramsMap.put("unit_id",unitId);
+        return eartagEartagRegister2Mapper.selectByMap(paramsMap);
+    }
+
+    public List<BasePigpen> getUnitByPigpen(){
+        QueryWrapper<BasePigpen> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("f_type","2");
+        return basePigpenMapper.selectList(queryWrapper);
+    }
+
+}

+ 29 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/test/java/com/huimv/eartag2/manage2/service/IEartagServiceTest.java

@@ -0,0 +1,29 @@
+package com.huimv.eartag2.manage2.service;
+
+import com.huimv.eartag2.manage2.service.impl.EartagServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@RunWith(SpringRunner.class)
+public class IEartagServiceTest {
+    @Autowired
+    private IEartagService eartagService;
+
+    @Test
+    public void test1(){
+        eartagService.updateEartagLiveStatusAndCount();
+
+    }
+}