|
@@ -1,24 +1,33 @@
|
|
|
package com.huashe.park.collect.event;
|
|
|
|
|
|
+import static com.huashe.park.common.consts.RedisKey.DEPTH_PRESS_TIPS;
|
|
|
+import static com.huashe.park.common.consts.RedisKey.PILE_MACHINE_MQTT;
|
|
|
import static com.huashe.park.common.consts.enums.ConsStatus.CONS_STATUS_00;
|
|
|
import static com.huashe.park.common.consts.enums.ConsStatus.CONS_STATUS_02;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.context.event.EventListener;
|
|
|
-import org.springframework.scheduling.annotation.Async;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.huashe.park.common.DateTimeUtil;
|
|
|
+import com.huashe.park.common.consts.RedisKey;
|
|
|
import com.huashe.park.common.consts.enums.MachineStatus;
|
|
|
+import com.huashe.park.core.redis.RedisProxy;
|
|
|
import com.huashe.park.core.service.IConsPileHoleInfoService;
|
|
|
import com.huashe.park.core.service.IPileHoleIndexRealtimeService;
|
|
|
import com.huashe.park.core.service.IPileMachineInfoService;
|
|
|
import com.huashe.park.domain.entity.ConsPileHoleInfo;
|
|
|
+import com.huashe.park.domain.entity.MachineProcess;
|
|
|
+import com.huashe.park.domain.entity.MachineProcessResult;
|
|
|
import com.huashe.park.domain.entity.PileHoleIndexRealtime;
|
|
|
import com.huashe.park.domain.entity.PileMachineInfo;
|
|
|
|
|
|
-@Component
|
|
|
+@Service
|
|
|
public class MachineRealtimeEventListener {
|
|
|
|
|
|
@Autowired
|
|
@@ -33,13 +42,12 @@ public class MachineRealtimeEventListener {
|
|
|
@Autowired
|
|
|
private IPileMachineInfoService pileMachineInfoService;
|
|
|
|
|
|
- @EventListener
|
|
|
- @Async
|
|
|
- public void handleConsProcessEvent(PileMachineConsRealtimeEvent event) {
|
|
|
- ConsPileHoleInfo consPileHoleInfo = consPileHoleInfoService
|
|
|
- .selectConsPileHoleInfoByteId(event.getMessage().getPileId());
|
|
|
- PileMachineInfo pileMachineInfo = machineInfoService
|
|
|
- .selectPileMachineInfoByByteId(event.getMessage().getMachineId());
|
|
|
+ @Autowired
|
|
|
+ private RedisProxy redisProxy;
|
|
|
+
|
|
|
+ public void handleConsProcess(MachineProcess message) {
|
|
|
+ ConsPileHoleInfo consPileHoleInfo = consPileHoleInfoService.selectConsPileHoleInfoByteId(message.getPileId());
|
|
|
+ PileMachineInfo pileMachineInfo = machineInfoService.selectPileMachineInfoByByteId(message.getMachineId());
|
|
|
if (ObjectUtils.isEmpty(consPileHoleInfo) || ObjectUtils.isEmpty(pileMachineInfo)) {
|
|
|
return;
|
|
|
}
|
|
@@ -52,31 +60,37 @@ public class MachineRealtimeEventListener {
|
|
|
pileHoleIndexRealtime.setConsUnitId(consPileHoleInfo.getConsUnitId());
|
|
|
pileHoleIndexRealtime.setHoleNum(consPileHoleInfo.getHoleNum());
|
|
|
|
|
|
- pileHoleIndexRealtime.setCurrent(event.getMessage().getCurrent());
|
|
|
- pileHoleIndexRealtime.setDepth(event.getMessage().getPileLength());
|
|
|
- pileHoleIndexRealtime.setSprayPressure(event.getMessage().getSprayPressure());
|
|
|
- pileHoleIndexRealtime.setTiltAngle(event.getMessage().getTiltAngle());
|
|
|
- pileHoleIndexRealtime.setForwardTiltAngle(event.getMessage().getForwardTiltAngle());
|
|
|
+ pileHoleIndexRealtime.setCurrent(message.getCurrent());
|
|
|
+ pileHoleIndexRealtime.setDepth(message.getPileLength());
|
|
|
+ pileHoleIndexRealtime.setSprayPressure(message.getSprayPressure());
|
|
|
+ pileHoleIndexRealtime.setTiltAngle(message.getTiltAngle());
|
|
|
+ pileHoleIndexRealtime.setForwardTiltAngle(message.getForwardTiltAngle());
|
|
|
// 送带量
|
|
|
- pileHoleIndexRealtime.setSendSprayVolume(event.getMessage().getSprayVolume());
|
|
|
- pileHoleIndexRealtime.setVerticalDeviation(event.getMessage().getVerticalAngle());
|
|
|
- pileHoleIndexRealtime.setStatus(CONS_STATUS_02.getCode());
|
|
|
- pileHoleIndexRealtime.setRealLat(event.getMessage().getLatitude());
|
|
|
- pileHoleIndexRealtime.setRealLng(event.getMessage().getLongitude());
|
|
|
- pileHoleIndexRealtime.setRealX(event.getMessage().getRealX());
|
|
|
- pileHoleIndexRealtime.setRealY(event.getMessage().getRealY());
|
|
|
+ pileHoleIndexRealtime.setSendSprayVolume(message.getSprayVolume());
|
|
|
+ pileHoleIndexRealtime.setVerticalDeviation(message.getVerticalAngle());
|
|
|
+ pileHoleIndexRealtime.setRealLat(message.getLatitude());
|
|
|
+ pileHoleIndexRealtime.setRealLng(message.getLongitude());
|
|
|
+ pileHoleIndexRealtime.setRealX(message.getRealX());
|
|
|
+ pileHoleIndexRealtime.setRealY(message.getRealY());
|
|
|
int cnt = pileHoleIndexRealtimeService.updatePileHoleIndexRealtimeByHoleIdAndMachineId(pileHoleIndexRealtime);
|
|
|
- if (!(cnt > 0)) {
|
|
|
- String dateFromMills = DateTimeUtil.getDateFromMills(event.getMessage().getDataTime());
|
|
|
+ String pileRedisKey = String.format(RedisKey.PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId());
|
|
|
+ if (!redisProxy.hasKey(pileRedisKey)) {
|
|
|
+ redisProxy.putMapToHash(String.format(RedisKey.PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ generateMapTemplate(), 60 * 30);
|
|
|
+ }
|
|
|
+ if (cnt < 1) {
|
|
|
+ pileHoleIndexRealtime.setStatus(CONS_STATUS_02.getCode());
|
|
|
+ String dateFromMills = DateTimeUtil.getDateFromMills(message.getDataTime());
|
|
|
pileHoleIndexRealtime.setStartTime(DateTimeUtil.parseDate(dateFromMills));
|
|
|
pileHoleIndexRealtimeService.insertPileHoleIndexRealtime(pileHoleIndexRealtime);
|
|
|
+ consPileHoleInfoService.updateConsPileHoleInfo(new ConsPileHoleInfo() {
|
|
|
+ {
|
|
|
+ setId(consPileHoleInfo.getId());
|
|
|
+ setConsStatus(CONS_STATUS_02.getCode());
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
- consPileHoleInfoService.updateConsPileHoleInfo(new ConsPileHoleInfo() {
|
|
|
- {
|
|
|
- setId(consPileHoleInfo.getId());
|
|
|
- setConsStatus(CONS_STATUS_02.getCode());
|
|
|
- }
|
|
|
- });
|
|
|
+
|
|
|
pileMachineInfoService.updatePileMachineInfo(new PileMachineInfo() {
|
|
|
{
|
|
|
setId(pileMachineInfo.getId());
|
|
@@ -85,15 +99,13 @@ public class MachineRealtimeEventListener {
|
|
|
setStatus(MachineStatus.MACHINE_STATUS_00.getCode());
|
|
|
}
|
|
|
});
|
|
|
+ // 处置各种最大值
|
|
|
+ handleMaxProcess(message);
|
|
|
}
|
|
|
|
|
|
- @EventListener
|
|
|
- @Async
|
|
|
- public void handleConsResultEvent(PileMachineConsResultEvent event) {
|
|
|
- ConsPileHoleInfo consPileHoleInfo = consPileHoleInfoService
|
|
|
- .selectConsPileHoleInfoByteId(event.getMessage().getPileId());
|
|
|
- PileMachineInfo pileMachineInfo = machineInfoService
|
|
|
- .selectPileMachineInfoByByteId(event.getMessage().getMachineId());
|
|
|
+ public void handleConsResult(MachineProcessResult message) {
|
|
|
+ ConsPileHoleInfo consPileHoleInfo = consPileHoleInfoService.selectConsPileHoleInfoByteId(message.getPileId());
|
|
|
+ PileMachineInfo pileMachineInfo = machineInfoService.selectPileMachineInfoByByteId(message.getMachineId());
|
|
|
if (ObjectUtils.isEmpty(consPileHoleInfo) || ObjectUtils.isEmpty(pileMachineInfo)) {
|
|
|
return;
|
|
|
}
|
|
@@ -102,21 +114,23 @@ public class MachineRealtimeEventListener {
|
|
|
pileHoleIndexRealtime.setHoleByteKey(consPileHoleInfo.getByteId());
|
|
|
pileHoleIndexRealtime.setMachineByteKey(pileMachineInfo.getByteId());
|
|
|
pileHoleIndexRealtime.setMachineId(pileMachineInfo.getId());
|
|
|
- pileHoleIndexRealtime.setDepth(event.getMessage().getPileLength());
|
|
|
+ pileHoleIndexRealtime.setDepth(message.getPileLength());
|
|
|
pileHoleIndexRealtime.setConsUnitId(consPileHoleInfo.getConsUnitId());
|
|
|
pileHoleIndexRealtime.setHoleNum(consPileHoleInfo.getHoleNum());
|
|
|
- pileHoleIndexRealtime.setSprayVolume(event.getMessage().getSprayVolume());
|
|
|
- pileHoleIndexRealtime.setVerticalDeviation(event.getMessage().getVerticalDeviation());
|
|
|
+ pileHoleIndexRealtime.setSprayVolume(message.getSprayVolume());
|
|
|
+ pileHoleIndexRealtime.setVerticalDeviation(message.getVerticalDeviation());
|
|
|
pileHoleIndexRealtime.setStatus(CONS_STATUS_00.getCode());
|
|
|
|
|
|
- if (ObjectUtils.isNotEmpty(event.getMessage().getEndTime())) {
|
|
|
- String dateFromMills = DateTimeUtil.getDateFromMills(event.getMessage().getEndTime());
|
|
|
+ if (ObjectUtils.isNotEmpty(message.getEndTime())) {
|
|
|
+ String dateFromMills = DateTimeUtil.getDateFromMills(message.getEndTime());
|
|
|
pileHoleIndexRealtime.setEndTime(DateTimeUtil.parseDate(dateFromMills));
|
|
|
}
|
|
|
-
|
|
|
+ pileHoleIndexRealtime
|
|
|
+ .setEndPress(getValue(message.getPileId(), PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_PRESS));
|
|
|
+ pileHoleIndexRealtime.setDepthPress(depthPressMap(message.getPileId()));
|
|
|
int cnt = pileHoleIndexRealtimeService.updatePileHoleIndexRealtimeByHoleIdAndMachineId(pileHoleIndexRealtime);
|
|
|
- if (!(cnt > 0)) {
|
|
|
- String dateFromMills = DateTimeUtil.getDateFromMills(event.getMessage().getStartTime());
|
|
|
+ if (cnt < 1) {
|
|
|
+ String dateFromMills = DateTimeUtil.getDateFromMills(message.getStartTime());
|
|
|
pileHoleIndexRealtime.setStartTime(DateTimeUtil.parseDate(dateFromMills));
|
|
|
pileHoleIndexRealtimeService.insertPileHoleIndexRealtime(pileHoleIndexRealtime);
|
|
|
}
|
|
@@ -134,4 +148,62 @@ public class MachineRealtimeEventListener {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private void handleMaxProcess(MachineProcess message) {
|
|
|
+ Float maxPress = redisProxy.getHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_PRESS);
|
|
|
+ Float maxDepth = redisProxy.getHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_DEPTH);
|
|
|
+ Float sprayPressure = message.getSprayPressure();
|
|
|
+ // 如果压力大于最大压力,则更新最大压力
|
|
|
+ if (sprayPressure > maxPress) {
|
|
|
+ redisProxy.putHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_PRESS, sprayPressure);
|
|
|
+ }
|
|
|
+ // 如果深度大于最大深度,则更新最大深度
|
|
|
+ if (message.getPileLength() > maxDepth) {
|
|
|
+ redisProxy.putHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_DEPTH, message.getPileLength());
|
|
|
+ }
|
|
|
+ {
|
|
|
+ // 获取当前深度对应的最大压力
|
|
|
+ int index = (int) Math.floor(message.getPileLength() / 0.25f);
|
|
|
+ Float maxDepthPress = redisProxy.getHash(
|
|
|
+ String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()), Integer.toString(index));
|
|
|
+ if (maxDepthPress < sprayPressure) {
|
|
|
+ redisProxy.putHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, message.getPileId()),
|
|
|
+ Integer.toString(index), sprayPressure);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private <T> T getValue(String pileId, String key) {
|
|
|
+ return redisProxy.getHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, pileId), key);
|
|
|
+ }
|
|
|
+
|
|
|
+ private JSONObject depthPressMap(String pileId) {
|
|
|
+ Map allHash = redisProxy.getAllHash(String.format(PILE_MACHINE_MQTT.MQTT_TOPIC_PREFIX, pileId));
|
|
|
+ if (CollectionUtils.isEmpty(allHash)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ JSONObject result = new JSONObject(DEPTH_PRESS_TIPS.PILE_LENGTH_TIPS);
|
|
|
+ Float press;
|
|
|
+ for (int i = 0; i <= DEPTH_PRESS_TIPS.PILE_LENGTH_TIPS; i += 1) {
|
|
|
+ press = (Float) allHash.get(Integer.toString(i));
|
|
|
+ result.put(String.format("%.2fm", i * 0.25), press);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> generateMapTemplate() {
|
|
|
+ Map<String, Object> result = new HashMap<String, Object>() {
|
|
|
+ {
|
|
|
+ put(PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_PRESS, 0);
|
|
|
+ put(PILE_MACHINE_MQTT.MQTT_TOPIC_PROCESS_MAX_DEPTH, 0);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ for (int i = 0; i <= DEPTH_PRESS_TIPS.PILE_LENGTH_TIPS; i += 1) {
|
|
|
+ result.put(Integer.toString(i), 0);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|