Compare commits

...

12 Commits

19 changed files with 261 additions and 191 deletions

View File

@ -33,6 +33,9 @@ cp middleware/.env.example middleware/.env
cp reader/src/main/resources/application.yml.example reader/src/main/resources/application.yml cp reader/src/main/resources/application.yml.example reader/src/main/resources/application.yml
cp writer/src/main/resources/application.yml.example writer/src/main/resources/application.yml cp writer/src/main/resources/application.yml.example writer/src/main/resources/application.yml
cp executor/src/main/resources/application.yml.example executor/src/main/resources/application.yml cp executor/src/main/resources/application.yml.example executor/src/main/resources/application.yml
cp reader/src/main/resources/mail.properties.example reader/src/main/resources/mail.properties
cp writer/src/main/resources/mail.properties.example writer/src/main/resources/mail.properties
cp executor/src/main/resources/mail.properties.example executor/src/main/resources/mail.properties
``` ```
5. 修改 `{repo}/middleware/.env` 文件里 `SQL_SCRIPT_PATH``DOCKER_DATA_PATH` 绝对路径到本地磁盘 5. 修改 `{repo}/middleware/.env` 文件里 `SQL_SCRIPT_PATH``DOCKER_DATA_PATH` 绝对路径到本地磁盘

View File

