Browse Source

first commit

15810770710@163.com 4 years ago
parent
commit
bf3bf8e8f8
91 changed files with 9741 additions and 0 deletions
  1. 264 0
      pom.xml
  2. 36 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/Application.java
  3. 84 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/CompanyInfoAction.java
  4. 60 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/DrivingLicenseActionImpl.java
  5. 96 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/FaceCheckAction.java
  6. 85 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/ForeignInvestAction.java
  7. 106 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/IdentityCardAction.java
  8. 66 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/TelecomOnlineStatusAction.java
  9. 65 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/TelecomOnlineTimeAction.java
  10. 53 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/VehicleViolationInfoActionImpl.java
  11. 412 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/YHChannelActionImpl.java
  12. 33 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/config/SwaggerConfig.java
  13. 106 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/constant/SjjhConstant.java
  14. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/CompanyInfoService.java
  15. 16 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/DrivingLicenseService.java
  16. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/FaceCheckService.java
  17. 11 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/ForeignInvestService.java
  18. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/IdentityCardService.java
  19. 27 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/TelecomOnlineStatusService.java
  20. 27 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/TelecomOnlineTimeService.java
  21. 9 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/VehicleViolationInfoService.java
  22. 111 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/YHChannelService.java
  23. 122 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/CompanyInfoServiceImpl.java
  24. 284 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/DrivingLicenseServiceImpl.java
  25. 592 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/FaceCheckServiceImpl.java
  26. 114 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/ForeignInvestServiceImpl.java
  27. 337 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/IdentityCardServiceImpl.java
  28. 413 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/TelecomOnlineStatusServiceImpl.java
  29. 413 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/TelecomOnlineTimeServiceImpl.java
  30. 236 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/VehicleViolationInfoServiceImpl.java
  31. 2275 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/YHChannelServiceImpl.java
  32. 78 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/AesUtil.java
  33. 17 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/CommonUtil.java
  34. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/CompanyInfoProperties.java
  35. 97 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DESEncrypt.java
  36. 107 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DESedeUtil.java
  37. 93 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DecodeUtil.java
  38. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/FaceCompareProperties.java
  39. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/ForeignInvestProperties.java
  40. 83 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/IdentityCardUpApiHttp.java
  41. 33 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/LocationSupplierProperties.java
  42. 121 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/LocationUtil.java
  43. 63 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/NotifyThread.java
  44. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/SpellComparator.java
  45. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/SupplierProperties.java
  46. 288 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/Utils.java
  47. 47 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/YHProperties.java
  48. 13 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineJsonResolveObject.java
  49. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineStatusResponseObject.java
  50. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineTimeResponseObject.java
  51. 25 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CommonRequestObject.java
  52. 11 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CompanyInfoRequestObject.java
  53. 36 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DianXinMonthCostResponseObject.java
  54. 38 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DianXinThreeCheckResponseObject.java
  55. 33 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DrivingLicenseJsonResolveObject.java
  56. 46 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DrivingLicenseResponseObject.java
  57. 32 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/FaceCheckResObject.java
  58. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/FaceCompareRequestObject.java
  59. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/FaceCompareResponseObject.java
  60. 11 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/ForeignInvestResponseObject.java
  61. 57 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/IdentityCardCheckResponseObject.java
  62. 23 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/IdentityCardJsonResolveObject.java
  63. 32 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongCostScoreResponseObject.java
  64. 36 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongOnlineCheckResponseObject.java
  65. 13 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongOnlineJsonObject.java
  66. 41 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongThreeCheckResponseObject.java
  67. 15 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckQuestObject.java
  68. 15 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckQuestResponseObject.java
  69. 27 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckResponseDataObject.java
  70. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationRequestObject.java
  71. 18 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/NotifySms.java
  72. 16 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/QueryMobileConsumeJsonResolveObject.java
  73. 15 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/ResultBody.java
  74. 30 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/TelecomOnlineResObject.java
  75. 20 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/ThreeCheckRequestObject.java
  76. 21 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/TwoElementsRequestObject.java
  77. 22 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/TwoParamIdCardRequestObject.java
  78. 34 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/TwoParamIdCardResponseObject.java
  79. 28 0
      src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/VehicleViolationInfoJsonResolveObject.java
  80. 134 0
      src/main/resources/config/application-test.yml
  81. 3 0
      src/main/resources/config/banner.txt
  82. 46 0
      src/main/resources/config/bootstrap.yml
  83. 163 0
      src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-hwtest.yml
  84. 146 0
      src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-jkonline.yml
  85. 146 0
      src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-onlineJar.yml
  86. 37 0
      src/main/resources/config/logback-spring.xml
  87. 174 0
      src/main/resources/config/test.yaml
  88. 8 0
      src/main/resources/docker/Dockerfile
  89. 279 0
      src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/action/ActonTest.java
  90. 1 0
      src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/package-info.java
  91. 74 0
      src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/service/BTYChannelServiceTest.java

+ 264 - 0
pom.xml

@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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></relativePath>
+    </parent>
+
+    <groupId>info.aspirecn.iov.sjjh</groupId>
+    <artifactId>iov-sjjh-servicenode-supplier-10000003</artifactId>
+    <version>1.4.1</version>
+
+    <dependencies>
+        <!-- 服务注册 -->
+        <dependency>
+
+            <groupId>org.springframework.boot</groupId>
+
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.70</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+
+        <!--链路日志-->
+        <dependency>
+            <groupId>info.aspirecn.rdc</groupId>
+            <artifactId>aspirecloud-commons-sleuthlog-starter</artifactId>
+            <version>5.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-servicenode-sms-interface</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-servicenode-channel-interface</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <!--错误日志-->
+        <dependency>
+            <groupId>info.aspirecn.rdc</groupId>
+            <artifactId>aspirecloud-commons-errorlog-starter</artifactId>
+            <version>5.0.2</version>
+        </dependency>
+
+        <!--常量-->
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-commons-lang</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-servicenode-supplier-10000003-interface</artifactId>
+            <version>1.0.0</version>
+        </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.cloud</groupId>
+            <artifactId>spring-cloud-config-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>Finchley.SR2</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>
+                            <groupId>info.aspirecn.iov.sjjh</groupId>
+                            <artifactId>iov-sjjh-servicenode-supplier-10000003-interface</artifactId>
+                        </include>
+                        <include>
+                            <groupId>info.aspirecn.iov.sjjh</groupId>
+                            <artifactId>iov-sjjh-commons-lang</artifactId>
+                        </include>
+                        <include>
+                            <groupId>info.aspirecn.iov.sjjh</groupId>
+                            <artifactId>iov-sjjh-servicenode-sms-interface</artifactId>
+                        </include>
+                        <include>
+                            <groupId>info.aspirecn.iov.sjjh</groupId>
+                            <artifactId>iov-sjjh-servicenode-channel-interface</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>

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

@@ -0,0 +1,36 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh;
+
+import info.aspirecn.rdc.aspirecloud.node.except.annotations.EnableAspireCloudRdcHandleExcept;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
+import org.springframework.util.StopWatch;
+
+/**
+ * @author jianggang
+ * @date  2018/10/25 15:49:24
+ */
+
+@SpringBootApplication
+@EnableAspireCloudRdcHandleExcept
+@Slf4j
+@EnableEurekaClient
+@EnableFeignClients(basePackages={"info.aspirecn.rdc","info.aspirecn.iov.sjjh"})
+@ComponentScan("info.aspirecn.rdc.aspirecloud.node.except")
+@ComponentScan("info.aspirecn.rdc.aspirecloud.node.brave")
+public class Application {
+    public static void main(String[] args) {
+        StopWatch watch = new StopWatch();
+        watch.start();
+        ApplicationContext context = SpringApplication.run(Application.class, args);
+        Environment environment = context.getBean(Environment.class);
+        String applicationName = environment.getProperty("spring.application.name");
+        watch.stop();
+        log.info("{} 启动完毕,times={}s", applicationName, watch.getTotalTimeSeconds());
+    }
+}

+ 84 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/CompanyInfoAction.java

@@ -0,0 +1,84 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+import java.io.UnsupportedEncodingException;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import com.google.common.base.Preconditions;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.CompanyInfoService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.CompanyInfoProperties;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+/*
+ * 董监高对外投资接口*/
+@Slf4j
+@RestController
+public class CompanyInfoAction {
+	@Autowired
+	CompanyInfoService companyInfoService;
+	private String xRresponseCode = "x-responseCode";
+	private String xIsCharge = "x-isCharge";
+	@Autowired
+	CompanyInfoProperties property;
+	@ApiOperation(value = "企业信息查询")
+    @PostMapping("/companyInfo.do")
+	public ChannelTypeHandleResponseObject companyInfo(@RequestHeader(value = "channelId", required = true) String channelId,
+	                                                     @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+	                                                     @RequestParam(name = "outTime",required = false) Integer outTime,
+	                                                     @RequestParam(name = "customBody",required = false) String customBody) {
+	    Preconditions.checkArgument(StringUtils.isNotBlank(channelId),"通道id不能为空");
+	    Preconditions.checkArgument(StringUtils.isNotBlank(customBody),"查询参数不能为空");
+	    log.info("---------->企业信息请求:channelId:{},ifJkCode:{},outTime:{}, customBody:{}",
+	                channelId,
+	                ifJkCode,
+	                outTime,
+	                customBody);
+	    //设置返回码
+	    HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+	    /**初始化设置日志记录*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        request.setAttribute(xIsCharge,Constant.IS_NOT_CHARGE);
+        request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        ChannelTypeHandleResponseObject responseObject = new ChannelTypeHandleResponseObject();
+        try{
+             responseObject = companyInfoService.companyInfo(request,outTime,customBody);
+	         if(responseObject.getCode() != 1){
+	             request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+	         }else{
+	         	 if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+	              	String code = property.getCode().get(responseObject.getResultCode());
+	              	if(code!=null){
+	              		responseObject.setResultCode(Integer.valueOf(code));
+	              	}
+	              }
+	              if(property.getDesc().get(responseObject.getResultCode())!=null){
+	              	responseObject.setResultDesc(property.getDesc().get(responseObject.getResultCode()));
+	              }
+	             request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_SUCCESS_CODE);
+	         }
+	         if(customBody != null){
+	             try {
+	                 request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+	             } catch (UnsupportedEncodingException e) {
+	                 log.error("",e);
+	             }
+	         }
+	         request.setAttribute(xIsCharge,responseObject.getIsCharge());
+         }catch(Exception  ex){
+            	ErrorUtils.captureException(ex);
+            	log.error("error message:{}",ex);
+         }
+	     return responseObject;    
+	}
+
+}

+ 60 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/DrivingLicenseActionImpl.java

@@ -0,0 +1,60 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.DrivingLicenseService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.DrivingLicenseAction;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2019/7/8 15:11
+ * @version: V1.0
+ **/
+@RestController
+@Slf4j
+public class DrivingLicenseActionImpl implements DrivingLicenseAction {
+    private String xResponseCode = "x-responseCode";
+    private String xIsCharge = "x-isCharge";
+    @Autowired
+    DrivingLicenseService service;
+
+    @Override
+    public ChannelTypeHandleResponseObject drivingLicense(String channelId, int outTime, String customBody) {
+        log.info("行驶证三要素--->channelId:{}--->outTime:{},--->customBody:{}", channelId, outTime, customBody);
+
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                .getRequest();
+
+        //调用service
+        ChannelTypeHandleResponseObject responseObject = service.drivingLicense(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if (responseObject.getCode() != Constant.SUCCESS) {
+            request.setAttribute(xResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+        } else {
+            request.setAttribute(xResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }
+        request.setAttribute(xIsCharge, responseObject.getIsCharge());
+
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+        } catch (Exception ex) {
+            ErrorUtils.captureException(ex);
+        }
+
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        return responseObject;
+    }
+}

+ 96 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/FaceCheckAction.java

@@ -0,0 +1,96 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.FaceCheckService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.FaceCheckActionI;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+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 javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 14:24:47
+ * @Description
+ */
+
+@Slf4j
+@RestController
+public class FaceCheckAction implements FaceCheckActionI {
+
+
+    @Autowired
+    private FaceCheckService faceCheckService;
+
+    @Override
+    public ChannelTypeHandleResponseObject faceCheck(@RequestHeader(value = "channelId", required = true) String channelId,
+                                                     @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+                                                     @RequestParam(name = "outTime",required = false) Integer outTime,
+                                                     @RequestBody String customBody) {
+        JSONObject paramObject = JSON.parseObject(customBody);
+        paramObject.put("photo", "base64");
+        log.info("---------->云海人像对比请求:channelId:{},ifJkCode:{},outTime:{}, customBody:{}",
+                channelId,
+                ifJkCode,
+                outTime,
+                paramObject);
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        /**设置上游返回码日志记录-默认*/
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        ChannelTypeHandleResponseObject res = faceCheckService.callFaceCheck(request, channelId, ifJkCode, outTime, customBody);
+        /**日志记录是否计费*/
+        request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY, res.getIsCharge());
+        /**日志记录通道响应码*/
+        if(Constant.SUCCESS == res.getCode()){
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }else{
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+        }
+        /**日志记录通道customBody*/
+        try {
+            log.info("photoIdentityCheck.actionBase64={}", Base64.encodeBase64String(paramObject.toJSONString().getBytes("utf-8")));
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(paramObject.toJSONString().getBytes("utf-8")));
+        } catch (Exception ex) {
+            ErrorUtils.captureException(ex);
+        }
+        return res;
+    }
+
+    @Override
+    public ChannelTypeHandleResponseObject faceCheckWZDecode(@RequestHeader(value = "channelId", required = true) String channelId,
+                                                     @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+                                                     @RequestParam(name = "outTime",required = false) Integer outTime,
+                                                     @RequestBody String customBody) {
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        /**设置上游返回码日志记录-默认*/
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        ChannelTypeHandleResponseObject res = faceCheckService.faceCheckWZDecode(request, channelId, ifJkCode, outTime, customBody);
+        /**日志记录是否计费*/
+        request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY, res.getIsCharge());
+        /**日志记录通道响应码*/
+        if(Constant.SUCCESS == res.getCode()){
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }else{
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+        }
+        return res;
+    }
+}

+ 85 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/ForeignInvestAction.java

@@ -0,0 +1,85 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+import java.io.UnsupportedEncodingException;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import com.google.common.base.Preconditions;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.ForeignInvestService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.ForeignInvestProperties;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+/*
+ * 董监高对外投资接口*/
+@Slf4j
+@RestController
+public class ForeignInvestAction {
+	@Autowired
+	ForeignInvestService foreignInvestService;
+	private String xRresponseCode = "x-responseCode";
+	private String xIsCharge = "x-isCharge";
+	@Autowired
+	ForeignInvestProperties property;
+	@ApiOperation(value = "企业人员董监高查询")
+    @PostMapping("/foreignInvest.do")
+	public ChannelTypeHandleResponseObject foreignInvest(@RequestHeader(value = "channelId", required = true) String channelId,
+	                                                     @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+	                                                     @RequestParam(name = "outTime",required = false) Integer outTime,
+	                                                     @RequestParam(name = "customBody",required = false) String customBody) {
+	        Preconditions.checkArgument(StringUtils.isNotBlank(channelId),"通道id不能为空");
+	        Preconditions.checkArgument(StringUtils.isNotBlank(customBody),"查询参数不能为空");
+	        log.info("---------->董监高对外投资请求:channelId:{},ifJkCode:{},outTime:{}, customBody:{}",
+	                channelId,
+	                ifJkCode,
+	                outTime,
+	                customBody);
+	        //设置返回码
+	        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+	        /**初始化设置日志记录*/
+            request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+            request.setAttribute(xIsCharge,Constant.IS_NOT_CHARGE);
+            request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+            ChannelTypeHandleResponseObject responseObject = new ChannelTypeHandleResponseObject();
+            try{
+            	responseObject=foreignInvestService.foreignInvest(request,outTime,customBody);
+            	if(responseObject.getCode() != 1){
+            		request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+            	}else{
+            		if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+            			String code = property.getCode().get(responseObject.getResultCode());
+            			if(code!=null){
+            				responseObject.setResultCode(Integer.valueOf(code));
+            			}
+            		}
+            		if(property.getDesc().get(responseObject.getResultCode())!=null){
+            			responseObject.setResultDesc(property.getDesc().get(responseObject.getResultCode()));
+            		}
+            		request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_SUCCESS_CODE);
+            	}
+            	if(customBody != null){
+            		try {
+            			request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+            		} catch (UnsupportedEncodingException e) {
+            			log.error("",e);
+            		}
+            	}
+            	request.setAttribute(xIsCharge,responseObject.getIsCharge());
+            }catch(Exception  ex){
+            	ErrorUtils.captureException(ex);
+            	log.error("error message:{}",ex);
+            }
+	        return responseObject;
+	}
+
+}

+ 106 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/IdentityCardAction.java

@@ -0,0 +1,106 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.IdentityCardService;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ *
+ * @author lixinxu
+ *
+ */
+@Slf4j
+@RestController
+public class IdentityCardAction {
+	/**日志参数中的错误参数名*/
+	private static final String LOG_ERROR_PARA = "x-responseCode";
+	/**日志参数中的是否收费*/
+	private static final String LOG_FEE_PARA = "x-isCharge";
+
+	@Autowired
+	private IdentityCardService service;
+
+
+	@ApiOperation(value = "身份证二要素验证", notes = "")
+	@PostMapping(value = "/identityCardTwoPointCheck.do")
+	public ChannelTypeHandleResponseObject identityCardTwoPointCheck(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="交科码|卓望码")@RequestHeader(name="ifJkCode")  String ifJkCode,
+			@ApiParam(value="超时时间,单位:毫秒")@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.identityCardTwoPointCheck(request, customBody, outTime, ifJkCode);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		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("UTF-8")));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000035Action.identityCardTwoPointCheck.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+
+	@ApiOperation(value = "身份证二要素验证-WeiZhong解密", notes = "")
+	@PostMapping(value = "/identityCardTwoWeiZhongDecode.do")
+	public ChannelTypeHandleResponseObject identityCardTwoWeiZhongDecode(
+			@ApiParam(value="通道ID")@RequestHeader(name="channelId")  String channelId,
+			@ApiParam(value="交科码|卓望码")@RequestHeader(name="ifJkCode")  String ifJkCode,
+			@ApiParam(value="超时时间,单位:毫秒")@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.twoElementsCheckWeiZhongDecode(request, customBody, outTime, ifJkCode);
+
+		//把接口参数、调用结果和是否收费放入访问日志中
+		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("UTF-8")));
+
+		} catch (Exception ex) {
+			ErrorUtils.captureException(ex);
+			log.error("Supplier10000003Action.twoElementsCheckWeiZhongDecode.Exception{}", ex);
+		}
+
+		request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+		return ret;
+	}
+}

+ 66 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/TelecomOnlineStatusAction.java

@@ -0,0 +1,66 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.TelecomOnlineStatusService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.TelecomOnlineStatusActionI;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+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 javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/11 09:40:48
+ * @Description
+ */
+
+@Slf4j
+@RestController
+public class TelecomOnlineStatusAction implements TelecomOnlineStatusActionI {
+
+    @Autowired
+    private TelecomOnlineStatusService telecomOnlineStatusService;
+
+    @Override
+    public ChannelTypeHandleResponseObject telecomOnlineStatus(@RequestHeader(value = "channelId",required = true) String channelId,
+                                                               @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+                                                               @RequestParam(value = "outTime", required = true) Integer outTime,
+                                                               @RequestParam(value = "customBody", required = true) String customBody) {
+        log.info("---------------------->电信在网状态:channelId:{},ifJkCode:{},outTime:{},customBody:{}",
+                channelId,
+                ifJkCode,
+                outTime,
+                customBody);
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        /**设置上游返回码日志记录-默认*/
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        ChannelTypeHandleResponseObject res = telecomOnlineStatusService.callTelecomOnlineStatus(request, channelId, ifJkCode, outTime, customBody);
+        /**日志记录是否计费*/
+        request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY, res.getIsCharge());
+        /**日志记录通道响应码*/
+        if(Constant.SUCCESS == res.getCode()){
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }else{
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+        }
+        /**日志记录通道customBody*/
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+        } catch (Exception e) {
+            ErrorUtils.captureException(e);
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+}

+ 65 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/TelecomOnlineTimeAction.java

@@ -0,0 +1,65 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.TelecomOnlineTimeService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.TelecomOnlineTimeActionI;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+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 javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 18:02:26
+ * @Description
+ */
+@Slf4j
+@RestController
+public class TelecomOnlineTimeAction implements TelecomOnlineTimeActionI {
+
+    @Autowired
+    private TelecomOnlineTimeService telecomOnlineTimeService;
+
+    @Override
+    public ChannelTypeHandleResponseObject telecomOnlineTime(
+            @RequestHeader(value = "channelId", required = true) String channelId,
+            @RequestHeader(value = "ifJkCode", required = false) String ifJkCode,
+            @RequestParam(value = "outTime", required = false) Integer outTime,
+            @RequestParam(value = "customBody", required = true) String customBody) {
+        log.info("------------------->电信在网时长:channelId:{},ifJkCode:{},outTime:{},customBody:{}",
+                channelId,
+                ifJkCode,
+                outTime,
+                channelId);
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        /**设置上游返回码日志记录-默认*/
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        ChannelTypeHandleResponseObject res = telecomOnlineTimeService.callTelecomOnlineTime(request, channelId, ifJkCode, outTime, customBody);
+        /**日志记录是否计费*/
+        request.setAttribute(Constant.ACCESSLOG_MG_ISCHARGE_KEY, res.getIsCharge());
+        /**日志记录通道响应码*/
+        if(Constant.SUCCESS == res.getCode()){
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }else{
+            request.setAttribute(Constant.ACCESSLOG_MG_RESPONSE_CODE_KEY,Constant.CHANNEL_LOG_ERROR_CODE);
+        }
+        /**日志记录通道customBody*/
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+        } catch (Exception e) {
+            ErrorUtils.captureException(e);
+            e.printStackTrace();
+        }
+        return res;
+    }
+}

+ 53 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/VehicleViolationInfoActionImpl.java

