|
|
@@ -0,0 +1,272 @@
|
|
|
+package com.jjt.lean.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import com.jjt.common.utils.DateUtils;
|
|
|
+import com.jjt.lean.domain.LeanFan;
|
|
|
+import com.jjt.lean.mapper.LeanFanMapper;
|
|
|
+import com.jjt.lean.service.ILeanFanService;
|
|
|
+import com.jjt.utils.IotService;
|
|
|
+import com.jjt.utils.Tools;
|
|
|
+import org.apache.ibatis.session.ExecutorType;
|
|
|
+import org.apache.ibatis.session.SqlSession;
|
|
|
+import org.apache.ibatis.session.SqlSessionFactory;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 空气压力数据Service业务层处理
|
|
|
+ *
|
|
|
+ * @author wukai
|
|
|
+ * @date 2025-12-04
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class LeanFanServiceImpl implements ILeanFanService {
|
|
|
+ @Resource
|
|
|
+ private LeanFanMapper leanFanMapper;
|
|
|
+ @Resource
|
|
|
+ private SqlSessionFactory factory;
|
|
|
+ @Resource
|
|
|
+ private IotService iotService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询空气压力数据
|
|
|
+ *
|
|
|
+ * @param recordId 空气压力数据主键
|
|
|
+ * @return 空气压力数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public LeanFan selectLeanFanByRecordId(Long recordId) {
|
|
|
+ return leanFanMapper.selectLeanFanByRecordId(recordId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询空气压力数据列表
|
|
|
+ *
|
|
|
+ * @param leanFan 空气压力数据
|
|
|
+ * @return 空气压力数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<LeanFan> selectLeanFanList(LeanFan leanFan) {
|
|
|
+ return leanFanMapper.selectLeanFanList(leanFan);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增空气压力数据
|
|
|
+ *
|
|
|
+ * @param leanFan 空气压力数据
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int insertLeanFan(LeanFan leanFan) {
|
|
|
+ leanFan.setCreateTime(DateUtils.getNowDate());
|
|
|
+ return leanFanMapper.insertLeanFan(leanFan);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改空气压力数据
|
|
|
+ *
|
|
|
+ * @param leanFan 空气压力数据
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int updateLeanFan(LeanFan leanFan) {
|
|
|
+ leanFan.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ return leanFanMapper.updateLeanFan(leanFan);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量删除空气压力数据
|
|
|
+ *
|
|
|
+ * @param recordIds 需要删除的空气压力数据主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteLeanFanByRecordIds(Long[] recordIds) {
|
|
|
+ return leanFanMapper.deleteLeanFanByRecordIds(recordIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除空气压力数据信息
|
|
|
+ *
|
|
|
+ * @param recordId 空气压力数据主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteLeanFanByRecordId(Long recordId) {
|
|
|
+ return leanFanMapper.deleteLeanFanByRecordId(recordId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计指定日期指定时段数据
|
|
|
+ *
|
|
|
+ * @param date 指定日期 yyyy-mm-dd
|
|
|
+ * @param period 时段
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void calc(LocalDate date, int period) {
|
|
|
+ LocalDateTime ldt = LocalDateTime.of(date, LocalTime.MIN);
|
|
|
+ LocalDateTime start = ldt.plusHours(period);
|
|
|
+ LocalDateTime end = start.plusHours(1);
|
|
|
+ calc(start, end);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计上一时段数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void last() {
|
|
|
+ LocalDateTime ldt = Tools.currWholeTime();
|
|
|
+ //上一个小时
|
|
|
+ ldt = ldt.minusHours(1);
|
|
|
+ LocalDateTime start = ldt;
|
|
|
+ LocalDateTime end = ldt.plusHours(1);
|
|
|
+ calc(start, end);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按指定时间统计
|
|
|
+ *
|
|
|
+ * @param start 开始时间
|
|
|
+ * @param end 结束时间
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void calc(LocalDateTime start, LocalDateTime end) {
|
|
|
+ //先删除当前时段的统计数据
|
|
|
+ deleteLeanFan(DateUtils.toDate(start.toLocalDate()), start.getHour());
|
|
|
+ process(start, end);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除指定日期指定时段数据
|
|
|
+ *
|
|
|
+ * @param date 指定日期
|
|
|
+ * @param hour 时段
|
|
|
+ */
|
|
|
+ private void deleteLeanFan(Date date, int hour) {
|
|
|
+ leanFanMapper.deleteLeanFan(date, hour);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void process(LocalDateTime start, LocalDateTime end) {
|
|
|
+ List<String> paraFields = new ArrayList<>();
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_7) AS low_1_1");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_10) AS low_1_2");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_5) AS low_1_3");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_4) AS low_1_4");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_12) AS low_1_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwLowF2_totalControl.Capacity_data_15)) AS low_1_6");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_24) AS low_2_1");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_27) AS low_2_2");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_22) AS low_2_3");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_21) AS low_2_4");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_29) AS low_2_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwLowF2_totalControl.Capacity_data_32)) AS low_2_6");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_41) AS low_3_1");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_44) AS low_3_2");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_39) AS low_3_3");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_38) AS low_3_4");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_46) AS low_3_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwLowF2_totalControl.Capacity_data_49)) AS low_3_6");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_58) AS low_4_1");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_61) AS low_4_2");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_56) AS low_4_3");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_55) AS low_4_4");
|
|
|
+ paraFields.add("AVG(aircompressorwLowF2_totalControl.Capacity_data_63) AS low_4_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwLowF2_totalControl.Capacity_data_66)) AS low_4_6");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_21) AS mid_1_1");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_26) AS mid_1_2");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_46) AS mid_1_3");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_36) AS mid_1_4");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_41) AS mid_1_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwF3_totalControl.Capacity_data_86)) AS mid_1_6");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_22) AS mid_2_1");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_27) AS mid_2_2");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_47) AS mid_2_3");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_37) AS mid_2_4");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_42) AS mid_2_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwF3_totalControl.Capacity_data_87)) AS mid_2_6");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_23) AS mid_3_1");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_28) AS mid_3_2");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_48) AS mid_3_3");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_38) AS mid_3_4");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_43) AS mid_3_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwF3_totalControl.Capacity_data_88)) AS mid_3_6");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_24) AS mid_4_1");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_29) AS mid_4_2");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_49) AS mid_4_3");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_39) AS mid_4_4");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_44) AS mid_4_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwF3_totalControl.Capacity_data_89)) AS mid_4_6");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_25) AS mid_5_1");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_30) AS mid_5_2");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_50) AS mid_5_3");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_40) AS mid_5_4");
|
|
|
+ paraFields.add("AVG(aircompressorwF3_totalControl.Capacity_data_45) AS mid_5_5");
|
|
|
+ paraFields.add("SUM(DIFF(aircompressorwF3_totalControl.Capacity_data_90)) AS mid_5_6");
|
|
|
+ String sql = "select %s from root.tl.suxi where time>=%s and time <=%s";
|
|
|
+ sql = String.format(sql, String.join(",", paraFields), DateUtils.parseIso(start), DateUtils.parseIso(end));
|
|
|
+ iotService.query(sql);
|
|
|
+ JSONObject jsonObject = iotService.query(sql);
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ JSONArray values = data.getJSONArray("values");
|
|
|
+ JSONArray columnNames = data.getJSONArray("columnNames");
|
|
|
+ JSONArray timestamps = data.getJSONArray("timestamps");
|
|
|
+ if (values.size() > 0) {
|
|
|
+ Map<String, LeanFan> map = new HashMap<>();
|
|
|
+ JSONArray da = values.getJSONArray(0);
|
|
|
+ for (int i = 0; i < da.size(); i++) {
|
|
|
+ String field = columnNames.getStr(i);
|
|
|
+ String[] tmp = field.split("_");
|
|
|
+ String key = tmp[0] + "_" + tmp[1];
|
|
|
+ LeanFan fan = map.get(key);
|
|
|
+ if (fan == null) {
|
|
|
+ fan = new LeanFan();
|
|
|
+ fan.setType(tmp[0]);
|
|
|
+ fan.setDataDate(DateUtils.toDate(start.toLocalDate()));
|
|
|
+ fan.setHour(start.getHour());
|
|
|
+ fan.setFanId(Integer.parseInt(tmp[1]));
|
|
|
+ map.put(key, fan);
|
|
|
+ }
|
|
|
+ switch (tmp[2]) {
|
|
|
+ case "1":
|
|
|
+ fan.setPress(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ fan.setTemp(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ case "3":
|
|
|
+ fan.setPower(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ fan.setAmp(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ fan.setVoltage(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ fan.setEnergy(da.getBigDecimal(i));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<LeanFan> list = new ArrayList<>(map.values());
|
|
|
+
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+ if (list.size() > 0) {
|
|
|
+ LeanFanMapper mapper = sqlSession.getMapper(LeanFanMapper.class);
|
|
|
+ list.forEach(mapper::insertLeanFan);
|
|
|
+ sqlSession.commit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|