From b1db507d7f98c89d6c4f54afff51642521ef2d04 Mon Sep 17 00:00:00 2001 From: "1378012178@qq.com" <1378012178@qq.com> Date: Fri, 5 Sep 2025 14:28:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=98=E5=B7=A5-=E6=9C=BA=E6=9E=84=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5=E3=80=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0rabbitmq=E5=A4=84=E7=90=86=E5=90=84=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../employees/entity/EmployeesOrg.java | 4 + .../EmployeesMQExceptionHandler.java | 28 +++++++ .../listener/EmployeesMQListener.java | 75 +++++++++++++++++++ .../java/com/nu/dto/EmployeesStatusMQDto.java | 30 ++++++++ 4 files changed, 137 insertions(+) create mode 100644 nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/exceptionhandler/EmployeesMQExceptionHandler.java create mode 100644 nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java create mode 100644 nursing-unit-common/src/main/java/com/nu/dto/EmployeesStatusMQDto.java diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/EmployeesOrg.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/EmployeesOrg.java index 740f2c7..da7cfc8 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/EmployeesOrg.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/EmployeesOrg.java @@ -78,4 +78,8 @@ public class EmployeesOrg implements Serializable { @Excel(name = "申请状态 1申请中 2通过 3驳回", width = 15) @ApiModelProperty(value = "申请状态 1申请中 2通过 3驳回") private java.lang.String status; + /**审核备注*/ + @Excel(name = "审核备注", width = 15) + @ApiModelProperty(value = "审核备注") + private java.lang.String auditContent; } diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/exceptionhandler/EmployeesMQExceptionHandler.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/exceptionhandler/EmployeesMQExceptionHandler.java new file mode 100644 index 0000000..5751dfd --- /dev/null +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/exceptionhandler/EmployeesMQExceptionHandler.java @@ -0,0 +1,28 @@ +package com.nu.mq.employees.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("employeesMQErrorHandler") +public class EmployeesMQExceptionHandler 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/employees/listener/EmployeesMQListener.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java new file mode 100644 index 0000000..125ebf4 --- /dev/null +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java @@ -0,0 +1,75 @@ +package com.nu.mq.employees.listener; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.nu.dto.EmployeesStatusMQDto; +import com.nu.modules.employees.entity.EmployeesOrg; +import com.nu.modules.employees.service.IEmployeesOrgService; +import lombok.extern.slf4j.Slf4j; +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 EmployeesMQListener { + + @Autowired + private IEmployeesOrgService employeesOrgService; + + /** + * 员工-机构关系状态调整 + * 只修改审核状态、审核备注 + * @param dto + */ + @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.auditstatus.sync", durable = "true"), + exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT), + key = "hldy.employeesorg.auditstatus.sync"), errorHandler = "employeesMQErrorHandler") + public void handleAuditStatus(EmployeesStatusMQDto dto) { + EmployeesOrg employeesOrg = new EmployeesOrg(); + employeesOrg.setStatus(dto.getAuditStatus()); + employeesOrg.setAuditContent(dto.getAuditContent()); + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("employees_id",dto.getEmployeeId()); + uw.eq("org_code",dto.getOrgCode()); + employeesOrgService.update(employeesOrg,uw); + } + + /** + * 员工-机构关系状态调整 + * 只修改在线状态 + * @param dto + */ + @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.onlinestatus.sync", durable = "true"), + exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT), + key = "hldy.employeesorg.onlinestatus.sync"), errorHandler = "employeesMQErrorHandler") + public void handleIzOnline(EmployeesStatusMQDto dto) { + EmployeesOrg employeesOrg = new EmployeesOrg(); + employeesOrg.setIzOnline(dto.getIzOnline()); + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("employees_id",dto.getEmployeeId()); + uw.eq("org_code",dto.getOrgCode()); + employeesOrgService.update(employeesOrg,uw); + } + + /** + * 员工-机构关系状态调整 + * 只修改冻结状态 + * @param dto + */ + @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.freezestatus.sync", durable = "true"), + exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT), + key = "hldy.employeesorg.freezestatus.sync"), errorHandler = "employeesMQErrorHandler") + public void handleIzFreeze(EmployeesStatusMQDto dto) { + EmployeesOrg employeesOrg = new EmployeesOrg(); + employeesOrg.setIzFreeze(dto.getIzFreeze()); + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("employees_id",dto.getEmployeeId()); + uw.eq("org_code",dto.getOrgCode()); + employeesOrgService.update(employeesOrg,uw); + } + +} diff --git a/nursing-unit-common/src/main/java/com/nu/dto/EmployeesStatusMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/EmployeesStatusMQDto.java new file mode 100644 index 0000000..785083b --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/dto/EmployeesStatusMQDto.java @@ -0,0 +1,30 @@ +package com.nu.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 员工状态 + * @Author: jeecg-boot + * @Date: 2025-09-05 + * @Version: V1.0 + */ +@Data +public class EmployeesStatusMQDto implements Serializable { + private static final long serialVersionUID = 1L; + + /**员工id*/ + private String employeeId; + /**申请状态 0历史 1申请中 2通过 3驳回*/ + private String auditStatus; + /**审核备注*/ + private String auditContent; + /**是否在线 0在线 1不在线*/ + private java.lang.String izOnline; + /**冻结状态 0未冻结 1冻结*/ + private java.lang.String izFreeze; + /**机构编码*/ + private String orgCode; +}