|
@@ -0,0 +1,220 @@
|
|
|
+package info.aspirecn.cloud.yysj.service.impl;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.elasticsearch.action.search.SearchRequest;
|
|
|
+import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
+import org.elasticsearch.index.query.QueryBuilders;
|
|
|
+import org.elasticsearch.search.SearchHit;
|
|
|
+import org.elasticsearch.search.SearchHits;
|
|
|
+import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
|
+import org.elasticsearch.search.sort.SortOrder;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+
|
|
|
+import info.aspirecn.cloud.yysj.entity.request.IdentityInfoRequest;
|
|
|
+import info.aspirecn.cloud.yysj.entity.request.LivingInfoRequest;
|
|
|
+import info.aspirecn.cloud.yysj.entity.response.IdentityInfoResponse;
|
|
|
+import info.aspirecn.cloud.yysj.entity.response.LivingInfoResponse;
|
|
|
+import info.aspirecn.cloud.yysj.service.EidService;
|
|
|
+import info.aspirecn.cloud.yysj.utils.DateUtil;
|
|
|
+import info.aspirecn.cloud.yysj.utils.ElasticSearchUitls;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class EidServiceImpl implements EidService {
|
|
|
+
|
|
|
+ /** 主订单索引 */
|
|
|
+ @Value("${elasticsearch.firstIndex}")
|
|
|
+ private String firstIndex;
|
|
|
+
|
|
|
+ /** 身份产品编号 */
|
|
|
+ @Value("${product.IdentityProductId}")
|
|
|
+ private String identityProductId;
|
|
|
+
|
|
|
+ /** 活体产品编号 */
|
|
|
+ @Value("${product.LivingProductId}")
|
|
|
+ private String livingProductId;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ElasticSearchUitls elasticSearchUitls;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getIdentityList(String userId,IdentityInfoRequest identityInfoRequest) {
|
|
|
+
|
|
|
+ //数据不能大于1000
|
|
|
+ if((identityInfoRequest.getPageNum() * identityInfoRequest.getPageSize()) > 1000){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 创建 Bool 查询构建器
|
|
|
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
+ // 构建查询条件
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("URI.keyword","/info_check/identity.do"));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("MG-UserId.keyword", userId));
|
|
|
+ if (identityInfoRequest.getReqID()!=null&&!"".equals(identityInfoRequest.getReqID())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.ReqID.keyword", "*"+identityInfoRequest.getReqID()+"*"));
|
|
|
+ }
|
|
|
+ if (identityInfoRequest.getVerificationResult()!=null&&!"".equals(identityInfoRequest.getVerificationResult())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("MG-Consistent.keyword","*"+ identityInfoRequest.getVerificationResult()+"*"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (identityInfoRequest.getStartTime()!=null&&!"".equals(identityInfoRequest.getStartTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").gte(DateUtil.mysqlTime2ESTime(identityInfoRequest.getStartTime())));
|
|
|
+ }
|
|
|
+ if (identityInfoRequest.getEndTime()!=null&&!"".equals(identityInfoRequest.getEndTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").lte(DateUtil.mysqlTime2ESTime(identityInfoRequest.getEndTime())));
|
|
|
+ }
|
|
|
+ // 构建查询源构建器
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ searchSourceBuilder.query(boolQueryBuilder);
|
|
|
+ searchSourceBuilder.sort("DateTime", SortOrder.DESC);
|
|
|
+ searchSourceBuilder.size(1000);
|
|
|
+ //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.ReqID","Check-Reuslt", "DateTime","MG-Consistent"}, null);
|
|
|
+
|
|
|
+ // 创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+
|
|
|
+ // 返回集合
|
|
|
+ List<IdentityInfoResponse> identityInfoResponseList = new ArrayList<IdentityInfoResponse>();
|
|
|
+ //获取数据
|
|
|
+ SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
|
|
|
+ Map<String, Object> map=new HashMap<String, Object>();
|
|
|
+ if (hits == null) {
|
|
|
+ map.put("dataList", identityInfoResponseList);
|
|
|
+ map.put("total", 0);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ //遍历数据, 加上核验结果条件, 计算总数, 分页
|
|
|
+ int total = 0;
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(hit.getSourceAsString());
|
|
|
+ String verificationResult ="";
|
|
|
+ JSONArray reusltJson = jsonObject.getJSONArray("Check-Reuslt");
|
|
|
+ if (reusltJson.size()>0) {
|
|
|
+ for (int i = 0; i < reusltJson.size(); i++) {
|
|
|
+ JSONObject checkResObj = reusltJson.getJSONObject(i);
|
|
|
+ if (identityProductId.equals(checkResObj.getString("productId"))) {
|
|
|
+ verificationResult=checkResObj.getString("result");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ total++;
|
|
|
+ if(total > ((identityInfoRequest.getPageNum()-1) * identityInfoRequest.getPageSize()) && identityInfoResponseList.size() < identityInfoRequest.getPageSize()){
|
|
|
+ JSONObject riJsonObject = jsonObject.getJSONObject("RequestInfo");
|
|
|
+ JSONObject jsonObjectResult =JSONObject.parseObject(verificationResult);
|
|
|
+ String result = jsonObject.getString("MG-Consistent");
|
|
|
+ if (riJsonObject!=null&& !reusltJson.isEmpty()) {
|
|
|
+ IdentityInfoResponse identityInfoResponse=new IdentityInfoResponse();
|
|
|
+ identityInfoResponse.setUserId(userId);
|
|
|
+ identityInfoResponse.setReqId(riJsonObject.getString("ReqID"));
|
|
|
+ identityInfoResponse.setName(jsonObjectResult.getString("Name"));
|
|
|
+ identityInfoResponse.setIdNumber(jsonObjectResult.getString("IdNumber"));
|
|
|
+ identityInfoResponse.setAppeIdCode(jsonObjectResult.getString("AppeIdCode"));
|
|
|
+ identityInfoResponse.setEidVoucher(jsonObjectResult.getString("EidVoucher"));
|
|
|
+ identityInfoResponse.setVerificationResult(result);
|
|
|
+ identityInfoResponse.setSimilarity(jsonObjectResult.getString("Similarity"));
|
|
|
+ identityInfoResponse.setRequestTime(DateUtil.esTime2MySQLTime(jsonObject.getString("DateTime")));
|
|
|
+ identityInfoResponseList.add(identityInfoResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put("dataList", identityInfoResponseList);
|
|
|
+ map.put("total", total);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getLivingList(String userId, LivingInfoRequest livingInfoRequest) {
|
|
|
+
|
|
|
+ //数据不能大于1000
|
|
|
+ if((livingInfoRequest.getPageNum() * livingInfoRequest.getPageSize()) > 1000){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 创建 Bool 查询构建器
|
|
|
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
+ // 构建查询条件
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("URI.keyword","/info_check/living.do"));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("MG-UserId.keyword", userId));
|
|
|
+ if (livingInfoRequest.getReqID()!=null&&!"".equals(livingInfoRequest.getReqID())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.ReqID.keyword", "*"+livingInfoRequest.getReqID()+"*"));
|
|
|
+ }
|
|
|
+ if (livingInfoRequest.getVerificationResult()!=null&&!"".equals(livingInfoRequest.getVerificationResult())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("MG-Consistent.keyword","*"+ livingInfoRequest.getVerificationResult()+"*"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (livingInfoRequest.getStartTime()!=null&&!"".equals(livingInfoRequest.getStartTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").gte(DateUtil.mysqlTime2ESTime(livingInfoRequest.getStartTime())));
|
|
|
+ }
|
|
|
+ if (livingInfoRequest.getEndTime()!=null&&!"".equals(livingInfoRequest.getEndTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").lte(DateUtil.mysqlTime2ESTime(livingInfoRequest.getEndTime())));
|
|
|
+ }
|
|
|
+ // 构建查询源构建器
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ searchSourceBuilder.query(boolQueryBuilder);
|
|
|
+ searchSourceBuilder.sort("DateTime", SortOrder.DESC);
|
|
|
+ searchSourceBuilder.size(1000);
|
|
|
+ //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.AppeIdCode", "RequestInfo.ReqID", "RequestInfo.EidVoucher",
|
|
|
+ "Check-Reuslt", "DateTime","MG-Consistent"}, null);
|
|
|
+
|
|
|
+ // 创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+
|
|
|
+ // 返回集合
|
|
|
+ List<LivingInfoResponse> livingInfoResponseList = new ArrayList<LivingInfoResponse>();
|
|
|
+ //获取数据
|
|
|
+ SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
|
|
|
+ Map<String, Object> map=new HashMap<String, Object>();
|
|
|
+ if (hits == null) {
|
|
|
+ map.put("dataList", livingInfoResponseList);
|
|
|
+ map.put("total", 0);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ //遍历数据, 加上核验结果条件, 计算总数, 分页
|
|
|
+ int total = 0;
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(hit.getSourceAsString());
|
|
|
+ String verificationResult ="";
|
|
|
+ JSONArray reusltJson = jsonObject.getJSONArray("Check-Reuslt");
|
|
|
+ if (reusltJson.size()>0) {
|
|
|
+ for (int i = 0; i < reusltJson.size(); i++) {
|
|
|
+ JSONObject checkResObj = reusltJson.getJSONObject(i);
|
|
|
+ if (livingProductId.equals(checkResObj.getString("productId"))) {
|
|
|
+ verificationResult=checkResObj.getString("result");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ total++;
|
|
|
+ if(total > ((livingInfoRequest.getPageNum()-1) * livingInfoRequest.getPageSize()) && livingInfoResponseList.size() < livingInfoRequest.getPageSize()){
|
|
|
+ JSONObject riJsonObject = jsonObject.getJSONObject("RequestInfo");
|
|
|
+ JSONObject jsonObjectResult =JSONObject.parseObject(verificationResult);
|
|
|
+ String result = jsonObject.getString("MG-Consistent");
|
|
|
+ if (riJsonObject!=null && !reusltJson.isEmpty()) {
|
|
|
+ LivingInfoResponse livingInfoResponse=new LivingInfoResponse();
|
|
|
+ livingInfoResponse.setUserId(userId);
|
|
|
+ livingInfoResponse.setReqId(riJsonObject.getString("ReqID"));
|
|
|
+ livingInfoResponse.setVerificationResult(result);
|
|
|
+ livingInfoResponse.setSimilarity(jsonObjectResult.getString("Similarity"));
|
|
|
+ livingInfoResponse.setRequestTime(DateUtil.esTime2MySQLTime(jsonObject.getString("DateTime")));
|
|
|
+ livingInfoResponseList.add(livingInfoResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put("dataList", livingInfoResponseList);
|
|
|
+ map.put("total", total);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|