Browse Source

增加网约车车辆画像接口拼接高速通行返回分值

15810770710@163.com 3 years ago
parent
commit
9d4d6073d3
22 changed files with 809 additions and 415 deletions
  1. 10 5
      pom.xml
  2. 59 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/action/WycChannelActionImpl.java
  3. 29 5
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/constant/ChannelConstant.java
  4. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/TrafficRecordService.java
  5. 13 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/WycChannelService.java
  6. 179 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/TrafficRecordServiceImpl.java
  7. 288 79
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/WycChannelServiceImpl.java
  8. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/task/TrafficRecordTokenTask.java
  9. 52 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/VehicleJsonHelper.java
  10. 56 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TrafficRecordResponseDetailObject.java
  11. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TrafficRecordResponseObject.java
  12. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleInfoQueryV3RequestObject.java
  13. 0 97
      src/main/resources/config/application-hwtest.yml
  14. 14 3
      src/main/resources/config/application.yml
  15. 0 0
      src/main/resources/config/banner.txt
  16. 11 12
      src/main/resources/config/bootstrap.yml
  17. 0 110
      src/main/resources/config/iov-sjjh-servicenode-supplier-10000036-hwtest.yml
  18. 0 102
      src/main/resources/config/iov-sjjh-servicenode-supplier-10000036-onlineJar.yml
  19. 2 2
      src/main/resources/config/logback-spring.xml
  20. 1 0
      src/main/resources/earliestOrderMonth.json
  21. 1 0
      src/main/resources/millage.json
  22. 1 0
      src/main/resources/totalMile.json

+ 10 - 5
pom.xml

@@ -78,11 +78,16 @@
             <artifactId>iov-sjjh-servicenode-sms-interface</artifactId>
             <version>1.0.0</version>
         </dependency>
-        		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>1.2.70</version>
-		</dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.70</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.22</version>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>

+ 59 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/action/WycChannelActionImpl.java

@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
@@ -455,4 +456,62 @@ public class WycChannelActionImpl {
             return responseObject;
         }
     }
+
+    @ApiOperation(value = "从业车辆画像查询", notes = "")
+    @PostMapping(value = "/vehicleInfoQueryV3.do")
+    public ChannelTypeHandleResponseObject vehicleInfoQueryV3(
+            @ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+            @ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+            @ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+
+        log.info("从业车辆画像查询vehicleInfoQueryV3--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+        //日志记录通道类型 - 同步
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY,Constant.IS_NOT_CHARGE);
+        request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        String channel_price = request.getHeader(Constant.CHANNEL_PRICE);
+        String channel_second_price = request.getHeader(Constant.CHANNEL_SECOND_PRICE);
+        log.info("channel_price:{},channel_second_price:{}",channel_price,channel_second_price);
+        request.setAttribute(Constant.CHANNEL_PRICE,request.getHeader(Constant.CHANNEL_PRICE));
+        ChannelTypeHandleResponseObject responseObject = new ChannelTypeHandleResponseObject();
+        try{
+            responseObject = wycChannelService.vehicleInfoQueryV3(
+                    request, channelId,outTime,customBody);
+            //日志记录通道响应码
+            if(responseObject.getCode() != 1){
+                request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+            }else{
+                log.info("ifJk:{}",request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA));
+                if(Constant.CUSTOMER_RETURN_JK.equals(request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA))){
+
+                    String code = property.getCode().get(responseObject.getResultCode());
+                    log.info("resultCode:{},jkCode:{}",responseObject.getResultCode(),code);
+                    if(code!=null){
+                        responseObject.setResultCode(Integer.valueOf(code));
+                    }
+                }
+                request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_SUCCESS_CODE);
+            }
+            //日志记录通道查询参数
+            if(customBody != null){
+                try {
+                    request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+                } catch (UnsupportedEncodingException e) {
+                    ExceptionUtils.handleThrowable(e);
+                    log.error("异常信息:{}",e);
+                }
+            }
+
+            request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY,responseObject.getIsCharge());
+
+            return responseObject;
+        }catch(Exception ex){
+            ErrorUtils.captureException(ex);
+            log.error("message:{}",ex);
+            return responseObject;
+        }
+    }
 }

+ 29 - 5
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/constant/ChannelConstant.java

@@ -1,5 +1,7 @@
 package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.constant;
 
+import java.util.Map;
+
 /**
  * @description:
  * @author: xusonglin
@@ -7,14 +9,36 @@ package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.constant;
  * @version: V1.0
  **/
 public class ChannelConstant {
-    // 网约车从业人员-定制接口-月份
+    /**
+     * 网约车从业人员-定制接口-月份
+     */
     public static final String[] MONTH_ARRAY = {"1", "3", "6", "12"};
-    // 查询成功,查无结果
+    /**
+     * 查询成功,查无结果
+     */
     public static final String NO_RESULT = "查询成功,查无结果";
-    // 日志参数中的错误参数名
+    /**
+     * 日志参数中的错误参数名
+     */
     public static final String LOG_ERROR_PARA = "respnoseCode";
-    // 日志参数中的是否收费
+    /**
+     * 日志参数中的是否收费
+     */
     public static final String LOG_FEE_PARA = "isCharge";
-    // UTF-8
+    /**
+     * UTF-8
+     */
     public static final String PARA_ENCODE = "UTF-8";
+    /**
+     * 网约车车辆V3-车牌颜色
+     */
+    public static final String[] PLATE_COLOR = {"0", "1", "2", "3", "4", "5", "6", "7", "11", "12"};
+    /**
+     * 高速通行-token redis key
+     */
+    public static final String TRAFFIC_QUERY_TOKEN = "TRAFFIC_QUERY_TOKEN";
+    /**
+     * 高速通行-成功返回值
+     */
+    public static final String TRAFFIC_QUERY_SUCCESS_CODE = "200";
 }

+ 25 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/TrafficRecordService.java

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service;
+
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.TempObject;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+public interface TrafficRecordService {
+    /**
+     * 查询高速通行接口token
+     *
+     * @return token
+     */
+    String queryToken();
+
+    /**
+     * 查询高速通行近3个月里程得分
+     *
+     * @param plateNum   车牌号
+     * @param plateColor 车牌颜色
+     * @return 分数
+     */
+    Integer trafficRecordQuery(String plateNum, String plateColor);
+}

+ 13 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/WycChannelService.java

@@ -1,6 +1,7 @@
 package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service;
 
 import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.servlet.http.HttpServletRequest;
@@ -85,4 +86,16 @@ public interface WycChannelService {
 	 */
 	ChannelTypeHandleResponseObject vehicleInfoQueryV2(
 			HttpServletRequest request, String channelId, Integer outTime, String customBody);
+
+	/**
+	 * 从业车辆画像查询-拼接etc高速接口
+	 * @param request
+	 * @param channelId
+	 * @param outTime
+	 * @param customBody 入参:车牌号,车牌颜色
+	 * @return 分数
+	 */
+	ChannelTypeHandleResponseObject vehicleInfoQueryV3(
+			HttpServletRequest request, String channelId, Integer outTime, String customBody);
+
 }

+ 179 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/TrafficRecordServiceImpl.java

