ソースを参照

添加银行清款项目

qiubo 4 年 前
コミット
9e62af212d
69 ファイル変更3437 行追加0 行削除
  1. 21 0
      carbon-bank/carbon-bank-common/pom.xml
  2. 123 0
      carbon-bank/carbon-bank-service/pom.xml
  3. 26 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/CarbonManagerServiceApplication.java
  4. 14 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankLoginUserReqParam.java
  5. 9 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankLoginUserRespBO.java
  6. 18 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankQueryBaseParam.java
  7. 19 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankResponseBase.java
  8. 12 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankUpdateUserPwdParam.java
  9. 45 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountDetailQueryParam.java
  10. 13 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountHistoricalBalanceQueryParam.java
  11. 16 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountHistoricalBalanceQueryResp.java
  12. 53 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailResp.java
  13. 14 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailRespRecord.java
  14. 28 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailTotalResp.java
  15. 16 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryParam.java
  16. 40 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryResp.java
  17. 33 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsParam.java
  18. 12 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsRecord.java
  19. 19 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsResp.java
  20. 67 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsRespDetail.java
  21. 19 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationParam.java
  22. 10 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationResp.java
  23. 10 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationRespDetail.java
  24. 10 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationRespRecord.java
  25. 70 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/IntrabankTransferParam.java
  26. 26 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/IntrabankTransferResp.java
  27. 22 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/MyX509Manager.java
  28. 67 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/OutOfBankTransferParam.java
  29. 28 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/OutOfBankTransferResp.java
  30. 18 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementDetail.java
  31. 43 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementParam.java
  32. 8 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementRecord.java
  33. 20 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementResp.java
  34. 32 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionQureyParam.java
  35. 19 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionResp.java
  36. 42 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionRespDetail.java
  37. 11 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionRespRecord.java
  38. 18 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryParam.java
  39. 47 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryResp.java
  40. 33 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryRespDetail.java
  41. 11 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryRespRecord.java
  42. 55 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/SingleTransferInstructionQueryResp.java
  43. 18 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransactionOrderStatusQueryParam.java
  44. 15 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransactionOrderStatusQueryResp.java
  45. 33 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionDetail.java
  46. 32 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionQueryParam.java
  47. 20 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionQueryResp.java
  48. 27 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/CarbonSecurityConfig.java
  49. 29 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/GlobalCorsConfig.java
  50. 15 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/MyBatisConfig.java
  51. 82 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/Swagger2Config.java
  52. 16 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/WebMvcConfig.java
  53. 42 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/BankTransactionService.java
  54. 17 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/BankUserService.java
  55. 6 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/SocketService.java
  56. 100 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/BankTransactionServiceImpl.java
  57. 53 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/BankUserServiceImpl.java
  58. 76 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/SocketServiceImpl.java
  59. 47 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/BankNoUtial.java
  60. 396 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/BankUtil.java
  61. 81 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/HttpSSLUtil.java
  62. 288 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/JsonAndXmlUtils.java
  63. 105 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/RemoveNullAttr.java
  64. 258 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/SHAEncrytp.java
  65. 368 0
      carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/StringKit.java
  66. 8 0
      carbon-bank/carbon-bank-service/src/main/resources/banner.txt
  67. 22 0
      carbon-bank/carbon-bank-service/src/main/resources/bootstrap.yml
  68. 31 0
      carbon-bank/carbon-bank-service/src/main/resources/logback-spring.xml
  69. 35 0
      carbon-bank/pom.xml

+ 21 - 0
carbon-bank/carbon-bank-common/pom.xml

@@ -0,0 +1,21 @@
+<?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">
+    <parent>
+        <artifactId>carbon-bank</artifactId>
+        <groupId>com.hcloud.microserver</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>carbon-bank-common</artifactId>
+    <groupId>com.hcloud.microserver</groupId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>carbon-bank-common</name>
+    <packaging>jar</packaging>
+
+
+
+
+</project>

+ 123 - 0
carbon-bank/carbon-bank-service/pom.xml

@@ -0,0 +1,123 @@
+<?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">
+    <parent>
+        <artifactId>carbon-bank</artifactId>
+        <groupId>com.hcloud.microserver</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>carbon-bank-service</artifactId>
+    <groupId>com.hcloud.microserver</groupId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>carbon-bank-service</name>
+    <dependencies>
+        <dependency>
+            <groupId>com.hcloud.microserver</groupId>
+            <artifactId>carbon-security</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!-- nacos discovery-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        <!-- nacos config -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+        <!--zipkin-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zipkin</artifactId>
+        </dependency>
+        <!-- spring boot admin client -->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.logstash.logback</groupId>
+            <artifactId>logstash-logback-encoder</artifactId>
+        </dependency>
+        <!-- xls格式excel依赖包 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.17</version>
+        </dependency>
+        <!--xlsx格式excel依赖包-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+        </dependency>
+        <!--easyexcel,推荐使用2.0 以上版本,功能更加完善-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.1.7.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+            <version>7.2.28</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-micro-spring-boot-starter</artifactId>
+            <version>2.0.4</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <!-- druid -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+
+
+        <dependency>
+            <artifactId>carbon-bank-common</artifactId>
+            <groupId>com.hcloud.microserver</groupId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+
+            <groupId>commons-httpclient</groupId>
+
+            <artifactId>commons-httpclient</artifactId>
+
+            <version>3.1</version>
+
+    </dependency>
+
+    </dependencies>
+
+
+</project>

+ 26 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/CarbonManagerServiceApplication.java

@@ -0,0 +1,26 @@
+package com.hcloud.microserver.bank;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * @author xiezt
+ */
+@EnableAsync
+@EnableDiscoveryClient
+@EnableTransactionManagement
+@ComponentScan(basePackages = "com.hcloud")
+@MapperScan(basePackages = {"com.hcloud.microserver.bank.dao"})
+@SpringBootApplication
+public class CarbonManagerServiceApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(CarbonManagerServiceApplication.class, args);
+    }
+
+}

+ 14 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankLoginUserReqParam.java

@@ -0,0 +1,14 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 用户登录请求参数实体类
+ */
+@Data
+public class BankLoginUserReqParam {
+    private String userID;
+    private String userPWD;
+    private String systemId;
+
+}

+ 9 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankLoginUserRespBO.java

@@ -0,0 +1,9 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+@Data
+public class BankLoginUserRespBO extends BankResponseBase {
+    private String corpName;
+
+}

+ 18 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankQueryBaseParam.java

@@ -0,0 +1,18 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+@Data
+public class BankQueryBaseParam<T> {
+    /** 1.	sessionId为会话编号,每次登录之后会产生一个唯一的编号,用于标识这次会话。用户每次进行交易时都必须上送该Id。如果是登录交易,则请求报文头中的sessionId传-1即可**/
+    private String sessionId;
+    /** 12.	serviceId为服务编号,用以区分不同的操作,见具体交易格式说明,如登录交易的服务编号为: CL0001。**/
+    private String serviceId;
+    /** 3.	serialNo为交易序列号,客户端唯一标识,返回时原样返回。**/
+    private String serialNo;
+    /** 3.	serialNo为交易序列号,客户端唯一标识,返回时原样返回。**/
+    private String reqTime;
+
+    private T data;
+
+}

+ 19 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankResponseBase.java

@@ -0,0 +1,19 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 银行系统响应参数公共实体类
+ */
+@Data
+public class BankResponseBase {
+
+    private String sessionId;
+    private String serialNo;
+    private String retCode;
+    private String errorMsg;
+
+
+
+
+}

+ 12 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/BankUpdateUserPwdParam.java

@@ -0,0 +1,12 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 修改密码请求参数实体类
+ */
+@Data
+public class BankUpdateUserPwdParam {
+    private String OLDPWD;
+    private String NEWPWD;
+}

+ 45 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountDetailQueryParam.java

@@ -0,0 +1,45 @@
+package com.hcloud.microserver.bank.bo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 2.5.	账务查询:活期账户明细查询CL0004
+ */
+
+@Data
+public class CurrentAccountDetailQueryParam implements Serializable {
+    /**账户号	19A	必输*/
+    @JSONField(name = "I1ACNO")
+    private String  I1ACNO;
+    /**币种	3A	暂不使用*/
+    @JSONField(name = "I1CYTP")
+    private String  I1CYTP;
+    /**起始日期	8P0	必输*/
+    @JSONField(name = "I1STDT")
+    private String  I1STDT;
+    /**终止日期	8P0	必输*/
+    @JSONField(name = "I1EDDT")
+    private String  I1EDDT;
+    /**起始金额	15P2	非必输*/
+    @JSONField(name = "I1BGAT")
+    private String  I1BGAT;
+    /**终止金额	15P2	非必输*/
+    @JSONField(name = "I1EDAT")
+    private String  I1EDAT;
+    /**借贷标志	1A	空:全部;0:支出;1:收入*/
+    @JSONField(name = "I1JDBZ")
+    private String  I1JDBZ;
+    /**查询标志	1A	0-顺查1-倒查*/
+    @JSONField(name = "I1QYFG")
+    private String  I1QYFG;
+    /**起始条数	5P0	可选*/
+    @JSONField(name = "Num")
+    private String  Num;
+    /**查询条数	4P0	可选(最大2000)*/
+    @JSONField(name = "QryNum")
+    private String  QryNum;
+}

+ 13 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountHistoricalBalanceQueryParam.java

@@ -0,0 +1,13 @@
+package com.hcloud.microserver.bank.bo;
+
+import java.math.BigDecimal;
+
+/**
+ * 活期账户历史余额查询
+ */
+public class CurrentAccountHistoricalBalanceQueryParam {
+    /**账户号;必输;32A;*/
+    private String accNo;
+    /**日期;必输;8P0;*/
+    private BigDecimal date;
+}

+ 16 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountHistoricalBalanceQueryResp.java

@@ -0,0 +1,16 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 获取账户历史余额查询
+ */
+@Data
+public class CurrentAccountHistoricalBalanceQueryResp {
+    /**账户名称;null;100*O;*/
+    private String accName;
+    /**账户余额;null;15P2;*/
+    private BigDecimal balance;
+}

+ 53 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailResp.java

@@ -0,0 +1,53 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 活期账户明细返回参数
+ */
+@Data
+public class CurrentAccountQueryDetailResp {
+    /**交易日期 	8P0	*/
+    private String O2TRDT;
+    /**交易时间 	6P0	*/
+    private String O2TRTM;
+    /**币种	3A	*/
+    private String O2CYTP;
+    /**币种中文描述	10*O	*/
+    private String O2CYMS;
+    /**借贷标记 	2*O	*/
+    private String O2AMCD;
+    /**交易金额 	15P2	*/
+    private BigDecimal O2NGAM;
+    /**账户余额 	15P2	*/
+    private BigDecimal O2ACBL;
+    /**核心流水号	15A	*/
+    private String O2TLSQ;
+    /**摘要	15*O	*/
+    private String O2SMCD;
+    /**备注	200*O	*/
+    private String O2DESC;
+    /**交易渠道	3*O	*/
+    private String O2CHAN;
+    /**对方账号	30A	*/
+    private String O2REAC;
+    /**对方户名	62*O	*/
+    private String O2RENM;
+    /**对方开户行	100*O	*/
+    private String O2REKH;
+    /**手续费	15P2	*/
+    private BigDecimal O2SHXF;
+    /**用途	100*O	*/
+    private String O2YOTU;
+    /**账号1	32A	*/
+    private String O2AC1;
+    /**账户户名1	100*O	*/
+    private String O2NM1;
+    /**业务种类	1A	*/
+    private String O2YWZL;
+    /**记录信息	200*O	*/
+    private String O2JLXX;
+
+}

+ 14 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailRespRecord.java

@@ -0,0 +1,14 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 活期账户明细返回参数
+ */
+@Data
+public class CurrentAccountQueryDetailRespRecord {
+   private CurrentAccountQueryDetailResp RECORD;
+
+}

+ 28 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryDetailTotalResp.java

@@ -0,0 +1,28 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class CurrentAccountQueryDetailTotalResp extends BankResponseBase implements Serializable {
+    /**总笔数	5P0*/
+    private String O1TLNM;
+    /**汇出总笔数	4P0*/
+    private String O1OTNM;
+    /**汇出总金额	15P2*/
+    private BigDecimal O1OTAT;
+    /**汇入总笔数	4P0*/
+    private String O1INNM;
+    /**汇入总金额	15P2*/
+    private BigDecimal O1INAT;
+    /**查询明细*/
+    private List<CurrentAccountQueryDetailRespRecord> list;
+
+
+
+
+
+}

+ 16 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryParam.java

@@ -0,0 +1,16 @@
+package com.hcloud.microserver.bank.bo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFilter;
+import lombok.Data;
+
+/**
+ * 活期账户查询请求参数
+ */
+@Data
+public class CurrentAccountQueryParam {
+    //账号
+
+    @JSONField(name = "I1ACNO")
+    private String I1ACNO;
+}

+ 40 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/CurrentAccountQueryResp.java

