浏览代码

first commit

15810770710@163.com 4 年之前
父节点
当前提交
c699bedfe5
共有 57 个文件被更改,包括 6002 次插入0 次删除
  1. 210 0
      pom.xml
  2. 28 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/Application.java
  3. 45 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/Test.java
  4. 583 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/action/CarAction.java
  5. 18 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/config/SupplierConfig.java
  6. 29 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/config/SwaggerConfig.java
  7. 97 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/constant/SjjhConstants.java
  8. 123 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/enums/DigestALGEnum.java
  9. 145 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/CarService.java
  10. 3091 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/CarServiceImpl.java
  11. 125 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/ApiDigestUtil.java
  12. 40 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/DesUtils.java
  13. 79 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/DigestMd5OrSHA256Util.java
  14. 46 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/RxUtil.java
  15. 19 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/SjjhConstant.java
  16. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarCapacityRequestObject.java
  17. 59 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarCapacityResponseObject.java
  18. 26 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarHistoricalTrajectoryRequestObject.java
  19. 49 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarHistoricalTrajectoryResponseObject.java
  20. 19 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarJsonResolveObject.java
  21. 19 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarLastPositionRequestObject.java
  22. 33 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarLastPositionResponseObject.java
  23. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarMileageQueryRequestObject.java
  24. 35 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarMileageQueryResponseObject.java
  25. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOperationInfoRequestObject.java
  26. 30 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOperationInfoResponseObject.java
  27. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOwnerAuthenticityCheckRequestObject.java
  28. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOwnerAuthenticityCheckResponseObject.java
  29. 24 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarParkingInfoRequestObject.java
  30. 39 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarParkingInfoResponseObject.java
  31. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarPicTransportNoRequestObject.java
  32. 28 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarPicTransportNoResponseObject.java
  33. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarRequestObject.java
  34. 48 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarResponseObject.java
  35. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarsLastPositionRequestObject.java
  36. 44 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarsLastPositionResponseObject.java
  37. 19 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/EnterpriseTransportPermitRequestObject.java
  38. 32 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/EnterpriseTransportPermitResponseObject.java
  39. 21 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/GeocodingJsonResolveObject.java
  40. 57 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/GeocodingResponseObject.java
  41. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/PersonQualificationCertificateRequestObject.java
  42. 35 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/PersonQualificationCertificateResponseObject.java
  43. 16 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/ResultBody.java
  44. 19 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckExistCheckRequestObject.java
  45. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckExistCheckResponseObject.java
  46. 21 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckInfoQueryRequestObject.java
  47. 82 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckInfoQueryResponseObject.java
  48. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleTransportPermitRequestObject.java
  49. 43 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleTransportPermitResponseObject.java
  50. 42 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/AddressComponent.java
  51. 16 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/Location.java
  52. 17 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/PoiRegions.java
  53. 37 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/Pois.java
  54. 96 0
      src/main/resources/config/application-test.yml
  55. 3 0
      src/main/resources/config/banner.txt
  56. 30 0
      src/main/resources/config/bootstrap.yml
  57. 37 0
      src/main/resources/config/logback-spring.xml

+ 210 - 0
pom.xml

@@ -0,0 +1,210 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.0.6.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <artifactId>iov-sjjh-servicenode-supplier-10000041</artifactId>
+    <version>1.0.0</version>
+
+    <name>iov-sjjh-servicenode-supplier-10000041</name>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
+        <dependency>
+            <groupId>net.logstash.logback</groupId>
+            <artifactId>logstash-logback-encoder</artifactId>
+            <version>5.0</version>
+        </dependency>
+
+        <!-- 服务注册 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-config-client</artifactId>
+        </dependency>
+
+        <!-- aspire maven私服 -->
+        <dependency>
+            <groupId>info.aspirecn.rdc</groupId>
+            <artifactId>aspirecloud-commons-sleuthlog-starter</artifactId>
+            <version>5.0.1</version>
+        </dependency>
+
+        <!--错误日志-->
+        <dependency>
+            <groupId>info.aspirecn.rdc</groupId>
+            <artifactId>aspirecloud-commons-errorlog-starter</artifactId>
+            <version>5.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-commons-lang</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>Finchley.SR2</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <build>
+        <plugins>
+            <!--			<plugin>-->
+            <!--				<groupId>org.springframework.boot</groupId>-->
+            <!--				<artifactId>spring-boot-maven-plugin</artifactId>-->
+            <!--                 <configuration>-->
+            <!--                    <includes>-->
+            <!--                        <include>-->
+            <!--                            <groupId>info.aspirecn.iov.sjjh</groupId>-->
+            <!--                            <artifactId>iov-sjjh-commons-lang</artifactId>-->
+            <!--                        </include>-->
+            <!--                    </includes>-->
+            <!--                </configuration>-->
+            <!--			</plugin>-->
+
+            <!--			<plugin>-->
+            <!--                <groupId>org.apache.maven.plugins</groupId>-->
+            <!--                <artifactId>maven-jar-plugin</artifactId>-->
+            <!--                 <configuration>-->
+            <!--                    <archive>-->
+            <!--                        <manifest>-->
+            <!--                            <addClasspath>true</addClasspath>-->
+            <!--                            <classpathPrefix>lib/</classpathPrefix>-->
+            <!--                        </manifest>-->
+            <!--                    </archive>-->
+            <!--                </configuration>-->
+            <!--            </plugin>-->
+
+            <!--            <plugin>-->
+            <!--                <groupId>org.apache.maven.plugins</groupId>-->
+            <!--                <artifactId>maven-dependency-plugin</artifactId>-->
+            <!--                <executions>-->
+            <!--                    <execution>-->
+            <!--                        <id>copy-dependencies</id>-->
+            <!--                        <phase>prepare-package</phase>-->
+            <!--                        <goals>-->
+            <!--                            <goal>copy-dependencies</goal>-->
+            <!--                        </goals>-->
+            <!--                        <configuration>-->
+            <!--                            <outputDirectory>${project.build.directory}/lib</outputDirectory>-->
+            <!--                            <excludeGroupIds>-->
+            <!--                                info.aspirecn.iov.sjjh-->
+            <!--                            </excludeGroupIds>-->
+            <!--                        </configuration>-->
+            <!--                    </execution>-->
+            <!--                    <execution>-->
+            <!--					    <id>copy</id>-->
+            <!--					    <phase>install</phase>-->
+            <!--					    <goals>-->
+            <!--					        <goal>copy-dependencies</goal>-->
+            <!--					    </goals>-->
+            <!--					    <configuration>-->
+            <!--					        <outputDirectory>-->
+            <!--					            ${project.build.directory}/lib-->
+            <!--					        </outputDirectory>-->
+            <!--					        <excludeGroupIds>-->
+            <!--					            info.aspirecn.iov.sjjh-->
+            <!--					        </excludeGroupIds>-->
+            <!--					    </configuration>-->
+            <!--					</execution>-->
+            <!--                </executions>-->
+            <!--            </plugin>-->
+
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-resources</id>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/classes</outputDirectory>
+                            <useDefaultDelimiters>false</useDefaultDelimiters>
+                            <delimiters>
+                                <delimiter>@</delimiter>
+                            </delimiters>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/config</directory>
+                                    <targetPath>config</targetPath>
+                                    <filtering>true</filtering>
+                                    <includes>
+                                        <include>**</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+
+        </plugins>
+    </build>
+</project>

+ 28 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/Application.java

