From 1fdb860d1dbb0273b768888156b643061af841bd Mon Sep 17 00:00:00 2001 From: yangjun <1173114630@qq.com> Date: Fri, 11 Jul 2025 08:37:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B9=B3=E5=8F=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orgapplyinfo/entity/OrgApplyInfo.java | 11 +++ .../WorkOrderMQExceptionHandler.java | 28 ++++++++ .../listener/WorkOrderMQListener.java | 50 ++++++++++++++ .../main/java/com/nu/dto/WorkOrderMQDto.java | 67 +++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/exceptionhandler/WorkOrderMQExceptionHandler.java create mode 100644 nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/listener/WorkOrderMQListener.java create mode 100644 nursing-unit-common/src/main/java/com/nu/dto/WorkOrderMQDto.java diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/orgapplyinfo/entity/OrgApplyInfo.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/orgapplyinfo/entity/OrgApplyInfo.java index 76d9474..babdaa4 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/orgapplyinfo/entity/OrgApplyInfo.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/orgapplyinfo/entity/OrgApplyInfo.java @@ -242,4 +242,15 @@ public class OrgApplyInfo implements Serializable { @ApiModelProperty(value = "加盟时间") private java.util.Date franchiseTime; + private java.lang.String replyContent; + private java.lang.String replyFile; + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date replyTime; + private java.lang.String handleBy; + @Dict(dicCode = "work_order_status") + private java.lang.String workOrderStatus; + private java.lang.String workOrderId; + + } diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/exceptionhandler/WorkOrderMQExceptionHandler.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/exceptionhandler/WorkOrderMQExceptionHandler.java new file mode 100644 index 0000000..401b0c5 --- /dev/null +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/exceptionhandler/WorkOrderMQExceptionHandler.java @@ -0,0 +1,28 @@ +package com.nu.mq.workorder.exceptionhandler; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.listener.api.RabbitListenerErrorHandler; +import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException; +import org.springframework.stereotype.Component; + +@Slf4j +@Component("workOrderMQErrorHandler") +public class WorkOrderMQExceptionHandler implements RabbitListenerErrorHandler { + + @Override + public Object handleError(Message message, org.springframework.messaging.Message message1, ListenerExecutionFailedException e) { + log.error("MQ消息处理失败 | 消息体: {} | 异常原因: {}", new String(message.getBody()), e.getCause().getMessage()); + + // 根据异常类型选择处理策略 +// if (isRetryable(e)) { +// // 可重试异常:抛出异常触发重试 +// throw e; +// } else { + // 不可恢复异常:拒绝消息且不重新入队 + throw new AmqpRejectAndDontRequeueException("消息处理失败且禁止重试", e); +// } + } + +} diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/listener/WorkOrderMQListener.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/listener/WorkOrderMQListener.java new file mode 100644 index 0000000..7ec3e59 --- /dev/null +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/workorder/listener/WorkOrderMQListener.java @@ -0,0 +1,50 @@ +package com.nu.mq.workorder.listener; + +import com.nu.dto.WorkOrderMQDto; +import com.nu.modules.orgapplyinfo.entity.OrgApplyInfo; +import com.nu.modules.orgapplyinfo.service.IOrgApplyInfoService; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class WorkOrderMQListener { + @Autowired + private IOrgApplyInfoService orgApplyInfoService; + /** + * 工单回执 + */ + @AutoLog(value = "工单-工单回执") + @RabbitListener( + bindings = @QueueBinding( + value = @Queue(name = "nu.workOrder.reply"), + exchange = @Exchange(name = "nu.workOrder.reply", type = ExchangeTypes.DIRECT), + key = "nu.workOrder.reply" + ), + errorHandler = "workOrderMQErrorHandler" + ) + public void handleNuBaseInfoSyncMessageStatus(WorkOrderMQDto workOrderMQDto) { + log.info("接收到工单回复"); + log.info("工单回复: {}", workOrderMQDto); + + OrgApplyInfo orgApplyInfo = orgApplyInfoService.getById(workOrderMQDto.getOrgId()); + if(orgApplyInfo != null){ + orgApplyInfo.setReplyContent(workOrderMQDto.getReplyContent()); + orgApplyInfo.setReplyFile(workOrderMQDto.getReplyFile()); + orgApplyInfo.setReplyTime(workOrderMQDto.getReplyTime()); + orgApplyInfo.setHandleBy(workOrderMQDto.getHandleBy()); + orgApplyInfo.setWorkOrderStatus("2"); + orgApplyInfo.setWorkOrderId(workOrderMQDto.getId()); + orgApplyInfoService.updateById(orgApplyInfo); + } + + } + +} diff --git a/nursing-unit-common/src/main/java/com/nu/dto/WorkOrderMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/WorkOrderMQDto.java new file mode 100644 index 0000000..c6db6e2 --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/dto/WorkOrderMQDto.java @@ -0,0 +1,67 @@ +package com.nu.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 工单表 + * @Author: zmy + * @Date: 2025-07-08 + * @Version: V1.0 + */ +@Data +public class WorkOrderMQDto implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + private String id; + /**区分同一工单用nu_word_order.id*/ + private String pkId; + /**机构ID*/ + private String orgId; + /**机构编码(可能不存在)*/ + private String orgCode; + /**机构名称*/ + private String orgName; + /**平台类型pc wechat pad*/ + private String platType; + /**标题*/ + private String title; + /**描述*/ + private String content; + /**附件*/ + private String filePath; + /**状态 0待接收 1处理中 3已解决 4工单异常 5外部原因*/ + private String status; + /**创建人*/ + private String createBy; + /**创建时间*/ + private Date createTime; + /**回复内容*/ + private String replyContent; + /**回复附件*/ + private String replyFile; + /**回复时间*/ + private Date replyTime; + /**处理人*/ + private String handleBy; + /**工单提交人联系电话*/ + private String tel; + /**工单提交人邮件地址*/ + private String email; + /**状态 1平台构建*/ + private String workType; +}