mac пре 2 година
родитељ
комит
cab582bf93

+ 8 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/kxsapp/sysMsg/SysMsgPageVO.java

@@ -59,6 +59,14 @@ public class SysMsgPageVO implements Serializable {
 
 
 
+    /**
+     * 0未读 1已读
+     */
+    @Schema(description = "0未读 1已读")
+    private String readFlag;
+
+
+
 
 
 	

+ 23 - 2
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsSysMsgMapper.java

@@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.system.api.model.KxsSysMsg;
 import com.kxs.system.api.vo.kxsapp.sysMsg.SysMsgPageVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 系统消息推送表(KxsSysMsg)表数据库访问层
@@ -19,9 +22,27 @@ public interface KxsSysMsgMapper extends BaseMapper<KxsSysMsg> {
     /**
      * app端分页获取
      *
-     * @param page 页
+     * @param page   页
+     * @param userId 用户ID
+     * @return {@link IPage}<{@link SysMsgPageVO}>
+     */
+    IPage<SysMsgPageVO> getByPage(Page<SysMsgPageVO> page, @Param("userId") Long userId);
+
+    /**
+     * 全部未读消息
+     *
+     * @param userId 用户ID
      * @return {@link IPage}<{@link SysMsgPageVO}>
      */
-    IPage<SysMsgPageVO> getByPage(Page<SysMsgPageVO> page);
+    List<SysMsgPageVO> getList(Long userId);
+
+    /**
+     * 获取未读取计数
+     *
+     * @param userId 用户 ID
+     * @return {@link Long}
+     */
+    Long getNotReadCount(Long userId);
+
 }
 

+ 25 - 8
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsSysMsgServiceImpl.java

@@ -4,16 +4,22 @@ 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.kxs.common.security.util.SecurityUtils;
+import com.kxs.system.api.model.KxsSysMsgRead;
 import com.kxs.system.api.vo.kxsapp.sysMsg.SysMsgPageVO;
 import com.kxs.system.api.vo.kxsapp.sysMsg.SysMsgVO;
 import com.kxs.system.biz.constant.SysConstants;
 import com.kxs.system.biz.mapper.KxsSysMsgMapper;
 import com.kxs.system.api.model.KxsSysMsg;
+import com.kxs.system.biz.mapper.KxsSysMsgReadMapper;
 import com.kxs.system.biz.service.KxsSysMsgService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 系统消息推送表(KxsSysMsg)表服务实现类
@@ -27,20 +33,30 @@ public class KxsSysMsgServiceImpl extends ServiceImpl<KxsSysMsgMapper, KxsSysMsg
 
     private final RedisTemplate<String, Object> redisTemplate;
 
+    private final KxsSysMsgReadMapper kxsSysMsgReadMapper;
+
     @Override
     public IPage<SysMsgPageVO> getByPage(Page<SysMsgPageVO> page) {
+        Long userId = SecurityUtils.getUser().getId();
 
-        return baseMapper.getByPage(page);
+        return baseMapper.getByPage(page, userId);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void readAll() {
 
         Long userId = SecurityUtils.getUser().getId();
-        //系统消息存储的key
-        String key = SysConstants.KXS_SYS_MSG_PREFIX + userId;
 
-        redisTemplate.delete(key);
+        List<SysMsgPageVO> list = baseMapper.getList(userId);
+
+        for (SysMsgPageVO sysMsgPageVO : list) {
+            KxsSysMsgRead kxsSysMsgRead = new KxsSysMsgRead();
+            kxsSysMsgRead.setMsgId(sysMsgPageVO.getId());
+            kxsSysMsgRead.setUserId(Math.toIntExact(userId));
+            kxsSysMsgReadMapper.insert(kxsSysMsgRead);
+        }
+
     }
 
     @Override
@@ -52,14 +68,15 @@ public class KxsSysMsgServiceImpl extends ServiceImpl<KxsSysMsgMapper, KxsSysMsg
         }
 
         Long userId = SecurityUtils.getUser().getId();
-        //系统消息存储的key
-        String key = SysConstants.KXS_SYS_MSG_PREFIX + userId;
+        //已读消息
+        KxsSysMsgRead kxsSysMsgRead = new KxsSysMsgRead();
+        kxsSysMsgRead.setMsgId(kxsSysMsg.getId());
+        kxsSysMsgRead.setUserId(Math.toIntExact(userId));
+        kxsSysMsgReadMapper.insert(kxsSysMsgRead);
 
         SysMsgVO sysMsgVO = new SysMsgVO();
         BeanUtils.copyProperties(kxsSysMsg, sysMsgVO);
 
-        //已读消息
-        redisTemplate.opsForList().remove(key,1, id);
 
         return sysMsgVO;
     }

+ 5 - 2
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsUserMsgServiceImpl.java

@@ -11,6 +11,8 @@ import com.kxs.system.api.vo.kxsapp.NotReadCountVo;
 import com.kxs.system.api.vo.kxsapp.userMsg.UserMsgPageVO;
 import com.kxs.system.api.vo.kxsapp.userMsg.UserMsgVO;
 import com.kxs.system.biz.constant.SysConstants;
