Commit 6ea651d4 authored by 刘可心's avatar 刘可心

标记为已读

parent ebe4b2d6
package com.archser.aserver.controller; package com.archser.aserver.controller;
import com.archser.aserver.util.FinalStringUtil; import com.archser.aserver.util.FinalStringUtil;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.archser.aserver.interceptor.JwtInterceptor; import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.model.Message; import com.archser.aserver.model.Message;
import com.archser.aserver.service.LogService; import com.archser.aserver.service.LogService;
import com.archser.aserver.service.MessageService; import com.archser.aserver.service.MessageService;
import com.archser.aserver.websocket.MessageRefreshTrigger; import com.archser.aserver.websocket.MessageRefreshTrigger;
import com.jfinal.aop.Clear; import com.jfinal.aop.Clear;
import com.jfinal.aop.Inject; import com.jfinal.aop.Inject;
import com.jfinal.core.Controller; import com.jfinal.core.Controller;
import com.jfinal.kit.Ret; import com.jfinal.kit.Ret;
import com.jfinal.kit.StrKit; import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Page;
/** /**
* 消息相关 * 消息相关
* *
* @author dgq * @author dgq
* *
*/ */
public class MessageController extends Controller { public class MessageController extends Controller {
@Inject @Inject
LogService logService; LogService logService;
@Inject @Inject
MessageService messageService; MessageService messageService;
private static final Logger logger = Logger.getLogger(MessageController.class); private static final Logger logger = Logger.getLogger(MessageController.class);
/** /**
* 获取未读消息数量 * 获取未读消息数量
*/ */
public void count() { public void count() {
String username = this.getAttr("username"); String username = this.getAttr("username");
Long count = messageService.getCountByRead(null, username); Long count = messageService.getCountByRead(null, username);
this.renderJson(Ret.ok("count", count)); this.renderJson(Ret.ok("count", count));
} }
/** /**
* menu unread:未读,readed:已读,其他;查询所有 * menu unread:未读,readed:已读,其他;查询所有
*/ */
public void getMessagePageData() { public void getMessagePageData() {
int pageNumber = this.getParaToInt("pageNumber"); int pageNumber = this.getParaToInt("pageNumber");
int pageSize = this.getParaToInt("pageSize"); int pageSize = this.getParaToInt("pageSize");
String username = this.getAttr("username"); String username = this.getAttr("username");
String menu = this.getPara("menu"); String menu = this.getPara("menu");
/** 2020年7月1日 添加模糊查询 yangchengwu YZJ-3915*/ /** 2020年7月1日 添加模糊查询 yangchengwu YZJ-3915*/
String likeVal = this.getPara("likeVal"); String likeVal = this.getPara("likeVal");
Page<Message> page = messageService.getMessagePageData(pageNumber, pageSize, username, menu,likeVal); Page<Message> page = messageService.getMessagePageData(pageNumber, pageSize, username, menu,likeVal);
if (page != null) { if (page != null) {
renderJson(Ret.ok("page", page)); renderJson(Ret.ok("page", page));
} else { } else {
renderJson(Ret.fail("msg", "获取消息列表失败")); renderJson(Ret.fail("msg", "获取消息列表失败"));
} }
} }
/** /**
* 标记为已读 * 标记为已读
*/ */
public void markRead() { public void markRead() {
int id = this.getParaToInt("id"); int id = this.getParaToInt("id");
boolean markRead = this.messageService.markRead(id); boolean markRead = this.messageService.markRead(id);
renderJson(markRead ? Ret.ok(): Ret.fail()); renderJson(markRead ? Ret.ok(): Ret.fail());
} }
/** /**
* 删除消息 * 删除消息
*/ */
public void deleteMessage() { public void deleteMessage() {
String ids = this.getPara("ids"); String ids = this.getPara("ids");
if (ids.length() == 0) { if (ids.length() == 0) {
renderJson(Ret.fail()); renderJson(Ret.fail());
} }
boolean deleted = this.messageService.deleteMessage(ids.split(",")); boolean deleted = this.messageService.deleteMessage(ids.split(","));
if (deleted) { if (deleted) {
renderJson(Ret.ok()); renderJson(Ret.ok());
logService.saveAsLog("operate", "个人首页-消息中心-删除消息-" + "-已删除了"+ids.split(",").length+"个消息", FinalStringUtil.DELETE); logService.saveAsLog("operate", "个人首页-消息中心-删除消息-" + "-已删除了"+ids.split(",").length+"个消息", FinalStringUtil.DELETE);
}else { }else {
renderJson(Ret.fail()); renderJson(Ret.fail());
logService.saveAsLog("operate", "个人首页-消息中心-删除消息-删除消息失败",FinalStringUtil.DELETE); logService.saveAsLog("operate", "个人首页-消息中心-删除消息-删除消息失败",FinalStringUtil.DELETE);
} }
} }
/** /**
* 根据指定用户更新websocket的消息 * 根据指定用户更新websocket的消息
*/ */
@Clear(JwtInterceptor.class) @Clear(JwtInterceptor.class)
public void refreshMessage() { public void refreshMessage() {
try { try {
String userId = this.getPara("userId"); String userId = this.getPara("userId");
if (StrKit.isBlank(userId)) { if (StrKit.isBlank(userId)) {
userId = IOUtils.toString(this.getRequest().getInputStream()); userId = IOUtils.toString(this.getRequest().getInputStream());
userId = JSON.parseObject(userId).getString("userId"); userId = JSON.parseObject(userId).getString("userId");
} }
logger.error("接受到消息刷新" + userId); logger.error("接受到消息刷新" + userId);
if (StrKit.notBlank(userId)) { if (StrKit.notBlank(userId)) {
boolean refrashed = MessageRefreshTrigger.refresh(userId); boolean refrashed = MessageRefreshTrigger.refresh(userId);
renderJson(Ret.ok("refrashed", refrashed)); renderJson(Ret.ok("refrashed", refrashed));
} else { } else {
renderJson(Ret.fail("msg", "userId为null或userId不是一个数字")); renderJson(Ret.fail("msg", "userId为null或userId不是一个数字"));
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("刷新消息出错", e); logger.error("刷新消息出错", e);
renderJson(Ret.fail("msg", "刷新消息出错")); renderJson(Ret.fail("msg", "刷新消息出错"));
} }
} }
} /**
* LiuKexin 20210402 批量标记为已读,且将通知性消息标为已读,下载或跳转的消息不批量已读
*/
public void allMsgReaded() {
String username = this.getAttr("username");
Ret allMsgReaded = messageService.allMsgReaded(username);
renderJson(allMsgReaded);
}
}
package com.archser.aserver.service; package com.archser.aserver.service;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.archser.aserver.model.Message; import com.archser.aserver.model.Message;
import com.archser.aserver.websocket.MessageRefreshTrigger; import com.archser.aserver.websocket.MessageRefreshTrigger;
import com.jfinal.kit.Kv; import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db; import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
public class MessageService {
public class MessageService {
private Message messageDao = Message.dao;
private Message messageDao = Message.dao;
private static final Logger logger = Logger.getLogger(MessageService.class);
private static final Logger logger = Logger.getLogger(MessageService.class);
/**
* @param pageNumber /**
* @param pageSize * @param pageNumber
* @param username * @param pageSize
* @param menu unread:未读,readed:已读,其他;查询所有 * @param username
* @return * @param menu unread:未读,readed:已读,其他;查询所有
*/ * @return
public Page<Message> getMessagePageData(int pageNumber, int pageSize, String username, String menu,String likeVal) { */
Integer userId = Db.queryInt(Db.getSql("getUserId"), username); public Page<Message> getMessagePageData(int pageNumber, int pageSize, String username, String menu,String likeVal) {
Page<Message> page = messageDao.paginate(pageNumber, pageSize, Db.getSqlPara("message.getMessagePageData", Kv.by("send_to_id", userId).set("menu", menu).set("likeVal", likeVal))); Integer userId = Db.queryInt(Db.getSql("getUserId"), username);
return page; Page<Message> page = messageDao.paginate(pageNumber, pageSize, Db.getSqlPara("message.getMessagePageData", Kv.by("send_to_id", userId).set("menu", menu).set("likeVal", likeVal)));
} return page;
}
public Page<Record> getUnreadMessage(int pageNumber, int pageSize,Integer userId) {
Page<Record> paginate = Db.paginate(pageNumber, pageSize, Db.getSqlPara("message.getMessagePageData", Kv.by("send_to_id", userId).set("menu", "unread"))); public Page<Record> getUnreadMessage(int pageNumber, int pageSize,Integer userId) {
return paginate; Page<Record> paginate = Db.paginate(pageNumber, pageSize, Db.getSqlPara("message.getMessagePageData", Kv.by("send_to_id", userId).set("menu", "unread")));
} return paginate;
}
public boolean markRead(int id) {
int update = Db.update(Db.getSqlPara("message.markRead", Kv.by("id", id))); public boolean markRead(int id) {
return update == 1; int update = Db.update(Db.getSqlPara("message.markRead", Kv.by("id", id)));
} return update == 1;
}
public boolean deleteMessage(String[] idArray) {
int update = Db.update(Db.getSqlPara("message.deleteMessage", Kv.by("ids", idArray))); public boolean deleteMessage(String[] idArray) {
return update == idArray.length; int update = Db.update(Db.getSqlPara("message.deleteMessage", Kv.by("ids", idArray)));
} return update == idArray.length;
}
public Long getCountByRead(String read, String username) {
Record findFirst = Db.findFirst(Db.getSqlPara("message.getCountByRead", Kv.by("read", read).set("username", username))); public Long getCountByRead(String read, String username) {
return findFirst.getLong("count"); Record findFirst = Db.findFirst(Db.getSqlPara("message.getCountByRead", Kv.by("read", read).set("username", username)));
} return findFirst.getLong("count");
/** }
* 更新消息 /**
* @param userIds 要更新的用户id 使用,分割用户id * 更新消息
* @return * @param userIds 要更新的用户id 使用,分割用户id
*/ * @return
public static boolean refreshMessageByUserId(String userIds) { */
try { public static boolean refreshMessageByUserId(String userIds) {
return loaclRefresh(userIds); try {
} catch(Exception e) { return loaclRefresh(userIds);
logger.error("更新消息出错", e); } catch(Exception e) {
return false; logger.error("更新消息出错", e);
} return false;
} }
/** }
* 更新消息 /**
* @param userId 要更新的用户id * 更新消息
* @return * @param userId 要更新的用户id
*/ * @return
public static boolean refreshMessageByUserId(Integer userId) { */
if (userId == null) { public static boolean refreshMessageByUserId(Integer userId) {
return false; if (userId == null) {
} return false;
try { }
return loaclRefresh(userId.toString()); try {
} catch(Exception e) { return loaclRefresh(userId.toString());
logger.error("更新消息出错", e); } catch(Exception e) {
return false; logger.error("更新消息出错", e);
} return false;
} }
}
/**
* 刷新消息 /**
* @param asMessage * 刷新消息
* @return * @param asMessage
*/ * @return
public static boolean refreshMessage(Message asMessage) { */
return refreshMessageByUserId(asMessage.getSendToId()); public static boolean refreshMessage(Message asMessage) {
} return refreshMessageByUserId(asMessage.getSendToId());
}
/**
* 刷新消息 /**
* @param messageList * 刷新消息
* @return * @param messageList
*/ * @return
public static boolean refreshMessage(List<Message> messageList) { */
if (messageList == null || messageList.isEmpty()) { public static boolean refreshMessage(List<Message> messageList) {
return false; if (messageList == null || messageList.isEmpty()) {
} return false;
StringBuilder idBuiler = new StringBuilder(); }
for (Message asMessage : messageList) { StringBuilder idBuiler = new StringBuilder();
idBuiler.append(asMessage.getSendToId()); for (Message asMessage : messageList) {
idBuiler.append(","); idBuiler.append(asMessage.getSendToId());
} idBuiler.append(",");
if (idBuiler.length() > 0) { }
idBuiler.deleteCharAt(idBuiler.length() - 1); if (idBuiler.length() > 0) {
} idBuiler.deleteCharAt(idBuiler.length() - 1);
return refreshMessageByUserId(idBuiler.toString()); }
} return refreshMessageByUserId(idBuiler.toString());
}
/**
* 刷新消息 /**
* @param asMessage * 刷新消息
* @return * @param asMessage
*/ * @return
public static boolean refreshMessageRecord(Record asMessage) { */
return refreshMessageByUserId(asMessage.getInt("send_to_id")); public static boolean refreshMessageRecord(Record asMessage) {
} return refreshMessageByUserId(asMessage.getInt("send_to_id"));
}
/**
* 刷新消息 /**
* @param messageList * 刷新消息
* @return * @param messageList
*/ * @return
public static boolean refreshMessageRecord(List<Record> messageList) { */
if (messageList == null || messageList.isEmpty()) { public static boolean refreshMessageRecord(List<Record> messageList) {
return false; if (messageList == null || messageList.isEmpty()) {
} return false;
StringBuilder idBuiler = new StringBuilder(); }
for (Record asMessage : messageList) { StringBuilder idBuiler = new StringBuilder();
if (asMessage.getInt("send_to_id") != null) { for (Record asMessage : messageList) {
idBuiler.append(asMessage.getInt("send_to_id")); if (asMessage.getInt("send_to_id") != null) {
idBuiler.append(","); idBuiler.append(asMessage.getInt("send_to_id"));
} idBuiler.append(",");
} }
if (idBuiler.length() > 0) { }
idBuiler.deleteCharAt(idBuiler.length() - 1); if (idBuiler.length() > 0) {
} idBuiler.deleteCharAt(idBuiler.length() - 1);
return refreshMessageByUserId(idBuiler.toString()); }
} return refreshMessageByUserId(idBuiler.toString());
}
/**
* 保存消息并且刷新消息 /**
* @param asMessage * 保存消息并且刷新消息
* @return * @param asMessage
*/ * @return
public boolean saveMessageAndRefresh(Message asMessage) { */
boolean save = asMessage.save(); public boolean saveMessageAndRefresh(Message asMessage) {
if (save) { boolean save = asMessage.save();
return refreshMessage(asMessage); if (save) {
} return refreshMessage(asMessage);
return false; }
} return false;
}
/**
* 保存消息并且刷新消息 /**
* @param asMessageList * 保存消息并且刷新消息
* @return * @param asMessageList
*/ * @return
public boolean saveMessageAndRefresh(List<Message> asMessageList) { */
int[] batchSave = Db.batchSave(asMessageList, asMessageList.size()); public boolean saveMessageAndRefresh(List<Message> asMessageList) {
if (batchSave.length == asMessageList.size()) { int[] batchSave = Db.batchSave(asMessageList, asMessageList.size());
return refreshMessage(asMessageList); if (batchSave.length == asMessageList.size()) {
} return refreshMessage(asMessageList);
return false; }
} return false;
}
private static boolean loaclRefresh(String userIds) {
MessageRefreshTrigger.refresh(userIds); private static boolean loaclRefresh(String userIds) {
return true; MessageRefreshTrigger.refresh(userIds);
} return true;
}
/**
} * LiuKexin 20210402 批量标记为已读,且将通知性消息标为已读,下载或跳转的消息不批量已读
*/
public Ret allMsgReaded(String username) {
try {
Integer userId = Db.queryInt(Db.getSql("getUserId"), username);
List<Record> getUnReadMsg = Db.find(Db.getSqlPara("message.getMessageInUnread", Kv.by("send_to_id", userId)));
if(getUnReadMsg.size() == 0) {
return Ret.fail("msg", "暂没有未读消息");
}
for (Record readMsg : getUnReadMsg) {
if(readMsg.getStr("path") == null || "".equals(readMsg.getStr("path"))) {
Db.update(Db.getSqlPara("message.markRead", Kv.by("id", readMsg.getStr("id"))));
}
}
return Ret.ok("msg", "已将通知性消息全部标记为已读");
} catch (Exception e) {
return Ret.fail("msg", "批量标为已读失败");
}
}
}
#namespace("message") #namespace("message")
#sql("getMessagePageData") #sql("getMessageInUnread")
select t.id, t.sender_id,t.send_to_id,t.title,t.content,t.system_id, select t.id, t.sender_id,t.send_to_id,t.title,t.content,t.system_id,
t.path,t.params,t.operate,t.read,t.send_time, t.path,t.params,t.operate,t.read,t.send_time,
su.name as sender, ru.name as receive, asys.title as system su.name as sender, ru.name as receive, asys.title as system
from as_message t from as_message t
left join as_user su left join as_user su
on su.id = t.sender_id on su.id = t.sender_id
left join as_user ru left join as_user ru
on ru.id = t.send_to_id on ru.id = t.send_to_id
left join as_system asys left join as_system asys
on asys.id = t.system_id on asys.id = t.system_id
where t.send_to_id = #para(send_to_id) where t.send_to_id = #para(send_to_id) and read is null
#if(menu == 'unread') order by id desc
and read is null #end
#else if(menu == 'readed') #sql("getMessagePageData")
and read = 'Y' select t.id, t.sender_id,t.send_to_id,t.title,t.content,t.system_id,
#end t.path,t.params,t.operate,t.read,t.send_time,
#if(likeVal) su.name as sender, ru.name as receive, asys.title as system
and ( from as_message t
t.title like '%#(likeVal)%' left join as_user su
or su.name like '%#(likeVal)%' on su.id = t.sender_id
or ru.name like '%#(likeVal)%' left join as_user ru
or asys.title like '%#(likeVal)%' on ru.id = t.send_to_id
or t.operate like '%#(likeVal)%' left join as_system asys
) on asys.id = t.system_id
#end where t.send_to_id = #para(send_to_id)
#if(menu == 'unread')
order by t.send_time desc and read is null
#end #else if(menu == 'readed')
and read = 'Y'
#sql("markRead") #end
update as_message t set t.read = 'Y' #if(likeVal)
where t.id = #para(id) and (
#end t.title like '%#(likeVal)%'
#sql("deleteMessage") or su.name like '%#(likeVal)%'
delete as_message t or ru.name like '%#(likeVal)%'
where t.id in ( or asys.title like '%#(likeVal)%'
#for(item : ids) or t.operate like '%#(likeVal)%'
#(for.index==0 ? "" : ",") #(item) )
#end #end
)
#end order by t.send_time desc
#sql("getCountByRead") #end
select count(t.id) as count
from as_message t #sql("markRead")
where t.send_to_id is not null and t.send_to_id = ( update as_message t set t.read = 'Y'
select id from as_user u where u.username = #para(username) where t.id = #para(id)
) #end
#if(read) #sql("deleteMessage")
and t.read = #para(read) delete as_message t
#else where t.id in (
and t.read is null #for(item : ids)
#end #(for.index==0 ? "" : ",") #(item)
#end #end
)
#end #end
#sql("getCountByRead")
select count(t.id) as count
from as_message t
where t.send_to_id is not null and t.send_to_id = (
select id from as_user u where u.username = #para(username)
)
#if(read)
and t.read = #para(read)
#else
and t.read is null
#end
#end
#end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment