|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
}
|