Pārlūkot izejas kodu

查询通知公告;标记已读

yangfeng 1 gadu atpakaļ
vecāks
revīzija
f9ce2e55aa

+ 1 - 1
web/src/main/java/com/ynfy/app/api/v1/util/TokenUtil.java → core/src/main/java/org/jeecg/common/util/TokenUtil.java

@@ -1,4 +1,4 @@
-package com.ynfy.app.api.v1.util;
+package org.jeecg.common.util;
 
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.exception.JeecgBootException;

+ 9 - 2
system/system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -106,8 +107,8 @@ public class SysAnnouncement implements Serializable {
     /**
      * 创建时间
      */
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private java.util.Date createTime;
     /**
      * 更新人
@@ -165,4 +166,10 @@ public class SysAnnouncement implements Serializable {
 
     /**租户ID*/
     private Integer tenantId;
+
+    /**
+     * 查询谁的消息
+     */
+    @TableField(exist = false)
+    private String userId;
 }

+ 13 - 9
system/system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java

@@ -1,33 +1,34 @@
 package org.jeecg.modules.system.mapper;
 
-import java.util.Date;
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @Description: 系统通告表
  * @Author: jeecg-boot
- * @Date:  2019-01-02
+ * @Date: 2019-01-02
  * @Version: V1.0
  */
 public interface SysAnnouncementMapper extends BaseMapper<SysAnnouncement> {
 
     /**
      * 通过消息类型和用户id获取系统通告
+     *
      * @param page
-     * @param userId 用户id
+     * @param userId      用户id
      * @param msgCategory 消息类型
      * @return
      */
-	List<SysAnnouncement> querySysCementListByUserId(Page<SysAnnouncement> page, @Param("userId")String userId,@Param("msgCategory")String msgCategory);
+    List<SysAnnouncement> querySysCementListByUserId(Page<SysAnnouncement> page, @Param("userId") String userId, @Param("msgCategory") String msgCategory);
 
     /**
      * 分页查询消息列表
+     *
      * @param page
      * @param userId
      * @param fromUser
@@ -35,5 +36,8 @@ public interface SysAnnouncementMapper extends BaseMapper<SysAnnouncement> {
      * @param endDate
      * @return
      */
-	List<SysAnnouncement> queryMessageList(Page<SysAnnouncement> page, @Param("userId")String userId, @Param("fromUser")String fromUser, @Param("starFlag")String starFlag, @Param("beginDate")Date beginDate, @Param("endDate")Date endDate);
+    List<SysAnnouncement> queryMessageList(Page<SysAnnouncement> page, @Param("userId") String userId, @Param("fromUser") String fromUser, @Param("starFlag") String starFlag, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
+
+    List<SysAnnouncement> listNoRead(@Param("announcement") SysAnnouncement announcement);
+
 }

+ 25 - 0
system/system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml

@@ -67,5 +67,30 @@
 		</if>
 	   order by b.read_flag ASC,a.create_time DESC
 	</select>
+
+	<select id="listNoRead"  resultMap="SysAnnouncement">
+		SELECT
+			*
+		FROM
+			sys_announcement
+		WHERE
+			send_status = '1'
+			and del_flag='0'
+			<if test="announcement!=null and announcement.msgCategory!=null and announcement.msgCategory!=''">
+				and msg_category = #{announcement.msgCategory}
+			</if>
+		    <if test="announcement!=null and announcement.userId != null and announcement.userId != ''">
+			   AND ID IN (
+			   SELECT
+					annt_id
+			   FROM
+					sys_announcement_send ase
+			   WHERE
+				   user_id = #{announcement.userId}
+				   AND read_flag = '0'
+			   )
+		    </if>
+		ORDER BY send_time DESC
+	</select>
 	
 </mapper>

+ 16 - 10
system/system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java

@@ -10,45 +10,49 @@ import java.util.List;
 /**
  * @Description: 系统通告表
  * @Author: jeecg-boot
- * @Date:  2019-01-02
+ * @Date: 2019-01-02
  * @Version: V1.0
  */
 public interface ISysAnnouncementService extends IService<SysAnnouncement> {
 
     /**
      * 保存系统通告
+     *
      * @param sysAnnouncement
      */
-	public void saveAnnouncement(SysAnnouncement sysAnnouncement);
+    public void saveAnnouncement(SysAnnouncement sysAnnouncement);
 
     /**
      * 修改系统通告
+     *
      * @param sysAnnouncement
      * @return
      */
-	public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement);
+    public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement);
 
     /**
      * 保存系统通告
-     * @param title 标题
+     *
+     * @param title      标题
      * @param msgContent 信息内容
      */
