mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
生产单异步导入:1、修复死信队列ttl和对应任务状态修改;2、临时数据表移除无用状态;3、临时任务表新增文件字段;
This commit is contained in:
+1
-7
@@ -148,13 +148,7 @@ public class DefaultExcelOrderImportConsumer {
|
||||
} catch (Exception e) {
|
||||
// 确认消息进入死信队列
|
||||
channel.basicNack(deliveryTag, false, false);
|
||||
String importFailNotify = ORDER_IMPORT_FAIL.getMsg();
|
||||
// 更新状态为消费失败、导入失败
|
||||
orderImportTaskMapper.update(new LambdaUpdateWrapper<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId)
|
||||
.set(OrderImportTaskDO::getStatus, OrderImportTaskStatusEnum.CONSUME_FAIL.getStatus())
|
||||
.set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_FAIL.getStatus())
|
||||
.set(OrderImportTaskDO::getResult, importFailNotify));
|
||||
log.error(importFailNotify, e);
|
||||
log.error(ORDER_IMPORT_FAIL.getMsg(), e);
|
||||
throw e;
|
||||
} finally {
|
||||
// 手动确认消息接收
|
||||
|
||||
+1
-7
@@ -144,13 +144,7 @@ public class DefaultXmlOrderImportConsumer {
|
||||
} catch (Exception e) {
|
||||
// 确认消息进入死信队列
|
||||
channel.basicNack(deliveryTag, false, false);
|
||||
String importFailNotify = ORDER_IMPORT_FAIL.getMsg();
|
||||
// 更新状态为消费失败、导入失败
|
||||
orderImportTaskMapper.update(new LambdaUpdateWrapper<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId)
|
||||
.set(OrderImportTaskDO::getStatus, OrderImportTaskStatusEnum.CONSUME_FAIL.getStatus())
|
||||
.set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_FAIL.getStatus())
|
||||
.set(OrderImportTaskDO::getResult, importFailNotify));
|
||||
log.error(importFailNotify, e);
|
||||
log.error( ORDER_IMPORT_FAIL.getMsg(), e);
|
||||
throw e;
|
||||
} finally {
|
||||
// 手动确认消息接收
|
||||
|
||||
+50
-1
@@ -1,9 +1,15 @@
|
||||
package com.cf.imes.module.plan.service.orderImport.consumer;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||
import com.cf.imes.framework.redis.constants.RedisKeyConstants;
|
||||
import com.cf.imes.framework.redis.util.RedisLockUtil;
|
||||
import com.cf.imes.module.executor.enums.OrderImportStatusEnum;
|
||||
import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum;
|
||||
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO;
|
||||
import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
@@ -13,8 +19,11 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants.ORDER_IMPORT_DEAD_LETTER_QUEUE;
|
||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.ORDER_IMPORT_FAIL;
|
||||
|
||||
/**
|
||||
* 生产单导入死信队列消费
|
||||
@@ -29,12 +38,38 @@ public class OrderImportDeadLetterConsumer {
|
||||
@Resource
|
||||
private RedisLockUtil redisLockUtil;
|
||||
|
||||
@Resource
|
||||
private OrderImportTaskMapper orderImportTaskMapper;
|
||||
|
||||
private static final String TTL_REASON = "expired";
|
||||
private static final String ERROR_REASON = "rejected";
|
||||
|
||||
@RabbitListener(queues = ORDER_IMPORT_DEAD_LETTER_QUEUE)
|
||||
public void receiveA(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) throws IOException {
|
||||
@DS("imes_prod")
|
||||
public void receive(String message,
|
||||
Channel channel,
|
||||
@Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag,
|
||||
@Header(value = "x-death", required = false) List<Map<String, Object>> xDeath) throws IOException {
|
||||
log.info("====================【生产单导入收到死信消息:{}】====================", message);
|
||||
// 手动确认消息
|
||||
channel.basicAck(deliveryTag, false);
|
||||
|
||||
String deadLetterReason = getDeadLetterReason(xDeath);
|
||||
long taskId = Long.parseLong(message);
|
||||
|
||||
if(TTL_REASON.equals(deadLetterReason)) {
|
||||
// 更新状态为消费超时
|
||||
orderImportTaskMapper.update(new LambdaUpdateWrapper<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId)
|
||||
.set(OrderImportTaskDO::getStatus, OrderImportTaskStatusEnum.CONSUME_FAIL.getStatus())
|
||||
);
|
||||
} else if (ERROR_REASON.equals(deadLetterReason)) {
|
||||
// 更新状态为消费成功、导入失败
|
||||
orderImportTaskMapper.update(new LambdaUpdateWrapper<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId)
|
||||
.set(OrderImportTaskDO::getStatus, OrderImportTaskStatusEnum.CONSUME_SUCCESS.getStatus())
|
||||
.set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_FAIL.getStatus())
|
||||
.set(OrderImportTaskDO::getResult, ORDER_IMPORT_FAIL.getMsg()));
|
||||
}
|
||||
|
||||
// 导入锁解锁
|
||||
Long organId = OrganContextHolder.getOrganId();
|
||||
if (ObjectUtil.isNotNull(organId)) {
|
||||
@@ -42,4 +77,18 @@ public class OrderImportDeadLetterConsumer {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取进入死信队列原因
|
||||
*
|
||||
* @param xDeath
|
||||
* @return
|
||||
*/
|
||||
private String getDeadLetterReason(List<Map<String, Object>> xDeath) {
|
||||
if (xDeath == null || xDeath.isEmpty()) {
|
||||
return "unknown";
|
||||
}
|
||||
// 通常取第一个 x-death 记录的原因(最新的)
|
||||
Map<String, Object> firstDeath = xDeath.get(0);
|
||||
return (String) firstDeath.get("reason");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user