@@ -0,0 +1,53 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.VehicleViolationInfoService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.VehicleViolationInfoAction;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@RestController
+public class VehicleViolationInfoActionImpl implements VehicleViolationInfoAction {
+    private String xResponseCode = "x-responseCode";
+    private String xIsCharge = "x-isCharge";
+    @Autowired
+    VehicleViolationInfoService service;
+    @Override
+    public ChannelTypeHandleResponseObject getVehicleViolationInfo(String channelId, int outTime, String customBody) {
+        log.info("车辆违章信息查询--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                .getRequest();
+
+        //调用service
+        ChannelTypeHandleResponseObject responseObject = service.getVehicleViolationInfo(request, customBody, outTime);
+
+        //把接口参数、调用结果和是否收费放入访问日志中
+        if(responseObject.getCode() != Constant.SUCCESS) {
+            request.setAttribute(xResponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+        } else {
+            request.setAttribute(xResponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }
+        request.setAttribute(xIsCharge, responseObject.getIsCharge());
+
+        try {
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+        } catch (Exception ex) {
+            ErrorUtils.captureException(ex);
+        }
+
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        return responseObject;
+    }
+}

+ 412 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/action/YHChannelActionImpl.java

@@ -0,0 +1,412 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.action;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.YHChannelService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.LocationSupplierProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.SupplierProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.TwoParamIdCardResponseObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.action.YHChannelAction;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/25 15:54:40
+ * @Description
+ */
+
+@Slf4j
+@RestController
+public class YHChannelActionImpl implements YHChannelAction {
+    @Autowired
+    YHChannelService yhChannelService;
+    @Autowired
+    LocationSupplierProperties locationSupplierProperties;
+
+    private String xRresponseCode = "x-responseCode";
+    private String xIsCharge = "x-isCharge";
+
+
+    @Autowired
+    private SupplierProperties property;
+    @Override
+    public ChannelTypeHandleResponseObject twoParamIdCard(
+            @RequestHeader(value = "channelId", required = true) String channelId,
+            @RequestParam(value = "outTime", required = false) Integer outTime,
+            @RequestParam(value = "customBody", required = true) String customBody) {
+        log.info("云海身份证二要素请求--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+        ChannelTypeHandleResponseObject responseObject = yhChannelService.sendTwoParamIdCardRequest(channelId,outTime,customBody);
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        if(responseObject.getCode() != 1){
+            request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_ERROR_CODE);
+        }else{
+        	 if(Constant.CUSTOMER_RETURN_JK.equals(request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA))){
+             	String code = property.getCode().get(responseObject.getResultCode());
+             	if(code!=null){
+             		responseObject.setResultCode(Integer.valueOf(code));
+             	}
+             }
+             if(property.getDesc().get(responseObject.getResultCode())!=null){
+             	responseObject.setResultDesc(property.getDesc().get(responseObject.getResultCode()));
+             }
+            request.setAttribute(xRresponseCode,Constant.CHANNEL_LOG_SUCCESS_CODE);
+        }
+       
+        if(customBody != null){
+            try {
+                request.setAttribute(Constant.CHANNEL_LOG_QUERY,Base64.encodeBase64String(customBody.getBytes("utf-8")));
+            } catch (UnsupportedEncodingException e) {
+                log.error("",e);
+            }
+        }
+        request.setAttribute(xIsCharge,responseObject.getIsCharge());
+        Object object = responseObject.getResultBody();
+        if(object != null){
+        	String upStreamCode = ((TwoParamIdCardResponseObject)responseObject.getResultBody()).getCode();
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,String.valueOf(upStreamCode));
+        }else{
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        }
+        return responseObject;
+    }
+
+
+  
+    @Override
+    public ChannelTypeHandleResponseObject checkLocationForYH(
+    		@RequestHeader(value = "channelId", required = true) String channelId,
+            @RequestParam(value = "outTime", required = false) Integer outTime,
+            @RequestParam(value = "customBody", required = true) String customBody){
+    	 log.info("地理位置校验请求--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+    	 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+ 				.getRequest();
+ 		try {
+ 			//把请求参数放入
+     		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+     				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+ 		} catch (IOException ex) {
+ 			 log.error("", ex);
+ 		}
+         
+ 		ChannelTypeHandleResponseObject ret = yhChannelService.checkLocation(request, customBody, outTime);
+ 		
+     	if(ret.getCode() != Constant.SUCCESS) {
+     		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+     	} else {
+     		if(Constant.CUSTOMER_RETURN_JK.equals(request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA))){
+     			String code = locationSupplierProperties.getCode().get(ret.getResultCode());
+     			if(code!=null){
+     				ret.setResultCode(Integer.parseInt(code));
+     			}
+     		}
+     		 if(locationSupplierProperties.getDesc().get(ret.getResultCode())!=null){
+     			ret.setResultDesc(property.getDesc().get(ret.getResultCode()));
+             }
+     		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+     	}
+     	request.setAttribute(xIsCharge, ret.getIsCharge());  	
+     	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+         return ret;
+    }
+    
+    @Override
+	@ApiOperation(value = "云海电信三要素检验接口 " , notes = "")
+	public ChannelTypeHandleResponseObject yhDianXinCheck(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.yhDianXinCheck(request, customBody, outTime);
+
+			
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+		
+	}
+    
+	@Override
+    @ApiOperation(value = "云海联通三要素检验接口 " , notes = "")
+	public ChannelTypeHandleResponseObject yhLianTongCheck(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.yhLianTongCheck(request, customBody, outTime);
+			
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+    	
+    }
+	
+	@Override
+    @ApiOperation(value = "云海联通在线时长接口" , notes = "")
+	public ChannelTypeHandleResponseObject lianTongOnlineTimeCheck(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.yhLianTongOnlineTimeCheck(
+				request, customBody, outTime);
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+    	
+    }
+	
+	
+	@Override
+    @ApiOperation(value = "云海联通在网状态接口" , notes = "")
+	public ChannelTypeHandleResponseObject lianTongOnlineStatusCheck(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.yhLianTongOnlineStatusCheck(
+				request, customBody, outTime);
+			
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+    	
+    }
+	
+	@Override
+    @PostMapping(value = "/checkCMCCMobileOnlineTime.do")
+	public ChannelTypeHandleResponseObject checkCMCCMobileOnlineTime(@RequestHeader(name = "channelId") String channelId,
+            @RequestParam(name = "outTime") int outTime,
+            @RequestParam(name = "customBody") String customBody) {
+	    log.info("移动在网时长查询--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+
+	    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+	            .getRequest();
+
+	    //调用service
+	    ChannelTypeHandleResponseObject responseObject = yhChannelService.checkCMCCMobileOnlineTime(request, customBody, outTime);
+
+	    //把接口参数、调用结果和是否收费放入访问日志中
+	    if(responseObject.getCode() != Constant.SUCCESS) {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+	    } else {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+	    }
+	    request.setAttribute(xIsCharge, responseObject.getIsCharge());
+
+	    try {
+	        request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+	                Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+	    } catch (Exception ex) {
+	        ErrorUtils.captureException(ex);
+	    }
+
+	    request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+	    return responseObject;
+	}
+	
+	@Override
+	@PostMapping(value = "/checkCMCCMobileOnlineStatus.do")
+	public ChannelTypeHandleResponseObject checkCMCCMobileOnlineStatus(@RequestHeader(name = "channelId") String channelId,
+            @RequestParam(name = "outTime") int outTime,
+            @RequestParam(name = "customBody") String customBody) {
+	    log.info("移动在网状态查询--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+
+	    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+	            .getRequest();
+
+	    //调用service
+	    ChannelTypeHandleResponseObject responseObject = yhChannelService.checkCMCCMobileOnlineStatus(request, customBody, outTime);
+
+	    //把接口参数、调用结果和是否收费放入访问日志中
+	    if(responseObject.getCode() != Constant.SUCCESS) {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+	    } else {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+	    }
+	    request.setAttribute(xIsCharge, responseObject.getIsCharge());
+
+	    try {
+	        request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+	                Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+	    } catch (Exception ex) {
+	        ErrorUtils.captureException(ex);
+	    }
+
+	    request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+	    return responseObject;
+	}
+	
+	@Override
+	public ChannelTypeHandleResponseObject lianTongCostScore(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.lianTongCostScore(request, customBody, outTime);
+			
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+    	
+    }
+	
+	@Override
+	public ChannelTypeHandleResponseObject dianXinMonthCost(
+    		@RequestHeader(name="channelId")  String channelId,
+    		@RequestParam(name = "outTime", required = true) int outTime,
+    		@RequestParam(name = "customBody", required = true) String customBody) {
+    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+				.getRequest();
+		try {
+			//把请求参数放入
+    		request.setAttribute(Constant.CHANNEL_LOG_QUERY, 
+    				Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+		} catch (IOException ex) {
+			ErrorUtils.captureException(ex);
+		}
+        
+		
+		ChannelTypeHandleResponseObject ret = yhChannelService.dianXinMonthCost(request, customBody, outTime);
+			
+    	if(ret.getCode() != Constant.SUCCESS) {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+    	} else {
+    		request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+    	}
+    	request.setAttribute(xIsCharge, ret.getIsCharge());
+    	request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+        
+        return ret;
+    	
+    }
+	
+	@Override
+	public ChannelTypeHandleResponseObject queryMobileConsumeSection(@RequestHeader(name = "channelId") String channelId,
+            @RequestParam(name = "outTime") int outTime,
+            @RequestParam(name = "customBody") String customBody) {
+	    log.info("移动手机消费区间查询接口--->channelId:{}--->outTime:{},--->customBody:{}",channelId,outTime,customBody);
+
+	    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+	            .getRequest();
+
+	    //调用service
+	    ChannelTypeHandleResponseObject responseObject = yhChannelService.queryMobileConsumeSection(request, customBody, outTime);
+
+	    //把接口参数、调用结果和是否收费放入访问日志中
+	    if(responseObject.getCode() != Constant.SUCCESS) {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_ERROR_CODE);
+	    } else {
+	        request.setAttribute(xRresponseCode, Constant.CHANNEL_LOG_SUCCESS_CODE);
+	    }
+	    request.setAttribute(xIsCharge, responseObject.getIsCharge());
+
+	    try {
+	        request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+	                Base64.encodeBase64String(customBody.getBytes(SjjhConstant.UTF8_ENCODE)));
+	    } catch (Exception ex) {
+	        ErrorUtils.captureException(ex);
+	    }
+
+	    request.setAttribute(Constant.CHANNEL_TYPE_KEY,Constant.CHANNEL_TYPE_SYNC);
+	    return responseObject;
+	}
+
+}

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

@@ -0,0 +1,33 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/18 16:55:31
+ * @Description
+ */
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+
+    @Bean
+    public Docket createRestApi() {
+
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
+                .apis(RequestHandlerSelectors.basePackage("info.aspirecn.rdc.iov.sjjh"))
+                .paths(PathSelectors.any()).build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder().title("云海-通道API").description("").termsOfServiceUrl("").version("1.0.0").build();
+    }
+}

+ 106 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/constant/SjjhConstant.java

@@ -0,0 +1,106 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant;
+/**
+ *
+ * @author xusonglin
+ *
+ */
+public class SjjhConstant {
+	private SjjhConstant() {
+
+	}
+	/**UTF-8*/
+	public static final String UTF8_ENCODE = "UTF-8";
+    public static final String  key_subStr="-sign";
+	public static final String INTERFACE_NO_FIND_TEXT = "库无";
+	/**联通手机话费平均评分接口返回码及提示语*/
+	public static final String USER_MONTH_COST_0 = "0";
+	public static final String USER_MONTH_COST_40 = "40";
+	public static final String USER_MONTH_COST_80 = "80";
+	public static final String USER_MONTH_COST_160 = "160";
+	public static final String USER_MONTH_COST_999 = "999";
+	public static final String USER_MONTH_COST_0_TEXT = "用户月话费为 0";
+	public static final String USER_MONTH_COST_40_TEXT = "用户月话费为(0,40]";
+	public static final String USER_MONTH_COST_80_TEXT = "用户月话费为(40,80]";
+	public static final String USER_MONTH_COST_160_TEXT = "用户月话费为(80,160]";
+	public static final String USER_MONTH_COST_GREATER_160_TEXT = "用户月话费为>160";
+
+	public static final String RETURN_CODE_25_TEXT = "查询的手机号码在网";
+    public static final String RETURN_CODE_26_TEXT = "查询的手机号码停机";
+    public static final String RETURN_CODE_27_TEXT = "查询的在网但不可用";
+    public static final String RETURN_CODE_28_TEXT = "查询的手机销号/未启用";
+    public static final String RETURN_CODE_29_TEXT = "查询的手机号码预销号或空号";
+    public static final String RETURN_CODE_30_TEXT = "号码状态异常";
+    public static final String RETURN_CODE_31_TEXT = "0-3个月";
+    public static final String RETURN_CODE_32_TEXT = "3-6个月";
+    public static final String RETURN_CODE_33_TEXT = "6-12个月";
+    public static final String RETURN_CODE_34_TEXT = "12-18个月";
+    public static final String RETURN_CODE_35_TEXT = "18-24个月";
+    public static final String RETURN_CODE_36_TEXT = ">24个月";
+	public static final String RETURN_CODE_37_TEXT = "手机号一致,证件号和姓名不一致";
+    public static final String RETURN_CODE_38_TEXT = "手机号和证件号一致,姓名不一致";
+    public static final String RETURN_CODE_39_TEXT = "手机号和姓名一致,证件号不一致";
+    public static final String RETURN_CODE_40_TEXT = "非联通";
+    public static final String RETURN_CODE_41_TEXT = "未启用";
+    public static final String RETURN_CODE_42_TEXT = "正常";
+    public static final String RETURN_CODE_43_TEXT = "欠费停机";
+    public static final String RETURN_CODE_44_TEXT = "其它停机";
+    public static final String RETURN_CODE_45_TEXT = "已销号";
+    public static final String RETURN_CODE_46_TEXT = "1个月及以下";
+    public static final String RETURN_CODE_47_TEXT = "2个月";
+    public static final String RETURN_CODE_48_TEXT = "3-6个月";
+    public static final String RETURN_CODE_49_TEXT = "7-12个月";
+    public static final String RETURN_CODE_50_TEXT = "13-24个月";
+    public static final String RETURN_CODE_51_TEXT = "25-36个月";
+    public static final String RETURN_CODE_52_TEXT = "37个月以上";
+	public static final String PARAMETER_OTHER_ERROR = "查询错误";
+	public static final String QUERY_SUCCESS = "查询成功";
+    public static final String PARAMETER_FORMAT_ERROR = "参数格式错误";
+    public static final String[] CMCC_ONLINE_STATUS_SUCCESS_CODE = {"0", "1", "2", "3", "5", "6"};
+    public static final String RESPONSE_CODE_0 = "0";
+    public static final String RESPONSE_CODE_200 = "200";
+    public static final String RESPONSE_CODE_205 = "205";
+    public static final String RESPONSE_CODE_207 = "207";
+    public static final String RESPONSE_CODE_908 = "908";
+    public static final String RESPONSE_RESULT_CODE_0 = "0";
+    public static final String RESPONSE_RESULT_CODE_2 = "2";
+    public static final String RESPONSE_RESULT_CODE_101 = "101";
+    public static final String RESPONSE_RESULT_CODE_102 = "102";
+    public static final String RESPONSE_STATE_0 = "0";
+    public static final String RESPONSE_STATE_1 = "1";
+    public static final String RESPONSE_STATE_2 = "2";
+    public static final String RESPONSE_STATE_3 = "3";
+    public static final String RESPONSE_STATE_4 = "4";
+    public static final String RESPONSE_STATE_5 = "5";
+    public static final String RESPONSE_STATE_6 = "6";
+    public static final String RESPONSE_STATE_7 = "7";
+    public static final String RESPONSE_CHECK_RESULT_00 = "00";
+    public static final String RESPONSE_CHECK_RESULT_01 = "01";
+    public static final String RESPONSE_CHECK_RESULT_02 = "02";
+    public static final String RESPONSE_CHECK_RESULT_03 = "03";
+    public static final String RESULT_VALUE_1 = "0-3";
+    public static final String RESULT_VALUE_2 = "3-6";
+    public static final String RESULT_VALUE_3 = "6-12";
+    public static final String RESULT_VALUE_4 = "12-18";
+    public static final String RESULT_VALUE_5 = "18-24";
+    public static final String RESULT_VALUE_6 = ">24";
+    /**电信三要素result的值*/
+    public static final String DIAN_XIN_RESULT_VALUE_T = "T";
+    public static final String DIAN_XIN_RESULT_VALUE_F = "F";
+    /**车辆违章信息查询*/
+    public static final String[] VEHICLE_VIOLATION_CAR_TYPE = {"01", "02"};
+    public static final String[] VEHICLE_VIOLATION_CHARGE_CODE = {"0", "200", "910"};
+    public static final String VEHICLE_VIOLATION_RESPONSE_CODE_0 = "0";
+    public static final String VEHICLE_VIOLATION_RESPONSE_CODE_200 = "200";
+    public static final String VEHICLE_VIOLATION_RESPONSE_CODE_910 = "910";
+    public static final String VEHICLE_VIOLATION_RESPONSE_CODE_913 = "913";
+    public static final String VEHICLE_VIOLATION_RESPONSE_CODE_205 = "205";
+    public static final String VEHICLE_VIOLATION_PARAMETER_ERROR = "输入车牌号或车架号或发动机号有误";
+    /**行驶证三要素*/
+    public static final String[] DRIVING_LICENSE_CHARGE_CODE = {"1", "2", "3", "4"};
+    public static final String DRIVING_LICENSE_RESULT_CODE_1 = "1";
+    public static final String DRIVING_LICENSE_RESULT_CODE_2 = "2";
+    public static final String DRIVING_LICENSE_RESULT_CODE_3 = "3";
+    public static final String DRIVING_LICENSE_RESULT_CODE_4 = "4";
+
+    public static final String MONTH_NUMBER_ERROR_TITLE = "月份的数字不正确";
+}

+ 25 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/CompanyInfoService.java

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Auther jianggang
+ * @Date 2019/6/10 14:32:57
+ * @Description
+ */
+public interface CompanyInfoService {
+
+    /***
+     * 调用云海企业信息接口
+     * @param channelId 通道id
+     * @param ifJkCode 返回码类型
+     * @param outTime   超时时间
+     * @param customBody 请求参数串
+     * @return 转码之后的结果
+     */
+    ChannelTypeHandleResponseObject companyInfo(HttpServletRequest request,
+                                                Integer outTime,
+                                                String customBody);
+}

+ 16 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/DrivingLicenseService.java

@@ -0,0 +1,16 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @description: 行驶证三要素
+ * @author: xusonglin
+ * @create: 2019/7/8 15:19
+ * @version: V1.0
+ **/
+
+public interface DrivingLicenseService {
+    ChannelTypeHandleResponseObject drivingLicense(HttpServletRequest request, String customBody, int outTime);
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/FaceCheckService.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Auther jianggang
+ * @Date 2019/6/10 14:32:57
+ * @Description
+ */
+public interface FaceCheckService {
+
+    /***
+     * 调用云海人像对比接口
+     * @param channelId 通道id
+     * @param ifJkCode 返回码类型
+     * @param outTime   超时时间
+     * @param customBody 请求参数串
+     * @return 转码之后的结果
+     */
+    ChannelTypeHandleResponseObject callFaceCheck(HttpServletRequest request,
+                                                  String channelId,
+                                                  String ifJkCode,
+                                                  Integer outTime,
+                                                  String customBody);
+
+    ChannelTypeHandleResponseObject faceCheckWZDecode(HttpServletRequest request,
+                                                      String channelId,
+                                                      String ifJkCode,
+                                                      Integer outTime,
+                                                      String customBody);
+    public void testNotify(String channelId, int type);
+}

+ 11 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/ForeignInvestService.java

@@ -0,0 +1,11 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+public interface ForeignInvestService {
+	 ChannelTypeHandleResponseObject foreignInvest(HttpServletRequest request,
+                                                   Integer outTime,
+                                                   String customBody);
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/IdentityCardService.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ *
+ * @author lixinxu
+ *
+ */
+public interface IdentityCardService {
+
+	/**
+	 *
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+    public ChannelTypeHandleResponseObject identityCardTwoPointCheck(HttpServletRequest request, String customBody, int outTime, String ifJkCode);
+
+	/**
+	 * 二要素-weizhong解密版
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @param ifJkCode
+	 * @return
+	 */
+    ChannelTypeHandleResponseObject twoElementsCheckWeiZhongDecode(HttpServletRequest request, String customBody, int outTime, String ifJkCode);
+}

+ 27 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/TelecomOnlineStatusService.java

@@ -0,0 +1,27 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Auther jianggang
+ * @Date 2019/6/11 09:41:52
+ * @Description
+ */
+public interface TelecomOnlineStatusService {
+
+    /**
+     * 电信在网状态查询
+     * @param channelId 通道id
+     * @param ifJkCode 返回码类型
+     * @param outTime 超时时间
+     * @param customBody 查询参数
+     * @return 返回转码之后的结果
+     */
+    ChannelTypeHandleResponseObject callTelecomOnlineStatus(HttpServletRequest request,
+                                                            String channelId,
+                                                            String ifJkCode,
+                                                            Integer outTime,
+                                                            String customBody);
+}

+ 27 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/TelecomOnlineTimeService.java

@@ -0,0 +1,27 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 18:03:21
+ * @Description
+ */
+public interface TelecomOnlineTimeService {
+
+    /**
+     * 调用电信在网时长查询
+     * @param channelId 通道id
+     * @param ifJkCode  返回码类型
+     * @param outTime 超时时间
+     * @param customBody 查询参数
+     * @return 返回转码之后的结果
+     */
+    ChannelTypeHandleResponseObject callTelecomOnlineTime(HttpServletRequest request,
+                                                          String channelId,
+                                                          String ifJkCode,
+                                                          Integer outTime,
+                                                          String customBody);
+}

+ 9 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/VehicleViolationInfoService.java

@@ -0,0 +1,9 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface VehicleViolationInfoService {
+    ChannelTypeHandleResponseObject getVehicleViolationInfo(HttpServletRequest request, String customBody, int outTime);
+}

+ 111 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/YHChannelService.java

@@ -0,0 +1,111 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service;
+
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.vo.ResponseObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/25 15:55:19
+ * @Description
+ */
+public interface YHChannelService {
+
+    /**
+     * 身份证二要素请求
+     * @param channelId
+     * @param outTime
+     * @param customBody
+     * @return
+     * @throws Exception
+     */
+    ChannelTypeHandleResponseObject sendTwoParamIdCardRequest(
+            String channelId, Integer outTime, String customBody);
+
+	/**
+	 * 全网位置校验
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	 ChannelTypeHandleResponseObject checkLocation(HttpServletRequest request, String customBody,
+                                                   int outTime);
+
+
+    /**
+	 * 电信三要素检验接口
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject yhDianXinCheck(HttpServletRequest request, String customBody, int outTime);
+
+
+	/**
+	 * 联通三要素检验接口
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject yhLianTongCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 联通在网时长接口
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject yhLianTongOnlineTimeCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 联通在网状态接口
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject yhLianTongOnlineStatusCheck(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 移动在网状态查询
+	 * @param outTime
+	 * @param customBody
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject checkCMCCMobileOnlineStatus(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 移动在网时长查询
+	 * @param outTime
+	 * @param customBody
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject checkCMCCMobileOnlineTime(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 联通手机话费平均评分接口
+	 * @param outTime
+	 * @param customBody
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject lianTongCostScore(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 电信月消费金额接口
+	 * @param outTime
+	 * @param customBody
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject dianXinMonthCost(HttpServletRequest request, String customBody, int outTime);
+
+	/**
+	 * 移动手机消费区间查询接口
+	 * @param outTime
+	 * @param customBody
+	 * @return
+	 */
+	ChannelTypeHandleResponseObject queryMobileConsumeSection(HttpServletRequest request, String customBody, int outTime);
+}

+ 122 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/CompanyInfoServiceImpl.java

@@ -0,0 +1,122 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.CompanyInfoService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.CompanyInfoProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.CompanyInfoRequestObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.ForeignInvestResponseObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ */
+
+@Slf4j
+@Service
+public class CompanyInfoServiceImpl implements CompanyInfoService {
+
+	@Autowired
+	private CompanyInfoProperties companyInfoProperties; 
+    @Autowired
+    ObjectMapper mapper;
+    private OkHttpClient client = new OkHttpClient.Builder().build();
+    
+    @Override
+    public ChannelTypeHandleResponseObject companyInfo(HttpServletRequest request,
+                                                         Integer outTime,
+                                                         String customBody) {
+
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+        res.setIsCharge(Constant.IS_NOT_CHARGE);
+        /**设置默认超时时间*/
+        if (outTime == null || outTime.intValue() <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        try {
+        	CompanyInfoRequestObject requestObject = mapper.readValue(customBody, CompanyInfoRequestObject.class);
+            OkHttpClient okHttpClient = client.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            if(StringUtils.isBlank(requestObject.getCname())
+            		&&StringUtils.isBlank(requestObject.getCnumber())
+            		&&StringUtils.isBlank(requestObject.getRegNumber())
+            		&&StringUtils.isBlank(requestObject.getOrgNumber())){
+            	log.error("每个参数都为空,requestObject:{}",requestObject);
+            	res.setCode(Constant.SUCCESS);
+            	res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            	res.setResultBody(Constant.INVALID_PARAMETER);
+            }
+            String params = Utils.calculateParam(requestObject,companyInfoProperties.getApiSecret());
+            log.info("companyInfoProperties:{}",companyInfoProperties);
+            RequestBody requestBody = new FormBody.Builder().add("apiKey", companyInfoProperties.getApiKey())
+                    .add("username", companyInfoProperties.getUsername())
+                    .add("format", "json")
+                    .add("params", params)
+                    .build();
+            Request okRequest = new Request.Builder()
+                    .url(companyInfoProperties.getUrl())
+                    .post(requestBody)
+                    .build();
+            Response response = okHttpClient.newCall(okRequest).execute();
+            if(!response.isSuccessful()){
+            	throw new Exception("request status is not 200,http status:"+String.valueOf(response.code()));
+            }
+            String responseJson = response.body().string();
+            log.info("--------------->接口返回数据为:{}", responseJson);
+            ForeignInvestResponseObject foreignInvestResponseObject = mapper.readValue(responseJson, ForeignInvestResponseObject.class);
+            /**判断计费状态*/
+            boolean isCharge = Constant.INFO_CODE_ZERO.equals(foreignInvestResponseObject.getCode());
+            if (isCharge) {
+                res.setIsCharge(Constant.IS_CHARGE);
+            } else {
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            res.setCode(Constant.SUCCESS);
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, foreignInvestResponseObject.getCode());
+            if(Constant.INFO_CODE_ZERO.equals(foreignInvestResponseObject.getCode())){
+            	res.setResultCode(Constant.SUCCESS);
+            	String value = mapper.writeValueAsString(foreignInvestResponseObject.getData());  
+            	res.setResultBody(value);
+            }else if(Constant.INFO_PARAM_ERROR_202.equals(foreignInvestResponseObject.getCode())
+            		||Constant.INFO_PARAM_ERROR_203.equals(foreignInvestResponseObject.getCode())
+            		||Constant.INFO_PARAM_ERROR_205.equals(foreignInvestResponseObject.getCode())){
+            	res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            	res.setResultBody(Constant.INVALID_PARAMETER);
+            }else if(Constant.INFO_NOT_FIND.equals(foreignInvestResponseObject.getCode())){
+            	res.setResultCode(Constant.UN_FIND_NUM_CODE);
+            	res.setResultBody(Constant.UN_FIND_NUM);
+            }else {
+            	res.setResultCode(Constant.OTHER_ERROR_CODE);
+            	res.setResultBody(Constant.OTHER_ERROR);
+            }
+        } catch (IOException e) {
+        	ErrorUtils.captureException(e);
+        	log.error("IOException,message:{}",e);
+            res.setCode(Constant.FAIL);
+            return res;
+        }catch (Exception e) {
+        	ErrorUtils.captureException(e);
+        	log.error("Exception,message:{}",e);
+            res.setCode(Constant.FAIL);
+            return res;
+        }
+        return res;
+    }
+
+}

+ 284 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/DrivingLicenseServiceImpl.java

@@ -0,0 +1,284 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.DrivingLicenseService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.DrivingLicenseJsonResolveObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.DrivingLicenseResponseObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.apache.commons.lang3.ArrayUtils;
+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 javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.net.SocketTimeoutException;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @description: 行驶证三要素
+ * @author: xusonglin
+ * @create: 2019/7/8 15:19
+ * @version: V1.0
+ **/
+@Service
+@Slf4j
+public class DrivingLicenseServiceImpl implements DrivingLicenseService {
+    @Value("${yh.uri}")
+    private String yhUrl;
+    @Value("${yh.username}")
+    private String yhUserName;
+    @Value("${yh.key}")
+    private String yhKey;
+    @Value("${yh.apiKeyY000f1}")
+    private String apiKeyY000f1;
+    @Autowired
+    private ObjectMapper objectMapper;
+    
+    private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
+
+    @Override
+    public ChannelTypeHandleResponseObject drivingLicense(HttpServletRequest request, String customBody, int outTime) {
+        ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+        ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+        String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+        String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+
+        if (StringUtils.isBlank(returnType)) {
+            returnType = Constant.CUSTOMER_RETURN_ZW;
+        }
+        if (outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        log.info("drivingLicense---customBody={},outTime={}", customBody, outTime);
+
+        try {
+            DrivingLicenseJsonResolveObject jsonResolveObject = objectMapper.readValue(customBody, DrivingLicenseJsonResolveObject.class);
+            //参数校验
+            if (!validateParams(ret, returnType, jsonResolveObject)) {
+                ret.setCode(Constant.SUCCESS);
+                request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+                return ret;
+            }
+
+            String params = Utils.encrypt(yhKey, jsonResolveObject.toString());
+            FormBody.Builder formBodyBuilder = new FormBody.Builder()
+                    .add("apiKey", apiKeyY000f1)
+                    .add("username", yhUserName)
+                    .add("params", params);
+            Request okRequest = new Request.Builder()
+                    .post(formBodyBuilder.build())
+                    .url(yhUrl)
+                    .build();
+            OkHttpClient client = okHttpClient.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            Response response = client.newCall(okRequest).execute();
+            String responseContext = "";
+            if (response.body() != null) {
+                responseContext = response.body().string();
+            }
+            log.info("supplier10000003.drivingLicense接口responseContext={}", responseContext);
+
+            DrivingLicenseResponseObject responseJsonObject = objectMapper.readValue(responseContext, DrivingLicenseResponseObject.class);
+            log.info("supplier10000003.drivingLicense接口responseObject={}", responseJsonObject);
+
+            if (responseJsonObject != null) {
+                ret.setCode(Constant.SUCCESS);
+                setDrivingLicenseResponse(ret, returnType, responseJsonObject);
+                upstreamCode = responseJsonObject.getCode();
+                response.close();
+            } else {
+                ret.setCode(Constant.FAIL);
+            }
+        } catch (SocketTimeoutException ste) {
+            ErrorUtils.captureException(ste);
+            log.info("supplier10000003.drivingLicense接口SocketTimeoutException={}", ste);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+        } catch (Exception ioe) {
+            ErrorUtils.captureException(ioe);
+            log.info("supplier10000003.drivingLicense接口Exception={}", ioe);
+            ret.setCode(Constant.FAIL);
+        }
+
+        //上游返回码
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        return ret;
+    }
+
+    private boolean validateParams(ChannelTypeHandleResponseObject ret, String returnType,
+                                   DrivingLicenseJsonResolveObject jsonResolveObject) {
+        if (!validateParamNullValue(jsonResolveObject)) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+                ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+                ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            }
+            return false;
+        } else if (StringUtils.isBlank(jsonResolveObject.getPlateNumber())
+                || !PatternTools.checkResult(Constant.PATTERN_CAR_NUMBER_REGEX, jsonResolveObject.getPlateNumber())) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            }
+            return false;
+        } else if (StringUtils.isBlank(jsonResolveObject.getName()) || !PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX, jsonResolveObject.getName())) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
+                ret.setResultBody(Constant.NAME_FORMAT_ERROR);
+                ret.setResultDesc(Constant.NAME_FORMAT_ERROR);
+            } else {
+                ret.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
+                ret.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
+                ret.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
+            }
+            return false;
+        } else if (StringUtils.isBlank(jsonResolveObject.getIdCode()) || !PatternTools.checkResult(Constant.PATTERN_ID_NUMBER_REGEX, jsonResolveObject.getIdCode())) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
+                ret.setResultBody(Constant.IDCODE_FORMAT_ERROR);
+                ret.setResultDesc(Constant.IDCODE_FORMAT_ERROR);
+            } else {
+                ret.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
+                ret.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
+                ret.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
+            }
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    private void setDrivingLicenseResponse(ChannelTypeHandleResponseObject ret, String returnType,
+                                           DrivingLicenseResponseObject responseObject) {
+        String responseCode = responseObject.getCode();
+        boolean isCharge = !StringUtils.isBlank(responseCode)
+                && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                && ArrayUtils.contains(SjjhConstant.DRIVING_LICENSE_CHARGE_CODE, responseObject.getData().getResult());
+        if (isCharge) {
+            ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+        }
+
+        if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+            if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_1)) {
+                // 一致
+                ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+                ret.setResultBody(JSONObject.toJSONString(responseObject.getData().getResultData()));
+                ret.setResultDesc(Constant.MATCH);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_2)) {
+                // 姓名不一致
+                ret.setResultCode(Constant.JK_RETURN_CODE_1103);
+                ret.setResultBody(Constant.NAME_DISCREPANCY);
+                ret.setResultDesc(Constant.NAME_DISCREPANCY);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_3)) {
+                // 身份证未命中
+                ret.setResultCode(Constant.JK_RETURN_CODE_1154);
+                ret.setResultBody(Constant.UN_MATCH_ID_CODE);
+                ret.setResultDesc(Constant.UN_MATCH_ID_CODE);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_4)) {
+                // 车牌号不一致
+                ret.setResultCode(Constant.JK_RETURN_CODE_1152);
+                ret.setResultBody(Constant.PLATE_NUMBER_DISCREPANCY);
+                ret.setResultDesc(Constant.PLATE_NUMBER_DISCREPANCY);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_205)) {
+                // 参数错误
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_200)) {
+                // 库无
+                ret.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+                ret.setResultBody(Constant.UN_FIND_NUM);
+                ret.setResultDesc(Constant.UN_FIND_NUM);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        } else {
+            if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_1)) {
+                // 一致
+                ret.setResultCode(Constant.MATCH_CODE);
+                ret.setResultBody(JSONObject.toJSONString(responseObject.getData().getResultData()));
+                ret.setResultDesc(Constant.MATCH);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_2)) {
+                // 姓名不一致
+                ret.setResultCode(Constant.RETURN_CODE_20);
+                ret.setResultBody(Constant.NAME_DISCREPANCY);
+                ret.setResultDesc(Constant.NAME_DISCREPANCY);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_3)) {
+                // 身份证未命中
+                ret.setResultCode(Constant.RETURN_CODE_83);
+                ret.setResultBody(Constant.UN_MATCH_ID_CODE);
+                ret.setResultDesc(Constant.UN_MATCH_ID_CODE);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_0)
+                    && responseObject.getData().getResult().equals(SjjhConstant.DRIVING_LICENSE_RESULT_CODE_4)) {
+                // 车牌号不一致
+                ret.setResultCode(Constant.RETURN_CODE_82);
+                ret.setResultBody(Constant.PLATE_NUMBER_DISCREPANCY);
+                ret.setResultDesc(Constant.PLATE_NUMBER_DISCREPANCY);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_205)) {
+                // 参数错误
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.RESPONSE_CODE_200)) {
+                // 库无
+                ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+                ret.setResultBody(Constant.UN_FIND_NUM);
+                ret.setResultDesc(Constant.UN_FIND_NUM);
+            } else {
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+
+        }
+    }
+
+    private boolean validateParamNullValue(DrivingLicenseJsonResolveObject jsonResolveObject) {
+        ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
+        Validator validator = vf.getValidator();
+        Set<ConstraintViolation<DrivingLicenseJsonResolveObject>> set = validator.validate(jsonResolveObject);
+        for (ConstraintViolation<DrivingLicenseJsonResolveObject> con : set) {
+            if (StringUtils.isNotBlank(con.getMessage())) {
+                return false;
+            }
+        }
+        return true;
+    }
+}