@@ -0,0 +1,28 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.env.Environment;
+import org.springframework.util.StopWatch;
+
+import info.aspirecn.rdc.aspirecloud.node.except.annotations.EnableAspireCloudRdcHandleExcept;
+import lombok.extern.slf4j.Slf4j;
+
+
+@SpringBootApplication
+@EnableAspireCloudRdcHandleExcept
+@Slf4j
+@EnableEurekaClient
+public class Application {
+    public static void main(String[] args) {
+        StopWatch watch = new StopWatch();
+        watch.start();
+        ApplicationContext context = SpringApplication.run(Application.class, args);
+        Environment environment = context.getBean(Environment.class);
+        String applicationName = environment.getProperty("spring.application.name");
+        watch.stop();
+        log.info("{} 启动完毕,times={}s", applicationName, watch.getTotalTimeSeconds());
+    }
+}

+ 45 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/Test.java

@@ -0,0 +1,45 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.alibaba.fastjson.JSONObject;
+
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.iov.sjjh.commons.lang.Md5Util;
+import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.enums.DigestALGEnum;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.ApiDigestUtil;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 
+ * @author minmin
+ *
+ */
+@Slf4j
+public class Test {
+	private static final String DATE_YYYYMMDD = "^((19|20)[0-9]{2})-(0?[1-9]|1[012])$";
+	public static void main(String[] args) {
+		Pattern pattern = Pattern.compile(DATE_YYYYMMDD);
+		if(!pattern.matcher("20203").matches()) {
+			log.info("不是");
+		} else {
+			log.info("是");
+		}
+		
+		Map<String, String> map = new HashMap<>();
+        map.put("comp", "小米科技有限责任公司");
+        map.put("month", "2019-07");
+        map.put("uid", "jiaokecs");
+		String sign = ApiDigestUtil.execute(map, "8e1e36d1515d448b9374631807c3750d", DigestALGEnum.MD5, "UTF-8");
+		log.info("sign={}", sign);
+		
+		String signStr = "comp=小米科技有限责任公司&month=2019-07&uid=jiaokecs8e1e36d1515d448b9374631807c3750d";
+        String sign1 = Md5Util.encrypt32(signStr).toLowerCase();
+        log.info("sign1={}", sign1);
+	}
+}

+ 583 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/action/CarAction.java

