Browse Source

first commit

15810770710@163.com 3 years ago
parent
commit
acb292eb5b
50 changed files with 5465 additions and 0 deletions
  1. 235 0
      pom.xml
  2. 38 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/App.java
  3. 75 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/SjjhConstants.java
  4. 37 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/SwaggerConfig.java
  5. 395 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/action/Supplier10000034Action.java
  6. 146 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/action/Supplier10000034SecondAction.java
  7. 94 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Client.java
  8. 198 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Request.java
  9. 82 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Response.java
  10. 47 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/Constants.java
  11. 35 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/ContentType.java
  12. 35 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpHeader.java
  13. 33 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpMethod.java
  14. 30 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpSchema.java
  15. 35 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/SystemHeader.java
  16. 27 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/enums/Method.java
  17. 494 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/HttpUtil.java
  18. 119 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/MessageDigestUtil.java
  19. 86 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/PostUtil.java
  20. 14 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/Properties.java
  21. 229 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/SignUtil.java
  22. 43 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034SecondService.java
  23. 799 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034SecondServiceImpl.java
  24. 94 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034Service.java
  25. 1288 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034ServiceImpl.java
  26. 27 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/CheckVehicleExistResponseObject.java
  27. 25 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseJsonResolveObject.java
  28. 13 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterprisePermitRequestObject.java
  29. 49 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterprisePermitResponseObject.java
  30. 43 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseResponseObject.java
  31. 9 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseSjxyRequestObject.java
  32. 27 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/OverloadCheckJsonResolveObject.java
  33. 26 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonJsonResolveObject.java
  34. 24 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonQualificationRequestObject.java
  35. 58 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonQualificationResponseObject.java
  36. 49 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonResponseObject.java
  37. 11 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonSjxyRequestObject.java
  38. 15 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/ResultBody.java
  39. 9 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleExistSjxyRequestObject.java
  40. 23 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleInToNetResolveObject.java
  41. 114 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitDetailsResponseObject.java
  42. 35 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitJsonResolveObject.java
  43. 28 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitSecondJsonResolveObject.java
  44. 9 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitSjxyRequstObject.java
  45. 90 0
      src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleRoadTransportResponseObject.java
  46. 3 0
      src/main/resources/config/banner.txt
  47. 25 0
      src/main/resources/config/bootstrap.yml
  48. 37 0
      src/main/resources/config/logback-spring.xml
  49. 8 0
      src/main/resources/docker/Dockerfile
  50. BIN
      src/main/resources/lib/openapi-sdk-6.0.jar

+ 235 - 0
pom.xml

@@ -0,0 +1,235 @@
+<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-10000034</artifactId>
+  <version>1.5.4</version>
+
+  <name>iov-sjjh-servicenode-supplier-10000034</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <!-- 服务注册 -->
+		<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>org.apache.httpcomponents</groupId>
+		    <artifactId>httpclient</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>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.70</version>
+        </dependency>
+        <dependency>
+            <groupId>openapi.sdk</groupId>
+            <artifactId>openapi-sdk</artifactId>
+            <version>6.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/openapi-sdk-6.0.jar</systemPath>
+        </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>
+                        <include>
+                            <groupId>openapi.sdk</groupId>
+                            <artifactId>openapi-sdk</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.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>
+                                <resource>
+                                    <directory>src/main/resources/docker</directory>
+                                    <targetPath>docker</targetPath>
+                                    <filtering>true</filtering>
+                                    <includes>
+                                        <include>**</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+			</plugin>
+
+			<plugin>
+				<groupId>com.spotify</groupId>
+				<artifactId>docker-maven-plugin</artifactId>
+				<version>1.2.0</version>
+                <configuration>
+                    <!-- 设置Docker 镜像名称 -->
+                    <imageName>hub.i139.cn/iov-sjjh/${project.artifactId}:${project.version}</imageName>
+                    <!-- 设置Dockerfile存放目录地址 -->
+                    <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                    <!-- 设置和setting.xml中的servers对应的server,里面存放了docker hub仓库的用户名、密码 -->
+                    <serverId>docker-hub</serverId>
+                    <!-- 设置docker hub仓库地址 -->
+                    <registryUrl>https://hub.i139.cn</registryUrl>
+                    <!-- 设置docker remote API地址 -->
+                    <!--<dockerHost>http://docker-in-docker.rdc-plugin:2375</dockerHost>-->
+                </configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>

+ 38 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/App.java

@@ -0,0 +1,38 @@
+package info.aspirecn.iov.sjjh.supplier10000034;
+
+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 com.fasterxml.jackson.core.JsonProcessingException;
+
+import info.aspirecn.rdc.aspirecloud.node.except.annotations.EnableAspireCloudRdcHandleExcept;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+@SpringBootApplication
+@EnableAspireCloudRdcHandleExcept
+@Slf4j
+@EnableEurekaClient
+public class App {
+	public static void main(String[] args) throws JsonProcessingException {
+        StopWatch watch = new StopWatch();
+        watch.start();
+
+        ApplicationContext context = SpringApplication.run(App.class, args);
+        Environment environment = context.getBean(Environment.class);
+        String applicationName = environment.getProperty("spring.application.name");
+        
+        
+        watch.stop();
+        log.info("{} 启动完毕,times={}s", applicationName, watch.getTotalTimeSeconds());
+    }
+	
+}

+ 75 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/SjjhConstants.java

@@ -0,0 +1,75 @@
+package info.aspirecn.iov.sjjh.supplier10000034;
+/**
+ * 常量类
+ * @author bzh
+ *
+ */
+public class SjjhConstants {
+private SjjhConstants() {
+		
+	}
+	/**编码*/
+	public static final String PARA_ENCODE  = "UTF-8";
+	
+	public static final int PARA_ZERO = 0;	
+	public static final int PARA_ONE = 1;
+	public static final int PARA_TWO = 2;
+	public static final int PARA_THREE = 3;
+	public static final String PARA_COLOR_ONE = "1";
+	public static final String PARA_COLOR_TWO = "2";
+
+	/**返回提示语*/
+	public static final String INTERFACE_SUCCESS_TEXT = "查询成功,返回结果";
+	public static final String INTERFACE_SUCCESS_NOTEXT = "查询结果为空";
+	public static final String QUERY_ERROR_TEXT = "查询错误";
+	public static final String INVALID_PARAMETER_CHINESE = "参数不符合规格【只能输入汉字】";
+	public static final String INVALID_PARAMETER_NUMBER = "参数不符合规格【只能输入6位数字】";
+	public static final String IDCARD_PRACTITIONER_NULL  = "从业人员身份证号和从业资格证号不能同时为空";
+	
+	/**接口返回码*/
+	public static final String RESULT_CODE_0 = "0";//查询成功
+	public static final String INTERFACE_CODE_140001 = "140001";//必填参数为空
+	public static final String INTERFACE_CODE_110000 = "110000";//查询结果为空
+	public static final String INTERFACE_CODE_140002 = "140002";//参数不符合规格[自定义描述]
+	public static final String QUERY_NO_RESULT = "查询成功,查无结果";
+	public static final String QUERY_RESULT = "查询成功,返回结果";
+	/**车辆入网接口返回码*/
+	public static final String INTERFACE_CODE_200 = "200";//查询成功
+	public static final String INTERFACE_CODE_201 = "201";//查询无结果
+	
+	/**对比结果是否一致*/
+	public static final String UNANIMOUS = "一致";
+	public static final String DISACCORD = "不一致";
+	public static final String OTHER = "其他";
+	
+	public static final String NO_VEHICLENUMBER = "车牌号不一致";
+	public static final String NO_VEHICLECLASSIFICATION = "车辆类型不一致";
+	public static final String NO_VEHICLECORPORATIONNAME = "所有人不一致";
+	public static final String NO_BUSINESSSCOPE = "使用性质不一致";
+	public static final String NO_VINNO = "车辆识别代号不一致";
+	public static final String NO_CERTIFICATIONUNIT = "发证机关不一致";
+	public static final String NO_PERIODSTARTDATE = "注册日期不一致";
+	public static final String NO_ISSUINGDATE = "发证日期不一致";
+	
+	/**校验项目类型*/
+	public static final String NAMEFOFPERSON = "人员姓名";
+	public static final String QUALIFICATIONCERTIFICATENUMBER = "从业资格证号";
+	public static final String CARRIER = "企业名称";
+	public static final String PERMITNUMBER = "经营许可证号";
+	public static final String PERIODDATE = "有效期限";
+	
+	/** 用于错误返回对象*/
+	public static final String ERROR_RETURN_VEHICLENUMBER = "vehicleNumber";
+	public static final String ERROR_RETURN_COLOR_CODE = "licensePlateTypeCode";
+	public static final String ERROR_RETURN_VIN = "vinNo";
+	public static final String ERROR_RETURN_ROADNUMBER = "roadTransportCertificateNumber";
+	
+	public static final String ERROR_RETURN_ENTNAME = "entName";
+	public static final String ERROR_RETURN_PERMITNUMBER = "permitNumber";
+	public static final String ERROR_RETURN_PROVINCECODE = "provinceCode";
+	
+	public static final String ERROR_RETURN_NAMEOFPERSON = "nameOfPerson";
+	public static final String ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER = "qualificationCertificateNumber";
+	public static final String ERROR_RETURN_IDENTITYDOCUMENTNUMBER = "identityDocumentNumber";
+
+}

+ 37 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/SwaggerConfig.java

@@ -0,0 +1,37 @@
+package info.aspirecn.iov.sjjh.supplier10000034;
+
+import org.springframework.beans.factory.annotation.Value;
+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;
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+	@Value("${swagger.show}")
+    private boolean swaggerShow;
+
+    @Bean
+    public Docket createRestApi() {
+
+        return new Docket(DocumentationType.SWAGGER_2).enable(swaggerShow).apiInfo(apiInfo()).select()
+                .apis(RequestHandlerSelectors.basePackage("info.aspirecn.iov.sjjh.supplier10000034.action"))
+                .paths(PathSelectors.any()).build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder().title("10000034通道接口").description("").termsOfServiceUrl("").version("1.0.0").build();
+    }
+}

+ 395 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/action/Supplier10000034Action.java