+ 592 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/FaceCheckServiceImpl.java

@@ -0,0 +1,592 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import brave.Tracer;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import info.aspirecn.iov.sjjh.channel.inter.platform.ChannelActionInterface;
+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.service.sms.action.SmsActionInterface;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.FaceCheckService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.*;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.CommonRequestObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.FaceCheckResObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.NotifySms;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.net.SocketTimeoutException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 14:33:24
+ * @Description
+ */
+
+@SuppressWarnings("ALL")
+@Slf4j
+@Service
+public class FaceCheckServiceImpl implements FaceCheckService {
+    @Autowired
+    private Tracer tracer;
+
+    @Autowired
+    private YHProperties yhProperties;
+
+    private OkHttpClient client = new OkHttpClient.Builder().build();
+
+    @Value("${wz.decryptKey}")
+    private String decryptKey;
+
+    @Value("${wz.aesDecryptKey}")
+    private String aesDecryptKey;
+
+    private String key="urlFaceCheck";
+    @Autowired
+    private CommonUtil commonUtil;
+
+    @Autowired
+    StringRedisTemplate stringRedisTemplate;
+    @Autowired
+    SmsActionInterface smsActionInterface;
+    @Autowired
+    ChannelActionInterface channelActionInterface;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+    @Override
+    public ChannelTypeHandleResponseObject callFaceCheck(HttpServletRequest request,
+                                                         String channelId,
+                                                         String ifJkCode,
+                                                         Integer outTime,
+                                                         String customBody) {
+
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+        res.setCode(Constant.SUCCESS);
+        /**默认使用卓望返回码*/
+        if (StringUtils.isBlank(ifJkCode)) {
+            ifJkCode = Constant.CUSTOMER_RETURN_ZW;
+        }
+        /**设置默认超时时间*/
+        if (outTime == null || outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        /**设置上游返回码日志记录-默认*/
+        res.setIsCharge(Constant.IS_NOT_CHARGE);
+
+
+        try {
+
+            String hashKey = commonUtil.getKey();
+            boolean flag = checkVisitCount(hashKey,key,yhProperties.getUrlFaceUp(),channelId);
+            if(!flag){
+                countOver(res,ifJkCode);
+                return res;
+            }
+            ObjectMapper mapper = new ObjectMapper();
+            Gson gson = new Gson();
+            Map map = gson.fromJson(customBody, Map.class);
+            OkHttpClient okHttpClient = client.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            if(StringUtils.isBlank((String)map.get("name"))
+                    ||StringUtils.isBlank((String)map.get("idCode"))
+                    ||StringUtils.isBlank((String)map.get("photo"))){
+
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                /**参数错误*/
+                if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+                    res.setResultCode(Constant.JK_RETURN_CODE_9909);
+                    res.setResultBody(Constant.RETURN_MESSAGE_77);
+                    res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                }else{
+                    res.setResultCode(Constant.ZW_RETURN_CODE_77);
+                    res.setResultBody(Constant.RETURN_MESSAGE_77);
+                    res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                }
+                reduceVisitCount(hashKey,key);
+                return res;
+            }
+            /**参数校验*/
+            if(!PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX,(String)map.get("name"))){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.NAME_FORMAT_ERROR);
+                    res.setResultBody(Constant.NAME_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
+                }
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                reduceVisitCount(hashKey,key);
+                return res;
+            }else if(!PatternTools.checkResult(Constant.PATTERN_SPECIAL_ID_NUMBER_REGEX,(String)map.get("idCode"))){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.IDCODE_FORMAT_ERROR);
+                    res.setResultBody(Constant.IDCODE_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
+                }
+                reduceVisitCount(hashKey,key);
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                return res;
+            }
+            CommonRequestObject commonRequestObject = new CommonRequestObject();
+            commonRequestObject.setUsername(yhProperties.getUsername());
+            commonRequestObject.setApiKey(yhProperties.getApiKeyY000r1());
+            commonRequestObject.setFormat("json");
+            String paramString = "name=" + map.get("name")
+                    + "&identityCard=" + map.get("idCode")
+                    + "&photo=" + map.get("photo");
+            String encryptParamString = Utils.encrypt(yhProperties.getKey(), paramString);
+            RequestBody requestBody = new FormBody.Builder().add("apiKey", yhProperties.getApiKeyY000r1())
+                    .add("username", yhProperties.getUsername())
+                    .add("format", "json")
+                    .add("params", encryptParamString)
+                    .build();
+            Request okRequest = new Request.Builder()
+                    .url(yhProperties.getFaceCheckUri())
+                    .post(requestBody)
+                    .build();
+            Response response = okHttpClient.newCall(okRequest).execute();
+            String responseJson = response.body().string();
+            log.info("--------------->接口返回数据为:{}", responseJson);
+            FaceCheckResObject faceCheckResObject = mapper.readValue(responseJson, FaceCheckResObject.class);
+            /**判断计费状态*/
+            if(!check(faceCheckResObject,res,ifJkCode,channelId)){
+                return res;
+            }
+            boolean isCharge = Constant.FACE_RES_CODE_ZERO.equals(faceCheckResObject.getCode())
+                    && (Constant.FACE_RES_RESULT_ONE.equals(faceCheckResObject.getData().getResult())
+                            || Constant.FACE_RES_RESULT_TWO.equals(faceCheckResObject.getData().getResult())
+                            || Constant.FACE_RES_RESULT_THREE.equals(faceCheckResObject.getData().getResult())
+                            || Constant.FACE_RES_RESULT_FIVE.equals(faceCheckResObject.getData().getResult())
+                            || Constant.FACE_RES_RESULT_TEN.equals(faceCheckResObject.getData().getResult())
+                            || Constant.FACE_RES_RESULT_ELEVEN.equals(faceCheckResObject.getData().getResult()));
+            if (isCharge) {
+                res.setIsCharge(Constant.IS_CHARGE);
+            } else {
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            /**设置请求状态*/
+            res.setCode(Constant.SUCCESS);
+            switchResultCode(mapper, ifJkCode, faceCheckResObject, res);
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, faceCheckResObject.getCode());
+        } catch (SocketTimeoutException soe) {
+            ErrorUtils.captureException(soe);
+            res.setCode(Constant.REQUEST_TIMEOUT);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        } catch (Exception e) {
+            e.printStackTrace();
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }
+        return res;
+    }
+
+    public void switchResultCode(ObjectMapper mapper,String ifJkCode,
+    		FaceCheckResObject faceCheckResObject, ChannelTypeHandleResponseObject res) throws  JsonProcessingException{
+        if (Constant.TELECOM_RES_CODE_ZERO.equals(faceCheckResObject.getCode())) {
+            JSONObject resultBody = new JSONObject();
+            resultBody.put("verificationScore", faceCheckResObject.getData().getVerificationScore());
+            String resultCode = faceCheckResObject.getData().getResult();
+            if (resultCode.equals("1")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1143);
+                res.setResultDesc(Constant.RETURN_MESSAGE_68);
+                resultBody.put("message", Constant.RETURN_MESSAGE_68);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("2")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1144);
+                res.setResultDesc(Constant.RETURN_MESSAGE_69);
+                resultBody.put("message", Constant.RETURN_MESSAGE_69);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("3")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1145);
+                res.setResultDesc(Constant.RETURN_MESSAGE_70);
+                resultBody.put("message", Constant.RETURN_MESSAGE_70);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("5")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1146);
+                res.setResultDesc(Constant.RETURN_MESSAGE_71);
+                resultBody.put("message", Constant.RETURN_MESSAGE_71);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("10")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1147);
+                res.setResultDesc(Constant.RETURN_MESSAGE_72);
+                resultBody.put("message", Constant.RETURN_MESSAGE_72);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("11")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1148);
+                res.setResultDesc(Constant.RETURN_MESSAGE_73);
+                resultBody.put("message", Constant.RETURN_MESSAGE_73);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("7")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_1149);
+                res.setResultDesc(Constant.RETURN_MESSAGE_74);
+                resultBody.put("message", Constant.RETURN_MESSAGE_74);
+                res.setResultBody(JSON.toJSONString(resultBody));
+
+            } else if (resultCode.equals("6")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+                res.setResultBody(Constant.UN_FIND_NUM);
+                res.setResultDesc(Constant.UN_FIND_NUM);
+
+            } else if (resultCode.equals("9")) {
+                res.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
+                res.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
+                res.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
+
+            } else if (resultCode.equals("8")) {
+                res.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
+                res.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
+                res.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
+
+            } else {
+                res.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                res.setResultBody(Constant.OTHER_ERROR);
+                res.setResultDesc(Constant.OTHER_ERROR);
+            }
+        } else {
+            if (faceCheckResObject.getCode().equals("200")) {
+                res.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+                res.setResultBody(Constant.UN_FIND_NUM);
+                res.setResultDesc(Constant.UN_FIND_NUM);
+            } else {
+                res.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                res.setResultBody(Constant.OTHER_ERROR);
+                res.setResultDesc(Constant.OTHER_ERROR);
+            }
+        }
+
+        if (ifJkCode.equals(Constant.CUSTOMER_RETURN_ZW)) {
+            switch (res.getResultCode()) {
+                case Constant.JK_RETURN_CODE_1143 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_68);
+                    break;
+                case Constant.JK_RETURN_CODE_1144 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_69);
+                    break;
+                case Constant.JK_RETURN_CODE_1145 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_70);
+                    break;
+                case Constant.JK_RETURN_CODE_1146 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_71);
+                    break;
+                case Constant.JK_RETURN_CODE_1147 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_72);
+                    break;
+                case Constant.JK_RETURN_CODE_1148 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_73);
+                    break;
+                case Constant.JK_RETURN_CODE_1149 :
+                    res.setResultCode(Constant.ZW_RETURN_CODE_74);
+                    break;
+                case Constant.JK_RETURN_CODE_NO_INFO :
+                    res.setResultCode(Constant.UN_FIND_NUM_CODE);
+                    break;
+                case Constant.JK_NAME_FORMAT_ERROR_CODE :
+                    res.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
+                    break;
+                case Constant.JK_IDCODE_FORMAT_ERROR_CODE :
+                    res.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
+                    break;
+                case Constant.JK_RETURN_CODE_OTHER_ERROR :
+                    res.setResultCode(Constant.OTHER_ERROR_CODE);
+                    break;
+            }
+        }
+    }
+
+    @Override
+    public ChannelTypeHandleResponseObject faceCheckWZDecode(HttpServletRequest request, String channelId, String ifJkCode,
+                                                             Integer outTime, String customBody) {
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+        String upstreamCode = "" + Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+
+        /**默认使用卓望返回码*/
+        if (StringUtils.isBlank(ifJkCode)) {
+            ifJkCode = Constant.CUSTOMER_RETURN_ZW;
+        }
+        /**设置默认超时时间*/
+        if (outTime == null || outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        /**设置日志记录通道请求类型为同步*/
+        request.setAttribute(Constant.CHANNEL_TYPE_KEY, Constant.CHANNEL_TYPE_SYNC);
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
+        /**设置上游返回码日志记录-默认*/
+        res.setIsCharge(Constant.IS_NOT_CHARGE);
+        res.setCode(Constant.SUCCESS);
+
+
+
+        try {
+            LocalDateTime now = LocalDateTime.now();
+            String ymd = dateTimeFormatter.format(now);
+            String hashKey = commonUtil.getKey();
+            boolean flag = checkVisitCount(hashKey,key,yhProperties.getUrlFaceUp(),channelId);
+            if(!flag){
+                countOver(res,ifJkCode);
+                return res;
+            }
+            customBody = DecodeUtil.decodeParams(res, ifJkCode, customBody);
+            if (StringUtils.isBlank(customBody)) {
+                request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+                reduceVisitCount(hashKey,key);
+                return res;
+            }
+            Gson gson = new Gson();
+            Map map = gson.fromJson(customBody, Map.class);
+            gson = null;
+            JSONObject paramObject = JSON.parseObject(customBody);
+            paramObject.put("photo", "base64");
+            log.info("supplier10000003.faceCheckWZDecode---customBody={},outTime={}", paramObject.toJSONString(), outTime);
+            request.setAttribute(Constant.CHANNEL_LOG_QUERY,
+                    Base64.encodeBase64String(paramObject.toJSONString().getBytes("utf-8")));
+
+            OkHttpClient okHttpClient = client.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            if(StringUtils.isBlank((String)map.get("name"))
+                    ||StringUtils.isBlank((String)map.get("idCode"))
+                    ||StringUtils.isBlank((String)map.get("photo"))){
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                /**参数错误*/
+                if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+                    res.setResultCode(Constant.JK_RETURN_CODE_9909);
+                    res.setResultBody(Constant.RETURN_MESSAGE_77);
+                    res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                }else{
+                    res.setResultCode(Constant.ZW_RETURN_CODE_77);
+                    res.setResultBody(Constant.RETURN_MESSAGE_77);
+                    res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                }
+                reduceVisitCount(hashKey,key);
+                return res;
+            }
+            /**参数校验*/
+            if(!PatternTools.checkResult(4,(String)map.get("name"))){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.NAME_FORMAT_ERROR);
+                    res.setResultBody(Constant.NAME_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
+                }
+                reduceVisitCount(hashKey,key);
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                return res;
+            }else if(!PatternTools.checkResult(Constant.PATTERN_SPECIAL_ID_NUMBER_REGEX,(String)map.get("idCode"))){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.IDCODE_FORMAT_ERROR);
+                    res.setResultBody(Constant.IDCODE_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
+                }
+                reduceVisitCount(hashKey,key);
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                return res;
+            }
+            CommonRequestObject commonRequestObject = new CommonRequestObject();
+            commonRequestObject.setUsername(yhProperties.getUsername());
+            commonRequestObject.setApiKey(yhProperties.getApiKeyY000r1());
+            commonRequestObject.setFormat("json");
+            String paramString = "name=" + map.get("name")
+                    + "&identityCard=" + map.get("idCode")
+                    + "&photo=" + map.get("photo");
+            String encryptParamString = Utils.encrypt(yhProperties.getKey(), paramString);
+            RequestBody requestBody = new FormBody.Builder().add("apiKey", yhProperties.getApiKeyY000r1())
+                    .add("username", yhProperties.getUsername())
+                    .add("format", "json")
+                    .add("params", encryptParamString)
+                    .build();
+            Request okRequest = new Request.Builder()
+                    .url(yhProperties.getFaceCheckUri())
+                    .post(requestBody)
+                    .build();
+            Response response = okHttpClient.newCall(okRequest).execute();
+            String responseJson = response.body().string();
+
+            map = null;
+            log.info("--------------->接口返回数据为:{}", responseJson);
+            FaceCheckResObject faceCheckResObject = JSONObject.toJavaObject(JSON.parseObject(responseJson), FaceCheckResObject.class);
+
+            if(!check(faceCheckResObject,res,ifJkCode,channelId)){
+                return res;
+            }
+            /**判断计费状态*/
+            boolean isCharge = Constant.FACE_RES_CODE_ZERO.equals(faceCheckResObject.getCode())
+                    && (Constant.FACE_RES_RESULT_ONE.equals(faceCheckResObject.getData().getResult())
+                    || Constant.FACE_RES_RESULT_TWO.equals(faceCheckResObject.getData().getResult())
+                    || Constant.FACE_RES_RESULT_THREE.equals(faceCheckResObject.getData().getResult())
+                    || Constant.FACE_RES_RESULT_FIVE.equals(faceCheckResObject.getData().getResult())
+                    || Constant.FACE_RES_RESULT_TEN.equals(faceCheckResObject.getData().getResult())
+                    || Constant.FACE_RES_RESULT_ELEVEN.equals(faceCheckResObject.getData().getResult()));
+            if (isCharge) {
+                res.setIsCharge(Constant.IS_CHARGE);
+            } else {
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            /**设置请求状态*/
+            res.setCode(Constant.SUCCESS);
+            switchResultCode(null, ifJkCode, faceCheckResObject, res);
+
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, faceCheckResObject.getCode());
+        } catch (SocketTimeoutException soe) {
+            ErrorUtils.captureException(soe);
+            res.setCode(Constant.REQUEST_TIMEOUT);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        } catch (Exception e) {
+            e.printStackTrace();
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }
+        return res;
+    }
+    public boolean checkVisitCount(String hashKey,String key,long upCount,String channelId){
+        //查看是否有超过权限的标志
+        /*Map map =SjjhConstant.hashMap.get(hashKey);
+        if(map!=null&&map.get(key+SjjhConstant.key_subStr)!=null && map.get(key+SjjhConstant.key_subStr).equals(Boolean.TRUE)){
+            return false;
+        }*/
+
+        String countStr = (String)stringRedisTemplate.boundHashOps(hashKey).get(key);
+        log.info("countStr:{}",countStr);
+        if(countStr!=null && Long.parseLong(countStr)>=upCount){
+            return false;
+        }
+        if(stringRedisTemplate.boundHashOps(hashKey).hasKey(key+SjjhConstant.key_subStr)){
+            return false;
+        }
+        long visitCount = stringRedisTemplate.boundHashOps(hashKey).increment(key,1);
+        if(visitCount==1){
+            stringRedisTemplate.boundValueOps(hashKey).expire(1, TimeUnit.DAYS);
+        }
+
+        if(upCount-visitCount==yhProperties.getNotityLimit()){
+            //起一个线程,处理此逻辑
+            testNotify(channelId,1);
+        }
+        if(upCount-visitCount==0){
+            //起一个线程,处理此逻辑,
+            testNotify(channelId,2);
+        }
+
+        if(visitCount>upCount){
+            reduceVisitCount(hashKey,key);
+            return false;
+        }
+
+        return true;
+    }
+    public void countOver(ChannelTypeHandleResponseObject ret,String ifJkCode){
+        if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+            ret.setResultCode(Constant.OTHER_ERROR_CODE);
+
+        } else {
+            ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+
+        }
+        ret.setCode(Constant.REQUEST_LIMIT);
+    }
+    public void reduceVisitCount(String hashKey,String key){
+        long visitCount = stringRedisTemplate.boundHashOps(hashKey).increment(key,-1);
+
+    }
+
+    public boolean check(FaceCheckResObject faceCheckResObject,ChannelTypeHandleResponseObject ret,String ifJkCode,String channelId){
+        if("210".equals(faceCheckResObject.getCode())){
+            int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+            if(hour>=yhProperties.getHour()){
+                String hashKey = commonUtil.getKey();
+                String keySign=key+SjjhConstant.key_subStr;
+                boolean flag = stringRedisTemplate.boundHashOps(hashKey).putIfAbsent(keySign,"1");
+                log.info("key:{},flag:{}",keySign,flag);
+                ret.setCode(Constant.REQUEST_LIMIT);
+                if(flag){
+                    testNotify(channelId,3);
+                }
+            }
+
+            if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+
+            }
+            return false;
+        }
+        return true;
+    }
+
+    public void testNotify(String  channelId,int type){
+        String traceId= tracer.currentSpan().context().traceIdString();
+        NotifySms notifySms =new NotifySms();
+        notifySms.setSupplierProperties(yhProperties);
+        notifySms.setSmsActionInterface(smsActionInterface);
+        notifySms.setChannelActionInterface(channelActionInterface);
+        notifySms.setChannId(channelId);
+        notifySms.setTraceId(traceId);
+        notifySms.setType(type);
+        notifySms.setCount(0);
+        Timer timer =new Timer();
+        log.info("test..................,notify:{},traceId:{}",notifySms);
+        timer.schedule(new NotifyThread(notifySms),1*60*1000);
+    }
+
+}

