|
@@ -12,12 +12,14 @@ import com.fdkankan.modeling.exception.BuildException;
|
|
|
import com.fdkankan.modeling.handler.LaserSceneObjGenerateHandler;
|
|
|
import com.fdkankan.modeling.service.IBuildLogService;
|
|
|
import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
|
|
|
+import com.fdkankan.rabbitmq.bean.BuildSceneProcessLogMessage;
|
|
|
import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
|
|
|
import com.fdkankan.rabbitmq.util.RabbitMqProducer;
|
|
|
import com.fdkankan.redis.util.RedisLockUtil;
|
|
|
import com.fdkankan.redis.util.RedisUtil;
|
|
|
import com.rabbitmq.client.Channel;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.lang3.time.StopWatch;
|
|
|
import org.springframework.amqp.core.Message;
|
|
|
import org.springframework.amqp.rabbit.annotation.Queue;
|
|
@@ -53,6 +55,8 @@ public class RabbitMqListener {
|
|
|
private String queueModelingCall;
|
|
|
@Value("${queue.modeling.modeling-post}")
|
|
|
private String queueModelingPost;
|
|
|
+ @Value("${queue.modeling.modeling-process-log}")
|
|
|
+ private String queueModelingProcessLog;
|
|
|
|
|
|
@Autowired
|
|
|
private RedisUtil redisUtil;
|
|
@@ -122,6 +126,12 @@ public class RabbitMqListener {
|
|
|
//开始计时
|
|
|
StopWatch watch = new StopWatch();
|
|
|
watch.start();
|
|
|
+
|
|
|
+ String num = message.getSceneNum();
|
|
|
+
|
|
|
+ //发送记录计算状态为计算中
|
|
|
+ this.sendCallBuildProcessLog(message, ModelingBuildStatus.CALCULATING);
|
|
|
+
|
|
|
final BuildSceneResultBean buildSceneResult = new BuildSceneResultBean();
|
|
|
String resultQueueName = StrUtil.isNotBlank(message.getResultReceiverMqName()) ?
|
|
|
message.getResultReceiverMqName() : queueModelingPost;
|
|
@@ -141,6 +151,7 @@ public class RabbitMqListener {
|
|
|
}
|
|
|
});
|
|
|
status = future.get(SysConstants.modelTimeOut, TimeUnit.HOURS);
|
|
|
+
|
|
|
//结束计时
|
|
|
watch.stop();
|
|
|
buildLog.setDuration(watch.getTime(TimeUnit.SECONDS));
|
|
@@ -262,9 +273,20 @@ public class RabbitMqListener {
|
|
|
//发送计算结果mq
|
|
|
buildSceneResult.setDuration(buildLog.getDuration());
|
|
|
this.sendCallResult(message, buildSceneResult);
|
|
|
+ this.sendCallBuildProcessLog(message, buildStatus);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 发送计算流程状态日志mq
|
|
|
+ * @param message
|
|
|
+ * @param buildStatus
|
|
|
+ */
|
|
|
+ private void sendCallBuildProcessLog(BuildSceneCallMessage message, ModelingBuildStatus buildStatus){
|
|
|
+ rabbitMqProducer.sendByWorkQueue(queueModelingProcessLog,
|
|
|
+ BuildSceneProcessLogMessage.builder().num(message.getSceneNum()).buildStatus(buildStatus.code()).build());
|
|
|
+ }
|
|
|
+
|
|
|
private void preBuild(Map<String,Object> buildContext,BuildSceneCallMessage message, BuildLog buildLog) throws BuildException {
|
|
|
|
|
|
// 初始化日志参数
|
|
@@ -278,6 +300,11 @@ public class RabbitMqListener {
|
|
|
buildLog.setStatus(0);
|
|
|
// 设置缓存锁
|
|
|
String key = SysConstants.SCENE_BUILDING + buildLog.getSceneNum();
|
|
|
+ // 如果是强制重新计算,则删除key。
|
|
|
+ if (StringUtils.equals(message.getRebuild(), "1")) {
|
|
|
+ redisUtil.del(key);
|
|
|
+ }
|
|
|
+
|
|
|
// 获取缓存锁,防止重复消费
|
|
|
Long building = redisUtil.incr(key, 1);
|
|
|
buildLogService.save(buildLog);
|