| | |
| | | import com.aliyun.oss.OSSClientBuilder; |
| | | import com.aliyun.oss.OSSException; |
| | | import com.aliyun.oss.model.GetObjectRequest; |
| | | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.mzl.flower.config.OssProperties; |
| | |
| | | import com.mzl.flower.constant.Constants; |
| | | import com.mzl.flower.dto.request.sms.SmsTaskDTO; |
| | | import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO; |
| | | import com.mzl.flower.dto.request.sms.SmsUserDTO; |
| | | import com.mzl.flower.dto.response.sms.SmsSelectVO; |
| | | import com.mzl.flower.dto.response.sms.SmsTaskVO; |
| | | import com.mzl.flower.entity.SmsTaskDO; |
| | | import com.mzl.flower.entity.SmsTaskDetailDO; |
| | |
| | | import com.mzl.flower.mapper.SmsTaskDetailMapper; |
| | | import com.mzl.flower.mapper.SmsTaskMapper; |
| | | import com.mzl.flower.mapper.SmsTemplateMapper; |
| | | import com.mzl.flower.mapper.system.UserMapper; |
| | | import com.mzl.flower.service.sms.SmsTaskDetailService; |
| | | import com.mzl.flower.service.sms.SmsTaskService; |
| | | import com.mzl.flower.service.system.UserService; |
| | | import com.mzl.flower.utils.SmsUtil; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.poi.ss.usermodel.*; |
| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.concurrent.CompletableFuture; |
| | |
| | | public class SmsTaskServiceImpl extends ServiceImpl<SmsTaskMapper, SmsTaskDO> implements SmsTaskService { |
| | | private final OssProperties ossProperties; |
| | | private final SmsTaskMapper smsTaskMapper; |
| | | |
| | | private final UserMapper userMapper; |
| | | |
| | | private final SmsTemplateMapper smsTemplateMapper; |
| | | |
| | |
| | | if (Constants.SMS_RECEIVE_TYPE.IMPORT.name().equals(smsTaskDTO.getType())) { |
| | | dealImportExcel(smsTaskDTO); |
| | | } |
| | | List<SmsUserDTO> smsUserDTOS = smsTaskDTO.getSmsUserDTOS(); |
| | | List<String> userIds = smsUserDTOS.stream() |
| | | .map(SmsUserDTO::getUserId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | List<String> userPhones = smsUserDTOS.stream() |
| | | .map(SmsUserDTO::getUserPhone) |
| | | .collect(Collectors.toList()); |
| | | |
| | | if(CollectionUtils.isEmpty(userPhones)){ |
| | | String phones = userPhones.stream() |
| | | .map(Object::toString) // 确保每个元素都转换为字符串 |
| | | .collect(Collectors.joining("\n")); // 使用换行符连接字符串 |
| | | smsTaskDTO.setPhones(phones); // 假设有一个setPhones方法用于设置phones字段 |
| | | } |
| | | SmsTaskDO smsTaskDO = new SmsTaskDO(); |
| | | BeanUtils.copyProperties(smsTaskDTO, smsTaskDO); |
| | | if (CollectionUtils.isEmpty(userIds)) { |
| | | String userIdInfos = userIds.stream().map(Object::toString) // 确保每个元素都转换为字符串 |
| | | .collect(Collectors.joining(";")); // 使用换行符连接字符串 |
| | | smsTaskDO.setUserIds(userIdInfos); |
| | | } |
| | | smsTaskDO.setStatus(Constants.SMS_TASK_STATUS.wait_publish.name()); |
| | | smsTaskDO.setPhones(smsTaskDTO.getPhones()); |
| | | smsTaskDO.create(SecurityUtils.getUserId()); |
| | |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public List<SmsSelectVO> getSelectList(Long id) { |
| | | List<SmsSelectVO> smsSelectVOList = null; |
| | | SmsTaskDO smsTaskDO = smsTaskMapper.selectById(id); |
| | | String ids = smsTaskDO.getUserIds(); |
| | | if (StringUtils.isEmpty(ids)) { |
| | | return smsSelectVOList; |
| | | } else { |
| | | String[] idArray = ids.split(";"); |
| | | List<String> idList = Arrays.asList(idArray); |
| | | return userMapper.getSelectList(idList); |
| | | } |
| | | } |
| | | |
| | | private List<SmsTaskDetailDO> createSmsTaskDetails(SmsTaskDO smsTaskDO, List<String> phoneNumbers) { |
| | | return phoneNumbers.stream().map(phone -> { |
| | | SmsTaskDetailDO detail = new SmsTaskDetailDO(); |
| | | detail.setSmsTaskId(smsTaskDO.getId()); |
| | | detail.setSmsTemplateId(smsTaskDO.getSmsTemplateId()); |
| | | detail.setPhone(phone); |
| | | detail.create(); |
| | | return detail; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | |
| | | String templateCode = smsTemplateDO.getCode(); |
| | | for (SmsTaskDetailDO detail : smsTaskDetailDOList) { |
| | | try { |
| | | SmsUtil.sendSms(detail.getPhone(), templateCode, null); |
| | | detail.setResult(Constants.SMS_SEND_RESULT.success.name()); |
| | | SendSmsResponse sendSmsResponse = SmsUtil.sendSms(detail.getPhone(), templateCode, null); |
| | | if("OK".equals(sendSmsResponse.getCode())){ |
| | | detail.setResult(Constants.SMS_SEND_RESULT.success.name()); |
| | | }else{ |
| | | detail.setFailReason(sendSmsResponse.getMessage()); |
| | | detail.setResult(Constants.SMS_SEND_RESULT.failure.name()); |
| | | } |
| | | detail.setResponseResult(sendSmsResponse.toString()); |
| | | } catch (Exception e) { |
| | | detail.setResult(Constants.SMS_SEND_RESULT.failure.name()); |
| | | System.err.println("Failed to send SMS to " + detail.getPhone() + ": " + e.getMessage()); |