diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
index 68c20a92f2..8ebf604a00 100644
--- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
+++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
@@ -45,6 +45,8 @@ public class ShiroServiceImpl implements ShiroService {
//验证链接
filterChainDefinitionMap.put("/api/link/validate**", ANON);
filterChainDefinitionMap.put("/api/map/areaEntitys/**", ANON);
+ //未读消息数量
+ filterChainDefinitionMap.put("/api/sys_msg/unReadCount", ANON);
filterChainDefinitionMap.put("/**/*.json", ANON);
filterChainDefinitionMap.put("/system/ui/**", ANON);
diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.java
deleted file mode 100644
index 6bb998b724..0000000000
--- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.dataease.base.mapper.ext;
-
-public interface ExtBaseMapper {
-}
diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.xml
deleted file mode 100644
index 72123155c8..0000000000
--- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtBaseMapper.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
- order by
-
- ${order.name} ${order.type}
-
-
-
-
-
-
-
- like CONCAT('%', #{${object}.value},'%')
-
-
- not like CONCAT('%', #{${object}.value},'%')
-
-
- in
-
- #{v}
-
-
-
- not in
-
- #{v}
-
-
-
- between #{${object}.value[0]} and #{${object}.value[1]}
-
-
- > #{${object}.value}
-
-
- < #{${object}.value}
-
-
- >= #{${object}.value}
-
-
- <= #{${object}.value}
-
-
- = '${@io.metersphere.commons.utils.SessionUtils@getUserId()}'
-
-
- = #{${object}.value}
-
-
-
-
-
diff --git a/backend/src/main/java/io/dataease/commons/utils/FileUtils.java b/backend/src/main/java/io/dataease/commons/utils/FileUtils.java
deleted file mode 100644
index e76b24c687..0000000000
--- a/backend/src/main/java/io/dataease/commons/utils/FileUtils.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package io.dataease.commons.utils;
-
-import io.dataease.commons.exception.DEException;
-import io.dataease.i18n.Translator;
-import org.apache.commons.collections4.CollectionUtils;
-import org.aspectj.util.FileUtil;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.*;
-import java.util.List;
-
-public class FileUtils {
- private static final String BODY_FILE_DIR = "/opt/metersphere/data/body";
-
- public static void createBodyFiles(List bodyUploadIds, List bodyFiles) {
- if (CollectionUtils.isNotEmpty(bodyUploadIds) && CollectionUtils.isNotEmpty(bodyFiles)) {
- File testDir = new File(BODY_FILE_DIR);
- if (!testDir.exists()) {
- testDir.mkdirs();
- }
- for (int i = 0; i < bodyUploadIds.size(); i++) {
- MultipartFile item = bodyFiles.get(i);
- File file = new File(BODY_FILE_DIR + "/" + bodyUploadIds.get(i) + "_" + item.getOriginalFilename());
- try (InputStream in = item.getInputStream(); OutputStream out = new FileOutputStream(file)) {
- file.createNewFile();
- FileUtil.copyStream(in, out);
- } catch (IOException e) {
- LogUtil.error(e);
- DEException.throwException(Translator.get("upload_fail"));
- }
- }
- }
- }
-}
diff --git a/backend/src/main/java/io/dataease/controller/sys/MsgController.java b/backend/src/main/java/io/dataease/controller/sys/MsgController.java
index 1b4ce8bc8f..729edbae37 100644
--- a/backend/src/main/java/io/dataease/controller/sys/MsgController.java
+++ b/backend/src/main/java/io/dataease/controller/sys/MsgController.java
@@ -6,6 +6,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.base.domain.SysMsgChannel;
import io.dataease.base.domain.SysMsgSetting;
import io.dataease.base.domain.SysMsgType;
+import io.dataease.commons.exception.DEException;
import io.dataease.commons.utils.AuthUtils;
import io.dataease.commons.utils.PageUtils;
import io.dataease.commons.utils.Pager;
@@ -21,6 +22,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
@Api(tags = "系统:消息管理")
@@ -46,6 +48,16 @@ public class MsgController {
return listPager;
}
+ @ApiOperation("查询未读数量")
+ @PostMapping("/unReadCount")
+ public Long unReadCount(@RequestBody Map request) {
+ if(null == request || null == request.get("userId")) {
+ throw new RuntimeException("缺少用户ID");
+ }
+ Long userId = request.get("userId");
+ return sysMsgService.queryCount(userId);
+ }
+
@ApiOperation("设置已读")
@PostMapping("/setReaded/{msgId}")
public void setReaded(@PathVariable Long msgId) {
diff --git a/backend/src/main/java/io/dataease/service/message/SysMsgService.java b/backend/src/main/java/io/dataease/service/message/SysMsgService.java
index 0bfa10c343..798e0b42a2 100644
--- a/backend/src/main/java/io/dataease/service/message/SysMsgService.java
+++ b/backend/src/main/java/io/dataease/service/message/SysMsgService.java
@@ -105,6 +105,13 @@ public class SysMsgService {
return msgGridDtos;
}
+ public Long queryCount(Long userId) {
+ SysMsgExample example = new SysMsgExample();
+ SysMsgExample.Criteria criteria = example.createCriteria();
+ criteria.andUserIdEqualTo(userId).andStatusEqualTo(false);
+ return sysMsgMapper.countByExample(example);
+ }
+
public void setReaded(Long msgId) {
SysMsg sysMsg = new SysMsg();
sysMsg.setMsgId(msgId);
diff --git a/frontend/src/api/system/msg.js b/frontend/src/api/system/msg.js
index 83accc340f..45ac7c687b 100644
--- a/frontend/src/api/system/msg.js
+++ b/frontend/src/api/system/msg.js
@@ -9,6 +9,15 @@ export function query(pageIndex, pageSize, data) {
})
}
+export function unReadCount(data) {
+ return request({
+ url: '/api/sys_msg/unReadCount',
+ method: 'post',
+ loading: false,
+ data
+ })
+}
+
export function updateStatus(msgId) {
return request({
url: '/api/sys_msg/setReaded/' + msgId,
diff --git a/frontend/src/components/Notification/index.vue b/frontend/src/components/Notification/index.vue
index 6e0d6cae1a..fa07c8e79d 100644
--- a/frontend/src/components/Notification/index.vue
+++ b/frontend/src/components/Notification/index.vue
@@ -53,14 +53,14 @@
class-name="notification"
icon-class="notification"
/>
- {{ paginationConfig.total }}
+ {{ count || paginationConfig.total }}
-
-