123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- 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;
- }
- }
|