Newspaper 1 year ago
parent
commit
6079ef15da

+ 8 - 1
huimv-admin/src/main/java/com/huimv/guowei/admin/controller/EnvDeviceController.java

@@ -180,6 +180,13 @@ public class EnvDeviceController {
         return new Result(ResultCode.SUCCESS,resultMap);
     }
 
-
+    @PostMapping("/listAllDevice")
+    public Result listAllDevice(@RequestBody Map<String ,String> paramsMap){
+        String deviceType = paramsMap.get("deviceType");
+        String farmId = paramsMap.get("farmId");
+        return new Result(ResultCode.SUCCESS,envDeviceService.list(new QueryWrapper<EnvDevice>()
+                .eq(!StringUtils.isEmpty(deviceType),"device_type",deviceType)
+                .eq("farm_id",farmId).orderByDesc("id")));
+    }
 
 }

+ 6 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/controller/RawDataController.java

@@ -34,4 +34,10 @@ public class RawDataController {
         return rawDataService.listWeight(paramsMap);
     }
 
+    @PostMapping("/listWeightByDevicCode")
+    public Result listWeightByDevicCode(@RequestBody Map<String, String> paramsMap){
+        return rawDataService.listWeightByDevicCode(paramsMap);
+    }
+
+
 }

+ 1 - 1
huimv-admin/src/main/java/com/huimv/guowei/admin/entity/DeviceFarmConfig.java

@@ -1,5 +1,6 @@
 package com.huimv.guowei.admin.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -33,5 +34,4 @@ public class DeviceFarmConfig implements Serializable {
 
     private Integer farmId;
 
-
 }

+ 6 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/RawDataMapper.java

@@ -1,7 +1,12 @@
 package com.huimv.guowei.admin.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.guowei.admin.entity.RawData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.guowei.admin.entity.vo.RawDataVo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface RawDataMapper extends BaseMapper<RawData> {
 
+    Page<RawDataVo> page(Page<Object> objectPage,@Param(Constants.WRAPPER) QueryWrapper<RawData> wrapper);
 }

+ 2 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/service/IRawDataService.java

@@ -19,4 +19,6 @@ public interface IRawDataService extends IService<RawData> {
     Result listInfo(Map<String, String> paramsMap);
 
     Result listWeight(Map<String, String> paramsMap);
+
+    Result listWeightByDevicCode(Map<String, String> paramsMap);
 }

+ 118 - 7
huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/RawDataServiceImpl.java

@@ -1,6 +1,7 @@
 package com.huimv.guowei.admin.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -8,8 +9,15 @@ import com.baomidou.mybatisplus.extension.api.R;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.guowei.admin.common.utils.Result;
 import com.huimv.guowei.admin.common.utils.ResultCode;
+import com.huimv.guowei.admin.entity.DeviceFarmConfig;
+import com.huimv.guowei.admin.entity.EnvDevice;
 import com.huimv.guowei.admin.entity.Farm;
 import com.huimv.guowei.admin.entity.RawData;
+import com.huimv.guowei.admin.entity.vo.RawDataDetailVo;
+import com.huimv.guowei.admin.entity.vo.RawDataVo;
+import com.huimv.guowei.admin.entity.vo.RawDateListVo;
+import com.huimv.guowei.admin.mapper.DeviceFarmConfigMapper;
+import com.huimv.guowei.admin.mapper.EnvDeviceMapper;
 import com.huimv.guowei.admin.mapper.RawDataMapper;
 import com.huimv.guowei.admin.service.IRawDataService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -19,7 +27,11 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * <p>