-	public void saveSysAnnouncement(String title, String msgContent);
+    public void saveSysAnnouncement(String title, String msgContent);
 
     /**
      * 分页查询系统通告
-     * @param page 当前页数
-     * @param userId 用户id
+     *
+     * @param page        当前页数
+     * @param userId      用户id
      * @param msgCategory 消息类型
      * @return Page<SysAnnouncement>
      */
-	public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page, String userId, String msgCategory);
+    public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page, String userId, String msgCategory);
 
 
     /**
-     *  补全当前登录用户的消息阅读记录 
+     * 补全当前登录用户的消息阅读记录
      */
-	void completeAnnouncementSendInfo();
+    void completeAnnouncementSendInfo();
 
 
     /**
@@ -61,5 +65,7 @@ public interface ISysAnnouncementService extends IService<SysAnnouncement> {
      */
     void updateReaded(List<String> annoceIdList);
 
+    List<SysAnnouncement> listNoRead(SysAnnouncement announcement);
 
+    void readMessage(String id, String userId);
 }

+ 186 - 148
system/system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.LoginUser;
@@ -12,9 +13,12 @@ import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.mapper.SysAnnouncementMapper;
 import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
+import org.jeecg.modules.system.service.ISysAnnouncementSendService;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.Arrays;
@@ -25,164 +29,198 @@ import java.util.List;
 /**
  * @Description: 系统通告表
  * @Author: jeecg-boot
- * @Date:  2019-01-02
+ * @Date: 2019-01-02
  * @Version: V1.0
  */
 @Service
 @Slf4j
 public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMapper, SysAnnouncement> implements ISysAnnouncementService {
 
-	@Resource
-	private SysAnnouncementMapper sysAnnouncementMapper;
-	
-	@Resource
-	private SysAnnouncementSendMapper sysAnnouncementSendMapper;
-	
-	@Transactional(rollbackFor = Exception.class)
-	@Override
-	public void saveAnnouncement(SysAnnouncement sysAnnouncement) {
-		if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) {
-			sysAnnouncementMapper.insert(sysAnnouncement);
-		}else {
-			// 1.插入通告表记录
-			sysAnnouncementMapper.insert(sysAnnouncement);
-			// 2.插入用户通告阅读标记表记录
-			String userId = sysAnnouncement.getUserIds();
-			String[] userIds = userId.substring(0, (userId.length()-1)).split(",");
-			String anntId = sysAnnouncement.getId();
-			Date refDate = new Date();
-			for(int i=0;i<userIds.length;i++) {
-				SysAnnouncementSend announcementSend = new SysAnnouncementSend();
-				announcementSend.setAnntId(anntId);
-				announcementSend.setUserId(userIds[i]);
-				announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
-				announcementSend.setReadTime(refDate);
-				sysAnnouncementSendMapper.insert(announcementSend);
-			}
-		}
-	}
-	
-	/**
-	 * @功能:编辑消息信息
-	 */
-	@Transactional(rollbackFor = Exception.class)
-	@Override
-	public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement) {
-		// 1.更新系统信息表数据
-		sysAnnouncementMapper.updateById(sysAnnouncement);
-		String userId = sysAnnouncement.getUserIds();
-		if(oConvertUtils.isNotEmpty(userId)&&sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_UESR)) {
-			// 2.补充新的通知用户数据
-			String[] userIds = userId.substring(0, (userId.length()-1)).split(",");
-			String anntId = sysAnnouncement.getId();
-			Date refDate = new Date();
-			for(int i=0;i<userIds.length;i++) {
-				LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<SysAnnouncementSend>();
-				queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId);
-				queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]);
-				List<SysAnnouncementSend> announcementSends=sysAnnouncementSendMapper.selectList(queryWrapper);
-				if(announcementSends.size()<=0) {
-					SysAnnouncementSend announcementSend = new SysAnnouncementSend();
-					announcementSend.setAnntId(anntId);
-					announcementSend.setUserId(userIds[i]);
-					announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
-					announcementSend.setReadTime(refDate);
-					sysAnnouncementSendMapper.insert(announcementSend);
-				}
-			}
-			// 3. 删除多余通知用户数据
-			Collection<String> delUserIds = Arrays.asList(userIds);
-			LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<SysAnnouncementSend>();
-			queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds);
-			queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId);
-			sysAnnouncementSendMapper.delete(queryWrapper);
-		}
-		return true;
-	}
+    @Resource
+    private SysAnnouncementMapper sysAnnouncementMapper;
+
+    @Resource
+    private SysAnnouncementSendMapper sysAnnouncementSendMapper;
+
+    @Autowired
+    private ISysAnnouncementSendService announcementSendService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveAnnouncement(SysAnnouncement sysAnnouncement) {
+        if (sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) {
+            sysAnnouncementMapper.insert(sysAnnouncement);
+        } else {
+            // 1.插入通告表记录
+            sysAnnouncementMapper.insert(sysAnnouncement);
+            // 2.插入用户通告阅读标记表记录
+            String userId = sysAnnouncement.getUserIds();
+            String[] userIds = userId.substring(0, (userId.length() - 1)).split(",");
+            String anntId = sysAnnouncement.getId();
+            Date refDate = new Date();
+            for (int i = 0; i < userIds.length; i++) {
+                SysAnnouncementSend announcementSend = new SysAnnouncementSend();
+                announcementSend.setAnntId(anntId);
+                announcementSend.setUserId(userIds[i]);
+                announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
+                announcementSend.setReadTime(refDate);
+                sysAnnouncementSendMapper.insert(announcementSend);
+            }
+        }
+    }
+
+    /**
+     * @功能:编辑消息信息
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement) {
+        // 1.更新系统信息表数据
+        sysAnnouncementMapper.updateById(sysAnnouncement);
+        String userId = sysAnnouncement.getUserIds();
+        if (oConvertUtils.isNotEmpty(userId) && sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_UESR)) {
+            // 2.补充新的通知用户数据
+            String[] userIds = userId.substring(0, (userId.length() - 1)).split(",");
+            String anntId = sysAnnouncement.getId();
+            Date refDate = new Date();
+            for (int i = 0; i < userIds.length; i++) {
+                LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<SysAnnouncementSend>();
+                queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId);
+                queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]);
+                List<SysAnnouncementSend> announcementSends = sysAnnouncementSendMapper.selectList(queryWrapper);
+                if (announcementSends.size() <= 0) {
+                    SysAnnouncementSend announcementSend = new SysAnnouncementSend();
+                    announcementSend.setAnntId(anntId);
+                    announcementSend.setUserId(userIds[i]);
+                    announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
+                    announcementSend.setReadTime(refDate);
+                    sysAnnouncementSendMapper.insert(announcementSend);
+                }
+            }
+            // 3. 删除多余通知用户数据
+            Collection<String> delUserIds = Arrays.asList(userIds);
+            LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<SysAnnouncementSend>();
+            queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds);
+            queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId);
+            sysAnnouncementSendMapper.delete(queryWrapper);
+        }
+        return true;
+    }
 
     /**
      * 流程执行完成保存消息通知
-     * @param title 标题
+     *
+     * @param title      标题
      * @param msgContent 信息内容
      */
