|
|
@@ -1,5 +1,7 @@
|
|
|
package com.jjt.calc.service.impl;
|
|
|
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
import com.jjt.biz.domain.TwinDevice;
|
|
|
import com.jjt.biz.service.ITwinDeviceService;
|
|
|
import com.jjt.calc.domain.TwinCalcAlarms;
|
|
|
@@ -13,6 +15,7 @@ import com.jjt.calc.service.ITwinCalcHourService;
|
|
|
import com.jjt.calc.service.ITwinCalcStopService;
|
|
|
import com.jjt.common.utils.DateUtils;
|
|
|
import com.jjt.utils.AsyncService;
|
|
|
+import com.jjt.utils.IotService;
|
|
|
import com.jjt.utils.Tools;
|
|
|
import javafx.util.Pair;
|
|
|
import org.apache.ibatis.session.ExecutorType;
|
|
|
@@ -56,6 +59,8 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
|
|
|
private AsyncService asyncService;
|
|
|
@Resource
|
|
|
private SqlSessionFactory factory;
|
|
|
+ @Resource
|
|
|
+ private IotService iotService;
|
|
|
|
|
|
/**
|
|
|
* 查询日统计数据
|
|
|
@@ -361,4 +366,73 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
|
|
|
public List<TwinCalcDay> selectTwinCalcDayListByTime(Date sd, Date ed) {
|
|
|
return twinCalcDayMapper.selectTwinCalcDayListByTime(sd, ed);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算上一个小时至现在的产量
|
|
|
+ *
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TwinCalcDay calcLength() {
|
|
|
+ //计算统计时间
|
|
|
+ Pair<Date, Date> pair = Tools.calcToday();
|
|
|
+ Date sTime = pair.getKey();
|
|
|
+ Date eTime = pair.getValue();
|
|
|
+ List<TwinCalcHour> hourList = hourService.selectTwinCalcHourListByDate(sTime, eTime);
|
|
|
+
|
|
|
+ // 按照deviceId、density、mick、team,并统计每组的length总和
|
|
|
+ //按照deviceId分组统计
|
|
|
+ Map<Long, BigDecimal> resultMap = hourList.stream().collect(Collectors.groupingBy(TwinCalcHour::getDeviceId, Collectors.reducing(BigDecimal.ZERO, TwinCalcHour::getLength, BigDecimal::add)));
|
|
|
+ TwinCalcDay calcDay = new TwinCalcDay(sTime);
|
|
|
+ if (hourList.size() > 0) {
|
|
|
+ calcDay.calcHours(hourList);
|
|
|
+ }
|
|
|
+ List<TwinCalcHour> hours = new ArrayList<>();
|
|
|
+ TwinCalcHour lastHour = hourService.lastHour();
|
|
|
+ LocalDate localDate = DateUtils.toLocalDate(lastHour.getDataDate());
|
|
|
+ LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(lastHour.getHour() + 1);
|
|
|
+
|
|
|
+ //为了避免多线程同时获取token导致重复执行,先执行一次获取token
|
|
|
+ TwinDevice search = new TwinDevice();
|
|
|
+ //查询所有在线的设备
|
|
|
+ search.setOnline("1");
|
|
|
+ List<TwinDevice> list = deviceService.selectTwinDeviceList(search);
|
|
|
+ List<String> fields = new ArrayList<>();
|
|
|
+ String fieldStr = "SUM(CASE WHEN DIFF(%s.Capacity_data_2)>0 THEN DIFF(%s.Capacity_data_2) ELSE 0 END) as %s";
|
|
|
+ list.forEach(device -> {
|
|
|
+ String code = device.getDevicePath().replace("root.tl.suxi.", "");
|
|
|
+ String field = String.format(fieldStr, code, code, "length_" + device.getDeviceId());
|
|
|
+ fields.add(field);
|
|
|
+ });
|
|
|
+ String sql = "select %s from root.tl.suxi where time>%s and time <=%s";
|
|
|
+ sql = String.format(sql, String.join(",", fields), DateUtils.parseIso(start), DateUtils.parseIso(LocalDateTime.now()));
|
|
|
+ iotService.query(sql);
|
|
|
+ JSONObject jsonObject = iotService.query(sql);
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ JSONArray values = data.getJSONArray("values");
|
|
|
+ double totalV = 0d;
|
|
|
+ if (values.size() > 0) {
|
|
|
+ for (int j = 0; j < values.size(); j++) {
|
|
|
+ JSONArray da = values.getJSONArray(j);
|
|
|
+ for (int i = 0; i < da.size(); i++) {
|
|
|
+ double v = da.getDouble(i);
|
|
|
+ if (v > 0d) {
|
|
|
+ totalV += v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BigDecimal length = calcDay.getLength().add(BigDecimal.valueOf(totalV));
|
|
|
+ calcDay.setLength(length);
|
|
|
+ if (start.getHour() >= 7 && start.getHour() < 19) {
|
|
|
+ //A班
|
|
|
+ BigDecimal lengthA = calcDay.getLengthA().add(BigDecimal.valueOf(totalV));
|
|
|
+ calcDay.setLengthA(lengthA);
|
|
|
+ } else {
|
|
|
+ //B班
|
|
|
+ BigDecimal lengthB = calcDay.getLengthB().add(BigDecimal.valueOf(totalV));
|
|
|
+ calcDay.setLengthB(lengthB);
|
|
|
+ }
|
|
|
+ return calcDay;
|
|
|
+ }
|
|
|
}
|