From da1c50f9a07bea5112db52069fbb81380818bf5e Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Sat, 24 Nov 2018 17:42:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B6=88=E6=81=AF=20websocke?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ISysMessageService.java | 39 +++--- .../controller/busi/SysMessageController.java | 143 ++++++++++++++------- .../core/apiservice/mq/LetterQueueReceiver.java | 7 +- .../core/apiservice/mq/MailQueueReceiver.java | 3 +- .../serviceimpl/busi/SysMessageService.java | 67 ++++++---- .../core/apiservice/websocket/DemoWebSocket.java | 6 +- .../apiservice/websocket/MessageWebSocket.java | 107 +++++++++++++++ 7 files changed, 278 insertions(+), 94 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java index e54355c..e9d7384 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java @@ -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); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java index f241513..5cb9c11 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java @@ -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 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); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java index cc3f458..9a26a90 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java @@ -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) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java index 2ffdd49..8a868b4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java @@ -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); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java index 7a8ed6e..3646dea 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java @@ -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); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java index a342b37..786bd9d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java @@ -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(); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java new file mode 100644 index 0000000..a438074 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java @@ -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 webSocketSet = new ConcurrentHashMap(); + + //websocket会话 + private Session session; + + public static ConcurrentMap 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--; + } +}