implements ISysConfigService {
+
+ @Override
+ public int deletePhysicsById(String id) {
+ return baseMapper.deletePhysicsById(id);
+ }
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/exceptionhandler/SysConfigMQExceptionHandler.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/exceptionhandler/SysConfigMQExceptionHandler.java
new file mode 100644
index 0000000..843e1d5
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/exceptionhandler/SysConfigMQExceptionHandler.java
@@ -0,0 +1,28 @@
+package com.nu.mq.sysconfig.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("sysConfigMQErrorHandler")
+public class SysConfigMQExceptionHandler 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/sysconfig/listener/DynamicQueueNameProvider.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/listener/DynamicQueueNameProvider.java
new file mode 100644
index 0000000..6e61692
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/listener/DynamicQueueNameProvider.java
@@ -0,0 +1,28 @@
+package com.nu.mq.sysconfig.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("sysConfigAsyncDQNP")
+public class DynamicQueueNameProvider {
+
+ @Autowired
+ private ISysBaseAPI sysBaseAPI;
+
+ public String getQueueName() {
+ JSONObject deptInfo = sysBaseAPI.getDeptInfo();
+ String orgCode = deptInfo.getString("code");
+ if (StringUtils.isNotBlank(orgCode)) {
+ return orgCode + ".sysconfig.async";
+ } else {
+ return "";
+ }
+ }
+
+ public String getKeyName() {
+ return getQueueName();
+ }
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/listener/SysConfigMQListener.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/listener/SysConfigMQListener.java
new file mode 100644
index 0000000..48d4633
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/sysconfig/listener/SysConfigMQListener.java
@@ -0,0 +1,109 @@
+package com.nu.mq.sysconfig.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.nu.dto.StatusMQDto;
+import com.nu.dto.SysConfigMQDto;
+import com.nu.enums.MQStatus;
+import com.nu.modules.sysconfig.entity.SysConfig;
+import com.nu.modules.sysconfig.service.ISysConfigService;
+import com.nu.utils.RabbitMQUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.api.ISysBaseAPI;
+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.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class SysConfigMQListener {
+ @Autowired
+ private RabbitMQUtil rabbitMQUtil;
+ @Autowired
+ private ISysBaseAPI sysBaseAPI;
+ @Autowired
+ private ISysConfigService sysConfigService;
+
+
+ /**
+ * fanout类型 发给所有人统一处理的
+ *
+ * @param dto
+ */
+ @RabbitListener(
+ bindings = @QueueBinding(
+ value = @Queue(
+ name = "#{T(java.util.UUID).randomUUID().toString()}",
+ autoDelete = "true"
+ ),
+ exchange = @Exchange(
+ name = "hldy.sysconfig.fanout",
+ type = ExchangeTypes.FANOUT
+ )
+ ), errorHandler = "sysConfigMQErrorHandler"
+ )
+ public void handleMessage_unify(SysConfigMQDto dto) {
+ saveSysConfig(dto);
+ }
+
+ /**
+ * direct直连 只发给我的
+ *
+ * @param dto
+ */
+ @RabbitListener(
+ bindings = @QueueBinding(
+ value = @Queue(name = "#{sysConfigAsyncDQNP.getQueueName()}"),
+ exchange = @Exchange(name = "hldy.sysconfig.direct", type = ExchangeTypes.DIRECT),
+ key = "#{sysConfigAsyncDQNP.getKeyName()}"
+ ),
+ errorHandler = "sysConfigMQErrorHandler"
+ )
+ public void handleMessage_self(SysConfigMQDto dto) {
+ saveSysConfig(dto);
+ }
+
+ /**
+ * 系统参数配置同步
+ *
+ *
+ * @param dto
+ */
+ private void saveSysConfig(SysConfigMQDto dto) {
+ //查询此业务系统的机构编码、名称
+ String orgCode = "业务系统中未设置";
+ String orgName = "业务系统中未设置";
+ JSONObject deptInfo = sysBaseAPI.getDeptInfo();
+ orgCode = deptInfo.getString("code");
+ orgName = deptInfo.getString("name");
+
+ try {
+ sysConfigService.deletePhysicsById(dto.getId());
+ SysConfig config = new SysConfig();
+ BeanUtils.copyProperties(dto, config);
+ sysConfigService.save(config);
+ } catch (Exception e) {
+ StatusMQDto statusMQDto = new StatusMQDto();
+ statusMQDto.setStatus(MQStatus.PROCESS_FAILED.getCode());
+ statusMQDto.setMessage(e.getMessage());
+ statusMQDto.setPrimaryKey(dto.getId());
+ statusMQDto.setOrgCode(orgCode);
+ statusMQDto.setOrgName(orgName);
+ rabbitMQUtil.sendToExchange("hldy.sysconfig", "sysconfig.async.result", statusMQDto);
+ throw new RuntimeException(e);
+ }
+ StatusMQDto statusMQDto = new StatusMQDto();
+ statusMQDto.setStatus(MQStatus.SUCCESS.getCode());
+ statusMQDto.setMessage("数据同步成功!");
+ statusMQDto.setPrimaryKey(dto.getId());
+ statusMQDto.setOrgCode(orgCode);
+ statusMQDto.setOrgName(orgName);
+ rabbitMQUtil.sendToExchange("hldy.sysconfig", "sysconfig.async.result", statusMQDto);
+ }
+
+
+}
diff --git a/nursing-unit-common/src/main/java/com/nu/dto/StatusMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/StatusMQDto.java
index ad639c0..4c995ec 100644
--- a/nursing-unit-common/src/main/java/com/nu/dto/StatusMQDto.java
+++ b/nursing-unit-common/src/main/java/com/nu/dto/StatusMQDto.java
@@ -14,7 +14,7 @@ public class StatusMQDto {
//同步表子表code
private String code;
- private String dictId;
+ private String primaryKey;
private String orgCode;
private String orgName;
}
diff --git a/nursing-unit-common/src/main/java/com/nu/dto/SysConfigMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/SysConfigMQDto.java
new file mode 100644
index 0000000..9718a7e
--- /dev/null
+++ b/nursing-unit-common/src/main/java/com/nu/dto/SysConfigMQDto.java
@@ -0,0 +1,42 @@
+package com.nu.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 系统参数配置
+ * @Author: 张明远
+ * @Date: 2025-05-09
+ * @Version: V1.0
+ */
+@Data
+public class SysConfigMQDto implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**id*/
+ private String id;
+ /**参数名称*/
+ private String name;
+ /**键名*/
+ private String configKey;
+ /**键值*/
+ private String configValue;
+ /**备注*/
+ private String descr;
+ /**是否启用 0启用 1未启用*/
+ private String izEnabled;
+ /**是否删除 0未删除 1删除*/
+ private String delFlag;
+ /**创建人*/
+ private String createBy;
+ /**创建日期*/
+ private Date createTime;
+ /**更新人*/
+ private String updateBy;
+ /**更新日期*/
+ private Date updateTime;
+
+ private String orgCode;
+}
diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/servicedirective/controller/ConfigServiceDirectiveController.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/servicedirective/controller/ConfigServiceDirectiveController.java
index a1b95e6..8902170 100644
--- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/servicedirective/controller/ConfigServiceDirectiveController.java
+++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/servicedirective/controller/ConfigServiceDirectiveController.java
@@ -75,12 +75,18 @@ public class ConfigServiceDirectiveController extends JeecgController page = new Page(pageNo, pageSize);
@@ -110,7 +116,7 @@ public class ConfigServiceDirectiveController extends JeecgController