1、调整目录结构

2、增加rabbitmq配置、工具类
This commit is contained in:
1378012178@qq.com 2025-04-18 10:01:59 +08:00
parent fd3d9d7a08
commit b251514cc2
36 changed files with 493 additions and 113 deletions

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-parent</artifactId>
<version>2.0.0</version>
</parent>
<description>通用工具模块</description>
<modelVersion>4.0.0</modelVersion>
<artifactId>nursing-unit-common</artifactId>
<dependencies>
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-base-core</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,68 @@
package com.nu.config;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.support.converter.Jackson2JavaTypeMapper;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
/**
* JSON消息转换器
*/
@Bean
public Jackson2JsonMessageConverter jsonMessageConverter() {
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
converter.setTypePrecedence(Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID);
return converter;
}
// 交换器以Topic为例
@Bean
public DirectExchange fwzlExchange() {
return new DirectExchange("hldy.fwzl");
}
// 队列
@Bean
public Queue nu001FwzlAsyncQueue() {
return new Queue("nu001.fwzl.async", true);
}
@Bean
public Queue nu001FwzlStatusQueue() {
return new Queue("nu001.fwzl.status", true);
}
@Bean
public Queue nu002FwzlAsyncQueue() {
return new Queue("nu002.fwzl.async", true);
}
@Bean
public Queue nu002FwzlStatusQueue() {
return new Queue("nu002.fwzl.status", true);
}
@Bean
public Binding binding1(Queue nu001FwzlAsyncQueue, DirectExchange fwzlExchange) {
return BindingBuilder.bind(nu001FwzlAsyncQueue).to(fwzlExchange).with("nu001.fwzl.async");
}
@Bean
public Binding binding2(Queue nu001FwzlStatusQueue, DirectExchange fwzlExchange) {
return BindingBuilder.bind(nu001FwzlStatusQueue).to(fwzlExchange).with("nu001.fwzl.status");
}
@Bean
public Binding binding3(Queue nu002FwzlAsyncQueue, DirectExchange fwzlExchange) {
return BindingBuilder.bind(nu002FwzlAsyncQueue).to(fwzlExchange).with("nu002.fwzl.async");
}
@Bean
public Binding binding4(Queue nu002FwzlStatusQueue, DirectExchange fwzlExchange) {
return BindingBuilder.bind(nu002FwzlStatusQueue).to(fwzlExchange).with("nu002.fwzl.status");
}
}

View File

@ -0,0 +1,10 @@
package com.nu.dto;
import lombok.Data;
import java.util.List;
@Data
public class DirectiveMQDto {
List<String> ids;
}

View File

@ -0,0 +1,9 @@
package com.nu.dto;
import lombok.Data;
@Data
public class StatusMQDto {
int status;
String message;
}

View File

@ -0,0 +1,53 @@
package com.nu.enums;
import lombok.Getter;
/**
* MQ消息处理状态枚举
*/
@Getter
public enum MQStatus {
SUCCESS(200, "消息处理成功"),
INVALID_PARAM(400, "请求参数不合法"),
PROCESS_FAILED(500, "消息处理失败"),
MAX_RETRY_EXCEEDED(1001, "已达到最大重试次数"),
MESSAGE_FORMAT_ERROR(1002, "消息格式错误"),
TIMEOUT(1003, "处理超时"),
DUPLICATE_MESSAGE(1004, "消息重复消费"),
UNKNOWN_ERROR(9999, "未知错误");
private final int code;
private final String message;
MQStatus(int code, String message) {
this.code = code;
this.message = message;
}
/**
* 根据状态码查找枚举
*/
public static MQStatus findByCode(int code) {
for (MQStatus status : values()) {
if (status.code == code) {
return status;
}
}
return UNKNOWN_ERROR; // 默认返回未知错误
}
/**
* 判断是否成功状态
*/
public boolean isSuccess() {
return this == SUCCESS;
}
/**
* 判断是否可重试错误
*/
public boolean isRetryable() {
return this == PROCESS_FAILED || this == TIMEOUT;
}
}