@@ -0,0 +1,395 @@
+package info.aspirecn.iov.sjjh.supplier10000034.action;
+
+
+
+
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.iov.sjjh.supplier10000034.SjjhConstants;
+import info.aspirecn.iov.sjjh.supplier10000034.service.Supplier10000034Service;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.util.Properties;
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+@Slf4j
+@RestController
+public class Supplier10000034Action {
+	/**日志参数中的错误参数名*/
+	private static final String LOG_ERROR_PARA = "respnoseCode";
+	/**日志参数中的是否收费*/
+	private static final String LOG_FEE_PARA = "isCharge";
+	@Autowired
+	Properties properties;
+	@Autowired
+	private Supplier10000034Service service;
+
+	Logger logger = LoggerFactory.getLogger("CallbackTimeoutLogUtil");
+	
+	@ApiOperation(value = "获取企业信息查询接口", notes = "")
+	@PostMapping(value = "/queryEnterprise.do")
+    public ChannelTypeHandleResponseObject queryEnterprise(
+    		@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 = service.queryEnterprise(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+    	} catch (Exception ex) {
+    		ErrorUtils.captureException(ex);
+    		log.error("Supplier10000034Action.queryEnterprise.Exception{}", ex);
+    	}
+		
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);        
+        return ret;
+	}
+
+	
+	@ApiOperation(value = "获取人员信息查询接口", notes = "")
+	@PostMapping(value = "/queryPerson.do")
+    public ChannelTypeHandleResponseObject queryPerson(
+    		@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 = service.queryPerson(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+    	} catch (Exception ex) {
+    		ErrorUtils.captureException(ex);
+    		log.error("Supplier10000034Action.queryPerson.Exception{}", ex);
+    	}
+		
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);        
+        return ret;
+	}
+
+
+	@ApiOperation(value = "验证车辆运输许可证信息接口", notes = "")
+	@PostMapping(value = "/checkVehiclePermit.do")
+	public ChannelTypeHandleResponseObject checkVehiclePermit(
+			@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 = service.checkVehiclePermit(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getResultCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.checkVehiclePermit.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "超载核验", notes = "")
+	@PostMapping(value = "/overloadCheck.do")
+	public ChannelTypeHandleResponseObject overloadCheck(
+			@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 = service.overloadCheck(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getResultCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.overloadCheck.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆入网核验", notes = "")
+	@PostMapping(value = "/checkVehicleExist.do")
+	public ChannelTypeHandleResponseObject checkVehicleExist(
+			@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 = service.checkVehicleExist(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getResultCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.queryVehiclePermit.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "获取企业信息查询接口-数据信用", notes = "")
+	@PostMapping(value = "/queryEnterpriseSjxy.do")
+	public ChannelTypeHandleResponseObject queryEnterpriseSjxy(
+			@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();
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		request.setAttribute(LOG_FEE_PARA,Constant.IS_NOT_CHARGE);
+		request.setAttribute(LOG_ERROR_PARA,Constant.CHANNEL_LOG_ERROR_CODE);
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = service.queryEnterpriseSjxy(request, customBody, outTime);
+
+		String ifJkCode = request.getHeader("ifJkCode");
+
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+				String code = properties.getCode().get(ret.getResultCode());
+				if(code!=null){
+					ret.setResultCode(Integer.valueOf(code));
+				}
+			}
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.queryEnterpriseSjxy.Exception{}", ex);
+		}
+
+		return ret;
+	}
+
+
+	@ApiOperation(value = "获取人员信息查询接口-数据信用", notes = "")
+	@PostMapping(value = "/queryPersonSjxy.do")
+	public ChannelTypeHandleResponseObject queryPersonSjxy(
+			@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();
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		request.setAttribute(LOG_FEE_PARA,Constant.IS_NOT_CHARGE);
+		request.setAttribute(LOG_ERROR_PARA,Constant.CHANNEL_LOG_ERROR_CODE);
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+		//调用service
+		ChannelTypeHandleResponseObject ret = service.queryPersonSjxy(request, customBody, outTime);
+		String ifJkCode = request.getHeader("ifJkCode");
+
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+				String code = properties.getCode().get(ret.getResultCode());
+				if(code!=null){
+					ret.setResultCode(Integer.valueOf(code));
+				}
+			}
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.queryPerson.Exception{}", ex);
+		}
+
+		return ret;
+	}
+
+
+	@ApiOperation(value = "验证车辆运输许可证信息接口-数据信用", notes = "")
+	@PostMapping(value = "/checkVehiclePermitSjxy.do")
+	public ChannelTypeHandleResponseObject checkVehiclePermitSjxy(
+			@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();
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		request.setAttribute(LOG_FEE_PARA,Constant.IS_NOT_CHARGE);
+		request.setAttribute(LOG_ERROR_PARA,Constant.CHANNEL_LOG_ERROR_CODE);
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = service.checkVehiclePermitSjxy(request, customBody, outTime);
+		String ifJkCode = request.getHeader("ifJkCode");
+
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+				String code = properties.getCode().get(ret.getResultCode());
+				if(code!=null){
+					ret.setResultCode(Integer.valueOf(code));
+				}
+			}
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.checkVehiclePermit.Exception{}", ex);
+		}
+		return ret;
+	}
+
+	@ApiOperation(value = "车辆入网核验-数据信用", notes = "")
+	@PostMapping(value = "/checkVehicleExistSjxy.do")
+	public ChannelTypeHandleResponseObject checkVehicleExistSjxy(
+			@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();
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		request.setAttribute(LOG_FEE_PARA,Constant.IS_NOT_CHARGE);
+		request.setAttribute(LOG_ERROR_PARA,Constant.CHANNEL_LOG_ERROR_CODE);
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+
+		//调用service
+		ChannelTypeHandleResponseObject ret = service.checkVehicleExistSjxy(request, customBody, outTime);
+
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		String ifJkCode = request.getHeader("ifJkCode");
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+				String code = properties.getCode().get(ret.getResultCode());
+				if(code!=null){
+					ret.setResultCode(Integer.valueOf(code));
+				}
+			}
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.queryVehiclePermit.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+
+
+}

+ 146 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/action/Supplier10000034SecondAction.java