+ 114 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/ForeignInvestServiceImpl.java

@@ -0,0 +1,114 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.ForeignInvestService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.ForeignInvestProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.ForeignInvestResponseObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Service
+public class ForeignInvestServiceImpl implements ForeignInvestService {
+
+	@Autowired
+	private ForeignInvestProperties foreignInvestProperties; 
+    @Autowired
+    ObjectMapper mapper;
+    
+    private OkHttpClient client = new OkHttpClient.Builder().build();
+    
+    @Override
+    public ChannelTypeHandleResponseObject foreignInvest(HttpServletRequest request,
+                                                         Integer outTime,
+                                                         String customBody) {
+
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+        res.setIsCharge(Constant.IS_NOT_CHARGE);
+        /**设置默认超时时间*/
+        if (outTime == null || outTime.intValue() <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        try {
+            Map map = mapper.readValue(customBody, Map.class);
+            OkHttpClient okHttpClient = client.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            if(map.get("cname") == null){
+            	log.error("cname为空");
+            	res.setCode(Constant.SUCCESS);
+            	res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            	res.setResultBody(Constant.INVALID_PARAMETER);
+            }
+            String paramString = "cname=" + map.get("cname");
+            String encryptParamString = Utils.encrypt(foreignInvestProperties.getApiSecret(), paramString);
+            log.info("foreignInvestProperties:{}",foreignInvestProperties);
+            RequestBody requestBody = new FormBody.Builder().add("apiKey", foreignInvestProperties.getApiKey())
+                    .add("username", foreignInvestProperties.getUsername())
+                    .add("format", "json")
+                    .add("params", encryptParamString)
+                    .build();
+            log.info("requestBody:{}",requestBody);
+            Request okRequest = new Request.Builder()
+                    .url(foreignInvestProperties.getUrl())
+                    .post(requestBody)
+                    .build();
+            Response response = okHttpClient.newCall(okRequest).execute();
+            if(!response.isSuccessful()){
+            	throw new Exception("request status is not 200,http status:"+String.valueOf(response.code()));
+            }
+            String responseJson = response.body().string();
+            log.info("--------------->接口返回数据为:{}", responseJson);
+            ForeignInvestResponseObject foreignInvestResponseObject = mapper.readValue(responseJson, ForeignInvestResponseObject.class);
+            /**判断计费状态*/
+            boolean isCharge = Constant.INFO_CODE_ZERO.equals(foreignInvestResponseObject.getCode());
+            if (isCharge) {
+                res.setIsCharge(Constant.IS_CHARGE);
+            } else {
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            res.setCode(Constant.SUCCESS);
+            if(Constant.INFO_CODE_ZERO.equals(foreignInvestResponseObject.getCode())){
+            	res.setResultCode(Constant.SUCCESS);
+            	String value = mapper.writeValueAsString(foreignInvestResponseObject.getData());  
+            	res.setResultBody(value);
+            }else if(Constant.INFO_PARAM_ERROR_202.equals(foreignInvestResponseObject.getCode())
+            		||Constant.INFO_PARAM_ERROR_203.equals(foreignInvestResponseObject.getCode())
+            		||Constant.INFO_PARAM_ERROR_205.equals(foreignInvestResponseObject.getCode())){
+            	res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            	res.setResultBody(Constant.INVALID_PARAMETER);
+            }else {
+            	res.setResultCode(Constant.OTHER_ERROR_CODE);
+            	res.setResultBody(Constant.OTHER_ERROR);
+            }
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, foreignInvestResponseObject.getCode());
+        } catch (IOException e) {
+        	ErrorUtils.captureException(e);
+        	log.error("IOException,message:{}",e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }catch (Exception e) {
+        	ErrorUtils.captureException(e);
+        	log.error("Exception,message:{}",e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }
+        return res;
+    }
+
+}

+ 337 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/IdentityCardServiceImpl.java

@@ -0,0 +1,337 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+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.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.IdentityCardService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.DESedeUtil;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.DecodeUtil;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.IdentityCardUpApiHttp;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.IdentityCardCheckResponseObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.IdentityCardJsonResolveObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.TwoElementsRequestObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.util.*;
+
+
+/**
+ *
+ * @author lixinxu
+ *
+ */
+@Slf4j
+@Service
+public class IdentityCardServiceImpl implements IdentityCardService {
+
+	@Value("${custom.identityCardUpApi.api}")
+	private String identityCardUpApiUri;
+	@Value("${custom.identityCardUpApi.apiKey}")
+	private String identityCardUpApiKey;
+	@Value("${custom.identityCardUpApi.usernaem}")
+	private String identityCardUpApiUsernaem;
+	@Value("${custom.identityCardUpApi.privateKey}")
+	private String identityCardUpApiPrivateKey;
+	@Value("${wz.decryptKey}")
+	private String decryptKey;
+	/**
+	 * 身份证二要素验证
+	 *
+	 * @param request
+	 * @param customBody
+	 * @param outTime
+	 * @return
+	 */
+	@Override
+	public ChannelTypeHandleResponseObject identityCardTwoPointCheck(HttpServletRequest request, String customBody, int outTime, String ifJkCode) {
+
+		ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+		ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+		String upstreamCode = "" + Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		try {
+			if (outTime <= 0) {
+				outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+			}
+			log.info("identityCardTwoPointCheck---customBody={},outTime={},ifJkCode={}", customBody, outTime, ifJkCode);
+			ObjectMapper objectMapper = new ObjectMapper();
+			IdentityCardJsonResolveObject jsonResolveObject = objectMapper.readValue(customBody,
+					IdentityCardJsonResolveObject.class);
+
+			//参数校验
+			log.info("supplier10000035.identityCardTwoPointCheck---requestObject={}", jsonResolveObject);
+			List<String> paramErrorResultList = new ArrayList<>();
+			//"^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\u3400-\\u4DB5\\u20000-\\u2A6D6·s]{2,30}$";
+			//2020-05-03 修改姓名验证
+			//姓名
+			/*if (StringUtils.isBlank(jsonResolveObject.getName()) || !PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX, jsonResolveObject.getName())) {
+				paramErrorResultList.add("name");
+			}
+			if(StringUtils.isBlank(jsonResolveObject.getName())
+					|| jsonResolveObject.getName().length() > 5
+					|| (!(jsonResolveObject.getName().replaceAll("[\u4e00-\u9fa5]*[A-Z]*\\d*-*_*\\s*", "").length()==0))){
+				paramErrorResultList.add("name");
+			}*/
+			//身份证号
+			if (StringUtils.isBlank(jsonResolveObject.getIdentityCard())
+					|| jsonResolveObject.getIdentityCard().length() > 18
+					|| (!jsonResolveObject.getIdentityCard().matches("\\d{15}|\\d{17}[\\dxX]"))){
+				paramErrorResultList.add("identityCard");
+			}
+
+			if (paramErrorResultList.size() > 0) {
+				ret.setCode(Constant.SUCCESS);
+				ret.setIsCharge(Constant.IS_NOT_CHARGE);
+				ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_INVALID_PARAMETER : Constant.INVALID_PARAMETER_CODE);
+				ret.setResultBody(Constant.INVALID_PARAMETER);
+				ret.setResultDesc(Constant.INVALID_PARAMETER);
+				return ret;
+			}
+
+			//请求的上游接口
+			Map<String, String> apiParam = new HashMap<>();
+			apiParam.put("name",jsonResolveObject.getName());
+			apiParam.put("identityCard",jsonResolveObject.getIdentityCard());
+
+			String responseContext = IdentityCardUpApiHttp.postApi(identityCardUpApiUri, identityCardUpApiKey, identityCardUpApiUsernaem,
+					identityCardUpApiPrivateKey, apiParam, outTime);
+
+			log.info("supplier10000035.identityCardTwoPointCheck接口responseContext={}", responseContext);
+
+
+			IdentityCardCheckResponseObject responseObject = null;
+			if(responseContext != null && !"".equals(responseContext)){
+				responseObject = objectMapper.readValue(
+						responseContext, IdentityCardCheckResponseObject.class);
+			}
+
+			log.info("supplier10000035.identityCardTwoPointCheck接口responseObject={}", responseObject);
+
+			if (responseObject != null) {
+				ret.setCode(Constant.SUCCESS);
+				setTwoElementsCheckResponse(ret, ifJkCode, responseObject);
+				request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, responseObject.getCode());
+			} else {
+				ret.setCode(Constant.REQUEST_TIMEOUT);
+			}
+
+		} catch (SocketTimeoutException ste) {
+			ErrorUtils.captureException(ste);
+			log.info("supplier10000035.identityCardTwoPointCheck接口SocketTimeoutException={}", ste);
+			ret.setCode(Constant.REQUEST_TIMEOUT);
+		} catch (UnrecognizedPropertyException upe) {
+			log.info("supplier10000035.identityCardTwoPointCheck接口-UnrecognizedPropertyException:{}", upe);
+			ErrorUtils.captureException(upe);
+			ret.setCode(Constant.SUCCESS);
+			ret.setIsCharge(Constant.IS_NOT_CHARGE);
+			/** 参数错误 */
+			ret.setIsCharge(Constant.IS_NOT_CHARGE);
+			ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_INVALID_PARAMETER : Constant.INVALID_PARAMETER_CODE);
+			ret.setResultBody(Constant.INVALID_PARAMETER);
+			ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+			return ret;
+		} catch (IOException ioe) {
+			log.info("supplier10000035.identityCardTwoPointCheck接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		} catch (Exception ioe) {
+			log.info("supplier10000035.identityCardTwoPointCheck接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		}
+		return ret;
+	}
+
+	public static void main(String[] args) {
+		String name ="比拉力丁·加拉力丁丁丁丁";
+		if (StringUtils.isBlank(name) || !PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX, name)) {
+			System.out.println("---------");
+		}
+
+	}
+
+	@Override
+	public ChannelTypeHandleResponseObject twoElementsCheckWeiZhongDecode(HttpServletRequest request, String customBody, int outTime, String ifJkCode) {
+		ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+		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;
+		}
+		if (outTime <= 0) {
+			outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+		}
+		log.info("supplier10000003.twoElementsCheckWeiZhongDecode---customBody={},outTime={}", customBody, outTime);
+
+		customBody = DecodeUtil.decodeParams(ret, returnType, customBody);
+		if (StringUtils.isBlank(customBody)) {
+			ret.setCode(Constant.SUCCESS);
+			request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+			return ret;
+		}
+
+		try {
+			ObjectMapper objectMapper = new ObjectMapper();
+			TwoElementsRequestObject requestObject = objectMapper.readValue(customBody,
+					TwoElementsRequestObject.class);
+			log.info("supplier10000003.twoElementsCheckWeiZhongDecode---requestObject={}", requestObject);
+
+			// 参数校验
+			if (!validateRequestParams(ret, returnType, requestObject)) {
+				ret.setCode(Constant.SUCCESS);
+				request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+				return ret;
+			}
+
+			//请求的上游接口
+			Map<String, String> apiParam = new HashMap<>();
+			apiParam.put("name",requestObject.getName());
+			apiParam.put("identityCard",requestObject.getIdCode());
+
+			String responseContext = IdentityCardUpApiHttp.postApi(identityCardUpApiUri, identityCardUpApiKey, identityCardUpApiUsernaem,
+					identityCardUpApiPrivateKey, apiParam, outTime);
+
+			IdentityCardCheckResponseObject responseObject = null;
+			if(responseContext != null && !"".equals(responseContext)){
+				responseObject = objectMapper.readValue(
+						responseContext, IdentityCardCheckResponseObject.class);
+			}
+			if (responseObject != null) {
+				ret.setCode(Constant.SUCCESS);
+				setTwoElementsCheckResponse(ret, ifJkCode, responseObject);
+				request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, responseObject.getCode());
+			} else {
+				ret.setCode(Constant.REQUEST_TIMEOUT);
+			}
+		} catch (SocketTimeoutException ste) {
+			log.info("supplier10000003.twoElementsCheckWeiZhongDecode接口-SocketTimeoutException:{}", ste);
+			ErrorUtils.captureException(ste);
+			ret.setCode(Constant.REQUEST_TIMEOUT);
+		} catch (Exception ioe) {
+			log.info("supplier10000003.twoElementsCheckWeiZhongDecode接口-Exception:{}", ioe);
+			ErrorUtils.captureException(ioe);
+			ret.setCode(Constant.FAIL);
+		}
+		request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+		return ret;
+	}
+
+	private boolean validateRequestParams(ChannelTypeHandleResponseObject ret, String returnType,
+										  TwoElementsRequestObject requestObject) {
+		if (!validateParamNullValue(requestObject)) {
+			if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+				ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+				ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+				ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+			} else {
+				ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+				ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+				ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+			}
+			return false;
+		} else if (StringUtils.isBlank(requestObject.getName()) ||
+				!PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX, requestObject.getName())) {
+			if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+				ret.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
+				ret.setResultDesc(Constant.NAME_FORMAT_ERROR);
+				ret.setResultBody(Constant.NAME_FORMAT_ERROR);
+			} else {
+				ret.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
+				ret.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
+				ret.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
+			}
+			return false;
+		} else if (StringUtils.isBlank(requestObject.getIdCode())
+				|| !PatternTools.checkResult(Constant.PATTERN_ID_NUMBER_REGEX, requestObject.getIdCode())) {
+			if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+				ret.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
+				ret.setResultDesc(Constant.IDCODE_FORMAT_ERROR);
+				ret.setResultBody(Constant.IDCODE_FORMAT_ERROR);
+			} else {
+				ret.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
+				ret.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
+				ret.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
+			}
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	private boolean validateParamNullValue(Object jsonResolveObject) {
+		ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
+		Validator validator = vf.getValidator();
+		Set<ConstraintViolation<Object>> set = validator.validate(jsonResolveObject);
+		for (ConstraintViolation<Object> con : set) {
+			if (StringUtils.isNotBlank(con.getMessage())) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private void setTwoElementsCheckResponse(ChannelTypeHandleResponseObject ret, String ifJkCode, IdentityCardCheckResponseObject responseObject) {
+		if ("0".equals(responseObject.getCode())) {
+			// 查询成功
+			if(responseObject.getData() != null){
+				if("1".equals(responseObject.getData().getCompStatus())){
+					ret.setIsCharge(Constant.IS_CHARGE);
+					ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_MATCH : Constant.MATCH_CODE);
+					ret.setResultBody(Constant.MATCH);
+					ret.setResultDesc(Constant.MATCH);
+
+				}else if("2".equals(responseObject.getData().getCompStatus())){
+					ret.setIsCharge(Constant.IS_CHARGE);
+					ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_NO_MATCH : Constant.UN_MATCH_CODE);
+					ret.setResultBody(Constant.UN_MATCH);
+					ret.setResultDesc(Constant.UN_MATCH);
+				}else if ("3".equals(responseObject.getData().getCompStatus())){
+					ret.setIsCharge(Constant.IS_NOT_CHARGE);
+					ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_NO_INFO : Constant.UN_FIND_NUM_CODE);
+					ret.setResultBody(Constant.UN_FIND_NUM);
+					ret.setResultDesc(Constant.UN_FIND_NUM);
+				}else{
+					ret.setIsCharge(Constant.IS_NOT_CHARGE);
+					ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_OTHER_ERROR : Constant.OTHER_ERROR_CODE);
+					ret.setResultBody(Constant.OTHER_ERROR);
+					ret.setResultDesc(Constant.OTHER_ERROR);
+				}
+			}
+
+		}else if ("200".equals(responseObject.getCode())) {
+			ret.setIsCharge(Constant.IS_NOT_CHARGE);
+			ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_NO_INFO : Constant.UN_FIND_NUM_CODE);
+			ret.setResultBody(Constant.UN_FIND_NUM);
+			ret.setResultDesc(Constant.UN_FIND_NUM);
+		}else if("205".equals(responseObject.getCode())){
+			ret.setIsCharge(Constant.IS_NOT_CHARGE);
+			ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_INVALID_PARAMETER : Constant.INVALID_PARAMETER_CODE);
+			ret.setResultBody(Constant.INVALID_PARAMETER);
+			ret.setResultDesc(Constant.INVALID_PARAMETER);
+		}else{
+			// 其他错误
+			ret.setIsCharge(Constant.IS_NOT_CHARGE);
+			ret.setResultCode(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode) ? Constant.JK_RETURN_CODE_OTHER_ERROR : Constant.OTHER_ERROR_CODE);
+			ret.setResultBody(Constant.OTHER_ERROR);
+			ret.setResultDesc(Constant.OTHER_ERROR);
+		}
+	}
+}

+ 413 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/TelecomOnlineStatusServiceImpl.java