View File

@ -0,0 +1,157 @@
package com.nu.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class RabbitMQUtil {
private static final Logger logger = LoggerFactory.getLogger(RabbitMQUtil.class);
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ConnectionFactory connectionFactory;
@Autowired
private RabbitAdmin rabbitAdmin;
@Autowired
private Jackson2JsonMessageConverter jsonMessageConverter;
// 初始化配置
@PostConstruct
public void init() {
rabbitTemplate.setMessageConverter(jsonMessageConverter);
}
// 基础消息操作
/**
* 发送消息到指定队列使用默认直接交换机
*
* @param queueName 目标队列名称
* @param message 消息内容自动JSON序列化
*/
public void sendToQueue(String queueName, Object message) {
rabbitTemplate.convertAndSend("", queueName, message);
}
/**
* 发送消息到指定交换机
*
* @param exchange 交换机名称
* @param routingKey 路由键
* @param message 消息内容
*/
public void sendToExchange(String exchange, String routingKey, Object message) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
}
/**
* 从队列接收消息自动确认
*
* @return 返回消息对象队列为空时返回null
*/
public Object receiveFromQueue(String queueName) {
return rabbitTemplate.receiveAndConvert(queueName);
}
// 队列与交换机管理
/**
* 创建持久化队列
*
* @param queueName 队列名称
* @return 队列对象
*/
public Queue createQueue(String queueName) {
try {
Queue queue = new Queue(queueName, true, false, false);
rabbitAdmin.declareQueue(queue);
return queue;
} catch (Exception e) {
logger.error("队列[{}]创建失败", queueName, e);
throw e;
}
}
/**
* 创建带死信队列的队列
*
* @param queueName 主队列名称
* @param dlxExchange 死信交换机名称
* @param dlxRoutingKey 死信路由键
*/
public Queue createQueueWithDLX(String queueName, String dlxExchange, String dlxRoutingKey) {
try {
Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", dlxExchange);
args.put("x-dead-letter-routing-key", dlxRoutingKey);
Queue queue = new Queue(queueName, true, false, false, args);
rabbitAdmin.declareQueue(queue);
return queue;
} catch (Exception e) {
logger.error("带死信的队列[{}]创建失败", queueName, e);
throw e;
}
}
/**
* 绑定队列到主题交换机
*
* @param queue 队列名称
* @param exchange 交换机名称
* @param routingKey 路由规则
*/
public void bindToTopicExchange(String queue, String exchange, String routingKey) {
try {
Binding binding = BindingBuilder.bind(new Queue(queue))
.to(new TopicExchange(exchange)).with(routingKey);
rabbitAdmin.declareBinding(binding);
} catch (Exception e) {
logger.error("队列[{}]绑定到交换机[{}]失败", queue, exchange, e);
throw e;
}
}
// 监听器管理
/**
* 创建消息监听容器
*
* @param queueName 监听的队列
* @param listener 消息处理器
* @param concurrency 并发消费者数量
*/
public SimpleMessageListenerContainer createListener(
String queueName,
ChannelAwareMessageListener listener,
int concurrency) {
try {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
container.addQueues(new Queue(queueName));
container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
container.setMessageListener(listener);
container.setConcurrentConsumers(concurrency);
container.start();
return container;
} catch (Exception e) {
logger.error("监听器[{}]创建失败", queueName, e);
throw e;
}
}
}

View File

