|
@@ -10,6 +10,7 @@ import com.jjt.common.utils.DateUtils;
|
|
|
import com.jjt.utils.AsyncYhjService;
|
|
|
import com.jjt.utils.IotService;
|
|
|
import com.jjt.utils.Tools;
|
|
|
+import javafx.util.Pair;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.ibatis.session.ExecutorType;
|
|
|
import org.apache.ibatis.session.SqlSession;
|
|
@@ -20,13 +21,12 @@ import javax.annotation.Resource;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.concurrent.Future;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.TimeoutException;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 印花机1小时统计数据Service业务层处理
|
|
@@ -146,6 +146,43 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 获取当前数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void curr() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计当日数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<Long, Integer> today() {
|
|
|
+ //计算统计时间
|
|
|
+ Pair<Date, Date> pair = Tools.calcToday();
|
|
|
+ Date sTime = pair.getKey();
|
|
|
+ Date eTime = pair.getValue();
|
|
|
+ TwinCalcHourYhj search = new TwinCalcHourYhj();
|
|
|
+ Map<String, Object> params = new HashMap<>(16);
|
|
|
+ params.put("sTime", sTime);
|
|
|
+ params.put("eTime", eTime);
|
|
|
+ search.setParams(params);
|
|
|
+ List<TwinCalcHourYhj> hourList = selectTwinCalcHourYhjList(search);
|
|
|
+ TwinCalcHourYhj lastRecord = lastRecord();
|
|
|
+ LocalDate localDate = DateUtils.toLocalDate(lastRecord.getDataDate());
|
|
|
+ LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(lastRecord.getHour() + 1);
|
|
|
+ List<TwinCalcHourYhj> calcList = process(start, LocalDateTime.now());
|
|
|
+ hourList.addAll(calcList);
|
|
|
+ Map<Long, Integer> sumByDevice = calcList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ TwinCalcHourYhj::getDeviceId,
|
|
|
+ Collectors.summingInt(TwinCalcHourYhj::getLength)
|
|
|
+ ));
|
|
|
+
|
|
|
+ return sumByDevice;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 按指定时间统计
|
|
|
*
|
|
|
* @param start 开始时间
|
|
@@ -155,6 +192,19 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
|
|
|
public void calc(LocalDateTime start, LocalDateTime end) {
|
|
|
//先删除当前时段的统计数据
|
|
|
deleteTwinCalcHourYhj(DateUtils.toDate(start.toLocalDate()), start.getHour());
|
|
|
+
|
|
|
+ List<TwinCalcHourYhj> calcList = process(start, end);
|
|
|
+
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+ if (calcList.size() > 0) {
|
|
|
+ TwinCalcHourYhjMapper mapper = sqlSession.getMapper(TwinCalcHourYhjMapper.class);
|
|
|
+ calcList.forEach(mapper::insertTwinCalcHourYhj);
|
|
|
+ sqlSession.commit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<TwinCalcHourYhj> process(LocalDateTime start, LocalDateTime end) {
|
|
|
List<TwinDeviceYhj> list = yhjService.selectTwinDeviceYhjList(new TwinDeviceYhj());
|
|
|
List<Future<TwinCalcHourYhj>> futureList = new ArrayList<>();
|
|
|
List<TwinCalcHourYhj> calcList = new ArrayList<>();
|
|
@@ -175,14 +225,7 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
|
|
|
} catch (InterruptedException | ExecutionException e) {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
-
|
|
|
- try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
- if (calcList.size() > 0) {
|
|
|
- TwinCalcHourYhjMapper mapper = sqlSession.getMapper(TwinCalcHourYhjMapper.class);
|
|
|
- calcList.forEach(mapper::insertTwinCalcHourYhj);
|
|
|
- sqlSession.commit();
|
|
|
- }
|
|
|
- }
|
|
|
+ return calcList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -228,53 +271,4 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
|
|
|
public void deleteTwinCalcHourYhj(Date date, int hour) {
|
|
|
twinCalcHourYhjMapper.deleteTwinCalcHourYhj(date, hour);
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 初始值,如果当前值不为空,并且原来值为空
|
|
|
- */
|
|
|
- void cloneArrayFirst(Integer[] arr, Integer[] target) {
|
|
|
- for (int i = 0; i < arr.length; i++) {
|
|
|
- if (arr[i] != null && target[i] == null) {
|
|
|
- target[i] = arr[i];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 复制数组,如果当前值不为空
|
|
|
- */
|
|
|
- void cloneArray(Integer[] arr, Integer[] target) {
|
|
|
- for (int i = 0; i < arr.length; i++) {
|
|
|
- if (arr[i] != null) {
|
|
|
- target[i] = arr[i];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 组合入库数据
|
|
|
- */
|
|
|
- void combo(List<TwinCalcHourYhj> calcList, LocalDateTime start, TwinDeviceYhj yhj, Integer distance, Integer length) {
|
|
|
- if (distance != null && length != null) {
|
|
|
- TwinCalcHourYhj calc = new TwinCalcHourYhj();
|
|
|
- calc.setDeviceId(yhj.getDeviceId());
|
|
|
- calc.setDataDate(DateUtils.toDate(start.toLocalDate()));
|
|
|
- calc.setHour(start.getHour());
|
|
|
- calc.setDistance(distance);
|
|
|
- calc.setLength(length);
|
|
|
- calcList.add(calc);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 计算米长
|
|
|
- */
|
|
|
- void calcLength(int j, Integer[] last, Integer[] first, Integer[] total) {
|
|
|
- if (last[j] != null && first[j] != null) {
|
|
|
- if (total[j] == null) {
|
|
|
- total[j] = 0;
|
|
|
- }
|
|
|
- total[j] += (last[j] - first[j]);
|
|
|
- }
|
|
|
- }
|
|
|
}
|