Ver código fonte

设备状态

Newspaper 2 anos atrás
pai
commit
98b479902f

+ 2 - 0
src/main/java/com/huimv/admin/HuimvAdminApplication.java

@@ -3,6 +3,7 @@ package com.huimv.admin;
 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
@@ -14,6 +15,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  **/
 @SpringBootApplication
 @MapperScan("com.huimv.admin.mapper")
+@EnableScheduling
 public class HuimvAdminApplication {
     public static void main(String[] args) {
         SpringApplication.run(HuimvAdminApplication.class, args);

+ 13 - 0
src/main/java/com/huimv/admin/controller/EnvDeviceOnlineController.java

@@ -1,10 +1,17 @@
 package com.huimv.admin.controller;
 
 
+import com.huimv.admin.common.utils.Result;
+import com.huimv.admin.service.IEnvDeviceOnlineService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * <p>
  *  前端控制器
@@ -17,4 +24,10 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/env-device-online")
 public class EnvDeviceOnlineController {
 
+    @Autowired
+    private IEnvDeviceOnlineService envDeviceOnlineService;
+    @PostMapping("/listDeviceStatus")
+    public Result listDeviceStatus(@RequestBody Map<String, String> paramsMap){
+        return envDeviceOnlineService.listDeviceStatus(paramsMap);
+    }
 }

+ 3 - 1
src/main/java/com/huimv/admin/entity/EnvDeviceOnline.java

@@ -3,6 +3,8 @@ package com.huimv.admin.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import lombok.Data;
@@ -58,7 +60,7 @@ public class EnvDeviceOnline implements Serializable {
     /**
      * 在线率
      */
-    private String onlineRate;
+    private BigDecimal onlineRate;
 
     private String ohter1;
 

+ 17 - 0
src/main/java/com/huimv/admin/entity/vo/EnvDeviceOnlineVo.java

@@ -0,0 +1,17 @@
+package com.huimv.admin.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class EnvDeviceOnlineVo {
+    private Integer deviceOn;
+    private BigDecimal onlineRate;
+
+
+    @JsonFormat(pattern = "yyyy-MM-dd" ,timezone = "GMT+8")
+    private LocalDateTime creatTime;
+}

+ 10 - 0
src/main/java/com/huimv/admin/mapper/EnvDeviceOnlineMapper.java

@@ -1,7 +1,14 @@
 package com.huimv.admin.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.admin.entity.EnvDeviceOnline;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.admin.entity.vo.EnvDeviceOnlineVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface EnvDeviceOnlineMapper extends BaseMapper<EnvDeviceOnline> {
 
+    List<EnvDeviceOnlineVo> getDeviceStatus(@Param(Constants.WRAPPER) QueryWrapper<EnvDeviceOnline> queryWrapper);
+
+    BigDecimal getStatus(@Param(Constants.WRAPPER) QueryWrapper<EnvDeviceOnline> queryWrapper);
 }

+ 4 - 0
src/main/java/com/huimv/admin/service/IEnvDeviceOnlineService.java

@@ -1,8 +1,11 @@
 package com.huimv.admin.service;
 
+import com.huimv.admin.common.utils.Result;
 import com.huimv.admin.entity.EnvDeviceOnline;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IEnvDeviceOnlineService extends IService<EnvDeviceOnline> {
 
+    Result listDeviceStatus(Map<String, String> paramsMap);
 }

+ 63 - 0
src/main/java/com/huimv/admin/service/impl/EnvDeviceOnlineServiceImpl.java

@@ -1,11 +1,24 @@
 package com.huimv.admin.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.admin.common.utils.DataUill;
+import com.huimv.admin.common.utils.Result;
+import com.huimv.admin.common.utils.ResultCode;
 import com.huimv.admin.entity.EnvDeviceOnline;
+import com.huimv.admin.entity.vo.EnvDeviceOnlineVo;
 import com.huimv.admin.mapper.EnvDeviceOnlineMapper;
 import com.huimv.admin.service.IEnvDeviceOnlineService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +30,54 @@ import org.springframework.stereotype.Service;
 @Service
 public class EnvDeviceOnlineServiceImpl extends ServiceImpl<EnvDeviceOnlineMapper, EnvDeviceOnline> implements IEnvDeviceOnlineService {
 
+    @Resource
+    private EnvDeviceOnlineMapper envDeviceOnlineMapper;
+
+    @Override
+    public Result listDeviceStatus(Map<String, String> paramsMap) {
+        Date timesMonthmorning = DataUill.getTimesMonthmorning();
+        String farmId = paramsMap.get("farmId");
+        Map resultMap = new HashMap();
+
+        QueryWrapper<EnvDeviceOnline> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id",farmId).ge("creat_time",timesMonthmorning);
+        List<EnvDeviceOnlineVo>  envDeviceOnlines = envDeviceOnlineMapper.getDeviceStatus(queryWrapper);
+
+        BigDecimal currentStatus = envDeviceOnlineMapper.getStatus(queryWrapper);
+        resultMap.put("data",envDeviceOnlines);
+        resultMap.put("currentValue",currentStatus);
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化时间
+        //上个月
+        //获取上个月的第一天
+        Calendar cal_1 = Calendar.getInstance();//获取当前日期
+        cal_1.add(Calendar.MONTH, -1);
+        cal_1.set(Calendar.DAY_OF_MONTH, 1);//设置为1号
+        cal_1.set(Calendar.HOUR_OF_DAY, 0);
+        cal_1.set(Calendar.MINUTE, 0);
+        cal_1.set(Calendar.SECOND, 0);
+        String firstDay = format.format(cal_1.getTime());
+        //获取上个月的最后一天
+        Calendar cal_2 = Calendar.getInstance();
+        cal_2.set(Calendar.DAY_OF_MONTH, 0);//设置为1号,当前日期既为本月第一天
+        cal_2.set(Calendar.HOUR_OF_DAY, 23);
+        cal_2.set(Calendar.MINUTE, 59);
+        cal_2.set(Calendar.SECOND, 59);
+        String lastDay = format.format(cal_2.getTime());
+        QueryWrapper<EnvDeviceOnline> wrapper = new QueryWrapper<>();
+        wrapper.eq("farm_id",farmId).between("creat_time",firstDay,lastDay);
+        BigDecimal lastStatus = envDeviceOnlineMapper.getStatus(wrapper);
+        if (ObjectUtil.isNull(lastStatus)){
+            resultMap.put("lastValue",0);
+            resultMap.put("gap",100);
+            return new Result(ResultCode.SUCCESS,resultMap);
+        }
+        resultMap.put("lastValue",lastStatus);
+        double gap = ((currentStatus.doubleValue() - lastStatus.doubleValue()) / lastStatus.doubleValue()) * 100;
+        if (ObjectUtil.isNull(gap)){
+            gap = 0.0;
+        }
+        BigDecimal bg = new BigDecimal(gap).setScale(2, RoundingMode.UP);
+        resultMap.put("gap",bg);
+        return new Result(ResultCode.SUCCESS,resultMap) ;
+    }
 }

+ 52 - 0
src/main/java/com/huimv/admin/timer/DeviceTimer.java

@@ -0,0 +1,52 @@
+package com.huimv.admin.timer;
+
+import cn.hutool.core.date.DateUnit;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.admin.common.utils.DataUill;
+import com.huimv.admin.entity.EnvDevice;
+import com.huimv.admin.entity.EnvDeviceOnline;
+import com.huimv.admin.entity.vo.EnvDeviceOnlineVo;
+import com.huimv.admin.service.IEnvDeviceOnlineService;
+import com.huimv.admin.service.IEnvDeviceService;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Configuration
+@EnableScheduling
+public class DeviceTimer {
+
+    @Resource
+    private IEnvDeviceService envDeviceService;
+    @Resource
+    private IEnvDeviceOnlineService envDeviceOnlineService;
+
+    @Scheduled(cron = "0 */5 * * * ?")
+//    @Scheduled(cron = "*/5 * * * * ?")
+    private void saveOnlineDevice(){
+        String farmId = "27";
+        double rate = 0.0;
+        Integer deviceOff = envDeviceService.count(new QueryWrapper<EnvDevice>().eq("farm_id", farmId).eq("device_status", 0));
+        Integer deviceOn = envDeviceService.count(new QueryWrapper<EnvDevice>().eq("farm_id", farmId).eq("device_status", 1));
+        Integer total = deviceOff+deviceOn;
+        LocalDateTime now = LocalDateTime.now();
+        try {
+            rate = deviceOn/total;
+        }catch (ArithmeticException e){
+            System.out.println(e);
+        }
+        EnvDeviceOnline envDeviceOnline = new EnvDeviceOnline();
+        envDeviceOnline.setDeviceOn(deviceOn);
+        envDeviceOnline.setDeviceOff(deviceOff);
+        envDeviceOnline.setOnlineRate(new BigDecimal(rate).setScale(2, RoundingMode.UP));
+        envDeviceOnline.setFarmId(farmId);
+        envDeviceOnline.setCreatTime(now);
+        envDeviceOnlineService.save(envDeviceOnline);
+    }
+}

+ 12 - 0
src/main/resources/mapper/EnvDeviceOnlineMapper.xml

@@ -17,4 +17,16 @@
         <result column="ohter3" property="ohter3" />
     </resultMap>
 
+    <select id="getDeviceStatus" resultType="com.huimv.admin.entity.vo.EnvDeviceOnlineVo">
+        select ROUND(avg (device_on),2) as deviceOn ,ROUND(avg (online_rate),2) as onlineRate,creat_time as creatTime  from `env_device_online`
+        ${ew.customSqlSegment}
+         GROUP BY DATE_FORMAT(creat_time,"%y-%m-%d")
+    </select>
+
+    <select id="getStatus" resultType="java.math.BigDecimal">
+        select ROUND(avg (online_rate),2) as onlineRate from `env_device_online`
+        ${ew.customSqlSegment}
+    </select>
+
+
 </mapper>