CarSerciceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package info.aspirecn.cloud.yysj.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import info.aspirecn.cloud.yysj.config.TypeCode2Name;
  7. import info.aspirecn.cloud.yysj.entity.Car;
  8. import info.aspirecn.cloud.yysj.entity.CarInfo;
  9. import info.aspirecn.cloud.yysj.entity.CarQueryParam;
  10. import info.aspirecn.cloud.yysj.service.CarSercice;
  11. import info.aspirecn.cloud.yysj.utils.Constant;
  12. import info.aspirecn.cloud.yysj.utils.DateUtil;
  13. import info.aspirecn.cloud.yysj.utils.ElasticSearchUitls;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.elasticsearch.action.search.SearchRequest;
  16. import org.elasticsearch.index.query.BoolQueryBuilder;
  17. import org.elasticsearch.index.query.QueryBuilders;
  18. import org.elasticsearch.search.SearchHit;
  19. import org.elasticsearch.search.SearchHits;
  20. import org.elasticsearch.search.builder.SearchSourceBuilder;
  21. import org.elasticsearch.search.sort.SortOrder;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.stereotype.Service;
  25. import java.util.*;
  26. /**
  27. * Email:lixinxu@aspirecn.com
  28. * Descrption:
  29. */
  30. @Slf4j
  31. @Service
  32. public class CarSerciceImpl implements CarSercice {
  33. /** 主订单索引 */
  34. @Value("${elasticsearch.firstIndex}")
  35. private String firstIndex;
  36. /** 子订单索引 */
  37. @Value("${elasticsearch.secondIndex}")
  38. private String secondIndex;
  39. /** 车辆行驶证验证产品编号 */
  40. @Value("${product.drivingLicenseCheckProductId}")
  41. private String drivingLicenseCheckProductId;
  42. /** 车辆运输许可证验证产品编号 */
  43. @Value("${product.transportationLicenseCheckProductId}")
  44. private String transportationLicenseCheckProductId;
  45. /** 车辆入网验证产品编号 */
  46. @Value("${product.carIntoTheNetCheckProductId}")
  47. private String carIntoTheNetCheckProductId;
  48. @Autowired
  49. ElasticSearchUitls elasticSearchUitls;
  50. @Autowired
  51. private ObjectMapper objectMapper;
  52. @Autowired
  53. private TypeCode2Name typeCode2Name;
  54. /**
  55. * 查询车辆列表
  56. *
  57. * @param carQueryParam
  58. */
  59. @Override
  60. public Map<String, Object> queryCarList(CarQueryParam carQueryParam) {
  61. //数据深度不能大于1000条
  62. if((carQueryParam.getPageNum() * carQueryParam.getPageSize()) > 1000){
  63. return null;
  64. }
  65. // 创建 Bool 查询构建器
  66. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  67. // 构建查询条件
  68. if(carQueryParam.getUserId() != null && !"".equals(carQueryParam.getUserId())){
  69. boolQueryBuilder.must(QueryBuilders.termsQuery("MG-UserId.keyword",carQueryParam.getUserId()));
  70. }
  71. if(carQueryParam.getCarNum() != null && !"".equals(carQueryParam.getCarNum())){
  72. boolQueryBuilder.must(QueryBuilders.wildcardQuery("RequestInfo.VehicleNumber.keyword","*"+carQueryParam.getCarNum()+"*"));
  73. }
  74. if(carQueryParam.getCarNumColor() != null && !"".equals(carQueryParam.getCarNumColor())){
  75. boolQueryBuilder.must(QueryBuilders.termsQuery("RequestInfo.VehiclePlateColorCode.keyword",carQueryParam.getCarNumColor()));
  76. }
  77. if (carQueryParam.getDrivingLicenseCheck()!= null && !"".equals(carQueryParam.getDrivingLicenseCheck())) {
  78. boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",carQueryParam.getDrivingLicenseCheck()));
  79. boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",drivingLicenseCheckProductId));
  80. }
  81. if (carQueryParam.getTransportationLicenseCheck()!= null && !"".equals(carQueryParam.getTransportationLicenseCheck())) {
  82. boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.result.keyword",carQueryParam.getTransportationLicenseCheck()));
  83. boolQueryBuilder.must(QueryBuilders.termsQuery("Check-Reuslt.productId.keyword",transportationLicenseCheckProductId));
  84. }
  85. boolQueryBuilder.must(QueryBuilders.termsQuery("URI.keyword","/info_check/carInfo.do"));
  86. boolQueryBuilder.filter().add(QueryBuilders.rangeQuery("DateTime")
  87. .gte(carQueryParam.getBeginTime()).lte(carQueryParam.getEndTime()));
  88. // 构建查询源构建器
  89. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  90. searchSourceBuilder.query(boolQueryBuilder);
  91. searchSourceBuilder.sort("DateTime", SortOrder.DESC);
  92. searchSourceBuilder.size(1000);
  93. //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
  94. searchSourceBuilder.fetchSource(new String[]{"RequestInfo.VehicleNumber", "RequestInfo.VehiclePlateColorCode",
  95. "RequestInfo.VehicleType", "DateTime", "Check-Reuslt"}, null);
  96. // 创建查询请求对象,将查询对象配置到其中
  97. SearchRequest searchRequest = new SearchRequest(firstIndex);
  98. searchRequest.source(searchSourceBuilder);
  99. // 返回集合
  100. Map<String, Object> resultMap = new HashMap<String, Object>();
  101. List<Car> carList = new ArrayList<Car>();
  102. int total = 0;
  103. //获取数据
  104. SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
  105. if(hits == null){
  106. resultMap.put(Constant.DATA_LIST, carList);
  107. resultMap.put(Constant.TOTAL, 0);
  108. return resultMap;
  109. }
  110. //遍历数据, 加上核验结果条件, 计算总数, 分页
  111. for (SearchHit hit : hits) {
  112. String json = hit.getSourceAsString();
  113. JSONObject jsonObject = JSONObject.parseObject(json);
  114. //获取核验结果
  115. String drivingLicenseCheck = "";
  116. String transportationLicenseCheck = "";
  117. String carIntoTheNetCheck = "";
  118. JSONArray checkResjsonArray = jsonObject.getJSONArray("Check-Reuslt");
  119. for(int i=0; i < checkResjsonArray.size(); i++){
  120. JSONObject checkResObj = checkResjsonArray.getJSONObject(i);
  121. if(drivingLicenseCheckProductId.equals(checkResObj.getString("productId"))){
  122. drivingLicenseCheck = checkResObj.getString("result");
  123. } else if(transportationLicenseCheckProductId.equals(checkResObj.getString("productId"))){
  124. transportationLicenseCheck = checkResObj.getString("result");
  125. } else if(carIntoTheNetCheckProductId.equals(checkResObj.getString("productId"))){
  126. carIntoTheNetCheck = checkResObj.getString("result");
  127. }
  128. }
  129. //判断核验结果
  130. if(carQueryParam.getDrivingLicenseCheck() != null
  131. && !"".equals(carQueryParam.getDrivingLicenseCheck())
  132. && !carQueryParam.getDrivingLicenseCheck().equals(drivingLicenseCheck)){
  133. continue;
  134. }
  135. if(carQueryParam.getTransportationLicenseCheck() != null
  136. && !"".equals(carQueryParam.getTransportationLicenseCheck())
  137. && !carQueryParam.getTransportationLicenseCheck().equals(transportationLicenseCheck)){
  138. continue;
  139. }
  140. if(carQueryParam.getCarIntoTheNetCheck() != null
  141. && !"".equals(carQueryParam.getCarIntoTheNetCheck())
  142. && !carQueryParam.getCarIntoTheNetCheck().equals(carIntoTheNetCheck)){
  143. continue;
  144. }
  145. total++;
  146. if(total > ((carQueryParam.getPageNum()-1) * carQueryParam.getPageSize()) && carList.size() < carQueryParam.getPageSize()){
  147. Car car = new Car();
  148. car.setId(hit.getId());
  149. JSONObject riJsonObject = jsonObject.getJSONObject("RequestInfo");
  150. if (riJsonObject!=null) {
  151. car.setCarNum(riJsonObject.getString("VehicleNumber"));
  152. car.setCarNumColor(riJsonObject.getString("VehiclePlateColorCode"));
  153. car.setCarType(typeCode2Name.carTypeCode2Name(riJsonObject.getString("VehicleType")));
  154. }
  155. car.setRequestTime(DateUtil.esTime2MySQLTime(jsonObject.getString("DateTime")));
  156. car.setDrivingLicenseCheck(drivingLicenseCheck);
  157. car.setTransportationLicenseCheck(transportationLicenseCheck);
  158. car.setCarIntoTheNetCheck(carIntoTheNetCheck);
  159. carList.add(car);
  160. log.debug("车辆信息:{}", car);
  161. }
  162. }
  163. resultMap.put(Constant.DATA_LIST, carList);
  164. resultMap.put(Constant.TOTAL, total);
  165. return resultMap;
  166. }
  167. /**
  168. * 查询车辆详情
  169. *
  170. * @param carId
  171. */
  172. @Override
  173. public CarInfo queryCarInfo(String carId) {
  174. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  175. //搜索方式 根据id查询
  176. searchSourceBuilder.query(QueryBuilders.termsQuery("_id",carId));
  177. //设置源字段过虑,第一个参数结果集包括哪些字段,第二个参数表示结果集不包括哪些字段
  178. searchSourceBuilder.fetchSource(new String[]{"RequestInfo.VehicleNumber", "RequestInfo.VehiclePlateColorCode",
  179. "RequestInfo.VehicleType","RequestInfo.Owner", "RequestInfo.UseCharacter",
  180. "RequestInfo.VIN", "RequestInfo.IssuingOrganizations", "RequestInfo.RegisterDate",
  181. "RequestInfo.IssueDate", "RequestInfo.VehicleEnergyType", "RequestInfo.VehicleTonnage",
  182. "RequestInfo.GrossMass", "RequestInfo.RoadTransportCertificateNumber"},null);
  183. //创建查询请求对象,将查询对象配置到其中
  184. SearchRequest searchRequest = new SearchRequest(firstIndex);
  185. searchRequest.source(searchSourceBuilder);
  186. searchSourceBuilder.size(1);
  187. //获取数据
  188. SearchHits hits = elasticSearchUitls.getResultHits(searchRequest);
  189. CarInfo carInfo = new CarInfo();
  190. if(hits != null){
  191. for (SearchHit hit : hits) {
  192. String json = hit.getSourceAsString();
  193. JSONObject jsonObject = JSONObject.parseObject(json);
  194. String resStr = jsonObject.getString("RequestInfo");
  195. try {
  196. carInfo = objectMapper.readValue(resStr, CarInfo.class);
  197. } catch (JsonProcessingException e) {
  198. e.printStackTrace();
  199. }
  200. return carInfo;
  201. }
  202. }
  203. return carInfo;
  204. }
  205. }