@@ -0,0 +1,413 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+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.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.TelecomOnlineStatusService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.YHProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.TelecomOnlineResObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.vo.TelecomCustomBody;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/11 09:43:22
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class TelecomOnlineStatusServiceImpl implements TelecomOnlineStatusService {
+
+    @Autowired
+    private YHProperties yhProperties;
+
+    private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
+
+    @Override
+    public ChannelTypeHandleResponseObject callTelecomOnlineStatus(HttpServletRequest request, String channelId, String ifJkCode, Integer outTime, String customBody) {
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+
+        /**默认使用卓望返回码*/
+        if(StringUtils.isBlank(ifJkCode)){
+            ifJkCode = Constant.CUSTOMER_RETURN_ZW;
+        }
+        /**设置默认超时时间*/
+        if (outTime == null || outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+
+        ObjectMapper mapper = new ObjectMapper();
+        TelecomCustomBody telecomCustomBody = null;
+        /**参数校验*/
+        try {
+            telecomCustomBody = mapper.readValue(customBody,TelecomCustomBody.class);
+        } catch (IOException e) {
+            log.info("----------->电信在网状态:参数错误:{}",e);
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.SUCCESS);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            /**参数错误*/
+            if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+                res.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+            }else{
+                res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            }
+            res.setResultBody(Constant.PARAMETER_NAME_ERROR);
+        	res.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            return res;
+        }
+        try {
+        /**手机号码格式不正确*/
+            if(!PatternTools.checkResult(0,telecomCustomBody.getPhone())){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.MOBILE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.MOBILE_FORMAT_ERROR);
+                    res.setResultBody(Constant.MOBILE_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_MOBILE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_MOBILE_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_MOBILE_FORMAT_ERROR);
+                }
+                res.setCode(Constant.SUCCESS);
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                return res;
+            }
+            OkHttpClient client = okHttpClient.newBuilder()
+                    .connectTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .build();
+            String paramsString = "apiKey="+yhProperties.getApiKeyY002c1()
+                    +"&username="+yhProperties.getUsername()
+                    +"&format=json&params="+ Utils.encrypt(yhProperties.getKey(),"phone="+telecomCustomBody.getPhone());
+            log.info("---------------->发送参数为:{}", paramsString);
+            RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),"");
+            Request okRequest = new Request.Builder()
+                    .url(yhProperties.getUri()+"?"+paramsString)
+                    .post(requestBody)
+                    .build();
+        Response response = null;
+        response = client.newCall(okRequest).execute();
+        String responseJson = response.body().string();
+            log.info("----------------->上游接口返回数据为:{}",responseJson);
+            TelecomOnlineResObject telecomOnlineResObject = mapper.readValue(responseJson,TelecomOnlineResObject.class);
+            /**判断计费状态*/
+            boolean isCharge = Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineResObject.getCode())
+                    &&(Constant.TELECOM_RES_RESULT_ZERO.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_ONE.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_TWO.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_THREE.equals(telecomOnlineResObject.getData().getResult()));
+            if(isCharge){
+                res.setIsCharge(Constant.IS_CHARGE);
+            }else{
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            /**设置请求状态*/
+            res.setCode(Constant.SUCCESS);
+            switchResultCode(ifJkCode,telecomOnlineResObject,res);
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,telecomOnlineResObject.getCode());
+        } catch (IOException e) {
+            log.info("-------->电信在网状态-上游接口调用失败",e);
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }
+        return res;
+    }
+
+
+    public void switchResultCode(String ifJkCode, TelecomOnlineResObject telecomOnlineTimeResObject, ChannelTypeHandleResponseObject res) {
+        /**jk码*/
+        if (Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)) {
+            if (Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineTimeResObject.getCode())) {
+                switch (telecomOnlineTimeResObject.getData().getResult()) {
+                    case "0":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1110);
+                        res.setResultBody(Constant.RETURN_MESSAGE_64);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_64);
+                        break;
+                    case "1":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1111);
+                        res.setResultBody(Constant.RETURN_MESSAGE_65);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_65);
+                        break;
+                    case "2":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1112);
+                        res.setResultBody(Constant.RETURN_MESSAGE_66);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_66);
+                        break;
+                    case "3":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1113);
+                        res.setResultBody(Constant.RETURN_MESSAGE_67);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_67);
+                        break;
+                    case "N":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1099);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "4":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    default:
+                        break;
+                }
+            } else {
+                switch (telecomOnlineTimeResObject.getCode()) {
+                    case "200":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1099);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "201":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "202":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "203":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "204":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "206":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "208":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "209":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "210":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "211":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "260":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "261":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "262":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "263":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "500":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "501":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "205":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9909);
+                        res.setResultBody(Constant.RETURN_MESSAGE_77);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                        break;
+                    case "207":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9922);
+                        res.setResultBody(Constant.RETURN_MESSAGE_62);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_62);
+                        break;
+                    case "908":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9903);
+                        res.setResultBody(Constant.RETURN_MESSAGE_63);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_63);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+        /**卓望码*/
+        else {
+            if (Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineTimeResObject.getCode())) {
+                switch (telecomOnlineTimeResObject.getData().getResult()) {
+                    case "0":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_64);
+                        res.setResultBody(Constant.RETURN_MESSAGE_64);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_64);
+                        break;
+                    case "1":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_65);
+                        res.setResultBody(Constant.RETURN_MESSAGE_65);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_65);
+                        break;
+                    case "2":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_66);
+                        res.setResultBody(Constant.RETURN_MESSAGE_66);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_66);
+                        break;
+                    case "3":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_67);
+                        res.setResultBody(Constant.RETURN_MESSAGE_67);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_67);
+                        break;
+                    case "N":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_60);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "4":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    default:
+                        break;
+                }
+            } else {
+                switch (telecomOnlineTimeResObject.getCode()) {
+                    case "200":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_60);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "201":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "202":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "203":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "204":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "206":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "208":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "209":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "210":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "211":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "260":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "261":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "262":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "263":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "500":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "501":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "205":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_77);
+                        res.setResultBody(Constant.RETURN_MESSAGE_77);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                        break;
+                    case "207":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_62);
+                        res.setResultBody(Constant.RETURN_MESSAGE_62);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_62);
+                        break;
+                    case "908":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_63);
+                        res.setResultBody(Constant.RETURN_MESSAGE_63);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_63);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+}

+ 413 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/TelecomOnlineTimeServiceImpl.java

@@ -0,0 +1,413 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+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.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.TelecomOnlineTimeService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.YHProperties;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.TelecomOnlineResObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.vo.TelecomCustomBody;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 18:05:45
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class TelecomOnlineTimeServiceImpl implements TelecomOnlineTimeService {
+
+    @Autowired
+    private YHProperties yhProperties;
+    
+    private OkHttpClient client = new OkHttpClient.Builder().build();
+
+    @Override
+    public ChannelTypeHandleResponseObject callTelecomOnlineTime(HttpServletRequest request, String channelId, String ifJkCode, Integer outTime, String customBody) {
+        ChannelTypeHandleResponseObject res = new ChannelTypeHandleResponseObject();
+
+        /**默认使用卓望返回码*/
+        if(StringUtils.isBlank(ifJkCode)){
+            ifJkCode = Constant.CUSTOMER_RETURN_ZW;
+        }
+        /**设置默认超时时间*/
+        if (outTime == null || outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+
+            ObjectMapper mapper = new ObjectMapper();
+        TelecomCustomBody telecomCustomBody = null;
+        try {
+            telecomCustomBody = mapper.readValue(customBody,TelecomCustomBody.class);
+        } catch (IOException e) {
+            log.info("---->电信在网时长-参数错误:{}",e);
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.SUCCESS);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            /**参数错误*/
+            if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+                res.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+            }else{
+                res.setResultCode(Constant.INVALID_PARAMETER_CODE);
+            }
+            res.setResultBody(Constant.PARAMETER_NAME_ERROR);
+        	res.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            return res;
+        }
+        try {
+            /**手机号码格式不正确*/
+            if(!PatternTools.checkResult(0,telecomCustomBody.getPhone())){
+                if(Constant.CUSTOMER_RETURN_ZW.equals(ifJkCode)) {
+                    res.setResultCode(Constant.MOBILE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.MOBILE_FORMAT_ERROR);
+                    res.setResultBody(Constant.MOBILE_FORMAT_ERROR);
+                } else {
+                    res.setResultCode(Constant.JK_MOBILE_FORMAT_ERROR_CODE);
+                    res.setResultDesc(Constant.JK_MOBILE_FORMAT_ERROR);
+                    res.setResultBody(Constant.JK_MOBILE_FORMAT_ERROR);
+                }
+                res.setCode(Constant.SUCCESS);
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+                return res;
+            }
+            OkHttpClient okHttpClient = client.newBuilder()
+                    .connectTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime,TimeUnit.MILLISECONDS)
+                    .build();
+            String paramsString = "apiKey="+yhProperties.getApiKeyY002b1()
+                    +"&username="+yhProperties.getUsername()
+                    +"&format=json&params="+ Utils.encrypt(yhProperties.getKey(),"phone="+telecomCustomBody.getPhone());
+            log.info("---------------->发送参数:{}", paramsString);
+            RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),"");
+            Request okRequest = new Request.Builder()
+                    .url(yhProperties.getUri()+"?"+paramsString)
+                    .post(requestBody)
+                    .build();
+            Response response = okHttpClient.newCall(okRequest).execute();
+            String responseJson = response.body().string();
+            log.info("接口返回数据为:---{}",responseJson);
+            TelecomOnlineResObject telecomOnlineResObject = mapper.readValue(responseJson,TelecomOnlineResObject.class);
+            /**判断计费状态*/
+            boolean isCharge = Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineResObject.getCode())
+                    &&(Constant.TELECOM_RES_RESULT_A.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_B.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_C.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_D.equals(telecomOnlineResObject.getData().getResult())
+                    || Constant.TELECOM_RES_RESULT_E.equals(telecomOnlineResObject.getData().getResult()));
+            if(isCharge){
+                res.setIsCharge(Constant.IS_CHARGE);
+            }else {
+                res.setIsCharge(Constant.IS_NOT_CHARGE);
+            }
+            /**设置请求状态*/
+            res.setCode(Constant.SUCCESS);
+            switchResultCode(ifJkCode,telecomOnlineResObject,res);
+            /**设置上游返回码日志记录*/
+            request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE,telecomOnlineResObject.getCode());
+
+        } catch (IOException e) {
+            log.info("------->电信在网时长上游通道调用失败:{}",e);
+            ErrorUtils.captureException(e);
+            res.setCode(Constant.FAIL);
+            res.setIsCharge(Constant.IS_NOT_CHARGE);
+            return res;
+        }
+        return res;
+    }
+
+
+    public void switchResultCode(String ifJkCode, TelecomOnlineResObject telecomOnlineTimeResObject, ChannelTypeHandleResponseObject res){
+        /**jk码*/
+        if(Constant.CUSTOMER_RETURN_JK.equals(ifJkCode)){
+            if(Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineTimeResObject.getCode())){
+                switch (telecomOnlineTimeResObject.getData().getResult()){
+                    case "A":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1105);
+                        res.setResultBody(Constant.RETURN_MESSAGE_55);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_55);
+                        break;
+                    case "B":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1106);
+                        res.setResultBody(Constant.RETURN_MESSAGE_56);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_56);
+                        break;
+                    case "C":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1107);
+                        res.setResultBody(Constant.RETURN_MESSAGE_57);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_57);
+                        break;
+                    case "D":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1108);
+                        res.setResultBody(Constant.RETURN_MESSAGE_58);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_58);
+                        break;
+                    case "E":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1109);
+                        res.setResultBody(Constant.RETURN_MESSAGE_59);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_59);
+                        break;
+                    case "N":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1099);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    default:
+                        break;
+                }
+            }else{
+                switch (telecomOnlineTimeResObject.getCode()){
+                    case "200":
+                        res.setResultCode(Constant.JK_RETURN_CODE_1099);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "201":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "202":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "203":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "204":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "206":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "208":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "209":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "210":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "211":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "260":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "261":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "262":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "263":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "500":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "501":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9901);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "205":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9909);
+                        res.setResultBody(Constant.RETURN_MESSAGE_77);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                        break;
+                    case "207":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9922);
+                        res.setResultBody(Constant.RETURN_MESSAGE_62);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_62);
+                        break;
+                    case "908":
+                        res.setResultCode(Constant.JK_RETURN_CODE_9903);
+                        res.setResultBody(Constant.RETURN_MESSAGE_63);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_63);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+        /**卓望码*/
+        else{
+            if(Constant.TELECOM_RES_CODE_ZERO.equals(telecomOnlineTimeResObject.getCode())){
+                switch (telecomOnlineTimeResObject.getData().getResult()){
+                    case "A":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_55);
+                        res.setResultBody(Constant.RETURN_MESSAGE_55);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_55);
+                        break;
+                    case "B":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_56);
+                        res.setResultBody(Constant.RETURN_MESSAGE_56);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_56);
+                        break;
+                    case "C":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_57);
+                        res.setResultBody(Constant.RETURN_MESSAGE_57);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_57);
+                        break;
+                    case "D":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_58);
+                        res.setResultBody(Constant.RETURN_MESSAGE_58);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_58);
+                        break;
+                    case "E":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_59);
+                        res.setResultBody(Constant.RETURN_MESSAGE_59);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_59);
+                        break;
+                    case "N":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_60);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    default:
+                        break;
+                }
+            }else{
+                switch (telecomOnlineTimeResObject.getCode()){
+                    case "200":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_60);
+                        res.setResultBody(Constant.RETURN_MESSAGE_60);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_60);
+                        break;
+                    case "201":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "202":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "203":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "204":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "206":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "208":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "209":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "210":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "211":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "260":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "261":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "262":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "263":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "500":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "501":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_61);
+                        res.setResultBody(Constant.RETURN_MESSAGE_61);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_61);
+                        break;
+                    case "205":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_77);
+                        res.setResultBody(Constant.RETURN_MESSAGE_77);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_77);
+                        break;
+                    case "207":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_62);
+                        res.setResultBody(Constant.RETURN_MESSAGE_62);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_62);
+                        break;
+                    case "908":
+                        res.setResultCode(Constant.ZW_RETURN_CODE_63);
+                        res.setResultBody(Constant.RETURN_MESSAGE_63);
+                        res.setResultDesc(Constant.RETURN_MESSAGE_63);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+}

+ 236 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/VehicleViolationInfoServiceImpl.java

@@ -0,0 +1,236 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.VehicleViolationInfoService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.Utils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.VehicleViolationInfoJsonResolveObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.apache.commons.lang3.ArrayUtils;
+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 javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.net.SocketTimeoutException;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Service
+public class VehicleViolationInfoServiceImpl implements VehicleViolationInfoService {
+    @Value("${yh.uri}")
+    private String yhUrl;
+    @Value("${yh.username}")
+    private String yhUserName;
+    @Value("${yh.key}")
+    private String yhKey;
+    @Value("${yh.apiKeyY000v1}")
+    private String apiKeyY000v1;
+    @Autowired
+    private ObjectMapper objectMapper;
+    
+    private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
+
+    @Override
+    public ChannelTypeHandleResponseObject getVehicleViolationInfo(HttpServletRequest request, String customBody, int outTime) {
+        ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
+        ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
+        String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
+        String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
+
+        if (StringUtils.isBlank(returnType)) {
+            returnType = Constant.CUSTOMER_RETURN_ZW;
+        }
+        if (outTime <= 0) {
+            outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
+        }
+        log.info("getVehicleViolationInfo---customBody={},outTime={}", customBody, outTime);
+
+        try {
+            VehicleViolationInfoJsonResolveObject jsonResolveObject = objectMapper.readValue(customBody, VehicleViolationInfoJsonResolveObject.class);
+            //参数校验
+            if (!validateParams(ret, returnType, jsonResolveObject)) {
+                ret.setCode(Constant.SUCCESS);
+                request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+                return ret;
+            }
+
+            String params = Utils.encrypt(yhKey, jsonResolveObject.toString());
+            FormBody.Builder formBodyBuilder = new FormBody.Builder()
+                    .add("apiKey", apiKeyY000v1)
+                    .add("username", yhUserName)
+                    .add("params", params);
+            Request okRequest = new Request.Builder()
+                    .post(formBodyBuilder.build())
+                    .url(yhUrl)
+                    .build();
+            OkHttpClient client = okHttpClient.newBuilder()
+                    .connectTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .readTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .writeTimeout(outTime, TimeUnit.MILLISECONDS)
+                    .build();
+            Response response = client.newCall(okRequest).execute();
+            String responseContext = "";
+            if (response.body() != null) {
+                responseContext = response.body().string();
+            }
+            log.info("supplier10000003.getVehicleViolationInfo接口responseContext={}", responseContext);
+
+            JSONObject responseJsonObject = JSONObject.parseObject(responseContext);
+            log.info("supplier10000003.getVehicleViolationInfo接口responseObject={}", responseJsonObject);
+
+            int httpResponseCode = response.code();
+            log.info("supplier10000003.getVehicleViolationInfo接口httpResponseCode={}", httpResponseCode);
+
+            if (responseJsonObject != null) {
+                ret.setCode(Constant.SUCCESS);
+                setVehicleViolationInfoResponse(ret, returnType, responseJsonObject);
+                upstreamCode = responseJsonObject.get("code").toString();
+                response.close();
+            } else {
+                ret.setCode(Constant.FAIL);
+            }
+        } catch (SocketTimeoutException ste) {
+            ErrorUtils.captureException(ste);
+            log.info("supplier10000003.getVehicleViolationInfo接口SocketTimeoutException={}", ste);
+            ret.setCode(Constant.REQUEST_TIMEOUT);
+        } catch (Exception ioe) {
+            ErrorUtils.captureException(ioe);
+            log.info("supplier10000003.getVehicleViolationInfo接口Exception={}", ioe);
+            ret.setCode(Constant.FAIL);
+        }
+
+        //上游返回码
+        request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        return ret;
+    }
+
+    private boolean validateParams(ChannelTypeHandleResponseObject ret, String returnType,
+                                   VehicleViolationInfoJsonResolveObject jsonResolveObject) {
+        if (!validateParamNullValue(jsonResolveObject)) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+                ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
+                ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
+            }
+            return false;
+        } else if (StringUtils.isBlank(jsonResolveObject.getCarNumber())
+                || StringUtils.isBlank(jsonResolveObject.getCarCode())
+                || StringUtils.isBlank(jsonResolveObject.getCarDriverNumber())
+                || StringUtils.isBlank(jsonResolveObject.getCarType())
+                || !PatternTools.checkResult(Constant.PATTERN_CAR_NUMBER_REGEX, jsonResolveObject.getCarNumber())
+                || !ArrayUtils.contains(SjjhConstant.VEHICLE_VIOLATION_CAR_TYPE, jsonResolveObject.getCarType())) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            }
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    private void setVehicleViolationInfoResponse(ChannelTypeHandleResponseObject ret, String returnType, JSONObject jsonObject) {
+        String responseCode = jsonObject.get("code").toString();
+        boolean isCharge = !StringUtils.isBlank(responseCode)
+                && ArrayUtils.contains(SjjhConstant.VEHICLE_VIOLATION_CHARGE_CODE, responseCode);
+
+        if (isCharge) {
+            ret.setIsCharge(Constant.INTERFACE_QUERY_FEE);
+        }
+
+        if (Constant.CUSTOMER_RETURN_JK.equals(returnType)) {
+            if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_0)) {
+                // 查询成功
+                ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
+                ret.setResultBody(JSONObject.toJSONString(jsonObject.get("data")));
+                ret.setResultDesc(SjjhConstant.QUERY_SUCCESS);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_200)) {
+                // 库无
+                ret.setResultCode(Constant.JK_RETURN_CODE_NO_INFO);
+                ret.setResultBody(Constant.UN_FIND_NUM);
+                ret.setResultDesc(Constant.UN_FIND_NUM);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_910)) {
+                // 输入车牌号或车架号或发动机号有误
+                ret.setResultCode(Constant.JK_RETURN_CODE_1150);
+                ret.setResultBody(Constant.RETURN_MESSAGE_80);
+                ret.setResultDesc(Constant.RETURN_MESSAGE_80);
+            } else if (StringUtils.isNotBlank(responseCode) && (responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_205)
+                    || responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_913))) {
+                // 参数错误
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else {
+                // 查询错误
+                ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        } else {
+            if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_0)) {
+                // 查询成功
+                ret.setResultCode(Constant.MATCH_CODE);
+                ret.setResultBody(JSONObject.toJSONString(jsonObject.get("data")));
+                ret.setResultDesc(SjjhConstant.QUERY_SUCCESS);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_200)) {
+                // 库无
+                ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+                ret.setResultBody(Constant.UN_FIND_NUM);
+                ret.setResultDesc(Constant.UN_FIND_NUM);
+            } else if (StringUtils.isNotBlank(responseCode) && responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_910)) {
+                // 输入车牌号或车架号或发动机号有误
+                ret.setResultCode(Constant.ZW_RETURN_CODE_80);
+                ret.setResultBody(Constant.RETURN_MESSAGE_80);
+                ret.setResultDesc(Constant.RETURN_MESSAGE_80);
+            } else if (StringUtils.isNotBlank(responseCode) && (responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_205)
+                    || responseCode.equals(SjjhConstant.VEHICLE_VIOLATION_RESPONSE_CODE_913))) {
+                // 参数错误
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else {
+                // 查询错误
+                ret.setResultCode(Constant.OTHER_ERROR_CODE);
+                ret.setResultBody(Constant.OTHER_ERROR);
+                ret.setResultDesc(Constant.OTHER_ERROR);
+            }
+        }
+    }
+
+    private boolean validateParamNullValue(VehicleViolationInfoJsonResolveObject jsonResolveObject) {
+        ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
+        Validator validator = vf.getValidator();
+        Set<ConstraintViolation<VehicleViolationInfoJsonResolveObject>> set = validator.validate(jsonResolveObject);
+        for (ConstraintViolation<VehicleViolationInfoJsonResolveObject> con : set) {
+            if (StringUtils.isNotBlank(con.getMessage())) {
+                return false;
+            }
+        }
+        return true;
+    }
+}

File diff suppressed because it is too large
+ 2275 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/service/impl/YHChannelServiceImpl.java


File diff suppressed because it is too large
+ 78 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/AesUtil.java


+ 17 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/CommonUtil.java

@@ -0,0 +1,17 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class CommonUtil {
+    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+    public String getKey(){
+        LocalDateTime now = LocalDateTime.now();
+        String ymd = dateTimeFormatter.format(now);
+        String hashKey = "003-"+ymd;
+        return hashKey;
+    }
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/CompanyInfoProperties.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import lombok.Data;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "companyinfo")
+public class CompanyInfoProperties {
+	 private String url;
+	 private String apiKey;
+	 private String apiSecret;
+	 private String username;
+	 private Map<Integer,String> code;
+	 private Map<Integer,String> desc;
+}

+ 97 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DESEncrypt.java

