Kaynağa Gözat

agent 消息类用量增加,单独创建mapper
标记已读检验自己是否群发最后一个

marxjaw 3 ay önce
ebeveyn
işleme
a6ef3f8a0c

+ 1 - 9
yt-agent/agent-service/src/main/java/com/ytpm/dao/AppUserLoginMapper.java

@@ -1,6 +1,7 @@
 package com.ytpm.dao;
 
 import com.ytpm.app.model.YtAppUserLoginRecord;
+import com.ytpm.middle.model.YtPlatformMessage;
 import com.ytpm.middle.view.MessageVO;
 import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
@@ -26,13 +27,4 @@ public interface AppUserLoginMapper {
      * 查询同一个应用下与当前用户设备型号相同的玩家数量
      */
     Integer getDeviceCount(@Param("userId") String userId, @Param("appId") String appId, @Param("phoneModel") String phoneModel);
-    /**
-     * 查询我的未读消息
-     */
-    List<MessageVO> getUnreadMessage(@Param("userId")String userId);
-
-    /**
-     * 标记消息已读
-     */
-    void markRead(@Param("messageId")String messageId, @Param("userId")String userId);
 }

+ 35 - 0
yt-agent/agent-service/src/main/java/com/ytpm/dao/MessageMapper.java

@@ -0,0 +1,35 @@
+package com.ytpm.dao;
+
+import com.ytpm.middle.model.YtPlatformMessage;
+import com.ytpm.middle.view.MessageRecordVO;
+import com.ytpm.middle.view.MessageVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+
+import java.util.List;
+
+@Mapper
+public interface MessageMapper {
+    /**
+     * 查询我的未读消息
+     */
+    List<MessageVO> getUnreadMessage(@Param("userId")String userId);
+
+    /**
+     * 标记消息已读
+     */
+    void markRead(@Param("messageId")String messageId, @Param("userId")String userId);
+
+    /**
+     * 查询消息信息
+     */
+    YtPlatformMessage queryMessage(@Param("messageId")String messageId);
+
+    /**
+     * 查询消息未被读取的记录
+     */
+    List<MessageRecordVO> queryUnreadRecord(@Param("messageId")String messageId, @Param("userId")String userId);
+
+    void updateById(YtPlatformMessage msg);
+}

+ 33 - 2
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java

@@ -17,10 +17,13 @@ import com.ytpm.dao.AppMapper;
 import com.ytpm.dao.AppUserLoginMapper;
 import com.ytpm.dao.AppVideoWatchMapper;
 import com.ytpm.dao.AppWithdrawMapper;
+import com.ytpm.dao.MessageMapper;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
+import com.ytpm.middle.model.YtPlatformMessage;
+import com.ytpm.middle.view.MessageRecordVO;
 import com.ytpm.middle.view.MessageVO;
 import com.ytpm.service.YtAppUserService;
 import org.springframework.stereotype.Service;
