Browse Source

增加身份证有效期接口

15810770710@163.com 3 years ago
parent
commit
123ef7567a

+ 31 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/action/ChannelAction.java

@@ -304,4 +304,35 @@ public class ChannelAction {
         request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
         return ret;
     }
+
+    @ApiOperation(value = "身份证有效期", notes = "")
+    @PostMapping(value = "/idCardValidityCheck.do")
+    public ChannelTypeHandleResponseObject idCardValidityCheck(
+            @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();
+
+        ChannelTypeHandleResponseObject ret = channelService.idCardValidityCheck(request, customBody, outTime, SjjhConstant.DECODE_TYPE_WEIZHONG);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if (ret.getCode() != Constant.SUCCESS) {
+            request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+        } else {
+            request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }
+        request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+        } catch (Exception ex) {
+            ErrorUtils.captureException(ex);
+            log.error("twoElementsCheckNew.encodeBase64String.Exception={}", ex);
+        }
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        return ret;
+    }
 }

+ 12 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/constant/SjjhConstant.java

@@ -62,4 +62,16 @@ public class SjjhConstant {
     public static final String DECODE_TYPE_MD5 = "MD5";
 
     public static final String DECODE_TYPE_SHA256 = "SHA256";
+
+    public static final String ID_CARD_VALIDITY_CHECK = "idCardValidityCheck";
+
+    // 身份证有效期计费码
+    public static final String[] ID_CARD_VALIDITY_CHARGE_CODE = {"0XXX", "5XXX"};
+
+    // 库中无最新有效期
+    public static final String ID_CARD_VALIDITY_5XXX_1 = "用户信息中的有效期新数据不在库内";
+
+    // 二要素不一致或库无
+    public static final String ID_CARD_VALIDITY_5XXX_2 = "用户信息输错或整个用户信息都不在库内";
+
 }

+ 20 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/model/IdCardValidityParamObject.java

@@ -0,0 +1,20 @@
+package info.aspirecn.iov.sjjh.supplier10000044.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class IdCardValidityParamObject {
+    private String accessToken;
+    private String idNum;
+    private String fullName;
+}

+ 14 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/model/IdCardValidityRequestObject.java

@@ -0,0 +1,14 @@
+package info.aspirecn.iov.sjjh.supplier10000044.model;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+@ToString
+public class IdCardValidityRequestObject extends TwoElementsRequestObject{
+}

+ 35 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/model/IdCardValidityResponseObject.java

@@ -0,0 +1,35 @@
+package info.aspirecn.iov.sjjh.supplier10000044.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@ToString
+@Data
+public class IdCardValidityResponseObject {
+    private String retCode;
+    private String retMessage;
+    private String detailMessage;
+    private Data data;
+
+    @lombok.Data
+    @ToString
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class Data {
+        private String idNum;
+        private String fullName;
+        private String isStartDate;
+        private String isEndDate;
+        private String friStartDate;
+        private String friEndDate;
+        private String resStr;
+        private String resMessage;
+    }
+
+}

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

@@ -51,5 +51,15 @@ public interface ChannelService {
      */
     ChannelTypeHandleResponseObject photoIdentityCheckNew(HttpServletRequest request, String customBody, int outTime, String decodeType);
 
+    /**
+     * 身份证有效期
+     * @param request
+     * @param customBody
+     * @param outTime
+     * @param decodeType
+     * @return
+     */
+    ChannelTypeHandleResponseObject idCardValidityCheck(HttpServletRequest request, String customBody, int outTime, String decodeType);
+
     String queryAccessToken(int outTime);
 }

+ 173 - 4
src/main/java/info/aspirecn/iov/sjjh/supplier10000044/service/ChannelServiceImpl.java

