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;
|
|
/**
|
* <p>
|
* 消息 服务实现类
|
* </p>
|
*
|
* @author mg
|
* @since 2022-10-08
|
*/
|
@Service
|
public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> 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<Message> list(MessageParam messageParam) {
|
Page<Message> page = new Page<>(messageParam.getCurrent(), messageParam.getPageSize());
|
LambdaQueryWrapper<Message> 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<Message> result = baseMapper.selectPage(page, queryWrapper);
|
List<Message> messages = result.getRecords();
|
if (!CommonUtils.isEmpty(messages)) {
|
List<Long> ids = messages.stream().map(e -> Long.parseLong(e.getTargetFrom().trim())).collect(Collectors.toList());
|
LambdaQueryWrapper<UmsAdmin> queryUSers = new LambdaQueryWrapper<>();
|
queryUSers.in(UmsAdmin::getId, ids);
|
List<UmsAdmin> 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;
|
}
|
|
@Override
|
public Boolean deleteMessages(List<Long> ids) {
|
LambdaQueryWrapper<Message> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.in(Message::getId, ids).or().in(Message::getParentId,ids);
|
List<Message> messages = baseMapper.selectList(queryWrapper);
|
if (CommonUtils.isNotEmpty(messages)) {
|
List<Long> deleteIds = messages.stream().map(Message::getId).collect(Collectors.toList());
|
baseMapper.deleteBatchIds(deleteIds);
|
}
|
return true;
|
}
|
}
|