@@ -31,6 +43,13 @@ import java.util.*;
  */
 @Service
 public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> implements IRawDataService {
+    @Autowired
+    private DeviceFarmConfigMapper deviceFarmConfigMapper;
+    @Autowired
+    private RawDataMapper rawDataMapper;
+
+    @Autowired
+    private EnvDeviceMapper envDeviceMapper;
     @Override
     public Result listInfo(Map<String, String> paramsMap) {
         String deviceCode = paramsMap.get("deviceCode");
@@ -41,26 +60,26 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
 
         QueryWrapper<RawData> wrapper = new QueryWrapper<>();
         if (StringUtils.isNotBlank(deviceCode)){
-            wrapper.eq("device_code",deviceCode);
+            wrapper.eq("r.device_code",deviceCode);
         }
         if (StringUtils.isNotBlank(startDate)){
             startDate += " 00:00:00";
-            wrapper.ge("create_time", startDate);
+            wrapper.ge("r.create_time", startDate);
         }
         if (StringUtils.isNotBlank(endDate)){
             endDate += " 23:59:59";
-            wrapper.le("create_time", endDate);
+            wrapper.le("r.create_time", endDate);
         }
-        wrapper.orderByDesc("id");
-        Page<RawData> page = this.page(new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize)), wrapper);
+        wrapper.orderByDesc("r.id");
+
+        Page<RawDataVo> page = rawDataMapper.page(new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize)), wrapper);
         return new Result(ResultCode.SUCCESS, page);
     }
 
     @Override
     public Result listWeight(Map<String, String> paramsMap) {
         String id = paramsMap.get("id");
-        String time = paramsMap.get("time");
-        Integer value = Integer.valueOf(time);
+        Integer value;
         String startDate = paramsMap.get("startDate");
         String endDate = paramsMap.get("endDate");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -69,6 +88,9 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
         if (StringUtils.isNotBlank(id)){
             rawData = this.getById(id);
         }
+        List<DeviceFarmConfig> deviceFarmConfigs = deviceFarmConfigMapper.selectList(new QueryWrapper<DeviceFarmConfig>().lambda().eq(DeviceFarmConfig::getFarmId, 21));
+        List<LocalTime> startTimes = deviceFarmConfigs.stream().map(config -> LocalTime.of(config.getStartHour(), 0, 0)).collect(Collectors.toList());
+        List<LocalTime> endTimes = deviceFarmConfigs.stream().map(config -> LocalTime.of(config.getEndHour(), 0, 0)).collect(Collectors.toList());
         if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
             String deviceCode = rawData.getDeviceCode();
             QueryWrapper<RawData> wrapper = new QueryWrapper<>();
@@ -78,11 +100,23 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
             wrapper.between("create_time",startDate,endDate);
             wrapper.orderByAsc("id");
             List<RawData> rawDataList = this.list(wrapper);
+            if (ObjectUtil.isEmpty(rawDataList)){
+                return new Result(10001,"该时间段内无数据",false);
+            }
             for (RawData data : rawDataList) {
                 String weightDate = data.getData();
                 Date endTime = data.getCreateTime();
                 String[] s = weightDate.split(" ");
+                if (s.length != 137){
+                    return new Result(10001,sdf.format(data.getCreateTime())+"该数据格式错误",false);
+                }
                 long timestamp = endTime.getTime() / 1000;
+
+                Instant instant = Instant.ofEpochSecond(timestamp);
+                LocalTime timeFromTimestamp = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();
+                boolean isInTimeRange = IntStream.range(0, startTimes.size())
+                        .anyMatch(i -> timeFromTimestamp.isAfter(startTimes.get(i)) && timeFromTimestamp.isBefore(endTimes.get(i)));
+                value = isInTimeRange ? 10 : 300;
                 for (int i = 0; i < 60; i++) {
                     long l = timestamp - ((60 - i) * value); // 修正此行
                     Date thenTime = new Date(l * 1000); // 将秒转换为毫秒
@@ -98,7 +132,15 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
             Date endTime = rawData.getCreateTime();
             String data = rawData.getData();
             String[] s = data.split(" ");
+            if (s.length != 137){
+                return new Result(10001,sdf.format(endTime)+"该数据格式错误",false);
+            }
             long timestamp = endTime.getTime() / 1000;
+            Instant instant = Instant.ofEpochSecond(timestamp);
+            LocalTime timeFromTimestamp = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();
+            boolean isInTimeRange = IntStream.range(0, startTimes.size())
+                    .anyMatch(i -> timeFromTimestamp.isAfter(startTimes.get(i)) && timeFromTimestamp.isBefore(endTimes.get(i)));
+            value = isInTimeRange ? 10 : 300;
             for (int i = 0; i < 60; i++) {
                 long l = timestamp - ((60 - i) * value); // 修正此行
                 Date thenTime = new Date(l * 1000); // 将秒转换为毫秒
@@ -112,4 +154,73 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
         }
         return new Result(ResultCode.SUCCESS,list);
     }
+
+    @Override
+    public Result listWeightByDevicCode(Map<String, String> paramsMap) {
+        LocalDate today = LocalDate.now();
+        LocalDateTime midnight = LocalDateTime.of(today, LocalTime.MIDNIGHT);
+        LocalDateTime maxTime = LocalDateTime.of(today, LocalTime.MAX);
+        String startDate = paramsMap.get("startDate");
+        String endDate = paramsMap.get("endDate");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
+            startDate += " 00:00:00";
+            endDate += " 23:59:59";
+        }else {
+            startDate = DateUtil.beginOfDay(new Date()).toString();
+            endDate =  DateUtil.endOfDay(new Date()).toString();
+        }
+        String deviceCodes = paramsMap.get("deviceCode");
+        String[] deviceCode = deviceCodes.split(",");
+        List<DeviceFarmConfig> deviceFarmConfigs = deviceFarmConfigMapper.selectList(new QueryWrapper<DeviceFarmConfig>().lambda().eq(DeviceFarmConfig::getFarmId, 21));
+        List<LocalTime> startTimes = deviceFarmConfigs.stream().map(config -> LocalTime.of(config.getStartHour(), 0, 0)).collect(Collectors.toList());
+        List<LocalTime> endTimes = deviceFarmConfigs.stream().map(config -> LocalTime.of(config.getEndHour(), 0, 0)).collect(Collectors.toList());
+        RawDateListVo result = new RawDateListVo();
+        List<RawDataDetailVo> rawDataDetailVos = new ArrayList<>();
+        for (String s : deviceCode) {
+            List list = new ArrayList();
+            EnvDevice envDevice = envDeviceMapper.selectOne(new QueryWrapper<EnvDevice>().lambda().eq(EnvDevice::getDeviceCode, s));
+            RawDataDetailVo rawDataDetailVo = new RawDataDetailVo();
+            rawDataDetailVo.setBuildLocation(envDevice.getBuildLocation());
+            rawDataDetailVo.setDeviceCode(s);
+            QueryWrapper<RawData> wrapper = new QueryWrapper<>();
+            wrapper.eq("device_code",s);
+            wrapper.between("create_time",startDate,endDate);
+            wrapper.orderByAsc("id");
+            List<RawData> rawDataList = this.list(wrapper);
+            if (ObjectUtil.isEmpty(rawDataList)){
+                return new Result(10001,"设备位置为"+envDevice.getBuildLocation()+"该时间段内无数据",false);
+            }
+            for (RawData data : rawDataList) {
+                String weightDate = data.getData();
+                Date endTime = data.getCreateTime();
+                String[] s1 = weightDate.split(" ");
+                if (s1.length != 137){
+                    return new Result(10001,"设备位置为"+envDevice.getBuildLocation()+sdf.format(data.getCreateTime())+"该数据格式错误",false);
+                }
+                long timestamp = endTime.getTime() / 1000;
+
+                Instant instant = Instant.ofEpochSecond(timestamp);
+                LocalTime timeFromTimestamp = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();
+                boolean isInTimeRange = IntStream.range(0, startTimes.size())
+                        .anyMatch(i -> timeFromTimestamp.isAfter(startTimes.get(i)) && timeFromTimestamp.isBefore(endTimes.get(i)));
+                Integer value = isInTimeRange ? 10 : 300;
+                for (int i = 0; i < 60; i++) {
+                    long l = timestamp - ((60 - i) * value); // 修正此行
+                    Date thenTime = new Date(l * 1000); // 将秒转换为毫秒
+                    String str1 = s1[i * 2 + 11] + s1[i * 2 + 10];
+                    BigDecimal weight = new BigDecimal(Integer.parseInt(str1, 16));
+                    Map weightMap = new HashMap();
+                    weightMap.put("time", sdf.format(thenTime));
+                    weightMap.put("weight",weight);
+                    list.add(weightMap);
+                }
+            }
+            rawDataDetailVo.setRawDataList(list);
+            rawDataDetailVos.add(rawDataDetailVo);
+        }
+        result.setList(rawDataDetailVos);
+        return new Result(ResultCode.SUCCESS,result);
+    }
 }

+ 11 - 0
huimv-admin/src/main/resources/mapper/RawDataMapper.xml

@@ -2,4 +2,15 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huimv.guowei.admin.mapper.RawDataMapper">
 
+    <select id="page" resultType="com.huimv.guowei.admin.entity.vo.RawDataVo">
+        SELECT
+            r.*,d.build_location
+        FROM
+            `raw_data` r
+        LEFT JOIN
+            `env_device` d
+        ON
+            r.device_code = d.device_code
+    ${ew.customSqlSegment}
+    </select>
 </mapper>