wisdomisite-java/src/main/java/com/zhgd/xmgl/task/TunnelBoringMachineTask.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);
}
}