2020开篇博客-通知模块逻辑代码开发

自研的通知功能业务逻辑代码优化版(全)

/**
 * @author lzq
 * @date 2019/12/31
 */
@Service
public class MessageService {

    private static final Logger logger = LoggerFactory.getLogger(MessageService.class);

    @Autowired
    private TabMessageMapper messageMapper;
    @Autowired
    private MapperService mapperService;
    @Autowired
    private ClientUserService clientUserService;

    /**
     * 批量删除通知
     */
    public void batchDelete(List<String> ids) {

        TabMessageExample tabMessageExample = new TabMessageExample();
        tabMessageExample.createCriteria().andIdIn(ids);
        messageMapper.deleteByExample(tabMessageExample);

    }

    /**
     * 添加通知
     */
    public void save(String receiveId, MessageBody messageBody){
        try {

            TabMessage tabMessage = new TabMessage();
            tabMessage.setId(UuidUtils.getUuid());
            tabMessage.setReceiveId(receiveId);
            // operationId 指的是操作Id:任务编号/交易编号
            tabMessage.setOperationId(messageBody.getOperationId());
            tabMessage.setMessageTitle(messageBody.getMessageTitle());
            tabMessage.setMessageType(messageBody.getMessageType());
            tabMessage.setStatus(messageBody.getMessageStatus());
            // messageContent属性为通知内容,以下是场景意义
            // 1,公告信息直接就是信息主体内容
            // 2,系统通知就是操作结果当前标态(待审核、审核通过、驳回/已完成、部分完成、待支付、异常/鉴权、锁定/充值到账/提现完成等)
            // 3, 提现、充值通知带账户余额,用"-"拼接:内容(操作结果当前标态)与余额
            if (messageBody.getMessageContent().equals("") || messageBody.getMessageContent() == null) {
                tabMessage.setMessageContent(MessageCommon.NOTICE);
            } else {
                tabMessage.setMessageContent(messageBody.getMessageContent());
            }
            tabMessage.setCreateAt(new Date());
            tabMessage.setUpdateAt(new Date());

            messageMapper.insertSelective(tabMessage);
        } catch (Exception e) {
            logger.error("新增出错");
        }
    }

    /**
     * 用户查询系统通知
     * 各个类型的全部消息
     */
    public QueryResult<List<TabMessage>> getBaseMessage(Integer scope, String sort, String orderBy, Integer offset, Integer limit, SpringInstUserEntity userEntity) throws Exception {

        Page page = PageHelper.offsetPage(offset, limit).setOrderBy(orderBy + " " + sort);
        TabMessageExample tabMessageExample = new TabMessageExample();
        TabMessageExample.Criteria messageCriteria = tabMessageExample.createCriteria();
        LoginUser loginUser = clientUserService.preLoginUser(userEntity);
        List<Integer>  codeList = Arrays.asList(InstitutionTypeEnum.CORP.getCode(),InstitutionTypeEnum.PLAT.getCode());
        if(codeList.contains(loginUser.getIdentity())){
            messageCriteria.andReceiveIdEqualTo(loginUser.getCorporation().getId());
        }
        if (scope == MessageStatusEnum.UN_READ.getCode() || scope == MessageStatusEnum.READ_FINISH.getCode()) {
            messageCriteria.andStatusEqualTo(scope);
        }
        List<TabMessage> messageList = messageMapper.selectByExample(tabMessageExample).stream().
                sorted(Comparator.comparing(TabMessage::getCreateAt).reversed()).collect(Collectors.toList());

        return new QueryResult<>((int) page.getTotal(), offset, limit, messageList);
    }