@@ -0,0 +1,40 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 活期账户查询返回
+ */
+@Data
+public class CurrentAccountQueryResp extends BankResponseBase {
+    /**账户号                     	19A	*/
+    private String O1ACNO;
+    /**客户号                     	10A	*/
+    private String O1CUNO;
+    /**客户中文名	62*O	*/
+    private String O1CUNM;
+    /**保留余额 	15P2	*/
+    private BigDecimal O1HOBL;
+    /**可用余额 	15P2	*/
+    private BigDecimal O1KYYE;
+    /**账户余额 	15P2	*/
+    private BigDecimal O1ACBL;
+    /**开户日期 	8P0	*/
+    private BigDecimal O1OPDT;
+    /**账务归属机构 	6A	*/
+    private String O1ACSB;
+    /**账户状态中文描述	10*O	*/
+    private String O1STCD;
+    /**币种	2A	*/
+    private String O1CRTP;
+    /**币种中文描述	10*O	*/
+    private String O1BZZW;
+    /**开户机构	6A	*/
+    private String O1OPOG;
+    /**开户机构名称	62*O	*/
+    private String O1OPPL;
+    /**协定存款标志	2*O	*/
+    private String O1XDFG;
+}

+ 33 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsParam.java

@@ -0,0 +1,33 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.15.	账务支付:代发/代扣指令详情信息查询CL0034
+ */
+@Data
+public class InquiryOfWithholdingInstructionDetailsParam {
+
+    /**交易类型;可选01-代发、02-代扣;2A;*/
+    private String BsnType;
+    /**账号1;可选,交易类型为“01”时,账号1为付款账号;交易类型为“02”时,账号1为收款账号;;32A;*/
+    private String AcctNo;
+    /**账号2;可选,交易类型为“01”时,账号2为收款账号;交易类型为“02”时,账号2为付款账号;;32A;*/
+    private String AnAcctNo;
+    /**操作方式;默认:0;0:账务处理1:数据校验;1A;*/
+    private String OperFlg;
+    /**开始金额;可选;15P2;*/
+    private BigDecimal StartAmt;
+    /**结束金额;可选;15P2;*/
+    private BigDecimal EndAmt;
+    /**起始日期;必输;8P0;*/
+    private BigDecimal StartDt;
+    /**终止日期;必输;8P0;*/
+    private BigDecimal EndDt;
+    /**起始条数;必输域;6P0;*/
+    private BigDecimal Num;
+    /**查询条数;必输域;4P0;*/
+    private BigDecimal QryNum;
+}

+ 12 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsRecord.java

@@ -0,0 +1,12 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.15.	账务支付:代发/代扣指令详情信息查询CL0034
+ */
+@Data
+public class InquiryOfWithholdingInstructionDetailsRecord {
+    private InquiryOfWithholdingInstructionDetailsRespDetail RECORD;
+
+}

+ 19 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsResp.java

@@ -0,0 +1,19 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 2.15.	账务支付:代发/代扣指令详情信息查询CL0034
+ */
+@Data
+public class InquiryOfWithholdingInstructionDetailsResp {
+    /**返回笔数;返回笔数;3P0;*/
+    private BigDecimal returnNum;
+    /**查询总条数;满足条件总记录数;5P0;*/
+    private BigDecimal totalNum;
+
+    private List<InquiryOfWithholdingInstructionDetailsRecord> list;
+}

+ 67 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InquiryOfWithholdingInstructionDetailsRespDetail.java

@@ -0,0 +1,67 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.15.	账务支付:代发/代扣指令详情信息查询CL0034
+ */
+@Data
+public class InquiryOfWithholdingInstructionDetailsRespDetail {
+    /**提交日期;null;14P0;*/
+    private BigDecimal TxnDt;
+    /**交易类型;01-代发、02-代扣;2A;*/
+    private String BsnType;
+    /**账号1;null;32A;*/
+    private String AcctNo;
+    /**账号1名称;null;100*O;*/
+    private String AcctName;
+    /**账号2;null;32A;*/
+    private String AnAcctNo;
+    /**账号2名称;null;100*O;*/
+    private String AnAcctName;
+    /**币种;01-人民币;2A;*/
+    private String Ccy;
+    /**交易总金额;null;15P2;*/
+    private BigDecimal BatAmt;
+    /**批次号;null;15A;*/
+    private String BatFlow;
+    /**批次状态;批次成功时,交易结果以明细状态为准; 批次失败时,所有明细均失败;2A;*/
+    private String BatState;
+    /**批次状态描述;null;20*O;*/
+    private String BatDesc;
+    /**批次错误代码;null;20A;*/
+    private String BatCode;
+    /**批次错误信息;null;100*O;*/
+    private String BatMsg;
+    /**企业流水号;null;20A;*/
+    private String CstFlow;
+    /**商户号;null;30A;*/
+    private String CstNo;
+    /**业务类型;当交易类型为01时,101:代发
+     102:代报销
+     103:预借
+     104:行内代付
+     当交易类型为02时,
+     0:批量扣个人
+     1:批量扣企业
+     仅交易类型为02时,该项为空;3A;*/
+    private String BusType;
+    /**月份;仅交易类型为02时,该项为空;6P0;*/
+    private BigDecimal Month;
+    /**明细序号;null;20A;*/
+    private BigDecimal DetFlow;
+    /**明细交易状态;0-交易成功
+     1-交易失败
+     2-入账中;1A;*/
+    private String DetState;
+    /**明细金额;null;15P2;*/
+    private BigDecimal DetAmt;
+    /**明细错误代码;null;20A;*/
+    private String DetCode;
+    /**明细错误信息;null;100*O;*/
+    private String DetMsg;
+    /**备注;null;42*O;*/
+    private String DetRem;
+}

+ 19 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationParam.java

@@ -0,0 +1,19 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.16.	获取联行号信息 CL0101
+ */
+@Data
+public class InterbankNumberInformationParam {
+    /**银行行名;必输;8-100*O;*/
+    private String bankName;
+    /**渠道号;至少四个汉字
+     非必输,不送查询所有
+     0:大小额
+     1:大小额
+     2:同城农信银;1A;*/
+    private String channel;
+
+}

+ 10 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationResp.java

@@ -0,0 +1,10 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.16.	获取联行号信息 CL0101
+ */
+@Data
+public class InterbankNumberInformationResp {
+}

+ 10 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationRespDetail.java

@@ -0,0 +1,10 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.16.	获取联行号信息 CL0101
+ */
+@Data
+public class InterbankNumberInformationRespDetail {
+}

+ 10 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/InterbankNumberInformationRespRecord.java

@@ -0,0 +1,10 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.16.	获取联行号信息 CL0101
+ */
+@Data
+public class InterbankNumberInformationRespRecord {
+}

+ 70 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/IntrabankTransferParam.java

@@ -0,0 +1,70 @@
+package com.hcloud.microserver.bank.bo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/***
+ * 2.6.	转账:行内转账CL0005(需签名)
+ */
+@Data
+public class IntrabankTransferParam {
+    /**企业流水号;必输域,企业自己生成的流水号,在企业内部唯一;20A;*/
+    @JSONField(name = "I1QYLS")
+    private String I1QYLS;
+    /**提交人ID;null;30A;*/
+    @JSONField(name = "I1SMID")
+    private String I1SMID;
+    /**最后授权人ID;null;30A;*/
+    @JSONField(name = "I1ATID")
+    private String I1ATID;
+    /**付款账号;必输域;32A;*/
+    @JSONField(name = "I1FKAC")
+    private String I1FKAC;
+    /**付款方户名;null;60*O;*/
+    @JSONField(name = "I1FKNM")
+    private String I1FKNM;
+    /**收款方户名;必输域;60*O;*/
+    @JSONField(name = "I1CUNM")
+    private String I1CUNM;
+    /**收款账号;必输域;32A;*/
+    @JSONField(name = "I1SKAC")
+    private String I1SKAC;
+    /**金额;必输域;15P2;*/
+    @JSONField(name = "I1TRAM")
+    private BigDecimal I1TRAM;
+    /**币种;必输域(固定值01);2A;*/
+    @JSONField(name = "I1TRCY")
+    private BigDecimal I1TRCY;
+    /**用途;必输域;30*O;*/
+    @JSONField(name = "I1PUPS")
+    private BigDecimal I1PUPS;
+    /**备注;null;150*O;*/
+    @JSONField(name = "I1REM")
+    private String I1REM;
+    /**交易类型;0:集团账号转账1:普通转账;1A;*/
+    @JSONField(name = "IJYLX")
+    private String IJYLX;
+    /**企业指令内部编号;null;30A;*/
+    @JSONField(name = "I1NBBH")
+    private String I1NBBH;
+    /**校验标志;0:无(默认)1:招标账户校验;1A;*/
+    @JSONField(name = "I1JYBZ")
+    private String I1JYBZ;
+    /**原明细序号;null;8A;*/
+    @JSONField(name = "I1MXXH")
+    private String I1MXXH;
+    /**账号1;null;32A;*/
+    @JSONField(name = "I1AC1")
+    private String I1AC1;
+    /**账户户名1;null;100*O;*/
+    @JSONField(name = "I1NM1")
+    private String I1NM1;
+    /**业务种类;1-代理支付;1A;*/
+    @JSONField(name = "I1YWZL")
+    private String I1YWZL;
+    /**记录信息;null;200*O;*/
+    @JSONField(name = "I1JLXX")
+    private String I1JLXX;
+}

+ 26 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/IntrabankTransferResp.java

@@ -0,0 +1,26 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class IntrabankTransferResp extends BankResponseBase {
+
+    /**渠道流水号;null;15A;*/
+    private String O1TLSQ;
+    /**交易状态;见数据字典说明;2A;*/
+    private String O1JYZT;
+    /**状态描述;null;20*O;*/
+    private String O1ZTMS;
+    /**交易应答代码;null;20A;*/
+    private String O1JYYD;
+    /**失败原因;null;100*O;*/
+    private String O1SBYY;
+    /**付款账户余额;null;15P2;*/
+    private BigDecimal O1ZHYE;
+    /**手续费;null;15P2;*/
+    private BigDecimal O1PCDF;
+    /**邮电费;null;15P2;*/
+    private BigDecimal O1PSTF;
+}

+ 22 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/MyX509Manager.java

@@ -0,0 +1,22 @@
+package com.hcloud.microserver.bank.bo;
+
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+public class MyX509Manager implements X509TrustManager {
+    @Override
+    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+    }
+
+    @Override
+    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+    }
+
+    @Override
+    public X509Certificate[] getAcceptedIssuers() {
+        return new X509Certificate[0];
+    }
+}

+ 67 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/OutOfBankTransferParam.java

@@ -0,0 +1,67 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.7.	转账:行外转账CL0006(需签名)
+ */
+@Data
+public class OutOfBankTransferParam {
+
+    /**企业流水号;必输域;20A;*/
+    private String I1QYLS;
+    /**提交人ID;null;30A;*/
+    private String I1SMID;
+    /**最后授权人ID;null;30A;*/
+    private String I1ATID;
+    /**货币符号;必输域币种表人民币01;2A;*/
+    private String CYNO;
+    /**付款金额;必输域;15P2;*/
+    private BigDecimal HBJE;
+    /**付款人开户行;必输域;12A;*/
+    private String FKKH;
+    /**付款人账号;必输域;32A;*/
+    private String FKZH;
+    /**付款人名称;必输域;60*O;*/
+    private String FKRM;
+    /**收款人开户行;当加急标志为0,1时必输;12A;*/
+    private String SKKH;
+    /**收款人开户行名;当加急标志为2时必输;100*O;*/
+    private String SKHM;
+    /**收款人账号;必输域;32A;*/
+    private String SKZH;
+    /**收款人名称;必输域;60*O;*/
+    private String SKRM;
+    /**付款用途;必输域;30*O;*/
+    private String FYAN;
+    /**付款人备注;null;30*O;*/
+    private String FKBZ;
+    /**加急标志;必输域0:普通(小额),1:加急(大额),2:支付平台;1A;*/
+    private String JJBZ;
+    /**交易类型;必输域0:集团账号转账1:普通转账;1A;*/
+    private String IJYLX;
+    /**核心流水号;null;15A;*/
+    private String I1TLSQ;
+    /**交易日期;null;8A;*/
+    private String I1TRDT;
+    /**交易序号;null;15A;*/
+    private String I1ZFXH;
+    /**企业指令内部编号;null;30A;*/
+    private String I1NBBH;
+    /**手续费支付方;0:付款人支付(默认);1A;*/
+    private String I1SXZF;
+    /**校验标志;0:无(默认)1:招标账户校验;1A;*/
+    private String I1JYBZ;
+    /**原明细序号;null;8A;*/
+    private String I1MXXH;
+    /**账号1;null;32A;*/
+    private String I1AC1;
+    /**账户户名1;null;100*O;*/
+    private String I1NM1;
+    /**业务种类;1-代理支付;1A;*/
+    private String I1YWZL;
+    /**记录信息;null;200*O;*/
+    private String I1JLXX;
+}

+ 28 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/OutOfBankTransferResp.java

@@ -0,0 +1,28 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.7.	转账:行外转账CL0006(需签名)
+ */
+@Data
+public class OutOfBankTransferResp {
+    /**渠道流水号;null;15A;*/
+    private String O1TLSQ;
+    /**交易状态;见数据字典说明;2A;*/
+    private String O1JYZT;
+    /**状态描述;null;10*O;*/
+    private String O1ZTMS;
+    /**交易应答代码;null;7A;*/
+    private String O1JYYD;
+    /**失败原因;null;60*O;*/
+    private String O1SBYY;
+    /**付款账户余额;null;15P2;*/
+    private BigDecimal O1ZHYE;
+    /**手续费;null;15P2;*/
+    private BigDecimal O1PCDF;
+    /**邮电费;null;15P2;*/
+    private BigDecimal O1PSTF;
+}