@@ -0,0 +1,97 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import org.springframework.util.Base64Utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+import java.security.Key;
+import java.security.spec.AlgorithmParameterSpec;
+
+/**
+ *
+ * @author Administrator
+ *
+ */
+public class DESEncrypt {
+
+	/**
+	 * 加密
+	 *
+	 * @param key
+	 * @param data
+	 * @return
+	 * @throws Exception
+	 */
+	public static String encode(String key, String data) {
+
+		try {
+			DESKeySpec dks = new DESKeySpec(key.getBytes());
+			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+			// key的长度不能够小于8位字节
+			Key secretKey = keyFactory.generateSecret(dks);
+			Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+			IvParameterSpec iv = new IvParameterSpec(key.getBytes());// 向量
+			AlgorithmParameterSpec paramSpec = iv;
+			cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
+			byte[] bytes = cipher.doFinal(data.getBytes("utf-8"));
+			return Base64Utils.encodeToString(bytes);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return "";
+		}
+	}
+
+	/**
+	 * 解密
+	 *
+	 * @param key
+	 * @param xml
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] decode(String key, byte[] data) throws Exception {
+		try {
+			DESKeySpec dks = new DESKeySpec(key.getBytes());
+			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+			// key的长度不能够小于8位字节
+			Key secretKey = keyFactory.generateSecret(dks);
+			Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+			IvParameterSpec iv = new IvParameterSpec(key.getBytes());
+			AlgorithmParameterSpec paramSpec = iv;
+			cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
+			byte[] bs = cipher.doFinal(data);
+			return bs;
+		} catch (Exception e) {
+			throw new Exception(e);
+		}
+	}
+
+	/**
+	 * 获取编码后的值(utf-8)
+	 *
+	 * @param key
+	 * @param data
+	 * @return
+	 * @throws Exception
+	 */
+	public static String decodeValueUTf8(String key, String data) {
+		byte[] datas;
+		String value = null;
+		try {
+			data = data.replaceAll(" ", "+");
+			data = data.replaceAll("\n", "");
+			data = data.replaceAll("\r", "");
+			datas = decode(key, Base64Utils.decodeFromString(data));
+			value = new String(datas, "utf-8");
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "error";
+		}
+		return value;
+	}
+
+
+}

+ 107 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DESedeUtil.java

@@ -0,0 +1,107 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+
+@Slf4j
+public class DESedeUtil {
+    //定义加密算法,有DES、DESede(即3DES)、Blowfish
+    private static final String Algorithm = "DESede";
+
+    /**
+     * 加密方法
+     *
+     * @param src 源数据的字节数组
+     * @return
+     */
+    public static String encryptMode(String src, String key) {
+        try {
+            log.info("开始加密");
+            SecretKey deskey = new SecretKeySpec(build3DesKey(key), Algorithm);    //生成密钥
+            Cipher c1 = Cipher.getInstance(Algorithm);    //实例化负责加密/解密的Cipher工具类
+            c1.init(Cipher.ENCRYPT_MODE, deskey);    //初始化为加密模式
+            return byteToHexString(c1.doFinal(src.getBytes()));
+
+        } catch (Exception e) {
+            log.error("加密失败:src={},key={}", src,key,e);
+        }
+        return "";
+    }
+
+
+
+    /**
+     * 解密函数
+     *
+     * @param src 密文的字节数组
+     * @return
+     */
+    public static String decryptMode(String src, String key) {
+        String result="";
+        try {
+            log.info("开始解密");
+            byte[] srcArray = hexStringToBytes(src);
+            SecretKey deskey = new SecretKeySpec(build3DesKey(key), Algorithm);
+            Cipher c1 = Cipher.getInstance(Algorithm);
+            c1.init(Cipher.DECRYPT_MODE, deskey); //初始化为解密模式
+            result= new String(c1.doFinal(srcArray));
+        } catch (Exception e) {
+            log.error("解密失败:src={},key={}", src,key,e);
+        }
+        return result;
+    }
+
+    public static String byteToHexString(byte[] b) {
+        String a = "";
+
+        for(int i = 0; i < b.length; ++i) {
+            String hex = Integer.toHexString(b[i] & 255);
+            if(hex.length() == 1) {
+                hex = '0' + hex;
+            }
+
+            a = a + hex;
+        }
+
+        return a;
+    }
+
+    public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException {
+        byte[] key = new byte[24];    //声明一个24位的字节数组,默认里面都是0
+        byte[] temp = keyStr.getBytes("UTF-8");    //将字符串转成字节数组
+        if (key.length > temp.length) {
+            //如果temp不够24位,则拷贝temp数组整个长度的内容到key数组中
+            System.arraycopy(temp, 0, key, 0, temp.length);
+        } else {
+            //如果temp大于24位,则拷贝temp数组24个长度的内容到key数组中
+            System.arraycopy(temp, 0, key, 0, key.length);
+        }
+        return key;
+    }
+
+    public static byte[] hexStringToBytes(String hexString) {
+        if (hexString != null && !hexString.equals("")) {
+            hexString = hexString.toUpperCase();
+            int length = hexString.length() / 2;
+            char[] hexChars = hexString.toCharArray();
+            byte[] d = new byte[length];
+
+            for (int i = 0; i < length; ++i) {
+                int pos = i * 2;
+                d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+            }
+            return d;
+        } else {
+            return null;
+        }
+    }
+
+    static byte charToByte(char c) {
+        return (byte) "0123456789ABCDEF".indexOf(c);
+    }
+
+}

+ 93 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/DecodeUtil.java

@@ -0,0 +1,93 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.constant.SjjhConstant;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/6/28 16:05
+ * @version: V1.0
+ **/
+@Component
+public class DecodeUtil {
+
+    private static String decryptKey;
+
+    private static String aesDecryptKey;
+
+    @Value("${wz.decryptKey}")
+    public void setDecryptKey(String decryptKey) {
+        DecodeUtil.decryptKey = decryptKey;
+    }
+
+    @Value("${wz.aesDecryptKey}")
+    public void setAesDecryptKey(String aesDecryptKey) {
+        DecodeUtil.aesDecryptKey = aesDecryptKey;
+    }
+
+    public static String decodeParams(ChannelTypeHandleResponseObject ret, String returnType, String customBody) {
+        JSONObject requestParamObject = JSONObject.parseObject(customBody);
+        if (requestParamObject.get("params") == null) {
+            if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            } else {
+                ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
+                ret.setResultBody(Constant.INVALID_PARAMETER);
+                ret.setResultDesc(Constant.INVALID_PARAMETER);
+            }
+            requestParamObject = null;
+            return "";
+        }
+
+        if (requestParamObject.get("type") != null && requestParamObject.get("type").equals("1")) {
+            try {
+                customBody = AesUtil.decryAES(aesDecryptKey, requestParamObject.getString("params"));
+                if (StringUtils.isBlank(customBody)) {
+                    if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                        ret.setResultCode(Constant.ZW_RETURN_CODE_133);
+                    } else {
+                        ret.setResultCode(Constant.JK_RETURN_CODE_9931);
+                    }
+                    ret.setResultBody(Constant.RETURN_MESSAGE_133);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_133);
+                    return "";
+                }
+            } catch (Exception e) {
+                ErrorUtils.captureException(e);
+                if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                    ret.setResultCode(Constant.ZW_RETURN_CODE_133);
+                } else {
+                    ret.setResultCode(Constant.JK_RETURN_CODE_9931);
+                }
+                ret.setResultBody(Constant.RETURN_MESSAGE_133);
+                ret.setResultDesc(Constant.RETURN_MESSAGE_133);
+                return "";
+            }
+        } else {
+            customBody = DESedeUtil.decryptMode(requestParamObject.getString("params"), decryptKey);
+            if (StringUtils.isBlank(customBody)) {
+                if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
+                    ret.setResultCode(Constant.ZW_RETURN_CODE_133);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_133);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_133);
+                } else {
+                    ret.setResultCode(Constant.JK_RETURN_CODE_9931);
+                    ret.setResultBody(Constant.RETURN_MESSAGE_133);
+                    ret.setResultDesc(Constant.RETURN_MESSAGE_133);
+                }
+            }
+
+        }
+        requestParamObject = null;
+        return customBody;
+    }
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/FaceCompareProperties.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "facecompare")
+public class FaceCompareProperties {
+    private String url = "https://v2-auth-api.visioncloudapi.com/identity/idnumber_verification/stateless";
+
+    private String apiKey = "cadc3db21a5e43d6af271bed5467b4c7";
+
+    private String apiSecret = "1bdeb884dbca4f3d8f2938cbda381c3a";
+
+    private Boolean autoRotate = true;
+
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/ForeignInvestProperties.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import lombok.Data;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "foreigninvest")
+public class ForeignInvestProperties {
+	 private String url;
+	 private String apiKey;
+	 private String apiSecret;
+	 private String username;
+	 private Map<Integer,String> code;
+	 private Map<Integer,String> desc;
+}

+ 83 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/IdentityCardUpApiHttp.java

@@ -0,0 +1,83 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Map;
+
+/**
+ * Email:lixinxu@aspirecn.com
+ * Descrption:
+ */
+@Slf4j
+public class IdentityCardUpApiHttp {
+
+    /**
+     *
+     *
+     *
+     * */
+    public static String postApi(String urlStr, String apiKey, String username, String privateKey, Map<String, String> param, int outTime){
+        StringBuilder builder = new StringBuilder();
+        for (Map.Entry<String, String> entry : param.entrySet())
+        {
+            if (builder.length() > 0)
+            {
+                builder.append("&");
+            }
+            builder.append(entry.getKey()+"=");
+            builder.append(entry.getValue());
+        }
+        String  desParam =  DESEncrypt.encode(privateKey, builder.toString());
+        StringBuffer sbf = new StringBuffer();
+        HttpURLConnection conn = null;
+        BufferedReader reader = null;
+        try
+        {
+            URL url = new URL(urlStr);
+            conn = (HttpURLConnection) url.openConnection();
+            conn.setRequestMethod("POST");
+            conn.setConnectTimeout(outTime);
+            conn.setReadTimeout(outTime);
+            conn.setDoOutput(true);
+            byte[] bytes = ("apiKey=" + apiKey + "&username=" + username + "&params=" + desParam).getBytes();
+            conn.getOutputStream().write(bytes);
+            conn.connect();
+            InputStream inStream = conn.getInputStream();
+            String strRead = null;
+            reader = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
+            while ((strRead = reader.readLine()) != null) {
+                sbf.append(strRead);
+                sbf.append("\r\n");
+            }
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+            log.info("supplier10000035.identityCardTwoPointCheck接口HttpIOException={}", urlStr);
+        }
+        finally
+        {
+            if (null != reader)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                }
+            }
+            if (null != conn)
+            {
+                conn.disconnect();
+            }
+        }
+        return  sbf.toString();
+    }
+}

+ 33 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/LocationSupplierProperties.java

@@ -0,0 +1,33 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author jianggang
+ * @Date 2018/12/20 11:03:33
+ * @Description
+ */
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "location.supplier")
+public class LocationSupplierProperties {
+
+    private String username;
+
+    private String apiKey;
+
+    private String url;
+
+    private String secret;
+    
+    private  List<String> addrType;
+    private Map<Integer,String> code;
+    private Map<Integer,String> desc;
+}

+ 121 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/LocationUtil.java

@@ -0,0 +1,121 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.URLDecoder;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+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.rdc.iov.sjjh.servicenode.supplier.yh.vo.LocationCheckQuestResponseObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.LocationRequestObject;
+import lombok.extern.slf4j.Slf4j;
+@Slf4j
+@Component
+public class LocationUtil {
+	@Autowired
+	LocationSupplierProperties locationSupplierProperties;
+	@Autowired
+	private ObjectMapper objectMapper;
+
+		public  String calculateParam(Object object) {
+			try {
+				Class cls = object.getClass();
+				Field[] fields = cls.getDeclaredFields();
+				String params = "";
+				StringBuffer sbf = new StringBuffer();
+				for (Field field : fields) {
+					String fieldName = field.getName();
+					Method method = cls.getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
+					String value = (String) method.invoke(object);
+					if(value!=null){
+						value = URLDecoder.decode(value, "utf-8");
+						sbf.append(fieldName).append("=").append(value).append("&");
+					}
+					
+				}
+				if (sbf.length() != 0) {
+					sbf = sbf.delete(sbf.length() - 1, sbf.length());
+					log.info("加密之前:{}",sbf);
+				   params = encodeString(sbf.toString(), locationSupplierProperties.getSecret());
+				   log.info("加密之后:{}",params);
+				}
+				return params;
+			} catch (Exception ex) {
+				log.error("计算签名错误:{}", ex);
+			}
+			return "";
+		}
+		public boolean checkLocationParm(LocationRequestObject requestObject){
+			String phone = requestObject.getPhone();
+			String imei = requestObject.getImei();
+			boolean flag = false;
+			if (StringUtils.isBlank(phone) && StringUtils.isBlank(imei)) {
+				flag = true;
+			} else if (StringUtils.isBlank(requestObject.getLongitude())
+					&& StringUtils.isBlank(requestObject.getLatitude())
+					&& StringUtils.isBlank(requestObject.getAddress())) {
+				log.debug("");
+				flag = true;
+			} else if (!locationSupplierProperties.getAddrType().contains(requestObject.getAddrType())) {
+				flag = true;
+			}
+			return flag;
+		}
+		public void locationCodeCheck(ChannelTypeHandleResponseObject ret,LocationCheckQuestResponseObject responseObject) throws JsonProcessingException{
+			String upstreamCode = responseObject.getCode();
+			if("0".equals(upstreamCode)){
+				if("1".equals(responseObject.getData().getIsMatch())){
+					ret.setCode(Constant.SUCCESS);
+					ret.setResultCode(Constant.MATCH_CODE);
+					ret.setResultBody(objectMapper.writeValueAsString(responseObject.getData()));
+					ret.setIsCharge(1);
+				}else{
+					ret.setCode(Constant.SUCCESS);
+					ret.setResultCode(Constant.UN_MATCH_CODE);
+					ret.setResultBody(Constant.UN_MATCH);
+				}
+			}else if("200".equals(upstreamCode)){
+				ret.setCode(Constant.SUCCESS);
+				ret.setResultCode(Constant.UN_FIND_NUM_CODE);
+				ret.setResultBody(Constant.UN_FIND_NUM);
+			}else if("205".equals(upstreamCode)){
+				ret.setCode(Constant.SUCCESS);
+				ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
+				ret.setResultBody(Constant.INVALID_PARAMETER);
+			}else{
+				ret.setCode(Constant.SUCCESS);
+				ret.setResultCode(Constant.OTHER_ERROR_CODE);
+				ret.setResultBody(Constant.OTHER_ERROR);
+			}
+		}
+		public static String encodeString(String str,String secret)  {
+	    	try{
+	    		DESKeySpec deskey = new DESKeySpec(secret.getBytes("UTF-8"));
+	    		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+	    		SecretKey secretKey = keyFactory.generateSecret(deskey);
+	    		Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+	    		IvParameterSpec iv = new IvParameterSpec(secret.getBytes("UTF-8"));
+	    		cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
+	    		return new sun.misc.BASE64Encoder().encode(cipher.doFinal(str.getBytes("utf-8")));
+	    	} catch (Exception e) {
+               log.error("DESUtil encodeString,message:{}",e);
+            }
+	    	return "";
+
+}
+	      
+}

+ 63 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/NotifyThread.java

@@ -0,0 +1,63 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import info.aspirecn.iov.sjjh.channel.inter.vo.platform.channel.po.Channels;
+import info.aspirecn.iov.sjjh.service.sms.vo.RequestSmsNoTemplate;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.NotifySms;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+@Slf4j
+public class NotifyThread extends TimerTask{
+    private NotifySms notifySms;
+    public NotifyThread(NotifySms notifySms){
+        this.notifySms=notifySms;
+    }
+    @Override
+    public void run() {
+        log.info("start,traceId:{}",notifySms);
+        //根据channelId查询channel信息
+        //根据类型下发指定内容的短信
+        //如果存在问题,按1,2,4,8,16,32 来指定多少分钟后再次执行线程,如果达到量都之后
+        try {
+            List<Integer> ChannelIds = new ArrayList<>();
+            ChannelIds.add(Integer.valueOf(notifySms.getChannId()));
+            List<Channels> lists = notifySms.getChannelActionInterface().getChannelsById(ChannelIds);
+            if(lists==null || lists.size()==0){
+                return;
+            }
+
+            String channelName = lists.get(0).getChannelName();
+            log.info("traceId:{},channelName:{}",notifySms.getTraceId(),channelName);
+            String message = "";
+            if (notifySms.getType() == 1) {//少于10000
+                message = channelName + ",今日可用调用量已不足"+notifySms.getSupplierProperties().getNotityLimit()+"条,请关注";
+            } else if (notifySms.getType() == 2) {//达到量
+                message = channelName + ",今日可用调用量已用完,请关注";
+            } else if (notifySms.getType() == 3) {//返回-53或者210
+                message = channelName + ",因返回-53/210,今日不再请求该通道,请关注";
+            }
+            RequestSmsNoTemplate requestSmsNoTemplate = new RequestSmsNoTemplate();
+            requestSmsNoTemplate.setTargetMobile(notifySms.getSupplierProperties().getTargetSms());
+            requestSmsNoTemplate.setContent(message);
+            log.info("traceId:{},smsTemplate:{}",notifySms.getTraceId(),requestSmsNoTemplate);
+            notifySms.getSmsActionInterface().smsSendNoTemplate(requestSmsNoTemplate);
+            log.info("end,notity:{}",notifySms);
+        }catch (Exception ex){
+            int count = notifySms.getCount();
+            count++;
+            Calendar calendar =Calendar.getInstance();
+            int minute = calendar.get(Calendar.MINUTE);
+            if(count>=5){
+                return;
+            }
+            minute = 1<<count;
+            notifySms.setCount(count);
+            calendar.setTimeInMillis(calendar.getTimeInMillis()+(minute*60*1000));
+            log.error("error message:{},{}",ex,notifySms.getTraceId());
+            log.info("date:{},traceId:{}",calendar.getTime(),notifySms.getTraceId());
+            Timer timer =new Timer();
+            timer.schedule(new NotifyThread(notifySms),calendar.getTime());
+        }
+    }
+}

+ 20 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/SpellComparator.java

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Comparator;
+@Slf4j
+public class SpellComparator implements Comparator<Object> {
+
+    @Override
+    public int compare(Object o1, Object o2) {
+        try{
+            String s1 = new String(o1.toString().getBytes("GB2312"), "ISO-8859-1");
+            String s2 = new String(o2.toString().getBytes("GB2312"), "ISO-8859-1");
+            return s1.compareTo(s2);
+        }catch (Exception e){
+            log.error("",e);
+        }
+        return 0;
+    }
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/SupplierProperties.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.Data;
+
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author jianggang
+ * @Date 2018/12/20 11:03:33
+ * @Description
+ */
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "supplier")
+public class SupplierProperties {
+
+    private String username;
+
+    private String apiKey;
+
+    private String url;
+
+    private String sleepTime;
+
+    private Map<Integer,String> code;
+    private Map<Integer,String> desc;
+
+
+
+}

+ 288 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/Utils.java

@@ -0,0 +1,288 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import sun.misc.BASE64Encoder;
+
+import javax.crypto.*;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.URLDecoder;
+import java.security.*;
+import java.security.spec.InvalidKeySpecException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/26 09:50:03
+ * @Description
+ */
+@Slf4j
+public class Utils {
+
+    private Utils() {
+    }
+
+    private static final String KEY = "KTDQQz4V";
+
+    private static String encode = "UTF-8";
+
+    public static String desEncrypt(String plaintext) throws NoSuchPaddingException,
+            NoSuchAlgorithmException, UnsupportedEncodingException,
+            InvalidKeySpecException, InvalidAlgorithmParameterException,
+            InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+        DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes(encode));
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
+        IvParameterSpec iv = new IvParameterSpec(KEY.substring(0, 8).getBytes(encode));
+        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
+        byte[] bt = cipher.doFinal(plaintext.getBytes(encode));
+        return new BASE64Encoder().encode(bt);
+    }
+
+    public static String encrypt(String key,String target) {
+        Cipher cipher = null;
+        byte[] bt = null;
+        try {
+            cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+            DESKeySpec desKeySpec = new DESKeySpec(KEY.substring(0, 8).getBytes(encode));
+            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
+            IvParameterSpec iv = new IvParameterSpec(key.getBytes(encode));
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
+            bt = cipher.doFinal(target.getBytes(encode));
+        } catch (Exception e) {
+            log.info("---------->DES加密失败!={}", e);
+        }
+        return new BASE64Encoder().encode(bt);
+    }
+
+
+
+    public static String  generateFaceCompareAuthorization(String apiKey , String apiSecret) throws SignatureException {
+        String nonce = RandomStringUtils.randomAlphanumeric(16);
+        String timestamp = Long.toString(System.currentTimeMillis());
+        String hashAlgorithm = "HmacSHA256";
+
+        ArrayList<String> beforesort = new ArrayList();
+        beforesort.add(apiKey);
+        beforesort.add(timestamp);
+        beforesort.add(nonce);
+
+        Collections.sort(beforesort, new SpellComparator());
+        StringBuilder aftersort = new StringBuilder();
+        for (int i = 0; i < beforesort.size(); i++) {
+            aftersort.append(beforesort.get(i));
+        }
+
+        String oriString = aftersort.toString();
+
+        try{
+            Key sk = new SecretKeySpec(apiSecret.getBytes(), hashAlgorithm);
+            Mac mac = Mac.getInstance(sk.getAlgorithm());
+            mac.init(sk);
+            final byte[] hmac = mac.doFinal(oriString.getBytes());
+            StringBuilder sb = new StringBuilder(hmac.length * 2);
+
+            try (Formatter formatter = new Formatter(sb)) {
+                for (byte b : hmac) {
+                    formatter.format("%02x", b);
+                }
+            }
+            String encryptedString = sb.toString();
+
+            return "key=" + apiKey
+                    +",timestamp=" + timestamp
+                    +",nonce=" + nonce
+                    +",signature=" + encryptedString;
+
+        }catch (NoSuchAlgorithmException e1){
+            throw new SignatureException("error building signature, no such algorithm in device "+ hashAlgorithm);
+        }catch (InvalidKeyException e){
+            throw new SignatureException("error building signature, invalid key " + hashAlgorithm);
+        }
+    }
+
+    public static Integer switchFaceCompareCode(Integer oldCode,String customerType){
+        if(Constant.CUSTOMER_RETURN_JK.equals(customerType)){
+            switch (oldCode) {
+                case 1000:
+                    return 1000;
+                case 1200:
+                    return 9909;
+                case 1100:
+                case 1101:
+                case 1103:
+                case 1002:
+                case 3000:
+                case 3001:
+                case 3002:
+                    return 9901;
+                case 2003:
+                    return 9902;
+                case 2004:
+                    return 9904;
+                case 2005:
+                    return 9905;
+                case 2006:
+                    return 9906;
+                case 3003:
+                    return 9907;
+                case 3004:
+                    return 9908;
+                case 3005:
+                    return 9910;
+                case 4000:
+                    return 9911;
+                default:
+            }
+        }
+
+        if(Constant.CUSTOMER_RETURN_ZW.equals(customerType)){
+            switch (oldCode) {
+                case 1000:
+                    return 1;
+                case 1200:
+                    return 8;
+                case 1100:
+                case 1101:
+                case 1103:
+                case 1002:
+                case 3000:
+                case 3001:
+                case 3002:
+                    return 3;
+                case 2003:
+                    return Constant.INVALID_PICTURE_SIZE;
+                case 2004:
+                    return Constant.INVALID_CONTENT_LENGTH;
+                case 2005:
+                    return Constant.INVALID_PICTURE_TYPE;
+                case 2006:
+                    return Constant.PICTURE_BROKEN;
+                case 3003:
+                    return Constant.UN_MATCH_CODE;
+                case 3004:
+                    return Constant.UN_FIND_NUM_CODE;
+                case 3005:
+                    return Constant.THIRD_BASE_PIC_NOT_EXIST;
+                case 4000:
+                    return Constant.UN_FIND_FACE;
+                default:
+            }
+        }
+
+        return oldCode;
+
+
+    }
+
+    public static String switchFaceCompareFailMessage(Integer oldCode){
+        switch (oldCode) {
+            case 1200:
+                return "参数错误或姓名、身份证号不合法";
+            case 1100:
+            case 1101:
+            case 1103:
+            case 1002:
+            case 3000:
+            case 3001:
+            case 3002:
+                return "查询错误";
+            case 2003:
+                return "图片大小不符合要求";
+            case 2004:
+                return "输入内容长度不符合要求";
+            case 2005:
+                return "图片类型不符合要求";
+            case 2006:
+                return "图片损坏";
+            case 3003:
+                return "姓名与身份证号不匹配";
+            case 3004:
+                return "身份证号无效";
+            case 3005:
+                return "第三方底图不存在";
+            case 4000:
+                return "提取特征失败,没有检测到图片中的人脸";
+            default:
+                return "";
+        }
+    }
+    //计算签名
+    public  static String calculateParam(Object object,String secret) {
+		try {
+			Class cls = object.getClass();
+			Field[] fields = cls.getDeclaredFields();
+			String params = "";
+			StringBuffer sbf = new StringBuffer();
+			for (Field field : fields) {
+				String fieldName = field.getName();
+				Method method = cls.getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
+				String value = (String) method.invoke(object);
+				if(value!=null){
+					value = URLDecoder.decode(value, "utf-8");
+					sbf.append(fieldName).append("=").append(value).append("&");
+				}
+				
+			}
+			if (sbf.length() != 0) {
+				sbf = sbf.delete(sbf.length() - 1, sbf.length());
+				log.info("加密之前:{}",sbf);
+			   params = encrypt(secret,sbf.toString());
+			   log.info("加密之后:{}",params);
+			}
+			return params;
+		} catch (Exception ex) {
+			log.error("计算签名错误:{}", ex);
+		}
+		return "";
+	}
+ 
+    /**
+     * 是否是有效的统一社会信用代码
+     *
+     * @param businessCode 统一社会信用代码
+     * @return
+     */
+    public static boolean isValidSocialCreditCode(String businessCode) {
+    	 if ((businessCode.equals("")) || businessCode.length() != 18) {
+    		 return false; 
+    	 } 
+    	 String baseCode = "0123456789ABCDEFGHJKLMNPQRTUWXY"; 
+    	 char[] baseCodeArray = baseCode.toCharArray(); 
+    	 Map<Character, Integer> codes = new HashMap<Character, Integer>();
+    	 for (int i = 0; i < baseCode.length(); i++) { 
+    		 codes.put(baseCodeArray[i], i); 
+         } 
+    	 char[] businessCodeArray = businessCode.toCharArray(); 
+    	 Character check = businessCodeArray[17]; 
+    	 if (baseCode.indexOf(check) == -1) { 
+    		 return false; 
+    	 } 
+    	 int[] wi = { 1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28 }; 
+    	 int sum = 0; 
+    	 for (int i = 0; i < 17; i++) { 
+    		 Character key = businessCodeArray[i]; 
+    		 if (baseCode.indexOf(key) == -1) { 
+    			 return false; 
+    		 } 
+    		 sum += (codes.get(key) * wi[i]); 
+    	 } 
+    	 int value = 31 - sum % 31; 
+    	 return value == codes.get(check);
+    
+    }
+
+}

