wzp
2025-05-06 5d5a187689e51a8a74f16b91d23d32a74b39e803
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1,19 +1,16 @@
package com.ruoyi.quartz.task;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.system.domain.AOrderStatus;
import com.ruoyi.system.domain.DispatchOrd;
import com.ruoyi.system.domain.OrderStatusCallBackVo;
import com.ruoyi.system.domain.TbOrders;
import com.ruoyi.system.service.IAOrderStatusService;
import com.ruoyi.system.service.IDispatchOrdService;
import com.ruoyi.system.service.ITbOrdersService;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.*;
import com.ruoyi.system.service.impl.SysUserServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.StringUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -28,6 +25,29 @@
public class RyTask
{
    private static final Logger log = LoggerFactory.getLogger(RyTask.class);
    // 添加状态映射字典
    private static final Map<String, String> ORDER_STATUS_MAP = new HashMap<String, String>() {{
        put("-1", "无效取消");
        put("1", "未报价");
        put("2", "已报价");
        put("3", "1 - 完全未确认");
        put("4", "2 - 部分已确认");
        put("5", "未出车");
        put("6", "3 - 已出车(去接患者途中)");
        put("7", "已出车(等待患者)");
        put("8", "4 - 已出车(服务中)");
        put("9", "5 - 已送达(回程中)");
        put("10", "已返回");
        put("11", "跑空单,已返回");
        put("12", "取消");
        put("13", "0 - 新调度单(未下发)");
        put("14", "已提交,等待审核");
        put("15", "审核完成");
        put("16", "审核不通过");
        put("17", "已站点");
    }};
    @Autowired
    private IAOrderStatusService orderStatusService;
@@ -36,6 +56,12 @@
    @Autowired
    private IDispatchOrdService dispatchOrdService;
    @Autowired
    private ISysClientAppService sysClientAppService;
    @Autowired
    private ITbCallbackLogService tbCallbackLogService;
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
    {
@@ -52,6 +78,12 @@
        System.out.println("执行无参方法");
    }
    /**
     * 回调推送状态
     */
    public void ryOrderStatus() {
        try {
            List<AOrderStatus> orderStatusList = orderStatusService.selectAOrderStatusList();
@@ -62,8 +94,7 @@
            for (AOrderStatus orderStatus : orderStatusList) {
                int count = tbOrdersService.checkServiceOrdIDExists(orderStatus.getServiceOrdID());
                if (count > 0) {
                    // orderStatusService.updateAOrderStatusFlag(orderStatus.getId());
                    System.out.println("服务订单ID存在:" + orderStatus.getServiceOrdID());
                    log.info("服务订单ID存在:" + orderStatus.getServiceOrdID());
                    TbOrders tbOrders = tbOrdersService.selectTbOrdersByServiceOrdID(orderStatus.getServiceOrdID());
@@ -108,40 +139,56 @@
                        log.error("获取调度单异常:"+e.getMessage());
                    }
                    SysClientApp clientApp = sysClientAppService.selectSysClientAppByAppKey(tbOrders.getAppId());
                    if(clientApp==null){
                        log.error("回调地址不存在");
                        return;
                    }
                    // 使用获取到的所有司机姓名
                    String callbackUrl = "http://localhost:8080/system/apitest/orderCallback";
                    String callbackUrl = clientApp.getCallbackUrl();
                    try {
                        // 构建请求参数
                        Map<String, String> map = new HashMap<>();
                        map.put("orderID", tbOrders.getOrderID().toString());
                        map.put("thirdOrderNo", orderStatus.getServiceOrdID());
                        map.put("orderStatus","1");
                        map.put("orderStatus", ORDER_STATUS_MAP.entrySet()
                            .stream()
                            .filter(entry -> entry.getValue().equals(orderStatus.getMsg()))
                            .map(Map.Entry::getKey)
                            .findFirst()
                            .orElse("0"));
                        map.put("orderRemark", orderStatus.getMsg());
                        map.put("plateNo",carLicense);
                        map.put("driverMobile",driverMobiles.toString());
                        map.put("driverName", driverNames.toString());
                        map.put("appId", tbOrders.getAppId());
                        // 打印请求参数
                        log.info("发送回调请求,URL: " + callbackUrl);
                        log.info("请求参数: " + map);
                        // 第一次尝试
                        String response = sendCallback(callbackUrl, map);
                        if (response == null) {
                            // 如果第一次失败,等待3秒后重试
                            Thread.sleep(3000);
                            log.info("第一次回调失败,准备重试");
                            response = sendCallback(callbackUrl, map);
                        }
                        if (response != null) {
                            // 更新状态
                            log.info("回调推送成功,参数如下:");
                            map.forEach((key, value) -> log.info("    {} : {}", key, value));
                            orderStatusService.updateAOrderStatusFlag(orderStatus.getId());
                        // 发送请求并获取响应
                        String response = HttpUtil.post(callbackUrl, map);
                        // 打印响应结果
                        log.info("回调响应结果: " + response);
                        // 更新状态
                        // orderStatusService.updateAOrderStatusFlag(orderStatus.getId());
                        } else {
                            log.error("回调请求重试后仍然失败");
                            orderStatusService.updateAOrderStatusFlag(orderStatus.getId());
                        }
                    } catch (Exception e) {
                        log.error("回调请求失败: " + e.getMessage());
                        // 可以考虑重试机制或者记录失败日志
                        orderStatusService.updateAOrderStatusFlag(orderStatus.getId());
                    }
                }
                else {
                    log.info("服务订单ID不存在:" + orderStatus.getServiceOrdID());
@@ -153,4 +200,43 @@
            e.printStackTrace();
        }
    }
    // 新增发送回调的方法
    private String sendCallback(String callbackUrl, Map<String, String> params) {
        TbCallbackLog callbackLog = new TbCallbackLog();
        callbackLog.setCallbackUrl(callbackUrl);
        callbackLog.setRequestParams(JSON.toJSONString(params));
        callbackLog.setCreateTime(new Date());
        callbackLog.setStatus("0");  // 默认失败
        callbackLog.setRetryCount(0);
        callbackLog.setServiceOrdId(params.get("thirdOrderNo"));
        callbackLog.setOrderId(Long.valueOf(params.get("orderID")));
        callbackLog.setAppId(params.get("appId"));
        try {
            // 打印请求参数
            log.info("发送回调请求,URL: " + callbackUrl);
            log.info("请求参数: " + params);
            // 发送请求并获取响应
            String response = HttpUtil.post(callbackUrl, params);
            // 打印响应结果
            log.info("回调响应结果: " + response);
            // 更新日志状态
            callbackLog.setResponseResult(response);
            callbackLog.setStatus("1");  // 成功
            tbCallbackLogService.insertTbCallbackLog(callbackLog);
            return response;
        } catch (Exception e) {
            log.error("回调请求异常: " + e.getMessage());
            // 记录错误信息
            callbackLog.setErrorMsg(e.getMessage());
            callbackLog.setRetryCount(1);  // 如果是重试的情况下需要+1
            tbCallbackLogService.insertTbCallbackLog(callbackLog);
            return null;
        }
    }
}