用户消息

websocket
yun-zuoyi
yunhao.wang 7 years ago
parent c9ef53ef80
commit da1c50f9a0

@ -62,13 +62,6 @@ public interface ISysMessageService {
@ApiOperation(value = "系统消息复杂查询,分页,排序")
ListPager querySysMessageByPager(SysMessage sysMessage, Pager pager);
// /**
// * 根据id修改消息状态
// * @param id
// * @param status
// */
// void updateSysMessageStatusById(String id,Integer status);
/**
*
* @param ids
@ -76,13 +69,6 @@ public interface ISysMessageService {
@ApiOperation(value = "批量删除消息")
void deleteSysMessageByIds(Long[] ids);
// /**
// * 批量修改消息状态
// * @param ids
// * @param status
// */
// void updateSysMessageStatusByIds(String[] ids,Integer status);
/**
*
* @param refUserMessage
@ -111,6 +97,29 @@ public interface ISysMessageService {
* @param status
* @return
*/
@ApiOperation(value = "根据用户id和消息状态和查询用户消息")
@ApiOperation(value = "根据用户id和消息状态和查询用户消息")
List findSysRefUserMessageByUserIdAndStatus(Long userId,Integer status);
/**
* id
* @param id
* @return
*/
@ApiOperation(value = "根据id查询用户消息")
SysMessage getSysMessageByRefUserMessageId(Long id);
/**
*
* @param ids
* @param status
*/
@ApiOperation(value = "根据id查询用户消息")
void updateSysRefUserMessageStatusByIds(Long[] ids,Integer status);
/**
*
* @param ids
*/
@ApiOperation(value = "批量删除用户消息")
void deleteSysRefUserMessageStatusByIds(Long[] ids);
}