+ 47 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/utils/YHProperties.java

@@ -0,0 +1,47 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 15:16:59
+ * @Description
+ */
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "yh")
+public class YHProperties {
+
+    private String uri;
+    private String faceCheckUri;
+
+    private String username;
+
+    private String key;
+
+    private String apiKeyY000c1;
+
+    private String apiKeyY000b1;
+
+    private String apiKeyY001c1;
+
+    private String apiKeyY001b1;
+
+    private String apiKeyY002c1;
+
+    private String apiKeyY002b1;
+
+    private String apiKeyY000w1;
+
+    private String apiKeyY000x1;
+
+    private String apiKeyY000r1;
+
+    private Long urlFaceUp;
+    private String targetSms;
+    private long notityLimit;
+    private int hour;
+}

+ 13 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineJsonResolveObject.java

@@ -0,0 +1,13 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ToString(callSuper = true)
+public class CheckCMCCOnlineJsonResolveObject {
+    @NotNull(message = "参数错误")
+    private String mobile;
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineStatusResponseObject.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString(callSuper = true)
+public class CheckCMCCOnlineStatusResponseObject {
+    @JsonProperty(value = "serialno")
+    private String serialNo;
+
+    @JsonProperty(value = "code")
+    private String code;
+
+    @JsonProperty(value = "msg")
+    private String msg;
+
+    @JsonProperty(value = "data")
+    private CheckCMCCOnlineStatusResponseData data;
+
+    @Data
+    @ToString(callSuper = true)
+    public class CheckCMCCOnlineStatusResponseData {
+        @JsonProperty(value = "state")
+        private String state;
+
+        @JsonProperty(value = "resultCode")
+        private String resultCode;
+
+        @JsonProperty(value = "desc")
+        private String desc;
+    }
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CheckCMCCOnlineTimeResponseObject.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString(callSuper = true)
+public class CheckCMCCOnlineTimeResponseObject {
+    @JsonProperty(value = "serialno")
+    private String serialNo;
+
+    @JsonProperty(value = "code")
+    private String code;
+
+    @JsonProperty(value = "msg")
+    private String msg;
+
+    @JsonProperty(value = "data")
+    private CheckCMCCOnlineTimeResponseData data;
+
+    @Data
+    @ToString(callSuper = true)
+    public class CheckCMCCOnlineTimeResponseData {
+        @JsonProperty(value = "desc")
+        private String desc;
+
+        @JsonProperty(value = "resultCode")
+        private String resultCode;
+
+        @JsonProperty(value = "resultValue")
+        private String resultValue;
+    }
+}

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

@@ -0,0 +1,25 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/10 14:45:30
+ * @Description
+ */
+
+@Data
+public class CommonRequestObject {
+
+    /**api 钥匙串*/
+    private String apiKey;
+
+    /**用户名*/
+    private String username;
+
+    /**参数格式*/
+    private String format;
+
+    /**参数拼接串*/
+    private String params;
+}

+ 11 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/CompanyInfoRequestObject.java

@@ -0,0 +1,11 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+@Data
+public class CompanyInfoRequestObject {
+	private String cname;
+	private String cnumber;
+	private String  orgNumber;
+	private String  regNumber;
+}

+ 36 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DianXinMonthCostResponseObject.java

@@ -0,0 +1,36 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * 电信月消费金额接口 返回解析对象
+ * @author minmin
+ *
+ */
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class DianXinMonthCostResponseObject {
+	/**提交响应码*/
+    private String code;
+    /**响应码对应描述*/
+    private String msg;
+    /**接口返回的具体内容*/
+    private DianXinMonthCostResponseChildObject data;
+    /**流水号*/
+    private String serialno;
+
+    @Data
+    public class DianXinMonthCostResponseChildObject{
+    	/**手机号*/
+        private String phone;
+        /**返回结果码*/
+        private String result;
+        /**返回结果码解释:
+		0,(0,5], (5,10], (10,20], (20,25], (25,35], (35,45],
+		(45,60], (60,80] ,(80,115], 115+(单位:元)*/
+        private String message;
+    }
+}

+ 38 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DianXinThreeCheckResponseObject.java

@@ -0,0 +1,38 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * 电信三要素接口返回解析对象
+ * @author minmin
+ *
+ */
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class DianXinThreeCheckResponseObject {
+	/**提交响应码*/
+    private String code;
+    /**响应码对应描述*/
+    private String msg;
+    /**接口返回的具体内容*/
+    private ThreeCheckChildResponseObject data;
+    /**流水号*/
+    private String serialno;
+
+    @Data
+    public class ThreeCheckChildResponseObject{
+    	/**返回结果码:T(一致);F(不一致);N(无法验证,可能参数有误)*/
+        private String result;
+        /**返回结果码解释*/
+        private String message;
+        /**查询时传入的姓名*/
+        private String name;
+        /**查询时传入的手机号*/
+        private String phone;
+        /**查询时传入的身份证*/
+        private String identityCard;
+    }
+}

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

@@ -0,0 +1,33 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description: 行驶证三要素
+ * @author: xusonglin
+ * @create: 2019/7/8 15:29
+ * @version: V1.0
+ **/
+@Data
+public class DrivingLicenseJsonResolveObject {
+    @NotNull(message = "参数名错误")
+    private String name;
+
+    @NotNull(message = "参数名错误")
+    private String idCode;
+
+    // 车牌号
+    @NotNull(message = "参数名错误")
+    private String plateNumber;
+
+    @Override
+    public String toString() {
+        return "name=" + name +
+                "&identityCard=" + idCode +
+                "&carNumber=" + plateNumber;
+    }
+}

+ 46 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/DrivingLicenseResponseObject.java

@@ -0,0 +1,46 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @description: 行驶证三要素
+ * @author: xusonglin
+ * @create: 2019/7/8 15:33
+ * @version: V1.0
+ **/
+@Data
+@ToString(callSuper = true)
+public class DrivingLicenseResponseObject {
+    @JsonProperty(value = "serialno")
+    private String serialNo;
+
+    @JsonProperty(value = "code")
+    private String code;
+
+    @JsonProperty(value = "msg")
+    private String msg;
+
+    @JsonProperty(value = "data")
+    private DrivingLicenseResponseData data;
+
+    @Data
+    @ToString(callSuper = true)
+    public class DrivingLicenseResponseData {
+        private String result;
+
+        private String message;
+
+        private Object resultData;
+
+        @JsonProperty(value = "LicensePlateType")
+        private String licensePlateType;
+
+        @JsonProperty(value = "VehicleStatus")
+        private String vehicleStatus;
+
+        @JsonProperty(value = "FirstRegisterDate")
+        private String firstRegisterDate;
+    }
+}

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

@@ -0,0 +1,32 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/11 14:40:27
+ * @Description
+ */
+@Data
+public class FaceCheckResObject {
+
+    private String code;
+
+    private String msg;
+
+    private String serialno;
+
+    private Data data;
+
+    @lombok.Data
+    public static class Data{
+
+        private String result;
+
+        private String message;
+
+        private String verificationScore;
+    }
+}

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

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 人脸比对请求参数
+ */
+@ApiModel(value = "人脸比对请求json串")
+@Data
+public class FaceCompareRequestObject {
+
+    @ApiModelProperty(value = "姓名", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "身份证号", required = true)
+    private String idCode;
+
+    @ApiModelProperty(value = "人脸图片全路径", required = true)
+    private String faceFileName;
+}

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

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * 人脸比对上游接口响应结果
+ */
+@Data
+public class FaceCompareResponseObject {
+
+    @JsonProperty(value = "request_id")
+    private String requestId;
+
+    private Integer code;
+
+    @JsonProperty(value = "verification_score")
+    private Float verificationScore;
+
+    private String message;
+
+}

+ 11 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/ForeignInvestResponseObject.java

@@ -0,0 +1,11 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+@Data
+public class ForeignInvestResponseObject {
+	private String code;
+	private String msg;
+	private Object data;
+	private String serialno;
+}

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

@@ -0,0 +1,57 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 查询车辆运输许可证信息接口响应对象
+ * @author lixinxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class IdentityCardCheckResponseObject {
+	/**返回码*/
+	@JsonProperty("code")
+	private String code;
+
+	/**返回信息*/
+	@JsonProperty("msg")
+	private String msg;
+
+	/**流水号*/
+	@JsonProperty("serialno")
+	private String serialno;
+
+	/**返回的具体信息*/
+	@JsonProperty("data")
+	private Details data;
+
+	@Data
+	public static class Details {
+
+		/**姓名*/
+		@JsonProperty("name")
+		private String name;
+
+		/**身份证号*/
+		@JsonProperty("identityCard")
+		private String identityCard;
+
+		/**返回结果码:
+		 1 (一致)----收费
+		 2 (不一致)----收费
+		 3 (库中无此号)----不收费*/
+		@JsonProperty("compStatus")
+		private String compStatus;
+
+		/**返回结果码解释:
+		 一致
+		 不一致
+		 库中无此号*/
+		@JsonProperty("compResult")
+		private String compResult;
+
+	}
+}

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

@@ -0,0 +1,23 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 解析车辆请求参数JSON
+ * @author lixnxu
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class IdentityCardJsonResolveObject {
+	/**姓名*/
+	@JsonProperty("name")
+	private String name;
+
+	/**身份证号*/
+	@JsonProperty("idCode")
+	private String identityCard;
+	
+}

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

@@ -0,0 +1,32 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * 联通手机话费平均评分接口 返回解析对象
+ * @author minmin
+ *
+ */
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class LianTongCostScoreResponseObject {
+	/**提交响应码*/
+    private String code;
+    /**响应码对应描述*/
+    private String msg;
+    /**接口返回的具体内容*/
+    private LianTongCostScoreResponseChildObject data;
+    /**流水号*/
+    private String serialno;
+
+    @Data
+    public class LianTongCostScoreResponseChildObject{
+    	/**手机号*/
+        private String phone;
+        /**返回结果:0: 用户月话费为0 40:用户月话费为(0,40] 80:用户月话费为(40,80] 160:用户月话费为(80,160] 999:用户月话费为>160*/
+        private String score;
+    }
+}

+ 36 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongOnlineCheckResponseObject.java

@@ -0,0 +1,36 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * 联通在网状态、时长接口返回解析对象
+ * @author minmin
+ *
+ */
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class LianTongOnlineCheckResponseObject {
+	/**提交响应码*/
+    private String code;
+    /**响应码对应描述*/
+    private String msg;
+    /**接口返回的具体内容*/
+    private LianTongOnlineCheckChildResponseObject data;
+    /**流水号*/
+    private String serialno;
+
+    @Data
+    public class LianTongOnlineCheckChildResponseObject{
+    	/**是否收旨:1收费*/
+        private String status;
+        /**返回结果码*/
+        private String result;
+        /**message*/
+        private String message;
+        /**查询时传入的手机号*/
+        private String phone;
+    }
+}

+ 13 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongOnlineJsonObject.java

@@ -0,0 +1,13 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+/**
+ * 联通手机在网时长、状态请求json对象
+ * @author minmin
+ *
+ */
+@Data
+public class LianTongOnlineJsonObject {
+	private String mobile;
+}

+ 41 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LianTongThreeCheckResponseObject.java

@@ -0,0 +1,41 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+
+/**
+ * 联通三要素接口返回解析对象
+ * @author minmin
+ *
+ */
+
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class LianTongThreeCheckResponseObject {
+	/**提交响应码*/
+    private String code;
+    /**响应码对应描述*/
+    private String msg;
+    /**接口返回的具体内容*/
+    private LianTongThreeCheckChildResponseObject data;
+    /**流水号*/
+    private String serialno;
+
+    @Data
+    public class LianTongThreeCheckChildResponseObject{
+    	/**是否收费:1收费*/
+    	private String status;
+    	/**返回结果码:00(一致);01(手机号一致,证件号和姓名不一致);02(手机号和证件号一致,姓名不一致)
+    	 * 03(手机号和姓名一致,证件号不一致)*/
+        private String checkResult;
+        /**返回结果码解释*/
+        private String checkMessage;
+        /**查询时传入的姓名*/
+        private String name;
+        /**查询时传入的手机号*/
+        private String phone;
+        /**查询时传入的身份证*/
+        private String identityCard;
+    }
+}

+ 15 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckQuestObject.java

@@ -0,0 +1,15 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+@Data
+public class LocationCheckQuestObject {
+	private String apiKey;
+
+	private String username;
+
+	private String format;
+
+	private String params;
+
+}

+ 15 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckQuestResponseObject.java

@@ -0,0 +1,15 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+@Data
+public class LocationCheckQuestResponseObject {
+	private String serialno;
+
+	private String code;
+
+	private String msg;
+
+	private LocationCheckResponseDataObject data;
+
+}

+ 27 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/LocationCheckResponseDataObject.java

@@ -0,0 +1,27 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import lombok.Data;
+
+@Data
+public class LocationCheckResponseDataObject {
+    @JSONField(serialize = false)
+	private String isMatch;
+
+	private String scoreImage;
+
+	private String scoreHome;
+
+	private String scoreWork;
+
+	private String imageCfdLevel;
+	
+	private String topCity;
+
+	private String isAbTag;
+	
+	private String isAcrTag;
+				
+
+}

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

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/25 18:22:05
+ * @Description
+ */
+
+@Data
+public class LocationRequestObject {
+    private String phone ;
+
+    private String imei ;
+
+    private String addrType ;
+
+    private String longitude;
+    private String latitude;
+    private String address;
+}

+ 18 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/NotifySms.java

@@ -0,0 +1,18 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import info.aspirecn.iov.sjjh.channel.inter.platform.ChannelActionInterface;
+import info.aspirecn.iov.sjjh.service.sms.action.SmsActionInterface;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.utils.YHProperties;
+import lombok.Data;
+
+@Data
+public class NotifySms {
+    private int type;
+    private String channId;
+    private SmsActionInterface smsActionInterface;
+    private ChannelActionInterface channelActionInterface;
+    private YHProperties supplierProperties;
+    private int count;
+    private String traceId;
+
+}

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

@@ -0,0 +1,16 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ToString(callSuper = true)
+public class QueryMobileConsumeJsonResolveObject {
+	/**手机号*/
+    private String mobile;
+    
+    /**验证范围(输入1,代表1个月  ;1-12 分别代表1-12 个月)*/
+    private String rangeCode;
+}

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

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

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

@@ -0,0 +1,30 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+/**
+ * @author jianggang
+ * @Date 2019/6/11 10:34:33
+ * @Description
+ */
+@Data
+public class TelecomOnlineResObject {
+
+    private String code;
+
+    private String msg;
+
+    private String serialno;
+
+    private Data data;
+
+    @lombok.Data
+    public class Data{
+
+        private String result;
+
+        private String message;
+
+        private String phone;
+    }
+}

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

@@ -0,0 +1,20 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 三要素请求参数对象
+ * @author minmin
+ *
+ */
+@Data
+@ToString(callSuper = true, includeFieldNames = true)
+public class ThreeCheckRequestObject {
+	/**姓名*/
+	private String name;
+	/**身份证号*/
+	private String idCode;
+	/**手机号*/
+	private String mobile;
+}

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

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

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

@@ -0,0 +1,22 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/25 18:22:05
+ * @Description
+ */
+
+@Data
+public class TwoParamIdCardRequestObject {
+
+    private String apiKey ;
+
+    private String username ;
+
+    private String format ;
+
+    private String params;
+
+}

+ 34 - 0
src/main/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/vo/TwoParamIdCardResponseObject.java

@@ -0,0 +1,34 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+
+/**
+ * @Auther jianggang
+ * @Date 2018/10/26 18:08:47
+ * @Description
+ */
+
+@Data
+public class TwoParamIdCardResponseObject {
+
+    private String code;
+
+    private String msg;
+
+    private Data data;
+
+    private String serialno;
+
+    @lombok.Data
+    public class Data{
+
+        private String compStatus;
+
+        private String compResult;
+
+        private String name;
+
+        private String identityCard;
+    }
+}

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

@@ -0,0 +1,28 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class VehicleViolationInfoJsonResolveObject {
+    @NotNull(message = "参数名错误")
+    private String carNumber;
+
+    @NotNull(message = "参数名错误")
+    private String carCode;
+
+    @NotNull(message = "参数名错误")
+    private String carDriverNumber;
+
+    @NotNull(message = "参数名错误")
+    private String carType;
+
+    @Override
+    public String toString() {
+        return "carNumber='" + carNumber + '\'' +
+                "&carCode='" + carCode + '\'' +
+                "&carDriverNumber='" + carDriverNumber + '\'' +
+                "&carType='" + carType;
+    }
+}

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

@@ -0,0 +1,134 @@
+server:
+  tomcat:
+    accesslog:
+      buffered: false
+      enabled: true
+      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
+                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
+                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
+                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}i,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
+      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
+      directory: ${logging.path}
+  servlet:
+    context-path: /
+
+spring:
+  sleuth:
+    sampler:
+      probability: 1
+    web:
+      additional-skip-pattern: /api/v2/spans
+  zipkin:
+    base-url: http://127.0.0.1:${server.port}
+  mvc:
+    favicon:
+      enabled: false
+  cloud:
+    config:
+      overrideSystemProperties: true
+      allowOverride: true
+      overrideNone: true
+
+#management
+management:
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+
+HOSTNAME: 127.0.0.1
+
+#logging
+logging:
+  path: /apps/var/jakarta/logs
+  level:
+    root: INFO
+    red:
+      microcloud: DEBUG
+  config: classpath:config/logback-spring.xml
+  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+#error logging
+#sleuth logging
+rdc:
+  logging:
+    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+
+#eureka
+eureka:
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
+    metadata-map:
+      management:
+        server:
+          port: ${management.server.port}
+    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
+    health-check-url-path: /actuator/health
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8888/eureka
+
+supplier:
+  username: Jk_xinyong
+  apiKey: YH01010021000
+  url: http://api.yhdex.com/yhws/api/rest/main
+  sleepTime: 0
+facecompare:
+  url: https://v2-auth-api.visioncloudapi.com/identity/idnumber_verification/stateless
+  apiKey: cadc3db21a5e43d6af271bed5467b4c7
+  apiSecret: 1bdeb884dbca4f3d8f2938cbda381c3a
+  autoRotate: true
+
+
+location:
+  supplier:
+    username:
+      Jk_xinyong
+    secret:
+      KTDQQz4V
+    apiKey:
+      YH01010014000
+    url:
+      http://116.62.182.226/yhws/api/rest/main
+    maps:
+      {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903}
+    addrType:
+      - homeAddress
+      - workAddress
+      - applyWorkAddress
+      - applyHomeAddress
+      - contactWorkAddress
+      - contactHomeAddress
+      - otherAddress
+yh:
+  uri: http://116.62.182.226/yhws/api/rest/main
+  faceCheckUri: http://47.103.189.151/service/invoke/main
+  username: Jk_xinyong
+  key: KTDQQz4V
+  apiKeyY000c1: YH01020011020
+  apiKeyY000b1: YH01020011030
+  apiKeyY001c1: YH01020013010
+  apiKeyY001b1: YH01020013020
+  apiKeyY002c1: YH01020012020
+  apiKeyY002b1: YH01020012030
+  apiKeyY000w1: YH01010013000
+  apiKeyY000x1: YH01010012000
+  apiKeyY000r1: RM02200
+  apiKeyY000f1: YH01020051060
+  apiKeyY000v1: YH01020051031
+  apiKeyY001w1: YH01020013030
+  apiKeyY001x1: YH01020012050
+  apiKeyY002y1: YH01020011090
+  urlFaceUp: 100
+  targetSms: 18210953442
+  notityLimit: 10
+wz:
+  decryptKey: JK568FG2823
+  aesDecryptKey: C1AA8eh0116128nn

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

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

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

@@ -0,0 +1,46 @@
+spring:
+  application:
+    name: iov-sjjh-servicenode-supplier-10000003
+  banner:
+    location: classpath:config/banner.txt
+  profiles:
+    active: onlineJar
+  cloud:
+    config:
+      discovery:
+        enabled: false
+      uri: http://127.0.0.1:20102
+      label: trunk
+      name: ${spring.application.name}
+      profile: ${spring.profiles.active}
+
+server:
+  port: 20903
+management:
+  server:
+    port: 21093
+
+info:
+  name: '@project.description@'
+  version: '@project.version@'
+  
+  
+location:
+  supplier: 
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+supplier: 
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 一致,1001: 不一致,1099: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+
+
+custom:
+  identityCardUpApi:
+    api: http://47.103.189.151/service/invoke/main
+    #api: http://10.8.18.161:8080/atp/mock/137sfz
+    apiKey: RS02100
+    usernaem: Jk_xinyong
+    privateKey: KTDQQz4V
+

+ 163 - 0
src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-hwtest.yml

@@ -0,0 +1,163 @@
+server:
+  tomcat:
+    accesslog:
+      buffered: false
+      enabled: true
+      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
+                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
+                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
+                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}i,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
+      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
+      directory: ${logging.path}
+  servlet:
+    context-path: /
+
+spring:
+  redis:
+    host: 10.8.18.171
+    port: 6380
+    password: Sjjh@2019
+    jedis:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 8
+        min-idle: 0
+  sleuth:
+    sampler:
+      probability: 1
+    web:
+      additional-skip-pattern: /api/v2/spans
+  zipkin:
+    base-url: http://127.0.0.1:${server.port}
+  mvc:
+    favicon:
+      enabled: false
+  cloud:
+    config:
+      overrideSystemProperties: true  
+      allowOverride: true
+      overrideNone: true
+
+#management
+management:
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+
+HOSTNAME: 127.0.0.1
+
+#logging
+logging:
+  path: /apps/var/jakarta/logs
+  level:
+    root: INFO
+    red:
+      microcloud: DEBUG
+  config: classpath:config/logback-spring.xml
+  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+#error logging
+#sleuth logging
+rdc:
+  logging:
+    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+
+#eureka
+eureka:
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
+    metadata-map:
+      management:
+        server:
+          port: ${management.server.port}
+    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
+    health-check-url-path: /actuator/health
+  client:
+    serviceUrl:
+      defaultZone: http://10.8.18.156:31102/eureka,http://10.8.18.172:31102/eureka
+
+supplier:
+  username: Jk_xinyong
+  apiKey: YH01010021000
+  url: http://116.62.182.226/yhws/api/rest/main
+  sleepTime: 0
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 一致,1001: 不一致,1099: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+
+
+yh:
+  uri: http://116.62.182.226/yhws/api/rest/main
+  #faceCheckUri: http://10.8.18.161:8080/atp/mock/rxbd03
+  faceCheckUri: http://47.103.189.151/service/invoke/main
+  username: Jk_xinyong
+  key: KTDQQz4V
+  apiKeyY000c1: YH01020011020
+  apiKeyY000b1: YH01020011030
+  apiKeyY001c1: YH01020013010
+  apiKeyY001b1: YH01020013020
+  apiKeyY002c1: YH01020012020
+  apiKeyY002b1: YH01020012030
+  apiKeyY000w1: YH01010013000
+  apiKeyY000x1: YH01010012000
+ # apiKeyY000r1: YH01010021021
+  apiKeyY000r1: RM02200
+  apiKeyY000f1: YH01020051060 
+  apiKeyY000v1: YH01020051031
+  apiKeyY001w1: YH01020013030
+  apiKeyY001x1: YH01020012050
+  apiKeyY002y1: YH01020011090
+  urlFaceUp: 100
+  targetSms: 18210953442
+  notityLimit: 10
+location:
+  supplier:
+    username:
+      Jk_xinyong
+    secret:
+      KTDQQz4V
+    apiKey:
+      YH01010014000
+    url:
+      http://116.62.182.226/yhws/api/rest/main
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+    addrType:
+      - homeAddress
+      - workAddress
+      - applyWorkAddress
+      - applyHomeAddress
+      - contactWorkAddress
+      - contactHomeAddress
+      - otherAddress
+
+companyinfo: 
+    url: http://116.62.182.226/yhws/api/rest/main
+    apiKey: YHQY00003 
+    apiSecret: KTDQQz4V 
+    username: Jk_xinyong        
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段} 
+          
+          
+foreigninvest:   
+    url: http://116.62.182.226/yhws/api/rest/main 
+    apiKey: YHQY00012
+    apiSecret: KTDQQz4V
+    username: Jk_xinyong          
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}  
+
+  