+ 18 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementDetail.java

@@ -0,0 +1,18 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PayWagesOrReimbursementDetail {
+    /**收款人账号;必输域;19A;*/
+    private String O2SKZH;
+    /**收款人姓名;必输域;62*O;*/
+    private String O2SKXM;
+    /**金额;必输域;15P2;*/
+    private BigDecimal O2JYJE;
+    /**备注/用途;null;42*O;*/
+    private String O2JYBZ;
+
+}

+ 43 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementParam.java

@@ -0,0 +1,43 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 2.12.	账务支付:代发工资/代报销CL0033(需签名)
+ */
+@Data
+public class PayWagesOrReimbursementParam {
+
+    /**企业流水号;必输域;20A;*/
+    private String I1QYLS;
+    /**提交人ID;null;30A;*/
+    private String I1SMID;
+    /**最后授权人ID;null;30A;*/
+    private String I1ATID;
+    /**业务类型;必输域;3A;*/
+    private String O1YWLX;
+    /**代发月份;必输域;6P0;*/
+    private BigDecimal O1DFYF;
+    /**付款账号;必输域;19A;*/
+    private String O1FKAC;
+    /**总笔数;必输域;3P0;*/
+    private BigDecimal O1TRCT;
+    /**总金额;必输域;15P2;*/
+    private BigDecimal O1TRAM;
+    /**批次备注;null;32*O;*/
+    private BigDecimal O1PCBZ;
+    /**企业指令内部编号;null;30A;*/
+    private BigDecimal I1NBBH;
+    /**操作方式;默认:0;0:账务处理1:数据校验;1A;*/
+    private String O1FLAG;
+    /**明细展示;0:隐藏明细;1:显示明细;默认:0;1A;*/
+    private String O1SHOW;
+    /**交易类型;0:集团账号转账;1:普通转账;默认:0;1A;*/
+    private String IJYLX;
+    /**明细组合*/
+    private List<PayWagesOrReimbursementRecord> list;
+
+}

+ 8 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementRecord.java

@@ -0,0 +1,8 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+@Data
+public class PayWagesOrReimbursementRecord {
+    private PayWagesOrReimbursementDetail RECORD;
+}

+ 20 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/PayWagesOrReimbursementResp.java

@@ -0,0 +1,20 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.12.	账务支付:代发工资/代报销CL0033(需签名)
+ */
+@Data
+public class PayWagesOrReimbursementResp extends BankResponseBase{
+    /**渠道流水号;null;15A;*/
+    private String O1TLSQ;
+    /**交易状态;见数据字典说明;2A;*/
+    private String O1JYZT;
+    /**状态描述;null;20*O;*/
+    private String O1ZTMS;
+    /**交易应答代码;null;20A;*/
+    private String O1JYYD;
+    /**失败原因;null;100*O;*/
+    private String O1SBYY;
+}

+ 32 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionQureyParam.java

@@ -0,0 +1,32 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.13.	账务支付:代发/代报销指令列表查询CL0031
+ */
+@Data
+public class ReimbursementInstructionQureyParam {
+    /**业务类型;101:代发、102:代报销;3A;*/
+    private String I1YWLX;
+    /**付款账号;可选;19A;*/
+    private String I1FKAC;
+    /**指令状态;可选,0:全部、1:等待企业处理、2:银行处理中、3:处理完成;1A;*/
+    private String I1STT;
+    /**操作方式;默认:0、0:账务处理、1:数据校验;1A;*/
+    private String O1FLAG;
+    /**起始日期;必输域;8P0;*/
+    private BigDecimal I1STDT;
+    /**终止日期;必输域;8P0;*/
+    private BigDecimal I1EDDT;
+    /**起始金额;可选;15P2;*/
+    private BigDecimal I1BGAT;
+    /**终止金额;可选;15P2;*/
+    private BigDecimal I1EDAT;
+    /**起始条数;必输域;5P0;*/
+    private BigDecimal Num;
+    /**查询条数;必输域;3P0;*/
+    private BigDecimal QryNum;
+}

+ 19 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionResp.java

@@ -0,0 +1,19 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 2.13.	账务支付:代发/代报销指令列表查询CL0031
+ */
+@Data
+public class ReimbursementInstructionResp {
+    /**返回笔数;返回笔数;3P0;*/
+    private BigDecimal O1TLNM;
+    /**查询总条数;满足条件总记录数;5P0;*/
+    private BigDecimal totalNum;
+    /**返回笔数的明细*/
+    private List<ReimbursementInstructionRespRecord> list;
+}

+ 42 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionRespDetail.java

@@ -0,0 +1,42 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.13.	账务支付:代发/代报销指令列表查询CL0031
+ */
+@Data
+public class ReimbursementInstructionRespDetail {
+
+    /**提交日期;null;14P0;*/
+    private BigDecimal O2TRDT;
+    /**代发账号;null;19A;*/
+    private String O2FKAC;
+    /**总笔数;null;4P0;*/
+    private BigDecimal O2TRCT;
+    /**总金额;null;15P2;*/
+    private BigDecimal O2TRAM;
+    /**流水号;null;15A;*/
+    private String O2TLSQ;
+    /**交易状态;见数据字典说明;2A;*/
+    private String O2JYZT;
+    /**指令状态;状态中文描述;20*O;*/
+    private String O2STT;
+    /**业务类型;101:代发102:代报销;3A;*/
+    private String O2YWLX;
+    /**企业流水号;null;20A;*/
+    private String O2QYLS;
+    /**月份;null;6P0;*/
+    private BigDecimal O2DFYF;
+    /**错误代码;null;20A;*/
+    private String code;
+    /**错误信息;null;100*O;*/
+    private String msg;
+    /**成功总笔数;null;4P0;*/
+    private BigDecimal O1SUCT;
+    /**成功总金额;null;15P2;*/
+    private BigDecimal O1SUAM;
+
+}

+ 11 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionRespRecord.java

@@ -0,0 +1,11 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/**
+ * 2.13.	账务支付:代发/代报销指令列表查询CL0031
+ */
+@Data
+public class ReimbursementInstructionRespRecord {
+    private ReimbursementInstructionRespDetail RECORD;
+}

+ 18 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryParam.java

@@ -0,0 +1,18 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/***
+ * 2.14.	账务支付:代发/代报销指令详细查询CL0032
+ */
+@Data
+public class ReimbursementInstructionsDetailQueryParam {
+
+    /**企业流水号;二选一;20A;*/
+    private String I1QYLS;
+    /**渠道流水号;null;15A;*/
+    private String I1TLSQ;
+    /**操作方式;默认:0、0:账务处理、1:数据校验;1A;*/
+    private String O1FLAG;
+
+}

+ 47 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryResp.java

@@ -0,0 +1,47 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/***
+ * 2.14.	账务支付:代发/代报销指令详细查询CL0032
+ */
+@Data
+public class ReimbursementInstructionsDetailQueryResp {
+    /**明细列表*/
+    private List<ReimbursementInstructionsDetailQueryRespRecord> list;
+
+
+    /**提交日期;null;14P0;*/
+    private BigDecimal O2TRDT;
+    /**代发账号;null;19A;*/
+    private String O2FKAC;
+    /**总笔数;null;4P0;*/
+    private BigDecimal O2TRCT;
+    /**总金额;null;15P2;*/
+    private BigDecimal O2TRAM;
+    /**流水号;null;15A;*/
+    private String O2TLSQ;
+    /**交易状态;见数据字典说明;2A;*/
+    private String O2JYZT;
+    /**指令状态;状态中文描述;20*O;*/
+    private String O2STT;
+    /**业务类型;101:代发、102:代报销;3A;*/
+    private String O2YWLX;
+    /**企业流水号;null;20A;*/
+    private String O2QYLS;
+    /**月份;null;6P0;*/
+    private BigDecimal O2DFYF;
+    /**错误代码;null;20A;*/
+    private String code;
+    /**错误信息;null;100*O;*/
+    private String msg;
+    /**成功总笔数;null;4P0;*/
+    private BigDecimal O1SUCT;
+    /**成功总金额;null;15P2;*/
+    private BigDecimal O1SUAM;
+    /**银行落地备注;null;100*O;*/
+    private String O1BKRM;
+}

+ 33 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryRespDetail.java

@@ -0,0 +1,33 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/***
+ * 2.14.	账务支付:代发/代报销指令详细查询CL0032
+ */
+@Data
+public class ReimbursementInstructionsDetailQueryRespDetail {
+    /**收款人账号;null;19A;*/
+    private String O2SKZH;
+    /**收款人姓名;null;62*O;*/
+    private String O2SKXM;
+    /**金额;null;15P2;*/
+    private BigDecimal O2JYJE;
+    /**备注/用途;null;42*O;*/
+    private String O2JYBZ;
+    /**交易结果;处理成功:0、处理失败:1、处理中:2;1A;*/
+    private String O2JYJG;
+    /**错误代码;null;20A;*/
+    private String code;
+    /**错误信息;null;100*O;*/
+    private String msg;
+    /**入账日期;null;8P0;*/
+    private BigDecimal date;
+    /**入账时间;null;6P0;*/
+    private BigDecimal time;
+    /**核心流水;null;15A;*/
+    private BigDecimal flowno;
+
+}

+ 11 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/ReimbursementInstructionsDetailQueryRespRecord.java

@@ -0,0 +1,11 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/***
+ * 2.14.	账务支付:代发/代报销指令详细查询CL0032
+ */
+@Data
+public class ReimbursementInstructionsDetailQueryRespRecord {
+    private ReimbursementInstructionsDetailQueryRespDetail RECORD;
+}

+ 55 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/SingleTransferInstructionQueryResp.java

@@ -0,0 +1,55 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.11.	指令查询:查询支付单笔指令详细(转账单笔指令详细)CL0008
+ * 请求类型用TransactionOrderStatusQueryParam不加业务类型
+ */
+@Data
+public class SingleTransferInstructionQueryResp {
+    /**提交日期;null;14;*/
+    private String O1TRDT;
+    /**交易类型;0:行内转账1:行外转账;1A;*/
+    private String O2JYLX;
+    /**付款账号;null;19A;*/
+    private String O1FKAC;
+    /**付款户名;null;300O;*/
+    private String O1FKNM;
+    /**付款行行号;null;12A;*/
+    private String O1FKHH;
+    /**收款账号;null;19A;*/
+    private String O1SKAC;
+    /**收款户名;null;300O;*/
+    private String O1SKNM;
+    /**收款方开户行联行号;他行使用;12A;*/
+    private String O1CTNO;
+    /**交易金额;null;15P2;*/
+    private BigDecimal O1TRAM;
+    /**加急标志;null;2*O;*/
+    private BigDecimal O1EGFG;
+    /**交易币种;null;3A;*/
+    private String O1CYTP;
+    /**币种中文描述;null;10*O;*/
+    private String O1BZZW;
+    /**付款用途;null;100*O;*/
+    private String O1FKYT;
+    /**备注;null;300O;*/
+    private String O1REM;
+    /**银行落地备注;null;300O;*/
+    private String O1BKRM;
+    /**手续费;null;15P2;*/
+    private BigDecimal O1PCDF;
+    /**邮电费;null;15P2;*/
+    private BigDecimal O1PSTF;
+    /**渠道流水号;null;15A;*/
+    private BigDecimal O1TLSQ;
+    /**指令状态;见数据字典说明;10*O;*/
+    private BigDecimal O1STT;
+    /**主机返回码;null;20A;*/
+    private BigDecimal O1HTCD;
+    /**主机返回错误信息;null;300O;*/
+    private String O1HTMG;
+}

+ 18 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransactionOrderStatusQueryParam.java

@@ -0,0 +1,18 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+/***
+ *2.9.	指令查询:交易指令状态查询CL0042
+ */
+@Data
+public class TransactionOrderStatusQueryParam {
+
+    /**企业流水号;二选一I1TLSQ;20A;*/
+    private String I1QYLS;
+    /**渠道流水号;二选一I1QYLS;15A;*/
+    private String I1TLSQ;
+    /**业务类型;必输,如行内转账的业务类型为:CL0005;6A;*/
+    private String I1YWLX;
+
+}

+ 15 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransactionOrderStatusQueryResp.java

@@ -0,0 +1,15 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+@Data
+public class TransactionOrderStatusQueryResp {
+    /**交易状态;见数据字典说明;2A;*/
+    private String O1JYZT;
+    /**状态描述;状态中文描述;10*O;*/
+    private String O1ZTMS;
+    /**交易应答代码;null;7A;*/
+    private String O1JYYD;
+    /**失败原因;null;60*O;*/
+    private String O1SBYY;
+}

+ 33 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionDetail.java