@@ -53,6 +56,8 @@ public class YtAppUserServiceImpl implements YtAppUserService {
     private AgentStaticsMapper staticsMapper;
     @Resource
     private AppFeign appFeign;
+    @Resource
+    private MessageMapper messageMapper;
 
 
     /**
@@ -158,7 +163,7 @@ public class YtAppUserServiceImpl implements YtAppUserService {
      */
     @Override
     public ResultTable<MessageVO> unreadMessage(String userId) {
-        return ResultTable.resultTableOk(new PageInfo<MessageVO>(userLoginMapper.getUnreadMessage(userId)));
+        return ResultTable.resultTableOk(new PageInfo<MessageVO>(messageMapper.getUnreadMessage(userId)));
     }
 
     /**
@@ -166,10 +171,36 @@ public class YtAppUserServiceImpl implements YtAppUserService {
      */
     @Override
     public Result<String> markRead(String messageId, String userId) {
-        userLoginMapper.markRead(messageId,userId);
+        messageMapper.markRead(messageId,userId);
+        //查询当前消息是否群发  如群发需判断是否是最后一个读取消息
+        YtPlatformMessage message = messageMapper.queryMessage(messageId);
+        if(Objects.isNull(message)) {
+           return Result.resultErr(RepMessage.OBJECT_NOT_EXIST);
+        }
+        if(message.getSendType() == 1){ //单发直接修改并返回
+            modifyMessageStatus(messageId,userId);
+            return Result.resultOk(RepMessage.MODIFY_SUCCESS);
+        }
+        //群发需查询除我以外的该消息未读记录,如不存在则我为最后一个需要修改主类已读状态
+        List<MessageRecordVO> vos =  messageMapper.queryUnreadRecord(messageId,userId);
+        if(CollUtil.isNotEmpty(vos)) {
+            Result.resultOk(RepMessage.MODIFY_SUCCESS);
+        }
+        modifyMessageStatus(messageId,userId);
         return Result.resultOk(RepMessage.MODIFY_SUCCESS);
     }
 
+    /**
+     * 修改消息已读状态
+     */
+    private void modifyMessageStatus(String messageId, String userId) {
+        YtPlatformMessage msg = new YtPlatformMessage();
+        msg.setMessageId(messageId);
+        msg.setMessageStatus(1);
+        msg.setUpdateParam(userId);
+        messageMapper.updateById(msg);
+    }
+
 
     /**
      * 查询用户当日播放视频总数

+ 0 - 24
yt-agent/agent-service/src/main/resources/mapper/AppUserLoginMapper.xml

@@ -1,12 +1,6 @@
 <?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.ytpm.dao.AppUserLoginMapper">
-    <update id="markRead">
-        update yt_platform_message_record
-        set recipient_status = 1, update_user_id = #{userId}, update_time = now()
-        where message_id = #{messageId} and recipient = #{userId}
-    </update>
-
     <select id="getLastLoginInfo" resultType="com.ytpm.app.model.YtAppUserLoginRecord">
         select
             record_id, user_id, app_id, login_time, phone_brand, phone_model, login_ip, communication_operator, ip_addr
@@ -32,22 +26,4 @@
             and user_id not in (#{userId})
             and phone_model = #{phoneModel}
     </select>
-    <select id="getUnreadMessage" resultType="com.ytpm.middle.view.MessageVO">
-        select
-            pm.message_id,
-            pm.message_type,
-            pm.message_title,
-            pm.message_content,
-            pm.message_status,
-            pm.send_time,
-            pm.send_type,
-            pm.create_time,
-            pm.create_user_id,
-            pm.update_time,
-            pm.update_user_id,
-            pm.available
-        from yt_platform_message_record pmr
-        join yt_platform_message pm on pmr.message_id = pm.message_id
-        where pmr.recipient = #{userId}
-    </select>
 </mapper>

+ 77 - 0
yt-agent/agent-service/src/main/resources/mapper/MessageMapper.xml

@@ -0,0 +1,77 @@
+<?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.ytpm.dao.MessageMapper">
+    <select id="getUnreadMessage" resultType="com.ytpm.middle.view.MessageVO">
+        select
+            pm.message_id,
+            pm.message_type,
+            pm.message_title,
+            pm.message_content,
+            pm.message_status,
+            pm.send_time,
+            pm.send_type,
+            pm.create_time,
+            pm.create_user_id,
+            pm.update_time,
+            pm.update_user_id,
+            pm.available
+        from yt_platform_message_record pmr
+                 join yt_platform_message pm on pmr.message_id = pm.message_id
+        where pmr.recipient = #{userId}
+    </select>
+
+    <select id="queryMessage" resultType="com.ytpm.middle.model.YtPlatformMessage">
+        select
+            message_id, message_type, message_title, message_content, message_status, send_time, send_type, create_time, create_user_id, update_time, update_user_id, available
+        from yt_platform_message
+        where message_id = #{messageId}
+    </select>
+
+    <select id="queryUnreadRecord" resultType="com.ytpm.middle.view.MessageRecordVO">
+        select
+            record_id, message_id, recipient, recipient_status, recipient_time, create_user_id, create_time, update_user_id, update_time, available
+        from yt_platform_message_record
+        where recipient_status = 0 and message_id = #{messageId}  and recipient not in (#{userId})
+    </select>
+
+    <update id="markRead">
+        update yt_platform_message_record
+        set recipient_status = 1, update_user_id = #{userId}, update_time = now()
+        where message_id = #{messageId} and recipient = #{userId}
+    </update>
+
+    <update id="updateById">
+        update yt_platform_message
+        <set>
+            <if test="messageType != null">
+                message_type = #{messageType},
+            </if>
+            <if test="messageTitle != null">
+                message_title = #{messageTitle},
+            </if>
+            <if test="messageContent != null">
+                message_content = #{messageContent},
+            </if>
+            <if test="messageStatus != null">
+                message_status = #{messageStatus},
+            </if>
+            <if test="sendTime != null">
+                send_time = #{sendTime},
+            </if>
+            <if test="sendType != null">
+                send_type = #{sendType},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+            <if test="updateUserId != null">
+                update_user_id = #{updateUserId},
+            </if>
+            <if test="available != null">
+                available = #{available}
+            </if>
+        </set>
+        where message_id = #{messageId}
+    </update>
+
+</mapper>

+ 2 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/MessageServiceImpl.java

@@ -41,8 +41,10 @@ public class MessageServiceImpl implements MessageService {
         BeanUtils.copyProperties(param, message);
         message.setMessageId(IDUtil.generateFlowID("message"));
         message.setSendTime(new Date());
+        message.setMessageStatus(0);
         messageMapper.insertMessage(message);
         List<String> recipientList = param.getRecipientList();
+
         if(CollUtil.isNotEmpty(recipientList)){
             YtPlatformMessageRecord record = new YtPlatformMessageRecord();
             record.setRecordId(IDUtil.generateFlowID("sendMsg"));

+ 5 - 5
yt-middle/middle-platform/src/main/resources/mapper/MessageMapper.xml

@@ -90,7 +90,7 @@
     <resultMap id="MessageVOMap" type="com.ytpm.middle.view.MessageVO">
         <id column="message_id" property="messageId" />
         <result column="message_type" property="messageType" />
-        <result column="message_title" property="messageContent" />
+        <result column="message_title" property="messageTitle" />
         <result column="message_content" property="messageContent" />
         <result column="message_status" property="messageStatus" />
         <result column="send_time" property="sendTime" />
@@ -125,16 +125,16 @@
         ypmr.recipient_status,
         ypmr.recipient_time
         from yt_platform_message m
-        left join yt_platform.yt_platform_message_record ypmr on m.available = ypmr.available
+        left join yt_platform.yt_platform_message_record ypmr on m.message_id = ypmr.message_id
         <where>
             <if test="messageTitle != null and messageTitle != ''">
-                and message_title like concat('%',#{messageTitle},'%')
+                and m.message_title like concat('%',#{messageTitle},'%')
             </if>
             <if test="messageType != null ">
-                and message_type = #{messageType}
+                and m.message_type = #{messageType}
             </if>
             <if test="messageStatus != null ">
-                and message_status = #{messageStatus}
+                and m.message_status = #{messageStatus}
             </if>
         </where>
     </select>