379 lines
22 KiB
Java
379 lines
22 KiB
Java
package com.zhgd.xmgl.task;
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.http.HttpRequest;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.zhgd.xmgl.modules.bigdevice.entity.TunnelBoringMachine;
|
|
import com.zhgd.xmgl.modules.bigdevice.entity.TunnelBoringMachineAlarm;
|
|
import com.zhgd.xmgl.modules.bigdevice.entity.TunnelBoringMachineCurrentData;
|
|
import com.zhgd.xmgl.modules.bigdevice.entity.TunnelBoringMachineStat;
|
|
import com.zhgd.xmgl.modules.bigdevice.mapper.TunnelBoringMachineAlarmMapper;
|
|
import com.zhgd.xmgl.modules.bigdevice.mapper.TunnelBoringMachineCurrentDataMapper;
|
|
import com.zhgd.xmgl.modules.bigdevice.mapper.TunnelBoringMachineMapper;
|
|
import com.zhgd.xmgl.modules.bigdevice.service.ITunnelBoringMachineStatService;
|
|
import com.zhgd.xmgl.modules.poisonous.entity.PoisonousGasDevAlarm;
|
|
import com.zhgd.xmgl.modules.poisonous.entity.PoisonousGasDevCurrentData;
|
|
import com.zhgd.xmgl.modules.poisonous.mapper.PoisonousGasDevAlarmMapper;
|
|
import com.zhgd.xmgl.modules.poisonous.mapper.PoisonousGasDevCurrentDataMapper;
|
|
import com.zhgd.xmgl.util.AsyncTaskUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
/**
|
|
* @program: wisdomSite
|
|
* @description: 盾构机 实时数据 每日环数
|
|
* @author: Mr.Peng
|
|
* @create: 2021-07-12 13:41
|
|
**/
|
|
@Slf4j
|
|
@Component
|
|
@RestController
|
|
@RequestMapping(("/xmgl/task"))
|
|
public class TunnelBoringMachineTask {
|
|
|
|
@Autowired
|
|
private TunnelBoringMachineMapper tunnelBoringMachineMapper;
|
|
|
|
@Autowired
|
|
private TunnelBoringMachineCurrentDataMapper tunnelBoringMachineCurrentDataMapper;
|
|
|
|
@Autowired
|
|
private ITunnelBoringMachineStatService tunnelBoringMachineStatService;
|
|
|
|
@Autowired
|
|
private PoisonousGasDevCurrentDataMapper poisonousGasDevCurrentDataMapper;
|
|
|
|
@Autowired
|
|
private TunnelBoringMachineAlarmMapper tunnelBoringMachineAlarmMapper;
|
|
|
|
@Autowired
|
|
private PoisonousGasDevAlarmMapper poisonousGasDevAlarmMapper;
|
|
|
|
@Scheduled(cron = "0 50 23 * * ?")
|
|
@RequestMapping("getTunnelBoringMachineStat")
|
|
public void getTunnelBoringMachineStat() {
|
|
log.info("获取盾构机今日环数开始任务");
|
|
// 获取设备列表
|
|
List<TunnelBoringMachine> devList = tunnelBoringMachineMapper.selectList(null);
|
|
List<TunnelBoringMachineStat> list = new ArrayList<>();
|
|
for (TunnelBoringMachine tunnelBoringMachine : devList) {
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("projectSn", tunnelBoringMachine.getProjectSn());
|
|
map.put("deviceSn", tunnelBoringMachine.getDevSn());
|
|
map.put("time", DateUtil.formatDate(new Date()));
|
|
TunnelBoringMachineCurrentData lastData = tunnelBoringMachineCurrentDataMapper.getLastData(map);
|
|
TunnelBoringMachineStat tunnelBoringMachineStat = new TunnelBoringMachineStat();
|
|
tunnelBoringMachineStat.setProjectSn(tunnelBoringMachine.getProjectSn());
|
|
tunnelBoringMachineStat.setDevSn(tunnelBoringMachine.getDevSn());
|
|
tunnelBoringMachineStat.setCreateTime(DateUtil.parseDate(DateUtil.formatDate(new Date())));
|
|
if (lastData != null && DateUtil.formatDate(lastData.getReportTime()).equals(DateUtil.formatDate(new Date()))) {
|
|
tunnelBoringMachineStat.setNumber(lastData.getDayNumber());
|
|
} else {
|
|
tunnelBoringMachineStat.setNumber(0);
|
|
}
|
|
list.add(tunnelBoringMachineStat);
|
|
}
|
|
tunnelBoringMachineStatService.saveBatch(list);
|
|
}
|
|
|
|
@Scheduled(cron = "0/30 * * * * ?")
|
|
@RequestMapping("getTunnelBoringMachineAlarm")
|
|
public void getTunnelBoringMachineAlarm() {
|
|
log.info("获取盾构机报警数据开始任务");
|
|
// 获取设备列表
|
|
List<TunnelBoringMachine> devList = tunnelBoringMachineMapper.selectList(null);
|
|
devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> {
|
|
doGetTunnelBoringMachineAlarm(dev);
|
|
})
|
|
);
|
|
}
|
|
|
|
private void doGetTunnelBoringMachineAlarm(TunnelBoringMachine tunnelBoringMachine) {
|
|
JSONObject body = new JSONObject();
|
|
body.put("secretKey", "Xvt875SvK8zz7F+3Lj0faInIyd800TK0wGXt5GcaL4JubaXuwmlLoMXKXj7M9A21FxNB12mqhGqZnzW8ZSZHxQ==");
|
|
body.put("tbmCode", tunnelBoringMachine.getDevSn());
|
|
body.put("name", "ysej");
|
|
String result = HttpRequest.post("https://trans.tbmcloud.com.cn/trans/alarm/ex/getCurrent")
|
|
.body(JSON.toJSONString(body))
|
|
.timeout(2000)
|
|
.execute()
|
|
.body();
|
|
List<String> list = Arrays.asList("螺机CH4", "螺机H2S", "螺机CO", "螺机CO2", "螺机NO2");
|
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
|
if (jsonObject != null && jsonObject.getInteger("code") == 200) {
|
|
JSONArray data = jsonObject.getJSONArray("data");
|
|
if (CollUtil.isNotEmpty(data)) {
|
|
for (int i = 0; i < data.size(); i++) {
|
|
JSONObject obj = data.getJSONObject(i);
|
|
String name = obj.getString("name");
|
|
if (list.contains(name)) {
|
|
PoisonousGasDevAlarm devAlarm = new PoisonousGasDevAlarm();
|
|
devAlarm.setMonitorObject(tunnelBoringMachine.getDevName());
|
|
devAlarm.setAlarmDetail(tunnelBoringMachine.getDevName() + name + ",当前值为" + obj.getDouble("aramValue"));
|
|
devAlarm.setDevSn(tunnelBoringMachine.getDevSn());
|
|
devAlarm.setAlarmTime(new Date(obj.getLong("timestamp")));
|
|
devAlarm.setProjectSn(tunnelBoringMachine.getProjectSn());
|
|
devAlarm.setGasVal(obj.getDouble("aramValue"));
|
|
devAlarm.setUnit(2);
|
|
String aramFlag = obj.getString("aramFlag");
|
|
if (aramFlag.equals("red ")) {
|
|
devAlarm.setAlarmType(7);
|
|
} else if (aramFlag.equals("yellow")) {
|
|
devAlarm.setAlarmType(8);
|
|
} else {
|
|
devAlarm.setAlarmType(9);
|
|
}
|
|
poisonousGasDevAlarmMapper.insert(devAlarm);
|
|
} else {
|
|
TunnelBoringMachineAlarm tunnelBoringMachineAlarm = new TunnelBoringMachineAlarm();
|
|
tunnelBoringMachineAlarm.setAlarmType(name);
|
|
tunnelBoringMachineAlarm.setDevSn(tunnelBoringMachine.getDevSn());
|
|
tunnelBoringMachineAlarm.setProjectSn(tunnelBoringMachine.getProjectSn());
|
|
tunnelBoringMachineAlarm.setType(obj.getString("aramFlag"));
|
|
// tunnelBoringMachineAlarm.setExceed(exceed - alarmValue);
|
|
tunnelBoringMachineAlarm.setAlarmValue(obj.getDouble("aramValue"));
|
|
tunnelBoringMachineAlarm.setLine(tunnelBoringMachine.getLine());
|
|
tunnelBoringMachineAlarm.setAlarmTime(new Date(obj.getLong("timestamp")));
|
|
TunnelBoringMachineAlarm exist = tunnelBoringMachineAlarmMapper.selectOne(Wrappers.<TunnelBoringMachineAlarm>lambdaQuery()
|
|
.eq(TunnelBoringMachineAlarm::getDevSn, tunnelBoringMachineAlarm.getDevSn())
|
|
.eq(TunnelBoringMachineAlarm::getAlarmTime, tunnelBoringMachineAlarm.getAlarmTime()));
|
|
// tunnelBoringMachineCurrentData.setWorkerStatus();
|
|
if (exist != null) {
|
|
return;
|
|
}
|
|
tunnelBoringMachineAlarmMapper.insert(tunnelBoringMachineAlarm);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Scheduled(cron = "0/20 * * * * ?")
|
|
@RequestMapping("getTunnelBoringMachineData")
|
|
public void getTunnelBoringMachineData() {
|
|
log.info("获取盾构机实时数据开始任务");
|
|
// 获取设备列表
|
|
List<TunnelBoringMachine> devList = tunnelBoringMachineMapper.selectList(null);
|
|
devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> {
|
|
doGetTunnelBoringMachineData(dev);
|
|
})
|
|
);
|
|
}
|
|
|
|
private void doGetTunnelBoringMachineData(TunnelBoringMachine tunnelBoringMachine) {
|
|
JSONObject body = new JSONObject();
|
|
body.put("secretKey", "Xvt875SvK8zz7F+3Lj0faInIyd800TK0wGXt5GcaL4JubaXuwmlLoMXKXj7M9A21FxNB12mqhGqZnzW8ZSZHxQ==");
|
|
body.put("tbmCode", tunnelBoringMachine.getDevSn());
|
|
body.put("name", "ysej");
|
|
String result = HttpRequest.post("https://trans.tbmcloud.com.cn/trans/transGetRealData/ex/getRealData")
|
|
.body(JSON.toJSONString(body))
|
|
.execute()
|
|
.body();
|
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
|
if (jsonObject != null && jsonObject.getInteger("code") == 200) {
|
|
TunnelBoringMachineCurrentData tunnelBoringMachineCurrentData = new TunnelBoringMachineCurrentData();
|
|
tunnelBoringMachineCurrentData.setDeviceSn(tunnelBoringMachine.getDevSn());
|
|
tunnelBoringMachineCurrentData.setProjectSn(tunnelBoringMachine.getProjectSn());
|
|
tunnelBoringMachineCurrentData.setLine(tunnelBoringMachine.getLine());
|
|
JSONArray values = jsonObject.getJSONObject("data").getJSONArray("values");
|
|
for (int i = 0; i < values.size(); i++) {
|
|
JSONObject obj = values.getJSONObject(i);
|
|
if (obj.getString("colName").equals("环号")) {
|
|
tunnelBoringMachineCurrentData.setCurrentNumber(obj.getInteger("val"));
|
|
tunnelBoringMachineCurrentData.setMileageCompleted(new BigDecimal(tunnelBoringMachineCurrentData.getCurrentNumber()).multiply(new BigDecimal(1.2)).setScale(0, BigDecimal.ROUND_HALF_UP).toString());
|
|
// tunnelBoringMachineCurrentData.setMileageCompleted(obj.getString("val"));
|
|
// tunnelBoringMachineCurrentData.setGroutingStatus();
|
|
// tunnelBoringMachineCurrentData.setCommunicationStatus();
|
|
// tunnelBoringMachineCurrentData.setHingeStatus();
|
|
}
|
|
if (obj.getString("colName").equals("正上土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setUpCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左中土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftCenterCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左上土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftUpCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左下土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftBelowCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右下土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setRightBelowCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右中土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setRightCenterCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右上土仓压力")) {
|
|
tunnelBoringMachineCurrentData.setRightUpCabinPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("前点偏差X")) {
|
|
tunnelBoringMachineCurrentData.setCutterheadHorizontalDeviation(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("前点偏差Y")) {
|
|
tunnelBoringMachineCurrentData.setCutterheadVerticalDeviation(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("后点偏差X")) {
|
|
tunnelBoringMachineCurrentData.setShieldHorizontalDeviation(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("后点偏差Y")) {
|
|
tunnelBoringMachineCurrentData.setShieldVerticalDeviation(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("贯入度")) {
|
|
tunnelBoringMachineCurrentData.setPenetration(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向俯仰角")) {
|
|
tunnelBoringMachineCurrentData.setPitchAngle(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向滚动角")) {
|
|
tunnelBoringMachineCurrentData.setRollPosition(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("刀盘转速")) {
|
|
tunnelBoringMachineCurrentData.setCutterheadSpeed(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("刀盘扭矩")) {
|
|
tunnelBoringMachineCurrentData.setCutterheadTorque(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("垂直偏差趋向")) {
|
|
tunnelBoringMachineCurrentData.setVerticalDeviation(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("水平偏差趋向")) {
|
|
tunnelBoringMachineCurrentData.setHorizontalDeviation(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("推进泵压力")) {
|
|
tunnelBoringMachineCurrentData.setTotalPropulsion(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("推进速度")) {
|
|
tunnelBoringMachineCurrentData.setAdvanceSpeed(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("总推进力")) {
|
|
tunnelBoringMachineCurrentData.setTotalThrust(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸A组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementA(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸B组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementB(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸C组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementC(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸D组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementD(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸E组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementE(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("导向推进油缸F组位移")) {
|
|
tunnelBoringMachineCurrentData.setCylinderDisplacementF(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("A组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureA(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("B组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureB(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("C组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureC(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("D组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureD(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("E组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureE(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("F组压力")) {
|
|
tunnelBoringMachineCurrentData.setCylinderPressureF(obj.getString("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左中注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftCenterGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左上注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftUpGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("左下注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setLeftBelowGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右下注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setRightBelowGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右中注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setRightCenterGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("右上注浆压力")) {
|
|
tunnelBoringMachineCurrentData.setRightUpGroutingPressure(obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("螺机O2")) {
|
|
savePoisonousGas(tunnelBoringMachine, 1, 2, obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("螺机CH4")) {
|
|
savePoisonousGas(tunnelBoringMachine, 2, 1, obj.getDouble("val"));
|
|
}
|
|
if (obj.getString("colName").equals("螺机CO")) {
|
|
savePoisonousGas(tunnelBoringMachine, 3, 0, obj.getDouble("val"));
|
|
}
|
|
// if (obj.getString("colName").equals("螺机CO2")) {
|
|
// poisonousGasDevCurrentData.setGasType(1);
|
|
// poisonousGasDevCurrentData.setGasVal(obj.getDouble("val"));
|
|
// poisonousGasDevCurrentData.setUnit(2);
|
|
// }
|
|
// if (obj.getString("colName").equals("螺机NO2")) {
|
|
// poisonousGasDevCurrentData.setGasType(1);
|
|
// poisonousGasDevCurrentData.setGasVal(obj.getDouble("val"));
|
|
// poisonousGasDevCurrentData.setUnit(2);
|
|
// }
|
|
}
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("projectSn", tunnelBoringMachine.getProjectSn());
|
|
map.put("deviceSn", tunnelBoringMachine.getDevSn());
|
|
map.put("time", DateUtil.formatDate(new Date()));
|
|
TunnelBoringMachineCurrentData firstData = tunnelBoringMachineCurrentDataMapper.getFirstData(map);
|
|
if (firstData == null) {
|
|
tunnelBoringMachineCurrentData.setDayNumber(0);
|
|
} else {
|
|
tunnelBoringMachineCurrentData.setDayNumber(tunnelBoringMachineCurrentData.getCurrentNumber() - firstData.getCurrentNumber());
|
|
}
|
|
map.put("time", DateUtil.format(DateUtil.beginOfMonth(new Date()), "yyyy-MM"));
|
|
TunnelBoringMachineCurrentData firstDataByMonth = tunnelBoringMachineCurrentDataMapper.getFirstDataByMonth(map);
|
|
if (firstDataByMonth == null) {
|
|
tunnelBoringMachineCurrentData.setMonthNumber(0);
|
|
} else {
|
|
tunnelBoringMachineCurrentData.setMonthNumber(tunnelBoringMachineCurrentData.getCurrentNumber() - firstDataByMonth.getCurrentNumber());
|
|
}
|
|
tunnelBoringMachineCurrentData.setReportTime(DateUtil.parseDateTime(jsonObject.getJSONObject("data").getString("time_str")));
|
|
tunnelBoringMachineCurrentData.setCreateTime(new Date());
|
|
TunnelBoringMachineCurrentData exist = tunnelBoringMachineCurrentDataMapper.selectOne(Wrappers.<TunnelBoringMachineCurrentData>lambdaQuery()
|
|
.eq(TunnelBoringMachineCurrentData::getDeviceSn, tunnelBoringMachineCurrentData.getDeviceSn())
|
|
.eq(TunnelBoringMachineCurrentData::getReportTime, tunnelBoringMachineCurrentData.getReportTime()));
|
|
// tunnelBoringMachineCurrentData.setWorkerStatus();
|
|
if (exist != null) {
|
|
return;
|
|
}
|
|
tunnelBoringMachineCurrentDataMapper.insert(tunnelBoringMachineCurrentData);
|
|
}
|
|
}
|
|
|
|
private void savePoisonousGas(TunnelBoringMachine tunnelBoringMachine, Integer gasType, Integer unit, double value) {
|
|
PoisonousGasDevCurrentData poisonousGasDevCurrentData = new PoisonousGasDevCurrentData();
|
|
poisonousGasDevCurrentData.setDevSn(tunnelBoringMachine.getDevSn());
|
|
poisonousGasDevCurrentData.setProjectSn(tunnelBoringMachine.getProjectSn());
|
|
poisonousGasDevCurrentData.setGasType(gasType);
|
|
poisonousGasDevCurrentData.setGasVal(value);
|
|
poisonousGasDevCurrentData.setUnit(unit);
|
|
poisonousGasDevCurrentData.setUploadTime(new Date());
|
|
poisonousGasDevCurrentDataMapper.insert(poisonousGasDevCurrentData);
|
|
}
|
|
}
|