From be49561932d273c1bb3540cb9ed862eefaafd77e Mon Sep 17 00:00:00 2001
From: yanderong <307678080@qq.com>
Date: 星期五, 05 六月 2026 18:35:17 +0800
Subject: [PATCH] feat: 订单数据上报到考评系统
---
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java | 26 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverDTO.java | 33 +++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/properties/PushEvaluationProperties.java | 24 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationRequestDTO.java | 81 +++++++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushEvaluationLogMapper.java | 20 +
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationResponseDTO.java | 26 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverRequestDTO.java | 27 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushEvaluationLogMapper.xml | 41 +++
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPayService.java | 32 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushEvaluationLog.java | 84 +++++++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushEvaluationImpl.java | 118 ++++++++++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushEvaluationService.java | 14 +
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/PushEvaluationController.java | 32 ++
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java | 44 ++++
ManagementOKTravel/guns-admin/src/main/resources/application.yml | 9
15 files changed, 609 insertions(+), 2 deletions(-)
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPayService.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPayService.java
new file mode 100644
index 0000000..b96ee3b
--- /dev/null
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPayService.java
@@ -0,0 +1,32 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.vo.WxPayAppVO;
+import org.springframework.http.ResponseEntity;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * 支付服务
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/3 15:24
+ */
+public interface IPayService {
+
+ /**
+ * 微信充值
+ *
+ * @param userId 充值用户
+ * @param money 充值金额
+ */
+ WxPayAppVO wechatRecharge(Integer userId, BigDecimal money) throws Exception;
+
+ /**
+ * 微信支付成功回调
+ */
+ Map<String,Object> wechatNotify(HttpServletRequest request) throws IOException;
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/properties/PushEvaluationProperties.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/properties/PushEvaluationProperties.java
new file mode 100644
index 0000000..06616cf
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/properties/PushEvaluationProperties.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.config.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 上报数据配置
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:18
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "push.evaluation")
+public class PushEvaluationProperties {
+
+ private String url;
+
+ private String accessKey;
+
+ private String accessSecret;
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/PushEvaluationController.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/PushEvaluationController.java
new file mode 100644
index 0000000..760611e
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/PushEvaluationController.java
@@ -0,0 +1,32 @@
+package com.stylefeng.guns.modular.system.controller.taxi;
+
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.modular.system.service.IPushEvaluationService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 推送数据到考评系统
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 16:14
+ */
+@Controller
+@RequiredArgsConstructor
+@RequestMapping("/push/evaluation")
+public class PushEvaluationController extends BaseController {
+
+ private final IPushEvaluationService pushEvaluationService;
+
+ /**
+ * 手动推送指定时间的订单到考评系统
+ */
+ @GetMapping("/order")
+ public void pushOrder(@RequestParam String startTime, @RequestParam String endTime) {
+ pushEvaluationService.pushEvaluation(startTime, endTime);
+ }
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushEvaluationLogMapper.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushEvaluationLogMapper.java
new file mode 100644
index 0000000..6d5f58a
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushEvaluationLogMapper.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.PushEvaluationLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 数据上报日志 Mapper 接口
+ * </p>
+ */
+public interface PushEvaluationLogMapper extends BaseMapper<PushEvaluationLog> {
+
+ List<Map<String, Object>> getTaxiOrderList(@Param("startTime") String startTime, @Param("endTime") String endTime);
+
+ List<Map<String, Object>> getPrivateCarOrderList(@Param("startTime") String startTime, @Param("endTime") String endTime);
+}
\ No newline at end of file
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushEvaluationLogMapper.xml b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushEvaluationLogMapper.xml
new file mode 100644
index 0000000..c8caf49
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushEvaluationLogMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.PushEvaluationLogMapper">
+
+ <select id="getTaxiOrderList" resultType="java.util.Map" >
+ SELECT ot.id, ot.orderNum as orderNo, ot.passengers as userName, ot.passengersPhone as userPhone,
+ ot.placementLon, ot.placementLat, ot.placementAddress, ot.startLon, ot.startLat, ot.startAddress,
+ ot.endLon, ot.endLat, ot.endAddress, ot.orderMoney, ot.payMoney, ot.travelTime as traveTime,
+ ot.startServiceTime, ot.endServiceTime, ot.insertTime as createTime,
+ td.id as driverId, td.name as driverName, td.phone as driverPhone, td.idCard as driverIdCard, td.insertTime as driverCreateTime,
+ ci.carLicensePlate as vehicleNo, oe.fraction as score, oe.content as evaluation
+ FROM t_order_taxi as ot
+ LEFT JOIN t_driver as td on td.id = ot.driverId
+ LEFT JOIN t_car as ci on ci.id= ot.carId
+ LEFT JOIN t_order_evaluate as oe on oe.orderId= ot.id
+ WHERE ot.state in(8, 9)
+ <if test="startTime != null and startTime !='' and endTime != null and endTime != ''">
+ and (ot.insertTime between #{startTime} and #{endTime})
+ </if>
+ </select>
+
+ <select id="getPrivateCarOrderList" resultType="java.util.Map" >
+ SELECT ot.id, ot.orderNum as orderNo, ot.passengers as userName, ot.passengersPhone as userPhone,
+ ot.placementLon, ot.placementLat, ot.placementAddress, ot.startLon, ot.startLat, ot.startAddress,
+ ot.endLon, ot.endLat, ot.endAddress, ot.orderMoney, ot.payMoney, ot.travelTime as traveTime,
+ ot.startServiceTime, ot.endServiceTime, ot.insertTime as createTime,
+ td.id as driverId, td.name as driverName, td.phone as driverPhone, td.idCard as driverIdCard, td.insertTime as driverCreateTime,
+ ci.carLicensePlate as vehicleNo, oe.fraction as score, oe.content as evaluation
+ FROM t_order_private_car as ot
+ LEFT JOIN t_driver as td on td.id = ot.driverId
+ LEFT JOIN t_car as ci on ci.id= ot.carId
+ LEFT JOIN t_order_evaluate as oe on oe.orderId= ot.id
+ WHERE ot.state in(8, 9)
+ <if test="startTime != null and startTime !='' and endTime != null and endTime != ''">
+ and (ot.insertTime between #{startTime} and #{endTime})
+ </if>
+ </select>
+
+
+
+</mapper>
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverDTO.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverDTO.java
new file mode 100644
index 0000000..1a6c515
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverDTO.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.dto;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 上报考评系统驾驶员数据
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:32
+ */
+@Data
+public class PushEvaluationDriverDTO {
+
+ private Long driverId;
+ private String driverName;
+ private String driverPhone;
+ private String driverIdCard;
+ private LocalDateTime driverCreateTime;
+
+ public PushEvaluationDriverRequestDTO convert() {
+ PushEvaluationDriverRequestDTO driverRequestDTO = new PushEvaluationDriverRequestDTO();
+ driverRequestDTO.setId(this.getDriverId());
+ driverRequestDTO.setName(this.getDriverName());
+ driverRequestDTO.setPhone(this.getDriverPhone());
+ driverRequestDTO.setIdCard(this.getDriverIdCard());
+ driverRequestDTO.setCreateTime(this.getDriverCreateTime());
+ return driverRequestDTO;
+ }
+}
+
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverRequestDTO.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverRequestDTO.java
new file mode 100644
index 0000000..73e135d
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationDriverRequestDTO.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.dto;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 上报考评系统驾驶员数据
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:32
+ */
+@Data
+public class PushEvaluationDriverRequestDTO {
+
+ private Long id;
+
+ private String name;
+
+ private String phone;
+
+ private String idCard;
+
+ private LocalDateTime createTime;
+}
+
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationRequestDTO.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationRequestDTO.java
new file mode 100644
index 0000000..43f26f6
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationRequestDTO.java
@@ -0,0 +1,81 @@
+package com.stylefeng.guns.modular.system.dto;
+
+import com.alibaba.fastjson.JSON;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * 上报考评系统请求数据
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:32
+ */
+@Data
+public class PushEvaluationRequestDTO {
+
+ private Long id;
+
+ private String orderNo;
+
+ private String userName;
+
+ private String userPhone;
+
+ private PushEvaluationDriverRequestDTO driverInfo;
+
+ private String vehicleNo;
+
+ private Double placementLon;
+
+ private Double placementLat;
+
+ private String placementAddress;
+
+ private Double startLon;
+
+ private Double startLat;
+
+ private String startAddress;
+
+ private Double endLon;
+
+ private Double endLat;
+
+ private String endAddress;
+
+ private BigDecimal orderMoney;
+
+ private BigDecimal payMoney;
+
+ private LocalDateTime traveTime;
+
+ private LocalDateTime startServiceTime;
+
+ private LocalDateTime endServiceTime;
+
+ private LocalDateTime createTime;
+
+ private Integer score;
+
+ private String evaluation;
+
+ public static List<PushEvaluationRequestDTO> convert(List<Map<String, Object>> mapList) {
+ List<PushEvaluationRequestDTO> requstList = new ArrayList<>();
+ if(Objects.nonNull(mapList) && !mapList.isEmpty()) {
+ mapList.forEach(mapObj -> {
+ String jsonData = JSON.toJSONString(mapObj);
+ PushEvaluationRequestDTO requestDTO = JSON.parseObject(jsonData, PushEvaluationRequestDTO.class);
+ if(Objects.nonNull(requestDTO)) {
+ PushEvaluationDriverDTO driverDTO = JSON.parseObject(jsonData, PushEvaluationDriverDTO.class);
+ Optional.ofNullable(driverDTO).ifPresent(d -> requestDTO.setDriverInfo(d.convert()));
+ requstList.add(requestDTO);
+ }
+ });
+ }
+ return requstList;
+ }
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationResponseDTO.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationResponseDTO.java
new file mode 100644
index 0000000..0e22377
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/PushEvaluationResponseDTO.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.dto;
+
+import lombok.Data;
+
+/**
+ * 上报考评系统返回数据
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:32
+ */
+@Data
+public class PushEvaluationResponseDTO {
+
+ private Integer code;
+
+ private String type;
+
+ private String message;
+
+ private String result;
+
+ private String extras;
+
+ private String time;
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushEvaluationLog.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushEvaluationLog.java
new file mode 100644
index 0000000..4e464a0
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushEvaluationLog.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 上报考评系统日志
+ */
+@Data
+@TableName("sys_push_evaluation_log")
+public class PushEvaluationLog {
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ @TableField("id")
+ private Integer id;
+
+ /**
+ * 流水号
+ */
+ @TableField("serial_number")
+ private String serialNumber;
+
+ /**
+ * 请求地址
+ */
+ @TableField("request_url")
+ private String requestUrl;
+
+ /**
+ * 请求头
+ */
+ @TableField("request_header")
+ private String requestHeader;
+
+ /**
+ * 请求内容
+ */
+ @TableField("request_body")
+ private String requestBody;
+
+ /**
+ * 返回内容
+ */
+ @TableField("response_body")
+ private String responseBody;
+
+ /**
+ * 状态(0请求失败,1请求成功)
+ */
+ @TableField("status")
+ private Integer status;
+
+ /**
+ * 重试次数
+ */
+ @TableField("retry_count")
+ private Integer retryCount;
+
+ /**
+ * 消息
+ */
+ @TableField("message")
+ private String message;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ private Date createTime;
+
+ /**
+ * 跟新时间
+ */
+ @TableField("update_time")
+ private Date updateTime;
+
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushEvaluationService.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushEvaluationService.java
new file mode 100644
index 0000000..7c1461b
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushEvaluationService.java
@@ -0,0 +1,14 @@
+package com.stylefeng.guns.modular.system.service;
+
+/**
+ * 上报数据到考评系统
+ *
+ * @author sky
+ * @version 1.0.0
+ * @since 2026/6/5 11:29
+ */
+public interface IPushEvaluationService {
+
+
+ void pushEvaluation(String startTime, String endTime);
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushEvaluationImpl.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushEvaluationImpl.java
new file mode 100644
index 0000000..c86dff0
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushEvaluationImpl.java
@@ -0,0 +1,118 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.config.properties.PushEvaluationProperties;
+import com.stylefeng.guns.modular.system.dao.PushEvaluationLogMapper;
+import com.stylefeng.guns.modular.system.dto.PushEvaluationRequestDTO;
+import com.stylefeng.guns.modular.system.dto.PushEvaluationResponseDTO;
+import com.stylefeng.guns.modular.system.model.PushEvaluationLog;
+import com.stylefeng.guns.modular.system.service.IPushEvaluationService;
+import com.stylefeng.guns.modular.system.util.SignUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.*;
+
+/**
+ * 上报数据到考评系统
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class PushEvaluationImpl extends ServiceImpl<PushEvaluationLogMapper, PushEvaluationLog> implements IPushEvaluationService {
+
+ private final PushEvaluationProperties properties;
+ private final RestTemplate restTemplate;
+ private final static String API_PATH = "/api/taxiOrder/evaluation";
+
+ /**
+ * 推送数据到考评系统
+ */
+ @Transactional
+ public void pushEvaluation(String startTime, String endTime) {
+ // 获取出租车需要推送的数据
+ List<Map<String, Object>> mapList = this.baseMapper.getTaxiOrderList(startTime, endTime);
+ List<PushEvaluationRequestDTO> taxiRequestList = PushEvaluationRequestDTO.convert(mapList);
+ // 获取专车需要推送的数据
+ List<Map<String, Object>> mapPrivateList = this.baseMapper.getPrivateCarOrderList(startTime, endTime);
+ List<PushEvaluationRequestDTO> privateRequestList = PushEvaluationRequestDTO.convert(mapPrivateList);
+ // 数据推送
+ List<PushEvaluationLog> logList = new ArrayList<>();
+ taxiRequestList.forEach( taxi -> logList.add(requestEvaluation(taxi)));
+ privateRequestList.forEach( privateCar -> logList.add(requestEvaluation(privateCar)));
+ // 记录日志
+ if(CollectionUtils.isNotEmpty(logList)) {
+ this.insertBatch(logList);
+ }
+ }
+
+ public PushEvaluationLog requestEvaluation(PushEvaluationRequestDTO request) {
+ // 构建请求头
+ HttpHeaders headers = buildHeaders();
+ String url = properties.getUrl() + API_PATH;
+ PushEvaluationResponseDTO response = null;
+ int status = 1;
+ String errorMessage = "";
+ try {
+ // 发送请求
+ HttpEntity<PushEvaluationRequestDTO> entity = new HttpEntity<>(request, headers);
+ log.info("上报数据到考评系统-请求地址为:{},请求参数为 : {}", url, JSON.toJSONString(entity));
+ ResponseEntity<PushEvaluationResponseDTO> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, PushEvaluationResponseDTO.class);
+ // 返回数据
+ response = responseEntity.getBody();
+ if (Objects.isNull(response)) {
+ status = 0;
+ log.error("上报数据到考评系统-调用接口失败,返回为空");
+ } else if(response.getCode() != 200 ) {
+ status = 0;
+ log.error("上报数据到考评系统-调用接口失败,返回失败数据为:{}", JSON.toJSONString(response));
+ }
+ log.info("上报数据到考评系统-推送完成-请求URL:{},返回数据为:{}", url, JSON.toJSONString(response));
+ } catch (Exception e) {
+ status = 0;
+ errorMessage = e.getLocalizedMessage();
+ log.error("上报数据到考评系统-报错:", e);
+ }
+
+ PushEvaluationLog evaluationLog = new PushEvaluationLog();
+ evaluationLog.setSerialNumber(request.getOrderNo()); // 订单号
+ evaluationLog.setRequestUrl(url);
+ evaluationLog.setRequestHeader(JSON.toJSONString(headers));
+ evaluationLog.setRequestBody(JSON.toJSONString(request));
+ Optional.ofNullable(response).map(JSON::toJSONString).ifPresent( evaluationLog::setResponseBody);
+ evaluationLog.setStatus(status);
+ evaluationLog.setRetryCount(0);
+ evaluationLog.setMessage(errorMessage);
+ evaluationLog.setCreateTime(new Date());
+ evaluationLog.setUpdateTime(new Date());
+ return evaluationLog;
+ }
+
+ /**
+ * 构建请求头
+ */
+ public HttpHeaders buildHeaders() {
+ String timestamp = String.valueOf(System.currentTimeMillis() / 1000); // 时间戳
+ String nonce = RandomStringUtils.randomAlphanumeric(6); // 6位随机数
+ String sign = SignUtil.generateSign("POST", API_PATH, properties.getAccessKey(), properties.getAccessSecret(), timestamp, nonce);
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.set("accessKey", properties.getAccessKey());
+ headers.set("timestamp", timestamp);
+ headers.set("nonce", nonce);
+ headers.set("sign", sign);
+ return headers;
+ }
+
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java
new file mode 100644
index 0000000..5cbc62a
--- /dev/null
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java
@@ -0,0 +1,44 @@
+package com.stylefeng.guns.modular.system.util;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+/**
+ * 签名工具
+ *
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/6/5 11:20
+ */
+public class SignUtil {
+
+ private static final String HMAC_SHA256 = "HmacSHA256";
+
+ /**
+ * 数据上报生成签名
+ *
+ * @param method 请求方式
+ * @param url 请求路基,api的路径
+ * @param accessKey 身份标识
+ * @param accessSecret 密钥
+ * @param timestamp 时间戳,精确到秒
+ * @param nonce 唯一随机数,6位随机数
+ * @return 签名后的数据
+ */
+ public static String generateSign(String method, String url, String accessKey, String accessSecret, String timestamp, String nonce) {
+ try {
+ String data = String.format("%s&%s&%s&%s&%s", method.toUpperCase(), url, accessKey, timestamp, nonce);
+
+ Mac mac = Mac.getInstance(HMAC_SHA256);
+ SecretKeySpec secretKeySpec = new SecretKeySpec(accessSecret.getBytes(StandardCharsets.UTF_8), HMAC_SHA256);
+ mac.init(secretKeySpec);
+ byte[] signBytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
+ return Base64.getEncoder().encodeToString(signBytes);
+ } catch (Exception e) {
+ throw new RuntimeException("生成签名失败", e);
+ }
+ }
+
+}
diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
index fe42e7e..0d49af1 100644
--- a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
+++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -3,14 +3,16 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.model.TDriver;
+import com.stylefeng.guns.modular.system.service.IPushEvaluationService;
import com.stylefeng.guns.modular.system.service.ITDriverService;
import com.stylefeng.guns.modular.system.service.ITLocationService;
-import com.stylefeng.guns.modular.system.service.IUserCouponRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.List;
@@ -31,6 +33,9 @@
@Autowired
private ITDriverService driverService;
+
+ @Autowired
+ private IPushEvaluationService pushEvaluationService;
@@ -76,4 +81,23 @@
e.printStackTrace();
}
}
+
+ /**
+ * 每周一零晨3点执行任务
+ * 推送上周订单评价数据
+ */
+ @Scheduled(cron = "0 0 3 ? * MON")
+ public void taskPushEvaluation() {
+ try {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ LocalDateTime endTimeObj = LocalDateTime.now();
+ String startTime = endTimeObj.minusWeeks(1).format(formatter);
+ String endTime = endTimeObj.format(formatter);
+ pushEvaluationService.pushEvaluation(startTime, endTime);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+
}
diff --git a/ManagementOKTravel/guns-admin/src/main/resources/application.yml b/ManagementOKTravel/guns-admin/src/main/resources/application.yml
index 847ecb1..15e0df7 100644
--- a/ManagementOKTravel/guns-admin/src/main/resources/application.yml
+++ b/ManagementOKTravel/guns-admin/src/main/resources/application.yml
@@ -69,4 +69,11 @@
#交通部推送数据功能开关
-pushMinistryOfTransport: false
\ No newline at end of file
+pushMinistryOfTransport: false
+
+# 上报考评系统订单数据
+push:
+ evaluation:
+ url: https://gdnmg.hstgps.com:2238 # api地址
+ access-key: orderReview # 身份标识
+ access-secret: wwxCJhdFtk6qvVabO7W+7w # 密钥
\ No newline at end of file
--
Gitblit v1.7.1