|
@@ -0,0 +1,200 @@
|
|
|
+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.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+
|
|
|
+import info.aspirecn.cloud.yysj.entity.Driver;
|
|
|
+import info.aspirecn.cloud.yysj.entity.request.DriverInfoRequest;
|
|
|
+import info.aspirecn.cloud.yysj.entity.response.DriverInfoDetailsResponse;
|
|
|
+import info.aspirecn.cloud.yysj.entity.response.DriverInfoResponse;
|
|
|
+import info.aspirecn.cloud.yysj.service.DriverService;
|
|
|
+import info.aspirecn.cloud.yysj.utils.DateUtil;
|
|
|
+import info.aspirecn.cloud.yysj.utils.ElasticSearchUitls;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class DriverServiceImpl implements DriverService {
|
|
|
+
|
|
|
+ /** 主订单索引 */
|
|
|
+ @Value("${elasticsearch.firstIndex}")
|
|
|
+ private String firstIndex;
|
|
|
+
|
|
|
+ /** 驾驶证核验产品编号 */
|
|
|
+ @Value("${product.driverLicenseNumberProductId}")
|
|
|
+ private String driverLicenseNumberProductId;
|
|
|
+
|
|
|
+ /** 从业资格证核验产品编号 */
|
|
|
+ @Value("${product.qualificationCertificateProductId}")
|
|
|
+ private String qualificationCertificateProductId;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ElasticSearchUitls elasticSearchUitls;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getDriverList(String userId,DriverInfoRequest driverInfoRequest) {
|
|
|
+ log.info("司机列表查询请求参数:{}",JSON.toJSON(driverInfoRequest));
|
|
|
+
|
|
|
+ //数据不能大于1000
|
|
|
+ if((driverInfoRequest.getPageNum() * driverInfoRequest.getPageSize()) > 1000){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 创建 Bool 查询构建器
|
|
|
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
+ // 构建查询条件
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("URI.keyword","/info_check/driverInfo.do"));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("MG-UserId.keyword", userId));
|
|
|
+ if (driverInfoRequest.getDriverName()!=null&&!"".equals(driverInfoRequest.getDriverName())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.DriverName.keyword", "*"+driverInfoRequest.getDriverName()+"*"));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getDrivingLicense()!=null&&!"".equals(driverInfoRequest.getDrivingLicense())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.DrivingLicense.keyword", "*"+driverInfoRequest.getDrivingLicense()+"*"));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getDriverLicenseNumber()!=null&&!"".equals(driverInfoRequest.getDriverLicenseNumber())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.DriverLicenseNumber.keyword","*"+driverInfoRequest.getDriverLicenseNumber()+"*"));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getQualificationCertificate()!=null&&!"".equals(driverInfoRequest.getQualificationCertificate())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.QualificationCertificate.keyword", "*"+driverInfoRequest.getQualificationCertificate()+"*"));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getDriveCardResult()!=null&&!"".equals(driverInfoRequest.getDriveCardResult())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",driverInfoRequest.getDriveCardResult()));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",driverLicenseNumberProductId));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getQualificationCardResult()!=null&&!"".equals(driverInfoRequest.getQualificationCardResult())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",driverInfoRequest.getQualificationCardResult()));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",qualificationCertificateProductId));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getStartTime()!=null&&!"".equals(driverInfoRequest.getStartTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").gte(driverInfoRequest.getStartTime()+"T00:00:00.000+0800"));
|
|
|
+ }
|
|
|
+ if (driverInfoRequest.getEndTime()!=null&&!"".equals(driverInfoRequest.getEndTime())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.rangeQuery("DateTime").lte(driverInfoRequest.getEndTime()+"T23:59:59.000+0800"));
|
|
|
+ }
|
|
|
+ // 构建查询源构建器
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ searchSourceBuilder.query(boolQueryBuilder);
|
|
|
+ searchSourceBuilder.sort("DateTime", SortOrder.DESC);
|
|
|
+ searchSourceBuilder.size(1000);
|
|
|
+ //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.DriverName", "RequestInfo.DrivingLicense", "RequestInfo.DriverLicenseNumber",
|
|
|
+ "Check-Reuslt", "DateTime","RequestInfo.QualificationCertificate"}, null);
|
|
|
+
|
|
|
+ // 创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+
|
|
|
+ // 返回集合
|
|
|
+ List<DriverInfoResponse> driverInfoResponsesList = new ArrayList<DriverInfoResponse>();
|
|
|
+ //获取数据
|
|
|
+ SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
|
|
|
+ Map<String, Object> map=new HashMap<String, Object>();
|
|
|
+ if (hits == null) {
|
|
|
+ map.put("dataList", driverInfoResponsesList);
|
|
|
+ map.put("total", 0);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ //遍历数据, 加上核验结果条件, 计算总数, 分页
|
|
|
+ int total = 0;
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(hit.getSourceAsString());
|
|
|
+ String drivingLicenseCheckRes = "";
|
|
|
+ String driverLicenseNumberCheckRes= "";
|
|
|
+ String qualificationCertificateCheckRes ="";
|
|
|
+ JSONArray reusltJson = jsonObject.getJSONArray("Check-Reuslt");
|
|
|
+ if (reusltJson.size()>0) {
|
|
|
+ for (int i = 0; i < reusltJson.size(); i++) {
|
|
|
+ JSONObject checkResObj = reusltJson.getJSONObject(i);
|
|
|
+ if (driverLicenseNumberProductId.equals(checkResObj.getString("productId"))) {
|
|
|
+ driverLicenseNumberCheckRes=checkResObj.getString("result");
|
|
|
+ }
|
|
|
+ if (qualificationCertificateProductId.equals(checkResObj.getString("productId"))) {
|
|
|
+ qualificationCertificateCheckRes=checkResObj.getString("result");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(driverInfoRequest.getDriveCardResult() != null
|
|
|
+ && !"".equals(driverInfoRequest.getDriveCardResult())
|
|
|
+ && !driverInfoRequest.getDriveCardResult().equals(driverLicenseNumberCheckRes)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(driverInfoRequest.getQualificationCardResult() != null
|
|
|
+ && !"".equals(driverInfoRequest.getQualificationCardResult())
|
|
|
+ && !driverInfoRequest.getQualificationCardResult().equals(qualificationCertificateCheckRes)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ total++;
|
|
|
+ if(total > ((driverInfoRequest.getPageNum()-1) * driverInfoRequest.getPageSize()) && driverInfoResponsesList.size() < driverInfoRequest.getPageSize()){
|
|
|
+ JSONObject riJsonObject = jsonObject.getJSONObject("RequestInfo");
|
|
|
+ if (riJsonObject!=null) {
|
|
|
+ DriverInfoResponse driverInfoResponse=new DriverInfoResponse();
|
|
|
+ driverInfoResponse.setUserId(userId);
|
|
|
+ driverInfoResponse.setDriverName(riJsonObject.getString("DriverName"));
|
|
|
+ driverInfoResponse.setDrivingLicense(riJsonObject.getString("DrivingLicense"));
|
|
|
+ driverInfoResponse.setDriverLicenseNumber(riJsonObject.getString("DriverLicenseNumber"));
|
|
|
+ driverInfoResponse.setQualificationCertificate(riJsonObject.getString("QualificationCertificate"));
|
|
|
+ driverInfoResponse.setIdCardResult(drivingLicenseCheckRes);
|
|
|
+ driverInfoResponse.setDriveCardResult(driverLicenseNumberCheckRes);
|
|
|
+ driverInfoResponse.setQualificationCardResult(qualificationCertificateCheckRes);
|
|
|
+ driverInfoResponse.setRequestTime(DateUtil.esTime2MySQLTime(jsonObject.getString("DateTime")));
|
|
|
+ driverInfoResponsesList.add(driverInfoResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("司机列表返回结果:{}",JSON.toJSON(driverInfoResponsesList));
|
|
|
+ map.put("dataList", driverInfoResponsesList);
|
|
|
+ map.put("total", total);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DriverInfoDetailsResponse getDriverDetails(String userId, String driverName, String drivingLicense) {
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ // 构建查询条件
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.DriverName", "RequestInfo.DrivingLicense", "RequestInfo.DriverLicenseNumber",
|
|
|
+ "RequestInfo.VehicleClass","RequestInfo.IssuingOrganizations","RequestInfo.ValidPeriodFrom","RequestInfo.ValidPeriodTo",
|
|
|
+ "RequestInfo.QualificationCertificate","RequestInfo.Telephone","RequestInfo.Remark",}, null);
|
|
|
+
|
|
|
+ searchSourceBuilder.query(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery("DateTime").gte("now/M"))
|
|
|
+ .must(QueryBuilders.termQuery("URI.keyword", "/info_check/driverInfo.do"))
|
|
|
+ .must(QueryBuilders.termQuery("RequestInfo.DriverName.keyword", driverName))
|
|
|
+ .must(QueryBuilders.termQuery("RequestInfo.DrivingLicense.keyword", drivingLicense))
|
|
|
+ .must(QueryBuilders.termQuery("MG-UserId.keyword", userId)));
|
|
|
+
|
|
|
+ // 创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+ // 将相应 JSON 结果转换成对象
|
|
|
+ List<Driver> driverList = elasticSearchUitls.getResult(searchRequest, Driver.class);
|
|
|
+ DriverInfoDetailsResponse dResponse=new DriverInfoDetailsResponse();
|
|
|
+ for (Driver driver : driverList) {
|
|
|
+ dResponse.setDriverName(driver.getRequestInfo().getDriverName());
|
|
|
+ dResponse.setDrivingLicense(driver.getRequestInfo().getDrivingLicense());
|
|
|
+ dResponse.setDriverLicenseNumber(driver.getRequestInfo().getDriverLicenseNumber());
|
|
|
+ dResponse.setVehicleClass(driver.getRequestInfo().getVehicleClass());
|
|
|
+ dResponse.setIssuingOrganizations(driver.getRequestInfo().getIssuingOrganizations());
|
|
|
+ dResponse.setValidPeriodFrom(driver.getRequestInfo().getValidPeriodFrom());
|
|
|
+ dResponse.setValidPeriodTo(driver.getRequestInfo().getValidPeriodTo());
|
|
|
+ dResponse.setQualificationCertificate(driver.getRequestInfo().getQualificationCertificate());
|
|
|
+ dResponse.setTelephone(driver.getRequestInfo().getTelephone());
|
|
|
+ }
|
|
|
+ log.info("----getDriverDetails{}----"+dResponse);
|
|
|
+ return dResponse;
|
|
|
+ }
|
|
|
+}
|