@@ -0,0 +1,179 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.constant.ChannelConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.TrafficRecordService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.VehicleJsonHelper;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.TrafficRecordResponseDetailObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.TrafficRecordResponseObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Service
+@Slf4j
+public class TrafficRecordServiceImpl implements TrafficRecordService {
+    @Autowired
+    StringRedisTemplate stringRedisTemplate;
+    @Autowired
+    VehicleJsonHelper vehicleJsonHelper;
+
+    @Value("${supplier.traffic.record.tokenUrl}")
+    private String tokenUrl;
+
+    @Value("${supplier.traffic.record.clientKey}")
+    private String clientKey;
+
+    @Value("${supplier.traffic.record.clientSecret}")
+    private String clientSecret;
+
+    @Value("${supplier.traffic.record.apiUrl}")
+    private String apiUrl;
+
+    @Value("${supplier.traffic.record.multipleMonthRecords}")
+    private String multipleMonthRecords;
+
+    private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
+    private final int QUERY_TOKEN_OUT_TIME = 1500;
+    private final String QUERY_TOKEN_SUCCESS_CODE = "200";
+    private static final String MEDIA_TYPE = "application/json;charset=UTF-8";
+    private final int TRAFFIC_RECORD_OUT_TIME = 2000;
+
+    @Override
+    public String queryToken() {
+        Request.Builder builder = new Request.Builder();
+        Request okRequest = new Request.Builder()
+                .get()
+                .url(tokenUrl)
+                .build();
+        HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
+        urlBuilder.addQueryParameter("clientKey", clientKey);
+        urlBuilder.addQueryParameter("clientSecret", clientSecret);
+        builder.url(urlBuilder.build());
+
+        OkHttpClient client = okHttpClient.newBuilder()
+                .connectTimeout(QUERY_TOKEN_OUT_TIME, TimeUnit.MILLISECONDS)
+                .readTimeout(QUERY_TOKEN_OUT_TIME, TimeUnit.MILLISECONDS)
+                .writeTimeout(QUERY_TOKEN_OUT_TIME, TimeUnit.MILLISECONDS)
+                .build();
+        String responseContext;
+        String token = "";
+        try {
+            Response response = client.newCall(builder.build()).execute();
+            responseContext = response.body().string();
+            log.info("supplier10000036.queryToken接口responseContext={}", responseContext);
+        } catch (IOException ioe) {
+            ErrorUtils.captureException(ioe);
+            log.info("supplier10000036.queryToken接口SocketTimeoutException=", ioe);
+            return token;
+        }
+        JSONObject responseObject = JSON.parseObject(responseContext);
+        if (responseObject != null) {
+            String code = responseObject.getString("code");
+            if (code.equals(QUERY_TOKEN_SUCCESS_CODE)) {
+                token = responseObject.getString("message");
+                stringRedisTemplate.opsForValue().set(ChannelConstant.TRAFFIC_QUERY_TOKEN, token, 1, TimeUnit.HOURS);
+                return token;
+            } else {
+                return token;
+            }
+        } else {
+            return token;
+        }
+    }
+
+    private String getToken() {
+        String token = stringRedisTemplate.opsForValue().get(ChannelConstant.TRAFFIC_QUERY_TOKEN);
+        if (StringUtils.isBlank(token)) {
+            token = queryToken();
+        }
+        return token;
+    }
+
+    @Override
+    public Integer trafficRecordQuery(String plateNum, String plateColor) {
+        int score = 0;
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.MONTH, -1);
+        String endTime = simpleDateFormat.format(calendar.getTime());
+        calendar.add(Calendar.MONTH, -2);
+        String startTime = simpleDateFormat.format(calendar.getTime());
+
+        JSONObject requestObject = new JSONObject();
+        requestObject.put("plateNumber", plateNum + "_" + plateColor);
+        requestObject.put("startMonth", startTime);
+        requestObject.put("endMonth", endTime);
+
+
+        MediaType mediaType = MediaType.parse(MEDIA_TYPE);
+        RequestBody requestBody = RequestBody.create(mediaType, requestObject.toJSONString());
+        Request okRequest = new Request.Builder()
+                .post(requestBody)
+                .header("X-TOKEN", getToken())
+                .url(apiUrl + multipleMonthRecords)
+                .build();
+        OkHttpClient client = okHttpClient.newBuilder()
+                .connectTimeout(TRAFFIC_RECORD_OUT_TIME, TimeUnit.MILLISECONDS)
+                .readTimeout(TRAFFIC_RECORD_OUT_TIME, TimeUnit.MILLISECONDS)
+                .writeTimeout(TRAFFIC_RECORD_OUT_TIME, TimeUnit.MILLISECONDS)
+                .build();
+        String responseContext = "";
+        try {
+            Response response = client.newCall(okRequest).execute();
+            if (response.body() != null) {
+                responseContext = response.body().string();
+            }
+            log.info("supplier10000036.trafficRecordQuery接口responseContext={}", responseContext);
+        } catch (IOException ioe) {
+            ErrorUtils.captureException(ioe);
+            log.info("supplier10000036.trafficRecordQuery接口SocketTimeoutException=", ioe);
+            return score;
+        }
+        if (StringUtils.isNotBlank(responseContext)) {
+            TrafficRecordResponseObject responseObject = JSON.toJavaObject(JSON.parseObject(responseContext),
+                    TrafficRecordResponseObject.class);
+            if (responseObject != null) {
+                return getTrafficRecordScore(responseObject);
+            } else {
+                return score;
+            }
+        } else {
+            return score;
+        }
+    }
+
+    private Integer getTrafficRecordScore(TrafficRecordResponseObject responseObject) {
+        if (!responseObject.getCode().equals(ChannelConstant.TRAFFIC_QUERY_SUCCESS_CODE)) {
+            return 0;
+        }
+
+        List<TrafficRecordResponseDetailObject> detailObjectList = JSON.parseArray(responseObject.getMessage(),
+                TrafficRecordResponseDetailObject.class);
+
+        double score = 0;
+        for (TrafficRecordResponseDetailObject detailObject : detailObjectList) {
+            Map<String, String> millageMap = vehicleJsonHelper.getMillage();
+            String scoreString = millageMap.get(detailObject.getSumFeeMileage());
+            score = score + Integer.parseInt(scoreString);
+        }
+        return (int) Math.round(score / detailObjectList.size());
+    }
+}

+ 288 - 79
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/WycChannelServiceImpl.java

@@ -10,9 +10,11 @@ import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
 import info.aspirecn.iov.sjjh.service.sms.action.SmsActionInterface;
 import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
 import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.constant.ChannelConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.TrafficRecordService;
 import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.WycChannelService;
 import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.DESedeUtil;
 import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.SupplierProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.VehicleJsonHelper;
 import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
