|
@@ -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);
|
|
|
+ }
|
|
|
}
|