@ -13,10 +13,12 @@ public class NotificationSystemConstant {
//平台编码 //平台编码
public static final String PLATFORM_CODE_GITLINK = "gitlink"; //gitlink平台 public static final String PLATFORM_CODE_GITLINK = "gitlink"; //gitlink平台
public static final String PLATFORM_CODE_HEHUI = "hehui"; //hehui平台 public static final String PLATFORM_CODE_HEHUI = "hehui"; //hehui平台
public static final String PLATFORM_CODE_OSREDM = "osredm"; //红山开源平台
public static final Map<String, String> PLATFORM_CODE_MAP = new HashMap<String, String>() { public static final Map<String, String> PLATFORM_CODE_MAP = new HashMap<String, String>() {
{ {
put("gitlink", PLATFORM_CODE_GITLINK); put("gitlink", PLATFORM_CODE_GITLINK);
put("hehui", PLATFORM_CODE_HEHUI); put("hehui", PLATFORM_CODE_HEHUI);
put("osredm", PLATFORM_CODE_OSREDM);
} }
}; };

View File

@ -23,4 +23,9 @@ CREATE TABLE `gitlink_email_send_records` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `index_on_email_and_status` (`email`,`status`), KEY `index_on_email_and_status` (`email`,`status`),
KEY `index_on_status` (`status`) KEY `index_on_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
-- 2023-01-05 更新字符集编码
ALTER TABLE gitlink_email_jobs CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE gitlink_email_send_records CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

View File

@ -35,4 +35,7 @@ ALTER TABLE gitlink_sys_notification ADD COLUMN (`type` TINYINT(4) NOT NULL DEFA
-- 2021-09-09 新增 source 字段区分消息来源、新增 extra 字段保存额外信息 -- 2021-09-09 新增 source 字段区分消息来源、新增 extra 字段保存额外信息
ALTER TABLE gitlink_sys_notification ADD source varchar(250) NULL COMMENT '消息来源'; ALTER TABLE gitlink_sys_notification ADD source varchar(250) NULL COMMENT '消息来源';
ALTER TABLE gitlink_sys_notification ADD extra TEXT NULL COMMENT '额外信息(备用字段)'; ALTER TABLE gitlink_sys_notification ADD extra TEXT NULL COMMENT '额外信息(备用字段)';
-- 2023-01-05 更新字符集编码
ALTER TABLE gitlink_sys_notification CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

View File

@ -24,4 +24,7 @@ ALTER TABLE hehui_sys_notification ADD COLUMN (`type` TINYINT(4) NOT NULL DEFAUL
-- 2021-09-10 新增 source 字段区分消息来源、新增 extra 字段保存额外信息 -- 2021-09-10 新增 source 字段区分消息来源、新增 extra 字段保存额外信息
ALTER TABLE hehui_sys_notification ADD source varchar(250) NULL COMMENT '消息来源'; ALTER TABLE hehui_sys_notification ADD source varchar(250) NULL COMMENT '消息来源';
ALTER TABLE hehui_sys_notification ADD extra TEXT NULL COMMENT '额外信息(备用字段)'; ALTER TABLE hehui_sys_notification ADD extra TEXT NULL COMMENT '额外信息(备用字段)';
-- 2023-01-05 更新字符集编码
ALTER TABLE hehui_sys_notification CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

View File

@ -0,0 +1,30 @@
USE gitlink_notification;
-- 2022-02-14 新增红山平台
INSERT INTO gns_platform_info(platform_code,platform_name,created_at,is_delete) VALUES('osredm','红山平台',NOW(),-1);
DROP TABLE IF EXISTS `osredm_sys_notification`;
CREATE TABLE `osredm_sys_notification` (
`id` INT NOT NULL AUTO_INCREMENT,
`sender` INT(11) NOT NULL COMMENT '发送者id',
`receiver` INT(11) NOT NULL COMMENT '接受者id',
`content` TEXT NOT NULL COMMENT '消息内容:富文本',
`notification_url` VARCHAR(2000) DEFAULT NULL COMMENT '消息跳转链接',
`created_at` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
`status` TINYINT(4) NOT NULL DEFAULT 1 COMMENT '已读状态: 1未读2已读',
`is_delete` TINYINT(1) NOT NULL DEFAULT '-1' COMMENT '是否删除: -1未删除1已删除',
PRIMARY KEY (`id`),
KEY `index_on_receiver_and_status` (`receiver`,`status`),
KEY `index_on_status` (`status`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb3;
-- 2021-09-10 区分系统消息类型
ALTER TABLE osredm_sys_notification ADD COLUMN (`type` TINYINT(4) NOT NULL DEFAULT 1 COMMENT '消息类型: 1系统消息2@我');
-- 2021-09-10 新增 source 字段区分消息来源、新增 extra 字段保存额外信息
ALTER TABLE osredm_sys_notification ADD source varchar(250) NULL COMMENT '消息来源';
ALTER TABLE osredm_sys_notification ADD extra TEXT NULL COMMENT '额外信息(备用字段)';
-- 2023-01-05 更新字符集编码
ALTER TABLE osredm_sys_notification CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

View File

@ -41,6 +41,7 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.4.RELEASE</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -95,7 +95,8 @@ public class EmailService {
flag = true; flag = true;
unSentEmailSendRecord.setSentAt(new Date()); unSentEmailSendRecord.setSentAt(new Date());
unSentEmailSendRecord.setStatus(flag ? NotificationSystemConstant.EMAIL_SENT_SUCCESS : NotificationSystemConstant.EMAIL_SENT_FAIL); unSentEmailSendRecord.setStatus(flag ? NotificationSystemConstant.EMAIL_SENT_SUCCESS : NotificationSystemConstant.EMAIL_SENT_FAIL);
} catch (MessagingException e) { } catch (Exception e) {
unSentEmailSendRecord.setStatus(NotificationSystemConstant.EMAIL_SENT_FAIL);
logger.error("发送邮件失败email: " + unSentEmailSendRecord.getEmail() + "\n" + e); logger.error("发送邮件失败email: " + unSentEmailSendRecord.getEmail() + "\n" + e);
} }
} }

0
middleware/end_docker_compose.sh Executable file → Normal file
View File

View File

@ -1,172 +1,181 @@
version: '3' version: '3'
services: services:
mysql: mysql:
image: mysql:${MYSQL_VERSION} image: mysql:${MYSQL_VERSION}
container_name: ${MYSQL_CONTAINER_NAME} container_name: ${MYSQL_CONTAINER_NAME}
hostname: mysql hostname: mysql
environment: environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER} - MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_DATABASE=${MYSQL_DATABASE}
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
volumes: volumes:
- ${DOCKER_DATA_PATH}/mysql:/var/lib/mysql - ${DOCKER_DATA_PATH}/mysql:/var/lib/mysql
- ${SQL_SCRIPT_PATH}/gns-notification.sql:/docker-entrypoint-initdb.d/0001.sql - ${SQL_SCRIPT_PATH}/gns-notification.sql:/docker-entrypoint-initdb.d/0001.sql
- ${SQL_SCRIPT_PATH}/hehui-gns-notification.sql:/docker-entrypoint-initdb.d/0002.sql - ${SQL_SCRIPT_PATH}/hehui-gns-notification.sql:/docker-entrypoint-initdb.d/0002.sql
- ${SQL_SCRIPT_PATH}/gns-email.sql:/docker-entrypoint-initdb.d/0003.sql - ${SQL_SCRIPT_PATH}/gns-email.sql:/docker-entrypoint-initdb.d/0003.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci - ${SQL_SCRIPT_PATH}/osredm-gns-notification.sql:/docker-entrypoint-initdb.d/0004.sql
ports: command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- ${MYSQL_LOCAL_PORT}:3306 ports:
networks: - ${MYSQL_LOCAL_PORT}:3306
- gitlink_network networks:
- gitlink_network
redis: restart: always
image: redis:${REDIS_VERSION}
container_name: ${REDIS_CONTAINER_NAME} redis:
hostname: redis image: redis:${REDIS_VERSION}
volumes: container_name: ${REDIS_CONTAINER_NAME}
- ${DOCKER_DATA_PATH}/redis/data:/data hostname: redis
- ${DOCKER_DATA_PATH}/redis/logs:/logs volumes:
environment: - ${DOCKER_DATA_PATH}/redis/data:/data
- TZ=Asia/Shanghai - ${DOCKER_DATA_PATH}/redis/logs:/logs
ports: environment:
- ${REDIS_LOCAL_PORT}:6379 - TZ=Asia/Shanghai
networks: ports:
- gitlink_network - ${REDIS_LOCAL_PORT}:6379
networks:
# See Also: https://hub.docker.com/r/confluentinc/cp-zookeeper - gitlink_network
zookeeper: restart: always
image: confluentinc/cp-zookeeper:latest
container_name: ${ZOOKEEPER_CONTAINER_NAME} # See Also: https://hub.docker.com/r/confluentinc/cp-zookeeper
hostname: zookeeper zookeeper:
environment: image: confluentinc/cp-zookeeper:latest
ZOOKEEPER_CLIENT_PORT: 2181 container_name: ${ZOOKEEPER_CONTAINER_NAME}
ZOOKEEPER_TICK_TIME: 2000 hostname: zookeeper
ports: environment:
- ${ZOOKEEPER_LOCAL_PORT}:2181 ZOOKEEPER_CLIENT_PORT: 2181
# volumes: ZOOKEEPER_TICK_TIME: 2000
# - ${DOCKER_DATA_PATH}/zookeeper:/var/lib/zookeeper ports:
networks: - ${ZOOKEEPER_LOCAL_PORT}:2181
- gitlink_network # volumes:
# - ${DOCKER_DATA_PATH}/zookeeper:/var/lib/zookeeper
# See Also: https://hub.docker.com/r/confluentinc/cp-kafka networks:
kafka1: - gitlink_network
image: confluentinc/cp-kafka:latest restart: always
container_name: ${KAFKA_CONTAINER_01_NAME}
hostname: kafka1 # See Also: https://hub.docker.com/r/confluentinc/cp-kafka
depends_on: kafka1:
- zookeeper image: confluentinc/cp-kafka:latest
ports: container_name: ${KAFKA_CONTAINER_01_NAME}
- ${KAFKA_01_LOCAL_PORT}:29092 hostname: kafka1
# volumes: depends_on:
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/lib:/var/lib/kafka - zookeeper
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/logs:/var/logs/kafka ports:
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/conf:/etc/kafka - ${KAFKA_01_LOCAL_PORT}:29092
environment: # volumes:
KAFKA_BROKER_ID: 1 # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/lib:/var/lib/kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/logs:/var/logs/kafka
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:${KAFKA_01_LOCAL_PORT} # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_01_NAME}/conf:/etc/kafka
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT environment:
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
networks: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:${KAFKA_01_LOCAL_PORT}
- gitlink_network KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
# See Also: https://hub.docker.com/r/confluentinc/cp-kafka KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka2: networks:
image: confluentinc/cp-kafka:latest - gitlink_network
container_name: ${KAFKA_CONTAINER_02_NAME} restart: always
hostname: kafka2
depends_on: # See Also: https://hub.docker.com/r/confluentinc/cp-kafka
- zookeeper kafka2:
ports: image: confluentinc/cp-kafka:latest
- ${KAFKA_02_LOCAL_PORT}:39092 container_name: ${KAFKA_CONTAINER_02_NAME}
# volumes: hostname: kafka2
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/lib:/var/lib/kafka depends_on:
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/logs:/var/logs/kafka - zookeeper
# - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/conf:/etc/kafka ports:
environment: - ${KAFKA_02_LOCAL_PORT}:39092
KAFKA_BROKER_ID: 2 # volumes:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/lib:/var/lib/kafka
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092,PLAINTEXT_HOST://localhost:${KAFKA_02_LOCAL_PORT} # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/logs:/var/logs/kafka
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT # - ${DOCKER_DATA_PATH}/kafka/${KAFKA_CONTAINER_02_NAME}/conf:/etc/kafka
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT environment:
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_BROKER_ID: 2
networks: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
- gitlink_network KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092,PLAINTEXT_HOST://localhost:${KAFKA_02_LOCAL_PORT}
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
gitlink-reader: KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
container_name: ${GNS_READER_CONTAINER_NAME} KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
hostname: gitlink_reader networks:
image: gitlink/gns-reader:${GITLINK_NOTIFICATION_SYS_VERSION} - gitlink_network
build: restart: always
context: ../
dockerfile: middleware/reader.Dockerfile gitlink-reader:
networks: container_name: ${GNS_READER_CONTAINER_NAME}
- gitlink_network hostname: gitlink_reader
environment: image: gitlink/gns-reader:${GITLINK_NOTIFICATION_SYS_VERSION}
- TZ=Asia/Shanghai build:
volumes: context: ../
- ${DOCKER_DATA_PATH}/gitlink/:/data/logs/ dockerfile: middleware/reader.Dockerfile
depends_on: networks:
- kafka1 - gitlink_network
- kafka2 environment:
- redis - TZ=Asia/Shanghai
- mysql volumes:
ports: - ${DOCKER_DATA_PATH}/gitlink/:/data/logs/
- ${GNS_READER_LOCAL_PORT}:8081 depends_on:
- kafka1
gitlink-writer: - kafka2
container_name: ${GNS_WRITER_CONTAINER_NAME} - redis
hostname: gitlink_writer - mysql
image: gitlink/gns-writer:${GITLINK_NOTIFICATION_SYS_VERSION} ports:
build: - ${GNS_READER_LOCAL_PORT}:8081
context: ../ restart: always
dockerfile: middleware/writer.Dockerfile
networks: gitlink-writer:
- gitlink_network container_name: ${GNS_WRITER_CONTAINER_NAME}
environment: hostname: gitlink_writer
- TZ=Asia/Shanghai image: gitlink/gns-writer:${GITLINK_NOTIFICATION_SYS_VERSION}
volumes: build:
- ${DOCKER_DATA_PATH}/gitlink/:/data/logs/ context: ../
depends_on: dockerfile: middleware/writer.Dockerfile
- kafka1 networks:
- kafka2 - gitlink_network
- redis environment:
- mysql - TZ=Asia/Shanghai
ports: volumes:
- ${GNS_WRITER_LOCAL_PORT}:8082 - ${DOCKER_DATA_PATH}/gitlink/:/data/logs/
depends_on:
gitlink-executor: - kafka1
container_name: ${GNS_EXECUTOR_CONTAINER_NAME} - kafka2
hostname: gitlink_executor - redis
image: gitlink/gns-executor:${GITLINK_NOTIFICATION_SYS_VERSION} - mysql
build: ports:
context: ../ - ${GNS_WRITER_LOCAL_PORT}:8082
dockerfile: middleware/executor.Dockerfile restart: always
networks:
- gitlink_network gitlink-executor:
volumes: container_name: ${GNS_EXECUTOR_CONTAINER_NAME}
- ${DOCKER_DATA_PATH}/gitlink/:/data/logs/ hostname: gitlink_executor
environment: image: gitlink/gns-executor:${GITLINK_NOTIFICATION_SYS_VERSION}
- TZ=Asia/Shanghai build:
depends_on: context: ../
- kafka1 dockerfile: middleware/executor.Dockerfile
- kafka2 networks:
- redis - gitlink_network
- mysql volumes:
ports: - ${DOCKER_DATA_PATH}/gitlink/:/data/logs/
- ${GNS_EXECUTOR_LOCAL_PORT}:8083 environment:
- TZ=Asia/Shanghai
networks: depends_on:
gitlink_network: - kafka1
driver: bridge - kafka2
name: gitlink_network - redis
driver_opts: - mysql
com.docker.network.enable_ipv6: "true" ports:
- ${GNS_EXECUTOR_LOCAL_PORT}:8083
restart: always
networks:
gitlink_network:
driver: bridge
name: gitlink_network
driver_opts:
com.docker.network.enable_ipv6: "true"

0
middleware/start_docker_compose.sh Executable file → Normal file
View File

View File

@ -39,6 +39,7 @@ public interface SysNotificationMapper extends BaseMapper<SysNotification> {
List<SysNotification> getSysNotificationPageList(Page page, String orderBy, List<SysNotification> getSysNotificationPageList(Page page, String orderBy,
@Param("type") int type, @Param("type") int type,
@Param("sources") String sources,
@Param("platform") String platform, @Param("platform") String platform,
@Param("receiver") Integer receiver, @Param("receiver") Integer receiver,
@Param("status") Integer status); @Param("status") Integer status);

View File

@ -36,16 +36,17 @@ public interface SysNotificationService extends IService<SysNotification> {
/** /**
* 获取消息列表 * 获取消息列表
* *
* @param type 类型 -1 全部 1 系统消息2 @我
* @param page 页码
* @param size 页大小
* @param platform 平台编号 * @param platform 平台编号
* @param receiver 消息接收者 * @param receiver 消息接收者
* @param status 状态 -1 全部1 未读 2 已读 * @param status 状态 -1 全部1 未读 2 已读
* @param type 类型 -1 全部 1 系统消息2 @我
* @param sources
* @param page 页码
* @param size 页大小
* @return * @return
*/ */
Page<SysNotification> getNotification(String platform, Integer receiver, Integer status, Integer type, Integer page, Integer size) throws Exception; Page<SysNotification> getNotification(String platform, Integer receiver, Integer status, Integer type, String sources, Integer page, Integer size) throws Exception;
/** /**
* @Description: 批量删除系统消息 * @Description: 批量删除系统消息

View File

@ -28,7 +28,7 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
@Override @Override
@Transactional @Transactional
public boolean sendNotification(NewSysNotificationVo newSysNotificationVo) throws Exception { public boolean sendNotification(NewSysNotificationVo newSysNotificationVo) {
List<SysNotification> sysNotificationList = new ArrayList<>(); List<SysNotification> sysNotificationList = new ArrayList<>();
List<String> list = Arrays.asList(newSysNotificationVo.getReceivers().split(",")); List<String> list = Arrays.asList(newSysNotificationVo.getReceivers().split(","));
for (String receiver : list) { for (String receiver : list) {
@ -51,7 +51,7 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
} }
@Override @Override
public int markNotificationAs(String platform, Integer receiver, String notificationIds, Integer status, Integer type) throws Exception { public int markNotificationAs(String platform, Integer receiver, String notificationIds, Integer status, Integer type) {
int count = baseMapper.updateStatusByNotificationId(platform, receiver, notificationIds, status, type); int count = baseMapper.updateStatusByNotificationId(platform, receiver, notificationIds, status, type);
if (count > 0) { if (count > 0) {
this.delUserCache(platform, receiver); this.delUserCache(platform, receiver);
@ -60,7 +60,7 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
} }
@Override @Override
public int getNotificationCount(String platform, Integer receiver, Integer type, Integer status) throws Exception { public int getNotificationCount(String platform, Integer receiver, Integer type, Integer status) {
String cacheKey = cacheKeyForCount(platform, receiver, type, status); String cacheKey = cacheKeyForCount(platform, receiver, type, status);
Object foundResult = this.redisUtil.get(cacheKey); Object foundResult = this.redisUtil.get(cacheKey);
if (foundResult != null) { if (foundResult != null) {
@ -73,8 +73,8 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
@Override @Override
public Page<SysNotification> getNotification(String platform, Integer receiver, Integer status, Integer type, Integer page, Integer size) throws Exception { public Page<SysNotification> getNotification(String platform, Integer receiver, Integer status, Integer type, String sources, Integer page, Integer size) {
String cacheKey = cacheKeyForPage(platform, receiver, type, status, page, size); String cacheKey = cacheKeyForPage(platform, receiver, type, sources, status, page, size);
Object foundResult = this.redisUtil.get(cacheKey); Object foundResult = this.redisUtil.get(cacheKey);
if (foundResult != null) { if (foundResult != null) {
return (Page<SysNotification>) foundResult; return (Page<SysNotification>) foundResult;
@ -82,7 +82,7 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
Page<SysNotification> pageItem = new Page<SysNotification>(page, size); Page<SysNotification> pageItem = new Page<SysNotification>(page, size);
List<SysNotification> sysNotificationList = baseMapper.getSysNotificationPageList( List<SysNotification> sysNotificationList = baseMapper.getSysNotificationPageList(
pageItem, "", type, platform, receiver, status pageItem, "", type, sources, platform, receiver, status
); );
pageItem.setRecords(sysNotificationList); pageItem.setRecords(sysNotificationList);
this.redisUtil.set(cacheKey, pageItem); this.redisUtil.set(cacheKey, pageItem);
@ -90,7 +90,7 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
} }
@Override @Override
public int deleteNotifications(String platform, Integer receiver, String notificationIds, Integer type) throws Exception { public int deleteNotifications(String platform, Integer receiver, String notificationIds, Integer type) {
int count = baseMapper.deleteNotificationByIds(platform, receiver, notificationIds, type); int count = baseMapper.deleteNotificationByIds(platform, receiver, notificationIds, type);
if (count > 0) { if (count > 0) {
this.delUserCache(platform, receiver); this.delUserCache(platform, receiver);
@ -107,8 +107,8 @@ public class SysNotificationServiceImpl extends ServiceImpl<SysNotificationMappe
return String.format("%s#T%s#S%s#Count", cachePrefixForPlatform(platform, receiver), type, status); return String.format("%s#T%s#S%s#Count", cachePrefixForPlatform(platform, receiver), type, status);
} }
private static String cacheKeyForPage(String platform, Integer receiver, Integer type, Integer status, Integer page, Integer size) { private static String cacheKeyForPage(String platform, Integer receiver, Integer type, String sources, Integer status, Integer page, Integer size) {
return String.format("%s#T%s#S%s#P%s_S%s", cachePrefixForPlatform(platform, receiver), type, status, page, size); return String.format("%s#T%s#%s#S%s#P%s_S%s", cachePrefixForPlatform(platform, receiver), type, sources, status, page, size);
} }
private static String cachePrefixForPlatform(String platform, Integer receiver) { private static String cachePrefixForPlatform(String platform, Integer receiver) {

View File

@ -202,6 +202,12 @@
<if test="status != -1"> <if test="status != -1">
and status = #{status} and status = #{status}
</if> </if>
<if test="sources != null and sources != ''">
and source in
<foreach collection="sources.split(',')" item="sources" open="(" separator="," close=")">
#{sources}
</foreach>
</if>
ORDER BY id DESC ORDER BY id DESC
</select> </select>
<update id="deleteNotificationByIds"> <update id="deleteNotificationByIds">

View File

@ -28,7 +28,7 @@ public class ServiceTests {
@Test @Test
public void testSysNotificationService() throws Exception { public void testSysNotificationService() throws Exception {
int i = sysNotificationService.getNotificationCount("gitlink", 234,1,1); int i = sysNotificationService.getNotificationCount("gitlink", 234,1,1);
Page<SysNotification> sysNotificationPage = sysNotificationService.getNotification("gitlink", 100,1,1,1,20); Page<SysNotification> sysNotificationPage = sysNotificationService.getNotification("gitlink", 100,1,1, "IssueChanged", 1,20);
NewSysNotificationVo newSysNotificationVo = new NewSysNotificationVo(); NewSysNotificationVo newSysNotificationVo = new NewSysNotificationVo();
newSysNotificationVo.setSender(1); newSysNotificationVo.setSender(1);
newSysNotificationVo.setReceivers("7,8"); newSysNotificationVo.setReceivers("7,8");

View File

@ -37,6 +37,7 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.4.RELEASE</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -52,6 +52,9 @@ public class NotificationController {
@ApiParam(value = "消息类型:值为-1时获取全部信息值为1时获取系统消息值为2时获取@我消息", defaultValue = "-1") @ApiParam(value = "消息类型:值为-1时获取全部信息值为1时获取系统消息值为2时获取@我消息", defaultValue = "-1")
@RequestParam(name = "type", required = false, defaultValue = "-1") Integer type, @RequestParam(name = "type", required = false, defaultValue = "-1") Integer type,
@ApiParam(value = "消息来源")
@RequestParam(name = "sources", required = false) String sources,
@ApiParam(value = "页码:值为-1时默认值不开启分页", required = false, defaultValue = "-1") @ApiParam(value = "页码:值为-1时默认值不开启分页", required = false, defaultValue = "-1")
@RequestParam(name = "page", required = false, defaultValue = "-1") Integer page, @RequestParam(name = "page", required = false, defaultValue = "-1") Integer page,
@ -88,7 +91,7 @@ public class NotificationController {
} }
//分页的数据 //分页的数据
Page foundPage = notificationService.getNotification(platform, receiver, status, type, page, size); Page foundPage = notificationService.getNotification(platform, receiver, status, type, sources, page, size);
if (foundPage != null) { if (foundPage != null) {
notificationListVo.setPageNum(foundPage.getCurrent()); notificationListVo.setPageNum(foundPage.getCurrent());
notificationListVo.setPageSize(foundPage.getSize()); notificationListVo.setPageSize(foundPage.getSize());

View File

@ -39,6 +39,7 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.4.RELEASE</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>