@@ -52,6 +54,11 @@ public class WycChannelServiceImpl implements WycChannelService {
     SupplierProperties supplierProperties;
     @Autowired
     SmsActionInterface smsActionInterface;
+    @Autowired
+    TrafficRecordService trafficRecordService;
+    @Autowired
+    VehicleJsonHelper vehicleJsonHelper;
+
     private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
     @Autowired
     StringRedisTemplate stringTemplate;
@@ -78,11 +85,11 @@ public class WycChannelServiceImpl implements WycChannelService {
         String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
 
         try {
-            if(outTime <= 0) {
+            if (outTime <= 0) {
                 outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
             }
 
-            log.info("WycInfoRequest---customBody={},outTime={}",customBody,outTime);
+            log.info("WycInfoRequest---customBody={},outTime={}", customBody, outTime);
             WycInfoRequestObject wycInfoRequestObject = objectMapper.readValue(customBody,
                     WycInfoRequestObject.class);
             if (StringUtils.isBlank(wycInfoRequestObject.getName()) ||
@@ -101,8 +108,6 @@ public class WycChannelServiceImpl implements WycChannelService {
             }
 
 
-
-
             // 创建一个请求 Builder
             Request.Builder builder = new Request.Builder();
             Request okRequest = new Request.Builder()
@@ -110,9 +115,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(supplierProperties.getUrl())
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
-            urlBuilder.addQueryParameter("dri_name",wycInfoRequestObject.getName());
-            urlBuilder.addQueryParameter("idcard",wycInfoRequestObject.getIdCode());
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("dri_name", wycInfoRequestObject.getName());
+            urlBuilder.addQueryParameter("idcard", wycInfoRequestObject.getIdCode());
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -124,21 +129,21 @@ public class WycChannelServiceImpl implements WycChannelService {
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
             //
-            log.info("supplier10000036.WycInfoRequest接口responseContext={}",responseContext);
+            log.info("supplier10000036.WycInfoRequest接口responseContext={}", responseContext);
 
             WycInfoResponseObject wycInfoResponseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
-            if(wycInfoResponseObject !=null){
+            if (wycInfoResponseObject != null) {
                 upstreamCode = String.valueOf(wycInfoResponseObject.getCode());
-                if(wycInfoResponseObject.getCode()==1 && wycInfoResponseObject.getState()==0){//库无
+                if (wycInfoResponseObject.getCode() == 1 && wycInfoResponseObject.getState() == 0) {//库无
                     ret.setResultCode(Constant.UN_FIND_NUM_CODE);
                     ret.setResultBody("查询成功,查无结果");
                     ret.setResultDesc("查询成功,查无结果");
-                }else if(wycInfoResponseObject.getCode()==0 && wycInfoResponseObject.getState()==0){//计费分析
+                } else if (wycInfoResponseObject.getCode() == 0 && wycInfoResponseObject.getState() == 0) {//计费分析
                     ret.setIsCharge(Constant.IS_CHARGE);
                     ret.setResultCode(Constant.MATCH_CODE);
                     String message = wycInfoResponseObject.getMessage();
                     //ret.setResultBody(message);
-                    if(secondMoney!=0) {
+                    if (secondMoney != 0) {
                         String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                         int index = 0;
                         for (; index < result.length; index++) {
@@ -154,36 +159,36 @@ public class WycChannelServiceImpl implements WycChannelService {
                         }
 
                     }
-                    Map<String,String> mapResult = new HashMap<String,String>();
+                    Map<String, String> mapResult = new HashMap<String, String>();
                     String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                     for (int index = 0; index < result.length; index++) {
                         String[] details = result[index].split("=");
-                        mapResult.put(details[0],details[1]);
+                        mapResult.put(details[0], details[1]);
                     }
                     String resultBody = objectMapper.writeValueAsString(mapResult);
-                    resultBody = resultBody.replace("'","");
+                    resultBody = resultBody.replace("'", "");
                     ret.setResultBody(resultBody);
                     ret.setJfFree(money);
                     ret.setJflx(3);
                     ret.setResultDesc("查询成功,查有结果");
-                }else{//其他
+                } else {//其他
                     ret.setResultCode(Constant.OTHER_ERROR_CODE);
                     ret.setResultBody("查询错误");
                     ret.setResultDesc("查询错误");
                 }
-            }else{
+            } else {
                 ret.setResultCode(Constant.OTHER_ERROR_CODE);
                 ret.setResultBody("查询错误");
                 ret.setResultDesc("查询错误");
             }
-            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,  upstreamCode);
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
 
 
-        } catch(SocketTimeoutException ste) {
+        } catch (SocketTimeoutException ste) {
             ErrorUtils.captureException(ste);
             log.info("supplier10000036.WycInfoRequest接口SocketTimeoutException={}", ste);
             ret.setCode(Constant.REQUEST_TIMEOUT);
-        } catch(Exception e) {
+        } catch (Exception e) {
             ErrorUtils.captureException(e);
             log.info("supplier10000036.WycInfoRequest接口Exception={}", e);
             ret.setCode(Constant.FAIL);
@@ -193,6 +198,7 @@ public class WycChannelServiceImpl implements WycChannelService {
         request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
         return ret;
     }
+
     @Override
     public ChannelTypeHandleResponseObject onlineCarHailingQuery(HttpServletRequest request, Integer outTime, String customBody) {
         ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
@@ -225,9 +231,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(supplierProperties.getUrl())
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
-            urlBuilder.addQueryParameter("dri_name",jsonResolveObject.getName());
-            urlBuilder.addQueryParameter("idcard",jsonResolveObject.getIdCode());
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("dri_name", jsonResolveObject.getName());
+            urlBuilder.addQueryParameter("idcard", jsonResolveObject.getIdCode());
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -238,7 +244,7 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .build();
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
-            log.info("supplier10000036.onlineCarHailingQuery接口responseContext={}",responseContext);
+            log.info("supplier10000036.onlineCarHailingQuery接口responseContext={}", responseContext);
 
             WycInfoResponseObject responseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
 
@@ -279,7 +285,7 @@ public class WycChannelServiceImpl implements WycChannelService {
         if (code == 0 && state == 0 && StringUtils.isNotBlank(message)) {
             // 查询成功,返回结果
             // 解析返回结果
-            String[] results =  message.substring(1).substring(0,message.length()-2).replace("'", "").split(",");
+            String[] results = message.substring(1).substring(0, message.length() - 2).replace("'", "").split(",");
             Map<String, String> messageMap = new HashMap<>();
             for (String r : results) {
                 String[] arr = r.split("=");
@@ -384,7 +390,7 @@ public class WycChannelServiceImpl implements WycChannelService {
     //每一分执行一下定时任务
 
     @Scheduled(cron = "${vpn.heartbeat}")
-    public void refresh(){
+    public void refresh() {
         //查询这个时间减去当前时间小于25分钟,
         try {
             log.info("----------------");
@@ -442,10 +448,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     stringTemplate.boundValueOps("wyc_refre").set(String.valueOf(currentTime));
 
 
-
                 }
             }
-        } catch(IOException e){
+        } catch (IOException e) {
             log.error("exception:{}", e);
         }
 
@@ -491,9 +496,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(supplierProperties.getUrl())
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
-            urlBuilder.addQueryParameter("dri_name",jsonResolveObject.getName());
-            urlBuilder.addQueryParameter("idcard",jsonResolveObject.getIdCode());
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("dri_name", jsonResolveObject.getName());
+            urlBuilder.addQueryParameter("idcard", jsonResolveObject.getIdCode());
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -504,7 +509,7 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .build();
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
-            log.info("supplier10000036.onlineCarHailingQuery接口responseContext={}",responseContext);
+            log.info("supplier10000036.onlineCarHailingQuery接口responseContext={}", responseContext);
 
             WycInfoResponseObject responseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
 
@@ -571,11 +576,11 @@ public class WycChannelServiceImpl implements WycChannelService {
         String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
 
         try {
-            if(outTime <= 0) {
+            if (outTime <= 0) {
                 outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
             }
 
-            log.info("WycInfoDecodeRequest---customBody={},outTime={}",customBody,outTime);
+            log.info("WycInfoDecodeRequest---customBody={},outTime={}", customBody, outTime);
 
             WycInfoRequestObject wycInfoRequestObject = objectMapper.readValue(customBody,
                     WycInfoRequestObject.class);
@@ -649,9 +654,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(supplierProperties.getUrl())
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
-            urlBuilder.addQueryParameter("dri_name",wycInfoRequestObject.getName());
-            urlBuilder.addQueryParameter("idcard",idCode);
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("dri_name", wycInfoRequestObject.getName());
+            urlBuilder.addQueryParameter("idcard", idCode);
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -663,21 +668,21 @@ public class WycChannelServiceImpl implements WycChannelService {
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
             //
-            log.info("supplier10000036.WycInfoDecodeRequest接口responseContext={}",responseContext);
+            log.info("supplier10000036.WycInfoDecodeRequest接口responseContext={}", responseContext);
 
             WycInfoResponseObject wycInfoResponseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
-            if(wycInfoResponseObject !=null){
+            if (wycInfoResponseObject != null) {
                 upstreamCode = String.valueOf(wycInfoResponseObject.getCode());
-                if(wycInfoResponseObject.getCode()==1 && wycInfoResponseObject.getState()==0){//库无
+                if (wycInfoResponseObject.getCode() == 1 && wycInfoResponseObject.getState() == 0) {//库无
                     ret.setResultCode(Constant.UN_FIND_NUM_CODE);
                     ret.setResultBody("查询成功,查无结果");
                     ret.setResultDesc("查询成功,查无结果");
-                }else if(wycInfoResponseObject.getCode()==0 && wycInfoResponseObject.getState()==0){//计费分析
+                } else if (wycInfoResponseObject.getCode() == 0 && wycInfoResponseObject.getState() == 0) {//计费分析
                     ret.setIsCharge(Constant.IS_CHARGE);
                     ret.setResultCode(Constant.MATCH_CODE);
                     String message = wycInfoResponseObject.getMessage();
                     //ret.setResultBody(message);
-                    if(secondMoney!=0) {
+                    if (secondMoney != 0) {
                         String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                         int index = 0;
                         for (; index < result.length; index++) {
@@ -693,36 +698,36 @@ public class WycChannelServiceImpl implements WycChannelService {
                         }
 
                     }
-                    Map<String,String> mapResult = new HashMap<String,String>();
+                    Map<String, String> mapResult = new HashMap<String, String>();
                     String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                     for (int index = 0; index < result.length; index++) {
                         String[] details = result[index].split("=");
-                        mapResult.put(details[0],details[1]);
+                        mapResult.put(details[0], details[1]);
                     }
                     String resultBody = objectMapper.writeValueAsString(mapResult);
-                    resultBody = resultBody.replace("'","");
+                    resultBody = resultBody.replace("'", "");
                     ret.setResultBody(resultBody);
                     ret.setJfFree(money);
                     ret.setJflx(3);
                     ret.setResultDesc("查询成功,查有结果");
-                }else{//其他
+                } else {//其他
                     ret.setResultCode(Constant.OTHER_ERROR_CODE);
                     ret.setResultBody("查询错误");
                     ret.setResultDesc("查询错误");
                 }
-            }else{
+            } else {
                 ret.setResultCode(Constant.OTHER_ERROR_CODE);
                 ret.setResultBody("查询错误");
                 ret.setResultDesc("查询错误");
             }
-            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,  upstreamCode);
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
 
 
-        } catch(SocketTimeoutException ste) {
+        } catch (SocketTimeoutException ste) {
             ErrorUtils.captureException(ste);
             log.info("supplier10000036.WycInfoDecodeRequest接口SocketTimeoutException={}", ste);
             ret.setCode(Constant.REQUEST_TIMEOUT);
-        } catch(Exception e) {
+        } catch (Exception e) {
             ErrorUtils.captureException(e);
             log.info("supplier10000036.WycInfoDecodeRequest接口Exception={}", e);
             ret.setCode(Constant.FAIL);
@@ -807,8 +812,8 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(vehicleFigureUrl)
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
-            urlBuilder.addQueryParameter("veh_no",jsonResolveObject.getPlateNum());
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("veh_no", jsonResolveObject.getPlateNum());
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -819,7 +824,7 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .build();
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
-            log.info("supplier10000036.vehicleInfoQuery接口responseContext={}",responseContext);
+            log.info("supplier10000036.vehicleInfoQuery接口responseContext={}", responseContext);
             WycInfoResponseObject responseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
 
             if (responseObject != null) {
@@ -879,36 +884,36 @@ public class WycChannelServiceImpl implements WycChannelService {
         int state = responseObject.getState();
         int chargeMoney = 0;
 
-        if(responseObject != null){
-            if(code == 1 && state == 0){//库无
+        if (responseObject != null) {
+            if (code == 1 && state == 0) {//库无
                 ret.setResultCode(Constant.UN_FIND_NUM_CODE);
                 ret.setResultBody("查询成功,查无结果");
                 ret.setResultDesc("查询成功,查无结果");
 
                 chargeMoney = Integer.parseInt(request.getHeader(Constant.ROUTE_SECOND_PRICE));
                 ret.setIsCharge(Constant.IS_CHARGE);
-            }else if(code == 0 && state == 0){//计费分析
+            } else if (code == 0 && state == 0) {//计费分析
                 String message = responseObject.getMessage();
-                Map<String,String> mapResult = new HashMap<String,String>();
+                Map<String, String> mapResult = new HashMap<String, String>();
                 String[] result = message.substring(12, message.length()).substring(0, message.length() - 13).split(",");
                 for (int index = 0; index < result.length; index++) {
                     String[] details = result[index].split("=");
-                    mapResult.put(details[0],details[1]);
+                    mapResult.put(details[0], details[1]);
                 }
                 String resultBody = JSON.toJSONString(mapResult);
-                resultBody = resultBody.replace("'","");
+                resultBody = resultBody.replace("'", "");
 
                 chargeMoney = Integer.parseInt(request.getHeader(Constant.ROUTE_PRICE));
                 ret.setIsCharge(Constant.IS_CHARGE);
                 ret.setResultCode(Constant.MATCH_CODE);
                 ret.setResultBody(resultBody);
                 ret.setResultDesc("查询成功,查有结果");
-            }else{//其他
+            } else {//其他
                 ret.setResultCode(Constant.OTHER_ERROR_CODE);
                 ret.setResultBody("查询错误");
                 ret.setResultDesc("查询错误");
             }
-        }else{
+        } else {
             ret.setResultCode(Constant.OTHER_ERROR_CODE);
             ret.setResultBody("查询错误");
             ret.setResultDesc("查询错误");
@@ -932,11 +937,11 @@ public class WycChannelServiceImpl implements WycChannelService {
         String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
 
         try {
-            if(outTime <= 0) {
+            if (outTime <= 0) {
                 outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
             }
 
-            log.info("WycInfoDecodeRequestV2---customBody={},outTime={}",customBody,outTime);
+            log.info("WycInfoDecodeRequestV2---customBody={},outTime={}", customBody, outTime);
 
             WycInfoRequestObject wycInfoRequestObject = objectMapper.readValue(customBody,
                     WycInfoRequestObject.class);
@@ -964,9 +969,9 @@ public class WycChannelServiceImpl implements WycChannelService {
                     .url(supplierProperties.getUrl())
                     .build();
             HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
-            urlBuilder.addQueryParameter("company_id",supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
             urlBuilder.addQueryParameter("dri_name", name);
-            urlBuilder.addQueryParameter("idcard",idCode);
+            urlBuilder.addQueryParameter("idcard", idCode);
             builder.url(urlBuilder.build());
 
             OkHttpClient client = okHttpClient.newBuilder()
@@ -978,21 +983,21 @@ public class WycChannelServiceImpl implements WycChannelService {
             Response response = client.newCall(builder.build()).execute();
             String responseContext = response.body().string();
             //
-            log.info("supplier10000036.WycInfoDecodeRequestV2接口responseContext={}",responseContext);
+            log.info("supplier10000036.WycInfoDecodeRequestV2接口responseContext={}", responseContext);
 
             WycInfoResponseObject wycInfoResponseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
-            if(wycInfoResponseObject !=null){
+            if (wycInfoResponseObject != null) {
                 upstreamCode = String.valueOf(wycInfoResponseObject.getCode());
-                if(wycInfoResponseObject.getCode()==1 && wycInfoResponseObject.getState()==0){//库无
+                if (wycInfoResponseObject.getCode() == 1 && wycInfoResponseObject.getState() == 0) {//库无
                     ret.setResultCode(Constant.UN_FIND_NUM_CODE);
                     ret.setResultBody("查询成功,查无结果");
                     ret.setResultDesc("查询成功,查无结果");
-                }else if(wycInfoResponseObject.getCode()==0 && wycInfoResponseObject.getState()==0){//计费分析
+                } else if (wycInfoResponseObject.getCode() == 0 && wycInfoResponseObject.getState() == 0) {//计费分析
                     ret.setIsCharge(Constant.IS_CHARGE);
                     ret.setResultCode(Constant.MATCH_CODE);
                     String message = wycInfoResponseObject.getMessage();
                     //ret.setResultBody(message);
-                    if(secondMoney!=0) {
+                    if (secondMoney != 0) {
                         String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                         int index = 0;
                         for (; index < result.length; index++) {
@@ -1008,36 +1013,36 @@ public class WycChannelServiceImpl implements WycChannelService {
                         }
 
                     }
-                    Map<String,String> mapResult = new HashMap<String,String>();
+                    Map<String, String> mapResult = new HashMap<String, String>();
                     String[] result = message.substring(1, message.length()).substring(0, message.length() - 2).split(",");
                     for (int index = 0; index < result.length; index++) {
                         String[] details = result[index].split("=");
-                        mapResult.put(details[0],details[1]);
+                        mapResult.put(details[0], details[1]);
                     }
                     String resultBody = objectMapper.writeValueAsString(mapResult);
-                    resultBody = resultBody.replace("'","");
+                    resultBody = resultBody.replace("'", "");
                     ret.setResultBody(resultBody);
                     ret.setJfFree(money);
                     ret.setJflx(3);
                     ret.setResultDesc("查询成功,查有结果");
-                }else{//其他
+                } else {//其他
                     ret.setResultCode(Constant.OTHER_ERROR_CODE);
                     ret.setResultBody("查询错误");
                     ret.setResultDesc("查询错误");
                 }
-            }else{
+            } else {
                 ret.setResultCode(Constant.OTHER_ERROR_CODE);
                 ret.setResultBody("查询错误");
                 ret.setResultDesc("查询错误");
             }
-            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,  upstreamCode);
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
 
 
-        } catch(SocketTimeoutException ste) {
+        } catch (SocketTimeoutException ste) {
             ErrorUtils.captureException(ste);
             log.info("supplier10000036.WycInfoDecodeRequestV2接口SocketTimeoutException={}", ste);
             ret.setCode(Constant.REQUEST_TIMEOUT);
-        } catch(Exception e) {
+        } catch (Exception e) {
             ErrorUtils.captureException(e);
             log.info("supplier10000036.WycInfoDecodeRequestV2接口Exception={}", e);
             ret.setCode(Constant.FAIL);
@@ -1105,7 +1110,7 @@ public class WycChannelServiceImpl implements WycChannelService {
             return false;
         } else if (encryptType.equals("MD5")
                 && (wycInfoRequestObject.getIdCode().length() != 32
-                || wycInfoRequestObject.getName().length() !=32)) {
+                || wycInfoRequestObject.getName().length() != 32)) {
             ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
             ret.setResultBody(Constant.INVALID_PARAMETER);
             ret.setResultDesc(Constant.INVALID_PARAMETER);
@@ -1167,6 +1172,210 @@ public class WycChannelServiceImpl implements WycChannelService {
         return ret;
     }
 
+    @Override
+    public ChannelTypeHandleResponseObject vehicleInfoQueryV3(HttpServletRequest request, String channelId, Integer outTime, String customBody) {
+        ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+        ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+        String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+        String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+
+        if (StringUtils.isBlank(returnType)) {
+            returnType = Constant.CUSTOMER_RETURN_ZW;
+        }
+        if (outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+
+        log.info("vehicleInfoQueryV3---customBody={},outTime={}", customBody, outTime);
+
+        try {
+            VehicleInfoQueryV3RequestObject jsonResolveObject = objectMapper.readValue(customBody,
+                    VehicleInfoQueryV3RequestObject.class);
+            // 参数校验
+            if (!validateRequestParams(ret, returnType, jsonResolveObject)
+                    || !validateVehicleInfoRequestParams(ret, returnType, jsonResolveObject)) {
+                ret.setCode(Constant.SUCCESS);
+                request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+                return ret;
+            }
+
+            Request.Builder builder = new Request.Builder();
+            Request okRequest = new Request.Builder()
+                    .get()
+                    .url(vehicleFigureUrl)
+                    .build();
+            HttpUrl.Builder urlBuilder = okRequest.url().newBuilder();
+            urlBuilder.addQueryParameter("company_id", supplierProperties.getCompany_id());
+            urlBuilder.addQueryParameter("veh_no", jsonResolveObject.getPlateNum());
+            builder.url(urlBuilder.build());
+
+            OkHttpClient client = okHttpClient.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            Response response = client.newCall(builder.build()).execute();
+            String responseContext = response.body().string();
+//            String responseContext = "{\"code\":0,\"message\":\"VehicleInfo{vehNO='豫F7K381',earliestOrderMonth='C',totalMile='C',mile1='A',mile3='B',mile6='B',salary1='B',salary3='B',salary6='B'}\",\"state\":0}";
+            log.info("supplier10000036.vehicleInfoQueryV3接口responseContext={}", responseContext);
+            WycInfoResponseObject responseObject = objectMapper.readValue(responseContext, WycInfoResponseObject.class);
+
+            if (responseObject != null) {
+                ret.setCode(Constant.SUCCESS);
+                setVehicleInfoQueryV3Response(ret, jsonResolveObject, responseObject);
+                upstreamCode = responseObject.getCode() + "," + responseObject.getState();
+            } else {
+                ret.setCode(Constant.FAIL);
+            }
+        } catch (SocketTimeoutException ste) {
+            ErrorUtils.captureException(ste);
+            log.info("supplier10000036.vehicleInfoQueryV3接口SocketTimeoutException=", ste);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+        } catch (SocketException se) {
+            ErrorUtils.captureException(se);
+            log.info("supplier10000036.vehicleInfoQueryV3接口SocketException=", se);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+        } catch (Exception ioe) {
+            ErrorUtils.captureException(ioe);
+            log.info("supplier10000036.vehicleInfoQueryV3接口Exception=", ioe);
+            ret.setCode(Constant.FAIL);
+        }
+        //上游返回码
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        return ret;
+    }
+
+    private Integer getVehicleInfoQueryV3Score(Map<String, String> responseObject) {
+        // 总行驶里程
+        String totalMile = responseObject.get("totalMile");
+        // 近3个月车辆运营总里程
+        String mile3 = responseObject.get("mile3");
+        // 车辆从事年限
+        String earliestOrderMonth = responseObject.get("earliestOrderMonth");
+
+        int totalMileValue = vehicleJsonHelper.getTotalMile().get(totalMile);
+        double earliestOrderMonthValue = vehicleJsonHelper.getEarliestOrderMonthMap().getDoubleValue(earliestOrderMonth);
+        double averageValue = totalMileValue / earliestOrderMonthValue;
+
+        String totalMileTag;
+        if (averageValue < 10000) {
+            totalMileTag = "t1";
+        } else {
+            totalMileTag = "t2";
+        }
+
+        String mileTag;
+        if (mile3.equals("A")) {
+            mileTag = "m1";
+        } else {
+            mileTag = "m2";
+        }
+
+        String earliestOrderMonthTag;
+        if (earliestOrderMonth.equals("A") || earliestOrderMonth.equals("B")) {
+            earliestOrderMonthTag = "e1";
+        } else {
+            earliestOrderMonthTag = "e2";
+        }
+
+        /**
+         * 年化里程	    近3个月车辆运营总里程	车辆从事年限	分值	标识
+         * (0-10000]	0-500	            3年-5年	    100	t1m1e2
+         * (0-10000]	0-500	            0-2年	    200	t1m1e1
+         * (0-10000]	500-30000	        3年-5年	    300	t1m2e2
+         * (0-10000]	500-30000	        0-2年	    400	t1m2e1
+         * (10000-inf]	0-500	            3年-5年	    500	t2m1e2
+         * (10000-inf]	0-500	            0-2年	    600	t2m1e1
+         * (10000-inf]	500-30000	        3年-5年	    700	t2m2e2
+         * (10000-inf]	500-30000	        0-2年	    800	t2m2e1
+         */
+        int score;
+        String totalTag = totalMileTag + mileTag + earliestOrderMonthTag;
+        switch (totalTag) {
+            case "t1m1e2":
+                score = 100;
+                break;
+            case "t1m1e1":
+                score = 200;
+                break;
+            case "t1m2e2":
+                score = 300;
+                break;
+            case "t1m2e1":
+                score = 400;
+                break;
+            case "t2m1e2":
+                score = 500;
+                break;
+            case "t2m1e1":
+                score = 600;
+                break;
+            case "t2m2e2":
+                score = 700;
+                break;
+            case "t2m2e1":
+                score = 800;
+                break;
+            default:
+                score = 0;
+                break;
+        }
+        return score;
+    }
+
+    private void setVehicleInfoQueryV3Response(ChannelTypeHandleResponseObject ret,
+                                               VehicleInfoQueryV3RequestObject jsonResolveObject,
+                                               WycInfoResponseObject responseObject) {
+        int code = responseObject.getCode();
+        int state = responseObject.getState();
+
+        if (responseObject != null) {
+            if (code == 1 && state == 0) {
+                //库无
+                ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+                ret.setResultBody("查询成功,查无结果");
+                ret.setResultDesc("查询成功,查无结果");
+            } else if (code == 0 && state == 0) {//计费分析
+                String message = responseObject.getMessage();
+                Map<String, String> mapResult = new HashMap<String, String>();
+                String[] result = message.substring(12, message.length()).substring(0, message.length() - 13).split(",");
+                for (int index = 0; index < result.length; index++) {
+                    String[] details = result[index].split("=");
+                    mapResult.put(details[0], details[1].replace("'", ""));
+                }
+                int vehicleInfoScore = getVehicleInfoQueryV3Score(mapResult);
+                int trafficRecordScore = trafficRecordService.trafficRecordQuery(jsonResolveObject.getPlateNum(),
+                        jsonResolveObject.getPlateColor());
+
+                ret.setIsCharge(Constant.IS_CHARGE);
+                ret.setResultCode(Constant.MATCH_CODE);
+                ret.setResultBody(vehicleInfoScore + trafficRecordScore);
+                ret.setResultDesc("查询成功,查有结果");
+            } else {//其他
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody("查询错误");
+                ret.setResultDesc("查询错误");
+            }
+        } else {
+            ret.setResultCode(Constant.OTHER_ERROR_CODE);
+            ret.setResultBody("查询错误");
+            ret.setResultDesc("查询错误");
+        }
+    }
+
+    private boolean validateVehicleInfoRequestParams(ChannelTypeHandleResponseObject ret, String returnType,
+                                                     VehicleInfoQueryV3RequestObject jsonResolveObject) {
+        if (StringUtils.isBlank(jsonResolveObject.getPlateColor())
+                || !ArrayUtils.contains(ChannelConstant.PLATE_COLOR, jsonResolveObject.getPlateColor())) {
+            ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+            ret.setResultDesc(Constant.INVALID_PARAMETER);
+            ret.setResultBody(Constant.INVALID_PARAMETER);
+            return false;
+        } else {
+            return true;
+        }
+    }
+
     private boolean validateVehicleInfoRequestParams(ChannelTypeHandleResponseObject ret, String returnType,
                                                      VehicleInfoQueryV2RequestObject jsonResolveObject) {
         if (StringUtils.isBlank(jsonResolveObject.getVin())

+ 23 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/task/TrafficRecordTokenTask.java

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.task;
+
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.TrafficRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Component
+@Slf4j
+public class TrafficRecordTokenTask {
+    @Autowired
+    TrafficRecordService trafficRecordService;
+
+    @Scheduled(cron = "0 0 0/1 * * ?")
+    public void tokenTask() {
+        trafficRecordService.queryToken();
+    }
+}

+ 52 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/VehicleJsonHelper.java

@@ -0,0 +1,52 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.json.JSON;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Component
+public class VehicleJsonHelper {
+    private Map<String, String> millageObject;
+    private Map<String, Integer> totalMileObject;
+    private JSONObject earliestOrderMonthObject;
+
+    public Map<String, String> getMillage() {
+        if (millageObject != null) {
+            return millageObject;
+        }
+        String filePath = "millage.json";
+        JSON json = JSONUtil.readJSON(FileUtil.file(filePath), Charset.defaultCharset());
+        millageObject = com.alibaba.fastjson.JSON.parseObject(json.toString(), Map.class);
+        return millageObject;
+    }
+
+    public Map<String, Integer> getTotalMile() {
+        if (totalMileObject != null) {
+            return totalMileObject;
+        }
+        String filePath = "totalMile.json";
+        JSON json = JSONUtil.readJSON(FileUtil.file(filePath), Charset.defaultCharset());
+        totalMileObject = com.alibaba.fastjson.JSON.parseObject(json.toString(), Map.class);
+        return totalMileObject;
+    }
+
+    public JSONObject getEarliestOrderMonthMap() {
+        if (earliestOrderMonthObject != null) {
+            return earliestOrderMonthObject;
+        }
+        String filePath = "earliestOrderMonth.json";
+        JSON json = JSONUtil.readJSON(FileUtil.file(filePath), Charset.defaultCharset());
+        earliestOrderMonthObject = com.alibaba.fastjson.JSON.parseObject(json.toString());
+        return earliestOrderMonthObject;
+    }
+}

+ 56 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TrafficRecordResponseDetailObject.java

@@ -0,0 +1,56 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+@ToString
+public class TrafficRecordResponseDetailObject implements Serializable {
+
+    private static final long serialVersionUID = -418037417473917714L;
+
+    @JSONField(name = "axlecount")
+    private String axleCount;
+
+    @JSONField(name = "exTimes_count")
+    private String exTimesCount;
+
+    @JSONField(name = "max_exTime")
+    private String maxExTime;
+
+    @JSONField(name = "max_travel_time")
+    private String maxTravelTime;
+
+    private String month;
+
+    @JSONField(name = "sum_fee")
+    private String sumFee;
+
+    @JSONField(name = "sum_feemileage")
+    private String sumFeeMileage;
+
+    @JSONField(name = "sum_travel_time")
+    private String sumTravelTime;
+
+    @JSONField(name = "sum_weight_mileage")
+    private String sumWeightMileage;
+
+    @JSONField(name = "transtime_count")
+    private String transTimeCount;
+
+    @JSONField(name = "travel_provinces_count")
+    private String travelProvincesCount;
+
+    @JSONField(name = "vehicleid")
+    private String vehicleId;
+
+    @JSONField(name = "vehicletype")
+    private String vehicleType;
+}

+ 22 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TrafficRecordResponseObject.java

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+@ToString
+public class TrafficRecordResponseObject implements Serializable {
+
+    private static final long serialVersionUID = -5208248432884615801L;
+
+    private String code;
+
+    private String message;
+
+}

+ 23 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleInfoQueryV3RequestObject.java

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/10/19 14:32
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class VehicleInfoQueryV3RequestObject extends VehicleInfoQueryRequestObject implements Serializable {
+
+    private static final long serialVersionUID = 2680873585025184872L;
+
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+}

+ 0 - 97
src/main/resources/config/application-hwtest.yml

@@ -1,97 +0,0 @@
-server:
-  tomcat:
-    accesslog:
-      buffered: false
-      enabled: true
-      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
-                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
-                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
-                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}r,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
-      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
-      directory: ${logging.path}
-  servlet:
-    context-path: /
-
-spring:
-  sleuth:
-    sampler:
-      probability: 0.1
-    web:
-      additional-skip-pattern: /api/v2/spans
-  zipkin:
-    base-url: http://127.0.0.1:${server.port}
-  mvc:
-    favicon:
-      enabled: false
-  cloud:
-    config:
-      overrideSystemProperties: true
-      allowOverride: true
-      overrideNone: true
-  redis:
-    database: 0
-    host: 10.8.18.171
-    port: 6379
-    jedis:
-      pool:
-        max-active: 8
-        max-wait: -1
-        max-idle: 8
-        min-idle: 0
-
-#management
-management:
-  endpoints:
-    enabled-by-default: true
-    web:
-      exposure:
-        include: '*'
-  endpoint:
-    health:
-      show-details: always
-    shutdown:
-      enabled: true
-
-
-
-#logging
-logging:
-  path: /apps/var/jakarta/logs
-  level:
-    root: INFO
-    red:
-      microcloud: DEBUG
-  config: classpath:config/logback-spring.xml
-  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
-#error logging
-#sleuth logging
-rdc:
-  logging:
-    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-
-#eureka
-eureka:
-  instance:
-    prefer-ip-address: true
-    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
-    metadata-map:
-      management:
-        server:
-          port: ${management.server.port}
-    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
-    health-check-url-path: /actuator/health
-  client:
-    serviceUrl:
-      defaultZone: http://localhost:8888/eureka
-
-supplier:
-  url: http://172.17.11.31:9097/driver_figure
-  sleepTime: 0
-  code: {1: 1000,3: 9901,4: 1099,8: 9909}
-  company_id: jkxy772134
-  interval: 1500000
-  decryptKey: JK568FG2823
-  vehicleFigureUrl: http://172.17.11.31:9097/vehicle_figure
-swagger:
-  show: true

+ 14 - 3
src/main/resources/config/application.yml

@@ -25,7 +25,10 @@ spring:
   mvc:
     favicon:
       enabled: false
-
+  servlet:
+    multipart:
+      max-file-size: 20MB
+      max-request-size: 20MB
 #management
 management:
   endpoints:
@@ -68,8 +71,9 @@ eureka:
     health-check-url-path: /actuator/health
   client:
     serviceUrl:
-      defaultZone: http://localhost:8888/eureka
-
+      defaultZone: http://101.42.99.184:39001/eureka
+vpn:
+  heartbeat: 0 0 0/1 * * ?
 #custom
 supplier:
   url: http://172.17.11.31:9097/driver_figure
@@ -84,5 +88,12 @@ supplier:
     appKey: JIAO_KE
     appSecret: D78C393359BF128715C65D91C67051478A4DFC13
   vehicleFigureUrl: http://172.17.11.31:9097/vehicle_figure
+  traffic:
+    record:
+      tokenUrl: https://tpmapi.chinahighway.org.cn/token
+      clientKey: deb7cf03360064d7
+      clientSecret: 259ae98a84367d817aaf220b601b7f62
+      apiUrl: https://tpmapi.chinahighway.org.cn/api/
+      multipleMonthRecords: multipleMonthRecords
 swagger:
   show: true

+ 0 - 0
src/main/resources/config/banner.txt


+ 11 - 12
src/main/resources/config/bootstrap.yml

@@ -3,16 +3,16 @@ spring:
     name: '@project.artifactId@'
   banner:
     location: classpath:config/banner.txt
-  profiles:
-    active: test
-  cloud:
-    config:
-      discovery:
-        enabled: false
-      uri: http://10.8.18.157:32533
-      label: trunk
-      name: ${spring.application.name}
-      profile: ${spring.profiles.active}
+#  profiles:
+#    active: hwtest
+#  cloud:
+#    config:
+#      discovery:
+#        enabled: false
+#      uri: http://10.8.18.157:32533
+#      label: trunk
+#      name: ${spring.application.name}
+#      profile: ${spring.profiles.active}
 
 server:
   port: 20161
@@ -26,6 +26,5 @@ info:
 
 
 logging:
-  path: /apps/var/jakarta/logs
   file:
-    name: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+    name: /Users/jkxy/root-logs/apps/var/jakarta/logs/temp.out

+ 0 - 110
src/main/resources/config/iov-sjjh-servicenode-supplier-10000036-hwtest.yml

@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-server:
-  tomcat:
-    accesslog:
-      buffered: false
-      enabled: true
-      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
-                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
-                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
-                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}r,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
-      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
-      directory: ${logging.path}
-  servlet:
-    context-path: /
-
-spring:
-  sleuth:
-    sampler:
-      probability: 0.1
-    web:
-      additional-skip-pattern: /api/v2/spans
-  zipkin:
-    base-url: http://127.0.0.1:${server.port}
-  mvc:
-    favicon:
-      enabled: false
-  cloud:
-    config:
-      overrideSystemProperties: true
-      allowOverride: true
-      overrideNone: true
-  redis:
-    database: 0
-    host: 10.8.18.171
-    port: 6379
-    jedis:
-      pool:
-        max-active: 8
-        max-wait: -1
-        max-idle: 8
-        min-idle: 0
-
-#management
-management:
-  endpoints:
-    enabled-by-default: true
-    web:
-      exposure:
-        include: '*'
-  endpoint:
-    health:
-      show-details: always
-    shutdown:
-      enabled: true
-
-
-
-#logging
-logging:
-  path: /apps/var/jakarta/logs
-  level:
-    root: INFO
-    red:
-      microcloud: DEBUG
-  config: classpath:config/logback-spring.xml
-  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
-#error logging
-#sleuth logging
-rdc:
-  logging:
-    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-
-#eureka
-eureka:
-  instance:
-    prefer-ip-address: true
-    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
-    metadata-map:
-      management:
-        server:
-          port: ${management.server.port}
-    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
-    health-check-url-path: /actuator/health
-  client:
-    serviceUrl:
-      defaultZone: http://10.8.18.172:31102/eureka
-
-supplier:
-  url: http://172.17.11.31:9097/driver_figure
-  sleepTime: 0
-  code: {1: 1000,3: 9901,4: 1099}
-  company_id: jkxy772134
-  interval: 1500000
-  decryptKey: JK568FG2823
-  decode:
-    api: CMCC_3RD_DECRYPT
-    url: http://jkxy.h11.site/gateway?api=credit.sec.data
-    appKey: JIAO_KE
-    appSecret: D78C393359BF128715C65D91C67051478A4DFC13
-
-swagger:
-  show: true

+ 0 - 102
src/main/resources/config/iov-sjjh-servicenode-supplier-10000036-onlineJar.yml

@@ -1,102 +0,0 @@
-server:
-  tomcat:
-    accesslog:
-      buffered: false
-      enabled: true
-      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
-                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
-                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
-                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}r,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
-      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
-      directory: ${logging.file.path}
-  servlet:
-    context-path: /
-
-spring:
-  sleuth:
-    sampler:
-      probability: 0.1
-    web:
-      additional-skip-pattern: /api/v2/spans
-  zipkin:
-    base-url: http://127.0.0.1:${server.port}
-  mvc:
-    favicon:
-      enabled: false
-  cloud:
-    config:
-      overrideSystemProperties: true
-      allowOverride: true
-      overrideNone: true
-  redis:
-    host: 192.168.1.25
-    port: 6379
-    jedis:
-      pool:
-        max-active: 8
-        max-wait: -1
-        max-idle: 8
-        min-idle: 0
-
-#management
-management:
-  endpoints:
-    enabled-by-default: true
-    web:
-      exposure:
-        include: '*'
-  endpoint:
-    health:
-      show-details: always
-    shutdown:
-      enabled: true
-
-
-
-#logging
-logging:
-  path: /data/var/jakarta/logs
-  file:
-    name: ${logging.file.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
-    path: /data/var/jakarta/logs
-  level:
-    root: INFO
-    red:
-      microcloud: DEBUG
-  config: classpath:config/logback-spring.xml
-#error logging
-#sleuth logging
-rdc:
-  logging:
-    error-file: ${logging.file.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-    sleuth-file: ${logging.file.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
-
-#eureka
-eureka:
-  instance:
-    prefer-ip-address: true
-    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
-    metadata-map:
-      management:
-        server:
-          port: ${management.server.port}
-    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
-    health-check-url-path: /actuator/health
-  client:
-    serviceUrl:
-      defaultZone: http://192.168.1.32:31102/eureka
-
-supplier:
-  flag: 0
-  url: http://192.168.16.30:9097/driver_figure
-  sleepTime: 0
-  code: {1: 1000,3: 9901,4: 1099}
-  company_id: jkxy772134
-  sign: true
-  interval: 60000
-  decryptKey: JK568FG2823
-  decode:
-    api: CMCC_3RD_DECRYPT
-    url: http://jkxy.h11.site/gateway?api=credit.sec.data
-    appKey: JIAO_KE
-    appSecret: D78C393359BF128715C65D91C67051478A4DFC13

+ 2 - 2
src/main/resources/config/logback-spring.xml

@@ -6,12 +6,12 @@
 
 	<property name="LOG_FILE"
 			  value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}" />
-	<springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/apps/var/jakarta/logs" />
+	<springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/Users/jkxy/root-logs/apps/var/jakarta/logs" />
 	<springProperty scope="context" name="application_name" source="spring.application.name" defaultValue="iov-sjjh-servicenode-supplier-10000030" />
 	<springProperty scope="context" name="sleuth_file" source="rdc.logging.sleuth-file" defaultValue="${LOG_PATH}/sleuth/sleuth.log" />
 	<springProperty scope="context" name="error_file" source="rdc.logging.error-file" defaultValue="${LOG_PATH}/error/error.log" />
 
-	<include resource="info/aspirecn/rdc/aspirecloud/node/except/xml/defaults.xml" />
+<!--	<include resource="info/aspirecn/rdc/aspirecloud/node/except/xml/defaults.xml" />-->
 	<include resource="info/aspirecn/rdc/aspirecloud/node/brave/xml/defaults.xml" />
 
 	<appender name="TIME_FILE"

+ 1 - 0
src/main/resources/earliestOrderMonth.json

@@ -0,0 +1 @@
+{"A":0.5,"B":1.5,"C":4,"D":6.5,"E":9,"F":10}

File diff suppressed because it is too large
+ 1 - 0
src/main/resources/millage.json


+ 1 - 0
src/main/resources/totalMile.json

@@ -0,0 +1 @@
+{"A":500,"B":5500,"C":20000,"D":45000,"E":80000,"F":130000,"G":180000,"H":225000,"I":300000,"J":375000,"K":500000,"L":600000}