diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java index c7fff62d..b0925432 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java @@ -66,6 +66,8 @@ public class ApiConst { public static final String ROLL_CHINESE_DICT = "ROLL-汉语字典"; + public static final String ROLL_IDCARD_QUERY = "ROLL-身份证查询"; + //-------------------url------------------------------ @@ -150,9 +152,10 @@ public class ApiConst { */ public static final String ROLL_CHINESE_DICT_URL = "https://www.mxnzp.com/api/convert/dictionary"; - - - + /** + * 接口文档:https://www.mxnzp.com/doc/detail?id=28 + */ + public static final String ROLL_IDCARD_QUERY_URL = "https://www.mxnzp.com/api/idcard/search"; //-----------------------api请求参数常量----------------------------- @@ -184,7 +187,6 @@ public class ApiConst { public static final Integer SPEED_TEST_CODE_SUCCESS = 0; - /** * 高德返回值infocode */ diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java index 25f68776..472ac995 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java @@ -2,6 +2,7 @@ package com.xjs.consts; /** * 正则表达式常量 + * * @author xiejs * @since 2022-01-18 */ @@ -9,6 +10,16 @@ public class RegexConst { /** * 手机号码正则 */ - public static final String MOBILE_REGEX= "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$"; + public static final String MOBILE_REGEX = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$"; + /** + * 18位身份证正则 + */ + public static final String IDCARD_18_REGEX = "^([1-6][1-9]|50)\\d{4}(18|19|20)\\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"; + + + /** + * 15位身份证正则 + */ + public static final String IDCARD_15_REGEX = "^([1-6][1-9]|50)\\d{4}\\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\\d{3}$"; } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java index 8cdd3273..120df19e 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java @@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.regex.Pattern; -import static com.xjs.consts.RegexConst.MOBILE_REGEX; +import static com.xjs.consts.RegexConst.*; /** * api小工具控制器 @@ -117,4 +117,17 @@ public class ApiToolsController { } + @GetMapping("idcardquery/{idcard}") + @ApiOperation("获取身份证信息") + @Log(title = "获取身份证信息") + public R getIdcardQueryApiData(@PathVariable("idcard") String idcard) { + boolean id15 = Pattern.matches(IDCARD_15_REGEX, idcard); + boolean id18 = Pattern.matches(IDCARD_18_REGEX, idcard); + if (id15 || id18) { + return R.ok(apiToolsService.getIdcardQuery(idcard)); + } + return R.fail("请输入正确的身份证号!!!"); + + } + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiIdcardQuery.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiIdcardQuery.java new file mode 100644 index 00000000..e0122c30 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiIdcardQuery.java @@ -0,0 +1,41 @@ +package com.xjs.apitools.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * api身份证查询 + * @author xiejs + * @since 2022-01-20 + */ +@Data +public class ApiIdcardQuery implements Serializable { + + private static final long serialVersionUID = 1L; + + + /** + * 身份证号码 + */ + private String idCardNum; + + + /** + * 身份证所属归属地 + */ + private String address; + + + /** + * 生日 + */ + private String birthday; + + + /** + * 性别 + */ + private String sex; + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java index a462ac79..e10969e6 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java @@ -50,4 +50,10 @@ public class RequestBody { private String content; + /** + * 身份证号码 + */ + private String idcard; + + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollIdcardQueryFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollIdcardQueryFactory.java new file mode 100644 index 00000000..516dbc90 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollIdcardQueryFactory.java @@ -0,0 +1,41 @@ +package com.xjs.apitools.factory.impl; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.apitools.domain.ApiIdcardQuery; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.apitools.factory.ApiToolsFactory; +import com.xjs.common.client.api.roll.RollIdcardQueryFeignClient; +import com.xjs.config.RollProperties; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import static com.xjs.consts.ApiConst.DEMOTE_ERROR; +import static com.xjs.consts.ApiConst.ROLL_CODE_SUCCESS; + +/** + * roll平台获取身份证查询api工厂实现 + * @author xiejs + * @since 2022-01-20 + */ +@Component +@Log4j2 +public class RollIdcardQueryFactory implements ApiToolsFactory { + + @Autowired + private RollProperties rollProperties; + @Autowired + private RollIdcardQueryFeignClient rollIdcardQueryFeignClient; + + @Override + public ApiIdcardQuery apiData(RequestBody req) { + req.setApp_secret(rollProperties.getApp_secret()); + req.setApp_id(rollProperties.getApp_id()); + JSONObject jsonObject = rollIdcardQueryFeignClient.idcardQueryApi(req); + if (!jsonObject.containsKey(DEMOTE_ERROR) && jsonObject.getInteger("code") == ROLL_CODE_SUCCESS.intValue()) { + JSONObject data = jsonObject.getJSONObject("data"); + return data.toJavaObject(ApiIdcardQuery.class); + } + return null; + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java index 992b00c5..b928dbb1 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java @@ -79,5 +79,13 @@ public interface ApiToolsService { ApiChineseDict getChineseDict(String content); + /** + * 获取身份证查询数据 + * @param idcard 身份证号码 + * @return ApiIdcardQuery + */ + ApiIdcardQuery getIdcardQuery(String idcard); + + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java index e0c5709c..709a66dd 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java @@ -48,6 +48,10 @@ public class ApiToolsServiceImpl implements ApiToolsService { @Qualifier("rollChineseDictFactory") private ApiToolsFactory chineseDictFactory; + @Autowired + @Qualifier("rollIdcardQueryFactory") + private ApiToolsFactory idcardQueryFactory; + @Autowired public void setHolidayFactory(RollHolidayFactory rollHolidayFactory) { this.holidayFactory = rollHolidayFactory; @@ -169,4 +173,14 @@ public class ApiToolsServiceImpl implements ApiToolsService { requestBody.setContent(content); return chineseDictFactory.apiData(requestBody); } + + @Override + public ApiIdcardQuery getIdcardQuery(String idcard) { + RequestBody requestBody = new RequestBody(); + requestBody.setIdcard(idcard); + return idcardQueryFactory.apiData(requestBody); + } + + + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollIdcardQueryFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollIdcardQueryFeignClient.java new file mode 100644 index 00000000..a130a9ba --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollIdcardQueryFeignClient.java @@ -0,0 +1,27 @@ +package com.xjs.common.client.api.roll; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.annotation.ApiLog; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.common.client.factory.RollIdcardQueryFeignFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.SpringQueryMap; +import org.springframework.web.bind.annotation.GetMapping; + +import static com.xjs.consts.ApiConst.ROLL_IDCARD_QUERY; +import static com.xjs.consts.ApiConst.ROLL_IDCARD_QUERY_URL; + +/** + * roll身份证查询api接口feign远程调用 + * @author xiejs + * @since 2022-01-20 + */ +@FeignClient(name = "rollIdcardQuery", url = ROLL_IDCARD_QUERY_URL, fallbackFactory = RollIdcardQueryFeignFactory.class) +public interface RollIdcardQueryFeignClient { + + @GetMapping() + @ApiLog(name = ROLL_IDCARD_QUERY, + url = ROLL_IDCARD_QUERY_URL, + method = "Get") + JSONObject idcardQueryApi(@SpringQueryMap RequestBody requestBody); +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIdcardQueryFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIdcardQueryFeignFactory.java new file mode 100644 index 00000000..d679382d --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIdcardQueryFeignFactory.java @@ -0,0 +1,30 @@ +package com.xjs.common.client.factory; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.domain.R; +import com.xjs.common.client.api.roll.RollIdcardQueryFeignClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import static com.xjs.consts.ApiConst.DEMOTE_ERROR; + +/** + * roll身份证查询api接口feign远程调用降级 + * @author xiejs + * @since 2022-01-20 + */ +@Component +@Log4j2 +public class RollIdcardQueryFeignFactory implements FallbackFactory { + + @Override + public RollIdcardQueryFeignClient create(Throwable cause) { + log.error("api模块roll 身份证查询调用失败:{},执行降级处理", cause.getMessage()); + return requestBody -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(DEMOTE_ERROR, R.FAIL); + return jsonObject; + }; + } +}