From 1c7ac77edb8cdd6330ad1fc0958f383bbd064fce Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 11 二月 2026 10:36:50 +0800
Subject: [PATCH] feat: APP已读通告接口、推送携带通知ID
---
src/main/java/com/ruoyi/project/system/domain/SysNotice.java | 5 +-
src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java | 17 ++++++++
src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java | 24 ++++++++----
src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java | 7 +++
src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java | 17 ++++----
5 files changed, 52 insertions(+), 18 deletions(-)
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java b/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java
index 75176f0..5f856f1 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java
@@ -5,17 +5,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.R;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
@@ -99,4 +93,11 @@
{
return toAjax(noticeService.readAll());
}
+
+ @PostMapping("appReadNotice")
+ @ApiOperation("绉诲姩绔牴鎹秷鎭疘D杩涜宸茶")
+ public AjaxResult appReadNotice(@RequestParam("noticeId") Long noticeId) {
+ boolean result = noticeService.appReadNotice(noticeId);
+ return toAjax(result);
+ }
}
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysNotice.java b/src/main/java/com/ruoyi/project/system/domain/SysNotice.java
index b199b72..b88a57c 100644
--- a/src/main/java/com/ruoyi/project/system/domain/SysNotice.java
+++ b/src/main/java/com/ruoyi/project/system/domain/SysNotice.java
@@ -3,8 +3,7 @@
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -20,11 +19,13 @@
* @author ruoyi
*/
@Data
+@TableName("sys_notice")
public class SysNotice
{
private static final long serialVersionUID = 1L;
/** 鍏憡ID */
+ @TableId(value = "notice_id", type = IdType.AUTO)
private Long noticeId;
/** 鍏憡鏍囬 */
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
index ab5d333..f371744 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
@@ -82,4 +82,11 @@
*/
void simpleNoticeAll(final String title, final String message,final String jumpPath);
+ /**
+ * APP鐐瑰嚮鎺ㄩ�佹秷鎭洿鏀逛负宸茶鐘舵��
+ *
+ * @param noticeId 娑堟伅ID
+ * @return 澶辫触/鎴愬姛
+ */
+ boolean appReadNotice(Long noticeId);
}
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
index 2040850..28ec77c 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
@@ -28,6 +28,7 @@
import com.ruoyi.project.system.domain.SysNotice;
import com.ruoyi.project.system.mapper.SysNoticeMapper;
import com.ruoyi.project.system.service.ISysNoticeService;
+import org.springframework.transaction.annotation.Transactional;
/**
* 鍏憡 鏈嶅姟灞傚疄鐜�
@@ -230,4 +231,20 @@
return sysNotice;
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean appReadNotice(Long noticeId) {
+ if (noticeId == null) {
+ return false;
+ }
+ SysNotice sysNotice = noticeMapper.selectNoticeById(noticeId);
+ if (sysNotice == null) {
+ return false;
+ }
+ sysNotice.setStatus("1");
+ return noticeMapper.update(null, Wrappers.<SysNotice>lambdaUpdate()
+ .eq(SysNotice::getNoticeId, noticeId)
+ .eq(SysNotice::getStatus, "0")
+ .set(SysNotice::getStatus, "1")) > 0;
+ }
}
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java b/src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java
index b40cbee..3de2b9e 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java
@@ -1,5 +1,6 @@
package com.ruoyi.project.system.service.impl;
+import com.alibaba.fastjson2.JSON;
import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import com.getui.push.v2.sdk.api.PushApi;
@@ -25,6 +26,7 @@
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -84,6 +86,7 @@
// 鎺ㄩ��
sendRoutingPush(
+ sysNotice.getNoticeId(),
client.getCid(),
sysNotice.getNoticeTitle(),
sysNotice.getRemark() != null ? sysNotice.getRemark() : sysNotice.getNoticeContent(),
@@ -139,18 +142,23 @@
/**
* 鍙戦�佸崟浜鸿矾鐢辨帹閫�
*/
- private void sendRoutingPush(String cid, String title, String content, String targetPath) {
- log.info("鍑嗗鎺ㄩ�佹秷鎭�: CID={}, Title={}, TargetPath={}", cid, title, targetPath);
+ private void sendRoutingPush(Long noticeId, String cid, String title, String content, String targetPath) {
+ log.info("鍑嗗鎺ㄩ�佹秷鎭�:NoticeId={}, CID={}, Title={}, TargetPath={}", noticeId, cid, title, targetPath);
PushDTO<Audience> pushDTO = new PushDTO<>();
pushDTO.setRequestId("REQ_" + System.currentTimeMillis());
// 鍦ㄧ嚎閫忎紶鍐呭
PushMessage pushMessage = new PushMessage();
- String transmissionContent = String.format(
- "{\"title\":\"%s\",\"content\":\"%s\",\"payload\":\"%s\"}",
- title, content, targetPath
- );
+ Map<String, Object> pushMessageMap = new HashMap<>();
+ Map<String, Object> payloadMap = new HashMap<>();
+ pushMessageMap.put("title", title);
+ pushMessageMap.put("content", content);
+ payloadMap.put("url", targetPath);
+ payloadMap.put("noticeId", noticeId);
+ pushMessageMap.put("payload", JSON.toJSONString(payloadMap));
+
+ String transmissionContent = JSON.toJSONString(pushMessageMap);
pushMessage.setTransmission(transmissionContent);
pushDTO.setPushMessage(pushMessage);
@@ -160,7 +168,7 @@
pushDTO.setAudience(audience);
// 绂荤嚎鎺ㄩ�侀�氶亾
- pushDTO.setPushChannel(getPushChannel(title, content, targetPath));
+// pushDTO.setPushChannel(getPushChannel(noticeId, title, content, targetPath));
try {
ApiResult<Map<String, Map<String, String>>> result = pushApi.pushToSingleByCid(pushDTO);
@@ -175,7 +183,7 @@
}
@NotNull
- private PushChannel getPushChannel(String title, String content, String targetPath) {
+ private PushChannel getPushChannel(Long noticeId, String title, String content, String targetPath) {
PushChannel pushChannel = new PushChannel();
AndroidDTO androidDTO = new AndroidDTO();
Ups ups = new Ups();
--
Gitblit v1.9.3