+import com.kxs.system.biz.mapper.KxsSysMsgMapper;
+import com.kxs.system.biz.mapper.KxsSysMsgReadMapper;
 import com.kxs.system.biz.mapper.KxsUserMsgMapper;
 import com.kxs.system.biz.service.KxsUserMsgService;
 import lombok.RequiredArgsConstructor;
@@ -33,6 +35,8 @@ public class KxsUserMsgServiceImpl extends ServiceImpl<KxsUserMsgMapper, KxsUser
 
     private final RedisTemplate<String, Object> redisTemplate;
 
+    private final KxsSysMsgMapper kxsSysMsgMapper;
+
     @Override
     public IPage<UserMsgPageVO> getByPage(Page<UserMsgPageVO> page) {
 
@@ -75,8 +79,7 @@ public class KxsUserMsgServiceImpl extends ServiceImpl<KxsUserMsgMapper, KxsUser
 
         Long userId = SecurityUtils.getUser().getId();
         //系统消息存储的key
-        String key = SysConstants.KXS_SYS_MSG_PREFIX + userId;
-        Long sysCount = redisTemplate.opsForList().size(key);
+        Long sysCount = kxsSysMsgMapper.getNotReadCount(userId);
         notReadCountVo.setPlacardCount(sysCount);
 
         //个人消息未读数

+ 36 - 16
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsSysMsgMapper.xml

@@ -3,30 +3,50 @@
 <mapper namespace="com.kxs.system.biz.mapper.KxsSysMsgMapper">
 
     <resultMap type="com.kxs.system.api.model.KxsSysMsg" id="KxsSysMsgMap">
-        <result column="id" property="id" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="del_flag" property="delFlag" />
-        <result column="version" property="version" />
-        <result column="title" property="title" />
-        <result column="summary" property="summary" />
-        <result column="msg_type" property="msgType" />
-        <result column="start_time" property="startTime" />
-        <result column="end_time" property="endTime" />
-        <result column="bg_pic" property="bgPic" />
-        <result column="push_type" property="pushType" />
-        <result column="push_time" property="pushTime" />
-        <result column="url" property="url" />
-        <result column="content" property="content" />
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="del_flag" property="delFlag"/>
+        <result column="version" property="version"/>
+        <result column="title" property="title"/>
+        <result column="summary" property="summary"/>
+        <result column="msg_type" property="msgType"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="bg_pic" property="bgPic"/>
+        <result column="push_type" property="pushType"/>
+        <result column="push_time" property="pushTime"/>
+        <result column="url" property="url"/>
+        <result column="content" property="content"/>
 
     </resultMap>
 
     <select id="getByPage" resultType="com.kxs.system.api.vo.kxsapp.sysMsg.SysMsgPageVO">
-        select id, title, summary, msg_type, push_time, url from kxs_sys_msg a
+        select a.id, title, summary, msg_type, push_time, url, case when b.id is null then 0 else 1 end readFlag from
+        kxs_sys_msg a
+        left join
+        (select msg_id, user_id from kxs_sys_msg_read where user_id = #{userId} GROUP BY msg_id )
+        as b on a.id = b.msg_id
         <where>
             a.del_flag = '0'
         </where>
         order by a.create_time desc
     </select>
+    <select id="getList" resultType="com.kxs.system.api.vo.kxsapp.sysMsg.SysMsgPageVO">
+        select a.id from kxs_sys_msg a
+        left join kxs_sys_msg_read b on a.id = b.msg_id and b.user_id = #{userId}
+        <where>
+            a.del_flag = '0'
+            and b.id is null
+        </where>
+    </select>
+    <select id="getNotReadCount" resultType="java.lang.Long">
+        select count(a.id) from kxs_sys_msg a
+        left join kxs_sys_msg_read b on a.id = b.msg_id and b.user_id = #{userId}
+        <where>
+            a.del_flag = '0'
+            and b.id is null
+        </where>
+    </select>
 
 </mapper>

+ 0 - 2
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsUserMsgMapper.xml

@@ -17,8 +17,6 @@
         <result column="push_type" property="pushType" />
         <result column="push_time" property="pushTime" />
         <result column="url" property="url" />
-        <result column="codes" property="codes" />
-        <result column="is_all" property="isAll" />
         <result column="content" property="content" />
         <result column="read_flag" property="readFlag" />
 

+ 1 - 1
kxs-transfer/src/main/java/com/kxs/transfer/api/controller/DtsController.java

@@ -159,7 +159,7 @@ public class DtsController {
             //盟主表
             if ("Leaders".equals(dmlData.getTableName())) {
                 kxsLeaderService.changeData(dmlData);
-             }
+            }
             //盟主金额变动记录表
             if ("LeaderReserveRecord".equals(dmlData.getTableName())) {
                 kxsLeaderAmountLogService.changeData(dmlData);