|
@@ -2,8 +2,9 @@ package com.ruoyi.biz.service.impl;
|
|
|
|
|
|
import com.ruoyi.biz.domain.TwinCalc2hr;
|
|
import com.ruoyi.biz.domain.TwinCalc2hr;
|
|
import com.ruoyi.biz.domain.TwinDevice;
|
|
import com.ruoyi.biz.domain.TwinDevice;
|
|
-import com.ruoyi.biz.service.IIotService;
|
|
|
|
|
|
+import com.ruoyi.biz.domain.TwinRecordAlarms;
|
|
import com.ruoyi.biz.service.ITaskService;
|
|
import com.ruoyi.biz.service.ITaskService;
|
|
|
|
+import com.ruoyi.biz.service.ITwinCalc2hrService;
|
|
import com.ruoyi.biz.service.ITwinDeviceService;
|
|
import com.ruoyi.biz.service.ITwinDeviceService;
|
|
import com.ruoyi.common.utils.Tools;
|
|
import com.ruoyi.common.utils.Tools;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -11,11 +12,14 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
-import java.math.BigDecimal;
|
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
+import java.time.LocalTime;
|
|
import java.time.ZoneOffset;
|
|
import java.time.ZoneOffset;
|
|
-import java.util.*;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
import java.util.concurrent.ExecutionException;
|
|
import java.util.concurrent.ExecutionException;
|
|
import java.util.concurrent.Future;
|
|
import java.util.concurrent.Future;
|
|
|
|
|
|
@@ -31,7 +35,7 @@ public class TaskServiceImpl implements ITaskService {
|
|
@Resource
|
|
@Resource
|
|
private ITwinDeviceService deviceService;
|
|
private ITwinDeviceService deviceService;
|
|
@Resource
|
|
@Resource
|
|
- private IIotService iotService;
|
|
|
|
|
|
+ private ITwinCalc2hrService calc2hrService;
|
|
@Resource
|
|
@Resource
|
|
private IotTokenServiceImpl iotTokenService;
|
|
private IotTokenServiceImpl iotTokenService;
|
|
@Resource
|
|
@Resource
|
|
@@ -40,51 +44,18 @@ public class TaskServiceImpl implements ITaskService {
|
|
private AsyncServiceImpl asyncService;
|
|
private AsyncServiceImpl asyncService;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 统计上一个偶数时间至当前的数据
|
|
|
|
|
|
+ * 统计上一个时段数据
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public void calcCurr() {
|
|
|
|
- LocalDateTime ldt = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
|
|
|
|
|
|
+ public void calcLastPeriod() {
|
|
|
|
+ LocalDateTime ldt = Tools.currWholeTime();
|
|
//当前时间之前的偶数时间段
|
|
//当前时间之前的偶数时间段
|
|
- ldt = ldt.minusHours(ldt.getHour() % 2);
|
|
|
|
|
|
+ ldt = ldt.minusHours(ldt.getHour() % 2).minusHours(2);
|
|
//开始时间需要向前取一秒
|
|
//开始时间需要向前取一秒
|
|
LocalDateTime start = ldt.minusSeconds(1);
|
|
LocalDateTime start = ldt.minusSeconds(1);
|
|
- //获取时段范围 时间 1=0-2点 2=2-4
|
|
|
|
- LocalDateTime end = LocalDateTime.now();
|
|
|
|
- Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
- Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
- deviceService.selectTwinDeviceList(new TwinDevice()).forEach(twinDevice -> {
|
|
|
|
- String table = twinDevice.getDevicePath();
|
|
|
|
- TwinCalc2hr calc2hr = new TwinCalc2hr();
|
|
|
|
- calc2hr.setDeviceId(twinDevice.getId());
|
|
|
|
- Map<String, Object> map = asyncService.calc(table, startTime, endTime);
|
|
|
|
- //0.已织造米数 1.A班组总开机时间 2.A班组总停机时间 3.A班总产量 4.B班组总开机时间 5.B班组总停机时间 6.B班总产量 7.A班总重量 8.B班总重量
|
|
|
|
- float[] total = (float[]) map.get("total");
|
|
|
|
- calc2hr.setLengthA(BigDecimal.valueOf(total[3]));
|
|
|
|
- calc2hr.setLengthB(BigDecimal.valueOf(total[6]));
|
|
|
|
- calc2hr.setWeightA(BigDecimal.valueOf(total[7]));
|
|
|
|
- calc2hr.setWeightB(BigDecimal.valueOf(total[8]));
|
|
|
|
- calc2hr.setOpenTimeA(BigDecimal.valueOf(total[1]));
|
|
|
|
- calc2hr.setOpenTimeB(BigDecimal.valueOf(total[4]));
|
|
|
|
- calc2hr.setCloseTimeA(BigDecimal.valueOf(total[2]));
|
|
|
|
- calc2hr.setCloseTimeB(BigDecimal.valueOf(total[5]));
|
|
|
|
|
|
+ LocalDateTime end = ldt.plusHours(2);
|
|
|
|
+ calc4device(start, end);
|
|
|
|
|
|
- Map<String, Long> stop = (Map<String, Long>) map.get("stop");
|
|
|
|
- calc2hr.setStop1A(stop.get("stop1_A"));
|
|
|
|
- calc2hr.setStop1B(stop.get("stop1_B"));
|
|
|
|
- calc2hr.setStop2A(stop.get("stop2_A"));
|
|
|
|
- calc2hr.setStop2B(stop.get("stop2_B"));
|
|
|
|
- calc2hr.setStop3A(stop.get("stop3_A"));
|
|
|
|
- calc2hr.setStop3B(stop.get("stop3_B"));
|
|
|
|
-
|
|
|
|
- int[] alarms = (int[]) map.get("alarms");
|
|
|
|
- int alarmsTimes = 0;
|
|
|
|
- for (int i = 0; i < alarms.length; i++) {
|
|
|
|
- alarmsTimes += alarms[i];
|
|
|
|
- }
|
|
|
|
- calc2hr.setAlarm((long) alarmsTimes);
|
|
|
|
- calc2hr.setRemark(Arrays.toString(alarms));
|
|
|
|
- });
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -97,6 +68,18 @@ public class TaskServiceImpl implements ITaskService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * 统计当日数据,直到当前时间的上一个偶数时间
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void calcToday() {
|
|
|
|
+ Tools.timePeriod().forEach(map -> {
|
|
|
|
+ LocalDateTime start = (LocalDateTime) map.get("start");
|
|
|
|
+ LocalDateTime end = (LocalDateTime) map.get("end");
|
|
|
|
+ calc4device(start, end);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 统计指定日期数据
|
|
* 统计指定日期数据
|
|
*
|
|
*
|
|
* @param date 指定日期 yyyy-mm-dd
|
|
* @param date 指定日期 yyyy-mm-dd
|
|
@@ -115,49 +98,58 @@ public class TaskServiceImpl implements ITaskService {
|
|
@Override
|
|
@Override
|
|
public void calc(LocalDate date) {
|
|
public void calc(LocalDate date) {
|
|
Tools.timePeriod(date).forEach(map -> {
|
|
Tools.timePeriod(date).forEach(map -> {
|
|
- long start = (long) map.get("start");
|
|
|
|
- long end = (long) map.get("end");
|
|
|
|
- String period = (String) map.get("period");
|
|
|
|
- Date d = Date.from(date.atStartOfDay(ZoneOffset.of("+8")).toInstant());
|
|
|
|
- calc4device(d, start, end, period);
|
|
|
|
|
|
+ LocalDateTime start = (LocalDateTime) map.get("start");
|
|
|
|
+ LocalDateTime end = (LocalDateTime) map.get("end");
|
|
|
|
+ calc4device(start, end);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 按设备循环计算
|
|
* 按设备循环计算
|
|
*
|
|
*
|
|
- * @param date 日期
|
|
|
|
- * @param startTime 开始时间戳
|
|
|
|
- * @param endTime 结束时间戳
|
|
|
|
- * @param period 时段
|
|
|
|
|
|
+ * @param start 开始时间戳
|
|
|
|
+ * @param end 结束时间戳
|
|
*/
|
|
*/
|
|
- private void calc4device(Date date, long startTime, long endTime, String period) {
|
|
|
|
|
|
+ private void calc4device(LocalDateTime start, LocalDateTime end) {
|
|
|
|
+ //开始时间都减了一秒的,这里要加回来,用于计算时段等数据
|
|
|
|
+ LocalDateTime ldt = start.plusSeconds(1);
|
|
|
|
+ Date date = Date.from(ldt.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
|
|
|
|
+ Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
+ Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
+ //获取时段范围 时间 1=0-2点 2=2-4
|
|
|
|
+
|
|
|
|
+ int period = ldt.getHour() / 2 + 1;
|
|
List<Object[]> calc2hrList = new ArrayList<>();
|
|
List<Object[]> calc2hrList = new ArrayList<>();
|
|
List<Object[]> recordAlarmsList = new ArrayList<>();
|
|
List<Object[]> recordAlarmsList = new ArrayList<>();
|
|
Date s = new Date();
|
|
Date s = new Date();
|
|
//为了避免多线程同时获取token导致重复执行,先执行一次获取token
|
|
//为了避免多线程同时获取token导致重复执行,先执行一次获取token
|
|
iotTokenService.getToken();
|
|
iotTokenService.getToken();
|
|
List<TwinDevice> list = deviceService.selectTwinDeviceList(new TwinDevice());
|
|
List<TwinDevice> list = deviceService.selectTwinDeviceList(new TwinDevice());
|
|
- List<Future<Map<String, List<Object[]>>>> futureList = new ArrayList<>();
|
|
|
|
|
|
+ List<Future<Map<String, List<?>>>> futureList = new ArrayList<>();
|
|
for (int i = 0; i < list.size(); i++) {
|
|
for (int i = 0; i < list.size(); i++) {
|
|
TwinDevice twinDevice = list.get(i);
|
|
TwinDevice twinDevice = list.get(i);
|
|
futureList.add(asyncService.process(twinDevice, date, startTime, endTime, period));
|
|
futureList.add(asyncService.process(twinDevice, date, startTime, endTime, period));
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
- for (Future<Map<String, List<Object[]>>> future : futureList) {
|
|
|
|
- Map<String, List<Object[]>> map = future.get();
|
|
|
|
- calc2hrList.addAll(map.get("calc"));
|
|
|
|
- recordAlarmsList.addAll(map.get("record"));
|
|
|
|
|
|
+ for (Future<Map<String, List<?>>> future : futureList) {
|
|
|
|
+ Map<String, List<?>> map = future.get();
|
|
|
|
+ List<TwinCalc2hr> calc2hrs = (List<TwinCalc2hr>) map.get("calc");
|
|
|
|
+ List<TwinRecordAlarms> recordAlarms = (List<TwinRecordAlarms>) map.get("record");
|
|
|
|
+ for (TwinCalc2hr calc2hr : calc2hrs) {
|
|
|
|
+ calc2hrList.add(calc2hr.toArray());
|
|
|
|
+ }
|
|
|
|
+ for (TwinRecordAlarms alarms : recordAlarms) {
|
|
|
|
+ recordAlarmsList.add(alarms.toArray());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
} catch (InterruptedException e) {
|
|
} catch (InterruptedException e) {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
} catch (ExecutionException e) {
|
|
} catch (ExecutionException e) {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
+
|
|
Date d = new Date();
|
|
Date d = new Date();
|
|
- System.err.println("总共消耗:");
|
|
|
|
- System.err.println(d.getTime() - s.getTime());
|
|
|
|
- System.err.println("ms");
|
|
|
|
|
|
+ log.info("总共消耗:{}ms", d.getTime() - s.getTime());
|
|
String sql = "INSERT INTO TWIN_CALC_2HR (DATA_DATE, TIME_PERIOD, DEVICE_ID, LENGTH_A, OPEN_TIME_A, CLOSE_TIME_A, LENGTH_B, CLOSE_TIME_B, OPEN_TIME_B, WEIGHT, WEIGHT_A, WEIGHT_B, ALARM, STOP1_A, STOP2_A, STOP3_A, STOP1_B, STOP2_B, STOP3_B,REMARK)" +
|
|
String sql = "INSERT INTO TWIN_CALC_2HR (DATA_DATE, TIME_PERIOD, DEVICE_ID, LENGTH_A, OPEN_TIME_A, CLOSE_TIME_A, LENGTH_B, CLOSE_TIME_B, OPEN_TIME_B, WEIGHT, WEIGHT_A, WEIGHT_B, ALARM, STOP1_A, STOP2_A, STOP3_A, STOP1_B, STOP2_B, STOP3_B,REMARK)" +
|
|
" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
jdbcTemplate.batchUpdate(sql, calc2hrList);
|
|
jdbcTemplate.batchUpdate(sql, calc2hrList);
|