+ 146 - 0
src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-jkonline.yml

@@ -0,0 +1,146 @@
+server:
+  tomcat:
+    accesslog:
+      buffered: false
+      enabled: true
+      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
+                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
+                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
+                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}i,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
+      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
+      directory: ${logging.path}
+  servlet:
+    context-path: /
+
+spring:
+  sleuth:
+    sampler:
+      probability: 1
+    web:
+      additional-skip-pattern: /api/v2/spans
+  zipkin:
+    base-url: http://127.0.0.1:${server.port}
+  mvc:
+    favicon:
+      enabled: false
+  cloud:
+    config:
+      overrideSystemProperties: true
+      allowOverride: true
+      overrideNone: true
+
+#management
+management:
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+
+HOSTNAME: 127.0.0.1
+
+#logging
+logging:
+  path: /data/var/jakarta/logs
+  level:
+    root: INFO
+    red:
+      microcloud: DEBUG
+  config: classpath:config/logback-spring.xml
+  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+#error logging
+#sleuth logging
+rdc:
+  logging:
+    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+
+#eureka
+eureka:
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
+    metadata-map:
+      management:
+        server:
+          port: ${management.server.port}
+    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
+    health-check-url-path: /actuator/health
+  client:
+    serviceUrl:
+      defaultZone: http://iov-sjjh-registcenter.iov-sjjh:8080/eureka
+
+supplier:
+  username: Jk_xinyong
+  apiKey: YH01010021000
+  url: http://116.62.182.226/yhws/api/rest/main
+  sleepTime: 0
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 一致,1001: 不一致,1099: 库无,9903: 手机号码非移动号码,
+         9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+
+
+yh:
+  uri: http://116.62.182.226/yhws/api/rest/main
+  faceCheckUri: http://47.103.189.151/service/invoke/main
+  username: Jk_xinyong
+  key: KTDQQz4V
+  apiKeyY000c1: YH01020011020
+  apiKeyY000b1: YH01020011030
+  apiKeyY001c1: YH01020013010
+  apiKeyY001b1: YH01020013020
+  apiKeyY002c1: YH01020012020
+  apiKeyY002b1: YH01020012030
+  apiKeyY000w1: YH01010013000
+  apiKeyY000x1: YH01010012000
+  apiKeyY000r1: RM02200
+  apiKeyY000f1: YH01020051060
+  apiKeyY000v1: YH01020051031
+  apiKeyY001w1: YH01020013030
+  apiKeyY001x1: YH01020012050
+  apiKeyY002y1: YH01020011090
+location:
+  supplier:
+    username:
+      Jk_xinyong
+    secret:
+      KTDQQz4V
+    apiKey:
+      YH01010014000
+    url:
+      http://116.62.182.226/yhws/api/rest/main
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+           9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+    addrType:
+      - homeAddress
+      - workAddress
+      - applyWorkAddress
+      - applyHomeAddress
+      - contactWorkAddress
+      - contactHomeAddress
+      - otherAddress
+
+companyinfo:
+  url: http://116.62.182.226/yhws/api/rest/main
+  apiKey: YHQY00003
+  apiSecret: KTDQQz4V
+  username: Jk_xinyong
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+         9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+
+
+foreigninvest:
+  url: http://116.62.182.226/yhws/api/rest/main
+  apiKey: YHQY00012
+  apiSecret: KTDQQz4V
+  username: Jk_xinyong
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+         9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}

+ 146 - 0
src/main/resources/config/iov-sjjh-servicenode-supplier-10000003-onlineJar.yml

@@ -0,0 +1,146 @@
+server:
+  tomcat:
+    accesslog:
+      buffered: false
+      enabled: true
+      pattern: '{"DateTime":"%{yyyy-MM-dd''T''HH:mm:ss.SSSZZ}t","ClientIP":"%a","Method":"%m","URI":"%U","RequestProtocol":"%H","ResponseCode":%s,
+                  "ResponseTime":%D,"UserAgent":"-","X-Forwarded-For":"-","X-User-IP":"%{X-Real-IP}i","traceId":"%{x-b3-traceid}i","id":"%{x-b3-spanid}r",
+                  "parentId":"%{x-b3-parentspanid}i","ApplicationName":"${spring.application.name}","MG-IsCharge":%{x-isCharge}r,"MG-Upstream-ResponseCode":"%{upResponseCode}r","MG-ChannelId":%{channelId}i,
+                  "MG-ResponseCode":%{x-responseCode}r,"MG-CustomBody":"%{x-requestQuery}r","MG-SellingPrice":%{price}i,"req_type":"%{req_type}r","MG-ProductId":%{productId}i,"MG-UserId":%{userid}i}'
+      prefix: access_${HOSTNAME}_${spring.application.name}_${server.port}
+      directory: ${logging.path}
+  servlet:
+    context-path: /
+
+spring:
+  sleuth:
+    sampler:
+      probability: 1
+    web:
+      additional-skip-pattern: /api/v2/spans
+  zipkin:
+    base-url: http://127.0.0.1:${server.port}
+  mvc:
+    favicon:
+      enabled: false
+  cloud:
+    config:
+      overrideSystemProperties: true  
+      allowOverride: true
+      overrideNone: true
+
+#management
+management:
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+
+HOSTNAME: 127.0.0.1
+
+#logging
+logging:
+  path: /data/var/jakarta/logs
+  level:
+    root: INFO
+    red:
+      microcloud: DEBUG
+  config: classpath:config/logback-spring.xml
+  file: ${logging.path}/catalina_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.out
+#error logging
+#sleuth logging
+rdc:
+  logging:
+    error-file: ${logging.path}/error_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+    sleuth-file: ${logging.path}/sleuth_${spring.cloud.client.hostname}_${spring.application.name}_${server.port}.log
+
+#eureka
+eureka:
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
+    metadata-map:
+      management:
+        server:
+          port: ${management.server.port}
+    health-check-url: http://${spring.cloud.client.ip-address}:${management.server.port}${eureka.instance.health-check-url-path}
+    health-check-url-path: /actuator/health
+  client:
+    serviceUrl:
+      defaultZone: http://192.168.1.32:31102/eureka;http://192.168.1.33:31102/eureka
+
+supplier:
+  username: Jk_xinyong
+  apiKey: YH01010021000
+  url: http://116.62.182.226/yhws/api/rest/main
+  sleepTime: 0
+  code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+  desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 一致,1001: 不一致,1099: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+
+
+yh:
+  uri: http://116.62.182.226/yhws/api/rest/main
+  faceCheckUri: http://47.103.189.151/service/invoke/main
+  username: Jk_xinyong
+  key: KTDQQz4V
+  apiKeyY000c1: YH01020011020
+  apiKeyY000b1: YH01020011030
+  apiKeyY001c1: YH01020013010
+  apiKeyY001b1: YH01020013020
+  apiKeyY002c1: YH01020012020
+  apiKeyY002b1: YH01020012030
+  apiKeyY000w1: YH01010013000
+  apiKeyY000x1: YH01010012000
+  apiKeyY000r1: RM02200
+  apiKeyY000f1: YH01020051060 
+  apiKeyY000v1: YH01020051031
+  apiKeyY001w1: YH01020013030
+  apiKeyY001x1: YH01020012050
+  apiKeyY002y1: YH01020011090
+location:
+  supplier:
+    username:
+      Jk_xinyong
+    secret:
+      KTDQQz4V
+    apiKey:
+      YH01010014000
+    url:
+      http://116.62.182.226/yhws/api/rest/main
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}
+    addrType:
+      - homeAddress
+      - workAddress
+      - applyWorkAddress
+      - applyHomeAddress
+      - contactWorkAddress
+      - contactHomeAddress
+      - otherAddress
+
+companyinfo: 
+    url: http://116.62.182.226/yhws/api/rest/main
+    apiKey: YHQY00003 
+    apiSecret: KTDQQz4V 
+    username: Jk_xinyong        
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段} 
+          
+          
+foreigninvest:   
+    url: http://116.62.182.226/yhws/api/rest/main 
+    apiKey: YHQY00012
+    apiSecret: KTDQQz4V
+    username: Jk_xinyong          
+    code: {1: 1000,2: 1001,3: 9901,4: 1099,8: 9909,10: 9903,22: 9910,23: 9911,24: 9912}
+    desc: {22: 姓名为空或格式不规范,23: 身份证为空或格式不规范,24: 手机号为空或格式不规范,9910: 姓名格式错误,9911: 身份证号格式错误,9912: 手机号格式错误,1000: 查询成功,1002: 库无,9903: 手机号码非移动号码,
+          9909: 请求数据格式错误,9901: 查询错误,1: 匹配,2: 不匹配,3: 其他问题,4: 库中无此号,8: 参数错误,10: 非移动号段}  

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

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

+ 174 - 0
src/main/resources/config/test.yaml

@@ -0,0 +1,174 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: prometheus-config
+  namespace: iov-sjjh
+data:
+  prometheus.yml: |
+    global:
+      scrape_interval:     15s
+      scrape_timeout:      15s
+      evaluation_interval: 5s
+    scrape_configs:
+    - job_name: 'k8s-cluster'
+      static_configs:
+      - targets: ['192.168.16.14:9100']
+      - targets: ['192.168.16.15:9100']
+      - targets: ['192.168.16.17:9100']
+      - targets: ['192.168.16.21:9100']
+      - targets: ['192.168.16.24:9100']
+      - targets: ['192.168.16.41:9100']
+      - targets: ['192.168.16.42:9100']
+      - targets: ['192.168.16.43:9100']
+
+    - job_name: 'kafka-cluster'
+      static_configs:
+      - targets: ['kafka-exporter.iov-sjjh:9308']
+
+    - job_name: 'es-cluster'
+      static_configs:
+      - targets: ['es-exporter.iov-sjjh:9108']
+    - job_name: 'kubernetes-apiservers'
+      kubernetes_sd_configs:
+      - role: endpoints
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      relabel_configs:
+      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
+        action: keep
+        regex: default;kubernetes;https
+
+    - job_name: 'kubernetes-nodes'
+      kubernetes_sd_configs:
+      - role: node
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      relabel_configs:
+      - action: labelmap
+        regex: __meta_kubernetes_node_label_(.+)
+      - target_label: __address__
+        replacement: kubernetes.default.svc:443
+      - source_labels: [__meta_kubernetes_node_name]
+        regex: (.+)
+        target_label: __metrics_path__
+        replacement: /api/v1/nodes/${1}/proxy/metrics
+
+    - job_name: 'kubernetes-cadvisor'
+      kubernetes_sd_configs:
+      - role: node
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      relabel_configs:
+      - action: labelmap
+        regex: __meta_kubernetes_node_label_(.+)
+      - target_label: __address__
+        replacement: kubernetes.default.svc:443
+      - source_labels: [__meta_kubernetes_node_name]
+        regex: (.+)
+        target_label: __metrics_path__
+        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
+
+    - job_name: 'kubernetes-service-endpoints'
+      kubernetes_sd_configs:
+      - role: endpoints
+      relabel_configs:
+      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
+        action: keep
+        regex: true
+      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
+        action: replace
+        target_label: __scheme__
+        regex: (https?)
+      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
+        action: replace
+        target_label: __metrics_path__
+        regex: (.+)
+      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
+        action: replace
+        target_label: __address__
+        regex: ([^:]+)(?::\d+)?;(\d+)
+        replacement: $1:$2
+      - action: labelmap
+        regex: __meta_kubernetes_service_label_(.+)
+      - source_labels: [__meta_kubernetes_namespace]
+        action: replace
+        target_label: kubernetes_namespace
+      - source_labels: [__meta_kubernetes_service_name]
+        action: replace
+        target_label: kubernetes_name
+
+    - job_name: 'kubernetes-services'
+      kubernetes_sd_configs:
+      - role: service
+      metrics_path: /probe
+      params:
+        module: [http_2xx]
+      relabel_configs:
+      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
+        action: keep
+        regex: true
+      - source_labels: [__address__]
+        target_label: __param_target
+      - target_label: __address__
+        replacement: blackbox-exporter.example.com:9115
+      - source_labels: [__param_target]
+        target_label: instance
+      - action: labelmap
+        regex: __meta_kubernetes_service_label_(.+)
+      - source_labels: [__meta_kubernetes_namespace]
+        target_label: kubernetes_namespace
+      - source_labels: [__meta_kubernetes_service_name]
+        target_label: kubernetes_name
+
+    - job_name: 'kubernetes-ingresses'
+      kubernetes_sd_configs:
+      - role: ingress
+      relabel_configs:
+      - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
+        action: keep
+        regex: true
+      - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
+        regex: (.+);(.+);(.+)
+        replacement: ${1}://${2}${3}
+        target_label: __param_target
+      - target_label: __address__
+        replacement: blackbox-exporter.example.com:9115
+      - source_labels: [__param_target]
+        target_label: instance
+      - action: labelmap
+        regex: __meta_kubernetes_ingress_label_(.+)
+      - source_labels: [__meta_kubernetes_namespace]
+        target_label: kubernetes_namespace
+      - source_labels: [__meta_kubernetes_ingress_name]
+        target_label: kubernetes_name
+
+    - job_name: 'kubernetes-pods'
+      kubernetes_sd_configs:
+      - role: pod
+      relabel_configs:
+      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
+        action: keep
+        regex: true
+      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
+        action: replace
+        target_label: __metrics_path__
+        regex: (.+)
+      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
+        action: replace
+        regex: ([^:]+)(?::\d+)?;(\d+)
+        replacement: $1:$2
+        target_label: __address__
+      - action: labelmap
+        regex: __meta_kubernetes_pod_label_(.+)
+      - source_labels: [__meta_kubernetes_namespace]
+        action: replace
+        target_label: kubernetes_namespace
+      - source_labels: [__meta_kubernetes_pod_name]
+        action: replace
+        target_label: kubernetes_pod_name

+ 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" ]

+ 279 - 0
src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/action/ActonTest.java

@@ -0,0 +1,279 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.test.action;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.Application;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.CompanyInfoRequestObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.DrivingLicenseJsonResolveObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh_interface.vo.CustomBodyObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+@WebAppConfiguration
+public class ActonTest {
+    private MockMvc mockMvc;
+
+    @Autowired
+    private WebApplicationContext context;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+
+    @Before
+    public void before() throws Exception {
+        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
+    }
+
+    @Test
+    public void checkIdCardForBTY() throws Exception {
+        CompanyInfoRequestObject companyInfoRequestObject = new CompanyInfoRequestObject();
+        String channelId = "1000001";
+        companyInfoRequestObject.setCname("");
+        companyInfoRequestObject.setCnumber("");
+        companyInfoRequestObject.setOrgNumber("");
+        companyInfoRequestObject.setRegNumber("");
+
+        String customBody = objectMapper.writeValueAsString(companyInfoRequestObject);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/companyInfo.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+    @Test
+    public void drivingLicenseAction() throws Exception {
+        DrivingLicenseJsonResolveObject drivingLicenseJsonResolveObject = new DrivingLicenseJsonResolveObject();
+        String channelId = "1000001";
+        drivingLicenseJsonResolveObject.setIdCode("41xexstesfss");
+        drivingLicenseJsonResolveObject.setName("chen");
+        drivingLicenseJsonResolveObject.setPlateNumber("1111");
+        String customBody = objectMapper.writeValueAsString(drivingLicenseJsonResolveObject);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/drivingLicense.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+    @Test
+    public void faceCheckForYH() throws Exception {
+        DrivingLicenseJsonResolveObject drivingLicenseJsonResolveObject = new DrivingLicenseJsonResolveObject();
+        String channelId = "1000001";
+        drivingLicenseJsonResolveObject.setIdCode("41xexstesfss");
+        drivingLicenseJsonResolveObject.setName("chen");
+        drivingLicenseJsonResolveObject.setPlateNumber("1111");
+        String customBody = objectMapper.writeValueAsString(drivingLicenseJsonResolveObject);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/faceCheckForYH.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+    @Test
+    public void faceCheckWZDecode() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("params","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/faceCheckWZDecode.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+    @Test
+    public void foreignInvest() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("cname","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/foreignInvest.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+    @Test
+    public void identityCardTwoPointCheck() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("name","");
+        requestParam.put("idCode","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/identityCardTwoPointCheck.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+
+    @Test
+    public void identityCardTwoWeiZhongDecode() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("params","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/identityCardTwoWeiZhongDecode.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+    @Test
+    public void telecomOnlineStatus() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("phone","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/telecomOnlineStatus.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+
+    @Test
+    public void telecomOnlineTime() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("phone","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/telecomOnlineTime.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+
+    @Test
+    public void getVehicleViolationInfo() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("carCode","");
+        requestParam.put("carDriverNumber","");
+        requestParam.put("carType","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/getVehicleViolationInfo.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+    @Test
+    public void checkIdCardForYH() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("name","");
+        requestParam.put("idCode","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/checkIdCardForYH.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+
+    @Test
+    public void checkLocationForYH() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("name","");
+        requestParam.put("idCode","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/checkLocationForYH.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+    @Test
+    public void lianTongCheck() throws Exception {
+        String channelId = "1000001";
+        Map<String,String> requestParam=new HashMap<String,String>();
+        requestParam.put("name","");
+        requestParam.put("idCode","");
+        requestParam.put("mobile","");
+        String customBody = objectMapper.writeValueAsString(requestParam);
+        mockMvc.perform(
+                MockMvcRequestBuilders.post("/y00-lianTongCheck.do")
+                        .header("channelId",channelId)
+                        .param("outTime", "1000")
+                        .param("customBody", customBody)
+        )
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+    }
+
+
+}

+ 1 - 0
src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/package-info.java

@@ -0,0 +1 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.test;

+ 74 - 0
src/test/java/info/aspirecn/rdc/iov/sjjh/servicenode/supplier/yh/test/service/BTYChannelServiceTest.java

@@ -0,0 +1,74 @@
+package info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.test.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
+import info.aspirecn.iov.sjjh.commons.lang.Constant;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.CompanyInfoService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.service.DrivingLicenseService;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.CompanyInfoRequestObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.DrivingLicenseJsonResolveObject;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.vo.ForeignInvestResponseObject;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.test.context.junit4.SpringRunner;
+import info.aspirecn.rdc.iov.sjjh.servicenode.supplier.yh.Application;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Auther chenqingqing
+ * @Date 2018/11/19 14:33:50
+ * @Description
+ */
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+@Slf4j
+public class BTYChannelServiceTest {
+
+    @Autowired
+    CompanyInfoService companyInfoService;
+
+    @Autowired
+    DrivingLicenseService drivingLicenseService;
+
+    @Test
+    public void companyInfoTest() throws IOException {
+        Map<String,String> customBodyObject=new HashMap<String,String>();
+        customBodyObject.put("cname","");
+        customBodyObject.put("cnumber","");
+        customBodyObject.put("orgNumber","");
+        customBodyObject.put("regNumber","");
+        ObjectMapper mapper = new ObjectMapper();
+        String customBodyString = mapper.writeValueAsString(customBodyObject);
+
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.addHeader(Constant.CUSTOMER_RETURN_TYPE_PARA,1);
+        ChannelTypeHandleResponseObject responseObject = companyInfoService.companyInfo(request,10000,customBodyString);
+        log.info("responseObject========>{}",responseObject.toString());
+        Assert.assertEquals((int)responseObject.getCode(),Constant.SUCCESS);
+        Assert.assertEquals((int)responseObject.getIsCharge(),Constant.INTERFACE_QUERY_FEE);
+    }
+    @Test
+    public void checkIdCardWeiZhongTest() throws IOException {
+        DrivingLicenseJsonResolveObject drivingLicenseJsonResolveObject = new DrivingLicenseJsonResolveObject();
+        drivingLicenseJsonResolveObject.setName("江港");
+        drivingLicenseJsonResolveObject.setIdCode("421022199701017517");
+        drivingLicenseJsonResolveObject.setPlateNumber("");
+        ObjectMapper mapper = new ObjectMapper();
+        String customBodyString = mapper.writeValueAsString(drivingLicenseJsonResolveObject);
+
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.addHeader(Constant.CUSTOMER_RETURN_TYPE_PARA,1);
+        ChannelTypeHandleResponseObject responseObject = drivingLicenseService.drivingLicense(request,customBodyString,10000);
+        log.info("responseObject========>{}",responseObject.toString());
+        Assert.assertEquals((int)responseObject.getCode(),Constant.SUCCESS);
+        Assert.assertEquals((int)responseObject.getIsCharge(),Constant.INTERFACE_QUERY_FEE);
+    }
+}