-	@Override
-	public void saveSysAnnouncement(String title, String msgContent) {
-		SysAnnouncement announcement = new SysAnnouncement();
-		announcement.setTitile(title);
-		announcement.setMsgContent(msgContent);
-		announcement.setSender("JEECG BOOT");
-		announcement.setPriority(CommonConstant.PRIORITY_L);
-		announcement.setMsgType(CommonConstant.MSG_TYPE_ALL);
-		announcement.setSendStatus(CommonConstant.HAS_SEND);
-		announcement.setSendTime(new Date());
-		announcement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
-		sysAnnouncementMapper.insert(announcement);
-	}
-
-	@Override
-	public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page, String userId, String msgCategory) {
-		if (page.getSize() == -1) {
-			return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(null, userId, msgCategory));
-		} else {
-			return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory));
-		}
-	}
-
-	@Override
-	public void completeAnnouncementSendInfo() {
-		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		String userId = sysUser.getId();
-		// 1.将系统消息补充到用户通告阅读标记表中
-		LambdaQueryWrapper<SysAnnouncement> querySaWrapper = new LambdaQueryWrapper<SysAnnouncement>();
-		//全部人员
-		querySaWrapper.eq(SysAnnouncement::getMsgType, CommonConstant.MSG_TYPE_ALL);
-		//未删除
-		querySaWrapper.eq(SysAnnouncement::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		//已发布
-		querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND);
-		//新注册用户不看结束通知
-		querySaWrapper.ge(SysAnnouncement::getEndTime, sysUser.getCreateTime());
-		//update-begin--Author:liusq  Date:20210108 for:[JT-424] 【开源issue】bug处理--------------------
-		querySaWrapper.notInSql(SysAnnouncement::getId,"select annt_id from sys_announcement_send where user_id='"+userId+"'");
-		//update-begin--Author:liusq  Date:20210108  for: [JT-424] 【开源issue】bug处理--------------------
-		List<SysAnnouncement> announcements = this.list(querySaWrapper);
-		if(announcements.size()>0) {
-			for(int i=0;i<announcements.size();i++) {
-				//update-begin--Author:wangshuai  Date:20200803  for: 通知公告消息重复LOWCOD-759--------------------
-				//因为websocket没有判断是否存在这个用户,要是判断会出现问题,故在此判断逻辑
-				LambdaQueryWrapper<SysAnnouncementSend> query = new LambdaQueryWrapper<>();
-				query.eq(SysAnnouncementSend::getAnntId,announcements.get(i).getId());
-				query.eq(SysAnnouncementSend::getUserId,userId);
-				SysAnnouncementSend one = sysAnnouncementSendMapper.selectOne(query);
-				if(null==one){
-					SysAnnouncementSend announcementSend = new SysAnnouncementSend();
-					announcementSend.setAnntId(announcements.get(i).getId());
-					announcementSend.setUserId(userId);
-					announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
-					sysAnnouncementSendMapper.insert(announcementSend);
-					log.info("announcementSend.toString()",announcementSend.toString());
-				}
-				//update-end--Author:wangshuai  Date:20200803  for: 通知公告消息重复LOWCOD-759------------
-			}
-		}
-		
-	}
-
-	@Override
-	public List<SysAnnouncement> querySysMessageList(int pageSize, int pageNo, String fromUser, String starFlag, Date beginDate, Date endDate) {
-		//1. 补全send表的数据
-		completeAnnouncementSendInfo();
-		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		Page<SysAnnouncement> page = new Page<SysAnnouncement>(pageNo,pageSize);
-		// 2. 查询消息数据
-		List<SysAnnouncement> list = baseMapper.queryMessageList(page, sysUser.getId(), fromUser, starFlag, beginDate, endDate);
-		return list;
-	}
-
-	@Override
-	public void updateReaded(List<String> annoceIdList) {
-		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList);
-	}
+    @Override
+    public void saveSysAnnouncement(String title, String msgContent) {
+        SysAnnouncement announcement = new SysAnnouncement();
+        announcement.setTitile(title);
+        announcement.setMsgContent(msgContent);
+        announcement.setSender("JEECG BOOT");
+        announcement.setPriority(CommonConstant.PRIORITY_L);
+        announcement.setMsgType(CommonConstant.MSG_TYPE_ALL);
+        announcement.setSendStatus(CommonConstant.HAS_SEND);
+        announcement.setSendTime(new Date());
+        announcement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+        sysAnnouncementMapper.insert(announcement);
+    }
+
+    @Override
+    public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page, String userId, String msgCategory) {
+        if (page.getSize() == -1) {
+            return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(null, userId, msgCategory));
+        } else {
+            return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory));
+        }
+    }
+
+    @Override
+    public void completeAnnouncementSendInfo() {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = sysUser.getId();
+        // 1.将系统消息补充到用户通告阅读标记表中
+        LambdaQueryWrapper<SysAnnouncement> querySaWrapper = new LambdaQueryWrapper<SysAnnouncement>();
+        //全部人员
+        querySaWrapper.eq(SysAnnouncement::getMsgType, CommonConstant.MSG_TYPE_ALL);
+        //未删除
+        querySaWrapper.eq(SysAnnouncement::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        //已发布
+        querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND);
+        //新注册用户不看结束通知
+        querySaWrapper.ge(SysAnnouncement::getEndTime, sysUser.getCreateTime());
+        //update-begin--Author:liusq  Date:20210108 for:[JT-424] 【开源issue】bug处理--------------------
+        querySaWrapper.notInSql(SysAnnouncement::getId, "select annt_id from sys_announcement_send where user_id='" + userId + "'");
+        //update-begin--Author:liusq  Date:20210108  for: [JT-424] 【开源issue】bug处理--------------------
+        List<SysAnnouncement> announcements = this.list(querySaWrapper);
+        if (announcements.size() > 0) {
+            for (int i = 0; i < announcements.size(); i++) {
+                //update-begin--Author:wangshuai  Date:20200803  for: 通知公告消息重复LOWCOD-759--------------------
+                //因为websocket没有判断是否存在这个用户,要是判断会出现问题,故在此判断逻辑
+                LambdaQueryWrapper<SysAnnouncementSend> query = new LambdaQueryWrapper<>();
+                query.eq(SysAnnouncementSend::getAnntId, announcements.get(i).getId());
+                query.eq(SysAnnouncementSend::getUserId, userId);
+                SysAnnouncementSend one = sysAnnouncementSendMapper.selectOne(query);
+                if (null == one) {
+                    SysAnnouncementSend announcementSend = new SysAnnouncementSend();
+                    announcementSend.setAnntId(announcements.get(i).getId());
+                    announcementSend.setUserId(userId);
+                    announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
+                    sysAnnouncementSendMapper.insert(announcementSend);
+                    log.info("announcementSend.toString()", announcementSend.toString());
+                }
+                //update-end--Author:wangshuai  Date:20200803  for: 通知公告消息重复LOWCOD-759------------
+            }
+        }
+
+    }
+
+    @Override
+    public List<SysAnnouncement> querySysMessageList(int pageSize, int pageNo, String fromUser, String starFlag, Date beginDate, Date endDate) {
+        //1. 补全send表的数据
+        completeAnnouncementSendInfo();
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        Page<SysAnnouncement> page = new Page<SysAnnouncement>(pageNo, pageSize);
+        // 2. 查询消息数据
+        List<SysAnnouncement> list = baseMapper.queryMessageList(page, sysUser.getId(), fromUser, starFlag, beginDate, endDate);
+        return list;
+    }
+
+    @Override
+    public void updateReaded(List<String> annoceIdList) {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList);
+    }
+
+    @Override
+    public List<SysAnnouncement> listNoRead(SysAnnouncement announcement) {
+        return sysAnnouncementMapper.listNoRead(announcement);
+    }
+
+    @Override
+    public void readMessage(String id, String userId) {
+        //未登录的话
+        if (StringUtils.isBlank(userId)) {
+            return;
+        }
+        LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysAnnouncementSend::getAnntId, id);
+        queryWrapper.eq(SysAnnouncementSend::getUserId, userId);
+        List<SysAnnouncementSend> messageUserList = announcementSendService.list(queryWrapper);
+        if (CollectionUtils.isEmpty(messageUserList)) {
+            SysAnnouncementSend messageUser = new SysAnnouncementSend();
+            messageUser.setAnntId(id);
+            messageUser.setUserId(userId);
+            messageUser.setReadFlag(CommonConstant.HAS_READ_FLAG);
+            messageUser.setReadTime(new Date());
+            announcementSendService.save(messageUser);
+        } else {
+            SysAnnouncementSend messageUser = messageUserList.get(0);
+            messageUser.setReadFlag(CommonConstant.HAS_READ_FLAG);
+            messageUser.setReadTime(new Date());
+            announcementSendService.updateById(messageUser);
+        }
+    }
 
 }