@@ -0,0 +1,33 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 转账交易指令明细
+ */
+@Data
+public class TransferTransactionInstructionDetail {
+    /**提交日期;null;8P0;*/
+    private BigDecimal O2TRDT;
+    /**交易类型;交易类型中文描述;10*O;*/
+    private BigDecimal O2JYLX;
+    /**付款账号;null;19A;*/
+    private BigDecimal O2FKAC;
+    /**收款账号;null;19A;*/
+    private BigDecimal O2SKAC;
+    /**交易金额;null;15P2;*/
+    private BigDecimal O2TRAM;
+    /**手续费;null;15P2;*/
+    private BigDecimal O2PCDF;
+    /**邮电费;null;15P2;*/
+    private BigDecimal O2PSTF;
+    /**渠道流水号;null;15A;*/
+    private BigDecimal O2TLSQ;
+    /**指令状态;状态中文描述;10*O;*/
+    private BigDecimal O2STT;
+    /**企业流水号;null;20A;*/
+    private BigDecimal O2QYLS;
+
+}

+ 32 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionQueryParam.java

@@ -0,0 +1,32 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 2.10.	指令查询:查询支付单笔指令列表(转账交易指令查询)CL0007
+ */
+@Data
+public class TransferTransactionInstructionQueryParam {
+    /**交易类型;必输域0:行内转账1:行外转账;1A;*/
+    private String I1JYLX;
+    /**付款账号;可选;19A;*/
+    private String I1FKAC;
+    /**收款账号;可选;19A;*/
+    private String I1SKAC;
+    /**指令状态;可选;1A;*/
+    private String I1STT;
+    /**起始日期;必输域;8P0;*/
+    private BigDecimal I1STDT;
+    /**终止日期;必输域;8P0;*/
+    private BigDecimal I1EDDT;
+    /**起始金额;可选;15P2;*/
+    private BigDecimal I1BGAT;
+    /**终止金额;可选;15P2;*/
+    private BigDecimal I1EDAT;
+    /**起始条数;可选;5P0;*/
+    private BigDecimal Num;
+    /**查询条数;可选(最大2000);4P0;*/
+    private BigDecimal QryNum;
+}

+ 20 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/bo/TransferTransactionInstructionQueryResp.java

@@ -0,0 +1,20 @@
+package com.hcloud.microserver.bank.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 2.10.	指令查询:查询支付单笔指令列表(转账交易指令查询)CL0007
+ */
+@Data
+public class TransferTransactionInstructionQueryResp {
+
+    /**总笔数;本次查询总笔数;5P0;*/
+    private BigDecimal O1TLNM;
+    /**查询总条数;满足条件总记录数;5P0;*/
+    private BigDecimal ResReserved1;
+    /**明细*/
+    private List<TransferTransactionInstructionDetail> list;
+}

+ 27 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/CarbonSecurityConfig.java

@@ -0,0 +1,27 @@
+package com.hcloud.microserver.bank.config;
+
+import com.hcloud.microserver.security.component.DynamicSecurityService;
+import com.hcloud.microserver.security.config.SecurityConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.ConfigAttribute;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.core.userdetails.UserDetailsService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * mall-security模块相关配置
+ * Created by macro on 2019/11/9.
+ */
+//@Configuration
+//@EnableWebSecurity
+//@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class CarbonSecurityConfig extends SecurityConfig {
+
+
+}

+ 29 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/GlobalCorsConfig.java

@@ -0,0 +1,29 @@
+package com.hcloud.microserver.bank.config;
+
+
+/**
+ * 全局跨域相关配置
+ * Created by macro on 2019/7/27.
+ */
+//@Configuration
+public class GlobalCorsConfig {
+
+    /**
+     * 允许跨域调用的过滤器
+     */
+//    @Bean
+//    public CorsFilter corsFilter() {
+//        CorsConfiguration config = new CorsConfiguration();
+//        //允许所有域名进行跨域调用
+//        config.addAllowedOrigin("*");
+//        //允许跨越发送cookie
+//        config.setAllowCredentials(true);
+//        //放行全部原始头信息
+//        config.addAllowedHeader("*");
+//        //允许所有请求方法跨域调用
+//        config.addAllowedMethod("*");
+//        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+//        source.registerCorsConfiguration("/**", config);
+//        return new CorsFilter(source);
+//    }
+}

+ 15 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/MyBatisConfig.java

@@ -0,0 +1,15 @@
+package com.hcloud.microserver.bank.config;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * MyBatis相关配置
+ * Created by macro on 2019/4/8.
+ */
+@Configuration
+@EnableTransactionManagement
+@MapperScan({"com.hcloud.microserver.bank.dao","com.hcloud.microserver.sys.service.dao"})
+public class MyBatisConfig {
+}

+ 82 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/Swagger2Config.java

@@ -0,0 +1,82 @@
+package com.hcloud.microserver.bank.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  Swagger API文档相关配置
+ * Created by macro on 2018/4/26.
+ */
+@Configuration
+@EnableSwagger2
+@EnableKnife4j
+@Import(BeanValidatorPluginsConfiguration.class)
+public class Swagger2Config {
+    @Bean
+    public Docket createRestApi(){
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.hwrj.cloud.admin.controller"))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("mall后台系统")
+                .description("mall后台模块")
+                .contact(new Contact("macro","",""))
+                .version("1.0")
+                .build();
+    }
+
+    private List<ApiKey> securitySchemes() {
+        //设置请求头信息
+        List<ApiKey> result = new ArrayList<>();
+        ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
+        result.add(apiKey);
+        return result;
+    }
+
+    private List<SecurityContext> securityContexts() {
+        //设置需要登录认证的路径
+        List<SecurityContext> result = new ArrayList<>();
+        result.add(getContextByPath("/brand/.*"));
+        result.add(getContextByPath("/product/.*"));
+        result.add(getContextByPath("/productCategory/.*"));
+        return result;
+    }
+
+    private SecurityContext getContextByPath(String pathRegex){
+        return SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .forPaths(PathSelectors.regex(pathRegex))
+                .build();
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        List<SecurityReference> result = new ArrayList<>();
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        result.add(new SecurityReference("Authorization", authorizationScopes));
+        return result;
+    }
+}

+ 16 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/config/WebMvcConfig.java

@@ -0,0 +1,16 @@
+package com.hcloud.microserver.bank.config;
+
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+//@Configuration
+public class WebMvcConfig extends WebMvcConfigurationSupport {
+
+//    @Override
+//    public void addCorsMappings(CorsRegistry registry) {
+//        registry.addMapping("/**")
+//                .allowedOrigins("*")
+//                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
+//                .maxAge(3600)
+//                .allowCredentials(true);
+//    }
+}

+ 42 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/BankTransactionService.java

@@ -0,0 +1,42 @@
+package com.hcloud.microserver.bank.service;
+
+import com.hcloud.microserver.bank.bo.*;
+
+public interface BankTransactionService {
+
+    /**
+     * 2.4.	账务查询:活期账户查询CL0003
+     * @param param
+     * @return
+     */
+    public CurrentAccountQueryResp currentAccountQuery(CurrentAccountQueryParam param);
+
+    /**
+     *
+     * 2.5.	账务查询:活期账户明细查询CL0004
+     * @param param
+     * @return
+     */
+    public CurrentAccountQueryDetailTotalResp currentAccountDetailQuery(CurrentAccountDetailQueryParam param);
+
+    /**
+     * 2.6.	转账:行内转账CL0005(需签名)
+     * @param param
+     * @return
+     */
+    public  IntrabankTransferResp intrabankTransfer(IntrabankTransferParam param);
+    /**
+     * 2.14.	账务支付:代发/代报销指令详细查询CL0032
+     * @param param
+     * @return
+     */
+    public ReimbursementInstructionsDetailQueryResp reimbursementInstructionsDetailQuery(ReimbursementInstructionsDetailQueryParam param);
+
+    /**
+     * 2.15.	账务支付:代发/代扣指令详情信息查询CL0034
+     * @param param
+     * @return
+     */
+    public InquiryOfWithholdingInstructionDetailsResp inquiryOfWithholdingInstructionDetails(InquiryOfWithholdingInstructionDetailsParam param);
+
+}

+ 17 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/BankUserService.java

@@ -0,0 +1,17 @@
+package com.hcloud.microserver.bank.service;
+
+import com.hcloud.microserver.bank.bo.BankLoginUserReqParam;
+import com.hcloud.microserver.bank.bo.BankLoginUserRespBO;
+
+/**
+ * 银行用户
+ */
+public interface BankUserService {
+    /**
+     * serviceId为CL0001
+     * @param reqBO
+     * @return
+     */
+    public BankLoginUserRespBO loginUser(BankLoginUserReqParam reqBO);
+
+}

+ 6 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/SocketService.java

@@ -0,0 +1,6 @@
+package com.hcloud.microserver.bank.service;
+
+public interface SocketService {
+
+    public String sendSignRequestTCP(String oriData);
+}

+ 100 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/BankTransactionServiceImpl.java

@@ -0,0 +1,100 @@
+package com.hcloud.microserver.bank.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hcloud.microserver.bank.bo.*;
+import com.hcloud.microserver.bank.service.BankTransactionService;
+import com.hcloud.microserver.bank.util.BankNoUtial;
+import com.hcloud.microserver.bank.util.BankUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+@Slf4j
+@Service
+public class BankTransactionServiceImpl implements BankTransactionService {
+    @Autowired
+    private BankUtil bankUtil;
+    @Override
+    public CurrentAccountQueryResp currentAccountQuery(CurrentAccountQueryParam param) {
+
+        if (param == null){
+            return null;
+        }
+        String num = BankNoUtial.NextOrderNo();
+        String time = bankUtil.getTime(new Date());
+        String serviceId = "CL0003";
+//        String sessionId="-1";
+        BankLoginUserRespBO loginSession = bankUtil.getLoginSession();
+        String sessionId = loginSession.getSessionId();
+
+        BankQueryBaseParam<CurrentAccountQueryParam> paramReq = new BankQueryBaseParam<>();
+        paramReq.setData(param);
+        paramReq.setReqTime(time);
+        paramReq.setServiceId(serviceId);
+        paramReq.setSessionId(sessionId);
+        paramReq.setSerialNo(num);
+        CurrentAccountQueryResp currentAccountQueryResp =(CurrentAccountQueryResp) bankUtil.bankRequst(paramReq, 0, CurrentAccountQueryResp.class);
+        log.info(JSONObject.toJSONString(currentAccountQueryResp));
+
+        return currentAccountQueryResp;
+
+    }
+
+    @Override
+    public CurrentAccountQueryDetailTotalResp currentAccountDetailQuery(CurrentAccountDetailQueryParam param) {
+        if (param == null){
+            return null;
+        }
+        String num = BankNoUtial.NextOrderNo();
+        String time = bankUtil.getTime(new Date());
+        String serviceId = "CL0004";
+//        String sessionId="-1";
+        BankLoginUserRespBO loginSession = bankUtil.getLoginSession();
+        String sessionId = loginSession.getSessionId();
+
+        BankQueryBaseParam<CurrentAccountDetailQueryParam> paramReq = new BankQueryBaseParam<>();
+        paramReq.setData(param);
+        paramReq.setReqTime(time);
+        paramReq.setServiceId(serviceId);
+        paramReq.setSessionId(sessionId);
+        paramReq.setSerialNo(num);
+        CurrentAccountQueryDetailTotalResp curDetailTotal =(CurrentAccountQueryDetailTotalResp) bankUtil.bankRequst(paramReq, 0, CurrentAccountQueryDetailTotalResp.class);
+        log.info(JSONObject.toJSONString(curDetailTotal));
+        return curDetailTotal;
+    }
+
+    @Override
+    public IntrabankTransferResp intrabankTransfer(IntrabankTransferParam param) {
+        if (param == null){
+            return null;
+        }
+        String num = BankNoUtial.NextOrderNo();
+        String time = bankUtil.getTime(new Date());
+        String serviceId = "CL0004";
+//        String sessionId="-1";
+        BankLoginUserRespBO loginSession = bankUtil.getLoginSession();
+        String sessionId = loginSession.getSessionId();
+
+        BankQueryBaseParam<IntrabankTransferParam> paramReq = new BankQueryBaseParam<>();
+        paramReq.setData(param);
+        paramReq.setReqTime(time);
+        paramReq.setServiceId(serviceId);
+        paramReq.setSessionId(sessionId);
+        paramReq.setSerialNo(num);
+        IntrabankTransferResp intrabankTransferResp =(IntrabankTransferResp) bankUtil.bankRequst(paramReq, 1, IntrabankTransferResp.class);
+        log.info(JSONObject.toJSONString(intrabankTransferResp));
+        return intrabankTransferResp;
+
+    }
+
+    @Override
+    public ReimbursementInstructionsDetailQueryResp reimbursementInstructionsDetailQuery(ReimbursementInstructionsDetailQueryParam param) {
+        return null;
+    }
+
+    @Override
+    public InquiryOfWithholdingInstructionDetailsResp inquiryOfWithholdingInstructionDetails(InquiryOfWithholdingInstructionDetailsParam param) {
+        return null;
+    }
+}

+ 53 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/BankUserServiceImpl.java

