Commit 41caa58c authored by honghy's avatar honghy

短信节点添加目的仓

parent de603ae7
......@@ -36,6 +36,7 @@ create table system_sms_node
template_id_two bigint comment '模板2',
template_id_three bigint comment '模板3',
template_id_four bigint comment '模板4',
`extra` json NULL COMMENT '扩展字段',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
......
......@@ -21,4 +21,14 @@ public class Constants {
* 不接收货物code编码常量配置
*/
public static final String NOT_ACCEPTED_PROD_CODE = "F";
/**
* 目的仓不选择key
*/
public static final String RECEIVE_ADDR_KEY = "1:1:1";
/**
* 目的仓全选key
*/
public static final String RECEIVE_ADDR_ALL_KEY = "0:0:0";
}
......@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.order.service.orderCargoControlPick;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.apollo.core.constants.Constants;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
......@@ -1297,7 +1298,7 @@ public class OrderCargoControlPickServiceImpl extends AbstractService<OrderCargo
reqDTO.setTemplateParams(templateParams);
smsMap.put(consigneeCountryCode + consigneePhone, reqDTO);
for (Map.Entry<String, SmsSendSingleToUserReqDTOV2> entry : smsMap.entrySet()) {
smsSendApi.sendSingleSmsToAdminV2(entry.getValue());
smsSendApi.sendSingleSmsToAdminV2(entry.getValue(), Constants.RECEIVE_ADDR_KEY);
}
}
......
......@@ -119,6 +119,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
......@@ -2367,8 +2368,10 @@ public class OrderWarehouseInServiceImpl extends AbstractService<OrderWarehouseI
reqDTO.setTransportId(orderDO.getTransportId());
reqDTO.setIsOrders(SmsIsOrdersEnum.SMS_ORDERS_0.getValue());
reqDTO.setMessageType(SmsMessageTypeEnum.SMS_MESSAGE_TYPE_1.getValue());
// 发送追加通知短信
smsSendApi.sendSingleSmsToAdminV2(reqDTO);
smsSendApi.sendSingleSmsToAdminV2(reqDTO,logisticsInfoDto.getDestCountryId()+ Constants.COLON+logisticsInfoDto.getDestCityId()+Constants.COLON
+logisticsInfoDto.getChannelId());
} else {
// 入仓短信 发送给发货人与收货人
String nodeValue = SmsNodeEnum.WAREHOUSE_IN.getNodeValue();
......@@ -2424,7 +2427,8 @@ public class OrderWarehouseInServiceImpl extends AbstractService<OrderWarehouseI
reqDTO.setTransportId(orderDO.getTransportId());
reqDTO.setIsOrders(SmsIsOrdersEnum.SMS_ORDERS_0.getValue());
reqDTO.setMessageType(SmsMessageTypeEnum.SMS_MESSAGE_TYPE_1.getValue());
smsSendApi.sendSingleSmsToAdminV2(reqDTO);
smsSendApi.sendSingleSmsToAdminV2(reqDTO,logisticsInfoDto.getDestCountryId()+ Constants.COLON+logisticsInfoDto.getDestCityId()+Constants.COLON
+logisticsInfoDto.getChannelId());
}
} else {
Map<String, Object> consignorParamMap = new HashMap<>();
......@@ -2471,7 +2475,8 @@ public class OrderWarehouseInServiceImpl extends AbstractService<OrderWarehouseI
reqDTO.setTransportId(orderDO.getTransportId());
reqDTO.setIsOrders(SmsIsOrdersEnum.SMS_ORDERS_0.getValue());
reqDTO.setMessageType(SmsMessageTypeEnum.SMS_MESSAGE_TYPE_1.getValue());
smsSendApi.sendSingleSmsToAdminV2(reqDTO);
smsSendApi.sendSingleSmsToAdminV2(reqDTO,logisticsInfoDto.getDestCountryId()+ Constants.COLON+logisticsInfoDto.getDestCityId()+Constants.COLON
+logisticsInfoDto.getChannelId());
// 收货人 短信发送信息
OrderConsigneeDO orderConsigneeDO = orderConsigneeService.getOne(new LambdaQueryWrapper<OrderConsigneeDO>().eq(OrderConsigneeDO::getOrderId, orderDO.getOrderId())
......@@ -2513,7 +2518,8 @@ public class OrderWarehouseInServiceImpl extends AbstractService<OrderWarehouseI
reqDTO2.setTransportId(orderDO.getTransportId());
reqDTO2.setIsOrders(SmsIsOrdersEnum.SMS_ORDERS_0.getValue());
reqDTO2.setMessageType(SmsMessageTypeEnum.SMS_MESSAGE_TYPE_1.getValue());
smsSendApi.sendSingleSmsToAdminV2(reqDTO2);
smsSendApi.sendSingleSmsToAdminV2(reqDTO2,logisticsInfoDto.getDestCountryId()+ Constants.COLON+logisticsInfoDto.getDestCityId()+Constants.COLON
+logisticsInfoDto.getChannelId());
}
}
}
......
......@@ -289,7 +289,7 @@ public class ShipmentAirLoadExcelExportListener {
}else if (CustomsTypeEnum.CUSTOMS_TYPE_2.getValue().equals(orderInfo.getCustomsType())){
Integer color = Integer.valueOf(IndexedColors.ORANGE.index);
if (prodAttrTag){
color=Integer.valueOf(IndexedColors.GREEN.index);
color=Integer.valueOf(IndexedColors.BRIGHT_GREEN.index);
}
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(color));
......
......@@ -262,7 +262,7 @@ public class ShipmentLoadExcelExportListener2 {
}else if (CustomsTypeEnum.CUSTOMS_TYPE_2.getValue().equals(orderInfo.getCustomsType())){
Integer color = Integer.valueOf(IndexedColors.ORANGE.index);
if (prodAttrTag){
color=Integer.valueOf(IndexedColors.GREEN.index);
color=Integer.valueOf(IndexedColors.BRIGHT_GREEN.index);
}
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(color));
......
......@@ -26,6 +26,7 @@ import cn.iocoder.yudao.module.customer.service.customerContacts.CustomerContact
import cn.iocoder.yudao.module.depository.convert.warehouse.WarehouseConvert;
import cn.iocoder.yudao.module.depository.dal.dataobject.warehouse.*;
import cn.iocoder.yudao.module.depository.dal.mysql.warehouse.WarehouseLineMapper;
import cn.iocoder.yudao.module.depository.dto.LogisticsInfoDto;
import cn.iocoder.yudao.module.depository.service.warehouse.WarehouseAreaPositionService;
import cn.iocoder.yudao.module.depository.service.warehouse.WarehouseAreaService;
import cn.iocoder.yudao.module.depository.service.warehouse.WarehouseService;
......@@ -206,6 +207,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.base.Joiner;
import lombok.extern.slf4j.Slf4j;
......@@ -1622,10 +1624,13 @@ public class BoxServiceImpl extends AbstractService<BoxMapper, BoxDO> implements
@Override
public void sendSms(Long shipmentId, Collection<Long> orderIdList, SmsNodeEnum smsNodeEnum) {
// 对订单列表进行分组, 统计通知发送人的订单数量,当通知人的订单数量大于1,切换模板,合并订单号逗号连接发送一次
Map<String, List<Map<String, String>>> sendPhoneMap = new HashMap<>();
Map<String, Object> templateParams = new HashMap<>();
List<BoxOrderSmsLogDO> boxOrderSmsLogDOList = new ArrayList<>();
// 目的仓
LogisticsInfoDto logisticsInfoDto =null;
// 封装需要发送短信的手机号与订单信息
for (Long orderId : orderIdList) {
// 判断当前货柜的当前订单是否发送过当前的场景短信
......@@ -1639,6 +1644,9 @@ public class BoxServiceImpl extends AbstractService<BoxMapper, BoxDO> implements
continue;
}
OrderBackVO orderBackVO = orderQueryService.getOrder(orderId);
if (logisticsInfoDto == null) {
logisticsInfoDto = warehouseLineMapper.getStartInfoAndDestInfoByLineId(orderBackVO.getLineId());
}
String orderNo = orderBackVO.getOrderNo();
String marks = orderBackVO.getMarks();
// 封装货柜订单短信发送记录
......@@ -1775,8 +1783,10 @@ public class BoxServiceImpl extends AbstractService<BoxMapper, BoxDO> implements
reqDTO.setTransportId(Integer.valueOf(boxDO.getTransportType()));
reqDTO.setIsOrders(isOrders);
reqDTO.setMessageType(SmsMessageTypeEnum.SMS_MESSAGE_TYPE_1.getValue());
//给收发货人发送短信
smsSendApi.sendSingleSmsToAdminV2(reqDTO);
smsSendApi.sendSingleSmsToAdminV2(reqDTO,logisticsInfoDto.getDestCountryId()+ Constants.COLON+logisticsInfoDto.getDestCityId()+Constants.COLON
+logisticsInfoDto.getChannelId());
// 发送短信后初始化参数值
orders = null;
marks = null;
......
......@@ -30,7 +30,7 @@ public interface SmsSendApi {
* @param reqDTO 发送请求
* @return 发送日志编号
*/
Long sendSingleSmsToAdminV2(@Valid SmsSendSingleToUserReqDTOV2 reqDTO);
Long sendSingleSmsToAdminV2(@Valid SmsSendSingleToUserReqDTOV2 reqDTO, String receive);
/**
* 发送单条短信给 Member 用户
......
......@@ -27,10 +27,10 @@ public class SmsSendApiImpl implements SmsSendApi {
}
@Override
public Long sendSingleSmsToAdminV2(SmsSendSingleToUserReqDTOV2 reqDTO) {
public Long sendSingleSmsToAdminV2(SmsSendSingleToUserReqDTOV2 reqDTO, String receive) {
return smsSendService.sendSingleSmsToAdminV2(reqDTO.getMobile(), reqDTO.getUserId(),
reqDTO.getNodeValue(), reqDTO.getAreaCode(), reqDTO.getIsOrders(), reqDTO.getIsTransport(),
reqDTO.getTransportId(), reqDTO.getMessageType(), reqDTO.getTemplateParams());
reqDTO.getTransportId(), reqDTO.getMessageType(), reqDTO.getTemplateParams(),receive);
}
@Override
......
......@@ -11,6 +11,8 @@ import cn.iocoder.yudao.module.system.convert.sms.SmsNodeConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsNodeDO;
import cn.iocoder.yudao.module.system.service.sms.SmsNodeService;
import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
......@@ -86,6 +88,11 @@ public class SmsNodeController {
}
convert.setCountryIds(countryIdsInt);
}
String extra = convert.getExtra();
if (extra != null) {
SmsNodeExtraVO smsNodeExtraVO = JSON.parseObject(extra, SmsNodeExtraVO.class);
convert.setReceiveAddrList(smsNodeExtraVO.getReceiveAddrList());
}
return success(convert);
}
......@@ -121,9 +128,10 @@ public class SmsNodeController {
@PostMapping("/test")
@ApiOperation("测试短信节点")
public CommonResult<Boolean> test(@Valid @RequestBody SmsNodeTestVO smsNodeTestVO) {
List<Long> longs = smsNodeTestVO.getReceiveAddrList().get(0);
smsSendService.sendSingleSmsV2(smsNodeTestVO.getMobile(), SecurityFrameworkUtils.getLoginUserId(), UserTypeEnum.ADMIN.getValue(), smsNodeTestVO.getNodeValue(),
smsNodeTestVO.getCountryCode(), smsNodeTestVO.getIsOrders(), smsNodeTestVO.getIsTransport(), smsNodeTestVO.getTransportId(),
smsNodeTestVO.getMessageType(), smsNodeTestVO.getTemplateParams(), null, smsNodeTestVO.getNodeTemplateSn(),null);
smsNodeTestVO.getMessageType(), smsNodeTestVO.getTemplateParams(), null, smsNodeTestVO.getNodeTemplateSn(), null, longs.get(0) + Constants.COLON + longs.get(1) + Constants.COLON + longs.get(2));
return success(true);
}
}
......@@ -9,6 +9,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
......@@ -78,4 +79,10 @@ public class SmsNodeBackVO {
@ExcelProperty("多订单")
@ApiModelProperty(value = "多订单", required = true)
private Integer isOrders;
@ApiModelProperty(value = "扩展字段")
private String extra;
@ApiModelProperty(value = "目的仓(国家,城市,仓库id)")
private List<List<Long>> receiveAddrList;
}
......@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 短信节点 Base VO,提供给添加、修改、详细的子 VO 使用
......@@ -51,4 +52,6 @@ public class SmsNodeBaseVO {
@ApiModelProperty(value = "多订单", required = true)
private Integer isOrders;
@ApiModelProperty(value = "目的仓(国家,城市,仓库id)")
private List<List<Long>> receiveAddrList;
}
package cn.iocoder.yudao.module.system.controller.admin.sms.vo.smsNode;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@ToString(callSuper = true)
......
package cn.iocoder.yudao.module.system.controller.admin.sms.vo.smsNode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 管理后台 - 短信节点 VO
*
* @author Jayden
* @date 2024/12/11
*/
@Data
@ApiModel("管理后台 - 短信节点 VO")
public class SmsNodeExtraVO {
@ApiModelProperty(value = "目的仓(国家,城市,仓库id)")
private List<List<Long>> receiveAddrList;
}
......@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
......@@ -50,6 +51,9 @@ public class SmsNodeTestVO {
@NotNull(message = "发送类型不能为空")
private Integer messageType;
@ApiModelProperty(value = "目的仓(国家,城市,仓库id)")
private List<List<Long>> receiveAddrList;
@ApiModelProperty(value = "参数")
private Map<String, Object> templateParams;
}
......@@ -74,5 +74,8 @@ public class SmsNodeDO extends BaseDO {
* 多订单(0:否,1:是)
*/
private Integer isOrders;
/**
* 扩展字段
*/
private String extra;
}
package cn.iocoder.yudao.module.system.service.sms;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.apollo.core.constants.Constants;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
......@@ -41,7 +42,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
String code = createSmsCode(reqDTO.getMobile(), reqDTO.getNodeValue(), reqDTO.getCreateIp());
// 发送验证码
smsSendService.sendSingleSmsV2(reqDTO.getAreaCode() + reqDTO.getMobile(), null, null, reqDTO.getNodeValue(), reqDTO.getAreaCode(), reqDTO.getIsOrders(), reqDTO.getIsTransport(),
reqDTO.getTransportId(), reqDTO.getMessageType(), MapUtil.of("code", code), null, 1,null);
reqDTO.getTransportId(), reqDTO.getMessageType(), MapUtil.of("code", code), null, 1,null, Constants.RECEIVE_ADDR_KEY);
}
private String createSmsCode(String mobile, String nodeValue, String ip) {
......
......@@ -78,9 +78,10 @@ public interface SmsNodeService extends IService<SmsNodeDO> {
* 这是为了确保每个配置项在缓存中都有一个唯一的标识
*
* @param smsNodeDO SmsNodeDO 对象
* @param receive 目的仓
* @return 缓存键
*/
String buildCacheKey(SmsNodeDO smsNodeDO);
String buildCacheKey(SmsNodeDO smsNodeDO, String receive);
/**
* 短信重发定时任务
......
......@@ -49,7 +49,7 @@ public interface SmsSendService {
Long sendSingleSmsToAdminV2(@Mobile @NotEmpty(message = "手机号不能为空") String mobile, Long userId,
@NotNull(message = "业务节点不能为空") String nodeValue, @NotNull(message = "国家区号不能为空") String areaCode,
@NotNull(message = "是否多订单不能为空") Integer isOrders, @NotNull(message = "是否匹配运输方式不能为空") Integer isTransport,
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams);
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams, String receive);
/**
* 发送单条短信给用户 APP 的用户
......@@ -82,7 +82,7 @@ public interface SmsSendService {
Long sendSingleSmsToMemberV2(@Mobile @NotEmpty(message = "手机号不能为空") String mobile, Long userId,
@NotNull(message = "业务节点不能为空") String nodeValue, @NotNull(message = "国家区号不能为空") String areaCode,
@NotNull(message = "是否多订单不能为空") Integer isOrders, @NotNull(message = "是否匹配运输方式不能为空") Integer isTransport,
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams);
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams, String receive);
/**
* 发送单条短信给用户
......@@ -115,10 +115,12 @@ public interface SmsSendService {
* @param smsLogId 重发短信时的原短信日志id
* @param nodeTemplateSn 模板序号
* @param smsNode 节点对象
* @param receive 目的仓
*/
Long sendSingleSmsV2(@Mobile @NotEmpty(message = "手机号不能为空") String mobile, Long userId, Integer userType, @NotNull(message = "业务节点不能为空") String nodeValue,
@NotNull(message = "国家区号不能为空") String areaCode, @NotNull(message = "是否多订单不能为空") Integer isOrders, @NotNull(message = "是否匹配运输方式不能为空") Integer isTransport,
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams, Long smsLogId, Integer nodeTemplateSn, SmsNodeDO smsNode);
@NotNull(message = "运输方式不能空") Integer transportId, @NotNull(message = "发送类型不能为空") Integer messageType, Map<String, Object> templateParams, Long smsLogId, Integer nodeTemplateSn, SmsNodeDO smsNode,
@NotNull(message = "目的仓不能空") String receive);
void resendSingleSmsBySmsLogIds(Collection<Long> smsLogIds);
......
......@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.sms;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.apollo.core.constants.Constants;
import cn.iocoder.yudao.framework.common.util.json.core.KeyValue;
import cn.iocoder.yudao.framework.common.util.spring.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
......@@ -30,6 +31,7 @@ import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.alibaba.fastjson.JSON;
import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
......@@ -45,6 +47,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
*
* @author 捷道源码
*/
@Slf4j
@Service
public class SmsSendServiceImpl implements SmsSendService {
......@@ -92,7 +95,7 @@ public class SmsSendServiceImpl implements SmsSendService {
@Override
public Long sendSingleSmsToAdminV2(String mobile, Long userId, String nodeValue, String areaCode,
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams) {
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams, String receive) {
// 如果 mobile 为空,则加载用户编号对应的手机号
if (StrUtil.isEmpty(mobile)) {
AdminUserDO user = adminUserService.getUser(userId);
......@@ -102,7 +105,7 @@ public class SmsSendServiceImpl implements SmsSendService {
}
}
// 执行发送
return this.sendSingleSmsV2(areaCode + mobile, userId, UserTypeEnum.ADMIN.getValue(), nodeValue, areaCode, isOrders, isTransport, transportId, messageType, templateParams, null, 1, null);
return this.sendSingleSmsV2(areaCode + mobile, userId, UserTypeEnum.ADMIN.getValue(), nodeValue, areaCode, isOrders, isTransport, transportId, messageType, templateParams, null, 1, null, receive);
}
@Override
......@@ -121,7 +124,7 @@ public class SmsSendServiceImpl implements SmsSendService {
@Override
public Long sendSingleSmsToMemberV2(String mobile, Long userId, String nodeValue, String areaCode,
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams) {
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams, String receive) {
// 如果 mobile 为空,则加载用户编号对应的手机号
if (StrUtil.isEmpty(mobile)) {
UserRespDTO user = memberUserApi.getUser(userId);
......@@ -131,7 +134,7 @@ public class SmsSendServiceImpl implements SmsSendService {
}
}
// 执行发送
return this.sendSingleSmsV2(areaCode + mobile, userId, UserTypeEnum.MEMBER.getValue(), nodeValue, areaCode, isOrders, isTransport, transportId, messageType, templateParams, null, 1, null);
return this.sendSingleSmsV2(areaCode + mobile, userId, UserTypeEnum.MEMBER.getValue(), nodeValue, areaCode, isOrders, isTransport, transportId, messageType, templateParams, null, 1, null, receive);
}
@Override
......@@ -315,10 +318,11 @@ public class SmsSendServiceImpl implements SmsSendService {
* @param smsLogId 重发短信时的原短信日志id
* @param nodeTemplateSn 模板序号
* @param smsNode 节点对象
* @param receive 目的仓
*/
@Override
public Long sendSingleSmsV2(String mobile, Long userId, Integer userType, String nodeValue, String areaCode,
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams, Long smsLogId, Integer nodeTemplateSn, SmsNodeDO smsNode) {
Integer isOrders, Integer isTransport, Integer transportId, Integer messageType, Map<String, Object> templateParams, Long smsLogId, Integer nodeTemplateSn, SmsNodeDO smsNode, String receive) {
//首次发送
if (smsNode == null) {
// 创建SmsNodeDO对象并设置相关属性
......@@ -329,30 +333,12 @@ public class SmsSendServiceImpl implements SmsSendService {
.setIsOrders(isOrders)
.setCountryCode(areaCode)
.setStatus(SystemStatusEnum.SYSTEM_STATUS_0.getValue());
// 构建缓存键,用于查询短信节点缓存
String cacheKey = smsNodeService.buildCacheKey(smsNodeDO);
String smsNodeCache = redisHelper.get(cacheKey);
// 第一次找不到,则在全部国家里面找
if (smsNodeCache == null) {
smsNodeDO.setCountryCode(SmsCountryCodeEnum.SMS_COUNTRY_CODE_0.getValue());
cacheKey = smsNodeService.buildCacheKey(smsNodeDO);
smsNodeCache = redisHelper.get(cacheKey);
// 第二次找不到,则在其他国家里面找
if (smsNodeCache == null) {
smsNodeDO.setCountryCode(SmsCountryCodeEnum.SMS_COUNTRY_CODE_1.getValue());
cacheKey = smsNodeService.buildCacheKey(smsNodeDO);
smsNodeCache = redisHelper.get(cacheKey);
}
}
// 如果 still null, throw exception
if (smsNodeCache == null) {
throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
// 尝试从缓存中获取短信节点信息
smsNode = getSmsNodeFromCache(smsNodeDO, receive);
if (smsNode == null) {
throw exception(SMS_NODE_NOT_EXISTS);
}
// 解析缓存获取短信节点信息
smsNode = JSON.parseObject(smsNodeCache, SmsNodeDO.class);
}
String smsTemplateDO = null;
......@@ -371,7 +357,7 @@ public class SmsSendServiceImpl implements SmsSendService {
}
if (smsTemplateDO == null) {
// throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
log.error(SMS_SEND_TEMPLATE_NOT_EXISTS.getMsg());
return null;
}
......@@ -407,6 +393,49 @@ public class SmsSendServiceImpl implements SmsSendService {
return sendLogId;
}
/**
* 获取缓存节点
*/
private SmsNodeDO getSmsNodeFromCache(SmsNodeDO smsNodeDO, String receive) {
// 构建缓存键,用于查询短信节点缓存
String cacheKey = smsNodeService.buildCacheKey(smsNodeDO, receive);
String smsNodeCache = redisHelper.get(cacheKey);
// 第一次找不到,则在全部目的仓里面找
if (smsNodeCache == null) {
cacheKey = smsNodeService.buildCacheKey(smsNodeDO, Constants.RECEIVE_ADDR_ALL_KEY);
smsNodeCache = redisHelper.get(cacheKey);
}
// 第二次找不到,则在全部国家里面找
if (smsNodeCache == null) {
smsNodeDO.setCountryCode(SmsCountryCodeEnum.SMS_COUNTRY_CODE_0.getValue());
cacheKey = smsNodeService.buildCacheKey(smsNodeDO, receive);
smsNodeCache = redisHelper.get(cacheKey);
}
// 第三次找不到,则在全部国家、全部目的仓里面找
if (smsNodeCache == null) {
cacheKey = smsNodeService.buildCacheKey(smsNodeDO, Constants.RECEIVE_ADDR_ALL_KEY);
smsNodeCache = redisHelper.get(cacheKey);
}
// 第四次找不到,则在其他国家里面找
if (smsNodeCache == null) {
smsNodeDO.setCountryCode(SmsCountryCodeEnum.SMS_COUNTRY_CODE_1.getValue());
cacheKey = smsNodeService.buildCacheKey(smsNodeDO, receive);
smsNodeCache = redisHelper.get(cacheKey);
}
// 第五次次找不到,则在其他国家、全部目的仓里面找
if (smsNodeCache == null) {
cacheKey = smsNodeService.buildCacheKey(smsNodeDO, Constants.RECEIVE_ADDR_ALL_KEY);
smsNodeCache = redisHelper.get(cacheKey);
}
return smsNodeCache != null ? JSON.parseObject(smsNodeCache, SmsNodeDO.class) : null;
}
/**
* 根据节点模板序号获取模板ID
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment