|
@@ -21,7 +21,6 @@ import com.sckj.opc.dto.L2Data;
|
|
|
import com.sckj.opc.dto.L2Material;
|
|
|
import com.sckj.opc.entity.OPCData;
|
|
|
import com.sckj.opc.opcua.L2DataServiceImpl;
|
|
|
-import com.sckj.opc.opcua.OPCDAServiceImpl;
|
|
|
import com.sckj.opc.service.OPCDataServiceImpl;
|
|
|
import com.sckj.opc.utils.CustomUtil;
|
|
|
import com.sckj.warn.service.ITExceptionLogService;
|
|
@@ -40,6 +39,8 @@ import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -88,9 +89,6 @@ public class DeviceEventListener extends EventListener {
|
|
|
@Resource
|
|
|
ITExceptionLogService iTExceptionLogService;
|
|
|
|
|
|
- @Resource
|
|
|
- OPCDAServiceImpl opcdaService;
|
|
|
-
|
|
|
//1号出铁状态标记
|
|
|
private static final String TAG_TAPHOLE1_STATUS = "AOD25606.PV";
|
|
|
//2号出铁状态标记
|
|
@@ -111,10 +109,10 @@ public class DeviceEventListener extends EventListener {
|
|
|
private static final String TAG_IRON_WEIGHT12 = "WI5402.PV";
|
|
|
|
|
|
//预判和确认出铁
|
|
|
- private static final String ypqrct = "lnct";
|
|
|
+ private static final String STEP_YPQRCT = "lnct";
|
|
|
|
|
|
//铁量差计算
|
|
|
- private static final String tlc = "tlc";
|
|
|
+ private static final String STEP_TLC = "tlc";
|
|
|
|
|
|
//铁水成分
|
|
|
public static final String IRON_ELEMENT = "ironElement";
|
|
@@ -137,14 +135,6 @@ public class DeviceEventListener extends EventListener {
|
|
|
private static final String MOUTH_STATUS = "bdlz";
|
|
|
//冲渣状态
|
|
|
private static final String FLUSH_STATUS = "AOD25607.PV";
|
|
|
- //预计出铁结束时间
|
|
|
- private static final String PLAN_END_TIME = "planEndTime";
|
|
|
-
|
|
|
- //实时数据
|
|
|
- Map<String, Object> mRealtimeData = new ConcurrentHashMap<>();
|
|
|
-
|
|
|
- //实时状态
|
|
|
- Map<String, Object> mRealtimeStatus = new ConcurrentHashMap<>();
|
|
|
|
|
|
// 1.创建表达式解析器
|
|
|
private SpelExpressionParser parser = new SpelExpressionParser();
|
|
@@ -152,51 +142,72 @@ public class DeviceEventListener extends EventListener {
|
|
|
// 2.创建变量上下文,设置变量
|
|
|
private StandardEvaluationContext mContext = new StandardEvaluationContext();
|
|
|
|
|
|
+ //定时器
|
|
|
+ @Resource
|
|
|
+ private ScheduledTaskManager scheduledTaskManager;
|
|
|
+
|
|
|
+ //多任务
|
|
|
+ @Resource(name = "taskExecutor")
|
|
|
+ ThreadPoolTaskExecutor taskExecutor;
|
|
|
+
|
|
|
+ //开口预警
|
|
|
+ public static final String TASKNAME_OPEN_WARN = "open_warn";
|
|
|
+ //堵口预警,出铁xxx分钟开始
|
|
|
+ public static final String TASKNAME_CLOSE_WARN = "close_warn";
|
|
|
+ //出铁预警
|
|
|
+ public static final String TASKNAME_TAPPING_WARN = "tapping_warn";
|
|
|
+ //出铁诊断,出铁结束后xxx分钟开始
|
|
|
+ private static final String TASKNAME_TAPPING_TEST = "tapping_test";
|
|
|
+ //打泥量预计
|
|
|
+ private static final String TASKNAME_HIT_MUD = "hit_mud";
|
|
|
+ //出铁计时
|
|
|
+ private static final String TASKNAME_TAPPING_CONSTTIME = "tapping_consttime";
|
|
|
+
|
|
|
+ //铁口出铁状态
|
|
|
+ //1 出铁中 0 出铁结束
|
|
|
+ private AtomicBoolean ironLoading1 = new AtomicBoolean(false);
|
|
|
+ //
|
|
|
+ private AtomicBoolean ironLoading2 = new AtomicBoolean(false);
|
|
|
+ //
|
|
|
+ private AtomicBoolean ironLoading3 = new AtomicBoolean(false);
|
|
|
+ //
|
|
|
+ private AtomicBoolean ironLoading4 = new AtomicBoolean(false);
|
|
|
+
|
|
|
//出铁步骤
|
|
|
private List<IronStepVO> mSteps;
|
|
|
|
|
|
//出铁参数
|
|
|
private Map<String, TIronParam> mIronParamMap;
|
|
|
|
|
|
+ //节点标记
|
|
|
private static final String NODE = "node";
|
|
|
|
|
|
- //定时器
|
|
|
- @Resource
|
|
|
- private ScheduledTaskManager scheduledTaskManager;
|
|
|
-
|
|
|
- //开口预警
|
|
|
- private static final String TASKNAME_OPEN_WARN = "TASKNAME_OPEN_WARN";
|
|
|
- //堵口预警
|
|
|
- private static final String TASKNAME_CLOSE_WARN = "TASKNAME_CLOSE_WARN";
|
|
|
- //出铁预警
|
|
|
- private static final String TASKNAME_IRON_WARN = "TASKNAME_IRON_WARN";
|
|
|
- //出铁诊断
|
|
|
- private static final String TASKNAME_IRON_TEST = "TASKNAME_IRON_TEST";
|
|
|
+ //实时数据
|
|
|
+ Map<String, Object> mRealtimeData = new ConcurrentHashMap<>();
|
|
|
|
|
|
- //打泥量预计
|
|
|
- private static final String TASKNAME_MUD = "TASKNAME_DRY";
|
|
|
+ //实时状态
|
|
|
+ Map<String, Object> mRealtimeStatus = new ConcurrentHashMap<>();
|
|
|
|
|
|
- //是否出铁中
|
|
|
- //1 出铁中 0 出铁结束
|
|
|
- private boolean ironLoading1 = false;
|
|
|
- private boolean ironLoading2 = false;
|
|
|
- private boolean ironLoading3 = false;
|
|
|
- private boolean ironLoading4 = false;
|
|
|
|
|
|
//最近任一铁口出铁结束时间
|
|
|
private Date mIronEndTimeRecently;
|
|
|
|
|
|
- @Resource(name = "taskExecutor")
|
|
|
- ThreadPoolTaskExecutor taskExecutor;
|
|
|
+ private BigDecimal speed1 = BigDecimal.ZERO;
|
|
|
|
|
|
- private float speed1, speed2;
|
|
|
+ private BigDecimal speed2 = BigDecimal.ZERO;
|
|
|
|
|
|
//标准流速
|
|
|
- private float STANDARD_SPEED;
|
|
|
- //开口耗时
|
|
|
- private int OPEND_HOUR;
|
|
|
- private int PRESSURE_DIFF_VALUE;
|
|
|
+ private BigDecimal STANDARD_SPEED;
|
|
|
|
|
|
+ //压差阈值
|
|
|
+ private BigDecimal PRESSURE_DIFF_VALUE;
|
|
|
+
|
|
|
+ //实时出铁总重量/总流量
|
|
|
+ private BigDecimal mTotalWeight = BigDecimal.ZERO;
|
|
|
+ //总干量
|
|
|
+ private BigDecimal mTotalDry = BigDecimal.ZERO;
|
|
|
+ //耗时(单位:s)
|
|
|
+ private AtomicInteger mSecondsElapsed = new AtomicInteger(0);
|
|
|
|
|
|
//redis保存最多数量数据
|
|
|
private static final int MAX_REDIS_COUNT = 50;
|
|
@@ -215,9 +226,8 @@ public class DeviceEventListener extends EventListener {
|
|
|
if (ObjectUtils.isNotEmpty(mIronParams)) {
|
|
|
mIronParamMap = mIronParams.stream()
|
|
|
.collect(Collectors.toMap(TIronParam::getParamName, ironParam -> ironParam, (existing, replacement) -> existing));
|
|
|
- STANDARD_SPEED = Float.parseFloat(mIronParamMap.get("iron_speed").getParamValue());
|
|
|
- OPEND_HOUR = Integer.parseInt(mIronParamMap.get("open_hours").getParamValue());
|
|
|
- PRESSURE_DIFF_VALUE = Integer.parseInt(mIronParamMap.get("pressure_diff_value").getParamValue());
|
|
|
+ STANDARD_SPEED = new BigDecimal(mIronParamMap.get("iron_speed").getParamValue());
|
|
|
+ PRESSURE_DIFF_VALUE = new BigDecimal(mIronParamMap.get("pressure_diff_value").getParamValue());
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -271,7 +281,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
if (NODE.equalsIgnoreCase(stepDTO.getNodeType())) {
|
|
|
//处理子项
|
|
|
for (IronStepVO child : stepDTO.getChilds()) {
|
|
|
- if (tlc.equals(child.getIdentifier())) {
|
|
|
+ if (STEP_TLC.equals(child.getIdentifier())) {
|
|
|
List<TL2Data> latest2Data = tl2DataService.getLatest2Data();
|
|
|
if (latest2Data.size() >= 2) {
|
|
|
HashMap[] hashMaps = new HashMap[6];
|
|
@@ -321,7 +331,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
}
|
|
|
}
|
|
|
setStepResult(mSteps);
|
|
|
- PushData.send2Operation(mSteps, ironLoading1);
|
|
|
+ PushData.send2Operation(mSteps, ironLoading1.get());
|
|
|
});
|
|
|
|
|
|
}
|
|
@@ -337,14 +347,14 @@ public class DeviceEventListener extends EventListener {
|
|
|
tl2MaterialService.saveOrUpdate(tl2Material);
|
|
|
});
|
|
|
|
|
|
- if (ironLoading1) {
|
|
|
+ if (ironLoading1.get()) {
|
|
|
BigDecimal bigDecimalNew = new BigDecimal(l2Material.getDryWeight());
|
|
|
- totalDry = totalDry.add(bigDecimalNew);
|
|
|
+ mTotalDry = mTotalDry.add(bigDecimalNew);
|
|
|
} else {
|
|
|
- totalDry = BigDecimal.ZERO;
|
|
|
+ mTotalDry = BigDecimal.ZERO;
|
|
|
}
|
|
|
|
|
|
- RedisUtils.addFixedElement(IRON_TOTAL_DRY, totalDry, MAX_REDIS_COUNT);
|
|
|
+ RedisUtils.addFixedElement(IRON_TOTAL_DRY, mTotalDry, MAX_REDIS_COUNT);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -354,33 +364,29 @@ public class DeviceEventListener extends EventListener {
|
|
|
boolean isReady = false;
|
|
|
|
|
|
for (IronStepVO stepDTO : mSteps) {
|
|
|
- if (ypqrct.equalsIgnoreCase(stepDTO.getIdentifier()) && 1 == stepDTO.getPassResult()) {
|
|
|
+ if (STEP_YPQRCT.equalsIgnoreCase(stepDTO.getIdentifier()) && 1 == stepDTO.getPassResult()) {
|
|
|
isReady = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//炉前在接受到炉内出铁要求后,10分钟内打开铁口,未打开系统告警并记录
|
|
|
- if (isReady) {
|
|
|
- scheduledTaskManager.addTask(TASKNAME_OPEN_WARN, 0, OPEND_HOUR, TimeUnit.MINUTES, () -> {
|
|
|
- log.info("堵口预警:{}", TASKNAME_OPEN_WARN);
|
|
|
-
|
|
|
- System.out.println("倒计时结束!10分钟已到。");
|
|
|
- // 出铁预警,打开系统告警并记录
|
|
|
- PushData.send2Warn("请立即打开铁口");
|
|
|
- log.info("准备出铁但是未及时出铁口,此处数据库记录");
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_OPEN_WARN); // 终止定时器
|
|
|
- });
|
|
|
- }
|
|
|
+// if (isReady) {
|
|
|
+// scheduledTaskManager.addTask(TASKNAME_OPEN_WARN, 0, OPEND_HOUR, TimeUnit.MINUTES, () -> {
|
|
|
+// log.info("堵口预警:{}", TASKNAME_OPEN_WARN);
|
|
|
+//
|
|
|
+// System.out.println("倒计时结束!10分钟已到。");
|
|
|
+// // 出铁预警,打开系统告警并记录
|
|
|
+// PushData.send2Warn("请立即打开铁口");
|
|
|
+// log.info("准备出铁但是未及时出铁口,此处数据库记录");
|
|
|
+// scheduledTaskManager.cancelTask(TASKNAME_OPEN_WARN); // 终止定时器
|
|
|
+// });
|
|
|
+// }
|
|
|
|
|
|
|
|
|
//由 0 -> 1 表明1号铁口开始出铁
|
|
|
//
|
|
|
//根据理论铁量、实时铁水流速,推测距离出铁结束的剩余时间
|
|
|
- //剩余时间=总时间-已经流去的时间
|
|
|
-// mContext.lookupVariable("");
|
|
|
-
|
|
|
-
|
|
|
// Date ironTime = mOPCData.getServerTime();
|
|
|
// lastIronEndTimeRecently
|
|
|
//获取总干量
|
|
@@ -388,70 +394,81 @@ public class DeviceEventListener extends EventListener {
|
|
|
//计算出理论铁量
|
|
|
BigDecimal multiply = totalDry.multiply(new BigDecimal(1.0)).multiply(new BigDecimal(1.0));
|
|
|
//
|
|
|
- float totalSpeed = speed1 + speed2;
|
|
|
- if (totalSpeed > 0) {
|
|
|
- //理论时间
|
|
|
- BigDecimal divide = multiply.divide(new BigDecimal(totalSpeed), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
- String plainString = divide.toPlainString();
|
|
|
- log.info("理论出铁时间:{}min", plainString);
|
|
|
- }
|
|
|
-
|
|
|
- //开始计算打泥量,通过打泥量公式
|
|
|
- //打泥量公式关联因素:铁口深度、钻杆直径、
|
|
|
+// float totalSpeed = speed1.add(speed2);
|
|
|
+// if (totalSpeed > 0) {
|
|
|
+// //理论时间
|
|
|
+// BigDecimal divide = multiply.divide(new BigDecimal(totalSpeed), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+// String plainString = divide.toPlainString();
|
|
|
+// log.info("理论出铁时间:{}min", plainString);
|
|
|
+// }
|
|
|
+
|
|
|
+ //堵口预警
|
|
|
scheduledTaskManager.addTask(TASKNAME_CLOSE_WARN, 0, 1, TimeUnit.MINUTES, () -> {
|
|
|
//堵口预警
|
|
|
- log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_OPEN_WARN);
|
|
|
- if (speed1 > STANDARD_SPEED || speed2 > STANDARD_SPEED) {
|
|
|
+ log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_CLOSE_WARN);
|
|
|
+ if (speed1.compareTo(STANDARD_SPEED) > 0 || speed2.compareTo(STANDARD_SPEED) > 0) {
|
|
|
//流速过大可能是由于铁口深度不足或发生跑大流问题,则提示将当前铁口堵口
|
|
|
- PushData.send2Warn(WarnData.warnClose("流速过快,请堵口"));
|
|
|
- } else if ((speed1 < STANDARD_SPEED || speed2 < STANDARD_SPEED) && (ironLoading2 || ironLoading3 || ironLoading4)) {
|
|
|
+ PushData.send2Warn(WarnData.warnClose("流速过快,请将当前铁口堵口"));
|
|
|
+ } else if ((speed1.compareTo(STANDARD_SPEED) < 0 || speed2.compareTo(STANDARD_SPEED) < 0) && (ironLoading2.get() || ironLoading3.get() || ironLoading4.get())) {
|
|
|
//若流速过小,但其它铁口正在出铁,则提示将当前铁口堵口
|
|
|
- PushData.send2Warn(WarnData.warnClose("请堵口"));
|
|
|
- } else if ((speed1 < STANDARD_SPEED || speed2 < STANDARD_SPEED) && (!ironLoading2 && !ironLoading3 && !ironLoading4)) {
|
|
|
+ PushData.send2Warn(WarnData.warnClose("流速过小,请将当前铁口堵口"));
|
|
|
+ } else if ((speed1.compareTo(STANDARD_SPEED) < 0 || speed2.compareTo(STANDARD_SPEED) < 0) && (!ironLoading2.get() && !ironLoading3.get() && !ironLoading4.get())) {
|
|
|
//若流速过小且其他铁口均未出铁,则提示先将其它铁口打开,再进行堵口
|
|
|
- PushData.send2Warn(WarnData.warnClose("请先将其它铁口打开,再堵口"));
|
|
|
+ PushData.send2Warn(WarnData.warnClose("请先打开其它铁口,再堵口"));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ //开始计算打泥量,通过打泥量公式
|
|
|
+ //打泥量公式关联因素:铁口深度、钻杆直径、
|
|
|
//调用打泥量模型,计算预计使用多少打泥量进行堵口
|
|
|
- scheduledTaskManager.addTask(TASKNAME_MUD, 0, 30, TimeUnit.SECONDS, () -> {
|
|
|
- log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_OPEN_WARN);
|
|
|
+ scheduledTaskManager.addTask(TASKNAME_HIT_MUD, 0, 30, TimeUnit.SECONDS, () -> {
|
|
|
+ log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_HIT_MUD);
|
|
|
String dryString = totalDry.toPlainString();
|
|
|
//
|
|
|
//堵口预警
|
|
|
//计算理论铁量= 矿批 × 综合品位 × 1.06,其中矿批是指L2中的干量
|
|
|
-
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_MUD);
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_HIT_MUD);
|
|
|
});
|
|
|
|
|
|
+ //出铁计时
|
|
|
+ scheduledTaskManager.addTask(TASKNAME_TAPPING_CONSTTIME, 0, 1, TimeUnit.SECONDS, () -> {
|
|
|
+ int totalSeconds = mSecondsElapsed.get();
|
|
|
+ int hours = totalSeconds / 3600;
|
|
|
+ int minutes = (totalSeconds % 3600) / 60;
|
|
|
+ int seconds = totalSeconds % 60;
|
|
|
+ String elapsedTime = String.format("%02d:%02d:%02d", hours, minutes, seconds);
|
|
|
+ log.info("elapsedTime:{}", elapsedTime);
|
|
|
+ RedisUtils.addFixedElement(TASKNAME_TAPPING_CONSTTIME, elapsedTime, MAX_REDIS_COUNT);
|
|
|
+ PushData.send2CostTime(elapsedTime);
|
|
|
+ mSecondsElapsed.incrementAndGet();
|
|
|
+ });
|
|
|
|
|
|
}
|
|
|
|
|
|
//1号铁口结束出铁的操作项目
|
|
|
private void taphole1End() {
|
|
|
//由 1-> 0 表明1号铁口结束出铁
|
|
|
- totalWeight = BigDecimal.ZERO;
|
|
|
- totalDry = BigDecimal.ZERO;
|
|
|
+ mTotalWeight = BigDecimal.ZERO;
|
|
|
+ mTotalDry = BigDecimal.ZERO;
|
|
|
scheduledTaskManager.cancelTask(TASKNAME_OPEN_WARN);
|
|
|
scheduledTaskManager.cancelTask(TASKNAME_CLOSE_WARN);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_IRON_WARN);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_MUD);
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_TAPPING_WARN);
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_HIT_MUD);
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_TAPPING_CONSTTIME);
|
|
|
+ mSecondsElapsed.set(0);
|
|
|
+
|
|
|
recordAfter();
|
|
|
recordBlock();
|
|
|
|
|
|
- //出铁结束后,查询最近两次的数据
|
|
|
-
|
|
|
//开始出铁诊断
|
|
|
//获取开口耗时、出铁时间、实际出铁量、平均铁水流速、平均铁水温度等数据,进行阈值判定,诊断出铁是否正常
|
|
|
-
|
|
|
- //10分钟延迟
|
|
|
- scheduledTaskManager.addTask(TASKNAME_IRON_TEST, 0, 3, TimeUnit.SECONDS, () -> {
|
|
|
+ //xxx分钟延迟
|
|
|
+ scheduledTaskManager.addTask(TASKNAME_TAPPING_TEST, 0, 3, TimeUnit.SECONDS, () -> {
|
|
|
//堵口预警
|
|
|
- log.info("定时任务:{},出铁诊断", TASKNAME_IRON_TEST);
|
|
|
+ log.info("定时任务:{},出铁诊断", TASKNAME_TAPPING_TEST);
|
|
|
L2Data fixedLatestElement = (L2Data) RedisUtils.getFixedLatestElement(IRON_ELEMENT);
|
|
|
//平均温度
|
|
|
String mudWeight = fixedLatestElement.getAvgTemp();
|
|
|
-
|
|
|
//出铁时间
|
|
|
String ironCosttime = fixedLatestElement.getIronCosttime();
|
|
|
//实际出铁量
|
|
@@ -462,8 +479,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
|
|
|
ironDataService.save(ironData);
|
|
|
|
|
|
-
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_IRON_TEST);
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_TAPPING_TEST);
|
|
|
});
|
|
|
|
|
|
}
|
|
@@ -478,13 +494,6 @@ public class DeviceEventListener extends EventListener {
|
|
|
ironBlockService.add(null);
|
|
|
}
|
|
|
|
|
|
- //实时出铁总重量/总流量
|
|
|
- private BigDecimal totalWeight = BigDecimal.ZERO;
|
|
|
-
|
|
|
- //总干量
|
|
|
- private BigDecimal totalDry = BigDecimal.ZERO;
|
|
|
-
|
|
|
-
|
|
|
/***
|
|
|
* 设置实时数据值和状态
|
|
|
*/
|
|
@@ -527,11 +536,11 @@ public class DeviceEventListener extends EventListener {
|
|
|
if (opcData.getPointName().contains(TAG_CAR11)) {
|
|
|
realtimeData.setDesc("1号车");
|
|
|
speeds[0] = realtimeData;
|
|
|
- speed1 = Float.parseFloat(opcData.getData().toString());
|
|
|
+ speed1 = new BigDecimal(opcData.getData().toString());
|
|
|
} else {
|
|
|
realtimeData.setDesc("2号车");
|
|
|
speeds[1] = realtimeData;
|
|
|
- speed2 = Float.parseFloat(opcData.getData().toString());
|
|
|
+ speed2 = new BigDecimal(opcData.getData().toString());
|
|
|
}
|
|
|
|
|
|
//只在两个都有数据的时候才添加
|
|
@@ -549,27 +558,27 @@ public class DeviceEventListener extends EventListener {
|
|
|
realtimeData.setDesc("出铁状态");
|
|
|
mRealtimeStatus.put(IRON_STATUS, realtimeData);
|
|
|
|
|
|
- ironLoading1 = "1".equals(opcData.getData().toString());
|
|
|
+ ironLoading1.set("1".equals(opcData.getData().toString()));
|
|
|
|
|
|
- if (ironLoading1) {
|
|
|
+ if (ironLoading1.get()) {
|
|
|
taphole1Start(l2Data);
|
|
|
} else {
|
|
|
taphole1End();
|
|
|
}
|
|
|
|
|
|
} else if (opcData.getPointName().contains(TAG_TAPHOLE2_STATUS)) {
|
|
|
- ironLoading2 = "1".equals(opcData.getData().toString());
|
|
|
- if (!ironLoading2) {
|
|
|
+ ironLoading2.set("1".equals(opcData.getData().toString()));
|
|
|
+ if (ironLoading2.get()) {
|
|
|
mIronEndTimeRecently = opcData.getServerTime();
|
|
|
}
|
|
|
} else if (opcData.getPointName().contains(TAG_TAPHOLE3_STATUS)) {
|
|
|
- ironLoading3 = "1".equals(opcData.getData().toString());
|
|
|
- if (!ironLoading3) {
|
|
|
+ ironLoading3.set("1".equals(opcData.getData().toString()));
|
|
|
+ if (ironLoading3.get()) {
|
|
|
mIronEndTimeRecently = opcData.getServerTime();
|
|
|
}
|
|
|
} else if (opcData.getPointName().contains(TAG_TAPHOLE4_STATUS)) {
|
|
|
- ironLoading4 = "1".equals(opcData.getData().toString());
|
|
|
- if (!ironLoading4) {
|
|
|
+ ironLoading4.set("1".equals(opcData.getData().toString()));
|
|
|
+ if (!ironLoading4.get()) {
|
|
|
mIronEndTimeRecently = opcData.getServerTime();
|
|
|
}
|
|
|
} else if (opcData.getPointName().contains(TAG_IRON_WEIGHT11) || opcData.getPointName().contains(TAG_IRON_WEIGHT12)) {
|
|
@@ -578,8 +587,8 @@ public class DeviceEventListener extends EventListener {
|
|
|
ironWeight.setDesc("铁水流量");
|
|
|
ironWeight.setUnit("t");
|
|
|
BigDecimal bigDecimalNew = new BigDecimal(opcData.getData().toString());
|
|
|
- totalWeight = totalWeight.add(bigDecimalNew);
|
|
|
- ironWeight.setValue(totalWeight);
|
|
|
+ mTotalWeight = mTotalWeight.add(bigDecimalNew);
|
|
|
+ ironWeight.setValue(mTotalWeight);
|
|
|
mRealtimeData.put(IRON_WEIGHT, ironWeight);
|
|
|
// log.info(">>>>>>>>>>>>>{}:{},total:{}", opcData.getPointName(), opcData.getData(), totalWeight.toPlainString());
|
|
|
|
|
@@ -593,17 +602,18 @@ public class DeviceEventListener extends EventListener {
|
|
|
realtimeData.setDesc("冲渣状态");
|
|
|
mRealtimeStatus.put(FLUSH_STATUS, realtimeData);
|
|
|
}
|
|
|
-// else if (opcData.getPointName().contains(PLAN_END_TIME)) {
|
|
|
-// RealtimeData realtimeData = new RealtimeData();
|
|
|
-// realtimeData.setValue(opcData.getData());
|
|
|
-// realtimeData.setDesc("预计出铁结束时间");
|
|
|
-// mRealtimeData.put(PLAN_END_TIME, realtimeData);
|
|
|
-// }
|
|
|
|
|
|
|
|
|
- float yc = Float.valueOf(ObjectUtils.defaultIfNull(mContext.lookupVariable("yc"), "0").toString());
|
|
|
- if (yc > PRESSURE_DIFF_VALUE) {
|
|
|
- PushData.send2Warn(WarnData.warnOpen("预警出铁"));
|
|
|
+ BigDecimal yc = new BigDecimal(ObjectUtils.defaultIfNull(mContext.lookupVariable("yc"), "0").toString());
|
|
|
+ if (PRESSURE_DIFF_VALUE.compareTo(yc) < 0) {
|
|
|
+ //xxx分钟延迟
|
|
|
+ scheduledTaskManager.addTask(TASKNAME_TAPPING_WARN, 0, 3, TimeUnit.SECONDS, () -> {
|
|
|
+ //堵口预警
|
|
|
+ log.info("出铁预警:{}", TASKNAME_TAPPING_WARN);
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("压差超过阈值,请出铁"));
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_TAPPING_WARN);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -631,7 +641,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
|
|
|
RealtimeData realtimeData3 = new RealtimeData();
|
|
|
realtimeData3.setValue(realtimeDataList);
|
|
|
- realtimeData3.setDesc("铁水成分");
|
|
|
+ realtimeData3.setDesc("铁水成分(最近批次)");
|
|
|
|
|
|
mRealtimeData.put(IRON_ELEMENT, realtimeData3);
|
|
|
}
|
|
@@ -681,7 +691,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
setStepResult(mSteps);
|
|
|
|
|
|
|
|
|
- PushData.send2Operation(mSteps, ironLoading1);
|
|
|
+ PushData.send2Operation(mSteps, ironLoading1.get());
|
|
|
|
|
|
}
|
|
|
|
|
@@ -745,7 +755,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
|
|
|
//非流程必须项,直接放行
|
|
|
//正在出铁中,直接发行
|
|
|
- if ("0".equals(stepVO.getRequired()) || ironLoading1) {
|
|
|
+ if ("0".equals(stepVO.getRequired()) || ironLoading1.get()) {
|
|
|
stepVO.setPassResult(1);
|
|
|
return;
|
|
|
}
|
|
@@ -801,7 +811,7 @@ public class DeviceEventListener extends EventListener {
|
|
|
if (Objects.equals(stepDTO.getStepId(), message.getStepId()) && Objects.equals(stepDTO.getIdentifier(), message.getIdentifier()) && Objects.equals("2", stepDTO.getConfirmMode())) {
|
|
|
stepDTO.setData(message.getData());
|
|
|
setStepResult(mSteps);
|
|
|
- PushData.send2Operation(mSteps, ironLoading1);
|
|
|
+ PushData.send2Operation(mSteps, ironLoading1.get());
|
|
|
//这里手动记录时间
|
|
|
log.info("userId:{},stepId:{},identifier:{},data:{},pass:{}", userId, message.getStepId(), message.getIdentifier(), message.getData(), message.isPass());
|
|
|
|
|
@@ -837,6 +847,31 @@ public class DeviceEventListener extends EventListener {
|
|
|
|
|
|
|
|
|
/***
|
|
|
+ * 用户端点击触发,取消预警
|
|
|
+ * @param client
|
|
|
+ * @param message
|
|
|
+ */
|
|
|
+ @OnEvent(value = PushData.IRON_CANCEL_WARN)
|
|
|
+ public void cancelWarn(SocketIOClient client, WarnData message) {
|
|
|
+ if (ObjectUtils.isNotEmpty(message)) {
|
|
|
+ switch (message.getType()) {
|
|
|
+ case TASKNAME_OPEN_WARN:
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_OPEN_WARN);
|
|
|
+ break;
|
|
|
+ case TASKNAME_TAPPING_WARN:
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_TAPPING_WARN);
|
|
|
+ break;
|
|
|
+ case TASKNAME_CLOSE_WARN:
|
|
|
+ scheduledTaskManager.cancelTask(TASKNAME_CLOSE_WARN);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /***
|
|
|
* 数据库更改后调用接口刷新步骤
|
|
|
*/
|
|
|
@Subscribe
|