package com.ruoyi.quartz.task; import com.alibaba.fastjson2.JSON; import com.ruoyi.common.utils.HttpUtil; 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; import java.util.Map; /** * 定时任务调度测试 * * @author ruoyi */ @Component("ryTask") public class RyTask { private static final Logger log = LoggerFactory.getLogger(RyTask.class); // 添加状态映射字典 private static final Map ORDER_STATUS_MAP = new HashMap() {{ 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; @Autowired private ITbOrdersService tbOrdersService; @Autowired private IDispatchOrdService dispatchOrdService; @Autowired private ISysClientAppService sysClientAppService; @Autowired private ITbCallbackLogService tbCallbackLogService; @Autowired private ITbVehicleOrderService tbVehicleOrderService; public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); } public void ryParams(String params) { System.out.println("执行有参方法:" + params); } public void ryNoParams() { System.out.println("执行无参方法"); } /** * 回调推送状态 */ public void ryOrderStatus() { try { List orderStatusList = orderStatusService.selectAOrderStatusList(); if (orderStatusList.size() < 0) { System.out.println("没有数据"); return; } for (AOrderStatus orderStatus : orderStatusList) { int count = tbOrdersService.checkServiceOrdIDExists(orderStatus.getServiceOrdID()); if (count > 0) { log.info("服务订单ID存在:" + orderStatus.getServiceOrdID()); TbOrders tbOrders = tbOrdersService.selectTbOrdersByServiceOrdID(orderStatus.getServiceOrdID()); //获取车牌号 String carLicense = "-"; StringBuilder driverNames = new StringBuilder(); StringBuilder driverMobiles = new StringBuilder(); try{ DispatchOrd dispatchOrd = dispatchOrdService.selectDispatchOrdByServiceOrdIDDt(orderStatus.getServiceOrdID()); if(dispatchOrd!=null){ carLicense = dispatchOrdService.selectCarLicenseByCarId(Integer.valueOf(dispatchOrd.getDispatchOrdCarID())); String dispatchOAEntourage = dispatchOrd.getDispatchOrd_OAEntourage(); String dispatchOAName = dispatchOrd.getDispatchOrd_OAName(); if (dispatchOAEntourage != null && dispatchOAName != null) { String[] entourages = dispatchOAEntourage.split(","); String[] names = dispatchOAName.split(","); // 查找所有司机信息 for (int i = 0; i < Math.min(entourages.length, names.length); i++) { if ("司机".equals(entourages[i].trim())) { String driverMobile = dispatchOrdService.selectDriverMobileByName(names[i].trim()); if (driverNames.length() > 0) { driverNames.append(","); } driverNames.append(names[i].trim()); if (driverMobiles.length() > 0) { driverMobiles.append(","); } driverMobiles.append(driverMobile); } } } //如果车牌号不为空 if(carLicense!=null && carLicense.length()>0){ log.info("更新订单-车牌号关联表,【" + tbOrders.getOrderID() + "】车牌号:" + carLicense); //查询是否存在关联记录 TbVehicleOrder tbVehicleOrder = tbVehicleOrderService.selectTbVehicleOrderById(tbOrders.getOrderID()); if(tbVehicleOrder==null){ //不存在关联记录 //创建关联记录 tbVehicleOrder = new TbVehicleOrder(); tbVehicleOrder.setOrderId(tbOrders.getOrderID()); tbVehicleOrder.setServiceOrdId(tbOrders.getServiceOrdID()); tbVehicleOrder.setVehicle(carLicense); tbVehicleOrder.setStatus("0"); tbVehicleOrderService.insertTbVehicleOrder(tbVehicleOrder); } else{ //存在关联记录 //更新关联记录 if(orderStatus.getMsg().contains("已返回")) { tbVehicleOrder.setStatus("1"); tbVehicleOrderService.updateTbVehicleOrder(tbVehicleOrder); } else if(orderStatus.getMsg().contains("取消")) { tbVehicleOrder.setStatus("2"); tbVehicleOrderService.updateTbVehicleOrder(tbVehicleOrder); } } } } } catch (Exception e) { log.error("获取调度单异常:"+e.getMessage()); } SysClientApp clientApp = sysClientAppService.selectSysClientAppByAppKey(tbOrders.getAppId()); if(clientApp==null){ log.error("回调地址不存在"); orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); continue; } String callbackUrl = clientApp.getCallbackUrl(); try { String carLicenseStr = "-"; if(carLicense!=null && carLicense.length()>0){ carLicenseStr = carLicense; } // 构建请求参数 Map map = new HashMap<>(); map.put("orderID", tbOrders.getOrderID().toString()); map.put("thirdOrderNo", orderStatus.getServiceOrdID()); 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",carLicenseStr); map.put("driverMobile",driverMobiles.toString()); map.put("driverName", driverNames.toString()); log.info("【监测】[" + tbOrders.getOrderID() + "]车牌号:" + carLicenseStr); //打印map log.info("【监测】[" + tbOrders.getOrderID() + "]回调请求参数:" + 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()); } else { log.error("回调请求重试后仍然失败"); orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); } } catch (Exception e) { log.error("回调请求失败: " + e.getMessage()); orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); } } else { log.info("服务订单ID不存在:" + orderStatus.getServiceOrdID()); orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); } } } catch (Exception e) { log.error("执行失败: " + e.getMessage()); e.printStackTrace(); } } // 新增发送回调的方法 private String sendCallback(String callbackUrl, Map 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; } } }