|
@@ -4,23 +4,31 @@ import com.corundumstudio.socketio.SocketIOClient;
|
|
|
import com.corundumstudio.socketio.annotation.OnEvent;
|
|
|
import com.google.common.eventbus.Subscribe;
|
|
|
import com.sckj.camera.util.LocalDateUtils;
|
|
|
+import com.sckj.common.config.GlobalConfig;
|
|
|
import com.sckj.common.eventbus.EventListener;
|
|
|
import com.sckj.common.manager.ScheduledTaskManager;
|
|
|
import com.sckj.common.socketio.SocketUtil;
|
|
|
import com.sckj.common.util.RedisUtils;
|
|
|
+import com.sckj.iron.constant.L1TagConstants;
|
|
|
+import com.sckj.iron.constant.ScheduledTimeConstants;
|
|
|
+import com.sckj.iron.constant.TaskNameConstants;
|
|
|
import com.sckj.iron.dto.IronStepDTO;
|
|
|
+import com.sckj.iron.dto.IronTimeNoDTO;
|
|
|
import com.sckj.iron.dto.RealtimeData;
|
|
|
import com.sckj.iron.dto.WarnData;
|
|
|
import com.sckj.iron.entity.TIronData;
|
|
|
import com.sckj.iron.entity.TIronParam;
|
|
|
-import com.sckj.iron.entity.TL2Data;
|
|
|
-import com.sckj.iron.entity.TL2Material;
|
|
|
import com.sckj.iron.service.impl.*;
|
|
|
import com.sckj.iron.vo.IronStepVO;
|
|
|
+import com.sckj.l2.entity.TL2Data;
|
|
|
+import com.sckj.l2.entity.TL2Material;
|
|
|
+import com.sckj.l2.service.impl.L2DataServiceImpl;
|
|
|
+import com.sckj.l2.service.impl.TL2DataServiceImpl;
|
|
|
+import com.sckj.l2.service.impl.TL2MaterialServiceImpl;
|
|
|
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.entity.TAudio;
|
|
@@ -30,7 +38,10 @@ import com.sckj.warn.validate.TExceptionLogCreateValidate;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
|
|
+import org.springframework.boot.context.event.ApplicationStartedEvent;
|
|
|
+import org.springframework.context.ApplicationListener;
|
|
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
|
|
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
@@ -39,7 +50,9 @@ import org.springframework.stereotype.Component;
|
|
|
import javax.annotation.PostConstruct;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.net.InetAddress;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -54,7 +67,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Component
|
|
|
@Slf4j
|
|
|
-public class DeviceEventListener extends EventListener { // implements ApplicationListener<ApplicationStartedEvent>
|
|
|
+public class DeviceEventListener extends EventListener implements ApplicationListener<ApplicationStartedEvent> { //
|
|
|
|
|
|
//步骤数据
|
|
|
@Resource
|
|
@@ -96,24 +109,9 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
@Resource
|
|
|
TAudioServiceImpl audioService;
|
|
|
|
|
|
- //1号出铁状态标记
|
|
|
- private static final String TAG_TAPHOLE1_STATUS = "AOD25606.PV";
|
|
|
- //2号出铁状态标记
|
|
|
- private static final String TAG_TAPHOLE2_STATUS = "AOD25622.PV";
|
|
|
- //3号出铁状态标记
|
|
|
- private static final String TAG_TAPHOLE3_STATUS = "AOD25706.PV";
|
|
|
- //4号出铁状态标记
|
|
|
- private static final String TAG_TAPHOLE4_STATUS = "AOD25722.PV";
|
|
|
- //铁水温度
|
|
|
- private static final String TAG_IRON_TEMP = "CL510104.CPV";
|
|
|
- //1TH-1号车受铁速度
|
|
|
- private static final String TAG_CAR11 = "WZ540101.PV";
|
|
|
- //1TH-2号车受铁速度
|
|
|
- private static final String TAG_CAR12 = "WZ540201.PV";
|
|
|
- //1TH-1号车总重
|
|
|
- private static final String TAG_IRON_WEIGHT11 = "WI5401.PV";
|
|
|
- //1TH-2号车TPC总重
|
|
|
- private static final String TAG_IRON_WEIGHT12 = "WI5402.PV";
|
|
|
+ @Resource
|
|
|
+ OPCDAServiceImpl opcdaService;
|
|
|
+
|
|
|
|
|
|
//预判和确认出铁
|
|
|
private static final String STEP_YPQRCT = "lnct";
|
|
@@ -141,7 +139,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//摆动溜咀
|
|
|
private static final String MOUTH_STATUS = "bdlz";
|
|
|
//冲渣状态
|
|
|
- private static final String FLUSH_STATUS = "AOD25607.PV";
|
|
|
+ private static final String FLUSH_STATUS = "flushStatus";
|
|
|
|
|
|
// 1.创建表达式解析器
|
|
|
private SpelExpressionParser parser = new SpelExpressionParser();
|
|
@@ -157,18 +155,8 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
@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";
|
|
|
+ @Value("${spring.profiles.active}")
|
|
|
+ protected String activeProfiles;
|
|
|
|
|
|
//铁口出铁状态
|
|
|
//1 出铁中 0 出铁结束
|
|
@@ -204,7 +192,6 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//实时状态
|
|
|
Map<String, Object> mRealtimeStatus = new ConcurrentHashMap<>();
|
|
|
|
|
|
-
|
|
|
//最近任一铁口出铁结束时间
|
|
|
private Date mIronEndTimeRecently;
|
|
|
|
|
@@ -238,74 +225,86 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
return "http";
|
|
|
}
|
|
|
|
|
|
-// @Override
|
|
|
-// public void onApplicationEvent(ApplicationStartedEvent event) {
|
|
|
-// try {
|
|
|
-// // 获取服务器IP地址
|
|
|
-// InetAddress localhost = InetAddress.getLocalHost();
|
|
|
-// String ip = localhost.getHostAddress();
|
|
|
-//
|
|
|
-// String host = localhost.getHostName();
|
|
|
-//
|
|
|
-// // 获取服务器端口号
|
|
|
-// int port = serverProperties.getPort() != null ? serverProperties.getPort() : 8080;
|
|
|
-//
|
|
|
-// // 获取 schema
|
|
|
-// String schema = getSchema();
|
|
|
-// // 获取服务器端口号
|
|
|
+ @Override
|
|
|
+ public void onApplicationEvent(ApplicationStartedEvent event) {
|
|
|
+ try {
|
|
|
+ // 获取服务器IP地址
|
|
|
+ InetAddress localhost = InetAddress.getLocalHost();
|
|
|
+
|
|
|
+ String ip = localhost.getHostAddress();
|
|
|
+
|
|
|
+ String host = localhost.getHostName();
|
|
|
+
|
|
|
+ // 获取服务器端口号
|
|
|
+ int port = serverProperties.getPort() != null ? serverProperties.getPort() : 8080;
|
|
|
+
|
|
|
+ // 获取 schema
|
|
|
+ String schema = getSchema();
|
|
|
+ // 获取服务器端口号
|
|
|
+
|
|
|
+ System.out.println("Server IP: " + ip);
|
|
|
+ System.out.println("Server Port: " + port);
|
|
|
+ System.out.println("Server Schema: " + schema);
|
|
|
+
|
|
|
+ String uploadUrl = GlobalConfig.publicPrefix;
|
|
|
+
|
|
|
+ uploadUrl = schema + "://" + host + ":" + port + "/" + uploadUrl + "/";
|
|
|
+
|
|
|
+ log.info("uploadUrl:{}", uploadUrl);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /// / int port = event.getApplicationContext()
|
|
|
- /// / .getEnvironment()
|
|
|
- /// / .getProperty("server.port", Integer.class, 8080);
|
|
|
-//
|
|
|
-// System.out.println("Server IP: " + ip);
|
|
|
-// System.out.println("Server Port: " + port);
|
|
|
-// System.out.println("Server Schema: " + schema);
|
|
|
-//
|
|
|
-// //预警的铃声
|
|
|
-// List<TAudio> audioList = audioService.lambdaQuery().eq(TAudio::getDelFlag, "1").eq(TAudio::getStatus, "1").list();
|
|
|
-// if (ObjectUtils.isNotEmpty(audioList)) {
|
|
|
-// mIronAlarmMap = audioList.stream()
|
|
|
-// .collect(Collectors.toMap(TAudio::getExceptionType, ironAudio -> ironAudio, (existing, replacement) -> existing));
|
|
|
-//
|
|
|
-// String uploadUrl = GlobalConfig.publicPrefix;
|
|
|
-//
|
|
|
-// uploadUrl = schema + "://" + host + ":" + port + "/" + uploadUrl + "/";
|
|
|
-//
|
|
|
-// log.info("uploadUrl:{}", uploadUrl);
|
|
|
-//
|
|
|
-// alarmUrlOpen = UrlUtils.toAbsoluteUrl(mIronAlarmMap.get(TASKNAME_OPEN_WARN).getPath());
|
|
|
-// alarmUrlClose = UrlUtils.toAbsoluteUrl(mIronAlarmMap.get(TASKNAME_CLOSE_WARN).getPath());
|
|
|
-// alramUrlTapping = UrlUtils.toAbsoluteUrl(mIronAlarmMap.get(TASKNAME_TAPPING_WARN).getPath());
|
|
|
-//
|
|
|
-// log.info("alarmUrlOpen:{}", alarmUrlOpen);
|
|
|
-// log.info("alarmUrlClose:{}", alarmUrlClose);
|
|
|
-// log.info("alramUrlTapping:{}", alramUrlTapping);
|
|
|
-// }
|
|
|
-// } catch (Exception e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// }
|
|
|
-// }
|
|
|
@PostConstruct
|
|
|
public void init() {
|
|
|
//程序启动后隔断时间启动订阅
|
|
|
- scheduledTaskManager.addTask("opcsubscribe", 0, 15, TimeUnit.SECONDS, () -> {
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_OPCDASUBSCRIBE, ScheduledTimeConstants.OPCDASUBSCRIBE_DELAY, ScheduledTimeConstants.OPCDASUBSCRIBE_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
log.info("opcdaService subscribe available");
|
|
|
// opcdaService.subscribeAvailable();
|
|
|
- scheduledTaskManager.cancelTask("opcsubscribe");
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_OPCDASUBSCRIBE);
|
|
|
});
|
|
|
-
|
|
|
mSteps = ironStepService.getTreeSteps();
|
|
|
- List<TIronParam> mIronParams = ironParamService.lambdaQuery().eq(TIronParam::getStatus, "1").in(TIronParam::getParamType, "iron_judge", "iron_judge2").orderByAsc(TIronParam::getSort).list();
|
|
|
+ updateParams();
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 更新参数
|
|
|
+ */
|
|
|
+ private void updateParams() {
|
|
|
+ List<TIronParam> mIronParams = ironParamService.lambdaQuery().eq(TIronParam::getStatus, "1").in(TIronParam::getParamType, "iron_judge", "iron_judge2", "scheduledtime").orderByAsc(TIronParam::getSort).list();
|
|
|
if (ObjectUtils.isNotEmpty(mIronParams)) {
|
|
|
mIronParamMap = mIronParams.stream()
|
|
|
.collect(Collectors.toMap(TIronParam::getParamName, ironParam -> ironParam, (existing, replacement) -> existing));
|
|
|
STANDARD_SPEED = new BigDecimal(mIronParamMap.get("iron_speed").getParamValue());
|
|
|
PRESSURE_DIFF_VALUE = new BigDecimal(mIronParamMap.get("pressure_diff_value").getParamValue());
|
|
|
log.info("STANDARD_SPEED: {},PRESSURE_DIFF_VALUE:{}", STANDARD_SPEED, PRESSURE_DIFF_VALUE);
|
|
|
- }
|
|
|
|
|
|
+ ScheduledTimeConstants.CLOSE_WARN_DELAY = Long.parseLong(mIronParamMap.get("close_warn_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.CLOSE_WARN_PERIOD = Long.parseLong(mIronParamMap.get("close_warn_period").getParamValue());
|
|
|
+
|
|
|
+ ScheduledTimeConstants.TAPPING_WARN_DELAY = Long.parseLong(mIronParamMap.get("tapping_warn_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.TAPPING_WARN_PERIOD = Long.parseLong(mIronParamMap.get("tapping_warn_period").getParamValue());
|
|
|
+
|
|
|
+ ScheduledTimeConstants.TAPPING_TIMEOUT_WARN_DELAY = Long.parseLong(mIronParamMap.get("tapping_timeout_warn_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.TAPPING_TIMEOUT_WARN_PERIOD = Long.parseLong(mIronParamMap.get("tapping_timeout_warn_period").getParamValue());
|
|
|
+
|
|
|
+ ScheduledTimeConstants.HIT_MUD_DELAY = Long.parseLong(mIronParamMap.get("hit_mud_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.HIT_MUD_PERIOD = Long.parseLong(mIronParamMap.get("hit_mud_period").getParamValue());
|
|
|
+
|
|
|
+ ScheduledTimeConstants.TAPPING_CONSTTIME_DELAY = Long.parseLong(mIronParamMap.get("tapping_consttime_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.TAPPING_CONSTTIME_PERIOD = Long.parseLong(mIronParamMap.get("tapping_consttime_period").getParamValue());
|
|
|
|
|
|
+ ScheduledTimeConstants.TAPPING_TEST_DELAY = Long.parseLong(mIronParamMap.get("tapping_test_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.TAPPING_TEST_PERIOD = Long.parseLong(mIronParamMap.get("tapping_test_period").getParamValue());
|
|
|
+
|
|
|
+ ScheduledTimeConstants.OPCDASUBSCRIBE_DELAY = Long.parseLong(mIronParamMap.get("opcdasubscribe_delay").getParamValue());
|
|
|
+ ScheduledTimeConstants.OPCDASUBSCRIBE_PERIOD = Long.parseLong(mIronParamMap.get("opcdasubscribe_period").getParamValue());
|
|
|
+
|
|
|
+ log.info(">>>{}", mIronParamMap);
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/***
|
|
@@ -323,17 +322,32 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
|
|
|
//实时数据
|
|
|
taskExecutor.submit(() -> {
|
|
|
- setRealtimeDataAndStatus(opcData, null);
|
|
|
- });
|
|
|
|
|
|
+ });
|
|
|
+ setRealtimeDataAndStatus(opcData, null);
|
|
|
}
|
|
|
|
|
|
+ //出铁次数编号
|
|
|
+ private String mIronNo;
|
|
|
+
|
|
|
/***
|
|
|
* L2数据项
|
|
|
* @param l2Data
|
|
|
*/
|
|
|
@Subscribe
|
|
|
public void onL2DataMessageEvent(L2Data l2Data) {
|
|
|
+ if (ObjectUtils.isNotEmpty(l2Data.getIronNo())) {
|
|
|
+ //只要是新的出铁次数编号,后续都一直用这个编号,直到有新的出铁编号
|
|
|
+ mIronNo = l2Data.getIronNo();
|
|
|
+ }
|
|
|
+ //记录出铁日期和次数,并返回给前端
|
|
|
+ IronTimeNoDTO ironTimeNoDTO = new IronTimeNoDTO();
|
|
|
+ String dateString = LocalDateUtils.formatDate(new Date(), DateTimeFormatter.ofPattern("MM月dd日"));
|
|
|
+ ironTimeNoDTO.setDate(dateString);
|
|
|
+ ironTimeNoDTO.setIronNo(mIronNo);
|
|
|
+ ironTimeNoDTO.setDesc(String.format("%s第%s次出铁", dateString, ironTimeNoDTO.getIronNo()));
|
|
|
+ PushData.send2IronTimeNo(ironTimeNoDTO);
|
|
|
+
|
|
|
TL2Data tl2Data = new TL2Data();
|
|
|
//出铁操作
|
|
|
BeanUtils.copyProperties(l2Data, tl2Data);
|
|
@@ -345,15 +359,14 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//将L2实时数据保存到Redis
|
|
|
taskExecutor.submit(() -> {
|
|
|
RedisUtils.addFixedElement(IRON_ELEMENT, l2Data, MAX_REDIS_COUNT);
|
|
|
- PushData.send2TrendIronElement(RedisUtils.getFixedElement(IRON_ELEMENT, MAX_REDIS_COUNT));
|
|
|
});
|
|
|
|
|
|
+ //推送实时数据
|
|
|
taskExecutor.submit(() -> {
|
|
|
setRealtimeDataAndStatus(null, l2Data);
|
|
|
});
|
|
|
|
|
|
taskExecutor.submit(() -> {
|
|
|
-
|
|
|
for (IronStepVO stepDTO : mSteps) {
|
|
|
if (NODE.equalsIgnoreCase(stepDTO.getNodeType())) {
|
|
|
//处理子项
|
|
@@ -386,20 +399,19 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
final String scsj = "scsj";
|
|
|
final String sscsj = "sscsj";
|
|
|
|
|
|
- //child.setPassResult(1);
|
|
|
- for (IronStepVO childChild : child.getChilds()) {
|
|
|
- if (sctlc.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(tlcLast);
|
|
|
- } else if (ssctlc.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(tlcLastLast);
|
|
|
- } else if (scll.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(llLast);
|
|
|
- } else if (sscll.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(llLastLast);
|
|
|
- } else if (scsj.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(ironWeightLast);
|
|
|
- } else if (sscsj.equals(childChild.getIdentifier())) {
|
|
|
- childChild.setData(ironWeightLastLast);
|
|
|
+ for (IronStepVO grandChild : child.getChilds()) {
|
|
|
+ if (sctlc.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(tlcLast);
|
|
|
+ } else if (ssctlc.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(tlcLastLast);
|
|
|
+ } else if (scll.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(llLast);
|
|
|
+ } else if (sscll.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(llLastLast);
|
|
|
+ } else if (scsj.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(ironWeightLast);
|
|
|
+ } else if (sscsj.equals(grandChild.getIdentifier())) {
|
|
|
+ grandChild.setData(ironWeightLastLast);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -415,23 +427,23 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
|
|
|
|
|
|
@Subscribe
|
|
|
- public void onL2MaterialMessageEvent(L2Material l2Material) {
|
|
|
+ public void onL2MaterialMessageEvent(L2Material material) {
|
|
|
TL2Material tl2Material = new TL2Material();
|
|
|
+ tl2Material.setIronNo(mIronNo);
|
|
|
//出铁操作
|
|
|
- BeanUtils.copyProperties(l2Material, tl2Material);
|
|
|
+ BeanUtils.copyProperties(material, tl2Material);
|
|
|
//将L2上料实时数据保存到数据库
|
|
|
taskExecutor.submit(() -> {
|
|
|
- tl2MaterialService.saveOrUpdate(tl2Material);
|
|
|
+ tl2MaterialService.save(tl2Material);
|
|
|
});
|
|
|
|
|
|
if (ironLoading1.get()) {
|
|
|
- BigDecimal bigDecimalNew = new BigDecimal(l2Material.getDryWeight());
|
|
|
+ BigDecimal bigDecimalNew = new BigDecimal(material.getDryWeight());
|
|
|
mTotalDry = mTotalDry.add(bigDecimalNew);
|
|
|
} else {
|
|
|
mTotalDry = BigDecimal.ZERO;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|
|
|
|
|
|
//1号铁口正在出铁的操作项目
|
|
@@ -478,10 +490,21 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
// log.info("理论出铁时间:{}min", plainString);
|
|
|
// }
|
|
|
|
|
|
+ //出铁超时报警
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_TAPPING_TIMEOUT_WARN, ScheduledTimeConstants.TAPPING_TIMEOUT_WARN_DELAY, ScheduledTimeConstants.TAPPING_TIMEOUT_WARN_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
+ log.info("堵口预警:{}", TaskNameConstants.TASKNAME_TAPPING_TIMEOUT_WARN);
|
|
|
+
|
|
|
+ System.out.println("倒计时结束!10分钟已到。");
|
|
|
+ // 出铁预警,打开系统告警并记录
|
|
|
+ PushData.send2Warn("请立即打开铁口");
|
|
|
+ log.info("准备出铁但是未及时出铁口,此处数据库记录");
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_TAPPING_TIMEOUT_WARN); // 终止定时器
|
|
|
+ });
|
|
|
+
|
|
|
//堵口预警
|
|
|
- scheduledTaskManager.addTask(TASKNAME_CLOSE_WARN, 0, 1, TimeUnit.MINUTES, () -> {
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_CLOSE_WARN, ScheduledTimeConstants.CLOSE_WARN_DELAY, ScheduledTimeConstants.CLOSE_WARN_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
//堵口预警
|
|
|
- log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_CLOSE_WARN);
|
|
|
+ log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TaskNameConstants.TASKNAME_CLOSE_WARN);
|
|
|
if (speed1.compareTo(STANDARD_SPEED) > 0 || speed2.compareTo(STANDARD_SPEED) > 0) {
|
|
|
//流速过大可能是由于铁口深度不足或发生跑大流问题,则提示将当前铁口堵口
|
|
|
PushData.send2Warn(WarnData.warnClose("流速过快,请将当前铁口堵口", alarmUrlClose));
|
|
@@ -500,57 +523,60 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//xxx分钟出铁后开始计算打泥量,通过打泥量公式
|
|
|
//打泥量公式关联因素:铁口深度、钻杆直径、
|
|
|
//调用打泥量模型,计算预计使用多少打泥量进行堵口
|
|
|
- scheduledTaskManager.addTask(TASKNAME_HIT_MUD, 0, 30, TimeUnit.SECONDS, () -> {
|
|
|
- log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TASKNAME_HIT_MUD);
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_HIT_MUD, ScheduledTimeConstants.HIT_MUD_DELAY, ScheduledTimeConstants.HIT_MUD_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
+ log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TaskNameConstants.TASKNAME_HIT_MUD);
|
|
|
|
|
|
//计算打泥量
|
|
|
//计算理论铁量= 矿批 × 综合品位 × 1.06,其中矿批是指L2中的干量
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_HIT_MUD);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.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);
|
|
|
-
|
|
|
-
|
|
|
- RealtimeData realtimeData = new RealtimeData();
|
|
|
- realtimeData.setValue(elapsedTime);
|
|
|
- realtimeData.setDesc("出铁计时");
|
|
|
-
|
|
|
-
|
|
|
- PushData.send2CostTime(realtimeData);
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_TAPPING_CONSTTIME, ScheduledTimeConstants.TAPPING_CONSTTIME_DELAY, ScheduledTimeConstants.TAPPING_CONSTTIME_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
+ pushIronTime();
|
|
|
mSecondsElapsed.incrementAndGet();
|
|
|
});
|
|
|
+ }
|
|
|
+
|
|
|
+ private void pushIronTime() {
|
|
|
+ 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(TaskNameConstants.TASKNAME_TAPPING_CONSTTIME, elapsedTime, MAX_REDIS_COUNT);
|
|
|
|
|
|
+ RealtimeData realtimeData = new RealtimeData();
|
|
|
+ realtimeData.setValue(elapsedTime);
|
|
|
+ realtimeData.setDesc("出铁计时");
|
|
|
+
|
|
|
+ PushData.send2CostTime(realtimeData);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//1号铁口结束出铁的操作项目
|
|
|
private void taphole1End() {
|
|
|
//由 1-> 0 表明1号铁口结束出铁
|
|
|
mTotalWeight = BigDecimal.ZERO;
|
|
|
mTotalDry = BigDecimal.ZERO;
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_OPEN_WARN);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_CLOSE_WARN);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_TAPPING_WARN);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_HIT_MUD);
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_TAPPING_CONSTTIME);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_OPEN_WARN);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_CLOSE_WARN);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_TAPPING_WARN);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_HIT_MUD);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_TAPPING_CONSTTIME);
|
|
|
mSecondsElapsed.set(0);
|
|
|
+ pushIronTime();
|
|
|
|
|
|
- recordAfter();
|
|
|
- recordBlock();
|
|
|
+// recordAfter();
|
|
|
+// recordBlock();
|
|
|
|
|
|
//开始出铁诊断
|
|
|
//获取开口耗时、出铁时间、实际出铁量、平均铁水流速、平均铁水温度等数据,进行阈值判定,诊断出铁是否正常
|
|
|
//xxx分钟延迟
|
|
|
- scheduledTaskManager.addTask(TASKNAME_TAPPING_TEST, 0, 3, TimeUnit.SECONDS, () -> {
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_TAPPING_TEST, ScheduledTimeConstants.TAPPING_TEST_DELAY, ScheduledTimeConstants.TAPPING_TEST_PERIOD, TimeUnit.SECONDS, () -> {
|
|
|
//堵口预警
|
|
|
- log.info("定时任务:{},出铁诊断", TASKNAME_TAPPING_TEST);
|
|
|
+ log.info("定时任务:{},出铁诊断", TaskNameConstants.TASKNAME_TAPPING_TEST);
|
|
|
L2Data fixedLatestElement = (L2Data) RedisUtils.getFixedLatestElement(IRON_ELEMENT);
|
|
|
//平均温度
|
|
|
String mudWeight = fixedLatestElement.getAvgTemp();
|
|
@@ -564,7 +590,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
|
|
|
ironDataService.save(ironData);
|
|
|
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_TAPPING_TEST);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_TAPPING_TEST);
|
|
|
});
|
|
|
|
|
|
}
|
|
@@ -590,7 +616,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//WI5401.PV 1TH-1号车总重
|
|
|
//WI5402.PV 1TH-2号车TPC总重
|
|
|
if (ObjectUtils.isNotEmpty(opcData)) {
|
|
|
- if (opcData.getPointName().contains(TAG_IRON_TEMP)) {
|
|
|
+ if (opcData.getPointName().contains(L1TagConstants.TAG_IRON_TEMP)) {
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
|
realtimeData.setValue(opcData.getData());
|
|
|
realtimeData.setUnit("℃");
|
|
@@ -598,7 +624,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
realtimeData.setTime(LocalDateUtils.formatDate(opcData.getServerTime()));
|
|
|
mRealtimeData.put(IRON_TEMP, realtimeData);
|
|
|
|
|
|
- } else if (opcData.getPointName().contains(TAG_CAR11) || opcData.getPointName().contains(TAG_CAR12)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_CAR11) || opcData.getPointName().contains(L1TagConstants.TAG_CAR12)) {
|
|
|
// 1TH-1号车受铁速度
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
|
realtimeData.setValue(opcData.getData());
|
|
@@ -616,7 +642,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
speeds = (RealtimeData[]) ironSpeed.getValue();
|
|
|
}
|
|
|
|
|
|
- if (opcData.getPointName().contains(TAG_CAR11)) {
|
|
|
+ if (opcData.getPointName().contains(L1TagConstants.TAG_CAR11)) {
|
|
|
realtimeData.setDesc("1号车");
|
|
|
speeds[0] = realtimeData;
|
|
|
speed1 = new BigDecimal(opcData.getData().toString());
|
|
@@ -634,7 +660,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
ironSpeed.setTime(LocalDateUtils.formatDate(opcData.getServerTime()));
|
|
|
|
|
|
}
|
|
|
- } else if (opcData.getPointName().contains(TAG_TAPHOLE1_STATUS)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_TAPHOLE1_STATUS)) {
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
|
realtimeData.setValue(opcData.getData());
|
|
|
realtimeData.setDesc("出铁状态");
|
|
@@ -648,22 +674,22 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
taphole1End();
|
|
|
}
|
|
|
|
|
|
- } else if (opcData.getPointName().contains(TAG_TAPHOLE2_STATUS)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_TAPHOLE2_STATUS)) {
|
|
|
ironLoading2.set("1".equals(opcData.getData().toString()));
|
|
|
if (ironLoading2.get()) {
|
|
|
mIronEndTimeRecently = opcData.getServerTime();
|
|
|
}
|
|
|
- } else if (opcData.getPointName().contains(TAG_TAPHOLE3_STATUS)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_TAPHOLE3_STATUS)) {
|
|
|
ironLoading3.set("1".equals(opcData.getData().toString()));
|
|
|
if (ironLoading3.get()) {
|
|
|
mIronEndTimeRecently = opcData.getServerTime();
|
|
|
}
|
|
|
- } else if (opcData.getPointName().contains(TAG_TAPHOLE4_STATUS)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_TAPHOLE4_STATUS)) {
|
|
|
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)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_IRON_WEIGHT11) || opcData.getPointName().contains(L1TagConstants.TAG_IRON_WEIGHT12)) {
|
|
|
//铁水流量
|
|
|
RealtimeData ironWeight = new RealtimeData();
|
|
|
ironWeight.setDesc("铁水流量");
|
|
@@ -677,7 +703,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
ironWeight.setTime(LocalDateUtils.formatDate(opcData.getServerTime()));
|
|
|
|
|
|
|
|
|
- } else if (opcData.getPointName().contains(FLUSH_STATUS)) {
|
|
|
+ } else if (opcData.getPointName().contains(L1TagConstants.TAG_FLUSH_STATUS)) {
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
|
realtimeData.setValue(opcData.getData());
|
|
|
realtimeData.setDesc("冲渣状态");
|
|
@@ -688,14 +714,14 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
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, () -> {
|
|
|
+ scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_TAPPING_WARN, 0, 3, TimeUnit.SECONDS, () -> {
|
|
|
//堵口预警
|
|
|
- log.info("出铁预警:{}", TASKNAME_TAPPING_WARN);
|
|
|
+ log.info("出铁预警:{}", TaskNameConstants.TASKNAME_TAPPING_WARN);
|
|
|
PushData.send2Warn(WarnData.warnTapping("压差超过阈值,请出铁", alramUrlTapping));
|
|
|
exceptionLogService.add(TExceptionLogCreateValidate.builder().exceptionType(4).exceptionDesc("压差超过阈值,请出铁").build());
|
|
|
});
|
|
|
} else {
|
|
|
- scheduledTaskManager.cancelTask(TASKNAME_TAPPING_WARN);
|
|
|
+ scheduledTaskManager.cancelTask(TaskNameConstants.TASKNAME_TAPPING_WARN);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -753,7 +779,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
if (ObjectUtils.isEmpty(newPointName)) {
|
|
|
continue;
|
|
|
}
|
|
|
- newPointName = CustomUtil.createNewPointName(newPointName);
|
|
|
+ newPointName = CustomUtil.createNewPointName(newPointName, activeProfiles);
|
|
|
if (Objects.equals(newPointName, pointName)) {
|
|
|
//3.创建变量上下文,设置变量
|
|
|
childchild.setData(data);
|
|
@@ -763,7 +789,7 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
if (ObjectUtils.isEmpty(newPointName)) {
|
|
|
continue;
|
|
|
}
|
|
|
- newPointName = CustomUtil.createNewPointName(newPointName);
|
|
|
+ newPointName = CustomUtil.createNewPointName(newPointName, activeProfiles);
|
|
|
if (Objects.equals(newPointName, pointName)) {
|
|
|
child.setData(data);
|
|
|
}
|
|
@@ -785,16 +811,15 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
//发现第一个pass是false,后续都为false,包括父项和子项
|
|
|
for (IronStepVO stepDTO : mSteps) {
|
|
|
for (IronStepVO child : stepDTO.getChilds()) {
|
|
|
- for (IronStepVO childChild : child.getChilds()) {
|
|
|
- //子项的子项 验证是否通过
|
|
|
- validateStepPass(childChild);
|
|
|
-
|
|
|
- if (!foundFalsePass && 0 == childChild.getPassResult()) {
|
|
|
+ for (IronStepVO grandchild : child.getChilds()) {
|
|
|
+ //孙子项 验证是否通过
|
|
|
+ validateStepPass(grandchild);
|
|
|
+ if (!foundFalsePass && 0 == grandchild.getPassResult()) {
|
|
|
foundFalsePass = true;
|
|
|
}
|
|
|
|
|
|
if (foundFalsePass) {
|
|
|
- childChild.setPassResult(0);
|
|
|
+ grandchild.setPassResult(0);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -810,6 +835,9 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
}
|
|
|
//父项
|
|
|
validateStepPass(stepDTO);
|
|
|
+ if (!foundFalsePass && 0 == stepDTO.getPassResult()) {
|
|
|
+ foundFalsePass = true;
|
|
|
+ }
|
|
|
//父项
|
|
|
if (foundFalsePass) {
|
|
|
stepDTO.setPassResult(0);
|
|
@@ -828,8 +856,10 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
String flowName = "";
|
|
|
try {
|
|
|
if ("calc".equalsIgnoreCase(stepVO.getNodeType())) {
|
|
|
+ //公式计算
|
|
|
flowName = parser.parseExpression(stepVO.getStepNameExpression()).getValue(mContext, String.class);
|
|
|
} else {
|
|
|
+ //纯文字
|
|
|
flowName = parser.parseExpression("'" + stepVO.getStepName() + "'").getValue(mContext, String.class);
|
|
|
}
|
|
|
stepVO.setStepName(flowName);
|
|
@@ -935,31 +965,37 @@ public class DeviceEventListener extends EventListener { // implements Applicati
|
|
|
@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;
|
|
|
- }
|
|
|
+ scheduledTaskManager.cancelTask(message.getType());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /***
|
|
|
+ * 用户端连接后进行开始
|
|
|
+ * @param client
|
|
|
+ * @param message
|
|
|
+ */
|
|
|
+ @OnEvent(value = PushData.IRON_START)
|
|
|
+ public void ironStart(SocketIOClient client, IronStepDTO message) {
|
|
|
+ setStepResult(mSteps);
|
|
|
+ PushData.send2Operation(mSteps, ironLoading1.get());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/***
|
|
|
* 数据库更改后调用接口刷新步骤
|
|
|
*/
|
|
|
@Subscribe
|
|
|
- public void onIronStep(Boolean refresh) {
|
|
|
- if (ObjectUtils.isNotEmpty(refresh) && refresh) {
|
|
|
- mSteps = ironStepService.getTreeSteps();
|
|
|
- log.info("流程步骤数据刷新:{}", LocalDateTime.now());
|
|
|
+ public void onIronStep(String refresh) {
|
|
|
+ switch (refresh) {
|
|
|
+ case "1":
|
|
|
+ mSteps = ironStepService.getTreeSteps();
|
|
|
+ log.info("流程步骤数据刷新:{}", LocalDateTime.now());
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ updateParams();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|