/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.messageRecord.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import liquibase.pro.packaged.S; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.modules.email.service.IEmailAccountService; import org.springblade.modules.email.service.IEmailService; import org.springblade.modules.messageRecord.entity.MessageRecord; import org.springblade.modules.messageRecord.entity.MessageUser; import org.springblade.modules.messageRecord.service.IMessageUserService; import org.springblade.modules.messageRecord.vo.MessageRecordVO; import org.springblade.modules.messageRecord.mapper.MessageRecordMapper; import org.springblade.modules.messageRecord.service.IMessageRecordService; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.modules.system.entity.User; import org.springblade.modules.system.service.IUserService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.transaction.annotation.Transactional; import javax.mail.MessagingException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 消息记录表 服务实现类 * * @author BladeX * @since 2024-01-18 */ @Service @AllArgsConstructor public class MessageRecordServiceImpl extends BaseServiceImpl implements IMessageRecordService { private final IMessageUserService messageUserService; private final IUserService userService; private final IEmailAccountService emailAccountService; @Override public IPage selectMessageRecordPage(IPage page, MessageRecordVO messageRecord) { return page.setRecords(baseMapper.selectMessageRecordPage(page, messageRecord)); } @Override @Transactional(rollbackFor = Exception.class) public Boolean customizeSave(MessageRecordVO messageRecord) { if (StringUtils.isBlank(messageRecord.getType())) { return false; } List userList = new ArrayList(); if (messageRecord.getMessageResource().equals("1")) { //系统消息(receiveUser指定的是部门,所以要通过部门去查人) userList = userService.getUserListByDeptIds(messageRecord.getReceiver()); } else if (messageRecord.getMessageResource().equals("2")) { //用户消息(receiveUser指定的是人) userList = userService.getUserListByIds(messageRecord.getReceiver()); } //保存消息记录 boolean saveRecord = save(messageRecord); List messageUserList = new ArrayList<>(); userList.forEach(user -> { List longs = Func.toStrList(messageRecord.getType()); for (String type : longs) { MessageUser messageUser = new MessageUser(); messageUser.setUserId(user.getId().toString()); messageUser.setMessageRecordId(messageRecord.getId()); messageUser.setType(type); messageUser.setCreateTime(DateUtil.now()); messageUser.setUpdateTime(DateUtil.now()); messageUser.setSendStatus("1"); if (messageUser.getType().indexOf("1") > -1) { messageUser.setSendStatus("2"); } else if (messageUser.getType().indexOf("2") > -1) { messageUser.setEmail(user.getEmail()); } else if (messageUser.getType().indexOf("3") > -1) { messageUser.setSendStatus("2"); messageUser.setPhone(user.getPhone()); } messageUserList.add(messageUser); } }); //在message_user表里存数据 boolean saveBatch = messageUserService.saveBatch(messageUserList); if (saveBatch && saveRecord) { if (messageRecord.getType().indexOf("2") > -1) { Boolean aBoolean = emailAccountService.sendMessageUserEmail(messageRecord.getTitle(), messageRecord.getContent(), messageUserList); // 邮件发送成功,更新邮件状态 if (aBoolean) { List collect = messageUserList.stream().filter(e -> StringUtil.isNotBlank(e.getEmail())).collect(Collectors.toList()); messageUserService.updateBatchById(collect); } } if (messageRecord.getType().indexOf("3") > -1) { return true; } } return saveBatch && saveRecord; } @Override public Boolean sendMessage(String id) { //查询MessageRecord表里的数据 MessageRecord messageRecord = getById(id); //查询MessageUser表里的数据 List messageUserList = messageUserService.list(new QueryWrapper().eq("message_record_id", id)); if (messageRecord.getType().indexOf("2") > -1) { return emailAccountService.sendMessageUserEmail(messageRecord.getTitle(), messageRecord.getContent(), messageUserList); } if (messageRecord.getType().indexOf("3") > -1) { return true; } return true; } @Override public List getUnreadList() { try { List aa = emailAccountService.getUnreadList(); return aa; } catch (MessagingException e) { e.printStackTrace(); } return null; } }