Browse Source

增加车辆入网核验接口

15810770710@163.com 3 years ago
parent
commit
3934b0964a

+ 33 - 0
src/main/java/info/aspirecn/iov/sjjh/action/VehicleAction.java

@@ -196,4 +196,37 @@ public class VehicleAction {
         request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
         return ret;
     }
+
+    @ApiOperation(value = "车辆入网核验", notes = "")
+    @PostMapping(value = "/checkVehicleExist.do")
+    public ChannelTypeHandleResponseObject checkVehicleExist(
+            @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) {
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                .getRequest();
+
+        //调用service
+        ChannelTypeHandleResponseObject ret = vehicleService.checkVehicleExist(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if(ret.getCode() != Constant.SUCCESS) {
+            request.setAttribute(Constants.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+        } else {
+            request.setAttribute(Constants.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }
+        request.setAttribute(Constants.Charge_Log_Key, ret.getIsCharge());
+
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(customBody.getBytes(Constants.ENCODING)));
+
+        } catch (Exception ex) {
+            ErrorUtils.captureException(ex);
+            log.error("checkVehicleExist.encodeBase64String.Exception=", ex);
+        }
+
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        return ret;
+    }
 }

+ 1 - 0
src/main/java/info/aspirecn/iov/sjjh/config/SupplierConfig.java

@@ -21,4 +21,5 @@ public class SupplierConfig {
     private String vehicleRoadTransportUrl;
     private String personQualificationUrl;
     private String enterpriseRoadTransportUrl;
+    private String vehicleExistUrl;
 }

+ 5 - 0
src/main/java/info/aspirecn/iov/sjjh/constant/Constants.java

@@ -101,4 +101,9 @@ public class Constants {
     public static final String UN_MATCH_PERMIT_VALID_PERIOD_TO = "道路运输经营许可证有效期至";
 
     public static final int REQUEST_TIMEOUT = -2;
+
+    // 访问次数已达上限
+    public static final int REQUEST_LIMIT = 5;
+
+    public static final String REQUEST_LIMIT_MESSAGE = "访问次数已达上限";
 }

+ 17 - 0
src/main/java/info/aspirecn/iov/sjjh/entity/VehicleExistRequestParam.java

@@ -0,0 +1,17 @@
+package info.aspirecn.iov.sjjh.entity;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+@ToString
+public class VehicleExistRequestParam implements Serializable {
+    private String vehicleNumber;
+    private String licensePlateTypeCode;
+}

+ 17 - 0
src/main/java/info/aspirecn/iov/sjjh/entity/VehicleExistResponse.java

@@ -0,0 +1,17 @@
+package info.aspirecn.iov.sjjh.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+public class VehicleExistResponse {
+    private String resultCode;
+    private String resultMsg;
+    private String traceId;
+    private String data;
+}

+ 10 - 0
src/main/java/info/aspirecn/iov/sjjh/service/VehicleService.java

@@ -46,4 +46,14 @@ public interface VehicleService {
      */
     ChannelTypeHandleResponseObject checkEnterpriseRoadTransport(HttpServletRequest request, String customBody,
                                                               int outTime);
+
+    /**
+     * 车辆入网核验
+     * @param request
+     * @param customBody
+     * @param outTime
+     * @return
+     */
+    ChannelTypeHandleResponseObject checkVehicleExist(HttpServletRequest request, String customBody,
+                                                      int outTime);
 }

+ 96 - 0
src/main/java/info/aspirecn/iov/sjjh/service/impl/VehicleServiceImpl.java

@@ -1002,4 +1002,100 @@ public class VehicleServiceImpl implements VehicleService {
         }
         return upstreamCode;
     }
