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 9fe97c9..c69bb16 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 @@ -4,6 +4,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -55,7 +56,6 @@ public class SysMessageController extends CoreBaseController { @ApiOperation(value = "新增消息",notes = "新增消息") public ResultBean insertSysMessage(SysMessage sysMessage){ try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 条件校验 ValidatorBean.beginValid(sysMessage) .notNull("messageTitle",sysMessage.getMessageTitle()) @@ -64,18 +64,27 @@ public class SysMessageController extends CoreBaseController { .notNull("messageReceiversId",sysMessage.getMessageReceiversId()); // 设置发件人名称 - sysMessage.setMessageSenderId(getSessionUser().getUser().getId()); - sysMessage.setMessageSenderNameRdd(getSessionUser().getUserName()); - sysMessage.setMessageSendTime(sdf.format(new Date())); - sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); - sysMessage.setMessageReceiverType(ImppEnumUtil.MESSAGE_RECEIVER_TYPE.INTERNAL.getValue()); + if(sysMessage.getMessageSenderId() == null || sysMessage.getMessageSenderNameRdd() == null){ + sysMessage.setMessageSenderId(getSessionUser().getUser().getId()); + sysMessage.setMessageSenderNameRdd(getSessionUser().getUserName()); + } // 设置收件人名称 - String[] messageReceiver = sysMessage.getMessageReceiversId().split(","); - String receiversName = sysUserService.findSysUserByIds(StringTool.getArrayLong(messageReceiver)) - .stream().map(e -> e.getUserName()).collect(Collectors.joining(",")); + if(sysMessage.getMessageReceiversNameRdd() == null){ + String[] messageReceiver = sysMessage.getMessageReceiversId().split(","); + String receiversName = sysUserService.findSysUserByIds(StringTool.getArrayLong(messageReceiver)) + .stream().map(e -> e.getUserName()).collect(Collectors.joining(",")); + + sysMessage.setMessageReceiversNameRdd(receiversName); + } + + // 设置接收人类型 + if(sysMessage.getMessageReceiverType() == null){ + sysMessage.setMessageReceiverType(ImppEnumUtil.MESSAGE_RECEIVER_TYPE.INTERNAL.getValue()); + } - sysMessage.setMessageReceiversNameRdd(receiversName); + sysMessage.setMessageSendTime(TimeTool.getNowTime(true)); + sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); sysMessageService.doSendSysMessage(sysMessage); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); @@ -106,9 +115,6 @@ public class SysMessageController extends CoreBaseController { @ApiOperation(value = "修改信息",notes = "修改信息") public ResultBean updateSysMessage(SysMessage sysMessage){ try { - // 登录用户 - SessionUser user = AuthUtil.getSessionUser(); - // 条件校验 ValidatorBean.beginValid(sysMessage) .notNull("messageTitle",sysMessage.getMessageTitle()) @@ -208,7 +214,7 @@ public class SysMessageController extends CoreBaseController { @GetMapping(value = "/user-message/query-outbox") @ApiOperation(value = "查询用户发件箱,分页,排序") - public ResultBean querySysRefUserMessageByPager(SysMessage sysMessage,Pager pager){ + public ResultBean queryOutboxByPager(SysMessage sysMessage,Pager pager){ try { // 发件人为当前用户 sysMessage.setMessageType(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()); @@ -307,7 +313,7 @@ public class SysMessageController extends CoreBaseController { @PostMapping(value = "/user-message/insert") @ApiOperation(value = "用户新增消息",notes = "用户新增消息") - public ResultBean insertUserMessage(SysMessage sysMessage){ + public ResultBean insertUserMessage(SysMessage sysMessage) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 条件校验 @@ -333,4 +339,16 @@ public class SysMessageController extends CoreBaseController { } } + @GetMapping(value = "/user-message/query") + @ApiOperation(value = "消息复杂查询,分页,排序",notes = "消息复杂查询,分页,排序") + public ResultBean querySysRefUserMessageByPager(SysRefUserMessage sysRefUserMessage, Pager pager){ + try { + ListPager sysMessageListPager = sysMessageService.querySysRefUserMessageByPager(sysRefUserMessage, pager); + return ResultBean.success("操作成功").setListPager(sysMessageListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageSWebNoticeQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageSWebNoticeQueueReceiver.java new file mode 100644 index 0000000..f9ea12b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageSWebNoticeQueueReceiver.java @@ -0,0 +1,94 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.rabbitmq.client.Channel; +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.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : SWEB通知处理队列 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-15 22:15 + * @Modify: + **/ +@ConditionalOnExpression("'${impp.mq.queue.sweb.notice}' == 'true'") +@Component +public class MessageSWebNoticeQueueReceiver { + private static final Logger LOGGER = LoggerFactory.getLogger(MessageSWebNoticeQueueReceiver.class); + + @Autowired + private ISysMessageService sysMessageService; + + /** + * SWEB通知处理队列 + * + * @param msg + * @param channel + * @param message + */ + @RabbitListener(queues = PlatformConstWords.SWEB_NOTICE_QUEUE) + public void processImppMail(SysMessage msg, Channel channel, Message message) { + LOGGER.info("【MQ-{}】 数据接收成功:{}", PlatformConstWords.SWEB_NOTICE_QUEUE, msg); + try { + msg = sysMessageService.insertSysMessage(msg); + + if (StringUtils.isNotBlank(msg.getMessageReceiversId())) { + // 获取供应商信息 由string转换为json对象 + JSONObject userJsonObject = JSON.parseObject(msg.getMessageReceiversId()); + + List insertList = new ArrayList<>(userJsonObject.size()); + SysRefUserMessage refUserMessage; + + for (String user : userJsonObject.keySet()) { + refUserMessage = new SysRefUserMessage(); + refUserMessage.setMessageId(msg.getId()); + refUserMessage.setMessageSoftType(CommonEnumUtil.SOFT_TYPE.SWEB.getValue()); + refUserMessage.setMessageTitleRdd(msg.getMessageTitle()); + refUserMessage.setMessageTypeRdd(msg.getMessageType()); + refUserMessage.setMessageSenderNameRdd(msg.getMessageSenderNameRdd()); + refUserMessage.setReceiverId(Long.parseLong(user)); + refUserMessage.setReceiverNameRdd(userJsonObject.get(user).toString()); + refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); + refUserMessage.setIsUrgent(msg.getIsUrgent()); + + insertList.add(refUserMessage); + } + + sysMessageService.insertSysRefUserMessage(insertList); + } + + // 消息处理完成 + LOGGER.info("【MQ-{}】站内信{} DeliveryTag:{} 处理成功", PlatformConstWords.IMPP_MESSAGE_LETTER_QUEUE, + msg, message.getMessageProperties().getDeliveryTag()); + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (IOException e) { + try { + // 未成功处理,重新发送 + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + +} 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 37a1452..305bc8d 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 @@ -1,9 +1,9 @@ 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.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -27,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.HashMap; import java.util.List; /** @@ -107,9 +106,9 @@ public class SysMessageService implements ISysMessageService { pager = PagerHelper.getPager(pager, sysMessageRDao.listCount()); return new ListPager(sysMessageRDao.listPager(pager),pager); }else { - String hqlPack = CoreHqlPack.packHqlSysMessage(sysMessage); + DdlPackBean hqlPack = CoreHqlPack.packHqlSysMessage(sysMessage); pager = PagerHelper.getPager(pager, sysMessageRDao.findByHqlWhereCount(hqlPack)); - return new ListPager(sysMessageRDao.findByHqlWherePage(hqlPack + sysMessage.orderBy(),pager),pager); + return new ListPager(sysMessageRDao.findByHqlWherePage(hqlPack,pager),pager); } } @@ -172,13 +171,30 @@ public class SysMessageService implements ISysMessageService { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) - .setErrorDetail("数据不存在") + .setErrorDetail("用户消息不存在") .build(); } - sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue()); - sysRefUserMessageRDao.update(sysRefUserMessage); - return sysMessageRDao.getById(sysRefUserMessage.getMessageId()); + SysMessage sysMessage = sysMessageRDao.getById(sysRefUserMessage.getMessageId()); + if (sysMessage == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("消息主体不存在") + .build(); + } + + // 更新状态消息状态以及阅读数量 + if(sysRefUserMessage.getMessageStatusValue() == ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()) { + sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue()); + sysRefUserMessageRDao.update(sysRefUserMessage); + + // 阅读数累加1 + sysMessage.setReadCount(sysMessage.getReadCount() + 1); + sysMessageRDao.update(sysMessage); + } + + return sysMessage; } @Override