@ -37,6 +37,12 @@
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
<!-- COMMON 通用工具模块 -->
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-common</artifactId>
<version>${nursingunit.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -1,10 +1,11 @@
package com.nu.modules.directiveTag.controller;
package com.nu.modules.directivetag.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.directiveTag.service.IDirectiveTagService;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.nu.modules.directivetag.service.IDirectiveTagService;
import com.nu.utils.RabbitMQUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,15 +1,11 @@
package com.nu.modules.directiveTag.entity;
package com.nu.modules.directivetag.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

View File

@ -1,9 +1,6 @@
package com.nu.modules.directiveTag.mapper;
package com.nu.modules.directivetag.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.directiveTag.mapper.DirectiveTagMapper">
<mapper namespace="com.nu.modules.directivetag.mapper.DirectiveTagMapper">
</mapper>
</mapper>

View File

@ -1,6 +1,6 @@
package com.nu.modules.directiveTag.service;
package com.nu.modules.directivetag.service;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.baomidou.mybatisplus.extension.service.IService;
/**

View File

@ -1,11 +1,9 @@
package com.nu.modules.directiveTag.service.impl;
package com.nu.modules.directivetag.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.directiveTag.mapper.DirectiveTagMapper;
import com.nu.modules.directiveTag.service.IDirectiveTagService;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.serviceDirective.mapper.ConfigServiceDirectiveMapper;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.nu.modules.directivetag.mapper.DirectiveTagMapper;
import com.nu.modules.directivetag.service.IDirectiveTagService;
import com.nu.modules.servicedirective.mapper.ConfigServiceDirectiveMapper;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -13,7 +11,6 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Arrays;
import java.util.List;
/**
* @Description: 指令标签

View File

@ -1,10 +1,10 @@
package com.nu.modules.serviceCategory.controller;
package com.nu.modules.servicecategory.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.modules.serviceCategory.entity.ConfigServiceCategory;
import com.nu.modules.serviceCategory.service.IConfigServiceCategoryService;
import com.nu.modules.servicecategory.entity.ConfigServiceCategory;
import com.nu.modules.servicecategory.service.IConfigServiceCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,15 +1,11 @@
package com.nu.modules.serviceCategory.entity;
package com.nu.modules.servicecategory.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

View File

@ -1,9 +1,6 @@
package com.nu.modules.serviceCategory.mapper;
package com.nu.modules.servicecategory.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.serviceCategory.entity.ConfigServiceCategory;
import com.nu.modules.servicecategory.entity.ConfigServiceCategory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.serviceCategory.mapper.ConfigServiceCategoryMapper">
<mapper namespace="com.nu.modules.servicecategory.mapper.ConfigServiceCategoryMapper">
</mapper>
</mapper>

View File

@ -1,6 +1,6 @@
package com.nu.modules.serviceCategory.service;
package com.nu.modules.servicecategory.service;
import com.nu.modules.serviceCategory.entity.ConfigServiceCategory;
import com.nu.modules.servicecategory.entity.ConfigServiceCategory;
import com.baomidou.mybatisplus.extension.service.IService;
/**

View File

@ -1,13 +1,13 @@
package com.nu.modules.serviceCategory.service.impl;
package com.nu.modules.servicecategory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nu.modules.ServiceType.entity.ConfigServiceType;
import com.nu.modules.ServiceType.service.IConfigServiceTypeService;
import com.nu.modules.serviceCategory.entity.ConfigServiceCategory;
import com.nu.modules.serviceCategory.mapper.ConfigServiceCategoryMapper;
import com.nu.modules.serviceCategory.service.IConfigServiceCategoryService;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.serviceDirective.service.IConfigServiceDirectiveService;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.nu.modules.servicetype.service.IConfigServiceTypeService;
import com.nu.modules.servicecategory.entity.ConfigServiceCategory;
import com.nu.modules.servicecategory.mapper.ConfigServiceCategoryMapper;
import com.nu.modules.servicecategory.service.IConfigServiceCategoryService;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@ -1,14 +1,17 @@
package com.nu.modules.serviceDirective.controller;
package com.nu.modules.servicedirective.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.serviceDirective.service.IConfigServiceDirectiveService;
import com.nu.dto.DirectiveMQDto;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import com.nu.utils.RabbitMQUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
@ -22,10 +25,7 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -41,6 +41,8 @@ import java.util.stream.Collectors;
public class ConfigServiceDirectiveController extends JeecgController<ConfigServiceDirective, IConfigServiceDirectiveService> {
@Autowired
private IConfigServiceDirectiveService configServiceDirectiveService;
@Autowired
private RabbitMQUtil rabbitMQUtil;
/**
* 分页列表查询
@ -58,6 +60,14 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
DirectiveMQDto directiveMQDto = new DirectiveMQDto();
List<String> ids = Lists.newArrayList();
ids.add("aaa");
ids.add("bbb");
ids.add("ccc");
directiveMQDto.setIds(ids);
rabbitMQUtil.sendToExchange("hldy.fwzl","nu001.fwzl.async",directiveMQDto);
Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
// 自定义多选的查询规则为LIKE_WITH_OR
customeRuleMap.put("categoryId", QueryRuleEnum.LIKE_WITH_OR);

View File

@ -1,8 +1,8 @@
package com.nu.modules.serviceDirective.entity;
package com.nu.modules.servicedirective.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.directivetag.entity.DirectiveTag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,11 +1,9 @@
package com.nu.modules.serviceDirective.mapper;
package com.nu.modules.servicedirective.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.serviceDirective.mapper.ConfigServiceDirectiveMapper">
<mapper namespace="com.nu.modules.servicedirective.mapper.ConfigServiceDirectiveMapper">
<!-- 自定义结果映射 -->
<resultMap id="ConfigServiceDirectiveResultMap"
type="com.nu.modules.serviceDirective.entity.ConfigServiceDirective">
type="com.nu.modules.servicedirective.entity.ConfigServiceDirective">
<id property="id" column="id"/>
<result property="categoryId" column="category_id"/>
<result property="typeId" column="type_id"/>
@ -31,7 +31,7 @@
<result property="previewFile" column="preview_file"/>
<result property="immediateFile" column="immediate_file"/>
<collection property="tagList" ofType="com.nu.modules.directiveTag.entity.DirectiveTag">
<collection property="tagList" ofType="com.nu.modules.directivetag.entity.DirectiveTag">
<id property="id" column="tagId"/>
<result property="tagName" column="tagName"/>
</collection>
@ -80,7 +80,7 @@
ORDER BY c.category_id ASC, c.type_id ASC, c.instruction_tag_id ASC,c.create_time desc
</select>
<select id="queryDirectiveIdByTagIds" resultType="com.nu.modules.serviceDirective.entity.ConfigServiceDirective">
<select id="queryDirectiveIdByTagIds" resultType="com.nu.modules.servicedirective.entity.ConfigServiceDirective">
SELECT distinct directive_id as id FROM nu_directive_tag WHERE tag_id IN
<foreach collection="tagIds.split(',')" item="tagId" open="(" separator="," close=")">
#{tagId}

View File

@ -1,13 +1,10 @@
package com.nu.modules.serviceDirective.service;
package com.nu.modules.servicedirective.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.system.query.QueryRuleEnum;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* @Description: 服务指令

View File

@ -1,22 +1,14 @@
package com.nu.modules.serviceDirective.service.impl;
package com.nu.modules.servicedirective.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nu.modules.directiveTag.entity.DirectiveTag;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.serviceDirective.mapper.ConfigServiceDirectiveMapper;
import com.nu.modules.serviceDirective.service.IConfigServiceDirectiveService;
import org.apache.commons.compress.utils.Lists;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import com.nu.modules.directivetag.entity.DirectiveTag;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.mapper.ConfigServiceDirectiveMapper;
import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**

View File

@ -1,10 +1,10 @@
package com.nu.modules.ServiceType.controller;
package com.nu.modules.servicetype.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.modules.ServiceType.entity.ConfigServiceType;
import com.nu.modules.ServiceType.service.IConfigServiceTypeService;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.nu.modules.servicetype.service.IConfigServiceTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,15 +1,11 @@
package com.nu.modules.ServiceType.entity;
package com.nu.modules.servicetype.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

View File

@ -1,9 +1,6 @@
package com.nu.modules.ServiceType.mapper;
package com.nu.modules.servicetype.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.ServiceType.entity.ConfigServiceType;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.ServiceType.mapper.ConfigServiceTypeMapper">
<mapper namespace="com.nu.modules.servicetype.mapper.ConfigServiceTypeMapper">
</mapper>
</mapper>

View File

@ -1,6 +1,6 @@
package com.nu.modules.ServiceType.service;
package com.nu.modules.servicetype.service;
import com.nu.modules.ServiceType.entity.ConfigServiceType;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.baomidou.mybatisplus.extension.service.IService;
/**

View File

@ -1,11 +1,11 @@
package com.nu.modules.ServiceType.service.impl;
package com.nu.modules.servicetype.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nu.modules.ServiceType.entity.ConfigServiceType;
import com.nu.modules.ServiceType.mapper.ConfigServiceTypeMapper;
import com.nu.modules.ServiceType.service.IConfigServiceTypeService;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import com.nu.modules.serviceDirective.service.IConfigServiceDirectiveService;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.nu.modules.servicetype.mapper.ConfigServiceTypeMapper;
import com.nu.modules.servicetype.service.IConfigServiceTypeService;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@ -0,0 +1,35 @@
package com.nu.mq.directive.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("directiveMQErrorHandler")
public class DirectiveMQExceptionHandler 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);
}
}
/**
* 判断异常是否可重试
*/
private boolean isRetryable(ListenerExecutionFailedException e) {
// 示例网络异常数据库临时锁超时可重试
return e.getCause() instanceof RuntimeException; // 根据实际业务调整
}
}

