短信优化

This commit is contained in:
zt
2025-10-17 10:15:11 +08:00
parent d6a378f711
commit 1acc676b0f
3 changed files with 31 additions and 17 deletions

View File

@ -175,7 +175,7 @@ sms:
# 配置源类型用于标定配置来源(interface,yaml) # 配置源类型用于标定配置来源(interface,yaml)
config-type: yaml config-type: yaml
# 用于标定yml中的配置是否开启短信拦截接口配置不受此限制 # 用于标定yml中的配置是否开启短信拦截接口配置不受此限制
restricted: true restricted: false
# 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效
minute-max: 1 minute-max: 1
# 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效

View File

@ -19,9 +19,7 @@ import org.dromara.system.service.ISysRoleService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
@Slf4j @Slf4j
@Component @Component
@ -59,6 +57,7 @@ public class DesignFileJob {
.eq(DesSmsRecord::getAgain, "1") .eq(DesSmsRecord::getAgain, "1")
.le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较 .le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较
); );
HashSet<String> phoneNumbers = new HashSet<>();
for (DesSmsRecord record : records) { for (DesSmsRecord record : records) {
DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId()); DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId());
DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId()); DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId());
@ -85,10 +84,13 @@ public class DesignFileJob {
List<Long> list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList(); List<Long> list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList();
//找出没有查看的人 发送短信 //找出没有查看的人 发送短信
List<SysUser> list2 = sysUsers.stream().filter(vo -> !list1.contains(vo.getUserId())).toList(); List<SysUser> list2 = sysUsers.stream().filter(vo -> !list1.contains(vo.getUserId())).toList();
asyncUtil.sendSms(list2.stream().map(SysUser::getPhonenumber).toList(), "config5"); phoneNumbers.addAll(list2.stream().map(SysUser::getPhonenumber).toList());
} }
if(CollectionUtil.isEmpty(phoneNumbers)){
return;
}
asyncUtil.sendSms(new ArrayList<>(phoneNumbers), "config5");
List<Long> list1 = records.stream().map(DesSmsRecord::getId).toList(); List<Long> list1 = records.stream().map(DesSmsRecord::getId).toList();
desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1) desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1)

View File

@ -51,32 +51,40 @@ public class InspectionJob {
SmsBlend smsBlend = SmsFactory.getSmsBlend("config4"); SmsBlend smsBlend = SmsFactory.getSmsBlend("config4");
List<String> phones = new ArrayList<>();
List<Long> userIds = new ArrayList<>();
// 每500条记录作为一批进行处理 // 每500条记录作为一批进行处理
int batchSize = 500; int batchSize = 500;
for (int i = 0; i < list.size(); i += batchSize) { for (int i = 0; i < list.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, list.size()); int endIndex = Math.min(i + batchSize, list.size());
List<QltQualityInspection> batch = list.subList(i, endIndex); List<QltQualityInspection> batch = list.subList(i, endIndex);
List<Long> userIds = new ArrayList<>();
for (QltQualityInspection qualityInspection : batch) { for (QltQualityInspection qualityInspection : batch) {
Long correctorId = qualityInspection.getCorrectorId(); Long correctorId = qualityInspection.getCorrectorId();
String phonenumber = userService.queryById(correctorId).getPhonenumber(); String phonenumber = userService.queryById(correctorId).getPhonenumber();
if (phonenumber == null) { if (phonenumber == null) {
continue; continue;
} }
if(phones.contains(phonenumber)){
continue;
}
phones.add(phonenumber);
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>());
if (!smsResponse.isSuccess()) { if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse); log.error("验证码短信发送异常 => {}", smsResponse);
} }
userIds.add(correctorId); if(!userIds.contains(correctorId)){
} userIds.add(correctorId);
if(userIds.isEmpty()){ }
continue;
} }
log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
if(!userIds.isEmpty()){
SseMessageDto sseMessageDto = new SseMessageDto(); SseMessageDto sseMessageDto = new SseMessageDto();
sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!"); sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!");
sseMessageDto.setUserIds(userIds); sseMessageDto.setUserIds(userIds);
SseMessageUtils.publishMessage(sseMessageDto); SseMessageUtils.publishMessage(sseMessageDto);
log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
} }
log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size()); log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size());
@ -93,34 +101,38 @@ public class InspectionJob {
SmsBlend smsBlend = SmsFactory.getSmsBlend("config6"); SmsBlend smsBlend = SmsFactory.getSmsBlend("config6");
List<String> phones = new ArrayList<>();
List<Long> userIds = new ArrayList<>();
// 每500条记录作为一批进行处理 // 每500条记录作为一批进行处理
int batchSize = 500; int batchSize = 500;
for (int i = 0; i < list.size(); i += batchSize) { for (int i = 0; i < list.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, list.size()); int endIndex = Math.min(i + batchSize, list.size());
List<HseSafetyInspection> batch = list.subList(i, endIndex); List<HseSafetyInspection> batch = list.subList(i, endIndex);
List<Long> userIds = new ArrayList<>();
for (HseSafetyInspection safetyInspection : batch) { for (HseSafetyInspection safetyInspection : batch) {
Long correctorId = safetyInspection.getCorrectorId(); Long correctorId = safetyInspection.getCorrectorId();
String phonenumber = userService.queryById(correctorId).getPhonenumber(); String phonenumber = userService.queryById(correctorId).getPhonenumber();
if (phonenumber == null) { if (phonenumber == null) {
continue; continue;
} }
if(phones.contains(phonenumber)){
continue;
}
phones.add(phonenumber);
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>());
if (!smsResponse.isSuccess()) { if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse); log.error("验证码短信发送异常 => {}", smsResponse);
} }
userIds.add(correctorId); userIds.add(correctorId);
} }
log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
if(!userIds.isEmpty()){
SseMessageDto sseMessageDto = new SseMessageDto(); SseMessageDto sseMessageDto = new SseMessageDto();
sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!"); sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!");
sseMessageDto.setUserIds(userIds); sseMessageDto.setUserIds(userIds);
SseMessageUtils.publishMessage(sseMessageDto); SseMessageUtils.publishMessage(sseMessageDto);
log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
} }
log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size()); log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size());
} }
} }