@@ -0,0 +1,53 @@
+package com.hcloud.microserver.bank.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hcloud.microserver.bank.bo.BankLoginUserReqParam;
+import com.hcloud.microserver.bank.bo.BankLoginUserRespBO;
+import com.hcloud.microserver.bank.bo.BankQueryBaseParam;
+import com.hcloud.microserver.bank.service.BankUserService;
+import com.hcloud.microserver.bank.util.BankNoUtial;
+import com.hcloud.microserver.bank.util.BankUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Slf4j
+@Service
+public class BankUserServiceImpl implements BankUserService {
+
+
+
+    @Autowired
+    private BankUtil bankUtil;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+
+
+    @Override
+    public BankLoginUserRespBO loginUser(BankLoginUserReqParam reqBO) {
+        if (reqBO == null){
+            return null;
+        }
+        String num = BankNoUtial.NextOrderNo();
+        String time = bankUtil.getTime(new Date());
+        String serviceId = "CL0001";
+        String sessionId="-1";
+        BankQueryBaseParam<BankLoginUserReqParam> param = new BankQueryBaseParam<>();
+        param.setData(reqBO);
+        param.setReqTime(time);
+        param.setServiceId(serviceId);
+        param.setSessionId(sessionId);
+        param.setSerialNo(num);
+        BankLoginUserRespBO bankResponseBase =(BankLoginUserRespBO) bankUtil.bankRequst(param, 1, BankLoginUserRespBO.class);
+        log.info(JSONObject.toJSONString(bankResponseBase));
+        if ("00000000".equals(bankResponseBase.getRetCode())){
+            bankUtil.cacheLoginSession(bankResponseBase);
+        }
+        return bankResponseBase;
+    }
+}

+ 76 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/service/impl/SocketServiceImpl.java