View File

@ -0,0 +1,20 @@
package com.nu.mq.directive.listener;
import com.nu.dto.StatusMQDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class DirectiveMQListener {
@RabbitListener(queues = "nu001.fwzl.status", errorHandler = "directiveMQErrorHandler")
public void handleMessage(StatusMQDto dto) {
try {
System.out.println("接收到了消息:" + dto.getStatus() + "消息体:" + dto.getMessage());
} catch (Exception e) {
System.out.println("异常了:" + e.getMessage());
}
}
}

View File

@ -12,6 +12,12 @@
<artifactId>nu-system-start</artifactId>
<dependencies>
<!-- COMMON 通用工具模块 -->
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-common</artifactId>
<version>${nursingunit.version}</version>
</dependency>
<!-- SYSTEM 系统管理模块 -->
<dependency>
<groupId>com.nursingunit.boot</groupId>

View File

@ -186,6 +186,13 @@ spring:
host: 127.0.0.1
port: 6379
password:
#rabbitmq 配置
rabbitmq:
host: 192.168.2.199
prot: 5672
username: hldy
password: hldy
virtual-host: /hldy
#mybatis plus 设置
mybatis-plus:
mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml,classpath*:com/nu/**/xml/*Mapper.xml

15
pom.xml
View File

@ -70,6 +70,8 @@
<modules>
<!-- 框架基础包模块 -->
<module>nursing-unit-base-core</module>
<!-- 框架基础包模块 -->
<module>nursing-unit-common</module>
<!-- 框架demo功能模块 -->
<module>nursing-unit-demo</module>
<!-- 进销存 -->
@ -161,6 +163,12 @@
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!-- </dependency>-->
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
@ -186,7 +194,12 @@
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata.version}</version>
</dependency>
<!-- COMMON 通用工具模块 -->
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-common</artifactId>
<version>${nursingunit.version}</version>
</dependency>
<!-- system 模块-->
<dependency>
<groupId>com.nursingunit.boot</groupId>