+
+    @Override
+    public ChannelTypeHandleResponseObject checkVehicleExist(HttpServletRequest request, String customBody, int outTime) {
+        ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+        ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+        ret.setCode(Constant.SUCCESS);
+        String upstreamCode = "" + Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        if (outTime <= Constants.PARA_ZERO) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+
+        log.info("supplier-vehicle.checkVehicleExist---customBody={},outTime={}", customBody, outTime);
+        // 解析参数
+        ObjectMapper objectMapper = new ObjectMapper();
+        VehicleExistRequestParam requestParam;
+        try {
+            requestParam = objectMapper.readValue(customBody, VehicleExistRequestParam.class);
+        } catch (IOException ioe) {
+            log.info("supplier-vehicle.checkVehicleExist-解析参数Exception:", ioe);
+            ErrorUtils.captureException(ioe);
+            ret.setCode(Constant.FAIL);
+            ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            ret.setResultBody(Constant.INVALID_PARAMETER);
+            ret.setResultDesc(Constant.INVALID_PARAMETER);
+            return ret;
+        }
+
+        // 参数校验
+        if (!ValidateParamUtil.validateRequestParams(requestParam)) {
+            ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            ret.setResultBody(Constant.INVALID_PARAMETER);
+            ret.setResultDesc(Constant.INVALID_PARAMETER);
+            return ret;
+        }
+
+        // 接口调用
+        Response response;
+        try {
+            response = PostUtil.postString(supplierConfig.getVehicleExistUrl(), JSON.toJSONString(requestParam),
+                    supplierConfig.getAppKey(), supplierConfig.getAppSecret(), outTime);
+            log.info("supplier-vehicle.checkVehicleExist-responseStatus:{}", response.getStatusCode());
+            log.info("supplier-vehicle.checkVehicleExist-responseBody:{}", response.getBody());
+            if (response.getStatusCode() == Constants.STATUS_CODE_200) {
+                VehicleExistResponse vehicleExistResponse = JSON.toJavaObject(JSON.parseObject(response.getBody()),
+                        VehicleExistResponse.class);
+                upstreamCode = vehicleExistResponse.getResultCode();
+                if (vehicleExistResponse.getResultCode().equals(Constants.RESULT_CODE_0)) {
+                    // 返回数据(0=否;1=是)
+                    if (vehicleExistResponse.getData().equals("1")) {
+                        ret.setResultCode(Constant.MATCH_CODE);
+                        ret.setResultBody(Constant.MATCH);
+                    } else {
+                        ret.setResultCode(Constant.UN_MATCH_CODE);
+                        List<String> resultList = new ArrayList<>();
+                        resultList.add("vehicleNumber");
+                        resultList.add("licensePlateTypeCode");
+                        JSONObject result = new JSONObject();
+                        result.put("resultList", resultList);
+                        ret.setResultBody(result);
+                    }
+                    ret.setIsCharge(Constant.IS_CHARGE);
+                } else if (vehicleExistResponse.getResultCode().equals("110000")) {
+                    // 查询结果为空
+                    ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+                    ret.setResultBody(Constants.NO_RESULT);
+                    ret.setResultDesc(Constants.NO_RESULT);
+                } else if (vehicleExistResponse.getResultCode().equals("111004")
+                        || vehicleExistResponse.getResultCode().equals("119999")) {
+                    // 访问次数已达上限
+                    ret.setResultCode(Constants.REQUEST_LIMIT);
+                    ret.setResultBody(Constants.REQUEST_LIMIT_MESSAGE);
+                    ret.setResultDesc(Constants.REQUEST_LIMIT_MESSAGE);
+                } else {
+                    ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                    ret.setResultBody(Constant.OTHER_ERROR);
+                    ret.setResultDesc(Constant.OTHER_ERROR);
+                }
+            } else {
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        } catch (IOException e) {
+            log.info("supplier-vehicle.checkVehicleExist-IOException:", e);
+            ErrorUtils.captureException(e);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+        } catch (Exception e) {
+            log.info("supplier-vehicle.checkVehicleExist-Exception:", e);
+            ErrorUtils.captureException(e);
+            ret.setCode(Constant.FAIL);
+        }
+
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        return ret;
+    }
 }

+ 15 - 4
src/main/java/info/aspirecn/iov/sjjh/util/ValidateParamUtil.java

@@ -2,10 +2,7 @@ package info.aspirecn.iov.sjjh.util;
 
 import info.aspirecn.iov.sjjh.commons.lang.Constant;
 import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
-import info.aspirecn.iov.sjjh.entity.EnterpriseRoadTransportPermitRequestParam;
-import info.aspirecn.iov.sjjh.entity.PersonQualificationCertificateRequestParam;
-import info.aspirecn.iov.sjjh.entity.VehicleHistoryPositionRequestParam;
-import info.aspirecn.iov.sjjh.entity.VehicleRoadTransportPermitRequestParam;
+import info.aspirecn.iov.sjjh.entity.*;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.validation.ConstraintViolation;
@@ -133,4 +130,18 @@ public class ValidateParamUtil {
         }
         return true;
     }
+
+    public static boolean validateRequestParams(VehicleExistRequestParam requestParam) {
+        if (!validateParamNullValue(requestParam)) {
+            return false;
+        } else if (StringUtils.isBlank(requestParam.getVehicleNumber())
+                || !PatternTools.checkResult(Constant.PATTERN_CAR_NUMBER_REGEX, requestParam.getVehicleNumber())) {
+            return false;
+        } else if (StringUtils.isBlank(requestParam.getLicensePlateTypeCode())
+                || (!requestParam.getLicensePlateTypeCode().equals("1") && !requestParam.getLicensePlateTypeCode().equals("2"))) {
+            return false;
+        } else {
+            return true;
+        }
+    }
 }

+ 2 - 1
src/main/resources/config/application-dev.yml

@@ -75,7 +75,7 @@ supplier:
   appKey: 3AA555152F3299F6A37C66C074DEF14D
   appSecret: A84A975F4C324E20659CB340735DA894
   historyPositionUrl: https://gateway.logink.cn/gps/getHistoryPosition
-  partyFunctionCode: logink
+  partyFunctionCode: beids
   addHours: 4
   reduceHours: -4
   baiduUrl: http://api.map.baidu.com/reverse_geocoding/v3/
@@ -83,5 +83,6 @@ supplier:
   vehicleRoadTransportUrl: http://219.143.235.120:9090/roadTransportation/vehicleInfo/api/yy
   personQualificationUrl: http://219.143.235.120:9090/roadTransportation/staffInfo/api/yy
   enterpriseRoadTransportUrl: http://219.143.235.120:9090/roadTransportation/ownerInfo/api/yy
+  vehicleExistUrl: https://gateway.logink.cn/credit/vehicleQuery/checkVehicleExist
 swagger:
   show: true