|
@@ -0,0 +1,232 @@
|
|
|
+package info.aspirecn.cloud.yysj.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import info.aspirecn.cloud.yysj.config.TypeCode2Name;
|
|
|
+import info.aspirecn.cloud.yysj.entity.Car;
|
|
|
+import info.aspirecn.cloud.yysj.entity.CarInfo;
|
|
|
+import info.aspirecn.cloud.yysj.entity.CarQueryParam;
|
|
|
+import info.aspirecn.cloud.yysj.service.CarSercice;
|
|
|
+import info.aspirecn.cloud.yysj.utils.Constant;
|
|
|
+import info.aspirecn.cloud.yysj.utils.DateUtil;
|
|
|
+import info.aspirecn.cloud.yysj.utils.ElasticSearchUitls;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+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 java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Email:lixinxu@aspirecn.com
|
|
|
+ * Descrption:
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class CarSerciceImpl implements CarSercice {
|
|
|
+
|
|
|
+ /** 主订单索引 */
|
|
|
+ @Value("${elasticsearch.firstIndex}")
|
|
|
+ private String firstIndex;
|
|
|
+
|
|
|
+ /** 子订单索引 */
|
|
|
+ @Value("${elasticsearch.secondIndex}")
|
|
|
+ private String secondIndex;
|
|
|
+
|
|
|
+ /** 车辆行驶证验证产品编号 */
|
|
|
+ @Value("${product.drivingLicenseCheckProductId}")
|
|
|
+ private String drivingLicenseCheckProductId;
|
|
|
+
|
|
|
+ /** 车辆运输许可证验证产品编号 */
|
|
|
+ @Value("${product.transportationLicenseCheckProductId}")
|
|
|
+ private String transportationLicenseCheckProductId;
|
|
|
+
|
|
|
+ /** 车辆入网验证产品编号 */
|
|
|
+ @Value("${product.carIntoTheNetCheckProductId}")
|
|
|
+ private String carIntoTheNetCheckProductId;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ElasticSearchUitls elasticSearchUitls;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ObjectMapper objectMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TypeCode2Name typeCode2Name;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询车辆列表
|
|
|
+ *
|
|
|
+ * @param carQueryParam
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> queryCarList(CarQueryParam carQueryParam) {
|
|
|
+
|
|
|
+ //数据深度不能大于1000条
|
|
|
+ if((carQueryParam.getPageNum() * carQueryParam.getPageSize()) > 1000){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 创建 Bool 查询构建器
|
|
|
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
+ // 构建查询条件
|
|
|
+ if(carQueryParam.getUserId() != null && !"".equals(carQueryParam.getUserId())){
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("MG-UserId.keyword",carQueryParam.getUserId()));
|
|
|
+ }
|
|
|
+ if(carQueryParam.getCarNum() != null && !"".equals(carQueryParam.getCarNum())){
|
|
|
+ boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.VehicleNumber.keyword","*"+carQueryParam.getCarNum()+"*"));
|
|
|
+ }
|
|
|
+ if(carQueryParam.getCarNumColor() != null && !"".equals(carQueryParam.getCarNumColor())){
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("RequestInfo.VehiclePlateColorCode.keyword",carQueryParam.getCarNumColor()));
|
|
|
+ }
|
|
|
+ if (carQueryParam.getDrivingLicenseCheck()!= null && !"".equals(carQueryParam.getDrivingLicenseCheck())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",carQueryParam.getDrivingLicenseCheck()));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",drivingLicenseCheckProductId));
|
|
|
+ }
|
|
|
+ if (carQueryParam.getTransportationLicenseCheck()!= null && !"".equals(carQueryParam.getTransportationLicenseCheck())) {
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",carQueryParam.getTransportationLicenseCheck()));
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",transportationLicenseCheckProductId));
|
|
|
+ }
|
|
|
+ boolQueryBuilder.must(QueryBuilders.termsQuery("URI.keyword","/info_check/carInfo.do"));
|
|
|
+ boolQueryBuilder.filter().add(QueryBuilders.rangeQuery("DateTime")
|
|
|
+ .gte(carQueryParam.getBeginTime()).lte(carQueryParam.getEndTime()));
|
|
|
+
|
|
|
+ // 构建查询源构建器
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ searchSourceBuilder.query(boolQueryBuilder);
|
|
|
+ searchSourceBuilder.sort("DateTime", SortOrder.DESC);
|
|
|
+ searchSourceBuilder.size(1000);
|
|
|
+
|
|
|
+ //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.VehicleNumber", "RequestInfo.VehiclePlateColorCode",
|
|
|
+ "RequestInfo.VehicleType", "DateTime", "Check-Reuslt"}, null);
|
|
|
+
|
|
|
+ // 创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+
|
|
|
+
|
|
|
+ // 返回集合
|
|
|
+ Map<String, Object> resultMap = new HashMap<String, Object>();
|
|
|
+ List<Car> carList = new ArrayList<Car>();
|
|
|
+ int total = 0;
|
|
|
+
|
|
|
+ //获取数据
|
|
|
+ SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
|
|
|
+ if(hits == null){
|
|
|
+ resultMap.put(Constant.DATA_LIST, carList);
|
|
|
+ resultMap.put(Constant.TOTAL, 0);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ //遍历数据, 加上核验结果条件, 计算总数, 分页
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ String json = hit.getSourceAsString();
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(json);
|
|
|
+
|
|
|
+ //获取核验结果
|
|
|
+ String drivingLicenseCheck = "";
|
|
|
+ String transportationLicenseCheck = "";
|
|
|
+ String carIntoTheNetCheck = "";
|
|
|
+
|
|
|
+ JSONArray checkResjsonArray = jsonObject.getJSONArray("Check-Reuslt");
|
|
|
+ for(int i=0; i < checkResjsonArray.size(); i++){
|
|
|
+ JSONObject checkResObj = checkResjsonArray.getJSONObject(i);
|
|
|
+ if(drivingLicenseCheckProductId.equals(checkResObj.getString("productId"))){
|
|
|
+ drivingLicenseCheck = checkResObj.getString("result");
|
|
|
+ } else if(transportationLicenseCheckProductId.equals(checkResObj.getString("productId"))){
|
|
|
+ transportationLicenseCheck = checkResObj.getString("result");
|
|
|
+ } else if(carIntoTheNetCheckProductId.equals(checkResObj.getString("productId"))){
|
|
|
+ carIntoTheNetCheck = checkResObj.getString("result");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断核验结果
|
|
|
+ if(carQueryParam.getDrivingLicenseCheck() != null
|
|
|
+ && !"".equals(carQueryParam.getDrivingLicenseCheck())
|
|
|
+ && !carQueryParam.getDrivingLicenseCheck().equals(drivingLicenseCheck)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(carQueryParam.getTransportationLicenseCheck() != null
|
|
|
+ && !"".equals(carQueryParam.getTransportationLicenseCheck())
|
|
|
+ && !carQueryParam.getTransportationLicenseCheck().equals(transportationLicenseCheck)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(carQueryParam.getCarIntoTheNetCheck() != null
|
|
|
+ && !"".equals(carQueryParam.getCarIntoTheNetCheck())
|
|
|
+ && !carQueryParam.getCarIntoTheNetCheck().equals(carIntoTheNetCheck)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ total++;
|
|
|
+
|
|
|
+ if(total > ((carQueryParam.getPageNum()-1) * carQueryParam.getPageSize()) && carList.size() < carQueryParam.getPageSize()){
|
|
|
+ Car car = new Car();
|
|
|
+ car.setId(hit.getId());
|
|
|
+ JSONObject riJsonObject = jsonObject.getJSONObject("RequestInfo");
|
|
|
+ if (riJsonObject!=null) {
|
|
|
+ car.setCarNum(riJsonObject.getString("VehicleNumber"));
|
|
|
+ car.setCarNumColor(riJsonObject.getString("VehiclePlateColorCode"));
|
|
|
+ car.setCarType(typeCode2Name.carTypeCode2Name(riJsonObject.getString("VehicleType")));
|
|
|
+ }
|
|
|
+ car.setRequestTime(DateUtil.esTime2MySQLTime(jsonObject.getString("DateTime")));
|
|
|
+ car.setDrivingLicenseCheck(drivingLicenseCheck);
|
|
|
+ car.setTransportationLicenseCheck(transportationLicenseCheck);
|
|
|
+ car.setCarIntoTheNetCheck(carIntoTheNetCheck);
|
|
|
+ carList.add(car);
|
|
|
+ log.debug("车辆信息:{}", car);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultMap.put(Constant.DATA_LIST, carList);
|
|
|
+ resultMap.put(Constant.TOTAL, total);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询车辆详情
|
|
|
+ *
|
|
|
+ * @param carId
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public CarInfo queryCarInfo(String carId) {
|
|
|
+
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ //搜索方式 根据id查询
|
|
|
+ searchSourceBuilder.query(QueryBuilders.termsQuery("_id",carId));
|
|
|
+ //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
|
|
|
+ searchSourceBuilder.fetchSource(new String[]{"RequestInfo.VehicleNumber", "RequestInfo.VehiclePlateColorCode",
|
|
|
+ "RequestInfo.VehicleType","RequestInfo.Owner", "RequestInfo.UseCharacter",
|
|
|
+ "RequestInfo.VIN", "RequestInfo.IssuingOrganizations", "RequestInfo.RegisterDate",
|
|
|
+ "RequestInfo.IssueDate", "RequestInfo.VehicleEnergyType", "RequestInfo.VehicleTonnage",
|
|
|
+ "RequestInfo.GrossMass", "RequestInfo.RoadTransportCertificateNumber"},null);
|
|
|
+ //创建查询请求对象,将查询对象配置到其中
|
|
|
+ SearchRequest searchRequest = new SearchRequest(firstIndex);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+ searchSourceBuilder.size(1);
|
|
|
+
|
|
|
+ //获取数据
|
|
|
+ SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
|
|
|
+ CarInfo carInfo = new CarInfo();
|
|
|
+ if(hits != null){
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ String json = hit.getSourceAsString();
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(json);
|
|
|
+ String resStr = jsonObject.getString("RequestInfo");
|
|
|
+ try {
|
|
|
+ carInfo = objectMapper.readValue(resStr, CarInfo.class);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return carInfo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return carInfo;
|
|
|
+ }
|
|
|
+}
|