+ 1 - 1
web/src/main/java/com/ynfy/app/api/v1/controller/ApiCourseController.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.app.api.v1.annoation.IgnoreAuth;
 import com.ynfy.app.api.v1.entity.dto.CourseDTO;
-import com.ynfy.app.api.v1.util.TokenUtil;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
@@ -19,6 +18,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtil;
 import org.jeecg.modules.system.service.ISysPositionService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 2
web/src/main/java/com/ynfy/app/api/v1/controller/ApiExamController.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.app.api.v1.annoation.IgnoreAuth;
 import com.ynfy.app.api.v1.entity.dto.ExamDTO;
-import com.ynfy.app.api.v1.util.TokenUtil;
 import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
 import com.ynfy.buss.exam.exam.dto.QuestionTypeCountDTO;
 import com.ynfy.buss.exam.exam.entity.Exam;
@@ -21,12 +20,12 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtil;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Objects;
 

+ 65 - 10
web/src/main/java/com/ynfy/app/api/v1/controller/ApiIndexController.java

@@ -3,22 +3,22 @@ package com.ynfy.app.api.v1.controller;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ynfy.app.api.v1.annoation.IgnoreAuth;
-import com.ynfy.app.api.v1.util.TokenUtil;
 import com.ynfy.buss.banner.service.IBannerService;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.exam.exam.entity.Exam;
 import com.ynfy.buss.exam.exam.service.IExamService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.util.TokenUtil;
 import org.jeecg.modules.system.entity.SysAnnouncement;