@@ -61,6 +61,8 @@ public class ChannelServiceImpl implements ChannelService {
     private String decodeAppKey;
     @Value("${supplier.decodeAppSecret}")
     private String decodeAppSecret;
+    @Value("${supplier.idCardValidityUrl}")
+    private String idCardValidityUrl;
 
     @Autowired
     StringRedisTemplate stringRedisTemplate;
@@ -206,10 +208,9 @@ public class ChannelServiceImpl implements ChannelService {
         PhotoIdentityParamObject logParamObject = PhotoIdentityParamObject.getLogParamObject(accessToken, requestObject.getIdCode(),
                 requestObject.getName(), authMode42);
         log.info("supplier10000044.photoIdentityCheck接口请求上游参数:{}", JSON.toJSONString(logParamObject));
-//        String responseContext = callService(paramObject, outTime, SjjhConstant.PHOTO_IDENTITY_CHECK, ret);
+        String responseContext = callService(paramObject, outTime, SjjhConstant.PHOTO_IDENTITY_CHECK, ret);
 
-        // todo
-        String responseContext = "{\"retCode\":0,\"retMessage\":\"成功\",\"apiVersion\":\"3.3.0\",\"certToken\":\"98cec673-a969-462a-b154-47b56b887fcb\",\"resStr\":\"02XX\"}";
+//        String responseContext = "{\"retCode\":0,\"retMessage\":\"成功\",\"apiVersion\":\"3.3.0\",\"certToken\":\"98cec673-a969-462a-b154-47b56b887fcb\",\"resStr\":\"02XX\"}";
         log.info("supplier10000044.{}接口上游返回:{}", SjjhConstant.PHOTO_IDENTITY_CHECK, responseContext);
         if (StringUtils.isBlank(responseContext)) {
             return null;
@@ -233,7 +234,13 @@ public class ChannelServiceImpl implements ChannelService {
             MediaType mediaType = MediaType.parse(org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE);
             RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
 
-            Request okRequest = new Request.Builder().post(requestBody).url(url).build();
+            Request okRequest;
+            if (method.equals(SjjhConstant.ID_CARD_VALIDITY_CHECK)) {
+                okRequest = new Request.Builder().post(requestBody).url(idCardValidityUrl).build();
+            } else {
+                okRequest = new Request.Builder().post(requestBody).url(url).build();
+            }
+
             OkHttpClient client = okHttpClient.newBuilder()
                     .connectTimeout(outTime, TimeUnit.MILLISECONDS)
                     .readTimeout(outTime, TimeUnit.MILLISECONDS)
@@ -960,4 +967,166 @@ public class ChannelServiceImpl implements ChannelService {
             return null;
         }
     }
+
+    @Override
+    public ChannelTypeHandleResponseObject idCardValidityCheck(HttpServletRequest request, String customBody, int outTime, String decodeType) {
+        ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+        ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+        String upstreamCode = "" + Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+        if (StringUtils.isBlank(returnType)) {
+            returnType = Constant.CUSTOMER_RETURN_ZW;
+        }
+        if (outTime <= SjjhConstant.PARA_ZERO) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        log.info("supplier10000044.idCardValidityCheck---customBody={},outTime={}", customBody, outTime);
+        IdCardValidityRequestObject requestObject = new IdCardValidityRequestObject();
+        try {
+            requestObject = objectMapper.readValue(customBody,
+                    IdCardValidityRequestObject.class);
+        } catch (Exception e) {
+            log.info("supplier10000044.接口-Exception:", e);
+            ErrorUtils.captureException(e);
+            ret.setCode(Constant.FAIL);
+        }
+
+        log.info("supplier10000044.idCardValidityCheck---requestObject={}", requestObject);
+        // 参数校验
+        if (!validateRequestParams(ret, returnType, requestObject)) {
+            ret.setCode(Constant.SUCCESS);
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+            return ret;
+        }
+
+        try {
+            String accessToken = getAccessToken(outTime);
+            IdCardValidityResponseObject responseObject = getIdCardValidityResponseObject(requestObject, outTime, accessToken, ret);
+            if (responseObject != null && responseObject.getRetCode().equals(SjjhConstant.RESPONSE_CODE_4022)) {
+                accessToken = queryAccessToken(outTime);
+                responseObject = getIdCardValidityResponseObject(requestObject, outTime, accessToken, ret);
+            }
+
+            if (responseObject != null) {
+                ret.setCode(Constant.SUCCESS);
+                upstreamCode = setIdCardValidityResponseObject(ret, returnType, responseObject);
+            }
+        } catch (Exception ioe) {
+            log.info("supplier10000044.接口-Exception:", ioe);
+            ErrorUtils.captureException(ioe);
+            ret.setCode(Constant.FAIL);
+        }
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        return ret;
+    }
+
+    private IdCardValidityResponseObject getIdCardValidityResponseObject(IdCardValidityRequestObject requestObject, int outTime, String accessToken, ChannelTypeHandleResponseObject ret) {
+        IdCardValidityParamObject paramObject = new IdCardValidityParamObject(accessToken, requestObject.getIdCode(), requestObject.getName());
+        log.info("supplier10000044.idCardValidityCheck接口请求上游参数:{}", JSON.toJSONString(paramObject));
+        String responseContext = callService(paramObject, outTime, SjjhConstant.ID_CARD_VALIDITY_CHECK, ret);
+        log.info("supplier10000044.{}接口上游返回:{}", SjjhConstant.ID_CARD_VALIDITY_CHECK, responseContext);
+        if (StringUtils.isBlank(responseContext)) {
+            return null;
+        }
+        try {
+            IdCardValidityResponseObject responseObject = objectMapper.readValue(responseContext,
+                    IdCardValidityResponseObject.class);
+            return responseObject;
+        } catch (Exception e) {
+            log.info("supplier10000044.{}-getIdCardValidityResponseObject接口-Exception:{}", SjjhConstant.ID_CARD_VALIDITY_CHECK, e);
+            ErrorUtils.captureException(e);
+            ret.setCode(Constant.FAIL);
+            return null;
+        }
+    }
+
+    private String setIdCardValidityResponseObject(ChannelTypeHandleResponseObject ret, String returnType,
+                                                 IdCardValidityResponseObject responseObject) {
+        String retCode = responseObject.getRetCode();
+        String resStr = "";
+        String upstreamCode = retCode;
+        if (retCode.equals(SjjhConstant.RET_CODE_0)) {
+            resStr = responseObject.getData().getResStr();
+            upstreamCode = retCode + "-" + resStr;
+        }
+
+        boolean isCharge = retCode .equals(SjjhConstant.RET_CODE_0)
+                && ArrayUtils.contains(SjjhConstant.ID_CARD_VALIDITY_CHARGE_CODE, resStr);
+        if (isCharge) {
+            ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+        }
+
+        if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+            if (responseObject.getRetCode() != null && responseObject.getRetCode().equals(SjjhConstant.RESPONSE_CODE_4002)) {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else if (!retCode.equals(SjjhConstant.RET_CODE_0)) {
+                // 查询错误
+                ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            } else if (resStr.equals(SjjhConstant.RESPONSE_CODE_0XXX)) {
+                // 身份信息有效
+                JSONObject resultBody = new JSONObject();
+                resultBody.put("startDate", responseObject.getData().getFriStartDate());
+                resultBody.put("endDate", responseObject.getData().getFriEndDate());
+                ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+                ret.setResultBody(resultBody);
+                ret.setResultDesc(Constant.MATCH);
+            } else if (resStr.equals(SjjhConstant.RESPONSE_CODE_5XXX)) {
+                if (responseObject.getData().getResMessage().equals(SjjhConstant.ID_CARD_VALIDITY_5XXX_2)) {
+                    ret.setResultCode(Constant.JK_RETURN_CODE_1189);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_136);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_136);
+                } else {
+                    ret.setResultCode(Constant.JK_RETURN_CODE_1188);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_135);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_135);
+                }
+            } else {
+                // 查询错误
+                ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        } else {
+            if (responseObject.getRetCode() != null && responseObject.getRetCode().equals(SjjhConstant.RESPONSE_CODE_4002)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else if (!retCode.equals(SjjhConstant.RET_CODE_0)) {
+                // 查询错误
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            } else if (resStr.equals(SjjhConstant.RESPONSE_CODE_0XXX)) {
+                // 身份信息有效
+                JSONObject resultBody = new JSONObject();
+                resultBody.put("startDate", responseObject.getData().getFriStartDate());
+                resultBody.put("endDate", responseObject.getData().getFriEndDate());
+                ret.setResultCode(Constant.MATCH_CODE);
+                ret.setResultBody(resultBody);
+                ret.setResultDesc(Constant.MATCH);
+            } else if (resStr.equals(SjjhConstant.RESPONSE_CODE_5XXX)) {
+                // 身份信息无效
+                if (responseObject.getData().getResMessage().equals(SjjhConstant.ID_CARD_VALIDITY_5XXX_2)) {
+                    ret.setResultCode(Constant.ZW_RETURN_CODE_136);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_136);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_136);
+                } else {
+                    ret.setResultCode(Constant.ZW_RETURN_CODE_135);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_135);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_135);
+                }
+            } else {
+                // 查询错误
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        }
+        return upstreamCode;
+    }
 }