@ -114,7 +114,7 @@ public class SysMessageController extends CoreBaseController {
@GetMapping(value = "/sys-message/list")
@ApiOperation(value = "查询全部消息",notes = "查询全部消息")
public ResultBean findSysConfigAll(){
public ResultBean findSysMessageAll(){
try {
List<SysMessage> sysMessageList = sysMessageService.listSysMessage();
return ResultBean.success("查询成功").setResultList(sysMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
@ -127,9 +127,9 @@ public class SysMessageController extends CoreBaseController {
@GetMapping(value = "/sys-message/get/{id}")
@ApiOperation(value = "根据id查询消息",notes = "根据id查询消息")
public ResultBean getSysConfigById(String id){
public ResultBean getSysMessageById(@PathVariable("id") String idStr){
try {
SysMessage sysMessageList = sysMessageService.getSysMessageById(Long.parseLong(id));
SysMessage sysMessageList = sysMessageService.getSysMessageById(Long.parseLong(idStr));
if (sysMessageList != null) {
return ResultBean.success("查询成功").setResultObject(sysMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}else {
@ -155,24 +155,6 @@ public class SysMessageController extends CoreBaseController {
}
}
// @PutMapping("/status")
// public ResultBean updateSysMessageStatusById(String id,Integer status){
// try {
// // 条件校验
// ValidatorBean.checkNotNull(id,"id不能为空");
// ValidatorBean.checkNotZero(status,"修改状态值不能为空");
//
// sysMessageService.updateSysMessageStatusById(id,status);
// return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// }catch(ImppBusiException busExcep){
// LOGGER.error(busExcep.getErrorMsg() + "{}",busExcep.getErrorDetail(),busExcep);
// return ResultBean.fail(busExcep.getErrorShow());
// }catch(Exception e){
// LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + "{}",e.getMessage(),e);
// return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode());
// }
// }
@DeleteMapping("/sys-message/batch-delete")
@ApiOperation(value = "批量删除消息",notes = "批量删除消息")
public ResultBean deleteSysMessageByIds(String[] ids){
@ -195,35 +177,14 @@ public class SysMessageController extends CoreBaseController {
}
}
// @PutMapping("/batch-status")
// @ApiOperation(value = "批量切换消息状态",notes = "批量切换消息状态")
// public ResultBean updateSysMessageStatusByIds(String[] ids,Integer status){
// try{
// // 条件判断
// ValidatorBean.checkNotZero(status,"状态不能为空");
// ids = ConvertBean.modelSafeArrayNumber(ids,true);
// if(ids.length == 0){
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
// .setErrorDetail("请选择需要操作的资源。")
// .build();
// }
// sysMessageService.updateSysMessageStatusByIds(ids,status);
// return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// }catch(ImppBusiException busExcep){
// LOGGER.error(busExcep.getErrorMsg() + "{}",busExcep.getErrorDetail(),busExcep);
// return ResultBean.fail(busExcep.getErrorShow());
// }catch(Exception e){
// LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + "{}",e.getMessage(),e);
// return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode());
// }
// }
@GetMapping(value = "/user-message/query")
@ApiOperation(value = "用户消息复杂查询,分页,排序")
public ResultBean querySysRefUserMessageByPager(SysRefUserMessage sysRefUserMessage,Pager pager){
@GetMapping(value = "/user-message/query-inbox")
@ApiOperation(value = "查询用户收件箱,分页,排序")
public ResultBean queryInboxByPager(SysRefUserMessage sysRefUserMessage,Pager pager){
try {
// 设置消息类型为站内信
sysRefUserMessage.setMessageTypeRdd(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue());
sysRefUserMessage.setReceiverId(getSessionUser().getUser().getId());
ListPager userMessageList = sysMessageService.querySysRefUserMessageByPager(sysRefUserMessage,pager);
return ResultBean.success("查询成功").setListPager(userMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
@ -233,6 +194,22 @@ public class SysMessageController extends CoreBaseController {
}
}
@GetMapping(value = "/user-message/query-outbox")
@ApiOperation(value = "查询用户发件箱,分页,排序")
public ResultBean querySysRefUserMessageByPager(SysMessage sysMessage,Pager pager){
try {
// 发件人为当前用户
sysMessage.setMessageSenderId(getSessionUser().getUser().getId());
ListPager sysMessageListPager = sysMessageService.querySysMessageByPager(sysMessage,pager);
return ResultBean.success("查询成功").setListPager(sysMessageListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep.getErrorShow());
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/user-message/find-unread")
@ApiOperation(value = "查看用户未读站内信")
public ResultBean findUnreadUserMessage(){
@ -246,4 +223,72 @@ public class SysMessageController extends CoreBaseController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/user-message/get/{id}")
@ApiOperation(value = "根据id查询消息",notes = "根据id查询消息")
public ResultBean getUserMessageById(@PathVariable("id") String idStr){
try {
ValidatorBean.checkNotNull(idStr,"id");
SysMessage userMessage =sysMessageService.getSysMessageByRefUserMessageId(Long.parseLong(idStr));
if (userMessage != null) {
return ResultBean.success("查询成功").setResultObject(userMessage).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}else {
return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode());
}
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep.getErrorShow());
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PutMapping("/user-message/batch-status")
@ApiOperation(value = "批量切换消息状态",notes = "批量切换消息状态")
public ResultBean updateSysMessageStatusByIds(String[] ids,Integer status){
try{
// 条件判断
ValidatorBean.checkNotZero(status,"状态不能为空");
ids = ConvertBean.modelSafeArrayNumber(ids,true);
if(ids.length == 0){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("请选择需要操作的资源。")
.build();
}
sysMessageService.updateSysRefUserMessageStatusByIds(StringTool.getArrayLong(ids),status);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep.getErrorShow());
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@DeleteMapping(value = "/user-message/delete-inbox/{id}")
@ApiOperation(value = "根据id删除用户消息")
public ResultBean deleteUserMessageById(@PathVariable("id") String idStr){
try {
sysMessageService.deleteSysRefUserMessageStatusByIds(new Long[]{Long.parseLong(idStr)});
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep.getErrorShow());
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@DeleteMapping(value = "/user-message/batch-delete-inbox")
@ApiOperation(value = "根据id批量删除用户消息")
public ResultBean deleteUserMessageByIds(String[] idsStr){
try {
sysMessageService.deleteSysRefUserMessageStatusByIds(StringTool.getArrayLong(idsStr));
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep.getErrorShow());
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.mq;
import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService;
import cn.estsh.i3plus.core.apiservice.websocket.MessageWebSocket;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysMessage;
@ -12,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -40,7 +42,7 @@ public class LetterQueueReceiver {
* @param message
* rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_QUEUE, new SysMessage(....));
*/
//@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE)
@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE)
public void processImppMessage(SysMessage msg, Channel channel, Message message) {
try {
LOGGER.info("【MQ-IMPP_MESSAGE_LETTER_QUEUE】数据接收成功{}",msg);
@ -69,11 +71,14 @@ public class LetterQueueReceiver {
refUserMessage.setReceiverTime(TimeTool.getNowTime(true));
sysMessageService.insertSysRefUserMessage(refUserMessage);
MessageWebSocket.getWebSocketSet().get(sysUser.getId()).sendMessage();
}
msg.setMessageSenderNameRdd(StringUtils.join(receiverName, ","));
sysMessageService.updateSysMessage(msg);
//信息已处理
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
} catch (IOException e) {

@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -41,7 +42,7 @@ public class MailQueueReceiver {
* @param channel
* @param message
*/
//@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE)
@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE)
public void processImppMail(SysMessage msg, Channel channel, Message message) {
try {
LOGGER.info("【MQ-IMPP_MESSAGE_MAIL_QUEUE】数据接收成功{}",msg);msg = sysMessageService.insertSysMessage(msg);

@ -2,16 +2,21 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService;
import cn.estsh.i3plus.core.apiservice.mq.I3CoreQueueConfig;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.HqlPack;
import cn.estsh.i3plus.pojo.platform.bean.SysMessage;
import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage;
import cn.estsh.i3plus.pojo.platform.repository.SysMessageRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefUserMessageRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository;
import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -37,7 +42,7 @@ public class SysMessageService implements ISysMessageService {
private SysMessageRepository sysMessageRDao;
@Autowired
private SysRefUserMessageRepository refUserMessageRDao;
private SysRefUserMessageRepository sysRefUserMessageRDao;
@Autowired
private SysUserRepository sysUserRDao;
@ -58,7 +63,7 @@ public class SysMessageService implements ISysMessageService {
@ApiOperation(value = "删除消息")
public void deleteSysMessageById(Long id) {
LOGGER.info("消息 SYS_MESSAGE id:{}",id);
refUserMessageRDao.deleteByProperty("messageId",id);
sysRefUserMessageRDao.deleteByProperty("messageId",id);
sysMessageRDao.deleteById(id);
}
@ -97,12 +102,6 @@ public class SysMessageService implements ISysMessageService {
}
}
// @Override
// public void updateSysMessageStatusById(String id, Integer status) {
// LOGGER.info("消息 SYS_MESSAGE id:{}status:{}",id,status);
// sysMessageRDao.updateByProperties("id",Long.parseLong(id),"messageStatusId", status);
// }
@Override
@ApiOperation(value = "批量删除消息")
public void deleteSysMessageByIds(Long[] ids) {
@ -110,19 +109,10 @@ public class SysMessageService implements ISysMessageService {
sysMessageRDao.deleteByIds(ids);
}
// @Override
// public void updateSysMessageStatusByIds(String[] ids,Integer status) {
// LOGGER.info("消息 SYS_MESSAGE ids{}status{}",ids,status);
// StringBuffer where = new StringBuffer();
// HqlPack.getInPack(String.join(",", ids), "id", where);
//
// sysMessageRDao.updateByHqlWhere(where.toString(), "messageStatusId", status);
// }
@Override
@ApiOperation(value = "添加用户消息关系")
public SysRefUserMessage insertSysRefUserMessage(SysRefUserMessage refUserMessage) {
return refUserMessageRDao.insert(refUserMessage);
return sysRefUserMessageRDao.insert(refUserMessage);
}
@Override
@ -140,19 +130,48 @@ public class SysMessageService implements ISysMessageService {
@ApiOperation(value = "分页查询用户消息表")
public ListPager querySysRefUserMessageByPager(SysRefUserMessage sysRefUserMessage, Pager pager) {
if(sysRefUserMessage == null) {
pager = PagerHelper.getPager(pager, sysMessageRDao.listCount());
return new ListPager(refUserMessageRDao.listPager(pager),pager);
pager = PagerHelper.getPager(pager, sysRefUserMessageRDao.listCount());
return new ListPager(sysRefUserMessageRDao.listPager(pager),pager);
}else {
String hqlPack = CoreHqlPack.packHqlSysRefUserMessage(sysRefUserMessage);
pager = PagerHelper.getPager(pager, sysMessageRDao.findByHqlWhereCount(hqlPack));
return new ListPager(sysMessageRDao.findByHqlWherePage(hqlPack + sysRefUserMessage.orderBy(),pager),pager);
pager = PagerHelper.getPager(pager, sysRefUserMessageRDao.findByHqlWhereCount(hqlPack));
return new ListPager(sysRefUserMessageRDao.findByHqlWherePage(hqlPack + sysRefUserMessage.orderBy(),pager),pager);
}
}
@Override
@ApiOperation(value = "根据用户id和消息状态和查询用户消息表")
public List findSysRefUserMessageByUserIdAndStatus(Long userId, Integer status) {
return refUserMessageRDao.findByProperty(new String[]{"receiverId","messageStatus","messageTypeRdd"},
new Object[]{userId,status,ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()});
return sysRefUserMessageRDao.findByProperty(new String[]{"receiverId","messageStatus","messageTypeRdd"},
new Object[]{userId,status,ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()});
}
@Override
@ApiOperation(value = "根据id查询用户消息")
public SysMessage getSysMessageByRefUserMessageId(Long id) {
SysRefUserMessage sysRefUserMessage = sysRefUserMessageRDao.getById(id);
if (sysRefUserMessage == null){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("数据不存在")
.build();
}
sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue());
sysRefUserMessageRDao.update(sysRefUserMessage);
return sysMessageRDao.getById(sysRefUserMessage.getMessageId());
}
@Override
public void updateSysRefUserMessageStatusByIds(Long[] ids, Integer status) {
StringBuffer where = new StringBuffer();
HqlPack.getInPack(String.join(",", StringTool.getArrayString(ids)), "id", where);
sysRefUserMessageRDao.updateByHqlWhere(where.toString(), "messageStatus", status);
}
@Override
public void deleteSysRefUserMessageStatusByIds(Long[] ids) {
sysRefUserMessageRDao.deleteByIds(ids);
}
}

@ -4,10 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
@ -79,6 +76,7 @@ public class DemoWebSocket {
*
* @OnError
*/
@OnError
public void onError(Session session, Throwable error) {
LOGGER.info("发生错误");
error.printStackTrace();

@ -0,0 +1,107 @@
package cn.estsh.i3plus.core.apiservice.websocket;
import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* @Description :
* @Reference :
* @Author : yunhao
* @CreateDate : 2018-11-24 16:57
* @Modify:
**/
@ServerEndpoint(value="/message-websocket/{userId}")
@Component
public class MessageWebSocket {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageWebSocket.class);
private Long userId = 1L;
//在线连接数
private static int onlineCount = 0;
//concurrent线程安全集合存放客户端websocket对象
private static ConcurrentMap<Long,MessageWebSocket> webSocketSet = new ConcurrentHashMap<Long,MessageWebSocket>();
//websocket会话
private Session session;
public static ConcurrentMap<Long, MessageWebSocket> getWebSocketSet() {
return webSocketSet;
}
@Autowired
private ISysMessageService sysMessageService;
@OnOpen
public void onOpen(@PathParam("userId")Long userId, Session session){
this.session = session;
this.userId = userId;
webSocketSet.put(userId,this); //加入set中
addOnlineCount(); //在线数加1
LOGGER.info("{}加入!当前在线人数为{}",userId,getOnlineCount());
}
/**
*
*/
@OnClose
public void onClose() {
webSocketSet.remove(this.userId); //从set中删除
subOnlineCount(); //在线数减1
LOGGER.info("有一连接关闭!当前在线人数为" + getOnlineCount());
}
/**
*
*
* @param message */
@OnMessage
public void onMessage(String message, Session session) {
LOGGER.info("来自客户端的消息:" + message);
}
/**
*
* @OnError
*/
@OnError
public void onError(Session session, Throwable error) {
LOGGER.info("发生错误");
error.printStackTrace();
}
public void sendMessage() throws IOException {
List userMessageList = sysMessageService.findSysRefUserMessageByUserIdAndStatus(this.userId,
ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue());
this.session.getBasicRemote().sendText(JSON.toJSONString(userMessageList));
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
MessageWebSocket.onlineCount++;
}
public static synchronized void subOnlineCount() {
MessageWebSocket.onlineCount--;
}
}
Loading…
Cancel
Save