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.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
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<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;
|
|
@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<AOrderStatus> 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<String, String> 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());
|
|
//格式化更新时间
|
try {
|
|
// 2. 定义目标格式(24小时制 "HH")
|
DateTimeFormatter targetFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
String formattedTime = orderStatus.getUpdateTime().format(targetFormat);
|
map.put("updateTime", formattedTime);
|
}
|
catch (Exception ex)
|
{
|
log.error("时间格式转化出错");
|
}
|
|
|
|
|
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<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;
|
}
|
}
|
}
|