|
@@ -0,0 +1,120 @@
|
|
|
+package com.fdkankan.contro.mq.listener;
|
|
|
+
|
|
|
+import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.fdkankan.common.constant.CommonOperStatus;
|
|
|
+import com.fdkankan.contro.constant.RedisConstants;
|
|
|
+import com.fdkankan.contro.mq.service.impl.BuildE57SceneServiceImpl;
|
|
|
+import com.fdkankan.contro.service.ICommonService;
|
|
|
+import com.fdkankan.contro.service.ISceneBuildProcessLogService;
|
|
|
+import com.fdkankan.model.constants.SceneBuildProcessType;
|
|
|
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
|
|
|
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
|
|
|
+import com.fdkankan.redis.util.RedisLockUtil;
|
|
|
+import com.rabbitmq.client.Channel;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.amqp.core.Message;
|
|
|
+import org.springframework.amqp.rabbit.annotation.Queue;
|
|
|
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.HashMap;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class BuildE57Listener{
|
|
|
+
|
|
|
+ @Value("${queue.modeling.e57.modeling-pre:e57-modeling-pre}")
|
|
|
+ private String queueModelingPre;
|
|
|
+
|
|
|
+ @Value("${queue.modeling.e57.modeling-pre:e57-modeling-post}")
|
|
|
+ private String queueModelingPost;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisLockUtil redisLockUtil;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISceneBuildProcessLogService sceneBuildProcessLogService;
|
|
|
+ @Autowired
|
|
|
+ private ICommonService commonService;
|
|
|
+ @Autowired
|
|
|
+ private BuildE57SceneServiceImpl buildSceneService;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 场景计算前置资源准备处理
|
|
|
+ * @param channel
|
|
|
+ * @param message
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @RabbitListener(
|
|
|
+ queuesToDeclare = @Queue("${queue.modeling.e57.modeling-pre:e57-modeling-pre}"),
|
|
|
+ concurrency = "${maxThread.modeling.modeling-pre}"
|
|
|
+ )
|
|
|
+ public void buildScenePreHandler(Channel channel, Message message) throws Exception {
|
|
|
+ String messageId = message.getMessageProperties().getMessageId();
|
|
|
+ String msg = new String(message.getBody(), StandardCharsets.UTF_8);
|
|
|
+ HashMap<String, Object> map = JSON.parseObject(msg, HashMap.class);
|
|
|
+ String num = (String) map.get("num");
|
|
|
+ map.put("bizType", "e57");
|
|
|
+
|
|
|
+ log.info("开始准备e57计算资源,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
|
|
|
+ BuildSceneCallMessage buildSceneMessage = new BuildSceneCallMessage();
|
|
|
+ buildSceneMessage.setSceneNum(num);
|
|
|
+ buildSceneMessage.setExt(map);
|
|
|
+ buildSceneMessage.setBuildType("V3");
|
|
|
+ try {
|
|
|
+ if(ObjectUtils.isEmpty(buildSceneMessage.getBuildContext())){
|
|
|
+ buildSceneMessage.setBuildContext(new HashMap<>());
|
|
|
+ }
|
|
|
+ if(!ObjectUtils.isEmpty(buildSceneMessage.getSceneNum())){
|
|
|
+ buildSceneMessage.getBuildContext().put("sceneNum",buildSceneMessage.getSceneNum());
|
|
|
+ }
|
|
|
+ //记录日志
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.WAITING.code(), null);
|
|
|
+ buildSceneService.buildScenePre(buildSceneMessage);
|
|
|
+ commonService.saveMqSendLog(num, buildSceneMessage);
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.SUCCESS.code(), null);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("e57计算前置处理出错,num=" + num, e);
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000));
|
|
|
+ }
|
|
|
+ log.info("准备e57计算资源完成,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
|
|
|
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 场景计算后置结果处理
|
|
|
+ * @param channel
|
|
|
+ * @param message
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @RabbitListener(
|
|
|
+ queuesToDeclare = @Queue("${queue.modeling.e57.modeling-post:e57-modeling-post}"),
|
|
|
+ concurrency = "${maxThread.modeling.modeling-post}"
|
|
|
+ )
|
|
|
+ public void buildScenePostHandler(Channel channel, Message message) throws Exception {
|
|
|
+ String messageId = message.getMessageProperties().getMessageId();
|
|
|
+ String msg = new String(message.getBody(), StandardCharsets.UTF_8);
|
|
|
+ log.info("场景计算完成,开始处理e57计算结果,队列名:{},id:{},消息体:{}", queueModelingPost, messageId, msg);
|
|
|
+ BuildSceneResultMqMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
|
|
|
+ String num = buildSceneMessage.getBuildContext().get("sceneNum").toString();
|
|
|
+ try {
|
|
|
+// sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName);
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.WAITING.code(), null);
|
|
|
+ buildSceneService.buildScenePost(buildSceneMessage);
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.SUCCESS.code(), null);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("场景计算结果处理出错,num=" + num, e);
|
|
|
+ sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000));
|
|
|
+ }
|
|
|
+ log.info("场景计算结果处理完成,队列名:{},id:{},消息体:{}", queueModelingPost, messageId, msg);
|
|
|
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
|
|
+
|
|
|
+ }
|
|
|
+}
|