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 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 devList = tunnelBoringMachineMapper.selectList(null); List list = new ArrayList<>(); for (TunnelBoringMachine tunnelBoringMachine : devList) { Map 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 devList = tunnelBoringMachineMapper.selectList(null); devList.forEach(dev -> CompletableFuture.runAsync(() -> { doGetTunnelBoringMachineAlarm(dev); }).exceptionally(throwable -> { log.error("err", throwable); return null; }) ); } 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 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.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 devList = tunnelBoringMachineMapper.selectList(null); devList.forEach(dev -> CompletableFuture.runAsync(() -> { doGetTunnelBoringMachineData(dev); }).exceptionally(throwable -> { log.error("err", throwable); return null; }) ); } 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 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.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); } }