@@ -0,0 +1,583 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.action;
+import java.io.UnsupportedEncodingException;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.config.SupplierConfig;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service.CarService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils.SjjhConstant;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+
+/*
+ * 车辆运力与车企运力接口*/
+@Slf4j
+@RestController
+public class CarAction {
+
+
+		@Autowired
+	    private CarService carService;
+	    @Autowired
+	    private SupplierConfig supplierConfig;
+
+	    @ApiOperation(value = "车辆运力信息查询", notes = "")
+		@PostMapping(value = "/carCapacity.do")
+		public ChannelTypeHandleResponseObject carCapacity(
+				@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+				@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+				@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+
+			log.info("车辆运力信息查询请求--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+			//日志记录通道类型 - 同步
+			ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+			HttpServletRequest request = servletRequestAttributes.getRequest();
+			request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+			request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY,Constant.IS_NOT_CHARGE);
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+			request.setAttribute(SjjhConstant.Charge_Log_Up_ResponseCode, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+
+			ChannelTypeHandleResponseObject responseObject = new ChannelTypeHandleResponseObject();
+			try{
+				responseObject = carService.getCarCapacity(
+						request,customBody,outTime);
+				//日志记录通道响应码
+				if(responseObject.getCode() == 1){
+					log.info("ifJk:{}",request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA));
+					if(Constant.CUSTOMER_RETURN_JK.equals(request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA))){
+
+						String code = supplierConfig.getCode().get(responseObject.getResultCode());
+						log.info("resultCode:{},jkCode:{}",responseObject.getResultCode(),code);
+						if(code!=null){
+							responseObject.setResultCode(Integer.valueOf(code));
+						}
+					}
+					request.setAttribute(SjjhConstant.Charge_Log_ResponseCode,Constant.CHANNEL_LOG_SUCCESS_CODE);
+				}
+				//日志记录通道查询参数
+				if(customBody != null){
+					try {
+						request.setAttribute(Constant.CHANNEL_LOG_QUERY, Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+					} catch (UnsupportedEncodingException e) {
+						ExceptionUtils.handleThrowable(e);
+						log.error("异常信息:{}",e);
+					}
+				}
+
+				request.setAttribute(SjjhConstant.Charge_Log_Key,responseObject.getIsCharge());
+
+				return responseObject;
+			}catch(Exception ex){
+				ErrorUtils.captureException(ex);
+				log.error("message:{}",ex);
+				return responseObject;
+			}
+		}
+
+    @ApiOperation(value = "车企运力信息接口", notes = "")
+	@PostMapping(value = "/carEnterpriseTransportInfo.do")
+    public ChannelTypeHandleResponseObject carEnterpriseTransportInfoCheck(
+    		@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+    		@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+    		@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carEnterpriseTransportInfoCheck(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+    	} catch (Exception ex) {
+    		ErrorUtils.captureException(ex);
+    		log.error("carEnterpriseTransportInfoCheck.encodeBase64String.Exception={}", ex);
+    	}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        return ret;
+	}
+
+	@ApiOperation(value = "车辆历史轨迹接口", notes = "")
+	@PostMapping(value = "/carHistoricalTrajectoryQuery.do")
+	public ChannelTypeHandleResponseObject carHistoricalTrajectoryQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carHistoricalTrajectoryQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carHistoricalTrajectoryQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆实时位置接口", notes = "")
+	@PostMapping(value = "/carLastPositionQuery.do")
+	public ChannelTypeHandleResponseObject carLastPositionQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carLastPositionQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carLastPositionQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+	@ApiOperation(value = "车辆历史轨迹接口(校验装卸货)", notes = "")
+	@PostMapping(value = "/carHistoricalTrajectoryQueryByBaidu.do")
+	public ChannelTypeHandleResponseObject carHistoricalTrajectoryQueryByBaidu(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carHistoricalTrajectoryQueryByBaidu(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carHistoricalTrajectoryQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+	@ApiOperation(value = "车辆入网核验接口", notes = "")
+	@PostMapping(value = "/truckExistCheck.do")
+	public ChannelTypeHandleResponseObject truckExistCheck(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.truckExistCheck(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("truckExistCheck.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "多车最新位置接口", notes = "")
+	@PostMapping(value = "/carsLastPositionQuery.do")
+	public ChannelTypeHandleResponseObject carsLastPositionQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carsLastPositionQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carsLastPositionQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "企业运输许可证信息查询接口", notes = "")
+	@PostMapping(value = "/enterpriseTransportPermitQuery.do")
+	public ChannelTypeHandleResponseObject enterpriseTransportPermitQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.enterpriseTransportPermitQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("enterpriseTransportPermit.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "人员从业资格证信息接口", notes = "")
+	@PostMapping(value = "/personQualificationCertificateQuery.do")
+	public ChannelTypeHandleResponseObject personQualificationCertificateQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.personQualificationCertificateQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("personQualificationCertificateQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆运输许可证信息查询接口", notes = "")
+	@PostMapping(value = "/vehicleTransportPermitQuery.do")
+	public ChannelTypeHandleResponseObject vehicleTransportPermitQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.vehicleTransportPermitQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("vehicleTransportPermitQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车主真实性验证接口", notes = "")
+	@PostMapping(value = "/carOwnerAuthenticityCheck.do")
+	public ChannelTypeHandleResponseObject carOwnerAuthenticityCheck(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carOwnerAuthenticityCheck(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carOwnerAuthenticityCheck.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "货车车辆画像接口", notes = "")
+	@PostMapping(value = "/truckInfoQuery.do")
+	public ChannelTypeHandleResponseObject truckInfoQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.truckInfoQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carOwnerAuthenticityCheck.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆运营信息接口", notes = "")
+	@PostMapping(value = "/carOperationQuery.do")
+	public ChannelTypeHandleResponseObject carOperationQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carOperationInfoQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carOperationQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车身照片及运输证号查询接口", notes = "")
+	@PostMapping(value = "/carPicTransportNoQuery.do")
+	public ChannelTypeHandleResponseObject carPicTransportNoQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carPicTransportNoQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carPicTransportNoQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆里程信息接口", notes = "")
+	@PostMapping(value = "/carMileageQuery.do")
+	public ChannelTypeHandleResponseObject carMileageQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carMileageQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carMileageQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆停车信息接口", notes = "")
+	@PostMapping(value = "/carParkingInfoQuery.do")
+	public ChannelTypeHandleResponseObject carParkingInfoQuery(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="超时时间,单位:毫秒",example = "10000")@RequestParam(name = "outTime", required = true) int outTime,
+			@ApiParam(value="请求参数JSON串")@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = carService.carParkingInfoQuery(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(SjjhConstant.Charge_Log_ResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(SjjhConstant.Charge_Log_Key, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstant.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("carParkingInfoQuery.encodeBase64String.Exception={}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+}

+ 18 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/config/SupplierConfig.java

@@ -0,0 +1,18 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.config;
+
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import lombok.Data;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "supplier")
+public class SupplierConfig {
+    private String url;
+    private String uid;
+    private String key;
+    private Map<Integer,String> code;
+}

+ 29 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/config/SwaggerConfig.java

@@ -0,0 +1,29 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+
+    @Bean
+    public Docket createRestApi() {
+
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
+                .apis(RequestHandlerSelectors.basePackage("info.aspirecn.rdc.iov.sjjh"))
+                .paths(PathSelectors.any()).build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder().title("车辆运力与车企运力查询-通道API").description("").termsOfServiceUrl("").version("1.0.0").build();
+    }
+}

+ 97 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/constant/SjjhConstants.java

@@ -0,0 +1,97 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.constant;
+/**
+ * 常量类
+ * @author minmin
+ *
+ */
+public class SjjhConstants {
+	private SjjhConstants() {
+
+	}
+
+	/**时间格式*/
+	public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+	/**日期格式*/
+	public static final String DATE_FORMAT = "yyyy-MM-dd";
+	/**时间格式*/
+	public static final String TIME_REGEX = "^((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$";
+	/**yyyy-MM*/
+	public static final String MONTH_REGEX = "^((19|20)[0-9]{2})-(0?[1-9]|1[012])$";
+	/**yyyy-MM-dd*/
+	public static final String DATE_REGEX = "^((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$";
+	
+	/**编码*/
+	public static final String PARA_ENCODE  = "UTF-8";
+	
+	/**时间格式*/
+	public static final String TIME_FORMAT_HHmmss = "yyyyMMdd/HHmmss";
+	/**接口请求参数*/
+	public static final String INTERFACE_REQUEST_PARA_ACCESS_TOKEN = "accessToken";
+	/**接口请求参数*/
+	public static final String INTERFACE_REQUEST_PARA_VNO = "vno";
+	/**北斗接口请求参数*/
+	public static final String INTERFACE_REQUEST_PARA_APP_ID = "app_id";
+	public static final String INTERFACE_REQUEST_PARA_APP_KEY = "app_key";
+	public static final String INTERFACE_REQUEST_PARA_APP_METHOD = "method";
+	public static final String INTERFACE_REQUEST_PARA_APP_CONTENT = "content";
+	/**北斗接口车版号*/
+	public static final String INTERFACE_REQUEST_PARA_VCLNO = "vclNo";
+	/**北斗接口车版颜色*/
+	public static final String INTERFACE_REQUEST_PARA_VCO = "vco";
+	/**接口查询开始时间*/
+	public static final String INTERFACE_REQUEST_PARA_STARTTIME = "startTime";
+	/**接口查询结束时间*/
+	public static final String INTERFACE_REQUEST_PARA_ENDTIME = "endTime";
+
+	/**返回提示语*/
+	public static final String INTERFACE_SUCCESS_TEXT = "查询成功";
+	public static final String PARA_CHECK_CAR_NUMBER_FAIL_TEXT = "车牌号不规范";
+	public static final String QUERY_ERROR_TEXT = "查询错误";
+	public static final String PARA_CHECK_CAR_OR_TIME_NUMBER_FAIL_TEXT = "车牌号或起始、结束时间不规范";
+	/**接口返回码*/
+	public static final String INTERFACE_CODE_0 = "0";
+	public static final String INTERFACE_CODE_1 = "1";
+	public static final String INTERFACE_CODE_100 = "100";
+	public static final String INTERFACE_CODE_200 = "200";
+	public static final String INTERFACE_CODE_205 = "205";
+	public static final String INTERFACE_CODE_910 = "910";
+	public static final String INTERFACE_CODE_913 = "913";
+	public static final String INTERFACE_CODE_1000 = "1000";
+	public static final String INTERFACE_CODE_1002 = "1002";
+	public static final String INTERFACE_CODE_1006 = "1006";
+	public static final String INTERFACE_CODE_10000 = "10000";
+
+	/**
+	 * 月调用量redis key*/
+	public static final String MONTH_CHARGE_COUNT = "month_charge_count";
+	/**
+	 * 日调用量redis key*/
+	public static final String DAY_CHARGE_COUNT = "day_charge_count";
+	/**
+	 * 月调用量上限key*/
+	public static final int MONTH_CHARGE_LIMIT = 10;
+	/**
+	 * 日调用量上限key*/
+	public static final String DAY_CHARGE_LIMIT = "dayCount";
+	/**
+	 * 请求头用户Id key*/
+	public static final String USERID_HEADER_KEY = "userid";
+	/**
+	 * 请求头通道Id key*/
+	public static final String CHANNELID_HEADER_KEY = "channelId";
+
+	/**参数值为0*/
+	public static final int PARA_ZERO = 0;
+	/**1天的毫秒*/
+	public static final int PARA_ONE_DAY = 1000 * 60 * 60 * 24;
+	public static final String NO_RESULT = "查询成功,查无结果";
+	public static final String TRUCK_EXIST_ON_LINE = "入网";
+	public static final String TRUCK_NOT_EXIST_ON_LINE = "未入网";
+	public static final String ERROR_PROVINCE_CODE = "省份行政区划代码格式错误";
+	public static final String ERROR_PERSON_QUERY_PARAM = "身份证号码与从业资格证号不能同时为空";
+	public static final String ERROR_PLATE_COLOR = "车牌颜色错误";
+	public static final String IS_CAR_OWNER = "验证通过";
+	public static final String CAR_OWNER_AUTHENTICITY_NAME_ERROR = "车主姓名不正确";
+	public static final String CAR_OWNER_AUTHENTICITY_PHONE_ERROR = "手机号不正确";
+	public static final String CAR_OWNER_AUTHENTICITY_ERROR = "验证失败";
+}

+ 123 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/enums/DigestALGEnum.java

@@ -0,0 +1,123 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.enums;
+
+/**
+ * create by Mr.Liu
+ */
+public enum DigestALGEnum {
+
+	SHA256("SHA-256","SHA256"),
+	MD5("MD5","MD5");
+	/** 枚举值 */
+	private final String code;
+	
+	/** 枚举描述 */
+	private final String message;
+	
+	/**
+	 *
+	 * @param code 枚举值
+	 * @param message 枚举描述
+	 */
+	private DigestALGEnum(String code, String message) {
+		this.code = code;
+		this.message = message;
+	}
+	
+	/**
+	 * @return Returns the code.
+	 */
+	public String getCode() {
+		return code;
+	}
+	
+	/**
+	 * @return Returns the message.
+	 */
+	public String getMessage() {
+		return message;
+	}
+	
+	/**
+	 * @return Returns the code.
+	 */
+	public String code() {
+		return code;
+	}
+	
+	/**
+	 * @return Returns the message.
+	 */
+	public String message() {
+		return message;
+	}
+	
+	/**
+	 * 通过枚举<code>code</code>获得枚举
+	 *
+	 * @param code
+	 * @return IVStatusEnum
+	 */
+	public static DigestALGEnum getByCode(String code) {
+		for (DigestALGEnum _enum : values()) {
+			if (_enum.getCode().equals(code)) {
+				return _enum;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * 获取全部枚举
+	 * 
+	 * @return List<IVStatusEnum>
+	 */
+	public static java.util.List<DigestALGEnum> getAllEnum() {
+		java.util.List<DigestALGEnum> list = new java.util.ArrayList<DigestALGEnum>(
+			values().length);
+		for (DigestALGEnum _enum : values()) {
+			list.add(_enum);
+		}
+		return list;
+	}
+	
+	/**
+	 * 获取全部枚举值
+	 * 
+	 * @return List<String>
+	 */
+	public static java.util.List<String> getAllEnumCode() {
+		java.util.List<String> list = new java.util.ArrayList<String>(values().length);
+		for (DigestALGEnum _enum : values()) {
+			list.add(_enum.code());
+		}
+		return list;
+	}
+	
+	/**
+	 * 通过code获取msg
+	 * @param code 枚举值
+	 * @return
+	 */
+	public static String getMsgByCode(String code) {
+		if (code == null) {
+			return null;
+		}
+		DigestALGEnum _enum = getByCode(code);
+		if (_enum == null) {
+			return null;
+		}
+		return _enum.getMessage();
+	}
+	
+	/**
+	 * 获取枚举code
+	 * @param _enum
+	 * @return
+	 */
+	public static String getCode(DigestALGEnum _enum) {
+		if (_enum == null) {
+			return null;
+		}
+		return _enum.getCode();
+	}
+}

+ 145 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/CarService.java

@@ -0,0 +1,145 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+public interface CarService {
+
+	ChannelTypeHandleResponseObject getCarCapacity(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车企运力信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carEnterpriseTransportInfoCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆历史轨迹(接百度)
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carHistoricalTrajectoryQueryByBaidu(HttpServletRequest request, String customBody,
+                                                                        int outTime);
+	/**
+	 * 车辆历史轨迹
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carHistoricalTrajectoryQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆实时位置
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carLastPositionQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆入网核验
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject truckExistCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 多车最新位置
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carsLastPositionQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 企业道路运输许可证信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject enterpriseTransportPermitQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 人员从业资格证信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject personQualificationCertificateQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆运输许可证信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject vehicleTransportPermitQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车主真实性验证
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carOwnerAuthenticityCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 货车车辆画像
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject truckInfoQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆运营信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carOperationInfoQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车身照片及运输证号查询
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carPicTransportNoQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆里程信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carMileageQuery(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆停车信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject carParkingInfoQuery(HttpServletRequest request, String customBody, int outTime);
+}

文件差异内容过多而无法显示
+ 3091 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/service/impl/CarServiceImpl.java


+ 125 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/ApiDigestUtil.java

@@ -0,0 +1,125 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.commons.codec.binary.Hex;
+
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.enums.DigestALGEnum;
+
+/**
+ * 签名工具
+ * create by Mr.Liu
+ */
+public final class ApiDigestUtil {
+
+
+	/**
+	 * 对 dataMap 的内容进行签名,并返回签名值
+	 *
+	 * @param dataMap          待签名kv
+	 * @param securityCheckKey 安全密钥
+	 * @param de               签名算法
+	 * @param encoding         签名编码名称
+	 */
+	public static String execute(Map<String, String> dataMap, String securityCheckKey, DigestALGEnum de, String encoding) {
+		if (dataMap == null) {
+			throw new RuntimeException("数据不能为空");
+		}
+		if (securityCheckKey == null || "".equals(securityCheckKey)) {
+			throw new RuntimeException("安全校验码不能为空");
+		}
+		if (de == null) {
+			throw new RuntimeException("摘要算法不能为空");
+		}
+		if (encoding == null || "".equals(encoding)) {
+			throw new RuntimeException("字符集不能为空");
+		}
+
+		String message = sort(dataMap) + securityCheckKey;
+		
+		/**执行签名**/
+		byte[] toDigest;
+		try {
+			toDigest = message.getBytes(encoding);
+			MessageDigest md = MessageDigest.getInstance(de.getCode());
+			md.update(toDigest);
+			return new String (Hex.encodeHex(md.digest()));
+		} catch (Exception e) {
+			throw new RuntimeException("签名失败", e);
+		}
+	}
+
+	/**
+	 * 排序字符串
+	 * @param paramMap
+	 * @return
+	 */
+	public static String sort(Map<String, String> paramMap) {
+		/**按a~z、A~Z排序**/
+		TreeMap<String, String> treeMap = new TreeMap<String, String>(paramMap);
+
+		/**拼接签名字符串**/
+		StringBuilder sb = new StringBuilder();
+		for (Map.Entry<String, String> entry : treeMap.entrySet()) {
+			if ("sign".equals(entry.getKey())) {
+				continue;
+			}
+			sb.append(entry.getKey()).append("=").append(defaultIfBlank(entry.getValue(), "")).append("&");
+		}
+
+		/**整理字符串**/
+		if (sb.length() > 0) {
+			sb.setLength(sb.length() - 1);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 为空默认
+	 * @param value
+	 * @param defaultValue
+	 * @return
+	 */
+	private static String defaultIfBlank(String value, String defaultValue) {
+		if (value == null || "".equals(value)) {
+			return defaultValue;
+		} else {
+			return value;
+		}
+	}
+
+	/**
+	 * 将 Map<String, String[]> -> Map<String, String>
+	 * 
+	 * @param paramMap
+	 * @return 转换完成的集合
+	 */
+	public static Map<String, String> toMap(Map<String, String[]> paramMap){
+		Map<String, String> returnMap = new HashMap<String, String>();
+		if (paramMap != null) {
+			for (Map.Entry<String, String[]> entry : paramMap.entrySet()) {
+				returnMap.put(entry.getKey(), entry.getValue()[0]);
+			}
+		}
+		return returnMap;
+
+	}
+
+	/**
+	 * 清除空元素
+	 * @param paramMap
+	 */
+	private static void clearNullValue(Map<String, String> paramMap) {
+		Iterator<Map.Entry<String, String>> it = paramMap.entrySet().iterator();
+		while(it.hasNext()){
+			Map.Entry<String, String> entry = it.next();
+			if ((entry.getValue()) == null || "".equals((entry.getValue()))) {
+				it.remove();
+			}
+		}
+	}
+}

+ 40 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/DesUtils.java

@@ -0,0 +1,40 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.CarCapacityRequestObject;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class DesUtils {
+
+	    private static final String YYYYMMDD = "^((19|20)[0-9]{2})-(0?[1-9]|1[012])$";
+	    //校验参数
+        public static boolean checkParam(CarCapacityRequestObject jsonResolveObject ){
+            if (StringUtils.isBlank(jsonResolveObject.getVclN()) ||
+                    !PatternTools.checkResult(Constant.PATTERN_CAR_NUMBER_REGEX, jsonResolveObject.getVclN())) {
+                log.info("vclN不正确:{}",jsonResolveObject.getVclN());
+                return true;
+            } else if (StringUtils.isBlank(jsonResolveObject.getMonth())||!checkDataParam(jsonResolveObject.getMonth())) {
+                log.info("month不正确:{}",jsonResolveObject.getMonth());
+                return true;
+            } else if (StringUtils.isBlank(jsonResolveObject.getVco())) {
+                log.info("vco不正确:{}",jsonResolveObject.getVco());
+                return true;
+
+            }
+            return false;
+        }
+        //检验时间格式
+        public static boolean checkDataParam(String data){
+        	if (Pattern.compile(YYYYMMDD).matcher(data).matches()) {
+        		 return true;
+			}
+			return false;
+        }
+        
+}

+ 79 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/DigestMd5OrSHA256Util.java

@@ -0,0 +1,79 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+import java.security.MessageDigest;
+
+import org.apache.commons.codec.binary.Hex;
+
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.enums.DigestALGEnum;
+
+/**
+ * 
+ *                       
+ * @Filename DigestMd5OrSHA256Util.java
+ *
+ * @Description MD5签名帮助类
+ *
+ * @Author Mr.Liu
+ *
+ */
+public class DigestMd5OrSHA256Util {
+ 
+	/**
+	 * 执行md5/sha256加密
+	 * @param string
+	 * @param digestEnum
+	 * @return
+	 */
+	public static String encrypt(String string, DigestALGEnum digestEnum) {
+		return encrypt(string, digestEnum, false);
+	}
+	
+	/**
+	 * 执行md5/sha256加密
+	 * @param string
+	 * @param digestEnum
+	 * @param upperCase
+	 * @return
+	 */
+	public static String encrypt(String string, DigestALGEnum digestEnum, boolean upperCase) {
+		if (string == null) {
+			throw new IllegalArgumentException("待签名字符串不能为空!");
+		}
+		/**执行签名**/
+		byte[] toDigest;
+		try {
+			toDigest = string.getBytes("UTF-8");
+			MessageDigest md = MessageDigest.getInstance(digestEnum.getCode());
+			md.update(toDigest);
+			if (upperCase) {
+				return new String (Hex.encodeHex(md.digest())).toUpperCase();
+			} else {
+				return new String (Hex.encodeHex(md.digest()));
+			}
+		} catch (Exception e) {
+			throw new IllegalArgumentException("执行签名失败!");
+		}
+	}
+	
+	/**
+	 * 执行md5/sha256加密
+	 * @param string
+	 * @param digestEnum
+	 * @return
+	 */
+	public static byte[] encryptByte(String string, DigestALGEnum digestEnum) {
+		if (string == null) {
+			throw new IllegalArgumentException("待签名字符串不能为空!");
+		}
+		/**执行签名**/
+		byte[] toDigest;
+		try {
+			toDigest = string.getBytes("UTF-8");
+			MessageDigest md = MessageDigest.getInstance(digestEnum.getCode());
+			md.update(toDigest);
+			return md.digest();
+		} catch (Exception e) {
+			throw new IllegalArgumentException("执行签名失败!");
+		}
+	}
+}

+ 46 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/RxUtil.java

@@ -0,0 +1,46 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+
+import javax.net.ssl.*;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+public class RxUtil {
+
+    public static SSLSocketFactory createSSLSocketFactory() {
+        SSLSocketFactory sSLSocketFactory = null;
+        try {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, new TrustManager[]{new TrustAllManager()},
+                    new SecureRandom());
+            sSLSocketFactory = sc.getSocketFactory();
+        } catch (Exception ignored) {
+        }
+        return sSLSocketFactory;
+    }
+
+    public static class TrustAllManager implements X509TrustManager {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+                throws CertificateException {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+                throws CertificateException {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[0];
+        }
+    }
+
+    public static class TrustAllHostnameVerifier implements HostnameVerifier {
+        @Override
+        public boolean verify(String hostname, SSLSession session) {
+            return true;
+        }
+    }
+}

+ 19 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/utils/SjjhConstant.java

@@ -0,0 +1,19 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.utils;
+
+public class SjjhConstant {
+    public static String Charge_Log_Key="isCharge";
+    public static String Charge_Log_ResponseCode="respnoseCode";
+    public static String Charge_Log_Up_ResponseCode="upResponseCode";
+    public static final int JK_MATCH_CODE = 1000;  //匹配
+    public static final int JK_UN_FIND_CODE = 1099;  //库无
+    public static final int JK_QUERY_ERROR_CODE = 9901;  //查询错误
+    public static final int JK_INVALID_PARAMETER_CODE = 9909;  //参数错误
+    
+    public static final String JK_MATCH = "匹配";
+    public static final String JK_UN_FIND = "库无";
+    public static final String JK_QUERY_ERROR = "查询错误";
+    public static final String JK_INVALID_PARAMETER = "参数错误";
+   
+    public static final String PARA_ENCODE = "UTF-8";
+    
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarCapacityRequestObject.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarCapacityRequestObject {
+	/**车牌号*/
+	private String vclN;	
+	/**查询年月(YYYY-MM)*/
+	private String month;	
+	/**车牌颜色*/
+	private String vco;	
+}

+ 59 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarCapacityResponseObject.java

@@ -0,0 +1,59 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析接口响应对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarCapacityResponseObject {
+	/**code*/
+	private String code;
+	
+	/**响应描述*/
+	private String msg;
+
+	/**订单号*/
+	private String orderNo;
+	
+	/**参数说明*/
+	private CarCapacityResponseChildObject data;
+	
+	@Data
+	public static class CarCapacityResponseChildObject {
+		/**查询月份*/
+		private String   month;
+		/**车牌号码*/
+		private String   vclN;
+		/**车架号*/
+		private String   vin;
+		/**车牌颜色 1:蓝色 2:黄色*/
+		private String   vco;
+		/**大本营*/
+		private String   bcamp;
+		/**常跑线路运营次数占比(保留4位小数)*/
+		private String   rate;
+		/**平均运距(单位:公里)*/
+		private String   amile;
+		/**累计行驶里程(单位:公里)*/
+		private String   omile;
+		/**日均行驶里程(单位:公里)*/
+		private String   dmile;
+		/**日均运营时长(单位:小时)*/
+		private String   dtime;
+		/**日均运营时长(单位:小时)*/
+	    private String   oprate;
+	    /**轨迹完整率(保留4位小数)*/
+		private String   trate;
+		/**最后上线时间(UTC 时间)*/
+		private String   ltime;
+		/**常跑路线(三个长跑路线,用英文逗号隔开)*/
+		private String   lines;
+		
+	}
+	
+}

+ 26 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarHistoricalTrajectoryRequestObject.java

@@ -0,0 +1,26 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 解析请求JSON串对象
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarHistoricalTrajectoryRequestObject {
+	/**车牌号:*/
+	@NotNull(message = "参数名错误")
+	private String plateNum;
+
+	/**查询开始时间(当前时间一个月内)*/
+	@NotNull(message = "参数名错误")
+	private String startTime;
+
+	/**查询结束时间(结束时间<当前时间+24小时)*/
+	@NotNull(message = "参数名错误")
+	private String endTime;
+
+}

+ 49 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarHistoricalTrajectoryResponseObject.java

@@ -0,0 +1,49 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/25 14:35
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarHistoricalTrajectoryResponseObject {
+    /**code*/
+    private String code;
+
+    /**响应描述*/
+    private String msg;
+
+    /**本次请求的订单号*/
+    private String orderNo;
+
+    /**返回的数据,详见每个接口说明*/
+    private CarHistoricalTrajectoryResponseData data;
+
+    @Data
+    public static class CarHistoricalTrajectoryResponseData {
+        private List<CarHistoricalTrajectoryResponseInfos> infos;
+    }
+    @Data
+    public static class CarHistoricalTrajectoryResponseInfos {
+        private String queryTime;
+        private List<CarHistoricalTrajectoryResponseDetails> trackDetails;
+    }
+    @Data
+    public static class CarHistoricalTrajectoryResponseDetails {
+        private String lat;
+        private String lon;
+        private String gtm;
+        private String spd;
+        private String mlg;
+        private String hgt;
+        private String agl;
+
+    }
+}

+ 19 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarJsonResolveObject.java

@@ -0,0 +1,19 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 车企运力解析用户请求JSON串对象
+ * @author minmin
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarJsonResolveObject {
+	/**企业名称*/
+	private String companyName;
+	
+	/**查询年月(YYYY-MM)*/
+	private String monthStr;
+}

+ 19 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarLastPositionRequestObject.java

@@ -0,0 +1,19 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/27 11:11
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarLastPositionRequestObject{
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+}

+ 33 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarLastPositionResponseObject.java

@@ -0,0 +1,33 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/27 11:14
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarLastPositionResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarLastPositionResponseData data;
+
+    @Data
+    @ToString
+    public static class CarLastPositionResponseData {
+        private String adr;
+        private String city;
+        private String country;
+        private String drc;
+        private String lat;
+        private String lon;
+        private String province;
+        private String spd;
+        private String utc;
+    }
+}

+ 23 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarMileageQueryRequestObject.java

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 15:45
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarMileageQueryRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+    @NotNull(message = "参数名错误")
+    private String time;
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+}

+ 35 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarMileageQueryResponseObject.java

@@ -0,0 +1,35 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 15:47
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarMileageQueryResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarMileageQueryResponseData data;
+
+    @Data
+    @ToString
+    public static class CarMileageQueryResponseData {
+        private String mileage;
+        private String startTime;
+        private String endTime;
+        @JSONField(name = "startlonlat")
+        private String startLonLat;
+        private String start;
+        @JSONField(name = "endlonlat")
+        private String endLonLat;
+        private String end;
+    }
+}

+ 23 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOperationInfoRequestObject.java

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 14:37
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarOperationInfoRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+    @NotNull(message = "参数名错误")
+    private String month;
+}

+ 30 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOperationInfoResponseObject.java

@@ -0,0 +1,30 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 14:38
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarOperationInfoResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarOperationInfoResponseData data;
+
+    @Data
+    @ToString
+    public static class CarOperationInfoResponseData {
+        private String operationDay;
+        private String operationRate;
+        private String totalMileage;
+        private String dayAvgMileage;
+        private String totalTime;
+        private String dayAvgTime;
+    }
+}

+ 22 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOwnerAuthenticityCheckRequestObject.java

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 17:33
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarOwnerAuthenticityCheckRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+    @NotNull(message = "参数名错误")
+    private String name;
+    private String mobile;
+}

+ 25 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarOwnerAuthenticityCheckResponseObject.java

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 17:37
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarOwnerAuthenticityCheckResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarOwnerAuthenticityCheckResponseData data;
+
+    @Data
+    @ToString
+    public static class CarOwnerAuthenticityCheckResponseData {
+        private String result;
+    }
+}

+ 24 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarParkingInfoRequestObject.java

@@ -0,0 +1,24 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 16:39
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarParkingInfoRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+    @NotNull(message = "参数名错误")
+    private String time;
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+    private String parkingMinutes;
+}

+ 39 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarParkingInfoResponseObject.java

@@ -0,0 +1,39 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 16:41
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarParkingInfoResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarParkingInfoResponseData data;
+
+    @Data
+    @ToString
+    public static class CarParkingInfoResponseData {
+        private List<CarParkingInfoResponseParkInfo> parkInfo;
+        private String parkSize;
+    }
+
+    @Data
+    @ToString
+    public static class CarParkingInfoResponseParkInfo {
+        private String parkMins;
+        private String bte;
+        private String ete;
+        private String lon;
+        private String lat;
+        private String adr;
+    }
+}

+ 22 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarPicTransportNoRequestObject.java

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 15:08
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarPicTransportNoRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+}

+ 28 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarPicTransportNoResponseObject.java

@@ -0,0 +1,28 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 15:09
+ * @version: V1.0
+ **/
+@Data
+@NotNull
+public class CarPicTransportNoResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarPicTransportNoResponseData data;
+
+    @Data
+    @NotNull
+    public static class CarPicTransportNoResponseData {
+        private String cmpNm;
+        private String pic;
+        private String roadTransport;
+    }
+}

+ 25 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarRequestObject.java

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 车企运力解析接口请求对象
+ * @author minmin
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarRequestObject {
+	/**uid*/
+	private String uid;
+	
+	/**sign*/
+	private String sign;
+
+	/**企业名称*/
+	private String comp;
+	
+	/**查询年月(YYYY-MM)*/
+	private String month;
+}

+ 48 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarResponseObject.java

@@ -0,0 +1,48 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 车企运力解析接口响应对象
+ * @author minmin
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CarResponseObject {
+	/**code*/
+	private String code;
+	
+	/**响应描述*/
+	private String msg;
+
+	/**本次请求的订单号*/
+	private String orderNo;
+	
+	/**返回的数据,详见每个接口说明*/
+	private CarResponseChildObject data;
+	
+	@Data
+	public static class CarResponseChildObject {
+		/**查询月份*/
+		private String month;
+		
+		/**总车辆数*/
+		private String tcount;
+
+		/**上线总车辆数*/
+		private String ocount;
+		/**疑似挂靠车辆数*/
+		private String dcount;		
+		/**总行驶里程(单位:公里)*/
+		private String tmileage;
+		/**总运营时长(单位:小时)*/
+		private String toptime;
+		/**单车日均里程(单位:公里)*/
+		private String amileage;
+
+		/**单车日均运营时长(单位:小时)*/
+		private String avgtime;
+	}
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarsLastPositionRequestObject.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/28 15:34
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarsLastPositionRequestObject {
+    @NotNull(message = "参数名错误")
+    private List<String> plateNums;
+}

+ 44 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/CarsLastPositionResponseObject.java

@@ -0,0 +1,44 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/28 15:36
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class CarsLastPositionResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private CarsLastPositionResponseData data;
+
+    @Data
+    @ToString
+    public static class CarsLastPositionResponseData {
+        private List<CarsLastPositionResponseInfo> infos;
+    }
+
+    @Data
+    @ToString
+    public static class CarsLastPositionResponseInfo {
+        private String vno;
+        private String vco;
+        private String lat;
+        private String lon;
+        private String adr;
+        private String utc;
+        private String spd;
+        private String drc;
+        private String province;
+        private String city;
+        private String country;
+        private String code;
+    }
+}

+ 19 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/EnterpriseTransportPermitRequestObject.java

@@ -0,0 +1,19 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 11:34
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class EnterpriseTransportPermitRequestObject {
+    @NotNull(message = "参数名错误")
+    private String enterpriseName;
+}

+ 32 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/EnterpriseTransportPermitResponseObject.java

@@ -0,0 +1,32 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 11:35
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class EnterpriseTransportPermitResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private EnterpriseTransportPermitResponseData data;
+
+    @Data
+    @ToString
+    public static class EnterpriseTransportPermitResponseData {
+        private String enterpriseName;
+        private String enterpriseRegistrationAddress;
+        private String permitNumber;
+        private String businessScope;
+        private String permitGrantDate;
+        private String periodStartDate;
+        private String periodEndDate;
+        private String certificationUnit;
+    }
+}

+ 21 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/GeocodingJsonResolveObject.java

@@ -0,0 +1,21 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class GeocodingJsonResolveObject {
+	/**车牌号:*/
+	private String vehicleNumber;
+	/**时间*/
+	private String dateTime;
+	/**行政代码*/
+	private String countrySubdivisionCode;
+	
+}

+ 57 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/GeocodingResponseObject.java

@@ -0,0 +1,57 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding.AddressComponent;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding.Location;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding.PoiRegions;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding.Pois;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 逆地理编码接口响应对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class GeocodingResponseObject {
+	
+	/**返回结果状态值, 成功返回0,其他值请查看下方返回码状态表。*/
+	@JsonProperty("status")
+	private int status;
+	@JsonProperty("result")
+	private GeocodingResponseChildObject result;
+	
+	@Data
+	public static class GeocodingResponseChildObject {
+		/**经纬度坐标*/
+		@JsonProperty("location")
+		private Location location;
+		/**结构化地址信息*/
+		@JsonProperty("formatted_address")
+		private String formatted_address;
+		/**坐标所在商圈信息,如 "人民大学,中关村,苏州街"。最多返回3个。*/
+		@JsonProperty("business")
+		private String business;
+		@JsonProperty("addressComponent")
+		private AddressComponent addressComponent;
+		/**(周边poi数组)*/
+		@JsonProperty("pois")
+		private List<Pois> pois;
+		@JsonProperty("poiRegions")
+		private List<PoiRegions> poiRegions;
+		@JsonProperty("roads")
+		private List<String> roads;
+		/**当前位置结合POI的语义化结果描述。*/
+		@JsonProperty("sematic_description")
+		private String sematic_description;
+		/**百度定义的城市id(正常更新与维护,但建议使用adcode)*/
+		@JsonProperty("cityCode")
+		private int cityCode;
+	}
+
+}

+ 23 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/PersonQualificationCertificateRequestObject.java

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 14:48
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class PersonQualificationCertificateRequestObject {
+    @NotNull(message = "参数名错误")
+    private String name;
+    private String idCode;
+    private String qualificationCertificateNumber;
+    @NotNull(message = "参数名错误")
+    private String provinceCode;
+}

+ 35 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/PersonQualificationCertificateResponseObject.java

@@ -0,0 +1,35 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 14:50
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class PersonQualificationCertificateResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private PersonQualificationCertificateResponseData data;
+
+    @Data
+    @ToString
+    static class PersonQualificationCertificateResponseData {
+        private String certificationUnit;
+        private String communicationNumber;
+        private String gender;
+        private String identityDocumentNumber;
+        private String licenseInitialReleaseDate;
+        private String mobileTelephoneNumber;
+        private String nameOfPerson;
+        private String periodEndDate;
+        private String periodStartDate;
+        private String qualificationCertificateNumber;
+        private String qulificationCertificateCategoryCode;
+    }
+}

+ 16 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/ResultBody.java

@@ -0,0 +1,16 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Email:lixinxu@aspirecn.com
+ * Descrption:
+ */
+@Data
+public class ResultBody {
+    int code;
+    String errorinfo;
+    List<String> resultList;
+}

+ 19 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckExistCheckRequestObject.java

@@ -0,0 +1,19 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/28 14:44
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class TruckExistCheckRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+}

+ 25 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckExistCheckResponseObject.java

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/28 14:45
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class TruckExistCheckResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private TruckExistCheckResponseData data;
+
+    @Data
+    @ToString
+    public static class TruckExistCheckResponseData {
+        private String result;
+    }
+}

+ 21 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckInfoQueryRequestObject.java

@@ -0,0 +1,21 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 11:18
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class TruckInfoQueryRequestObject {
+    @NotNull(message = "参数名错误")
+    private String plateNum;
+    @NotNull(message = "参数名错误")
+    private String plateColor;
+}

+ 82 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/TruckInfoQueryResponseObject.java

@@ -0,0 +1,82 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/1 11:19
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class TruckInfoQueryResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private TruckInfoQueryResponseData data;
+
+    @Data
+    @ToString
+    public static class TruckInfoQueryResponseData {
+        private TruckInfoQueryResponsePhoneRoadTransport carPhotoRoadTransport;
+        private List<TruckInfoQueryResponseCapacityEvaluation> carCapacityEvaluation;
+        private TruckInfoQueryResponseLicense license;
+
+    }
+
+    @Data
+    @ToString
+    public static class TruckInfoQueryResponsePhoneRoadTransport {
+        private String cmpNm;
+        private String pic;
+        private String roadTransport;
+    }
+
+    @Data
+    @ToString
+    public static class TruckInfoQueryResponseLicense {
+        private String vclWnrNm;
+        private String vclWnrPhn;
+        private String areaName;
+        private String vclTpNm;
+        private String vbrndCdNm;
+        private String prdCdNm;
+        private String cmpNm;
+        private String vin;
+        private String vclTn;
+        private String ldTn;
+        private String vclDrwTn;
+        private String vclLng;
+        private String vclWdt;
+        private String vclHgt;
+        private String boxLng;
+        private String boxWdt;
+        private String serviceName;
+        private String servicePhone;
+        private String vehicleAxis;
+
+    }
+
+    @Data
+    @ToString
+    public static class TruckInfoQueryResponseCapacityEvaluation {
+        private String month;
+        private String vclN;
+        private String vin;
+        private String vco;
+        private String bcamp;
+        private String rate;
+        private String amile;
+        private String omile;
+        private String dmile;
+        private String dtime;
+        private String oprate;
+        private String trate;
+        private String ltime;
+        private String lines;
+    }
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleTransportPermitRequestObject.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 16:22
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class VehicleTransportPermitRequestObject {
+    @NotNull(message = "参数名错误")
+    private String vehicleNumber;
+    private String licensePlateTypeCode;
+}

+ 43 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/VehicleTransportPermitResponseObject.java

@@ -0,0 +1,43 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/5/29 16:23
+ * @version: V1.0
+ **/
+@Data
+@ToString
+public class VehicleTransportPermitResponseObject {
+    private String code;
+    private String msg;
+    private String orderNo;
+    private VehicleTransportPermitResponseData data;
+
+    @Data
+    @ToString
+    static class VehicleTransportPermitResponseData {
+        private String vehicleNumber;
+        private String licensePlateTypeCode;
+        private String vinNo;
+        private String vehicleClassification;
+        private String vehicleLength;
+        private String vehicleWidth;
+        private String vehicleHeight;
+        private String vehicleMaximumTractionWeight;
+        private String vehicleTonnage;
+        private String businessState;
+        private String businessStateCode;
+        private String roadTransportCertificateNumber;
+        private String certificationUnit;
+        private String periodStartDate;
+        private String periodEndDate;
+        private String businessScope;
+        private String checkStateExpireDate;
+        private String vehicleCorporationName;
+        private String issuingDate;
+    }
+}

+ 42 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/AddressComponent.java

@@ -0,0 +1,42 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * (注意,国外行政区划,字段仅代表层级)
+ * @author BZH
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class AddressComponent {
+	/**国家*/
+	private String country;
+	/**省名*/
+	private String province;
+	/**城市名*/
+	private String city;
+	private int city_level;
+	/**区县名*/
+	private String district;
+	/**乡镇名*/
+	private String town;
+	/**乡镇id*/
+	private String town_code;
+	/**街道名(行政区划中的街道层级)*/
+	private String street;
+	/**街道门牌号*/
+	private String street_number;
+	/**行政区划代码*/
+	private String adcode;
+	/**国家代码*/
+	private int country_code;
+	private String country_code_iso;
+	private String country_code_iso2;
+	/**相对当前坐标点的方向,当有门牌号的时候返回数据*/
+	private String direction;
+	/**相对当前坐标点的距离,当有门牌号的时候返回数据*/
+	private String distance;
+		
+}

+ 16 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/Location.java

@@ -0,0 +1,16 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding;
+
+import lombok.Data;
+import lombok.ToString;
+/**
+ * 经纬度坐标
+ * @author BZH
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class Location {
+	
+	private float lat;
+	private float lng;
+}

+ 17 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/PoiRegions.java

@@ -0,0 +1,17 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class PoiRegions {
+	
+	/**请求中的坐标与所归属区域面的相对位置关系*/
+	private String direction_desc;
+	/**归属区域面名称*/
+	private String name;
+	/**归属区域面类型*/
+	private String tag;
+	
+}

+ 37 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/vo/geocoding/Pois.java

@@ -0,0 +1,37 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.vo.geocoding;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * (周边poi数组)
+ * @author BZH
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class Pois {
+	/**地址信息*/
+	private String addr;
+	/**数据来源(已废弃)*/
+	private String cp;
+	/**和当前坐标点的方向*/
+	private String direction;
+	/**离坐标点距离*/
+	private int distance;
+	/**poi名称*/
+	private String name;
+	/**poi类型,如’美食;中餐厅’。tag与poiType字段均为poi类型,建议使用tag字段,信息更详细*/
+	private String tag;
+	/**poi坐标{x,y}*/
+	private float point;
+	/**电话*/
+	private int tel;
+	/**poi唯一标识*/
+	private String uid;
+	/**邮编*/
+	private int zip;
+	/**poi对应的主点poi(如,海底捞的主点为上地华联,该字段则为上地华联的poi信息。如无,该字段为空),包含子字段和pois基础召回字段相同。*/
+	private String parent_poi;
+
+}

+ 96 - 0
src/main/resources/config/application-test.yml

@@ -0,0 +1,96 @@
+server:
+  tomcat:
+    accesslog:
+      buffered: false
+      enabled: true
+      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
+                "ResponseTime":%D,"UserAgent":"%{user-agent}i","X-Forwarded-For":"%{x-forwarded-for}r","X-User-IP":"%{X-User-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
+                "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{isCharge}r,
+                "MG-ChannelId":%{channelId}i,"MG-CustomBody":"%{x-requestQuery}r","MG-ResultBody":"%{resultBody}o",
+                "MG-ResponseCode":%{respnoseCode}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-SellingPrice":%{price}i,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
+      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
+      directory: ${logging.path}
+  servlet:
+    context-path: /
+
+spring:
+  sleuth:
+    sampler:
+      probability: 1
+    web:
+      additional-skip-pattern: /api/v2/spans
+  zipkin:
+    base-url: http://127.0.0.1:${server.port}
+
+  mvc:
+    favicon:
+      enabled: false
+
+#management
+management:
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+
+#logging
+logging:
+  path: /Users/jkxy/root-logs/apps/var/jakarta/logs
+  level:
+    root: INFO
+    red:
+      microcloud: DEBUG
+  config: classpath:config/logback-spring.xml
+  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+
+#error logging
+#sleuth logging
+rdc:
+  logging:
+    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+
+#eureka
+eureka:
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ipaddress}:${server.port}
+    metadata-map:
+      management:
+        port: ${management.server.port}
+    health-check-url: http://${spring.cloud.client.ipaddress}:${management.server.port}${eureka.instance.health-check-url-path}
+    health-check-url-path: /actuator/health
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8888/eureka
+
+#custom
+supplier:
+  vTranCapaAsseUrl: https://openapi.huoyancredit.com/yunwei/openapi/vTranCapaAsse
+  cTranCapaAsseUrl: https://openapi.huoyancredit.com/yunwei/openapi/cTranCapaAsse
+  uid: jiaoke
+  key: ecb35b9550704b848a243af1f0b2c740
+  code: {1: 1000,3: 9901,4: 1099,8: 9909}
+  vehicleTrajectoryQueryUrl: https://openapi.huoyancredit.com/yunwei/openapi/vehicleTrajectoryQuery
+  lastPositionUrl: https://openapi.huoyancredit.com/yunwei/openapi/platelocation
+  truckExistCheck: https://openapi.huoyancredit.com/yunwei/openapi/checkTruckExist
+  carsLastPositionUrl: https://openapi.huoyancredit.com/yunwei/openapi/manycarlocation
+  enterpriseQuery: https://openapi.huoyancredit.com/yunwei/openapi/enterpriseQuery
+  personQuery: https://openapi.huoyancredit.com/yunwei/openapi/personQuery
+  vehicleQuery: https://openapi.huoyancredit.com/yunwei/openapi/vehicleQuery
+  carOwnerRealness: https://openapi.huoyancredit.com/yunwei/openapi/carOwnerRealness
+  carCondition: https://openapi.huoyancredit.com/yunwei/openapi/carCondition
+  carOperate: https://openapi.huoyancredit.com/yunwei/openapi/carOperate
+  carpictransportno: https://openapi.huoyancredit.com/yunwei/openapi/carpictransportno
+  vQueryMileage: https://openapi.huoyancredit.com/yunwei/openapi/vQueryMileage
+  vQueryPark: https://openapi.huoyancredit.com/yunwei/openapi/vQueryPark
+  baiduUrl:
+  baiduAk:
+swagger:
+  show: true