+import org.jeecg.modules.system.entity.SysAnnouncementSend;
+import org.jeecg.modules.system.service.ISysAnnouncementSendService;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Objects;
@@ -32,7 +32,10 @@ public class ApiIndexController extends ApiBaseController {
     private IBannerService bannerService;
 
     @Autowired
-    private ISysAnnouncementService sysAnnouncementService;
+    private ISysAnnouncementService announcementService;
+
+    @Autowired
+    private ISysAnnouncementSendService announcementSendService;
 
     @Autowired
     private ICourseService courseService;
@@ -48,18 +51,70 @@ public class ApiIndexController extends ApiBaseController {
     }
 
     /**
-     * 通知公告
+     * 查询通知公告
      *
      * @return
      */
     @IgnoreAuth
     @PostMapping("/announcement/list")
     public Result<?> announcementList() {
-        LambdaQueryWrapper<SysAnnouncement> query = new LambdaQueryWrapper<>();
-        query.eq(SysAnnouncement::getDelFlag, CommonConstant.DEL_FLAG_0);
-        return Result.OK(sysAnnouncementService.list(query));
+        String userId = TokenUtil.getUserId(TokenUtil.getToken(request));
+        // 1.将系统消息补充到用户通告阅读标记表中
+        LambdaQueryWrapper<SysAnnouncement> querySaWrapper = new LambdaQueryWrapper<SysAnnouncement>();
+        //全部人员
+        querySaWrapper.eq(SysAnnouncement::getMsgType, CommonConstant.MSG_TYPE_ALL);
+        //未删除
+        querySaWrapper.eq(SysAnnouncement::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        //已发布
+        querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND);
+        if (StringUtils.isNotBlank(userId)) {
+            querySaWrapper.notInSql(SysAnnouncement::getId, "select annt_id from sys_announcement_send where user_id='" + userId + "'");
+        }
+        List<SysAnnouncement> announcements = announcementService.list(querySaWrapper);
+        if (!CollectionUtils.isEmpty(announcements) && StringUtils.isNotBlank(userId)) {
+            for (SysAnnouncement ann : announcements) {
+                LambdaQueryWrapper<SysAnnouncementSend> query = new LambdaQueryWrapper<>();
+                query.eq(SysAnnouncementSend::getAnntId, ann.getId());
+                query.eq(SysAnnouncementSend::getUserId, userId);
+                SysAnnouncementSend sendUser = announcementSendService.getOne(query);
+                if (Objects.isNull(sendUser)) {
+                    SysAnnouncementSend announcementSend = new SysAnnouncementSend();
+                    announcementSend.setAnntId(ann.getId());
+                    announcementSend.setUserId(userId);
+                    announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
+                    announcementSendService.save(announcementSend);
+                }
+            }
+        }
+
+        SysAnnouncement announcement = new SysAnnouncement();
+        announcement.setUserId(userId);
+        List<SysAnnouncement> pageList = announcementService.listNoRead(announcement);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 查看通知公告
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/viewMessage")
+    public Result<?> viewMessage(@RequestParam String id) {
+        String userId = TokenUtil.getUserId(TokenUtil.getToken(request));
+        SysAnnouncement announcement = announcementService.getById(id);
+
+        if (!Objects.isNull(announcement)) {
+            if (StringUtils.isNotBlank(userId)) {
+                //阅读通知公告
+                announcementService.readMessage(id, userId);
+            }
+            return Result.OK(announcement);
+        }
+        return null;
     }
 
+
     /**
      * 热门课程
      *

+ 1 - 1
web/src/main/java/com/ynfy/app/api/v1/controller/ApiPracticeController.java

@@ -3,7 +3,6 @@ package com.ynfy.app.api.v1.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.app.api.v1.entity.dto.PracticeDTO;
-import com.ynfy.app.api.v1.util.TokenUtil;
 import com.ynfy.buss.exam.question.service.IQuestionService;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 import com.ynfy.buss.practice.userpractice.entity.dto.UserPracticeDTO;
@@ -11,6 +10,7 @@ import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.TokenUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 1
web/src/main/java/com/ynfy/app/api/v1/controller/ApiRepositoryController.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.app.api.v1.annoation.IgnoreAuth;
 import com.ynfy.app.api.v1.entity.dto.RepositoryDTO;
-import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.exam.question.dto.QuestionDTO;
 import com.ynfy.buss.exam.question.enums.QuestionType;
 import com.ynfy.buss.exam.question.service.IQuestionService;

+ 2 - 3
web/src/main/java/com/ynfy/app/api/v1/interceptor/AuthorizationInterceptor.java

@@ -2,12 +2,11 @@ package com.ynfy.app.api.v1.interceptor;
 
 import com.auth0.jwt.exceptions.TokenExpiredException;
 import com.ynfy.app.api.v1.annoation.IgnoreAuth;
-import com.ynfy.app.api.v1.util.TokenUtil;
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.common.exception.JeecgBoot401Exception;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.util.TokenUtil;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.stereotype.Component;
@@ -52,7 +51,7 @@ public class AuthorizationInterceptor implements HandlerInterceptor {
         //获取token
         String token = TokenUtil.getToken(request);
         if (StringUtils.isBlank(token)) {
-            JwtUtil.responseError(SpringContextUtils.getHttpServletResponse(),401,"请先登录");
+            JwtUtil.responseError(SpringContextUtils.getHttpServletResponse(), 401, "请先登录");
             return false;
         }
         String userName = TokenUtil.getUserName(token);

+ 1 - 1
web/src/main/resources/application-dev.yml

@@ -208,7 +208,7 @@ cas:
 #Mybatis输出sql日志
 logging:
   level:
-    org.jeecg.modules.system.mapper: info
+    org.jeecg.modules.system.mapper: debug
     com.ynfy.buss.exam.paper.mapper: debug
     com.ynfy.buss.exam.question.mapper: debug
     com.ynfy.buss.exam.questionanswer.mapper: debug