    /**
     * 用户查看具体的通知信息
     * messageContent属性为通知内容,以下是场景意义
     * 1,公告信息直接就是信息主体内容
     * 2,系统通知就是操作结果当前标态(待审核、审核通过、驳回/已完成、部分完成、异常/充值到账-余额/提现完成-余额等)
     */
    @Transactional(rollbackFor = Exception.class)
    public MessageResponseBody getDetailMessage(String messageId, SpringInstUserEntity userEntity) throws ApiException {

        LoginUser loginUser = clientUserService.preLoginUser(userEntity);
        TabMessageExample tabMessageExample = new TabMessageExample();
        tabMessageExample.createCriteria().andIdEqualTo(messageId);
        List<TabMessage> messageList = messageMapper.selectByExample(tabMessageExample);
        MessageResponseBody responseBody = new MessageResponseBody();
        if (CollectionUtils.isNotEmpty(messageList)) {
            TabMessage tabMessage = messageList.get(0);
            responseBody.setMessageId(tabMessage.getId());
            responseBody.setMessageStatus(tabMessage.getStatus());
            responseBody.setMessageTitle(tabMessage.getMessageTitle());
            responseBody.setMessageType(tabMessage.getMessageType());
            responseBody.setMessageTime(tabMessage.getCreateAt());
            // messageContent属性为通知内容,以下是场景意义
            // 1,公告信息直接就是信息主体内容
            // 2,系统通知就是操作结果当前标态(待审核、审核通过、驳回/已完成、部分完成、异常/充值到账-余额/提现完成-余额等)
            responseBody.setMessageContent(tabMessage.getMessageContent());
            // 消息通知为任务、开票、支付系列--查询任务表
            if (tabMessage.getMessageType() == MessageTypeEnum.TASK.getCode()
                    || tabMessage.getMessageType() == MessageTypeEnum.OPEN_TICKET.getCode()
                    || tabMessage.getMessageType() == MessageTypeEnum.PAY_CHARGE.getCode()) {

                TabTask tabTask = mapperService.getTaskByNo(tabMessage.getOperationId());
                // OperationId为任务编号,任务系列需返回值/提现充值不需要
                responseBody.setTaskNo(tabMessage.getOperationId());
                // 判断用户公司类型
                // 平台公司
                if (loginUser.getIdentity() == InstitutionTypeEnum.PLAT.getCode()) {
                    responseBody.setMessageStartCorp(tabTask.getCorpId());
                    responseBody.setMessageEndCorp(tabTask.getPlatCorpId());
                } else if (loginUser.getIdentity() == InstitutionTypeEnum.CORP.getCode()) {
                    responseBody.setMessageStartCorp(tabTask.getPlatCorpId());
                    responseBody.setMessageEndCorp(tabTask.getCorpId());
                } else {
                    if (tabTask.getCorpId().equals(tabMessage.getReceiveId())) {
                        responseBody.setMessageStartCorp(tabTask.getPlatCorpId());
                    } else {
                        responseBody.setMessageStartCorp(tabTask.getCorpId());
                    }
                    responseBody.setMessageEndCorp(tabMessage.getReceiveId());
                }
                // 支付的完成支付金额与任务和开票的综合服务费为同一个值
                responseBody.setServiceCharge(tabTask.getPayAmount());
                // 任务、开票的申请时间/支付的打款时间
                responseBody.setTaskApplyDateTime(tabTask.getCreateAt());
                // 任务、开票的审核通过时间/支付的完成时间
                if (MessageCommon.applyPassValue.equals(tabMessage.getMessageContent())
                        || MessageCommon.PAY_FINISHED.equals(tabMessage.getMessageContent())) {
                    responseBody.setTaskPassDateTime(tabMessage.getCreateAt());
                }
                // 其他通知类型(充值,提现,鉴权等交易)--查询交易表
            } else {
                List<TabTransaction> transactionList = mapperService.getTransactionByTxnId(tabMessage.getOperationId());
                if (CollectionUtils.isNotEmpty(transactionList)) {
                    TabTransaction tabTransaction = transactionList.get(0);
                    // checkUserType
                    // 始为商户
                    responseBody.setMessageStartCorp(tabTransaction.getCorpId());
                    // 终为接收
                    responseBody.setMessageEndCorp(tabMessage.getReceiveId());
                    // 充值,提现开始时间--交易创建的时间
                    responseBody.setTaskApplyDateTime(tabTransaction.getCreateAt());
                    // 充值到账、提现完成时间--通知创建时间
                    responseBody.setTaskPassDateTime(tabMessage.getCreateAt());
                    // 提现,充值成功之后的账户余额
                    responseBody.setAccountBalance(tabMessage.getMessageContent().split("-")[1]);
                    // 提现、充值综合服务费
                    responseBody.setServiceCharge(tabTransaction.getPayAmount());
                }
            }
        }
        return responseBody;
    }