@@ -0,0 +1,76 @@
+package com.hcloud.microserver.bank.service.impl;
+
+import com.hcloud.microserver.bank.service.SocketService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.net.Socket;
+
+@Service
+public class SocketServiceImpl implements SocketService {
+
+    private String charset="UTF-8";
+
+    @Value("${cqrcb.bank.sign.ip}")
+    private String ip;
+
+    @Value("${cqrcb.bank.sign.port}")
+    private int port;
+
+    @Override
+    public String sendSignRequestTCP(String oriData) {
+        StringBuffer sb = new StringBuffer("");
+        Socket socket = null;
+        BufferedInputStream in = null;
+        BufferedOutputStream out = null;
+        try {
+            int length = oriData.getBytes(charset).length;
+            byte[] buf = new byte[length + 5];
+            String lenValue = String.valueOf(length);
+            System.arraycopy(oriData.getBytes(charset), 0, buf, 5, length);
+            for (int i = 0; i < 5; i++)
+                buf[i] = '0';
+            int idx = 0;
+            for (int i = 5 - lenValue.length(); i < 5; i++) {
+                buf[i] = (byte) lenValue.charAt(idx++);
+            }
+            socket = new Socket(ip, port);
+            out = new BufferedOutputStream(socket.getOutputStream());
+            out.write(buf);
+            out.flush();
+            in = new BufferedInputStream(socket.getInputStream());
+            byte[] buffer = new byte[1024];
+            int len = 0;
+            while ((len = in.read(buffer)) != -1) {
+                sb.append(new String(buffer, 0, len, charset));
+            }
+        } catch (Exception e) {
+            sb = new StringBuffer("-1");
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != socket) {
+                    socket.close();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                if (out != null)
+                    out.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                if (in != null)
+                    in.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+}

+ 47 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/BankNoUtial.java

@@ -0,0 +1,47 @@
+package com.hcloud.microserver.bank.util;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class BankNoUtial {
+    private static int sn = 0;
+
+    public static String NextOrderNo(){
+        if(sn == 999999999)
+            sn = 0;
+        else
+            sn++;
+        DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
+        return df.format(new Date()) + padRight(String.valueOf(sn),9, '0');
+    }
+    public static String padLeft(String src, int len, char ch) {
+        int diff = len - src.length();
+        if (diff <= 0) {
+            return src;
+        }
+
+        char[] charr = new char[len];
+        System.arraycopy(src.toCharArray(), 0, charr, 0, src.length());
+        for (int i = src.length(); i < len; i++) {
+            charr[i] = ch;
+        }
+        return new String(charr);
+    }
+    public static String padRight(String src, int len, char ch) {
+        int diff = len - src.length();
+        if (diff <= 0) {
+            return src;
+        }
+
+        char[] charr = new char[len];
+        System.arraycopy(src.toCharArray(), 0, charr, diff, src.length());
+        for (int i = 0; i < diff; i++) {
+            charr[i] = ch;
+        }
+        return new String(charr);
+    }
+    // 防止创建类的实例
+    private BankNoUtial(){}
+
+}

+ 396 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/BankUtil.java

@@ -0,0 +1,396 @@
+package com.hcloud.microserver.bank.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hcloud.microserver.bank.bo.BankLoginUserRespBO;
+import com.hcloud.microserver.bank.bo.BankQueryBaseParam;
+import com.hcloud.microserver.bank.bo.BankResponseBase;
+import com.hcloud.microserver.commoncore.util.string.StringUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.dom4j.DocumentException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+import java.io.*;
+import java.net.Socket;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Data
+@Component
+public class BankUtil {
+
+    private final static SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+
+    private String charset="gb2312";
+
+    @Value("${cqrcb.bank.sign.ip}")
+    private String ipSign;
+
+    @Value("${cqrcb.bank.sign.port}")
+    private int portSign;
+
+    @Value("${cqrcb.bank.sslclient.ip}")
+    private String ip;
+
+    @Value("${cqrcb.bank.sslclient.port}")
+    private int port;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    /**
+     * 根据传入实体进行业务接口对接
+     * @param param
+     * @param type 0 为不签名  1 为签名
+     * @param clazz
+     * @return
+     */
+    public BankResponseBase  bankRequst(BankQueryBaseParam param, int type,Class<? extends BankResponseBase> clazz) {
+        if (param==null||param.getData()==null){
+            return null;
+        }
+        Object paramData = param.getData();
+        Map<String,Object> reqParam= new HashMap<>();
+        reqParam.put("ReqParam",paramData);
+        Map<String,Object> opReq = new HashMap<>();
+        opReq.put("opReq",reqParam);
+        Map<String,Object> CQRCBBankData = new HashMap<>();
+        CQRCBBankData.put("CQRCBBankData",opReq);
+        try {
+            if (type ==1){
+                String s = packSignXml(paramData);
+                opReq.put("signData",s);
+            }
+
+            Object o = JSONObject.toJSON(CQRCBBankData);
+            RemoveNullAttr re = new RemoveNullAttr();
+            Object o1 = re.traverseJson(o);
+            String s = JsonAndXmlUtils.jsonToPrettyXml((JSONObject)o1);
+            String url1 = "http://"+ip+":"+port+"/corporLink";
+            String h = param.getSessionId()+"|"+param.getServiceId()+"|"+param.getSerialNo()+"|"+param.getReqTime()+"|#";
+
+            log.info("request cqcrb url:"+url1);
+            log.info(param.getServiceId()+" request cqcrb content:"+h+s);
+            String resp = sendPost(url1, h + s);
+            log.info("cqcrb response content:"+resp);
+            return xmlStringToEntity(resp,clazz);
+//            return resp;
+        }catch (Exception e){
+            log.info("fail to request "+param.getServiceId()+"{}",paramData);
+        }
+        return null;
+    }
+
+    /**
+     * 解析xml文件维对应的实体
+     * @param xmlString
+     * @param clazz
+     * @return
+     */
+    public BankResponseBase xmlStringToEntity(String xmlString,Class<? extends BankResponseBase> clazz) throws Exception {
+        if (StringUtils.isEmpty(xmlString)){
+            return null;
+        }
+
+        String [] split;
+        if (xmlString.contains("|#")){
+            String name = clazz.getName();
+            BankResponseBase responseBase = clazz.newInstance();
+
+
+            String headString = xmlString.substring(0, xmlString.lastIndexOf("|#"));
+            String xml = xmlString.substring(xmlString.lastIndexOf("|#")+2);
+
+            split = headString.split("\\|");
+            int length = split.length;
+            if (length <3){
+                return null;
+            }
+
+
+
+            JSONObject jsonObject = JsonAndXmlUtils.xmlToJson(xml);
+            log.info(xml);
+            if (jsonObject.containsKey("CQRCBBankData")){
+                JSONObject CQRCBBankDataJSON = (JSONObject) jsonObject.get("CQRCBBankData");
+                if (CQRCBBankDataJSON.containsKey("opRep")){
+                    JSONObject opRepJSON = (JSONObject) CQRCBBankDataJSON.get("opRep");
+                    if (opRepJSON.containsKey("opResult")){
+                        Object opResultObject =  opRepJSON.get("opResult");
+//                        net.sf.json.JSONObject jsonObject1 = net.sf.json.JSONObject.fromObject(opResultObject);
+//                        responseBase = (BankResponseBase) net.sf.json.JSONObject.toBean(jsonObject1, clazz);
+                        responseBase = JSONObject.parseObject(JSONObject.toJSONString(opResultObject), clazz);
+                        responseBase.setSessionId(split[0]);
+                        responseBase.setSerialNo(split[1]);
+                        responseBase.setRetCode(split[2]);
+                        if (length > 3){
+                            responseBase.setErrorMsg(split[3]);
+                        }
+                    }
+                }
+            }
+            return responseBase;
+
+        }
+
+
+        return null;
+    }
+
+    /**
+     * 发送xml请求到server端
+     * @param url xml请求数据地址
+     * @param xmlString 发送的xml数据流
+     * @return null发送失败,否则返回响应内容
+     */
+    public  String sendPost(String url,String xmlString){
+        //创建httpclient工具对象
+        HttpClient client = new HttpClient();
+        //创建post请求方法
+        PostMethod myPost = new PostMethod(url);
+        //设置请求超时时间
+//        client.setConnectionTimeout(3000*1000);
+        String responseString = null;
+        try{
+            //设置请求头部类型
+            myPost.setRequestHeader("Content-Type","text/xml;charset=utf-8");
+
+            //设置请求体,即xml文本内容,一种是直接获取xml内容字符串,一种是读取xml文件以流的形式
+            myPost.setRequestBody(xmlString);
+            int statusCode = client.executeMethod(myPost);
+            //只有请求成功200了,才做处理
+            if(statusCode == HttpStatus.SC_OK){
+                InputStream inputStream = myPost.getResponseBodyAsStream();
+//                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
+//                StringBuffer stringBuffer = new StringBuffer();
+//                String str = "";
+//                while ((str = br.readLine()) != null) {
+//                    stringBuffer.append(str);
+//                }
+//                responseString = stringBuffer.toString();
+                responseString = convertStreamToString(inputStream);
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }finally{
+            myPost.releaseConnection();
+        }
+        return responseString;
+    }
+
+
+    public  String convertStreamToString(InputStream is) {
+        StringBuilder sb1 = new StringBuilder();
+        byte[] bytes = new byte[4096];
+        int size = 0;
+
+        try {
+            while ((size = is.read(bytes)) > 0) {
+                String str = new String(bytes, 0, size, "UTF-8");
+                sb1.append(str);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                is.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb1.toString();
+    }
+
+
+    /**
+     * 1.	sessionId为会话编号,每次登录之后会产生一个唯一的编号,用于标识这次会话。用户每次进行交易时都必须上送该Id。如果是登录交易,则请求报文头中的sessionId传-1即可。
+     * 2.	serviceId为服务编号,用以区分不同的操作,见具体交易格式说明,如登录交易的服务编号为: CL0001。
+     * 3.	serialNo为交易序列号,客户端唯一标识,返回时原样返回。
+     * 4.	reqTime为请求时间,yyyyMMddHHmmss。
+     * 5.	retCode和errorMsg为响应代码和错误信息,请求处理成功时,返回代码为’00000000’,错误信息留空;其它情况均视为请求处理失败。
+     * 6.	请求报文体和响应报文体为XML格式,封装了具体的交易数据,格式请参见下一章节描述。
+     * 7.	对于登录和转账等交易,请求报文体需要进行签名。
+     * 8.	登录后,企业客户如果在设定时间之内没有进行任何请求,该会话将被自动清理,需要重新登录后才可以进行一般交易请求。(目前暂定:设置超时时间为12小时)
+     * 9.	如果sessionId对应的会话是超时或者非法的时候,服务端只会返回响应报文头“-1|EBLN0000|会话已超时,请重新登录|#”,不会返回报文体。
+     * 10.	如果请求的XML包格式不正确,或者opName指定的交易名称不正确时,服务器端也只会返回响应报文头,不会返回报文体。
+     * @param sessionId
+     * @param serviceId
+     * @return
+     */
+    public String getRequestUrl(String ip,int port,String sessionId,String serviceId,String serialNo){
+        String url = "http://"+ip+":"+port;
+        return url;
+    }
+
+    public  String getTime(Date date){
+        return format.format(date);
+    }
+
+    public String sendSignRequestTCP(String oriData) {
+        StringBuffer sb = new StringBuffer("");
+        Socket socket = null;
+        BufferedInputStream in = null;
+        BufferedOutputStream out = null;
+        log.info("sign ip:"+ipSign);
+        log.info("sign port:"+portSign);
+        log.info("sign content:"+oriData);
+        try {
+            int length = oriData.getBytes(charset).length;
+            byte[] buf = new byte[length + 5];
+            String lenValue = String.valueOf(length);
+            System.arraycopy(oriData.getBytes(charset), 0, buf, 5, length);
+            for (int i = 0; i < 5; i++)
+                buf[i] = '0';
+            int idx = 0;
+            for (int i = 5 - lenValue.length(); i < 5; i++) {
+                buf[i] = (byte) lenValue.charAt(idx++);
+            }
+            socket = new Socket(ipSign, portSign);
+            out = new BufferedOutputStream(socket.getOutputStream());
+            out.write(buf);
+            out.flush();
+            in = new BufferedInputStream(socket.getInputStream());
+            byte[] buffer = new byte[1024];
+            int len = 0;
+            while ((len = in.read(buffer)) != -1) {
+                sb.append(new String(buffer, 0, len, charset));
+            }
+        } catch (Exception e) {
+            sb = new StringBuffer("-1");
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != socket) {
+                    socket.close();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                if (out != null)
+                    out.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                if (in != null)
+                    in.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * <msg>
+     * <msg_head>
+     * <msg_type>0</msg_type>
+     * <msg_id>1005</msg_id>
+     * <msg_sn>0</msg_sn>
+     * <version>1</version>
+     * </msg_head>
+     * <msg_body>
+     * <origin_data_len>签名原文的长度</origin_data_len>
+     * <origin_data>签名原文</origin_data>
+     * </msg_body>
+     * </msg>
+     * @param paramData
+     * @return
+     */
+    public String packSignXml(Object paramData) throws Exception {
+        if (paramData == null){
+            return null;
+        }
+        JSONObject si = new JSONObject();
+        si.put("ReqParam",JSONObject.toJSON(paramData));
+
+            String sJson = JsonAndXmlUtils.JsonToXml((JSONObject) JSONObject.parse(JSONObject.toJSONString(si)));
+            String substring = sJson.substring(sJson.lastIndexOf("<ReqParam>"));
+
+
+            log.info("签名后的数据:"+substring);
+            JSONObject head =new JSONObject();
+            head.put("msg_type",0);
+            head.put("msg_id",1005);
+            head.put("msg_sn",0);
+            head.put("version",1);
+            JSONObject body = new JSONObject();
+            body.put("origin_data_len",substring.length());
+            body.put("origin_data","dataDataJxml");
+            JSONObject msg = new JSONObject();
+            msg.put("msg_head",head);
+            msg.put("msg_body",body);
+            JSONObject req = new JSONObject();
+            req.put("msg",msg);
+            String s = JsonAndXmlUtils.JsonToXml(req);
+            String dataDataJxml = s.replace("dataDataJxml", substring);
+            String s1 = sendSignRequestTCP(dataDataJxml);
+            String s2 = xmlToSignData(s1);
+            log.info("sign return data :"+s1);
+            log.info("data sign content :"+s2);
+            return s2;
+
+    }
+
+    public String xmlToSignData(String xmlString) throws DocumentException {
+        JSONObject jsonObject = JsonAndXmlUtils.xmlToJson(xmlString);
+        if (jsonObject.containsKey("msg")){
+            JSONObject msg = (JSONObject)jsonObject.get("msg");
+            if (msg.containsKey("msg_body")){
+                JSONObject msg_body = (JSONObject)msg.get("msg_body");
+                if (msg_body.containsKey("signed_data")){
+                    String signed_data = msg_body.get("signed_data").toString();
+
+                    return replaceBlank(signed_data);
+                }
+            }
+        }
+        return null;
+    }
+
+
+
+    public  String replaceBlank(String str) {
+
+        String dest = "";
+        if (str!=null) {
+            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+            Matcher m = p.matcher(str);
+            dest = m.replaceAll("");
+        }
+        return dest;
+
+    }
+
+
+    public void cacheLoginSession(BankLoginUserRespBO bankLoginUserRespBO){
+        ValueOperations ops = redisTemplate.opsForValue();
+        ops.set("cqcarbon.bank.user.sessionId",bankLoginUserRespBO,12*3600, TimeUnit.SECONDS);
+    }
+
+    public BankLoginUserRespBO getLoginSession(){
+        ValueOperations ops = redisTemplate.opsForValue();
+        BankLoginUserRespBO o = (BankLoginUserRespBO)ops.get("cqcarbon.bank.user.sessionId");
+        if (o != null){
+            return o;
+        }
+        return null;
+    }
+
+
+
+
+}

+ 81 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/HttpSSLUtil.java

@@ -0,0 +1,81 @@
+package com.hcloud.microserver.bank.util;
+
+import com.hcloud.microserver.bank.bo.MyX509Manager;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.URL;
+import java.security.SecureRandom;
+@Slf4j
+public class HttpSSLUtil {
+    /**
+     * 发送https请求共用体
+     */
+    public static   String  sendPost(String url,String xml) {
+
+        PrintWriter out = null;
+        BufferedReader in = null;
+        String result = "";
+        URL realUrl;
+        javax.net.ssl.HttpsURLConnection conn;
+        String method = "POST";
+        BufferedOutputStream o = null;
+
+
+
+        try {
+            TrustManager[] tm = {new MyX509Manager()};
+            SSLContext aDefault = SSLContext.getInstance("SSL");
+            aDefault.init(null,tm,new SecureRandom());
+            SSLSocketFactory ssf = aDefault.getSocketFactory();
+
+//        SSLSocketFactory ssf= HttpsClientUtils.getSSFactory();
+            realUrl= new URL(null, url, new sun.net.www.protocol.https.Handler());
+            conn = (javax.net.ssl.HttpsURLConnection)realUrl.openConnection();
+            conn.setSSLSocketFactory(ssf);
+            conn.setRequestProperty("Content-Type","text/xml;Charset=UTF-8");
+            conn.setRequestMethod(method);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setUseCaches(false);
+            conn.setHostnameVerifier(new HostnameVerifier() {
+                @Override
+                public boolean verify(String s, SSLSession sslSession) {
+                    return true;
+                }
+            });
+            o = new BufferedOutputStream(conn.getOutputStream());
+            o.write(xml.getBytes("UTF-8"));
+//            out = new PrintWriter(conn.getOutputStream());
+//            out.print(xml);
+//            out.flush();
+            o.flush();
+
+            in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(),"utf-8"));
+
+
+            String line;
+            while ((line = in.readLine()) != null) {
+                log.info(line);
+                result += line;
+            }
+//            json = JSONObject.fromObject(result);
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+        return result;
+    }
+}

+ 288 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/JsonAndXmlUtils.java

@@ -0,0 +1,288 @@
+package com.hcloud.microserver.bank.util;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.nio.file.Paths;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.SAXReader;
+import org.dom4j.io.XMLWriter;
+import org.xml.sax.SAXException;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ * JSON对象与XML相互转换工具类
+ *
+ * @author Logan
+ * @createDate 2019-02-12
+ * @version 1.0.0
+ *
+ */
+public class JsonAndXmlUtils {
+
+    private static final String ENCODING = "UTF-8";
+
+    /**
+     * JSON对象转漂亮的xml字符串
+     *
+     * @param json JSON对象
+     * @return 漂亮的xml字符串
+     * @throws IOException
+     * @throws SAXException
+     */
+    public static String jsonToPrettyXml(JSONObject json) throws IOException, SAXException {
+        Document document = jsonToDocument(json);
+
+        /* 格式化xml */
+        OutputFormat format = OutputFormat.createPrettyPrint();
+
+        // 设置缩进为4个空格
+        format.setIndent(" ");
+        format.setIndentSize(4);
+
+        StringWriter formatXml = new StringWriter();
+        XMLWriter writer = new XMLWriter(formatXml, format);
+        writer.write(document);
+
+        return formatXml.toString();
+    }
+
+    /**
+     * JSON对象转xml字符串
+     *
+     * @param json JSON对象
+     * @return xml字符串
+     * @throws SAXException
+     */
+    public static String JsonToXml(JSONObject json) throws SAXException {
+        return jsonToDocument(json).asXML();
+    }
+
+    /**
+     * JSON对象转Document对象
+     *
+     * @param json JSON对象
+     * @return Document对象
+     * @throws SAXException
+     */
+    public static Document jsonToDocument(JSONObject json) throws SAXException {
+        Document document = DocumentHelper.createDocument();
+        document.setXMLEncoding(ENCODING);
+
+        // root对象只能有一个
+        for (String rootKey : json.keySet()) {
+            Element root = jsonToElement(json.getJSONObject(rootKey), rootKey);
+            document.add(root);
+            break;
+        }
+        return document;
+    }
+
+    /**
+     * JSON对象转Element对象
+     *
+     * @param json JSON对象
+     * @param nodeName 节点名称
+     * @return Element对象
+     */
+    public static Element jsonToElement(JSONObject json, String nodeName) {
+        Element node = DocumentHelper.createElement(nodeName);
+        for (String key : json.keySet()) {
+            Object child = json.get(key);
+            if (child instanceof JSONObject) {
+                node.add(jsonToElement(json.getJSONObject(key), key));
+            }
+
+            else {
+                Element element = DocumentHelper.createElement(key);
+                element.setText(json.getString(key));
+                node.add(element);
+            }
+        }
+        return node;
+    }
+
+    /**
+     * XML字符串转JSON对象
+     *
+     * @param xml xml字符串
+     * @return JSON对象
+     * @throws DocumentException
+     */
+    public static JSONObject xmlToJson(String xml) throws DocumentException {
+        JSONObject json = new JSONObject();
+
+        SAXReader reader = new SAXReader();
+        Document document = reader.read(new StringReader(xml));
+        Element root = document.getRootElement();
+
+        json.put(root.getName(), elementToJson(root));
+
+        return json;
+    }
+
+    /**
+     * Element对象转JSON对象
+     *
+     * @param element Element对象
+     * @return JSON对象
+     */
+    public static JSONObject elementToJson(Element element) {
+        JSONObject json = new JSONObject();
+        for (Object child : element.elements()) {
+            Element e = (Element) child;
+            if (e.elements().isEmpty()) {
+                json.put(e.getName(), e.getText());
+            }
+
+            else {
+                json.put(e.getName(), elementToJson(e));
+            }
+        }
+
+        return json;
+    }
+
+//    /**
+//     * 文件内容转换成字符串
+//     *
+//     * @param filePath 文件路径
+//     * @return 内容字符串
+//     * @throws IOException
+//     */
+//    public static String fileToString(URL filePath) throws IOException {
+//        return IOUtils.toString(filePath, ENCODING);
+//    }
+
+//    /**
+//     * 文件内容转换成字符串
+//     *
+//     * @param filePath 文件路径
+//     * @return 内容字符串
+//     * @throws IOException
+//     */
+//    public static String fileToString(String filePath) throws IOException {
+//        return IOUtils.toString(Paths.get(filePath).toUri(), ENCODING);
+//    }
+//
+//    /**
+//     * 字符串输出到文件
+//     *
+//     * @param str 字符串内容
+//     * @param filePath 文件路径
+//     * @throws IOException
+//     */
+//    public static void stringToFile(String str, String filePath) throws IOException {
+//        FileUtils.writeStringToFile(Paths.get(filePath).toFile(), str, ENCODING);
+//    }
+
+    /**
+     * 字符串输出到文件
+     *
+     * @param str 字符串内容
+     * @param filePath 文件路径
+     * @throws IOException
+     */
+    public static void stringToFile(String str, URL filePath) throws IOException {
+        FileUtils.writeStringToFile(new File(filePath.getPath()), str, ENCODING);
+    }
+
+    /**
+     * 字符串输出到文件
+     *
+     * @param str 字符串内容
+     * @param file 输出文件
+     * @throws IOException
+     */
+    public static void stringToFile(String str, File file) throws IOException {
+        FileUtils.writeStringToFile(file, str, ENCODING);
+    }
+
+
+    /**
+     * 对象转xml文件
+     *
+     * @param b
+     * @return
+     */
+    public static Document getDocument(Object b) {
+        Document document = DocumentHelper.createDocument();
+        try {
+            // 创建根节点元素
+            Element root = document.addElement(b.getClass().getSimpleName());
+            Field[] field = b.getClass().getDeclaredFields(); // 获取实体类b的所有属性,返回Field数组
+            for (int j = 0; j < field.length; j++) { // 遍历所有有属性
+                String name = field[j].getName(); // 获取属属性的名字
+                if (!name.equals("serialVersionUID")) {//去除串行化序列属性
+                    String methodName = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
+                    Method m = b.getClass().getMethod("get" + methodName);
+                    //System.out.println("属性get方法返回值类型:" + m.getReturnType());
+                    String propertievalue = (String) m.invoke(b);// 获取属性值
+                    Element propertie = root.addElement(name);
+                    if (propertievalue == null) {
+                        propertie.setText("");
+                    } else {
+                        propertie.setText(propertievalue);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return document;
+    }
+
+    /**
+     * 对象转xml格式的字符串
+     *
+     * @param b
+     * @return
+     */
+    public static String getXmlString(Object b) {
+        return getDocument(b).asXML();
+    }
+
+
+        public static void main(String[] args) {
+        try {
+            String filePath = "/User.xml";
+            URL url = JsonAndXmlUtils.class.getResource(filePath);
+//            String content = JsonAndXmlUtils.fileToString(url);
+            // System.out.println(content);
+
+            JSONObject json = xmlToJson(filePath);
+            System.out.println(JSON.toJSONString(json, true));
+
+            String xml = JsonToXml(json);
+            System.out.println(xml);
+
+            System.out.println("----------------------------------------\n\n");
+            xml = jsonToPrettyXml(json);
+            System.out.println(xml);
+
+//            stringToFile(xml, "C:\\Users\\Administrator\\Desktop\\User.xml");
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        } catch (SAXException e) {
+            e.printStackTrace();
+        }
+    }
+
+}

+ 105 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/RemoveNullAttr.java

@@ -0,0 +1,105 @@
+package com.hcloud.microserver.bank.util;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hcloud.microserver.commoncore.util.string.StringUtil;
+
+public class RemoveNullAttr {
+    public static void main(String[] args) {
+
+        String s = "{\"employees\": [{ \"firstName\":\"\" , \"lastName\":\"Doe\" },{ \"firstName\":\"\" , \"lastName\":\"Smith\" },{ \"firstName\":\"Peter\" , \"lastName\":\"Jones\" }]}";
+        String a = "{ \"firstName\":\"John\" , \"lastName\":\"\" }";
+        String b = "{ \"firstName\":\"\" , \"lastName\":\"Doe\" }";
+        String test = "{\"ka\":\"va\",\"kb\":{\"kbk\":\"kbv\",\"kbkk\":\"\",\"kbkkk\":{\"aaa\":\"bbb\",\"bbb\":\"\"},\"suzu\":[{\"sz\":\"sz\",\"szk\":\"\"}]},\"kc\":\"kcv\"}";
+        JSONObject js = JSONObject.parseObject(test);
+
+        RemoveNullAttr r = new RemoveNullAttr();
+        Object o = r.traverseJson(js);
+        System.out.println(o);
+    }
+
+    public Object traverseJson(Object json) {
+// check null
+        if (json == null) {
+            return null;
+        }
+
+        try {
+
+            if (json instanceof JSONObject) {// if json is a Map
+
+                JSONObject jsonObj = (JSONObject) json;
+                List<String> keyList = new ArrayList<>();
+                for (String k : jsonObj.keySet()) {
+                    String value = jsonObj.get(k).toString();
+                    if (StringUtil.isEmpty(value)) {
+                        keyList.add(k);
+//jsonObj.remove(k);
+                    } else {
+                        if (isJsonObj(value)) {
+                            jsonObj.put(k, traverseJson(JSONObject.parseObject(value)));
+                        } else {
+                            if (isJsonArr(value)) {
+//value=;
+                                jsonObj.put(k, traverseJson(JSONArray.parseArray(value)));
+                            }
+
+                        }
+
+                    }
+                }
+                for (String k : keyList) {
+                    jsonObj.remove(k);
+                }
+
+                return jsonObj;
+
+            } else if (json instanceof JSONArray) {// if json is an Array
+                JSONArray jsonArr = (JSONArray) json;
+                int len = jsonArr.size();
+                for (int i = 0; i < len; ++i) {
+// TODO: do something here
+                    jsonArr.set(i, traverseJson(jsonArr.get(i)));
+                }
+//        return retArr;
+//       
+//      } else {// if json is just a raw element
+//       
+//        // TODO: do something here
+//        return json;
+                return jsonArr;
+//       
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();// deal Exception or throw it
+        }
+
+        return null;
+    }
+
+    public boolean isJsonObj(Object o) {
+        try {
+            JSONObject js = JSONObject.parseObject(o.toString());
+            return true;
+
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    public boolean isJsonArr(Object o) {
+        try {
+            JSONArray js = JSONArray.parseArray(o.toString());
+            return true;
+
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+}

+ 258 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/SHAEncrytp.java

@@ -0,0 +1,258 @@
+package com.hcloud.microserver.bank.util;
+
+
+public class SHAEncrytp {
+
+    private final int[] abcde = { 0x67452301, 0xefcdab89, 0x98badcfe,
+            0x10325476, 0xc3d2e1f0 };
+
+    // 摘要数据存储数组
+    private int[] digestInt = new int[5];
+
+    // 计算过程中的临时数据存储数组
+    private int[] tmpData = new int[80];
+
+    // 计算sha-1摘要,返回相应的十六进制字符串
+    public String getDigestOfString(byte[] byteData)
+    {
+        return byteArrayToHexString(getDigestOfBytes(byteData));
+    }
+
+    // 计算sha-1摘要,返回相应的字节数组
+    public byte[] getDigestOfBytes(byte[] byteData)
+    {
+        process_input_bytes(byteData);
+        byte[] digest = new byte[20];
+        for (int i = 0; i < digestInt.length; i++)
+        {
+            intToByteArray(digestInt[i], digest, i * 4);
+        }
+        return digest;
+    }
+
+    // 计算sha-1摘要
+    private int process_input_bytes(byte[] bytedata)
+    {
+        // 初试化常量
+        System.arraycopy(abcde, 0, digestInt, 0, abcde.length);
+        // 格式化输入字节数组,补10及长度数据
+        byte[] newbyte = byteArrayFormatData(bytedata);
+        // 获取数据摘要计算的数据单元个数
+        int MCount = newbyte.length / 64;
+        // 循环对每个数据单元进行摘要计算
+        for (int pos = 0; pos < MCount; pos++)
+        {
+            // 将每个单元的数据转换成16个整型数据,并保存到tmpData的前16个数组元素中
+            for (int j = 0; j < 16; j++)
+            {
+                tmpData[j] = byteArrayToInt(newbyte, (pos * 64) + (j * 4));
+            }
+            // 摘要计算函数
+            encrypt();
+        }
+        return 20;
+    }
+
+    // 格式化输入字节数组格式
+    private byte[] byteArrayFormatData(byte[] bytedata)
+    {
+        // 补0数量
+        int zeros = 0;
+        // 补位后总位数
+        int size = 0;
+        // 原始数据长度
+        int n = bytedata.length;
+        // 模64后的剩余位数
+        int m = n % 64;
+        // 计算添加0的个数以及添加10后的总长度
+        if (m < 56)
+        {
+            zeros = 55 - m;
+            size = n - m + 64;
+        }
+        else if (m == 56)
+        {
+            zeros = 63;
+            size = n + 8 + 64;
+        }
+        else
+        {
+            zeros = 63 - m + 56;
+            size = (n + 64) - m + 64;
+        }
+        // 补位后生成的新数组内容
+        byte[] newbyte = new byte[size];
+        // 复制数组的前面部分
+        System.arraycopy(bytedata, 0, newbyte, 0, n);
+        // 获得数组Append数据元素的位置
+        int l = n;
+        // 补1操作
+        newbyte[l++] = (byte) 0x80;
+        // 补0操作
+        for (int i = 0; i < zeros; i++)
+        {
+            newbyte[l++] = (byte) 0x00;
+        }
+        // 计算数据长度,补数据长度位共8字节,长整型
+        long N = (long) n * 8;
+        byte h8 = (byte) (N & 0xFF);
+        byte h7 = (byte) ((N >> 8) & 0xFF);
+        byte h6 = (byte) ((N >> 16) & 0xFF);
+        byte h5 = (byte) ((N >> 24) & 0xFF);
+        byte h4 = (byte) ((N >> 32) & 0xFF);
+        byte h3 = (byte) ((N >> 40) & 0xFF);
+        byte h2 = (byte) ((N >> 48) & 0xFF);
+        byte h1 = (byte) (N >> 56);
+        newbyte[l++] = h1;
+        newbyte[l++] = h2;
+        newbyte[l++] = h3;
+        newbyte[l++] = h4;
+        newbyte[l++] = h5;
+        newbyte[l++] = h6;
+        newbyte[l++] = h7;
+        newbyte[l++] = h8;
+        return newbyte;
+    }
+
+    private int f1(int x, int y, int z)
+    {
+        return (x & y) | (~x & z);
+    }
+
+    private int f2(int x, int y, int z)
+    {
+        return x ^ y ^ z;
+    }
+
+    private int f3(int x, int y, int z)
+    {
+        return (x & y) | (x & z) | (y & z);
+    }
+
+    private int f4(int x, int y)
+    {
+        return (x << y) | x >>> (32 - y);
+    }
+
+    // 单元摘要计算函数
+    private void encrypt()
+    {
+        for (int i = 16; i <= 79; i++)
+        {
+            tmpData[i] = f4(tmpData[i - 3] ^ tmpData[i - 8] ^ tmpData[i - 14]
+                    ^ tmpData[i - 16], 1);
+        }
+        int[] tmpabcde = new int[5];
+        for (int i1 = 0; i1 < tmpabcde.length; i1++)
+        {
+            tmpabcde[i1] = digestInt[i1];
+        }
+        for (int j = 0; j <= 19; j++)
+        {
+            int tmp = f4(tmpabcde[0], 5)
+                    + f1(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]
+                    + tmpData[j] + 0x5a827999;
+            tmpabcde[4] = tmpabcde[3];
+            tmpabcde[3] = tmpabcde[2];
+            tmpabcde[2] = f4(tmpabcde[1], 30);
+            tmpabcde[1] = tmpabcde[0];
+            tmpabcde[0] = tmp;
+        }
+        for (int k = 20; k <= 39; k++)
+        {
+            int tmp = f4(tmpabcde[0], 5)
+                    + f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]
+                    + tmpData[k] + 0x6ed9eba1;
+            tmpabcde[4] = tmpabcde[3];
+            tmpabcde[3] = tmpabcde[2];
+            tmpabcde[2] = f4(tmpabcde[1], 30);
+            tmpabcde[1] = tmpabcde[0];
+            tmpabcde[0] = tmp;
+        }
+        for (int l = 40; l <= 59; l++)
+        {
+            int tmp = f4(tmpabcde[0], 5)
+                    + f3(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]
+                    + tmpData[l] + 0x8f1bbcdc;
+            tmpabcde[4] = tmpabcde[3];
+            tmpabcde[3] = tmpabcde[2];
+            tmpabcde[2] = f4(tmpabcde[1], 30);
+            tmpabcde[1] = tmpabcde[0];
+            tmpabcde[0] = tmp;
+        }
+        for (int m = 60; m <= 79; m++)
+        {
+            int tmp = f4(tmpabcde[0], 5)
+                    + f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]
+                    + tmpData[m] + 0xca62c1d6;
+            tmpabcde[4] = tmpabcde[3];
+            tmpabcde[3] = tmpabcde[2];
+            tmpabcde[2] = f4(tmpabcde[1], 30);
+            tmpabcde[1] = tmpabcde[0];
+            tmpabcde[0] = tmp;
+        }
+        for (int i2 = 0; i2 < tmpabcde.length; i2++)
+        {
+            digestInt[i2] = digestInt[i2] + tmpabcde[i2];
+        }
+        for (int n = 0; n < tmpData.length; n++)
+        {
+            tmpData[n] = 0;
+        }
+    }
+
+    // 4字节数组转换为整数
+    private int byteArrayToInt(byte[] bytedata, int i)
+    {
+        return ((bytedata[i] & 0xff) << 24) | ((bytedata[i + 1] & 0xff) << 16)
+                | ((bytedata[i + 2] & 0xff) << 8) | (bytedata[i + 3] & 0xff);
+    }
+
+    // 整数转换为4字节数组
+    private void intToByteArray(int intValue, byte[] byteData, int i)
+    {
+        byteData[i] = (byte) (intValue >>> 24);
+        byteData[i + 1] = (byte) (intValue >>> 16);
+        byteData[i + 2] = (byte) (intValue >>> 8);
+        byteData[i + 3] = (byte) intValue;
+    }
+
+    // 将字节转换为十六进制字符串
+    private static String byteToHexString(byte ib)
+    {
+        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
+                'B', 'C', 'D', 'E', 'F' };
+        char[] ob = new char[2];
+        ob[0] = Digit[(ib >>> 4) & 0X0F];
+        ob[1] = Digit[ib & 0X0F];
+        String s = new String(ob);
+        return s;
+    }
+
+    // 将字节数组转换为十六进制字符串
+    private static String byteArrayToHexString(byte[] bytearray)
+    {
+        String strDigest = "";
+        for (int i = 0; i < bytearray.length; i++)
+        {
+            strDigest += byteToHexString(bytearray[i]);
+        }
+        return strDigest;
+    }
+
+
+    public static void main(String[] arg){
+//登录id
+        String logOnId = "2720525548";
+//登录密码
+        String pwd ="000000";
+        String origin = logOnId+pwd;
+        String pwdNew = "";
+        SHAEncrytp shaTest = new SHAEncrytp ();
+        //SHA1算出的哈希值结果
+        pwdNew = shaTest.getDigestOfString(origin.getBytes());
+        System.out.println(pwdNew);
+    }
+
+
+}

+ 368 - 0
carbon-bank/carbon-bank-service/src/main/java/com/hcloud/microserver/bank/util/StringKit.java

@@ -0,0 +1,368 @@
+package com.hcloud.microserver.bank.util;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public final class StringKit {
+
+	final static Map<Integer, String> zoneNum = new HashMap<Integer, String>();
+
+	final static Map<Integer, String> nationMap = new HashMap<Integer, String>();
+
+	//Currencyc
+	final static Map<String, String> currency = new HashMap<String, String>();
+
+
+	static {
+        zoneNum.put(11, "北京");
+        zoneNum.put(12, "天津");
+        zoneNum.put(13, "河北");
+        zoneNum.put(14, "山西");
+        zoneNum.put(15, "内蒙古");
+        zoneNum.put(21, "辽宁");
+        zoneNum.put(22, "吉林");
+        zoneNum.put(23, "黑龙江");
+        zoneNum.put(31, "上海");
+        zoneNum.put(32, "江苏");
+        zoneNum.put(33, "浙江");
+        zoneNum.put(34, "安徽");
+        zoneNum.put(35, "福建");
+        zoneNum.put(36, "江西");
+        zoneNum.put(37, "山东");
+        zoneNum.put(41, "河南");
+        zoneNum.put(42, "湖北");
+        zoneNum.put(43, "湖南");
+        zoneNum.put(44, "广东");
+        zoneNum.put(45, "广西");
+        zoneNum.put(46, "海南");
+        zoneNum.put(50, "重庆");
+        zoneNum.put(51, "四川");
+        zoneNum.put(52, "贵州");
+        zoneNum.put(53, "云南");
+        zoneNum.put(54, "西藏");
+        zoneNum.put(61, "陕西");
+        zoneNum.put(62, "甘肃");
+        zoneNum.put(63, "青海");
+        zoneNum.put(64, "新疆");
+        zoneNum.put(71, "台湾");
+        zoneNum.put(81, "香港");
+        zoneNum.put(82, "澳门");
+        zoneNum.put(91, "外国");
+
+		nationMap.put(1,"汉族");
+		nationMap.put(2,"土家族");
+		nationMap.put(3,"阿昌族");
+		nationMap.put(4,"白族");
+		nationMap.put(5,"保安族");
+		nationMap.put(6,"布朗族");
+		nationMap.put(7,"布依族");
+		nationMap.put(8,"朝鲜族");
+		nationMap.put(9,"达斡尔族");
+		nationMap.put(10,"傣族");
+		nationMap.put(11,"德昂族");
+		nationMap.put(12,"东乡族");
+		nationMap.put(13,"侗族");
+		nationMap.put(14,"独龙族");
+		nationMap.put(15,"鄂伦春族");
+		nationMap.put(16,"俄罗斯族");
+		nationMap.put(17,"鄂温克族");
+		nationMap.put(18,"高山族");
+		nationMap.put(19,"仡佬族");
+		nationMap.put(20,"哈尼族");
+		nationMap.put(21,"哈萨克族");
+		nationMap.put(22,"赫哲族");
+		nationMap.put(23,"回族");
+		nationMap.put(24,"基诺族");
+		nationMap.put(25,"景颇族");
+		nationMap.put(26,"京族");
+		nationMap.put(27,"柯尔克孜族");
+		nationMap.put(28,"拉祜族");
+		nationMap.put(29,"珞巴族");
+		nationMap.put(30,"傈僳族");
+		nationMap.put(31,"黎族");
+		nationMap.put(32,"满族");
+		nationMap.put(33,"毛南族");
+		nationMap.put(34,"门巴族");
+		nationMap.put(35,"蒙古族");
+		nationMap.put(36,"苗族");
+		nationMap.put(37,"仫佬族");
+		nationMap.put(38,"纳西族");
+		nationMap.put(39,"怒族");
+		nationMap.put(40,"普米族");
+		nationMap.put(41,"羌族");
+		nationMap.put(42,"撒拉族");
+		nationMap.put(43,"畲族");
+		nationMap.put(44,"水族");
+		nationMap.put(45,"塔吉克族");
+		nationMap.put(46,"塔塔尔族");
+		nationMap.put(47,"土族");
+		nationMap.put(48,"佤族");
+		nationMap.put(49,"维吾尔族");
+		nationMap.put(50,"乌孜别克族");
+		nationMap.put(51,"锡伯族");
+		nationMap.put(52,"瑶族");
+		nationMap.put(53,"彝族");
+		nationMap.put(54,"裕固族");
+		nationMap.put(55,"藏族");
+		nationMap.put(56,"壮族");
+		nationMap.put(99,"其他民族");
+
+
+		currency.put("01","人民币");
+		currency.put("12","英镑");
+		currency.put("13","港币");
+		currency.put("14","美元");
+		currency.put("15","瑞士法郎");
+		currency.put("16","德国马克");
+		currency.put("17","法国法郎");
+		currency.put("20","荷兰盾");
+		currency.put("27","日元");
+		currency.put("28","加拿大元");
+		currency.put("38","欧元");
+
+
+	}
+
+     
+    final static int[] PARITYBIT = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
+    final static int[] POWER_LIST = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
+    final static char[] UPPER_LIST = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
+    
+    /**
+     * 身份证验证
+     *@param s  号码内容
+     *@return 是否有效 null和"" 都是false 
+     */
+    public static boolean isIDCard(String certNo){
+        if(certNo == null || (certNo.length() != 15 && certNo.length() != 18))
+            return false;
+        final char[] cs = certNo.toUpperCase().toCharArray();
+        //校验位数
+        int power = 0;
+        for(int i=0; i<cs.length; i++){
+            if(i==cs.length-1 && cs[i] == 'X')
+                break;//最后一位可以 是X或x
+            if(cs[i]<'0' || cs[i]>'9')
+                return false;
+            if(i < cs.length -1){
+                power += (cs[i] - '0') * POWER_LIST[i];
+            }
+        }
+         
+        //校验区位码
+        if(!zoneNum.containsKey(Integer.valueOf(certNo.substring(0,2)))){
+            return false;
+        }
+         
+        //校验年份
+        String year = certNo.length() == 15 ? getIdcardCalendar() + certNo.substring(6,8) :certNo.substring(6, 10);
+         
+        final int iyear = Integer.parseInt(year);
+        if(iyear < 1900 || iyear > Calendar.getInstance().get(Calendar.YEAR))
+            return false;//1900年的PASS,超过今年的PASS
+         
+        //校验月份
+        String month = certNo.length() == 15 ? certNo.substring(8, 10) : certNo.substring(10,12);
+        final int imonth = Integer.parseInt(month);
+        if(imonth <1 || imonth >12){
+            return false;
+        }
+         
+        //校验天数      
+        String day = certNo.length() ==15 ? certNo.substring(10, 12) : certNo.substring(12, 14);
+        final int iday = Integer.parseInt(day);
+        if(iday < 1 || iday > 31)
+            return false;       
+         
+        //校验"校验码"
+        if(certNo.length() == 15)
+            return true;
+        return cs[cs.length -1 ] == PARITYBIT[power % 11];
+    }
+     
+    private static int getIdcardCalendar() {        
+         GregorianCalendar curDay = new GregorianCalendar();
+         int curYear = curDay.get(Calendar.YEAR);
+         int year2bit = Integer.parseInt(String.valueOf(curYear).substring(2));          
+         return  year2bit;
+    }     
+	
+	public static boolean isEmpty(String str) {
+		if (null == str || "".equals(str)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public static boolean isNotEmpty(String str) {
+		return !isEmpty(str);
+	}
+
+	/**
+	 * 通过文件路径得到文件后缀名。如:hello.txt得到.txt
+	 * 
+	 * @param filePath
+	 *            文件路径
+	 * @return
+	 */
+	public static String getFileSuffix(String filePath) {
+		int pointIndex = filePath.lastIndexOf(".");
+		return filePath.substring(pointIndex, filePath.length());
+	}
+
+	public static String getFileNameWithoutSuffix(File file){
+		String fileName = file.getName();
+		int pointIndex = fileName.lastIndexOf(".");
+		return fileName.substring(0, pointIndex);
+	}
+	
+	public static boolean isEmail(String str) {
+		if (StringKit.isEmpty(str)){
+			return false;
+		}
+		Pattern p = Pattern.compile("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.([a-zA-Z0-9_-])+)+$");
+		Matcher m = p.matcher(str);
+		return m.matches();
+	}
+
+	public static boolean isCellPhone(String str) {
+		if (isEmpty(str)) {
+			return false;
+		}
+		Pattern p = Pattern.compile("^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$");
+		Matcher m = p.matcher(str);
+		return m.matches();
+	}
+
+	/**
+	 * 生成手机验证码
+	 * 
+	 * @return 长度为6的数字字符串
+	 */
+	public static String getVilidateCode() {
+		char[] codeSequence = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
+		StringBuffer codeStr = new StringBuffer();
+		for (int i = 0; i < 6; i++) {
+			int j = (int) (Math.random() * 10);
+			codeStr.append(codeSequence[j]);
+		}
+		return codeStr.toString();
+	}
+
+	/**
+	 * MD5加密
+	 * 
+	 * @param 需要加密的字符串
+	 * @return 加密后的字符串
+	 */
+	public static String MD5(String s) {
+		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+		try {
+			byte[] btInput = s.getBytes();
+			// 获得MD5摘要算法的 MessageDigest 对象
+			MessageDigest mdInst = MessageDigest.getInstance("MD5");
+			// 使用指定的字节更新摘要
+			mdInst.update(btInput);
+			// 获得密文
+			byte[] md = mdInst.digest();
+			// 把密文转换成十六进制的字符串形式
+			int j = md.length;
+			char str[] = new char[j * 2];
+			int k = 0;
+			for (int i = 0; i < j; i++) {
+				byte byte0 = md[i];
+				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+				str[k++] = hexDigits[byte0 & 0xf];
+			}
+			return new String(str);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static boolean isInteger(String str) {
+		if (isEmpty(str)) {
+			return false;
+		}
+		Pattern pattern = Pattern.compile("[0-9]*");
+		Matcher isNum = pattern.matcher(str);
+		return isNum.matches();
+	}
+
+	/**
+	 * 小数点保留方法
+	 * 
+	 * @param value
+	 *            需要处理的数值
+	 * @param scale
+	 *            需要保留的小数位数
+	 * @return
+	 */
+	public static float round(double value, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("The scale must be a positive integer or zero");
+		}
+		BigDecimal bigDecimal = new BigDecimal(Double.toString(value));
+		BigDecimal one = new BigDecimal("1");
+		return bigDecimal.divide(one, scale, BigDecimal.ROUND_HALF_UP).floatValue();
+	}
+
+	public static String SHA1(String decript) {
+		try {
+			MessageDigest digest = MessageDigest.getInstance("SHA-1");
+			digest.update(decript.getBytes());
+			byte messageDigest[] = digest.digest();
+			StringBuffer hexString = new StringBuffer();
+			for (int i = 0; i < messageDigest.length; i++) {
+				String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
+				if (shaHex.length() < 2) {
+					hexString.append(0);
+				}
+				hexString.append(shaHex);
+			}
+			return hexString.toString();
+
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+
+	
+	public static String getFieldName(String fieldName){
+		 return fieldName.replaceFirst(fieldName.substring(0), fieldName.substring(0).toLowerCase());
+	}
+	
+	/**
+	 * 根据oauth2入口参数找到定向到前端的路由
+	 * @param route
+	 * @return
+	 */
+	public static String translateRoute(String route){
+		route = StringKit.isEmpty(route) ? "" : route;
+		String redirectRoute = route.replaceAll("!", "/").replaceAll("~", "?");
+		return redirectRoute;
+	}
+	
+	public synchronized static String getRandomUpper(int lenght){
+		Random random = new Random();
+		StringBuffer upperStr = new StringBuffer();
+		for (int i = 0; i < lenght; i++) {
+			upperStr.append(UPPER_LIST[random.nextInt(UPPER_LIST.length)]);
+		}
+		return upperStr.toString();
+	}
+	
+	public static void main(String[] args) {
+		System.err.println(getRandomUpper(500));
+	}
+}

+ 8 - 0
carbon-bank/carbon-bank-service/src/main/resources/banner.txt

@@ -0,0 +1,8 @@
+
+ ,-----.    ,--.          ,-----.
+'  .-.  '   `--' ,--.,--. |  |) /_   ,---.
+|  | |  |   ,--. |  ||  | |  .-.  \ | .-. |
+'  '-'  '-. |  | '  ''  ' |  '--' / ' '-' '
+ `-----'--' `--'  `----'  `------'   `---'
+   ${spring.application.name}                 |
+   Spring-Boot: ${spring-boot.version} |

+ 22 - 0
carbon-bank/carbon-bank-service/src/main/resources/bootstrap.yml

@@ -0,0 +1,22 @@
+server:
+  port: 21992
+spring:
+  servlet:
+    multipart:
+      max-file-size: 10MB
+      max-request-size: 100MB
+  profiles:
+    # dev 默认为开发环境 , prod 线上环境
+    active: prod
+  application:
+    name: carbon-bank
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8898
+      config:
+        server-addr: 127.0.0.1:8898
+        prefix: carbon-bank
+        file-extension: yml
+        # 公共配置文件
+        shared-dataids: carbon-common.yml

+ 31 - 0
carbon-bank/carbon-bank-service/src/main/resources/logback-spring.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration>
+<configuration>
+    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
+    <!--应用名称-->
+    <property name="APP_NAME" value="mall-admin"/>
+    <!--日志文件保存路径-->
+    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
+    <contextName>${APP_NAME}</contextName>
+    <!--每天记录日志到文件appender-->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+    <!--输出到logstash的appender-->
+    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+        <destination>localhost:4560</destination>
+        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+        <appender-ref ref="LOGSTASH"/>
+    </root>
+</configuration>

+ 35 - 0
carbon-bank/pom.xml

@@ -0,0 +1,35 @@
+<?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">
+    <parent>
+        <artifactId>carbon-platform</artifactId>
+        <groupId>com.hcloud.microserver</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+    <modules>
+        <module>carbon-bank-service</module>
+        <module>carbon-bank-common</module>
+    </modules>
+    <artifactId>carbon-bank</artifactId>
+    <groupId>com.hcloud.microserver</groupId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>carbon-bank</name>
+    <dependencies>
+        <dependency>
+            <artifactId>common-core</artifactId>
+            <groupId>com.hcloud.microserver</groupId>
+            <version>${forest.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.tomcat.embed</groupId>
+                    <artifactId>tomcat-embed-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+
+</project>