package com.ycl.service.message.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.constant.ChannelCode;
import com.ycl.common.util.CommonUtils;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
import com.ycl.entity.user.UmsAdmin;
import com.ycl.exception.ApiException;
import com.ycl.mapper.message.MessageMapper;
import com.ycl.mapper.user.UmsAdminMapper;
import com.ycl.service.message.IMessageService;
import com.ycl.service.message.Provider;
import com.ycl.service.message.Sender;
import com.ycl.service.message.factory.InnerFactory;
import com.ycl.service.message.factory.MailFactory;
import com.ycl.service.message.factory.SmsFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 消息 服务实现类
*
*
* @author mg
* @since 2022-10-08
*/
@Service
public class MessageServiceImpl extends ServiceImpl implements IMessageService {
@Resource
private UmsAdminMapper umsAdminMapper;
@Override
public Message sendMessage(MessageParam messageParam) {
Message message = null;
Provider provider = null;
switch (messageParam.getChannelCode())
{
//内站发送
case ChannelCode.INNER:
provider = new InnerFactory();
break;
//邮件发送
case ChannelCode.SMS:
provider = new MailFactory();
break;
//短信发送
case ChannelCode.MAIL:
provider = new SmsFactory();
break;
default:
throw new ApiException("未匹配到该类型");
}
Sender sender = provider.produce();
sender.sendMessage(messageParam);
return message;
}
@Override
public IPage list(MessageParam messageParam) {
Page page = new Page<>(messageParam.getCurrent(), messageParam.getPageSize());
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Message::getParentId, 0);
if (!CommonUtils.isEmpty(messageParam.getHead())) {
queryWrapper.eq(Message::getHead, messageParam.getHead());
}
if (!CommonUtils.isEmpty(messageParam.getChannelCode())) {
queryWrapper.eq(Message::getChannelCode, messageParam.getChannelCode());
}
if (!CommonUtils.isEmpty(messageParam.getStatus())) {
queryWrapper.eq(Message::getStatus, messageParam.getStatus());
}
queryWrapper.orderByDesc(Message::getCreateTime);
Page result = baseMapper.selectPage(page, queryWrapper);
List messages = result.getRecords();
if (!CommonUtils.isEmpty(messages)) {
List ids = messages.stream().map(e -> Long.parseLong(e.getTargetFrom().trim())).collect(Collectors.toList());
LambdaQueryWrapper queryUSers = new LambdaQueryWrapper<>();
queryUSers.in(UmsAdmin::getId, ids);
List users = umsAdminMapper.selectList(queryUSers);
if (!CommonUtils.isEmpty(users)) {
for (UmsAdmin user : users) {
for (Message message : messages) {
if (message.getTargetFrom().equals(user.getId()+"")) {
message.setTargetFrom(user.getUsername());
}
}
}
}
}
return result;
}
}