@@ -0,0 +1,146 @@
+package info.aspirecn.iov.sjjh.supplier10000034.action;
+
+
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.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.iov.sjjh.supplier10000034.SjjhConstants;
+import info.aspirecn.iov.sjjh.supplier10000034.service.Supplier10000034SecondService;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.util.Properties;
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+@Slf4j
+@RestController
+public class Supplier10000034SecondAction {
+	/**日志参数中的错误参数名*/
+	private static final String LOG_ERROR_PARA = "respnoseCode";
+	/**日志参数中的是否收费*/
+	private static final String LOG_FEE_PARA = "isCharge";
+	@Autowired
+	Properties properties;
+	@Autowired
+	private Supplier10000034SecondService service;
+
+	
+
+	@ApiOperation(value = "企业道路运输经营许可证核查", notes = "")
+	@PostMapping(value = "/checkEnterprisePermit.do")
+	public ChannelTypeHandleResponseObject checkEnterprisePermit(
+			@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 = service.checkEnterprisePermit(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.checkVehicleRoadTransport.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+
+	@ApiOperation(value = "人员从业资格证核查接口", notes = "")
+	@PostMapping(value = "/checkPersonQualification.do")
+	public ChannelTypeHandleResponseObject checkPersonQualification(
+			@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 = service.checkPersonQualification(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.checkVehicleRoadTransport.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+
+	@ApiOperation(value = "核查车辆道路运输证信息", notes = "")
+	@PostMapping(value = "/checkVehicleRoadTransport.do")
+	public ChannelTypeHandleResponseObject checkVehicleRoadTransport(
+			@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 = service.checkVehicleRoadTransport(request, customBody, outTime);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		if(ret.getCode() != Constant.SUCCESS) {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_ERROR_CODE);
+		} else {
+			request.setAttribute(LOG_ERROR_PARA, Constant.CHANNEL_LOG_SUCCESS_CODE);
+		}
+		request.setAttribute(LOG_FEE_PARA, ret.getIsCharge());
+
+		try {
+			request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+					Base64.encodeBase64String(customBody.getBytes(SjjhConstants.PARA_ENCODE)));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000034Action.checkVehicleRoadTransport.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+
+
+}

+ 94 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Client.java

@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.util.HttpUtil;
+
+/**
+ * Client
+ */
+public class Client {
+    /**
+     * 发送请求
+     *
+     * @param request request对象
+     * @return Response
+     * @throws Exception
+     */
+    public static Response execute(Request request) throws Exception {
+        switch (request.getMethod()) {
+            case GET:
+                return HttpUtil.httpGet(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case POST_FORM:
+                return HttpUtil.httpPost(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getBodys(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case POST_STRING:
+                return HttpUtil.httpPost(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getStringBody(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case POST_BYTES:
+                return HttpUtil.httpPost(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getBytesBody(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case PUT_STRING:
+                return HttpUtil.httpPut(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getStringBody(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case PUT_BYTES:
+                return HttpUtil.httpPut(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getBytesBody(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            case DELETE:
+                return HttpUtil.httpDelete(request.getHost(), request.getPath(), 
+                		request.getTimeout(), 
+                		request.getHeaders(), 
+                		request.getQuerys(),
+                		request.getSignHeaderPrefixList(), 
+                		request.getAppKey(), request.getAppSecret());
+            default:
+                throw new IllegalArgumentException(String.format("unsupported method:%s", request.getMethod()));
+        }
+    }
+}

+ 198 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Request.java

@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl;
+
+import java.util.List;
+import java.util.Map;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.enums.Method;
+
+/**
+ * Request
+ */
+public class Request {
+
+    public Request() {
+    }
+
+    public Request(Method method, String host, String path, String appKey, String appSecret, int timeout) {
+        this.method = method;
+        this.host = host;
+        this.path = path;        
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+        this.timeout = timeout;
+    }
+
+    /**
+     * (必选)请求方法
+     */
+    private Method method;
+
+    /**
+     * (必选)Host
+     */
+    private String host;
+    
+    /**
+     * (必选)Path
+     */
+    private String path;
+
+    /**
+     * (必选)APP KEY
+     */
+    private String appKey;
+
+    /**
+     * (必选)APP密钥
+     */
+    private String appSecret;
+
+    /**
+     * (必选)超时时间,单位毫秒,设置零默认使用com.aliyun.apigateway.demo.constant.Constants.DEFAULT_TIMEOUT
+     */
+    private int timeout;
+
+    /**
+     * (可选) HTTP头
+     */
+    private Map<String, String> headers;
+    
+    /**
+     * (可选) Querys
+     */
+    private Map<String, String> querys;
+
+    /**
+     * (可选)表单参数
+     */
+    private Map<String, String> bodys;
+
+    /**
+     * (可选)字符串Body体
+     */
+    private String stringBody;
+
+    /**
+     * (可选)字节数组类型Body体
+     */
+    private byte[] bytesBody;
+
+    /**
+     * (可选)自定义参与签名Header前缀
+     */
+    private List<String> signHeaderPrefixList;
+
+    public Method getMethod() {
+        return method;
+    }
+
+    public void setMethod(Method method) {
+        this.method = method;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+    
+    public String getPath() {
+        return path;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public int getTimeout() {
+        return timeout;
+    }
+
+    public void setTimeout(int timeout) {
+        this.timeout = timeout;
+    }
+
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public void setHeaders(Map<String, String> headers) {
+        this.headers = headers;
+    }
+    
+    public Map<String, String> getQuerys() {
+        return querys;
+    }
+
+    public void setQuerys(Map<String, String> querys) {
+        this.querys = querys;
+    }
+    
+    public Map<String, String> getBodys() {
+        return bodys;
+    }
+
+    public void setBodys(Map<String, String> bodys) {
+        this.bodys = bodys;
+    }
+
+    public String getStringBody() {
+        return stringBody;
+    }
+
+    public void setStringBody(String stringBody) {
+        this.stringBody = stringBody;
+    }
+
+    public byte[] getBytesBody() {
+        return bytesBody;
+    }
+
+    public void setBytesBody(byte[] bytesBody) {
+        this.bytesBody = bytesBody;
+    }
+
+    public List<String> getSignHeaderPrefixList() {
+        return signHeaderPrefixList;
+    }
+
+    public void setSignHeaderPrefixList(List<String> signHeaderPrefixList) {
+        this.signHeaderPrefixList = signHeaderPrefixList;
+    }
+}

+ 82 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/Response.java

@@ -0,0 +1,82 @@
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Response {
+    private int statusCode;
+    private String contentType;
+    private String requestId;
+    private String errorMessage;
+    private Map<String, String> headers;
+    private String body;
+    
+    public Response() {
+		
+    }
+
+	public int getStatusCode() {
+		return statusCode;
+	}
+
+	public void setStatusCode(int statusCode) {
+		this.statusCode = statusCode;
+	}
+
+	public String getContentType() {
+		return contentType;
+	}
+
+	public void setContentType(String contentType) {
+		this.contentType = contentType;
+	}
+
+	public String getRequestId() {
+		return requestId;
+	}
+
+	public void setRequestId(String requestId) {
+		this.requestId = requestId;
+	}
+
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+
+	public void setErrorMessage(String errorMessage) {
+		this.errorMessage = errorMessage;
+	}
+
+	public Map<String, String> getHeaders() {
+		return headers;
+	}
+	
+	public String getHeader(String key) {
+		if (null != headers) {
+			return headers.get(key);
+		} else {
+			return null;
+		}
+	}
+
+	public void setHeaders(Map<String, String> headers) {
+		this.headers = headers;
+	}
+	
+	public void setHeader(String key, String value) {
+		if (null == this.headers) {
+			this.headers = new HashMap<String, String>(); 
+		}
+		this.headers.put(key, value);
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+    
+    
+}

+ 47 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/Constants.java

@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * 通用常量
+ */
+public class Constants {
+    //签名算法HmacSha256
+    public static final String HMAC_SHA256 = "HmacSHA256";
+    //编码UTF-8
+    public static final String ENCODING = "UTF-8";
+    //UserAgent
+    public static final String USER_AGENT = "demo/aliyun/java";
+    //换行符
+    public static final String LF = "\n";
+    //串联符
+    public static final String SPE1 = ",";
+    //示意符
+    public static final String SPE2 = ":";
+    //连接符
+    public static final String SPE3 = "&";
+    //赋值符
+    public static final String SPE4 = "=";
+    //问号符
+    public static final String SPE5 = "?";
+    //默认请求超时时间,单位毫秒
+    public static final int DEFAULT_TIMEOUT = 1000;
+    //参与签名的系统Header前缀,只有指定前缀的Header才会参与到签名中
+    public static final String CA_HEADER_TO_SIGN_PREFIX_SYSTEM = "X-Ca-";
+}

+ 35 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/ContentType.java

@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * 常用HTTP Content-Type常量
+ */
+public class ContentType {
+    //表单类型Content-Type
+    public static final String CONTENT_TYPE_FORM = "application/x-www-form-urlencoded; charset=UTF-8";
+    // 流类型Content-Type
+    public static final String CONTENT_TYPE_STREAM = "application/octet-stream; charset=UTF-8";
+    //JSON类型Content-Type
+    public static final String CONTENT_TYPE_JSON = "application/json; charset=UTF-8";
+    //XML类型Content-Type
+    public static final String CONTENT_TYPE_XML = "application/xml; charset=UTF-8";
+    //文本类型Content-Type
+    public static final String CONTENT_TYPE_TEXT = "application/text; charset=UTF-8";
+}

+ 35 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpHeader.java

@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * HTTP头常量
+ */
+public class HttpHeader {
+    //请求Header Accept
+    public static final String HTTP_HEADER_ACCEPT = "Accept";
+    //请求Body内容MD5 Header
+    public static final String HTTP_HEADER_CONTENT_MD5 = "Content-MD5";
+    //请求Header Content-Type
+    public static final String HTTP_HEADER_CONTENT_TYPE = "Content-Type";
+    //请求Header UserAgent
+    public static final String HTTP_HEADER_USER_AGENT = "User-Agent";
+    //请求Header Date
+    public static final String HTTP_HEADER_DATE = "Date";
+}

+ 33 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpMethod.java

@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * HTTP方法常量
+ */
+public class HttpMethod {
+    //GET
+    public static final String GET = "GET";
+    //POST
+    public static final String POST = "POST";
+    //PUT
+    public static final String PUT = "PUT";
+    //DELETE
+    public static final String DELETE = "DELETE";
+}

+ 30 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/HttpSchema.java

@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * HTTP Schema常量
+ */
+public class HttpSchema {
+    //HTTP
+    public static final String HTTP = "http://";
+    //HTTPS
+    public static final String HTTPS = "https://";
+
+}

+ 35 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/constant/SystemHeader.java

@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant;
+
+/**
+ * 系统HTTP头常量
+ */
+public class SystemHeader {
+    //签名Header
+    public static final String X_CA_SIGNATURE = "X-Ca-Signature";
+    //所有参与签名的Header
+    public static final String X_CA_SIGNATURE_HEADERS = "X-Ca-Signature-Headers";
+    //请求时间戳
+    public static final String X_CA_TIMESTAMP = "X-Ca-Timestamp";
+    //请求放重放Nonce,15分钟内保持唯一,建议使用UUID
+    public static final String X_CA_NONCE = "X-Ca-Nonce";
+    //APP KEY
+    public static final String X_CA_KEY = "X-Ca-Key";
+}

+ 27 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/enums/Method.java

@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.enums;
+
+/**
+ * Http请求方法
+ * Created by lipengfei on 16/3/17.
+ */
+public enum Method {
+    GET, POST_FORM, POST_STRING, POST_BYTES, PUT_FORM, PUT_STRING, PUT_BYTES, DELETE;
+}

+ 494 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/HttpUtil.java

@@ -0,0 +1,494 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URLEncoder;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.CoreConnectionPNames;
+
+import com.alibaba.fastjson.JSON;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.Response;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.Constants;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.ContentType;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.HttpHeader;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.HttpMethod;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.SystemHeader;
+
+/**
+ * Http工具类
+ */
+public class HttpUtil {
+    /**
+     * HTTP GET
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpGet(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+        headers = initialBasicHeader(HttpMethod.GET, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+        HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpGet get = new HttpGet(initUrl(host, path, querys));
+
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            get.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        return convert(httpClient.execute(get));
+    }
+
+    /**
+     * HTTP POST表单
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpPost(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, Map<String, String> bodys, List<String> signHeaderPrefixList, String appKey, String appSecret) throws IOException ,Exception{
+        if (headers == null) {
+            headers = new HashMap<String, String>();
+        }
+
+        headers.put(HttpHeader.HTTP_HEADER_CONTENT_TYPE, ContentType.CONTENT_TYPE_FORM);
+
+        headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, bodys, signHeaderPrefixList, appKey, appSecret);
+
+        HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpPost post = new HttpPost(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        UrlEncodedFormEntity formEntity = buildFormEntity(bodys);
+        if (formEntity != null) {
+            post.setEntity(formEntity);
+        }
+
+        return convert(httpClient.execute(post));
+    }
+
+    /**
+     * Http POST 字符串
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param body
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpPost(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, String body, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+    	headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+    	HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+        httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpPost post = new HttpPost(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        if (StringUtils.isNotBlank(body)) {
+            post.setEntity(new StringEntity(body, Constants.ENCODING));
+
+        }
+
+        return convert(httpClient.execute(post));
+    }
+
+    /**
+     * HTTP POST 字节数组
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpPost(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, byte[] bodys, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+    	headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+    	HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+        httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, getTimeout(connectTimeout));
+        HttpPost post = new HttpPost(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        if (bodys != null) {
+            post.setEntity(new ByteArrayEntity(bodys));
+        }
+
+        return convert(httpClient.execute(post));
+    }
+
+    /**
+     * HTTP PUT 字符串
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param body
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpPut(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, String body, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+    	headers = initialBasicHeader(HttpMethod.PUT, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+    	HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpPut put = new HttpPut(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            put.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        if (StringUtils.isNotBlank(body)) {
+            put.setEntity(new StringEntity(body, Constants.ENCODING));
+
+        }
+
+        return convert(httpClient.execute(put));
+    }
+
+    /**
+     * HTTP PUT字节数组
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpPut(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, byte[] bodys, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+    	headers = initialBasicHeader(HttpMethod.PUT, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+    	HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpPut put = new HttpPut(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+        	put.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        if (bodys != null) {
+        	put.setEntity(new ByteArrayEntity(bodys));
+        }
+
+        return convert(httpClient.execute(put));
+    }
+
+    /**
+     * HTTP DELETE
+     * @param host
+     * @param path
+     * @param connectTimeout
+     * @param headers
+     * @param querys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws Exception
+     */
+    public static Response httpDelete(String host, String path, int connectTimeout, Map<String, String> headers, Map<String, String> querys, List<String> signHeaderPrefixList, String appKey, String appSecret)
+            throws Exception {
+        headers = initialBasicHeader(HttpMethod.DELETE, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret);
+
+        HttpClient httpClient = wrapClient(host);
+        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout));
+
+        HttpDelete delete = new HttpDelete(initUrl(host, path, querys));
+        for (Map.Entry<String, String> e : headers.entrySet()) {
+            delete.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue()));
+        }
+
+        return convert(httpClient.execute(delete));
+    }
+
+    /**
+     * 构建FormEntity
+     * 
+     * @param formParam
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    private static UrlEncodedFormEntity buildFormEntity(Map<String, String> formParam)
+            throws UnsupportedEncodingException {
+        if (formParam != null) {
+            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
+
+            for (String key : formParam.keySet()) {
+                nameValuePairList.add(new BasicNameValuePair(key, formParam.get(key)));
+            }
+            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, Constants.ENCODING);
+            formEntity.setContentType(ContentType.CONTENT_TYPE_FORM);
+            return formEntity;
+        }
+
+        return null;
+    }
+    
+    private static String initUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
+    	StringBuilder sbUrl = new StringBuilder();
+    	sbUrl.append(host);
+    	if (!StringUtils.isBlank(path)) {
+    		sbUrl.append(path);
+        }
+    	if (null != querys) {
+    		StringBuilder sbQuery = new StringBuilder();
+        	for (Map.Entry<String, String> query : querys.entrySet()) {
+        		if (0 < sbQuery.length()) {
+        			sbQuery.append(Constants.SPE3);
+        		}
+        		if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
+        			sbQuery.append(query.getValue());
+                }
+        		if (!StringUtils.isBlank(query.getKey())) {
+        			sbQuery.append(query.getKey());
+        			if (!StringUtils.isBlank(query.getValue())) {
+        				sbQuery.append(Constants.SPE4);
+        				sbQuery.append(URLEncoder.encode(query.getValue(), Constants.ENCODING));
+        			}        			
+                }
+        	}
+        	if (0 < sbQuery.length()) {
+        		sbUrl.append(Constants.SPE5).append(sbQuery);
+        	}
+        }
+    	
+    	return sbUrl.toString();
+    }
+    	
+
+    /**
+     * 初始化基础Header
+     * @param method
+     * @param path
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList
+     * @param appKey
+     * @param appSecret
+     * @return
+     * @throws MalformedURLException
+     */
+    private static Map<String, String> initialBasicHeader(String method, String path,
+                                                          Map<String, String> headers, 
+                                                          Map<String, String> querys,
+                                                          Map<String, String> bodys,
+                                                          List<String> signHeaderPrefixList,
+                                                          String appKey, String appSecret)
+            throws MalformedURLException {
+        if (headers == null) {
+            headers = new HashMap<String, String>();
+        }
+
+        headers.put(SystemHeader.X_CA_TIMESTAMP, String.valueOf(new Date().getTime()));
+        headers.put(SystemHeader.X_CA_NONCE, UUID.randomUUID().toString());
+        headers.put(SystemHeader.X_CA_KEY, appKey);
+        headers.put(SystemHeader.X_CA_SIGNATURE,
+                SignUtil.sign(appSecret, method, path, headers, querys, bodys, signHeaderPrefixList));
+        System.out.println("Header: " + JSON.toJSONString(headers));
+        return headers;
+    }
+
+    /**
+     * 读取超时时间
+     * 
+     * @param timeout
+     * @return
+     */
+    private static int getTimeout(int timeout) {
+        if (timeout == 0) {
+            return Constants.DEFAULT_TIMEOUT;
+        }
+
+        return timeout;
+    }
+    
+    private static Response convert(HttpResponse response) throws IOException {
+    	Response res = new Response(); 
+    	
+    	if (null != response) {
+    		res.setStatusCode(response.getStatusLine().getStatusCode());
+    		for (Header header : response.getAllHeaders()) {
+    			res.setHeader(header.getName(), MessageDigestUtil.iso88591ToUtf8(header.getValue()));
+            }
+    		
+    		res.setContentType(res.getHeader("Content-Type"));
+    		res.setRequestId(res.getHeader("X-Ca-Request-Id"));
+    		res.setErrorMessage(res.getHeader("X-Ca-Error-Message"));
+    		res.setBody(readStreamAsStr(response.getEntity().getContent()));
+    		
+    	} else {
+    		//服务器无回应
+    		res.setStatusCode(500);
+    		res.setErrorMessage("No Response");
+    	}
+    	
+    	return res;
+    }
+
+
+	/**
+	 * 将流转换为字符串
+	 *
+	 * @param is
+	 * @return
+	 * @throws IOException
+	 */
+	public static String readStreamAsStr(InputStream is) throws IOException {
+	    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+	    WritableByteChannel dest = Channels.newChannel(bos);
+	    ReadableByteChannel src = Channels.newChannel(is);
+	    ByteBuffer bb = ByteBuffer.allocate(4096);
+	
+	    while (src.read(bb) != -1) {
+	        bb.flip();
+	        dest.write(bb);
+	        bb.clear();
+	    }
+	    src.close();
+	    dest.close();
+	
+	    return new String(bos.toByteArray(), Constants.ENCODING);
+	}
+
+	private static HttpClient wrapClient(String host) {
+		HttpClient httpClient = new DefaultHttpClient();
+		if (host.startsWith("https://")) {
+			sslClient(httpClient);
+		}
+		
+		return httpClient;
+	}
+	
+	private static void sslClient(HttpClient httpClient) {
+        try {
+            SSLContext ctx = SSLContext.getInstance("TLS");
+            X509TrustManager tm = new X509TrustManager() {
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+                public void checkClientTrusted(X509Certificate[] xcs, String str) {
+                	
+                }
+                public void checkServerTrusted(X509Certificate[] xcs, String str) {
+                	
+                }
+            };
+            ctx.init(null, new TrustManager[] { tm }, null);
+            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+            ClientConnectionManager ccm = httpClient.getConnectionManager();
+            SchemeRegistry registry = ccm.getSchemeRegistry();
+            registry.register(new Scheme("https", 443, ssf));
+        } catch (KeyManagementException ex) {
+            throw new RuntimeException(ex);
+        } catch (NoSuchAlgorithmException ex) {
+        	throw new RuntimeException(ex);
+        }
+    }
+}

+ 119 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/MessageDigestUtil.java

@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.util;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.apache.commons.codec.binary.Base64;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.Constants;
+
+/**
+ * 消息摘要工具
+ */
+public class MessageDigestUtil {
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @param str
+     * @return
+     */
+    public static String base64AndMD5(String str) {
+        if (str == null) {
+            throw new IllegalArgumentException("inStr can not be null");
+        }
+        return base64AndMD5(toBytes(str));
+    }
+
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @return
+     */
+    public static String base64AndMD5(byte[] bytes) {
+        if (bytes == null) {
+            throw new IllegalArgumentException("bytes can not be null");
+        }
+        try {
+            final MessageDigest md = MessageDigest.getInstance("MD5");
+            md.reset();
+            md.update(bytes);
+            final Base64 base64 = new Base64();
+            final byte[] enbytes = base64.encode(md.digest());
+            return new String(enbytes);
+        } catch (final NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException("unknown algorithm MD5");
+        }
+    }
+
+    /**
+     * UTF-8编码转换为ISO-9959-1
+     *
+     * @param str
+     * @return
+     */
+    public static String utf8ToIso88591(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("UTF-8"), "ISO-8859-1");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * ISO-9959-1编码转换为UTF-8
+     *
+     * @param str
+     * @return
+     */
+    public static String iso88591ToUtf8(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("ISO-8859-1"), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * String转换为字节数组
+     *
+     * @param str
+     * @return
+     */
+    private static byte[] toBytes(final String str) {
+        if (str == null) {
+            return null;
+        }
+        try {
+            return str.getBytes(Constants.ENCODING);
+        } catch (final UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}

+ 86 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/PostUtil.java

@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.Client;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.Request;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.Response;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.Constants;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.ContentType;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.HttpHeader;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.enums.Method;
+
+/**
+ * 调用示例
+ * 请替换APP_KEY,APP_SECRET,HOST,CUSTOM_HEADERS_TO_SIGN_PREFIX为真实配置
+ */
+public class PostUtil {
+	//网关的host地址
+	public static String HOST = "https://gateway.logink.cn";
+    
+
+    /**
+     * HTTP POST 字符串
+     *
+     * @throws Exception
+     */
+    public static Response postString(String URL, String BODY,
+    		String APP_KEY, String APP_SECRET,int timeOut) throws Exception {
+    	String PATH = URL.substring(HOST.length(), URL.length());
+        Map<String, String> headers = new HashMap<String, String>();
+        //(必填)根据期望的Response内容类型设置
+        headers.put(HttpHeader.HTTP_HEADER_ACCEPT, ContentType.CONTENT_TYPE_JSON);
+        //(可选)Body MD5,服务端会校验Body内容是否被篡改,建议Body非Form表单时添加此Header
+        headers.put(HttpHeader.HTTP_HEADER_CONTENT_MD5, MessageDigestUtil.base64AndMD5(BODY));
+        //(POST/PUT请求必选)请求Body内容格式
+        headers.put(HttpHeader.HTTP_HEADER_CONTENT_TYPE, ContentType.CONTENT_TYPE_JSON);
+        //(非必填)用户自定义的header字段,用户自己决定是否参与签名,如果参与签名,将相关header信息设置如下
+        headers.put("a-header1", "header1Value");
+        headers.put("b-header2", "header2Value");
+        
+        List<String> CUSTOM_HEADERS_TO_SIGN_PREFIX = new ArrayList<String>();
+        CUSTOM_HEADERS_TO_SIGN_PREFIX.add("a-header1");
+        CUSTOM_HEADERS_TO_SIGN_PREFIX.add("a-header2");
+        
+
+        Request request = new Request(Method.POST_STRING, HOST, 
+        		PATH, APP_KEY, APP_SECRET, Constants.DEFAULT_TIMEOUT);
+        request.setHeaders(headers);
+        request.setSignHeaderPrefixList(CUSTOM_HEADERS_TO_SIGN_PREFIX);
+        
+        //(非必填)根据api描述,如果有需要传递的参数,设置请求的query
+        Map<String, String> querys = new HashMap<String, String>();
+        querys.put("a-query1", "query1Value");
+        querys.put("b-query2", "query2Value");
+        request.setQuerys(querys);
+        
+        request.setStringBody(BODY);
+        request.setTimeout(timeOut);
+        //调用服务端
+        Response response = Client.execute(request);
+
+        return response;
+    }
+   
+}

+ 14 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/Properties.java

@@ -0,0 +1,14 @@
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.util;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "custom")
+public class Properties {
+	 private Map<Integer,String> code;
+}

+ 229 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/gjwl/util/SignUtil.java

@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package info.aspirecn.iov.sjjh.supplier10000034.gjwl.util;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang.StringUtils;
+
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.Constants;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.HttpHeader;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.constant.SystemHeader;
+
+/**
+ * 签名工具
+ */
+public class SignUtil {
+
+    /**
+     * 计算签名
+     *
+     * @param secret APP密钥
+     * @param method HttpMethod
+     * @param path
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList 自定义参与签名Header前缀
+     * @return 签名后的字符串
+     */
+    public static String sign(String secret, String method, String path, 
+    							Map<String, String> headers, 
+    							Map<String, String> querys, 
+    							Map<String, String> bodys, 
+    							List<String> signHeaderPrefixList) {
+        try {
+            Mac hmacSha256 = Mac.getInstance(Constants.HMAC_SHA256);
+            byte[] keyBytes = secret.getBytes(Constants.ENCODING);
+            hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, Constants.HMAC_SHA256));
+
+            return new String(Base64.encodeBase64(
+                    hmacSha256.doFinal(buildStringToSign(method, path, headers, querys, bodys, signHeaderPrefixList)
+                            .getBytes(Constants.ENCODING))),
+                    Constants.ENCODING);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 构建待签名字符串
+     * @param method
+     * @param path
+     * @param headers
+     * @param querys
+     * @param bodys
+     * @param signHeaderPrefixList
+     * @return
+     */
+    private static String buildStringToSign(String method, String path, 
+    										Map<String, String> headers, 
+    										Map<String, String> querys,
+    										Map<String, String> bodys,
+                                            List<String> signHeaderPrefixList) {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(method.toUpperCase()).append(Constants.LF);
+        if (null != headers) {
+        	if (null != headers.get(HttpHeader.HTTP_HEADER_ACCEPT)) {
+                sb.append(headers.get(HttpHeader.HTTP_HEADER_ACCEPT));
+            }
+        	sb.append(Constants.LF);
+        	if (null != headers.get(HttpHeader.HTTP_HEADER_CONTENT_MD5)) {
+                sb.append(headers.get(HttpHeader.HTTP_HEADER_CONTENT_MD5));
+            }
+            sb.append(Constants.LF);
+            if (null != headers.get(HttpHeader.HTTP_HEADER_CONTENT_TYPE)) {
+                sb.append(headers.get(HttpHeader.HTTP_HEADER_CONTENT_TYPE));
+            }
+            sb.append(Constants.LF);
+            if (null != headers.get(HttpHeader.HTTP_HEADER_DATE)) {
+                sb.append(headers.get(HttpHeader.HTTP_HEADER_DATE));
+            }
+        }
+        sb.append(Constants.LF);
+        sb.append(buildHeaders(headers, signHeaderPrefixList));
+        sb.append(buildResource(path, querys, bodys));
+        
+        return sb.toString();
+    }
+
+    /**
+     * 构建待签名Path+Query+BODY
+     *
+     * @param path
+     * @param querys
+     * @param bodys
+     * @return 待签名
+     */
+    private static String buildResource(String path, Map<String, String> querys, Map<String, String> bodys) {
+    	StringBuilder sb = new StringBuilder();
+    	
+    	if (!StringUtils.isBlank(path)) {
+    		sb.append(path);
+        }
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        if (null != querys) {
+        	for (Map.Entry<String, String> query : querys.entrySet()) {
+        		if (!StringUtils.isBlank(query.getKey())) {
+        			sortMap.put(query.getKey(), query.getValue());
+                }
+        	}
+        }
+        
+        if (null != bodys) {
+        	for (Map.Entry<String, String> body : bodys.entrySet()) {
+        		if (!StringUtils.isBlank(body.getKey())) {
+        			sortMap.put(body.getKey(), body.getValue());
+                }
+        	}
+        }
+        
+        StringBuilder sbParam = new StringBuilder();
+        for (Map.Entry<String, String> item : sortMap.entrySet()) {
+    		if (!StringUtils.isBlank(item.getKey())) {
+    			if (0 < sbParam.length()) {
+    				sbParam.append(Constants.SPE3);
+    			}
+    			sbParam.append(item.getKey());
+    			if (!StringUtils.isBlank(item.getValue())) {
+    				sbParam.append(Constants.SPE4).append(item.getValue());
+    			}
+            }
+    	}
+        if (0 < sbParam.length()) {
+        	sb.append(Constants.SPE5);
+        	sb.append(sbParam);
+        }
+        
+        return sb.toString();
+    }
+
+    /**
+     * 构建待签名Http头
+     *
+     * @param headers 请求中所有的Http头
+     * @param signHeaderPrefixList 自定义参与签名Header前缀
+     * @return 待签名Http头
+     */
+    private static String buildHeaders(Map<String, String> headers, List<String> signHeaderPrefixList) {
+    	StringBuilder sb = new StringBuilder();
+    	
+    	if (null != signHeaderPrefixList) {
+    		signHeaderPrefixList.remove(SystemHeader.X_CA_SIGNATURE);
+    		signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_ACCEPT);
+    		signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_CONTENT_MD5);
+    		signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_CONTENT_TYPE);
+    		signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_DATE);
+    		Collections.sort(signHeaderPrefixList);
+    		if (null != headers) {
+    			Map<String, String> sortMap = new TreeMap<String, String>();
+    			sortMap.putAll(headers);
+    			StringBuilder signHeadersStringBuilder = new StringBuilder();
+    			for (Map.Entry<String, String> header : sortMap.entrySet()) {
+                    if (isHeaderToSign(header.getKey(), signHeaderPrefixList)) {
+                    	sb.append(header.getKey());
+                    	sb.append(Constants.SPE2);
+                        if (!StringUtils.isBlank(header.getValue())) {
+                        	sb.append(header.getValue());
+                        }
+                        sb.append(Constants.LF);
+                        if (0 < signHeadersStringBuilder.length()) {
+                        	signHeadersStringBuilder.append(Constants.SPE1);
+                        }
+                        signHeadersStringBuilder.append(header.getKey());
+                    }
+                }
+    			headers.put(SystemHeader.X_CA_SIGNATURE_HEADERS, signHeadersStringBuilder.toString());
+    		}
+    	}
+        
+        return sb.toString();
+    }
+
+    /**
+     * Http头是否参与签名 return
+     */
+    private static boolean isHeaderToSign(String headerName, List<String> signHeaderPrefixList) {
+        if (StringUtils.isBlank(headerName)) {
+            return false;
+        }
+
+        if (headerName.startsWith(Constants.CA_HEADER_TO_SIGN_PREFIX_SYSTEM)) {
+            return true;
+        }
+
+        if (null != signHeaderPrefixList) {
+            for (String signHeaderPrefix : signHeaderPrefixList) {
+                if (headerName.equalsIgnoreCase(signHeaderPrefix)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+}

+ 43 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034SecondService.java

@@ -0,0 +1,43 @@
+package info.aspirecn.iov.sjjh.supplier10000034.service;
+
+
+import javax.servlet.http.HttpServletRequest;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+
+/**
+ * 运政二期
+ * @author bzh
+ *
+ */
+public interface Supplier10000034SecondService {
+
+	/**
+	 * 企业道路运输经营许可证核查
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject checkEnterprisePermit(HttpServletRequest request,String customBody,int outTime);
+	
+	/**
+	 * 人员从业资格证核查
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject checkPersonQualification(HttpServletRequest request, String customBody,
+														   int outTime);
+	/**
+	 * 核查车辆道路运输证信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject checkVehicleRoadTransport(HttpServletRequest request, String customBody, int outTime);
+	
+}

+ 799 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034SecondServiceImpl.java

@@ -0,0 +1,799 @@
+package info.aspirecn.iov.sjjh.supplier10000034.service;
+
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
+import info.aspirecn.iov.sjjh.supplier10000034.SjjhConstants;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.Response;
+import info.aspirecn.iov.sjjh.supplier10000034.gjwl.util.PostUtil;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.EnterprisePermitRequestObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.EnterprisePermitResponseObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.PersonQualificationRequestObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.PersonQualificationResponseObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.PersonQualificationResponseObject.QualificationCertificateInfo;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.ResultBody;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.VehiclePermitSecondJsonResolveObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.VehiclePermitSjxyRequstObject;
+import info.aspirecn.iov.sjjh.supplier10000034.vo.VehicleRoadTransportResponseObject;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+@Slf4j
+@Service
+public class Supplier10000034SecondServiceImpl implements Supplier10000034SecondService {	
+	@Value("${custom.appKey}")
+	private String appKey;
+	@Value("${custom.appSecret}")
+	private String appSecret;
+	@Value("${custom.enterpriseUrl}")
+	private String enterpriseUrl;
+	@Value("${custom.personUrl}")
+	private String personUrl;
+	@Value("${custom.checkVehicleRoadTransportUrl}")
+	private String checkVehicleRoadTransportUrl;
+	@Value("${custom.urlCheckVehicleExist}")
+	private String urlCheckVehicleExist;
+	
+	@Value("${custom.enterpriseV2Url}")
+	private String enterpriseV2Url;
+	@Value("${custom.personV2Url}")
+	private String personV2Url;
+	
+	@Value("${custom.sleepTime}")
+	private String sleepTime;
+	@Autowired
+	private ObjectMapper objectMapper;
+
+	/**
+	 *企业道路运输经营许可证核查
+	 */
+	@Override
+	public ChannelTypeHandleResponseObject checkEnterprisePermit(HttpServletRequest request, String customBody,
+															   int outTime) {
+
+		ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+		ret.setCode(Constant.SUCCESS);
+		ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+		String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+		if(StringUtils.isBlank(returnType)) {
+			returnType = Constant.CUSTOMER_RETURN_ZW;
+		}
+		
+		try {
+			if (outTime <= SjjhConstants.PARA_ZERO) {
+				outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+			}
+			log.info("supplier10000034.checkEnterprisePermit---customBody={},outTime={}", customBody, outTime);
+			ObjectMapper mapper = new ObjectMapper();
+			EnterprisePermitRequestObject jsonResolveObject = mapper.readValue(customBody,
+					EnterprisePermitRequestObject.class);
+			String entName = jsonResolveObject.getEntName();
+			String permitNumber = jsonResolveObject.getPermitNumber();
+			String provinceCode = jsonResolveObject.getProvinceCode();
+
+			//参数校验
+			log.info("supplier10000034.checkEnterprisePermit---requestObject={},请求url:{}", JSON.toJSON(jsonResolveObject),enterpriseV2Url);
+			List<String> paramErrorResultList = new ArrayList<>();
+			if (StringUtils.isBlank(permitNumber)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			}
+			if (StringUtils.isBlank(provinceCode)&&provinceCode.length()!=6) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			}
+			
+			if (!paramErrorResultList.isEmpty()) {
+				if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+					ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+				} else {
+					ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+				}
+				ret.setResultDesc(Constant.INVALID_PARAMETER);
+
+				ResultBody resultBody = new ResultBody();
+				resultBody.setCode(SjjhConstants.PARA_THREE);
+				resultBody.setResultList(paramErrorResultList);
+				ret.setResultBody(resultBody);
+
+				return ret;
+			}
+
+		    JSONObject jsonObject = new JSONObject();
+		    jsonObject.put(SjjhConstants.ERROR_RETURN_PERMITNUMBER, permitNumber);
+		    jsonObject.put(SjjhConstants.ERROR_RETURN_PROVINCECODE, provinceCode);
+		    String body = jsonObject.toJSONString();
+	 	    Response responseContext = PostUtil.postString(enterpriseV2Url, body, appKey, appSecret,outTime);
+		    log.info("supplier10000034.checkEnterprisePermit接口responseContext={}", responseContext.getBody());
+            EnterprisePermitResponseObject responseObject = objectMapper.readValue(
+					responseContext.getBody(), EnterprisePermitResponseObject.class);
+            log.info("supplier10000034.checkEnterprisePermit接口responseObject={}", responseObject);
+			ret = setCheckEnterprisePermit(ret, returnType, entName, permitNumber,  responseObject);
+			if(responseObject != null) {
+				upstreamCode = responseObject.getResultCode();
+			}
+		} catch (SocketTimeoutException ste) {
+			ErrorUtils.captureException(ste);
+			log.info("supplier10000034.checkEnterprisePermit接口SocketTimeoutException={}", ste);
+			ret.setCode(Constant.REQUEST_TIMEOUT);
+		} catch (UnrecognizedPropertyException upe) {
+			log.info("supplier10000034.checkEnterprisePermit-UnrecognizedPropertyException:{}", upe);
+	        ErrorUtils.captureException(upe);
+	        ret.setCode(Constant.SUCCESS);
+	        ret.setIsCharge(Constant.IS_NOT_CHARGE);
+	        /**参数错误*/
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+	        } else {
+	        	ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_ENTNAME);
+			resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+	        return ret;
+		} catch (Exception ioe) {
+			log.info("supplier10000034.checkVehicleRoadTransport接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		}
+		
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		return ret;
+	}
+	
+	/**
+	 * 填充企业道路运输经营许可证核查接口的返回对象
+	 * @param ret
+	 * @param returnType
+	 * @param responseObject
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject setCheckEnterprisePermit(ChannelTypeHandleResponseObject ret,  
+			String returnType,String entName,String permitNumber,EnterprisePermitResponseObject  responseObject) {
+		String resultCode = responseObject.getResultCode();
+		if (SjjhConstants.RESULT_CODE_0.equals(resultCode)) {
+			// 查询成功,返回结果
+			ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+			
+			//1、源数据是否为空
+			List<String> resultList = new ArrayList<>();
+			if(StringUtils.isBlank(responseObject.getData().getEnterpriseName())){
+				resultList.add(SjjhConstants.ERROR_RETURN_ENTNAME);
+			}
+			if(StringUtils.isBlank(responseObject.getData().getPermitNumber())){
+				resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			}
+			if(!resultList.isEmpty()){
+				//数据源为空响应
+				if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+					ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+				} else {
+	    			ret.setResultCode(Constant.UN_MATCH_CODE);
+	    		}
+				ResultBody resultBody = new ResultBody();
+				resultBody.setCode(SjjhConstants.PARA_ONE);
+				resultBody.setResultList(resultList);
+
+				ret.setResultBody(resultBody);
+			} else {
+				//2、数据是否一致
+				if(StringUtils.isNotBlank(entName)&&!entName.equalsIgnoreCase(responseObject.getData().getEnterpriseName())){
+					resultList.add(SjjhConstants.ERROR_RETURN_ENTNAME);
+				} else if(StringUtils.isNotBlank(permitNumber)&&!permitNumber.equalsIgnoreCase(responseObject.getData().getPermitNumber())){
+					resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+				} 
+				if(!resultList.isEmpty()){
+					//数据不一致响应
+					if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+					} else {
+		    			ret.setResultCode(Constant.UN_MATCH_CODE);
+		    		}
+					ResultBody resultBody = new ResultBody();
+					resultBody.setCode(SjjhConstants.PARA_TWO);
+					resultBody.setResultList(resultList);
+
+					ret.setResultBody(resultBody);
+				} else {
+					//数据一致响应
+					if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+					} else {
+						ret.setResultCode(Constant.MATCH_CODE);
+					}
+					ret.setResultBody(responseObject.getData());
+				}
+			}
+		} else if(SjjhConstants.INTERFACE_CODE_110000.equals(resultCode)) {
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+	        } else {
+	        	ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+		}else if(SjjhConstants.INTERFACE_CODE_140002.equals(resultCode)){
+			 /**参数错误*/
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+	        } else {
+	        	ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+		}else {
+			// 其他错误
+			if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+				ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+			} else {
+    			ret.setResultCode(Constant.OTHER_ERROR_CODE);
+    		}
+
+			ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_PERMITNUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+			ret.setResultBody(resultBody);
+		}
+		
+		return ret;
+	}
+	/**
+	 *人员从业资格证核查
+	 */
+	@Override
+	public ChannelTypeHandleResponseObject checkPersonQualification(HttpServletRequest request, String customBody,
+														   int outTime) {
+		ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+		ret.setCode(Constant.SUCCESS);
+		ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+		String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+		if(StringUtils.isBlank(returnType)) {
+			returnType = Constant.CUSTOMER_RETURN_ZW;
+		}
+		try {
+			if (outTime <= SjjhConstants.PARA_ZERO) {
+				outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+			}
+			log.info("supplier10000034.checkPersonQualification---customBody={},outTime={}", customBody, outTime);
+			ObjectMapper mapper = new ObjectMapper();
+			PersonQualificationRequestObject jsonResolveObject = mapper.readValue(customBody,
+					PersonQualificationRequestObject.class);
+			String name = jsonResolveObject.getNameOfPerson();
+			String idCode = jsonResolveObject.getIdentityDocumentNumber();
+			String qualificationCertificateNumber = jsonResolveObject.getQualificationCertificateNumber();
+			String provinceCode = jsonResolveObject.getProvinceCode();
+			//参数校验
+			log.info("supplier10000034.checkPersonQualification---requestObject={},请求url:{}", JSON.toJSON(jsonResolveObject),personV2Url);
+			List<String> paramErrorResultList = new ArrayList<>();
+			if (StringUtils.isBlank(name)&&!PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX,name)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			}
+			if (StringUtils.isBlank(provinceCode)&&provinceCode.length()!=6) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			}
+			if (StringUtils.isBlank(idCode)&&StringUtils.isBlank(qualificationCertificateNumber)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if(StringUtils.isNotEmpty(idCode) && !PatternTools.checkResult(Constant.PATTERN_ID_NUMBER_REGEX,idCode)){
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if (!paramErrorResultList.isEmpty()) {
+				if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+					ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+				} else {
+					ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+				}
+				ret.setResultDesc(Constant.INVALID_PARAMETER);
+
+				ResultBody resultBody = new ResultBody();
+				resultBody.setCode(SjjhConstants.PARA_THREE);
+				resultBody.setResultList(paramErrorResultList);
+				ret.setResultBody(resultBody);
+
+				return ret;
+			}
+			String 	body = objectMapper.writeValueAsString(jsonResolveObject);
+	 	    Response responseContext = PostUtil.postString(personV2Url, body, appKey, appSecret,outTime);
+		    log.info("supplier10000034.checkPersonQualification接口responseContext={}", responseContext.getBody());
+		    PersonQualificationResponseObject responseObject = objectMapper.readValue(
+					responseContext.getBody(), PersonQualificationResponseObject.class);
+            log.info("supplier10000034.checkPersonQualification接口responseObject={}", responseObject);
+			ret = setCheckPersonQualification(ret, returnType, name, idCode, provinceCode, 
+					qualificationCertificateNumber,  responseObject);
+			if(responseObject != null) {
+				upstreamCode = responseObject.getResultCode();
+			}
+		} catch (SocketTimeoutException ste) {
+			ErrorUtils.captureException(ste);
+			log.info("supplier10000034.checkPersonQualification接口SocketTimeoutException={}", ste);
+			ret.setCode(Constant.REQUEST_TIMEOUT);
+		} catch (UnrecognizedPropertyException upe) {
+			log.info("supplier10000034.checkPersonQualification-UnrecognizedPropertyException:{}", upe);
+	        ErrorUtils.captureException(upe);
+	        ret.setCode(Constant.SUCCESS);
+	        ret.setIsCharge(Constant.IS_NOT_CHARGE);
+	        /**参数错误*/
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+	        } else {
+	        	ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+	        return ret;
+		} catch (Exception ioe) {
+			log.info("supplier10000034.checkPersonQualification接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		}
+		
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		return ret;
+	}
+	
+	/**
+	 * 填充人员从业资格证核查接口的返回对象
+	 * @param ret
+	 * @param returnType
+	 * @param name
+	 * @param idCode
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject setCheckPersonQualification(ChannelTypeHandleResponseObject ret,  
+			String returnType,String name,String idCode,String provinceCode,
+			String qualificationCertificateNumber,PersonQualificationResponseObject  responseObject) {
+		String resultCode = responseObject.getResultCode();
+		if (SjjhConstants.RESULT_CODE_0.equals(resultCode)) {
+			// 查询成功,返回结果
+			ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+			
+			//1、源数据是否为空
+			List<String> resultList = new ArrayList<>();
+			if (StringUtils.isNotBlank(name) && StringUtils.isBlank(responseObject.getData().getNameOfPerson())) {
+				resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			}
+			if (StringUtils.isNotBlank(idCode) && StringUtils.isBlank(responseObject.getData().getIdentityDocumentNumber())) {
+				resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if (StringUtils.isNotBlank(qualificationCertificateNumber)) {
+				for (QualificationCertificateInfo qualificationCertificateInfo : responseObject.getData().getQualificationCertificateInfo()) {
+					if(StringUtils.isBlank(qualificationCertificateInfo.getQualificationCertificateNumber())){
+						resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+					}
+				}
+			}
+			
+			if(!resultList.isEmpty()){
+				//数据源为空响应
+				if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+					ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+				} else {
+	    			ret.setResultCode(Constant.UN_MATCH_CODE);
+	    		}
+				ResultBody resultBody = new ResultBody();
+				resultBody.setCode(SjjhConstants.PARA_ONE);
+				resultBody.setResultList(resultList);
+
+				ret.setResultBody(resultBody);
+			} else {
+				//2、数据是否一致
+				if (StringUtils.isNotBlank(name) 
+						&& !name.equalsIgnoreCase(responseObject.getData().getNameOfPerson())) {
+					resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON); 
+				}
+				if(StringUtils.isNotBlank(idCode) 
+						&& !idCode.equalsIgnoreCase(responseObject.getData().getIdentityDocumentNumber())){
+					resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+				}
+				if(StringUtils.isNotBlank(provinceCode) 
+						&& !provinceCode.equalsIgnoreCase(responseObject.getData().getProvinceCode())){
+					resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+				}
+				if (StringUtils.isNotBlank(qualificationCertificateNumber)) {
+					for (QualificationCertificateInfo qualificationCertificateInfo : responseObject.getData().getQualificationCertificateInfo()) {
+						if(StringUtils.isNotBlank(qualificationCertificateInfo.getQualificationCertificateNumber()) 
+								&& !qualificationCertificateNumber.equalsIgnoreCase(qualificationCertificateInfo.getQualificationCertificateNumber())){
+							resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+						} 
+					}
+				}
+				if(!resultList.isEmpty()){
+					//数据不一致响应
+					if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+					} else {
+		    			ret.setResultCode(Constant.UN_MATCH_CODE);
+		    		}
+					ResultBody resultBody = new ResultBody();
+					resultBody.setCode(SjjhConstants.PARA_TWO);
+					resultBody.setResultList(resultList);
+
+					ret.setResultBody(resultBody);
+				} else {
+					//数据一致响应
+					if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+					} else {
+						ret.setResultCode(Constant.MATCH_CODE);
+					}
+					ret.setResultBody(responseObject.getData());
+				}
+			}
+		} else if(SjjhConstants.INTERFACE_CODE_110000.equals(resultCode)) {
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+	        } else {
+	        	ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_ONE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			if (StringUtils.isNotBlank(idCode)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if (StringUtils.isNotBlank(qualificationCertificateNumber)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+			}
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+		} else if(SjjhConstants.INTERFACE_CODE_140002.equals(resultCode)){
+			 /**参数错误*/
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+	        } else {
+	        	ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+	        }
+	    	ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			if (StringUtils.isNotBlank(idCode)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if (StringUtils.isNotBlank(qualificationCertificateNumber)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+			}
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+		    ret.setResultBody(resultBody);
+		    ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+		} else {
+			// 其他错误
+			if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+				ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+			} else {
+    			ret.setResultCode(Constant.OTHER_ERROR_CODE);
+    		}
+			ResultBody resultBody = new ResultBody();
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = new ArrayList<>();
+			resultList.add(SjjhConstants.ERROR_RETURN_NAMEOFPERSON);
+			if (StringUtils.isNotBlank(idCode)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_IDENTITYDOCUMENTNUMBER);
+			}
+			if (StringUtils.isNotBlank(qualificationCertificateNumber)) {
+				resultList.add(SjjhConstants.ERROR_RETURN_QUALIFICATIONCERTIFICATENUMBER);
+			}
+			resultList.add(SjjhConstants.ERROR_RETURN_PROVINCECODE);
+			resultBody.setResultList(resultList);
+			ret.setResultBody(resultBody);
+		}
+		return ret;
+	}
+
+	@Override
+	public ChannelTypeHandleResponseObject checkVehicleRoadTransport(HttpServletRequest request, String customBody, int outTime) {
+		ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+		ret.setCode(Constant.SUCCESS);
+		ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+		String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+		if(StringUtils.isBlank(returnType)) {
+			returnType = Constant.CUSTOMER_RETURN_ZW;
+		}
+		
+		try {
+			if (outTime <= SjjhConstants.PARA_ZERO) {
+				outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+			}
+			log.info("supplier10000034.checkVehicleRoadTransport---customBody={},outTime={}", customBody, outTime);
+			ObjectMapper mapper = new ObjectMapper();
+			VehiclePermitSecondJsonResolveObject jsonResolveObject = mapper.readValue(customBody,
+					VehiclePermitSecondJsonResolveObject.class);
+			String carNumber = jsonResolveObject.getVehicleNumber();
+			String colorType = jsonResolveObject.getVehiclePlateColorCode();
+			String vin = jsonResolveObject.getVin();
+			String roadNumber = jsonResolveObject.getRoadTransportCertificateNumber();
+
+			//参数校验
+			log.info("supplier10000034.checkVehicleRoadTransport---requestObject={}", jsonResolveObject);
+			List<String> paramErrorResultList = new ArrayList<>();
+			//车牌号校验
+			if (StringUtils.isBlank(carNumber) || !PatternTools.checkResult(SjjhConstants.PARA_THREE, carNumber)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_VEHICLENUMBER);
+			}
+			//车颜色校验
+			if (StringUtils.isBlank(colorType) || (!SjjhConstants.PARA_COLOR_ONE.equals(colorType) 
+					&& !SjjhConstants.PARA_COLOR_TWO.equals(colorType))) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_COLOR_CODE);
+			}
+			//VIN和道路运输证号非空校验
+			if (StringUtils.isBlank(vin) && StringUtils.isBlank(roadNumber)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_VIN);
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_ROADNUMBER);
+			}
+			//道路运输证号不为空且全是数字
+			if (StringUtils.isNotBlank(roadNumber)
+					&&  !NumberUtils.isNumber(roadNumber)) {
+				paramErrorResultList.add(SjjhConstants.ERROR_RETURN_ROADNUMBER);
+			}
+			
+			if (!paramErrorResultList.isEmpty()) {
+				if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+					ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+				} else {
+					ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+				}
+				ret.setResultDesc(Constant.INVALID_PARAMETER);
+
+				ResultBody resultBody = new ResultBody();
+				resultBody.setCode(SjjhConstants.PARA_THREE);
+				resultBody.setResultList(paramErrorResultList);
+				ret.setResultBody(resultBody);
+
+				return ret;
+			}
+
+			//请求的body,json格式
+			VehiclePermitSjxyRequstObject requestObject = new VehiclePermitSjxyRequstObject();
+			requestObject.setLicensePlateTypeCode(colorType);
+			requestObject.setVehicleNumber(carNumber);
+			String body = objectMapper.writeValueAsString(requestObject);
+			log.info("supplier10000034.checkVehicleRoadTransport接口body={},url={}", body, checkVehicleRoadTransportUrl);
+			info.aspirecn.iov.sjjh.supplier10000034.gjwl.Response response = PostUtil.postString(
+					checkVehicleRoadTransportUrl, body, appKey, appSecret, outTime);
+			String responseContext = response.getBody();
+
+			log.info("supplier10000034.checkVehicleRoadTransport接口responseContext={}", responseContext);
+
+			VehicleRoadTransportResponseObject responseObject = mapper.readValue(
+					responseContext, VehicleRoadTransportResponseObject.class);
+			String resultCode = "";
+			if(responseObject != null) {
+				upstreamCode = responseObject.getResultCode();
+				resultCode  = responseObject.getResultCode();
+			}
+			
+			ret = setCheckVehicleRoadTransport(ret, returnType, vin, roadNumber, resultCode, responseObject);
+		} catch (SocketTimeoutException ste) {
+			ErrorUtils.captureException(ste);
+			log.info("supplier10000034.checkVehicleRoadTransport接口SocketTimeoutException={}", ste);
+			ret.setCode(Constant.REQUEST_TIMEOUT);
+		} catch (UnrecognizedPropertyException upe) {
+			log.info("supplier10000034.checkVehicleRoadTransport-UnrecognizedPropertyException:{}", upe);
+	        ErrorUtils.captureException(upe);
+	        ret.setCode(Constant.SUCCESS);
+	        ret.setIsCharge(Constant.IS_NOT_CHARGE);
+	        /**参数错误*/
+	        if(Constant.CUSTOMER_RETURN_JK.equals(returnType)){
+	        	ret.setResultCode(Constant.JK_RETURN_CODE_9909);
+	        } else {
+	        	ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+	        }
+	        ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+	    	ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+	        return ret;
+		} catch (Exception ioe) {
+			log.info("supplier10000034.checkVehicleRoadTransport接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		}
+		
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		return ret;
+	}
+
+	/**
+	 * 填充核车辆道路运输许可证信息接口的返回对象
+	 * @param ret
+	 * @param returnType
+	 * @param vin
+	 * @param roadNumber
+	 * @param responseObject
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject setCheckVehicleRoadTransport(ChannelTypeHandleResponseObject ret,  
+			String returnType,String vin,String roadNumber,String resultCode,
+			VehicleRoadTransportResponseObject  responseObject) {
+		ResultBody resultBody = new ResultBody();
+		
+		if (responseObject != null && responseObject.getData() != null 
+				&& SjjhConstants.RESULT_CODE_0.equals(resultCode)) {
+			// 查询成功,返回结果
+			ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+			
+			//1、源数据是否为空
+			List<String> resultList = new ArrayList<>();
+			if(StringUtils.isBlank(responseObject.getData().getVehicleNumber())){
+				resultList.add(SjjhConstants.ERROR_RETURN_VEHICLENUMBER);
+			}
+			if(StringUtils.isBlank(responseObject.getData().getLicensePlateTypeCode())){
+				resultList.add(SjjhConstants.ERROR_RETURN_COLOR_CODE);
+			}
+			if(StringUtils.isNotBlank(roadNumber) && StringUtils.isBlank(responseObject.getData().getRoadTransportCertificateNumber())){
+				resultList.add(SjjhConstants.ERROR_RETURN_ROADNUMBER);
+			}
+			if(StringUtils.isNotBlank(vin) && StringUtils.isBlank(responseObject.getData().getVinNo())){
+				resultList.add(SjjhConstants.ERROR_RETURN_VIN);
+			}
+
+
+			if(!resultList.isEmpty()){
+				//数据源为空响应
+				if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+					ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+				} else {
+	    			ret.setResultCode(Constant.UN_MATCH_CODE);
+	    		}
+
+				resultBody.setCode(SjjhConstants.PARA_ONE);
+				resultBody.setResultList(resultList);
+
+				ret.setResultBody(resultBody);
+			} else {
+				//2、数据是否一致
+				if(StringUtils.isNotBlank(roadNumber) && StringUtils.isBlank(vin)){
+					if(!roadNumber.equalsIgnoreCase(responseObject.getData().getRoadTransportCertificateNumber())) {
+						resultList.add(SjjhConstants.ERROR_RETURN_ROADNUMBER);
+					}
+				} else if(StringUtils.isBlank(roadNumber) && StringUtils.isNotBlank(vin)){
+					if(!vin.equalsIgnoreCase(responseObject.getData().getVinNo())) {
+						resultList.add(SjjhConstants.ERROR_RETURN_VIN);
+					}
+				} else if(!vin.equalsIgnoreCase(responseObject.getData().getVinNo())) {
+					resultList.add(SjjhConstants.ERROR_RETURN_VIN);
+				}
+
+				if(!resultList.isEmpty()){
+					//数据不一致响应
+					if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_NO_MATCH);
+					} else {
+		    			ret.setResultCode(Constant.UN_MATCH_CODE);
+		    		}
+
+					resultBody.setCode(SjjhConstants.PARA_TWO);
+					resultBody.setResultList(resultList);
+
+					ret.setResultBody(resultBody);
+				} else {
+					//数据一致响应
+					if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+						ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+					} else {
+						ret.setResultCode(Constant.MATCH_CODE);
+					}
+					ret.setResultBody(responseObject.getData());
+				}
+			}
+		} else if(SjjhConstants.INTERFACE_CODE_110000.equals(resultCode)) {
+			// 查询结果为空
+			if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+				ret.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+			} else {
+    			ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+    		}
+
+			resultBody.setCode(SjjhConstants.PARA_ONE);
+			List<String> resultList = getErrorParamList();
+			resultBody.setResultList(resultList);
+
+			ret.setResultBody(resultBody);
+		} else if(SjjhConstants.INTERFACE_CODE_140002.equals(resultCode)) {
+			// 参数错误
+			if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+				ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+			} else {
+    			ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+    		}
+
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = getErrorParamList();
+			resultBody.setResultList(resultList);
+
+			ret.setResultBody(resultBody);
+		} else {
+			// 其他错误
+			if(Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+				ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+			} else {
+    			ret.setResultCode(Constant.OTHER_ERROR_CODE);
+    		}
+
+			resultBody.setCode(SjjhConstants.PARA_THREE);
+			List<String> resultList = getErrorParamList();
+			resultBody.setResultList(resultList);
+
+			ret.setResultBody(resultBody);
+		}
+		
+		return ret;
+	}
+	
+	/**
+	 * 获取错误返回中相关参数LIST
+	 * @return
+	 */
+	private List<String> getErrorParamList() {
+		List<String> resultList = new ArrayList<>();
+		resultList.add(SjjhConstants.ERROR_RETURN_VEHICLENUMBER);
+		resultList.add(SjjhConstants.ERROR_RETURN_COLOR_CODE);
+		resultList.add(SjjhConstants.ERROR_RETURN_ROADNUMBER);
+		resultList.add(SjjhConstants.ERROR_RETURN_VIN);
+		
+		return resultList;
+	}
+
+
+
+}

+ 94 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034Service.java

@@ -0,0 +1,94 @@
+package info.aspirecn.iov.sjjh.supplier10000034.service;
+
+
+import javax.servlet.http.HttpServletRequest;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+
+/**
+ * 
+ * @author bzh
+ *
+ */
+public interface Supplier10000034Service {
+
+	 
+	/**
+	 * 获取企业信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject queryEnterprise(HttpServletRequest request,String customBody,int outTime);
+	/**
+	 * 获取企业信息-数据信用
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject queryEnterpriseSjxy(HttpServletRequest request,String customBody,int outTime);
+	
+	/**
+	 * 获取人员信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject queryPerson(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 获取人员信息-数据信用
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject queryPersonSjxy(HttpServletRequest request, String customBody,
+														   int outTime);
+	/**
+	 * 查询车辆许可证信息
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+    public ChannelTypeHandleResponseObject checkVehiclePermit(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 查询车辆许可证信息-数据信用
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject checkVehiclePermitSjxy(HttpServletRequest request, String customBody, int outTime);
+	/**
+	 * 车辆入网核验
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+    public ChannelTypeHandleResponseObject checkVehicleExist(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 车辆入网核验-数据信用
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	public ChannelTypeHandleResponseObject checkVehicleExistSjxy(HttpServletRequest request, String customBody, int outTime);
+	/**
+	 * 超载核验
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+    ChannelTypeHandleResponseObject overloadCheck(HttpServletRequest request, String customBody, int outTime);
+}

File diff suppressed because it is too large
+ 1288 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/service/Supplier10000034ServiceImpl.java


+ 27 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/CheckVehicleExistResponseObject.java

@@ -0,0 +1,27 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 车辆入网核验响应对象
+ * @author lixinxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class CheckVehicleExistResponseObject {
+	
+	@JsonProperty("resultCode")
+	private String resultCode;
+
+	@JsonProperty("resultMsg")
+	private String resultMsg;
+
+	@JsonProperty("traceId")
+	private String traceId;
+
+	@JsonProperty("data")
+	private String data;
+}

+ 25 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseJsonResolveObject.java

@@ -0,0 +1,25 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class EnterpriseJsonResolveObject {
+	/**企业名称*/
+	private String carrier;	
+	/**经营许可证号*/
+	private String permitNumber;	
+	/**期限开始日期(yyyyMMdd)*/
+	private String periodStartDate;
+	/**期限结束日期(yyyyMMdd)*/
+	private String periodEndDate;
+	/**六位数省份行政区划代码,后四位0000*/
+	private String provinceCode;	
+	
+}

+ 13 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterprisePermitRequestObject.java

@@ -0,0 +1,13 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+
+@Data
+public class EnterprisePermitRequestObject {
+	//企业名称
+    private String entName;
+    //道路运输经营许可证编号
+    private String permitNumber;
+    //省份行政区划代码
+    private String provinceCode;
+}

+ 49 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterprisePermitResponseObject.java

@@ -0,0 +1,49 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class EnterprisePermitResponseObject {
+		/**返回码*/
+		private String resultCode;	
+		/**返回信息*/
+		private String resultMsg;	
+		/**当前请求服务端标识,用于唯一标识本次请求*/
+		private String traceId;	
+		/**返回数据*/
+		private EnterpriseResponseChildObject data;	
+		
+		@Data
+		public static class EnterpriseResponseChildObject {
+			/**data属性-企业名称*/
+			private String enterpriseName;
+			/**data属性-组织机构代码*/
+			private String organizationCode;
+			/**data属性-企业注册地址*/
+			private String enterpriseRegistrationAddress;
+			/**	data属性-道路运输经营许可证编号*/
+			private String permitNumber;
+			/**	data属性-企业经营范围*/
+			private String businessScope;
+			/**	data属性-道路运输经营许可证核发日期*/
+			private String permitGrantDate;
+			/**data属性-道路运输经营许可证有效期自*/
+			private String periodStartDate;
+			/**	data属性-道路运输经营许可证有效期至*/
+			private String periodEndDate;
+			/**	data属性-道路运输经营许可证发证单位*/
+			private String certificationUnit;
+			/**	data属性-经营状态*/
+			private String operatingStatus;
+			/**	data属性-备注*/
+			private String remark;
+		}
+		
+	}

+ 43 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseResponseObject.java

@@ -0,0 +1,43 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class EnterpriseResponseObject {
+		/**返回码*/
+		private String resultCode;	
+		/**返回信息*/
+		private String resultMsg;	
+		/**当前请求服务端标识,用于唯一标识本次请求*/
+		private String traceId;	
+		/**返回数据*/
+		private EnterpriseResponseChildObject data;	
+		
+		@Data
+		public static class EnterpriseResponseChildObject {
+			/**data属性-企业名称*/
+			private String enterpriseName;
+			/**data属性-企业注册地址*/
+			private String enterpriseRegistrationAddress;
+			/**data属性-许可证编号*/
+			private String permitNumber;
+			/**	data属性-经营范围*/
+			private String businessScope;
+			/**	data属性-许可证发放日期(yyyyMMdd)*/
+			private String permitGrantDate;
+			/**	data属性-期限开始日期(yyyyMMdd)*/
+			private String periodStartDate;
+			/**data属性-期限结束日期(yyyyMMdd)*/
+			private String periodEndDate;
+			/**	data属性-发证单位*/
+			private String certificationUnit;
+		}
+		
+	}

+ 9 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/EnterpriseSjxyRequestObject.java

@@ -0,0 +1,9 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+
+@Data
+public class EnterpriseSjxyRequestObject {
+    private String carrier;
+    private String provinceCode;
+}

+ 27 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/OverloadCheckJsonResolveObject.java

@@ -0,0 +1,27 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析超载请求参数JSON
+ * @author lixnxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class OverloadCheckJsonResolveObject {
+	/**车牌号*/
+	@JsonProperty("vehicleNumber")
+	private String vehicleNumber;
+
+	/**牌照颜色类型代码*/
+	@JsonProperty("licensePlateTypeCode")
+	private String licensePlateTypeCode;
+
+	/**货物毛重*/
+	@JsonProperty("vehicleTonnage")
+	private String vehicleTonnage;
+	
+}

+ 26 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonJsonResolveObject.java

@@ -0,0 +1,26 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class PersonJsonResolveObject {
+	
+	/**人员姓名*/
+	private String nameOfPerson;	
+	/**从业资格证号*/
+	private String qualificationCertificateNumber;	
+	/**有效期限开始日期(yyyyMMdd)*/
+	private String periodStartDate;
+	/**有效期限结束日期(yyyyMMdd)*/
+	private String periodEndDate;
+	/**六位数省份行政区划代码,后四位0000*/
+	private String provinceCode;	
+	
+}

+ 24 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonQualificationRequestObject.java

@@ -0,0 +1,24 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class PersonQualificationRequestObject {
+	
+	/**人员姓名*/
+	private String nameOfPerson;	
+	/**从业资格证号*/
+	private String qualificationCertificateNumber;	
+	/**身份证号码*/
+	private String identityDocumentNumber;
+	/**六位数省份行政区划代码,后四位0000*/
+	private String provinceCode;	
+	
+}

+ 58 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonQualificationResponseObject.java

@@ -0,0 +1,58 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import java.util.List;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class PersonQualificationResponseObject {
+		/**返回码*/
+		private String resultCode;	
+		/**返回信息*/
+		private String resultMsg;	
+		/**当前请求服务端标识,用于唯一标识本次请求*/
+		private String traceId;	
+		/**返回数据*/
+		private PersonResponseChildObject data;	
+		
+		@Data
+		public static class PersonResponseChildObject {
+			/**data属性-人员姓名*/
+			private String nameOfPerson;
+			/**data属性-性别*/
+			private String gender;
+			/**data属性-身份证号码*/
+			private String identityDocumentNumber;
+			/**省编码*/
+			private String provinceCode;
+			
+			private List<QualificationCertificateInfo> qualificationCertificateInfo;
+			
+		}
+		
+		@Data
+		public static class QualificationCertificateInfo {
+			/**从业资格证号*/
+			private String qualificationCertificateNumber;
+			/**从业资格类别*/
+			private String qualificationCertificateCategoryCode;
+			/**certificationUnit*/
+			private String certificationUnit;
+			/**证件初次发放日期)*/
+			private String licenseInitialReleaseDate;
+			/**	有效期限开始日期*/
+			private String periodStartDate;
+			/**有效期限结束日期)*/
+			private String periodEndDate;
+			/**证照状态*/
+			private String certificateState;
+		}
+		
+	}

+ 49 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonResponseObject.java

@@ -0,0 +1,49 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析请求JSON串对象
+ * @author bzh
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class PersonResponseObject {
+		/**返回码*/
+		private String resultCode;	
+		/**返回信息*/
+		private String resultMsg;	
+		/**当前请求服务端标识,用于唯一标识本次请求*/
+		private String traceId;	
+		/**返回数据*/
+		private PersonResponseChildObject data;	
+		
+		@Data
+		public static class PersonResponseChildObject {
+			/**data属性-人员姓名*/
+			private String nameOfPerson;
+			/**data属性-性别*/
+			private String gender;
+			/**data属性-身份证号码*/
+			private String identityDocumentNumber;
+			/**data属性-从业资格证号*/
+			private String qualificationCertificateNumber;
+			/**data属性-从业资格类别*/
+			private String qualificationCertificateCategoryCode;
+			/**data属性-发证机构名称*/
+			private String certificationUnit;
+			/**data属性-证件初次发放日期(yyyyMMdd)*/
+			private String licenseInitialReleaseDate;
+			/**	data属性-有效期限开始日期(yyyyMMdd)*/
+			private String periodStartDate;
+			/**data属性-有效期限结束日期(yyyyMMdd)*/
+			private String periodEndDate;
+			/**data属性-通讯地址*/
+			private String communicationNumber;
+			/**data属性-移动电话号码*/
+			private String mobileTelephoneNumber;
+		}
+		
+	}

+ 11 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/PersonSjxyRequestObject.java

@@ -0,0 +1,11 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+
+@Data
+public class PersonSjxyRequestObject {
+    private String nameOfPerson;
+    private String identityDocumentNumber;
+    private String qualificationCertificateNumber;
+    private String provinceCode;
+}

+ 15 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/ResultBody.java

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

+ 9 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleExistSjxyRequestObject.java

@@ -0,0 +1,9 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+
+@Data
+public class VehicleExistSjxyRequestObject {
+    private String plateNum;
+    private String plateColor;
+}

+ 23 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleInToNetResolveObject.java

@@ -0,0 +1,23 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析车辆入网核验请求参数JSON
+ * @author lixnxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class VehicleInToNetResolveObject {
+	/**车牌号*/
+	@JsonProperty("vehicleNumber")
+	private String vehicleNumber;
+
+	/**牌照颜色类型代码*/
+	@JsonProperty("licensePlateTypeCode")
+	private String licensePlateTypeCode;
+	
+}

+ 114 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitDetailsResponseObject.java

@@ -0,0 +1,114 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 查询车辆运输许可证信息接口响应对象
+ * @author lixinxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class VehiclePermitDetailsResponseObject {
+	/**返回码*/
+	@JsonProperty("resultCode")
+	private String resultCode;
+
+	/**返回信息*/
+	@JsonProperty("resultMsg")
+	private String resultMsg;
+
+	/**链路跟踪编号*/
+	@JsonProperty("traceId")
+	private String traceId;
+
+	/**返回数据*/
+	@JsonProperty("data")
+	private Particulars data;
+
+	@Data
+	public static class Particulars {
+		
+		/**车牌号*/
+		@JsonProperty("vehicleNumber")
+		private String vehicleNumber;
+
+		/**牌照颜色类型代码*/
+		@JsonProperty("licensePlateTypeCode")
+		private String licensePlateTypeCode;
+
+		/**辆车架号*/
+		@JsonProperty("vinNo")
+		private String vinNo;
+
+		/**车辆类型*/
+		@JsonProperty("vehicleClassification")
+		private String vehicleClassification;
+
+		/**车辆车长*/
+		@JsonProperty("vehicleLength")
+		private String vehicleLength;
+
+		/**车辆车宽*/
+		@JsonProperty("vehicleWidth")
+		private String vehicleWidth;
+
+		/**车辆车高*/
+		@JsonProperty("vehicleHeight")
+		private String vehicleHeight;
+
+		/**车辆准牵引总质量*/
+		@JsonProperty("vehicleMaximumTractionWeight")
+		private String vehicleMaximumTractionWeight;
+
+		/**核定载质量*/
+		@JsonProperty("vehicleTonnage")
+		private String vehicleTonnage;
+
+		/**车辆营运状态*/
+		@JsonProperty("businessState")
+		private String businessState;
+
+		/**车辆营运状态代码*/
+		@JsonProperty("businessStateCode")
+		private String businessStateCode;
+
+		/**道路运输证号*/
+		@JsonProperty("roadTransportCertificateNumber")
+		private String roadTransportCertificateNumber;
+
+		/**发证单位*/
+		@JsonProperty("certificationUnit")
+		private String certificationUnit;
+
+		/**有效期起*/
+		@JsonProperty("periodStartDate")
+		private String periodStartDate;
+
+		/**有效期止*/
+		@JsonProperty("periodEndDate")
+		private String periodEndDate;
+
+		/**经营范围*/
+		@JsonProperty("businessScope")
+		private String businessScope;
+
+		/**辆年度审验有效期至*/
+		@JsonProperty("checkStateExpireDate")
+		private String checkStateExpireDate;
+
+		/**业户名称*/
+		@JsonProperty("vehicleCorporationName")
+		private String vehicleCorporationName;
+
+		/**发证日期*/
+		@JsonProperty("issuingDate")
+		private String issuingDate;
+
+	}
+}

+ 35 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitJsonResolveObject.java

@@ -0,0 +1,35 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析车辆请求参数JSON
+ * @author lixnxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class VehiclePermitJsonResolveObject {
+	/**车牌号*/
+	@JsonProperty("vehicleNumber")
+	private String vehicleNumber;
+
+	/**牌照颜色类型代码*/
+	@JsonProperty("licensePlateTypeCode")
+	private String licensePlateTypeCode;
+
+	/**道路运输许可证号*/
+	@JsonProperty("roadTransportCertificateNumber")
+	private String roadTransportCertificateNumber;
+
+	/**有效期起*/
+	@JsonProperty("periodStartDate")
+	private String periodStartDate;
+
+	/**有效至*/
+	@JsonProperty("periodEndDate")
+	private String periodEndDate;
+	
+}

+ 28 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitSecondJsonResolveObject.java

@@ -0,0 +1,28 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析车辆请求参数JSON
+ * @author lixnxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class VehiclePermitSecondJsonResolveObject {
+	/**车牌号*/
+	private String vehicleNumber;
+
+	/**牌照颜色类型代码:1=蓝色;2=黄色*/
+	private String vehiclePlateColorCode;
+
+	/**道路运输许可证号*/
+	private String roadTransportCertificateNumber;
+
+	/**有效期起*/
+	private String vin;
+
+	
+}

+ 9 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehiclePermitSjxyRequstObject.java

@@ -0,0 +1,9 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+import lombok.Data;
+
+@Data
+public class VehiclePermitSjxyRequstObject {
+    private String vehicleNumber;
+    private String licensePlateTypeCode;
+}

+ 90 - 0
src/main/java/info/aspirecn/iov/sjjh/supplier10000034/vo/VehicleRoadTransportResponseObject.java

@@ -0,0 +1,90 @@
+package info.aspirecn.iov.sjjh.supplier10000034.vo;
+
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 查询车辆道路运输证接口响应对象
+ * @author minmin
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class VehicleRoadTransportResponseObject {
+	/**返回码*/
+	private String resultCode;
+
+	/**返回信息*/
+	private String resultMsg;
+
+	/**链路跟踪编号*/
+	private String traceId;
+
+	/**返回数据*/
+	private VehicleRoadTransportChildObject data;
+
+	@Data
+	public static class VehicleRoadTransportChildObject {
+		
+		/**车牌号*/
+		private String vehicleNumber;
+
+		/**牌照颜色类型代码*/
+		private String licensePlateTypeCode;
+
+		/**辆车架号*/
+		private String vinNo;
+
+		/**车辆长度,单位:mm*/
+		private String vehicleLength;
+
+		/**车辆车宽,单位:mm*/
+		private String vehicleWidth;
+
+		/**车辆车高,单位:mm*/
+		private String vehicleHeight;
+
+		/**车辆准牵引总质量,单位:吨*/
+		private String vehicleMaximumTractionWeight;
+		
+		/**车辆营运状态*/
+		private String businessState;
+		
+		/**车辆类型*/
+		private String vehicleClassification;
+		
+		/**燃料类型*/
+		private String fuelType;
+
+		/**核定载质量,单位:吨*/
+		private String vehicleTonnage;
+
+		/**道路运输证号*/
+		private String roadTransportCertificateNumber;
+		
+		/**有效期起,YYYYMMDD*/
+		private String periodStartDate;
+
+		/**有效期止,YYYYMMDD*/
+		private String periodEndDate;
+		
+		/**发证单位*/
+		private String certificationUnit;
+		
+		/**业户名称*/
+		private String vehicleCorporationName;
+
+		/**经营范围*/
+		private String businessScope;
+		
+		/**许可证编号*/
+		private String permitNumber;
+
+		/**组织机构代码*/
+		private String organizationCode;
+
+		
+
+	}
+}

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

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

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

@@ -0,0 +1,25 @@
+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="iov-sjjh-servicenode-supplier-10000007" />
+	<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>

+ 8 - 0
src/main/resources/docker/Dockerfile

@@ -0,0 +1,8 @@
+FROM hub.i139.cn/rdc-commons/official-openjdk:8u191-jre-alpine3.9
+VOLUME /tmp
+COPY target/lib/ ./lib/
+ADD *.jar app.jar
+RUN sh -c 'touch /app.jar'
+ENV JAVA_OPTS="-Xmx256M -Xms256M -Xss256k -Duser.timezone=Asia/Shanghai"
+ENV APP_OPTS=""
+ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

BIN
src/main/resources/lib/openapi-sdk-6.0.jar