From e1008dbb1fa76874a28c06913b95c16d18acdfa7 Mon Sep 17 00:00:00 2001 From: wl <173@qq.com> Date: 星期五, 11 十一月 2022 17:54:52 +0800 Subject: [PATCH] 短信模块 消息列表 --- ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java | 210 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 155 insertions(+), 55 deletions(-) diff --git a/ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java index fa273a6..8c09bae 100644 --- a/ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java +++ b/ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java @@ -1,26 +1,42 @@ package com.ycl.service.message.impl; +import cn.hutool.core.net.url.UrlBuilder; +import cn.hutool.core.net.url.UrlPath; 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.fasterxml.jackson.databind.ObjectMapper; +import com.ycl.controller.video.common.constant.ChannelCode; +import com.ycl.controller.video.common.util.CommonUtils; import com.ycl.dto.message.MessageParam; import com.ycl.entity.message.Message; +import com.ycl.entity.message.SendReq; +import com.ycl.entity.message.SendRes; 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 com.ycl.utils.MD5Util; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Base64Utils; +import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; +import javax.mail.internet.MimeMessage; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -35,78 +51,162 @@ @Service public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService { + @Value("${e-mail.sendHost}") + private String sendHost; + + @Value("${e-mail.username}") + private String userName; + + @Value("${e-mail.password}") + private String password; + + @Value(value = "${SMS.ecName}") + private String ecName; //闆嗗洟瀹㈡埛鍚嶇О + + @Value(value = "${SMS.apId}") + private String apId; //鐢ㄦ埛鍚� + + @Value(value = "${SMS.sign}") + private String sign; //缃戝叧绛惧悕缂栫爜锛屽繀濉紝绛惧悕缂栫爜鍦ㄤ腑鍥界Щ鍔ㄩ泦鍥㈠紑閫氬笎鍙峰悗鍒嗛厤锛屽彲浠ュ湪浜慚AS缃戦〉绔鐞嗗瓙绯荤粺-SMS鎺ュ彛绠$悊鍔熻兘涓笅杞姐�� + + @Value(value = "${SMS.url}") + private String url; @Resource private UmsAdminMapper umsAdminMapper; + @Resource + private MessageMapper messageMapper; + + @Resource + RestTemplate restTemplate; @Override - public Message sendMessage(MessageParam messageParam) { - Message message = null; - Provider provider = null; - switch (messageParam.getChannelCode()) - { - //鍐呯珯鍙戦�� - case ChannelCode.INNER: - provider = new InnerFactory(); - break; + @Transactional(rollbackFor = Exception.class) + public String sendMessage(Message message) { + Message savedMessage = messageMapper.selectOne(new LambdaQueryWrapper<Message>() + .eq(Message::getTargetTo, message.getTargetTo()) + .eq(Message::getTargetFrom, message.getTargetFrom())); + if (savedMessage != null) { + messageMapper.deleteById(savedMessage); + } + + ArrayList<Long> ids = new ArrayList<>(); + + for (String receive : message.getTargetTo().split(",")) { + Message sendMessage = new Message(); + BeanUtils.copyProperties(message, sendMessage); + sendMessage.setCreateTime(new Date()); + sendMessage.setSendTime(new Date()); + sendMessage.setTargetTo(receive); + sendMessage.setSendTime(new Date()); + this.save(sendMessage); + ids.add(sendMessage.getId()); + } + switch (message.getChannelCode()) { //閭欢鍙戦�� case ChannelCode.SMS: - provider = new MailFactory(); + sendSMS(message, ids); break; - //鐭俊鍙戦�� + //鐭俊鍙戦�� case ChannelCode.MAIL: - provider = new SmsFactory(); + sendMail(message); break; default: throw new ApiException("鏈尮閰嶅埌璇ョ被鍨�"); } - Sender sender = provider.produce(); - sender.sendMessage(messageParam); - return message; + return "send message success!"; + } + + @SneakyThrows + private void sendSMS(Message message, List<Long> mesIds) { + String context = "銆�" + message.getHead() + "銆�" + message.getBody(); + String addSerial = ""; + SendReq sendReq = new SendReq(); + sendReq.setEcName(ecName); + sendReq.setApId(apId); + sendReq.setSign(sign); + sendReq.setContext(context); + String[] ids = message.getTargetTo().split(","); + String[] mobiles = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + mobiles[i] = umsAdminMapper.selectById(ids[i]).getMobile(); + } + sendReq.setMobiles(StringUtils.join(mobiles, ",")); + sendReq.setAddSerial(addSerial); + + StringBuffer mac = new StringBuffer(); + mac.append(ecName); + mac.append(apId); + mac.append(sendReq.getMobiles()); + mac.append(context); + mac.append(sign); + mac.append(addSerial); + sendReq.setMac(MD5Util.md5Encrypt32Lower(mac.toString())); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + + ObjectMapper objectMapper = new ObjectMapper(); + + HttpEntity<String> stringHttpEntity = new HttpEntity<>(Base64Utils.encodeToString(objectMapper.writeValueAsBytes(mac)), httpHeaders); + + SendRes sendRes = objectMapper.readValue(restTemplate.postForEntity(url, stringHttpEntity, String.class).getBody(), SendRes.class); + Message sendedMessage = new Message(); + if (sendRes.getRspcod().equals("success")) { + for (Long id : mesIds) { + sendedMessage.setStatus(2); + sendedMessage.setRespondResult("鍙戦�佹垚鍔�"); + sendedMessage.setId(id); + sendedMessage.setUpdateTime(new Date()); + sendedMessage.setSendTime(new Date()); + messageMapper.updateById(sendedMessage); + } + } else { + for (Long id : mesIds) { + sendedMessage.setStatus(3); + sendedMessage.setRespondResult("鍙戦�佸け璐�"); + sendedMessage.setSendTime(new Date()); + sendedMessage.setId(id); + sendedMessage.setUpdateTime(new Date()); + messageMapper.updateById(sendedMessage); + } + } + } + + //鍙戦�侀偖浠� + @SneakyThrows + private void sendMail(Message message) { + JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); + javaMailSender.setHost(sendHost); + javaMailSender.setUsername(userName); + javaMailSender.setPassword(password); + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage); + helper.setText(message.getBody()); + helper.setSubject(message.getHead()); + helper.setFrom(userName); + String[] ids = message.getTargetTo().split(","); + String[] address = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + address[i] = umsAdminMapper.selectById(ids[i]).getEmail(); + } + helper.setTo(address); + javaMailSender.send(mimeMessage); } @Override - public IPage<Message> list(MessageParam messageParam) { + public Page<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; + return messageMapper.selectMessagePage(page,messageParam); } @Override public Boolean deleteMessages(List<Long> ids) { LambdaQueryWrapper<Message> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(Message::getId, ids).or().in(Message::getParentId,ids); + 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()); + List<Long> deleteIds = messages.stream().map(Message::getId).collect(Collectors.toList()); baseMapper.deleteBatchIds(deleteIds); } return true; -- Gitblit v1.8.0