liujie
2026-05-14 fe82e2eca0faae158cda0987dbb8389ec672433f
催收短信+订单现在拦截
1个文件已添加
107 ■■■■■ 已修改文件
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderSendSmsUtil.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderSendSmsUtil.java
New file
@@ -0,0 +1,107 @@
package com.xiaopeng.order.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.dto.operation.SmsDto;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.feignClient.operation.SmsClient;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.operation.SmsVo;
import com.xiaopeng.common.core.enums.OrderStatusEnum;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.order.service.IXpOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Component
public class TaskOrderSendSmsUtil {
    private static final int SMS_SENT = 1;
    private static final int BATCH_SIZE = 200;
    @Resource
    private IXpOrderService xpOrderService;
    @Resource
    private UserResourcesClient userResourcesClient;
    @Resource
    private SmsClient smsClient;
//    @Value("${sms.appid:}")
//    private String smsAppId;
//
//    @Value("${sms.order-pay.template-code:RobotaxiOrderPaySmsTpl}")
//    private String orderPayTemplateCode;
//
//    @Value("${sms.order-pay.app-push-config-code:RobotaxiOrderPaySms}")
//    private String orderPayAppPushConfigCode;
    /**
     * 每分钟查询一次待支付超过24小时且未发送短信的订单。
     */
    @Scheduled(cron = "0 */1 * * * ?")
    public void sendPendingPaymentSms() {
        LocalDateTime deadline = LocalDateTime.now().minusHours(24);
        List<XpOrder> orders = xpOrderService.list(new LambdaQueryWrapper<XpOrder>()
                .eq(XpOrder::getStatus, OrderStatusEnum.APPROVAL_REJECTION.getCode())
                .le(XpOrder::getTripEnd, deadline)
                .and(wrapper -> wrapper.isNull(XpOrder::getSmsStatus).or().ne(XpOrder::getSmsStatus, SMS_SENT))
                .orderByAsc(XpOrder::getTripEnd)
                .last("LIMIT " + BATCH_SIZE));
        if (orders == null || orders.isEmpty()) {
            return;
        }
        for (XpOrder order : orders) {
            try {
                sendSms(order);
            } catch (Exception e) {
                log.error("待支付订单短信发送失败,订单ID: {}, 订单号: {}", order.getId(), order.getOrderNumber(), e);
            }
        }
    }
    private void sendSms(XpOrder order) {
        if (order.getAppUserId() == null) {
            log.warn("待支付订单短信发送跳过,用户ID为空,订单ID: {}", order.getId());
            return;
        }
        UcUserInfo userInfo = userResourcesClient.getBaseUserByUid(String.valueOf(order.getAppUserId()));
        if (userInfo == null || StringUtils.isBlank(userInfo.getMobile())) {
            log.warn("待支付订单短信发送跳过,手机号为空,订单ID: {}, 用户ID: {}", order.getId(), order.getAppUserId());
            return;
        }
        SmsVo smsVo = new SmsVo();
        smsVo.setAppId("");
        smsVo.setPushType(1);
        smsVo.setReceivers(userInfo.getMobile());
        smsVo.setTemplateCode("orderPayTemplateCode");
        smsVo.setAppPushConfigCode("orderPayAppPushConfigCode");
        smsVo.setParams(new HashMap<>());
        smsVo.getParams().put("orderNo", order.getOrderNumber());
        SmsDto result = smsClient.pushSms(smsVo);
        if (result == null || result.getCode() == null || result.getCode() != 200) {
            log.warn("待支付订单短信发送未成功,订单ID: {}, 返回: {}", order.getId(), result);
            return;
        }
        order.setAppUserId(null);
        order.setSmsStatus(SMS_SENT);
        boolean updated = xpOrderService.updateById(order);
        if (!updated) {
            log.warn("待支付订单短信状态更新失败,订单ID: {}", order.getId());
        }
    }
}