    /**
     * 获取最新10条数据
     * 用于主页切换显示\服务用户功能
     * 先按最新时间展示未读消息
     * 若未读消息小于10
     * 往后补上已读消息凑满10条
     */
    public List<TabMessage> getNewestTenMessage(SpringInstUserEntity userEntity) throws Exception {

        LoginUser loginUser = clientUserService.preLoginUser(userEntity);
        TabMessageExample tabMessageExample = new TabMessageExample();
        tabMessageExample.createCriteria().andReceiveIdEqualTo(loginUser.getCorporation().getId())
                .andStatusEqualTo(MessageStatusEnum.UN_READ.getCode());

        // 按通知的最新进行排序
        List<TabMessage> tabMessageList = messageMapper.selectByExample(tabMessageExample).stream()
                .sorted(Comparator.comparing(TabMessage::getCreateAt).reversed()).collect(Collectors.toList());
        List<TabMessage> newTenMessageList = new ArrayList<>(MessageCommon.SWITCH_MESSAGE_MAX);
        // 当未读`消息小于10条时,取已读筹凑满10条;否则取10条
        int listNum = tabMessageList.size();
        if (listNum < MessageCommon.SWITCH_MESSAGE_MAX) {
            newTenMessageList.addAll(tabMessageList);
            TabMessageExample tabMessageExampleFinish = new TabMessageExample();
            tabMessageExampleFinish.createCriteria().andReceiveIdEqualTo(loginUser.getCorporation().getId())
                    .andStatusEqualTo(MessageStatusEnum.READ_FINISH.getCode());
            // 已读
            List<TabMessage> finishMessageList = messageMapper.selectByExample(tabMessageExampleFinish).stream()
                    .sorted(Comparator.comparing(TabMessage::getCreateAt).reversed()).collect(Collectors.toList());
            // 未或刚凑满
            if(finishMessageList.size() <= MessageCommon.SWITCH_MESSAGE_MAX - listNum){
                newTenMessageList.addAll(finishMessageList);
            }else{
                newTenMessageList.addAll(finishMessageList.subList(0,MessageCommon.SWITCH_MESSAGE_MAX - listNum));
            }
        } else {
            newTenMessageList.addAll(newTenMessageList.subList(0,MessageCommon.SWITCH_MESSAGE_MAX));
        }
        return newTenMessageList;
    }

    /**
     * 根据指定id获取一条通知
     */
    public TabMessage getOneMessage(String id){

        TabMessageExample tabMessageExample = new TabMessageExample();
        tabMessageExample.createCriteria().andIdEqualTo(id);
        List<TabMessage> tabMessageList = messageMapper.selectByExample(tabMessageExample);

        if(CollectionUtils.isNotEmpty(tabMessageList)){

            return tabMessageList.get(0);
        }
        return null;
    }

    /**
     * 更改信息的状态为已读
     */
    public void updateMessage(SpringInstUserEntity userEntity,TabMessage tabMessage) throws Exception{

        LoginUser loginUser = clientUserService.preLoginUser(userEntity);
        List<Integer> codeList = Arrays.asList(InstitutionTypeEnum.PLAT.getCode(),InstitutionTypeEnum.CORP.getCode());
        if(codeList.contains(loginUser.getIdentity())) {
            tabMessage.setStatus(MessageStatusEnum.READ_FINISH.getCode());
            messageMapper.updateByPrimaryKeySelective(tabMessage);
        }else {
            logger.info("管理员读取信息不需要更新信息为已读");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值