+ 3 - 0
src/main/resources/config/banner.txt

@@ -0,0 +1,3 @@
+*******************************************************************************
+	 @project.artifactId@  (version:@project.version@)
+*******************************************************************************

+ 30 - 0
src/main/resources/config/bootstrap.yml

@@ -0,0 +1,30 @@
+spring:
+  application:
+    name: '@project.artifactId@'
+  banner:
+    location: classpath:config/banner.txt
+  profiles:
+    active: hwtest
+  cloud:
+    config:
+      discovery:
+        enabled: false
+      uri: http://10.8.18.157:32533
+      label: trunk
+      name: ${spring.application.name}
+      profile: ${spring.profiles.active}
+
+
+server:
+  port: 25102
+management:
+  server:
+    port: 35102
+
+
+
+info:
+  name: '@project.description@'
+  version: '@project.version@'
+
+

+ 37 - 0
src/main/resources/config/logback-spring.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
+	<include
+		resource="org/springframework/boot/logging/logback/console-appender.xml" />
+
+	<property name="LOG_FILE"
+		value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}" />		
+	<springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/apps/var/jakarta/logs" />
+	<springProperty scope="context" name="application_name" source="spring.application.name" defaultValue="test-servicenode-supplier-2" />
+	<springProperty scope="context" name="sleuth_file" source="rdc.logging.sleuth-file" defaultValue="${LOG_PATH}/sleuth/sleuth.log" />
+	<springProperty scope="context" name="error_file" source="rdc.logging.error-file" defaultValue="${LOG_PATH}/error/error.log" />
+
+	<include resource="info/aspirecn/rdc/aspirecloud/node/except/xml/defaults.xml" />
+	<include resource="info/aspirecn/rdc/aspirecloud/node/brave/xml/defaults.xml" />
+
+	<appender name="TIME_FILE"
+		class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<encoder>
+			<pattern>${FILE_LOG_PATTERN}</pattern>
+		</encoder>
+		<file>${LOG_FILE}</file>
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
+			<maxHistory>8</maxHistory>
+			<timeBasedFileNamingAndTriggeringPolicy
+				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+		</rollingPolicy>
+	</appender>
+	
+	<root level="INFO">
+		<appender-ref ref="CONSOLE" />
+		<appender-ref ref="TIME_FILE" />
+	</root>
+</configuration>