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

标记为已读

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