Compare commits
18 Commits
45fb965496
...
feature-NH
Author | SHA1 | Date | |
---|---|---|---|
636974c99c | |||
d25f43db18 | |||
5bf6b6f679 | |||
47b91d277a | |||
b2237d3270 | |||
9f805266d6 | |||
c11d80a7bf | |||
22b6ed81bd | |||
a42d742a5e | |||
2fe8043791 | |||
5d117f7b51 | |||
bec378be36 | |||
66d55f9e87 | |||
d12a7b14e4 | |||
c33b7e8e35 | |||
c3c14048d7 | |||
aaef2bd862 | |||
ae25e50f3d |
@@ -1,4 +0,0 @@
|
|||||||
# Cpicxim-XMNHSA-Repeater
|
|
||||||
|
|
||||||
惠厦保相关项目。
|
|
||||||
宸汐-》厦门太保-》厦门医保局 数据转发。
|
|
@@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author: Kane
|
|
||||||
* @Date: 2025-03-06 14:27:05
|
|
||||||
* @LastEditors: Kane
|
|
||||||
* @FilePath: /Cpicxim-XMNHSA-Repeater/src/main/java/com/cpicxim/huixiabao/data/pojo/HmbXyxInfoRequest.java
|
|
||||||
* @Description:
|
|
||||||
*
|
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package com.cpicxim.huixiabao.data.pojo;
|
|
||||||
|
|
||||||
import java.util.Vector;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
|
||||||
|
|
||||||
@JsonInclude( JsonInclude.Include.NON_EMPTY )
|
|
||||||
@JsonPropertyOrder( alphabetic = true )
|
|
||||||
public class HmbXyxInfoRequest
|
|
||||||
{
|
|
||||||
public HmbXyxInfoRequest()
|
|
||||||
{
|
|
||||||
this.topic = "hmbXyxInfo";
|
|
||||||
this.hmbList = new Vector<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public HmbXyxInfoRequest( String topic, Vector<HmbListItem> hmbList )
|
|
||||||
{
|
|
||||||
this.topic = topic;
|
|
||||||
this.topic = "hmbXyxInfo";
|
|
||||||
this.hmbList = hmbList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTopic()
|
|
||||||
{
|
|
||||||
return topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTopic( String topic )
|
|
||||||
{
|
|
||||||
this.topic = topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector<HmbListItem> getHmbList()
|
|
||||||
{
|
|
||||||
return hmbList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHmbList( Vector<HmbListItem> hmbList )
|
|
||||||
{
|
|
||||||
this.hmbList = hmbList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonProperty("topic")
|
|
||||||
private String topic; // 业务类型
|
|
||||||
|
|
||||||
@JsonProperty("hmbList")
|
|
||||||
private Vector<HmbListItem> hmbList;
|
|
||||||
}
|
|
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author: Kane
|
|
||||||
* @Date: 2025-03-06 14:17:24
|
|
||||||
* @LastEditors: Kane
|
|
||||||
* @FilePath: /Cpicxim-XMNHSA-Repeater/src/main/java/com/cpicxim/huixiabao/data/pojo/NHACommenRequestBody.java
|
|
||||||
* @Description: 易联众请求共通报文结构
|
|
||||||
*
|
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package com.cpicxim.huixiabao.data.pojo;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
|
|
||||||
public class NHACommenRequestBody
|
|
||||||
{
|
|
||||||
|
|
||||||
public String getChs_fjs_appid()
|
|
||||||
{
|
|
||||||
return chs_fjs_appid;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_appid( String chs_fjs_appid )
|
|
||||||
{
|
|
||||||
this.chs_fjs_appid = chs_fjs_appid;
|
|
||||||
}
|
|
||||||
public String getChs_fjs_appsecret()
|
|
||||||
{
|
|
||||||
return chs_fjs_appsecret;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_appsecret( String chs_fjs_appsecret )
|
|
||||||
{
|
|
||||||
this.chs_fjs_appsecret = chs_fjs_appsecret;
|
|
||||||
}
|
|
||||||
public String getChs_fjs_token()
|
|
||||||
{
|
|
||||||
return chs_fjs_token;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_token( String chs_fjs_token )
|
|
||||||
{
|
|
||||||
this.chs_fjs_token = chs_fjs_token;
|
|
||||||
}
|
|
||||||
public String getChs_fjs_funid()
|
|
||||||
{
|
|
||||||
return chs_fjs_funid;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_funid( String chs_fjs_funid )
|
|
||||||
{
|
|
||||||
this.chs_fjs_funid = chs_fjs_funid;
|
|
||||||
}
|
|
||||||
public String getChs_fjs_encdata()
|
|
||||||
{
|
|
||||||
return chs_fjs_encdata;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_encdata( String chs_fjs_encdata )
|
|
||||||
{
|
|
||||||
this.chs_fjs_encdata = chs_fjs_encdata;
|
|
||||||
}
|
|
||||||
public String getChs_fjs_sign()
|
|
||||||
{
|
|
||||||
return chs_fjs_sign;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_sign( String chs_fjs_sign )
|
|
||||||
{
|
|
||||||
this.chs_fjs_sign = chs_fjs_sign;
|
|
||||||
}
|
|
||||||
public int getChs_fjs_timestamp()
|
|
||||||
{
|
|
||||||
return chs_fjs_timestamp;
|
|
||||||
}
|
|
||||||
public void setChs_fjs_timestamp( int chs_fjs_timestamp )
|
|
||||||
{
|
|
||||||
this.chs_fjs_timestamp = chs_fjs_timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String chs_fjs_appid; // 渠道id
|
|
||||||
private String chs_fjs_appsecret; // 渠道私钥
|
|
||||||
private String chs_fjs_token; // 请求时携带的动态令牌
|
|
||||||
private String chs_fjs_funid; // 服务编号
|
|
||||||
private String chs_fjs_encdata; // 加密后的数据
|
|
||||||
private String chs_fjs_sign; // 签名数据串
|
|
||||||
private String data; // 未加密的数据
|
|
||||||
private int chs_fjs_timestamp; // 时间戳
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author: Kane
|
|
||||||
* @Date: 2025-02-20 09:56:32
|
|
||||||
* @LastEditors: Kane
|
|
||||||
* @FilePath: /Cpicxim-XMNHSA-Repeater/src/main/java/com/cpicxim/huixiabao/web/controllers/MediCover/MediCoverToCpicxim.java
|
|
||||||
* @Description: 接收宸汐数据的controller。
|
|
||||||
*
|
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package com.cpicxim.huixiabao.web.controllers.MediCover;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
public class MediCoverToCpicxim
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author: Kane
|
|
||||||
* @Date: 2025-02-18 19:03:23
|
|
||||||
* @LastEditors: Kane
|
|
||||||
* @FilePath: /Cpicxim-XMNHSA-Repeater/src/main/java/com/cpicxim/huixiabao/web/controllers/NHSA/CpicximToNHSARepeater.java
|
|
||||||
* @Description:
|
|
||||||
*
|
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package com.cpicxim.huixiabao.web.controllers.NHSA;
|
|
||||||
|
|
||||||
public class CpicximToNHSARepeater
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@@ -1,27 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<xml-body>
|
|
||||||
<web-app
|
|
||||||
version="4.0"
|
|
||||||
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
|
||||||
xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
|
|
||||||
xmlns:xml="http://www.w3.org/XML/1998/namespace"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
|
|
||||||
<display-name>Archetype Created Web Application</display-name>
|
|
||||||
|
|
||||||
<servlet>
|
|
||||||
<servlet-name>springmvc</servlet-name>
|
|
||||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
|
||||||
<init-param>
|
|
||||||
<param-name>contextConfigLocation</param-name>
|
|
||||||
<param-value>classpath:spring.xml</param-value>
|
|
||||||
</init-param>
|
|
||||||
<load-on-startup>1</load-on-startup>
|
|
||||||
</servlet>
|
|
||||||
<servlet-mapping>
|
|
||||||
<servlet-name>springmvc</servlet-name>
|
|
||||||
<url-pattern>*.do</url-pattern>
|
|
||||||
</servlet-mapping>
|
|
||||||
|
|
||||||
</web-app>
|
|
||||||
</xml-body>
|
|
BIN
code/cpicxim-XMNHSA-repeater/bak/zephyr-api-sdk-cx.jar
Normal file
BIN
code/cpicxim-XMNHSA-repeater/bak/zephyr-api-sdk-cx.jar
Normal file
Binary file not shown.
BIN
code/cpicxim-XMNHSA-repeater/bak/zephyr-api-sdk-nhs.jar
Normal file
BIN
code/cpicxim-XMNHSA-repeater/bak/zephyr-api-sdk-nhs.jar
Normal file
Binary file not shown.
BIN
code/cpicxim-XMNHSA-repeater/lib/zephyr-api-sdk-nhs.jar
Normal file
BIN
code/cpicxim-XMNHSA-repeater/lib/zephyr-api-sdk-nhs.jar
Normal file
Binary file not shown.
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.cpic.xim</groupId>
|
<groupId>com.cpic.xim</groupId>
|
||||||
<artifactId>cpicxim-XMNHSA-repeater</artifactId>
|
<artifactId>cpicxim-XMNHSA-repeater</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>v20250314</version>
|
||||||
|
|
||||||
<name>cpicxim-XMNHSA-repeater</name>
|
<name>cpicxim-XMNHSA-repeater</name>
|
||||||
<!-- FIXME change it to the project's website -->
|
<!-- FIXME change it to the project's website -->
|
||||||
@@ -14,9 +14,9 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compile.source>18</maven.compile.source>
|
<maven.compile.source>1.8</maven.compile.source>
|
||||||
<maven.compile.target>18</maven.compile.target>
|
<maven.compile.target>1.8</maven.compile.target>
|
||||||
<maven.compiler.release>18</maven.compiler.release>
|
<!-- <maven.compiler.release>1.8</maven.compiler.release> -->
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
@@ -45,23 +45,21 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--jackson-->
|
<!--jackson-->
|
||||||
<dependency>
|
<!-- <dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<version>2.14.2</version>
|
<version>2.14.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
<version>2.13.4</version>
|
<version>2.13.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
<version>2.13.4</version>
|
<version>2.13.4</version>
|
||||||
</dependency>
|
</dependency> -->
|
||||||
|
|
||||||
<!-- log-4j -->
|
<!-- log-4j -->
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -80,38 +78,12 @@
|
|||||||
<version>2.20.0</version>
|
<version>2.20.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- POI -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.poi</groupId>
|
|
||||||
<artifactId>poi</artifactId>
|
|
||||||
<version>5.2.3</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.poi</groupId>
|
|
||||||
<artifactId>poi-ooxml</artifactId>
|
|
||||||
<version>5.2.3</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- mybatis -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mybatis</groupId>
|
|
||||||
<artifactId>mybatis</artifactId>
|
|
||||||
<version>3.5.19</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId> cn.hsa.zephyr</groupId>
|
<groupId> cn.hsa.zephyr</groupId>
|
||||||
<artifactId>zephyr-api-sdk</artifactId>
|
<artifactId>zephyr-api-sdk</artifactId>
|
||||||
<version>2.0.1</version>
|
<version>2.0.1</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${project.basedir}/lib/zephyr-api-sdk.jar</systemPath>
|
<systemPath>${project.basedir}/lib/zephyr-api-sdk-nhs.jar</systemPath>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>fastjson</artifactId>
|
|
||||||
<!-- <version>1.2.83</version> -->
|
|
||||||
<version>2.0.56</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -125,13 +97,17 @@
|
|||||||
<artifactId>bcprov-jdk18on</artifactId>
|
<artifactId>bcprov-jdk18on</artifactId>
|
||||||
<version>1.80</version>
|
<version>1.80</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-logging</groupId>
|
<groupId>commons-logging</groupId>
|
||||||
<artifactId>commons-logging</artifactId>
|
<artifactId>commons-logging</artifactId>
|
||||||
<version>1.3.5</version>
|
<version>1.3.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>fastjson</artifactId>
|
||||||
|
<!-- <version>1.2.83</version> -->
|
||||||
|
<version>2.0.56</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
@@ -149,6 +125,9 @@
|
|||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.14.0</version>
|
<version>3.14.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
<compilerArguments>
|
<compilerArguments>
|
||||||
<extdirs>${project.basedir}/lib</extdirs>
|
<extdirs>${project.basedir}/lib</extdirs>
|
||||||
</compilerArguments>
|
</compilerArguments>
|
||||||
@@ -181,7 +160,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
<version>3.4.3</version>
|
<version>2.6.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<mainClass>com.cpic.xim.huixiabao.AppMain</mainClass>
|
<mainClass>com.cpic.xim.huixiabao.AppMain</mainClass>
|
||||||
<includeSystemScope>true</includeSystemScope>
|
<includeSystemScope>true</includeSystemScope>
|
||||||
|
@@ -40,10 +40,16 @@ public class AppMain
|
|||||||
Vector<HmbXyxInfo> xyxInfo = CpicximToXMNHS.getNeverTransHmbList();
|
Vector<HmbXyxInfo> xyxInfo = CpicximToXMNHS.getNeverTransHmbList();
|
||||||
|
|
||||||
// 发送
|
// 发送
|
||||||
CpicximToXMNHS.postHmbList( xyxInfo );
|
if ( xyxInfo.isEmpty() == false )
|
||||||
|
{
|
||||||
|
logger.info( "查询到" + String.valueOf( xyxInfo.size() ) + "条数据,开始发送!" );
|
||||||
|
|
||||||
|
CpicximToXMNHS.postHmbXyxInfo( xyxInfo );
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
logger.info( "等待" + String.valueOf( HuixiabaoConfig.getSleepSeconds() ) + "秒。" );
|
||||||
Thread.sleep( HuixiabaoConfig.getSleepSeconds() * 1000 );
|
Thread.sleep( HuixiabaoConfig.getSleepSeconds() * 1000 );
|
||||||
}
|
}
|
||||||
catch ( InterruptedException error )
|
catch ( InterruptedException error )
|
||||||
|
@@ -46,17 +46,23 @@ public class HuixiabaoConfig
|
|||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFunId()
|
||||||
|
{
|
||||||
|
return funId;
|
||||||
|
}
|
||||||
|
|
||||||
public static int getSleepSeconds()
|
public static int getSleepSeconds()
|
||||||
{
|
{
|
||||||
return SLEEP_SECONDS;
|
return SLEEP_SECONDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int MAX_COUNT_PER_REQUEST = 500;
|
private static final int MAX_COUNT_PER_REQUEST = 500;
|
||||||
private static final int SLEEP_SECONDS = 10;
|
private static final int SLEEP_SECONDS = 10;
|
||||||
|
|
||||||
private static final String url = "https://172.18.1.150:9040";
|
private static final String url = "http://172.18.1.150:9040/h3c/new/api/gafe/rest";
|
||||||
private static final String appid = "hxb-tb";
|
private static final String appid = "hxb-tb";
|
||||||
private static final String appSecret = "60F468FB46170DD4CF6CBECE215DBFC0";
|
private static final String appSecret = "60F468FB46170DD4CF6CBECE215DBFC0";
|
||||||
|
private static final String funId = "XY00.00.00.03";
|
||||||
private static final String signKey = "1A2F447BD0F930798D8031B137EC6E25";
|
private static final String signKey = "1A2F447BD0F930798D8031B137EC6E25";
|
||||||
private static final String encKey = "08307695B1668EB9FD6210250FED874F";
|
private static final String encKey = "08307695B1668EB9FD6210250FED874F";
|
||||||
}
|
}
|
||||||
|
@@ -13,12 +13,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.cpic.xim.huixiabao.data.pojo;
|
package com.cpic.xim.huixiabao.data.pojo;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
// import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
// import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
// import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||||
|
|
||||||
@JsonInclude( JsonInclude.Include.NON_EMPTY )
|
// @JsonInclude( JsonInclude.Include.NON_EMPTY )
|
||||||
@JsonPropertyOrder( alphabetic = true )
|
// @JsonPropertyOrder( alphabetic = true )
|
||||||
public class HmbXyxInfo
|
public class HmbXyxInfo
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -91,19 +91,10 @@ public class HmbXyxInfo
|
|||||||
return "HmbXyxInfo [psnName=" + psnName + ", certNo=" + certNo + ", serviceId=" + serviceId + ", status=" + status + ", xyxNo=" + xyxNo + "]";
|
return "HmbXyxInfo [psnName=" + psnName + ", certNo=" + certNo + ", serviceId=" + serviceId + ", status=" + status + ", xyxNo=" + xyxNo + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty( "psnName" )
|
|
||||||
private String psnName;
|
private String psnName;
|
||||||
|
|
||||||
@JsonProperty( "certno" )
|
|
||||||
private String certNo;
|
private String certNo;
|
||||||
|
|
||||||
@JsonProperty( "serviceId" )
|
|
||||||
private String serviceId;
|
private String serviceId;
|
||||||
|
|
||||||
@JsonProperty( "status" )
|
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
@JsonProperty( "xyxNo" )
|
|
||||||
private String xyxNo;
|
private String xyxNo;
|
||||||
|
|
||||||
}
|
}
|
@@ -10,12 +10,7 @@
|
|||||||
package com.cpic.xim.huixiabao.data.pojo;
|
package com.cpic.xim.huixiabao.data.pojo;
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
|
||||||
|
|
||||||
@JsonInclude( JsonInclude.Include.NON_EMPTY )
|
|
||||||
@JsonPropertyOrder( alphabetic = true )
|
|
||||||
public class HmbXyxInfoRequest
|
public class HmbXyxInfoRequest
|
||||||
{
|
{
|
||||||
public HmbXyxInfoRequest()
|
public HmbXyxInfoRequest()
|
||||||
@@ -51,9 +46,6 @@ public class HmbXyxInfoRequest
|
|||||||
this.hmbList = hmbList;
|
this.hmbList = hmbList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty("topic")
|
|
||||||
private String topic; // 业务类型
|
private String topic; // 业务类型
|
||||||
|
|
||||||
@JsonProperty("hmbList")
|
|
||||||
private Vector<HmbXyxInfo> hmbList;
|
private Vector<HmbXyxInfo> hmbList;
|
||||||
}
|
}
|
@@ -1,76 +1,101 @@
|
|||||||
/*
|
/*
|
||||||
* @Author: Kane
|
* @Author: Kane
|
||||||
|
*
|
||||||
* @Date: 2025-03-06 14:17:24
|
* @Date: 2025-03-06 14:17:24
|
||||||
|
*
|
||||||
* @LastEditors: Kane
|
* @LastEditors: Kane
|
||||||
|
*
|
||||||
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/data/pojo/NHACommenRequestBody.java
|
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/data/pojo/NHACommenRequestBody.java
|
||||||
|
*
|
||||||
* @Description: 易联众请求共通报文结构
|
* @Description: 易联众请求共通报文结构
|
||||||
*
|
*
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
package com.cpic.xim.huixiabao.data.pojo;
|
package com.cpic.xim.huixiabao.data.pojo;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
|
|
||||||
public class NHACommenRequestBody
|
public class NHACommenRequestBody
|
||||||
{
|
{
|
||||||
|
|
||||||
public String getChs_fjs_appid()
|
public String getChs_fjs_appid()
|
||||||
{
|
{
|
||||||
return chs_fjs_appid;
|
return chs_fjs_appid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_appid( String chs_fjs_appid )
|
public void setChs_fjs_appid( String chs_fjs_appid )
|
||||||
{
|
{
|
||||||
this.chs_fjs_appid = chs_fjs_appid;
|
this.chs_fjs_appid = chs_fjs_appid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChs_fjs_appsecret()
|
public String getChs_fjs_appsecret()
|
||||||
{
|
{
|
||||||
return chs_fjs_appsecret;
|
return chs_fjs_appsecret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_appsecret( String chs_fjs_appsecret )
|
public void setChs_fjs_appsecret( String chs_fjs_appsecret )
|
||||||
{
|
{
|
||||||
this.chs_fjs_appsecret = chs_fjs_appsecret;
|
this.chs_fjs_appsecret = chs_fjs_appsecret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChs_fjs_token()
|
public String getChs_fjs_token()
|
||||||
{
|
{
|
||||||
return chs_fjs_token;
|
return chs_fjs_token;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_token( String chs_fjs_token )
|
public void setChs_fjs_token( String chs_fjs_token )
|
||||||
{
|
{
|
||||||
this.chs_fjs_token = chs_fjs_token;
|
this.chs_fjs_token = chs_fjs_token;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChs_fjs_funid()
|
public String getChs_fjs_funid()
|
||||||
{
|
{
|
||||||
return chs_fjs_funid;
|
return chs_fjs_funid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_funid( String chs_fjs_funid )
|
public void setChs_fjs_funid( String chs_fjs_funid )
|
||||||
{
|
{
|
||||||
this.chs_fjs_funid = chs_fjs_funid;
|
this.chs_fjs_funid = chs_fjs_funid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChs_fjs_encdata()
|
public String getChs_fjs_encdata()
|
||||||
{
|
{
|
||||||
return chs_fjs_encdata;
|
return chs_fjs_encdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_encdata( String chs_fjs_encdata )
|
public void setChs_fjs_encdata( String chs_fjs_encdata )
|
||||||
{
|
{
|
||||||
this.chs_fjs_encdata = chs_fjs_encdata;
|
this.chs_fjs_encdata = chs_fjs_encdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChs_fjs_sign()
|
public String getChs_fjs_sign()
|
||||||
{
|
{
|
||||||
return chs_fjs_sign;
|
return chs_fjs_sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_sign( String chs_fjs_sign )
|
public void setChs_fjs_sign( String chs_fjs_sign )
|
||||||
{
|
{
|
||||||
this.chs_fjs_sign = chs_fjs_sign;
|
this.chs_fjs_sign = chs_fjs_sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getChs_fjs_timestamp()
|
public int getChs_fjs_timestamp()
|
||||||
{
|
{
|
||||||
return chs_fjs_timestamp;
|
return chs_fjs_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChs_fjs_timestamp( int chs_fjs_timestamp )
|
public void setChs_fjs_timestamp( int chs_fjs_timestamp )
|
||||||
{
|
{
|
||||||
this.chs_fjs_timestamp = chs_fjs_timestamp;
|
this.chs_fjs_timestamp = chs_fjs_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getData()
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData( String data )
|
||||||
|
{
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
private String chs_fjs_appid; // 渠道id
|
private String chs_fjs_appid; // 渠道id
|
||||||
private String chs_fjs_appsecret; // 渠道私钥
|
private String chs_fjs_appsecret; // 渠道私钥
|
||||||
private String chs_fjs_token; // 请求时携带的动态令牌
|
private String chs_fjs_token; // 请求时携带的动态令牌
|
||||||
@@ -78,5 +103,6 @@ public class NHACommenRequestBody
|
|||||||
private String chs_fjs_encdata; // 加密后的数据
|
private String chs_fjs_encdata; // 加密后的数据
|
||||||
private String chs_fjs_sign; // 签名数据串
|
private String chs_fjs_sign; // 签名数据串
|
||||||
private String data; // 未加密的数据
|
private String data; // 未加密的数据
|
||||||
private int chs_fjs_timestamp; // 时间戳
|
private int chs_fjs_timestamp; // 时间戳
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@ public class CpicximToXMNHS
|
|||||||
private static String password = "Kane@1981";
|
private static String password = "Kane@1981";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从数据库中获取未发送过的小药箱数据。
|
* 从HmbXyxInfo_Update中获取未发送过的小药箱数据。
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@@ -68,11 +68,16 @@ public class CpicximToXMNHS
|
|||||||
String url = CpicximToXMNHS.url;
|
String url = CpicximToXMNHS.url;
|
||||||
String userName = CpicximToXMNHS.userName;
|
String userName = CpicximToXMNHS.userName;
|
||||||
String password = CpicximToXMNHS.password;
|
String password = CpicximToXMNHS.password;
|
||||||
String sql = """
|
// String sql = """
|
||||||
select info.psnName, info.certNo, info.serviceId, info.status, info.xyxNo
|
// select info.psnName, info.certNo, info.serviceId, info.status, info.xyxNo
|
||||||
from HmbXyxInfo info,
|
// from HmbXyxInfo info,
|
||||||
HmbXyxInfo_Update u
|
// HmbXyxInfo_Update u
|
||||||
where info.xyxNo = u.xyxNo """;
|
// where info.xyxNo = u.xyxNo """;
|
||||||
|
|
||||||
|
String sql = "select info.psnName, info.certNo, info.serviceId, info.status, info.xyxNo \n" +
|
||||||
|
" from HmbXyxInfo info, \n" +
|
||||||
|
" HmbXyxInfo_Update u \n" +
|
||||||
|
" where info.xyxNo = u.xyxNo";
|
||||||
|
|
||||||
connection = DriverManager.getConnection( url, userName, password );
|
connection = DriverManager.getConnection( url, userName, password );
|
||||||
statement = connection.createStatement();
|
statement = connection.createStatement();
|
||||||
@@ -139,6 +144,11 @@ public class CpicximToXMNHS
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将 postedItems 中的小药箱数据,冲HmbXyxInfo_update中清除。
|
||||||
|
*
|
||||||
|
* @param postedItems 已发送的小药箱数据
|
||||||
|
*/
|
||||||
public static void removePostedHmbXyxInfo( Vector<HmbXyxInfo> postedItems )
|
public static void removePostedHmbXyxInfo( Vector<HmbXyxInfo> postedItems )
|
||||||
{
|
{
|
||||||
Vector<HmbXyxInfo> items = new Vector<HmbXyxInfo>();
|
Vector<HmbXyxInfo> items = new Vector<HmbXyxInfo>();
|
||||||
@@ -155,8 +165,7 @@ public class CpicximToXMNHS
|
|||||||
String url = CpicximToXMNHS.url;
|
String url = CpicximToXMNHS.url;
|
||||||
String userName = CpicximToXMNHS.userName;
|
String userName = CpicximToXMNHS.userName;
|
||||||
String password = CpicximToXMNHS.password;
|
String password = CpicximToXMNHS.password;
|
||||||
String sql = """
|
String sql = "delete from HmbXyxInfo_Update where xyxNo = ?";
|
||||||
delete from HmbXyxInfo_Update where xyxNo = ?""";
|
|
||||||
|
|
||||||
connection = DriverManager.getConnection( url, userName, password );
|
connection = DriverManager.getConnection( url, userName, password );
|
||||||
statement = connection.prepareStatement( sql.trim() );
|
statement = connection.prepareStatement( sql.trim() );
|
||||||
@@ -166,8 +175,6 @@ public class CpicximToXMNHS
|
|||||||
statement.setString( 1, info.getXyxNo() );
|
statement.setString( 1, info.getXyxNo() );
|
||||||
statement.execute();
|
statement.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
connection.commit();
|
|
||||||
}
|
}
|
||||||
catch ( SQLException error )
|
catch ( SQLException error )
|
||||||
{
|
{
|
||||||
@@ -226,12 +233,12 @@ public class CpicximToXMNHS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void postHmbList( Vector<HmbXyxInfo> items )
|
public static void postHmbXyxInfo( Vector<HmbXyxInfo> items )
|
||||||
{
|
{
|
||||||
String url = HuixiabaoConfig.getUrl();
|
String url = HuixiabaoConfig.getUrl();
|
||||||
String appId = HuixiabaoConfig.getAppid();
|
String appId = HuixiabaoConfig.getAppid();
|
||||||
String appSecret = HuixiabaoConfig.getAppSecret();
|
String appSecret = HuixiabaoConfig.getAppSecret();
|
||||||
String funId = "xxx";
|
String funId = HuixiabaoConfig.getFunId();
|
||||||
String encKey = HuixiabaoConfig.getEncKey();
|
String encKey = HuixiabaoConfig.getEncKey();
|
||||||
String signKey = HuixiabaoConfig.getSignKey();
|
String signKey = HuixiabaoConfig.getSignKey();
|
||||||
|
|
||||||
@@ -251,6 +258,7 @@ public class CpicximToXMNHS
|
|||||||
DefaultZephyrResponse resp = null;
|
DefaultZephyrResponse resp = null;
|
||||||
|
|
||||||
// 数据
|
// 数据
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
JSONObject requestObject = new JSONObject();
|
JSONObject requestObject = new JSONObject();
|
||||||
JSONObject xyxInfo = null;
|
JSONObject xyxInfo = null;
|
||||||
JSONArray xyxInfoList = new JSONArray();
|
JSONArray xyxInfoList = new JSONArray();
|
||||||
@@ -287,19 +295,33 @@ public class CpicximToXMNHS
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
data.remove("data");
|
||||||
|
data.put("data", requestObject);
|
||||||
|
logger.info( "发送请求内容:" + requestObject.toJSONString() );
|
||||||
|
logger.info( "请求地址:" + HuixiabaoConfig.getUrl() );
|
||||||
|
|
||||||
req.setData( requestObject );
|
req.setData( requestObject );
|
||||||
resp = client.execute( req );
|
resp = client.execute( req );
|
||||||
|
|
||||||
logger.info( "发送成功,返回消息:" + resp.getData() );
|
if ( resp != null )
|
||||||
|
{
|
||||||
|
logger.info( "发送成功,返回消息Body:" + resp.getBody() );
|
||||||
|
logger.info( "发送成功,返回消息data:" + resp.getData() );
|
||||||
|
logger.info( "发送成功,返回消息message:" + resp.getMessage() );
|
||||||
|
|
||||||
// 将已发送的数据从update表中清理掉
|
// 将已发送的数据从HmbXyxInfo_update表中清理掉
|
||||||
removePostedHmbXyxInfo( postedInfo );
|
removePostedHmbXyxInfo( postedInfo );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.info( "已发送请求,但获取的DefaultZephyrResponse为null!" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch ( ZephyrApiException error )
|
catch ( ZephyrApiException error )
|
||||||
{
|
{
|
||||||
// 发送不成功,记录日志
|
// 发送不成功,记录日志
|
||||||
// 失败的数据就留在update表中,待以后重新发送
|
// 不从HmbXyxInfo_update中清理当前这批数据,待以后重新发送
|
||||||
logger.error( error.getMessage() );
|
logger.error( "发送异常:" + error.getMessage() );
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@@ -15,7 +15,6 @@ package com.cpic.xim.huixiabao;
|
|||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -33,6 +32,7 @@ import cn.hsa.zephyr.apisdk.internal.util.encrypt.SignTypeEnum;
|
|||||||
import cn.hsa.zephyr.apisdk.request.DefaultZephyrRequest;
|
import cn.hsa.zephyr.apisdk.request.DefaultZephyrRequest;
|
||||||
import cn.hsa.zephyr.apisdk.response.DefaultZephyrResponse;
|
import cn.hsa.zephyr.apisdk.response.DefaultZephyrResponse;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit test for simple App.
|
* Unit test for simple App.
|
||||||
*/
|
*/
|
||||||
|
87
code/cpicxim-huixiabao/.vscode/fileheader.template.js
vendored
Normal file
87
code/cpicxim-huixiabao/.vscode/fileheader.template.js
vendored
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2025-03-16 00:35:09
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /cpicxim-huixiabao/.vscode/fileheader.template.js
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* This file is generated by VSCode extension: Fileheader Pro
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These comments can help you write your own template with type hint
|
||||||
|
* @typedef {Object} FileheaderVariable Fileheader variables
|
||||||
|
* @property {string} birthtime file birth time. will get it from VCS or fallback to filesystem when it is not available
|
||||||
|
* @property {string} mtime file modification time. will get it from VCS or fallback to filesystem when it is not available
|
||||||
|
* @property {string} authorName if the file is tracked by VCS, it will get the author name from VCS. else it will get it from current user name
|
||||||
|
* @property {string} authorEmail if the file is tracked by VCS, it will get the author email from VCS. else it will get it from current user email
|
||||||
|
* @property {string} userName else it will get it from current user name
|
||||||
|
* @property {string} userEmail user email is from VSCode config, and fallback to VCS config
|
||||||
|
* @property {string} companyName
|
||||||
|
* @property {string} projectName name of current project
|
||||||
|
* @property {string} filePath the file path, relative to project root with POSIX path separator
|
||||||
|
* @property {string} dirPath the directory path, relative to project root with POSIX path separator
|
||||||
|
* @property {string} fileName filename with extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {string | number | null | undefined | Template | boolean} TemplateInterpolation NOTE: boolean or falsy value will render empty string
|
||||||
|
*
|
||||||
|
* @typedef {{ strings: TemplateStringsArray; interpolations: TemplateInterpolation[]; }} Template
|
||||||
|
* @typedef {(strings: TemplateStringsArray, ...values: any[]) => string} ITemplateFunction
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Please confirm your provider extends from globalThis.FileheaderLanguageProvider
|
||||||
|
*/
|
||||||
|
class CustomLanguageProvider extends globalThis.FileheaderLanguageProvider {
|
||||||
|
/**
|
||||||
|
* @type {string[]}
|
||||||
|
*/
|
||||||
|
languages = [
|
||||||
|
"java",
|
||||||
|
"javascript",
|
||||||
|
"typescript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescriptreact",
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {string=} the language block comment start string.
|
||||||
|
* this is for future feature: support detect old custom template when custom template changes
|
||||||
|
*/
|
||||||
|
blockCommentStart = "/**";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {string=}
|
||||||
|
*/
|
||||||
|
blockCommentEnd = "*/";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get your template when document language matched
|
||||||
|
* @param {ITemplateFunction} tpl template function, it is a tagged function, support nested interpolation
|
||||||
|
* @param {FileheaderVariable} variables template variables
|
||||||
|
* @returns {Template}
|
||||||
|
*/
|
||||||
|
getTemplate(tpl, variables) {
|
||||||
|
// prettier-ignore
|
||||||
|
return tpl
|
||||||
|
`/**
|
||||||
|
* @Author: ${variables.authorName} <${variables.authorEmail}>
|
||||||
|
* @Date: ${variables.birthtime}
|
||||||
|
* @LastEditors: ${variables.userName}
|
||||||
|
* @LastModified: ${variables.mtime}
|
||||||
|
* @FilePath: ${variables.filePath}
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2025} by Kane All rights reserved
|
||||||
|
*/`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// export your provider classes
|
||||||
|
module.exports = [CustomLanguageProvider];
|
@@ -1,24 +1,24 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>cpicxim.com.cn</groupId>
|
<groupId>com.cpic.xim</groupId>
|
||||||
<artifactId>Cpicxim-XMNHSA-Repeater</artifactId>
|
<artifactId>cpicxim-huixiabao</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
<name>cpicxim-huixiabao-backend</name>
|
||||||
<name>Cpicxim-XMNHSA-Repeater Maven Webapp</name>
|
<url>http://www.cpic.com.cn</url>
|
||||||
<!-- FIXME change it to the project's website -->
|
|
||||||
<url>http://www.example.com</url>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
<maven.compiler.source>18</maven.compiler.source>
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
<maven.compiler.target>18</maven.compiler.target>
|
||||||
<spring.version>6.2.3</spring.version>
|
<spring.version>6.2.4</spring.version>
|
||||||
<log4j2.version>2.20.0</log4j2.version>
|
<log4j.version>2.24.3</log4j.version>
|
||||||
|
<jackson.version>2.18.3</jackson.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- springmvc -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-context</artifactId>
|
<artifactId>spring-context</artifactId>
|
||||||
@@ -45,7 +46,6 @@
|
|||||||
<artifactId>spring-web</artifactId>
|
<artifactId>spring-web</artifactId>
|
||||||
<version>${spring.version}</version>
|
<version>${spring.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-webmvc</artifactId>
|
<artifactId>spring-webmvc</artifactId>
|
||||||
@@ -59,104 +59,90 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--jackson-->
|
<!-- log4j -->
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
<version>2.14.2</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
<version>2.13.4</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-annotations</artifactId>
|
|
||||||
<version>2.13.4</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- log-4j -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.20.0</version>
|
<version>${log4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-slf4j2-impl</artifactId>
|
<artifactId>log4j-slf4j2-impl</artifactId>
|
||||||
<version>2.20.0</version>
|
<version>${log4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-api</artifactId>
|
<artifactId>log4j-api</artifactId>
|
||||||
<version>2.20.0</version>
|
<version>${log4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- POI -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>org.apache.directory.studio</groupId>
|
||||||
<artifactId>poi</artifactId>
|
<artifactId>org.apache.commons.codec</artifactId>
|
||||||
<version>5.2.3</version>
|
<version>1.8</version>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.poi</groupId>
|
|
||||||
<artifactId>poi-ooxml</artifactId>
|
|
||||||
<version>5.2.3</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- mybatis -->
|
<!-- jackson -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mybatis</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>mybatis</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<version>3.5.19</version>
|
<version>${jackson.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-core</artifactId>
|
||||||
|
<version>${jackson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-annotations</artifactId>
|
||||||
|
<version>${jackson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>Cpicxim-XMNHSA-Repeater</finalName>
|
<finalName>cpicxim-huixiabao</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
<directory>src/main/resources</directory>
|
<directory>src/main/resources</directory>
|
||||||
<includes>
|
<includes>
|
||||||
<include>**/*.prorerties</include>
|
<include>**/*.properties</include>
|
||||||
<include>**/*.xml</include>
|
<include>**/*.xml</include>
|
||||||
</includes>
|
</includes>
|
||||||
<filtering>false</filtering>
|
<filtering>false</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
|
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to
|
||||||
|
parent pom) -->
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-clean-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.4.0</version>
|
||||||
</plugin>
|
<configuration>
|
||||||
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
|
<outputDirectory>${project.build.directory}/../../../输出/back/</outputDirectory>
|
||||||
<plugin>
|
</configuration>
|
||||||
<artifactId>maven-resources-plugin</artifactId>
|
|
||||||
<version>3.3.1</version>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>3.13.0</version>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>3.3.0</version>
|
<version>3.5.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<skipTests>true</skipTests>
|
<skipTests>true</skipTests>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<version>3.4.0</version>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.14.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<source>18</source>
|
||||||
|
<target>18</target>
|
||||||
<encoding>UTF-8</encoding>
|
<encoding>UTF-8</encoding>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
</build>
|
</build>
|
||||||
</project>
|
</project>
|
@@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 18:40:54
|
||||||
|
* @LastEditors: Kane Wang
|
||||||
|
* @LastModified: 2025-03-16 08:59:16
|
||||||
|
* @FilePath: src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverController.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.huixiabao.web.controllers.MediCover;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.cpic.xim.utils.secrecy.*;;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping( "/huixiabao" )
|
||||||
|
public class MediCoverController
|
||||||
|
{
|
||||||
|
private static Logger logger = LoggerFactory.getLogger( MediCoverController.class );
|
||||||
|
private static String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMBanAXTnHChd6W/vYq6eVmmr1R2p25tghivDEb8qrgxHMCY3lqYhJAw3jgQAH3HzSOFxZ3Mz/WcRaW3CzWfAZ0mm5dcVY0qEgyT/1BOsdhLwKa3BBuURRCEp5ZPapErm3Ugl/OBxjEURgtc9JnVBOECc9Kvk3FXvuN4tDWl18lxAgMBAAECgYBBAJ3HLkqomTg4sAIaloeZr0WC0pIkNCeJteX9OzdqBVbFEyPZE7+AhrMh2O6BkvqU7YjpmaQRSR0UMjY8iZ5eaJ8vkPJPFgoJI14dqj3Pby46GYqC8iPHTeFN35RL6Sgktt9i/loLoiRj6ifQ2AqnlE3e66Iaw1Zdnx1Lt9/T7QJBAP6PZatPD4UM9kQ0xO1QmJ+IsgLBhv3fhn2i8X4NSJGJ1yi9+JWnQ+CfBZ2u/V0op1Wz5kIDK7BA40o2Ntlf6acCQQDBcSNGlyE5sSSJS39pnbTqxNjKoakBQ5LFIrk4ld8Vuk0H7dcdfUittHoDnNMn9TKIIAvxo0s4fQe8WMPqH2cnAkEA4x49r6JSTntKHYCXUsTd5zim2h6gulF8RQvkOnrPjEpXVVppN9yMixRWhmFiXIOxCJ4BilQZ3p+GKuhD953DcQJBAKdGjpqcVb7t0AppnuRV2/yn/FA9O0g8hs6yGDk2YJMJZ1NT+JEnpZGQX3KASphjEC9mhu2Np55RgD7/A2uRfEECQQCdyFLVuPMSnCRAXvwb0EegaM0sS4/bT3/fix7RpKqv7tsUfXXsL1bbxxp9b/FBJe834s6wqq0U2wTlfVHXD1Oh";
|
||||||
|
private static String publicyKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAWpwF05xwoXelv72KunlZpq9UdqdubYIYrwxG/Kq4MRzAmN5amISQMN44EAB9x80jhcWdzM/1nEWltws1nwGdJpuXXFWNKhIMk/9QTrHYS8CmtwQblEUQhKeWT2qRK5t1IJfzgcYxFEYLXPSZ1QThAnPSr5NxV77jeLQ1pdfJcQIDAQAB";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接收医保局财政支持小药箱数据。
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping( "/xyx" )
|
||||||
|
@ResponseBody
|
||||||
|
public static MediCoverResponse getHmbXyxInfo(
|
||||||
|
@RequestBody MediCoverRequestBody request
|
||||||
|
)
|
||||||
|
{
|
||||||
|
MediCoverResponse response = new MediCoverResponse();
|
||||||
|
ObjectMapper jsonMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
String decryptData = AESUtils.decryptData( request.getKey(), privateKey, request.getBizContent() );
|
||||||
|
|
||||||
|
logger.info( "【接收小药箱数据】请求参数<{}>", request.toString() );
|
||||||
|
logger.info( "【接收小药箱数据】解密参数<{}>", decryptData );
|
||||||
|
|
||||||
|
// jsonMapper.readValue( decryptData, null );
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,103 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2025-03-15 21:01:56
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverRequestBody.java
|
||||||
|
* @Description:
|
||||||
|
* @
|
||||||
|
* @Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.cpic.xim.huixiabao.web.controllers.MediCover;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class MediCoverRequestBody
|
||||||
|
{
|
||||||
|
|
||||||
|
@JsonProperty( "transId" )
|
||||||
|
private String transId;
|
||||||
|
|
||||||
|
@JsonProperty( "format" )
|
||||||
|
private String format;
|
||||||
|
|
||||||
|
@JsonProperty( "bizContent" )
|
||||||
|
private String bizContent;
|
||||||
|
|
||||||
|
@JsonProperty( "key" )
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
@JsonProperty( "timestamp" )
|
||||||
|
private String timestamp;
|
||||||
|
|
||||||
|
public MediCoverRequestBody(
|
||||||
|
String transId,
|
||||||
|
String format,
|
||||||
|
String bizContent,
|
||||||
|
String key,
|
||||||
|
String timestamp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.transId = transId;
|
||||||
|
this.format = format;
|
||||||
|
this.bizContent = bizContent;
|
||||||
|
this.key = key;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTransId()
|
||||||
|
{
|
||||||
|
return transId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTransId( String transId )
|
||||||
|
{
|
||||||
|
this.transId = transId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFormat()
|
||||||
|
{
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormat( String format )
|
||||||
|
{
|
||||||
|
this.format = format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBizContent()
|
||||||
|
{
|
||||||
|
return bizContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBizContent( String bizContent )
|
||||||
|
{
|
||||||
|
this.bizContent = bizContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey()
|
||||||
|
{
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey( String key )
|
||||||
|
{
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimestamp()
|
||||||
|
{
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp( String timestamp )
|
||||||
|
{
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "MediCoverRequestBody [transId=" + transId + ", format=" + format + ", bizContent=" + bizContent + ", key=" + key + ", timestamp=" + timestamp + "]";
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2025-03-15 17:21:50
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverResponse.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.huixiabao.web.controllers.MediCover;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class MediCoverResponse
|
||||||
|
{
|
||||||
|
MediCoverResponse()
|
||||||
|
{
|
||||||
|
code = "500";
|
||||||
|
message = "未知失败原因";
|
||||||
|
subMessage = "";
|
||||||
|
result = new MediCoverResultInResponse( "", "" );
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MediCoverResponse(
|
||||||
|
String code,
|
||||||
|
String message,
|
||||||
|
String subMessage,
|
||||||
|
String key,
|
||||||
|
String content,
|
||||||
|
Boolean success
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
this.subMessage = subMessage;
|
||||||
|
this.result = new MediCoverResultInResponse( key, content );
|
||||||
|
this.success = success;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty( "code" )
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
@JsonProperty( "message" )
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@JsonProperty( "subMessage" )
|
||||||
|
private String subMessage;
|
||||||
|
|
||||||
|
@JsonProperty( "result" )
|
||||||
|
private MediCoverResultInResponse result;
|
||||||
|
|
||||||
|
@JsonProperty( "success" )
|
||||||
|
private Boolean success;
|
||||||
|
}
|
@@ -0,0 +1,59 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2025-03-15 21:01:56
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverResultInResponse.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 18:40:54
|
||||||
|
* @LastEditors: Kane Wang
|
||||||
|
* @LastModified: 2025-03-16 01:13:50
|
||||||
|
* @FilePath: src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverResultInResponse.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.cpic.xim.huixiabao.web.controllers.MediCover;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class MediCoverResultInResponse
|
||||||
|
{
|
||||||
|
|
||||||
|
public MediCoverResultInResponse( String key, String content )
|
||||||
|
{
|
||||||
|
this.key = key;
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey()
|
||||||
|
{
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey( String key )
|
||||||
|
{
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent()
|
||||||
|
{
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent( String content )
|
||||||
|
{
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty( "key" )
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
@JsonProperty( "content" )
|
||||||
|
private String content;
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2025-03-16 00:12:27
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/data/nhs/HmbXyxInfo.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.huixiabao.web.data.nhs.xyx;
|
@@ -1,23 +1,21 @@
|
|||||||
/*
|
/**
|
||||||
* @Author: Kane
|
* @Author: Kane
|
||||||
* @Date: 2025-03-06 14:33:27
|
* @Date: 2025-03-15 21:01:56
|
||||||
* @LastEditors: Kane
|
* @LastEditors: Kane
|
||||||
* @FilePath: /Cpicxim-XMNHSA-Repeater/src/main/java/com/cpicxim/huixiabao/data/pojo/HmbListItem.java
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/data/nhs/xyx/HmbXyxInfoItem.java
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
package com.cpicxim.huixiabao.data.pojo;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
|
package com.cpic.xim.huixiabao.web.data.nhs.xyx;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
|
||||||
|
|
||||||
@JsonInclude( JsonInclude.Include.NON_EMPTY )
|
public class HmbXyxInfoItem
|
||||||
@JsonPropertyOrder( alphabetic = true )
|
|
||||||
public class HmbListItem
|
|
||||||
{
|
{
|
||||||
|
|
||||||
public String getPsnName()
|
public String getPsnName()
|
||||||
{
|
{
|
||||||
return psnName;
|
return psnName;
|
||||||
@@ -28,14 +26,14 @@ public class HmbListItem
|
|||||||
this.psnName = psnName;
|
this.psnName = psnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCertNo()
|
public String getCertno()
|
||||||
{
|
{
|
||||||
return certNo;
|
return certno;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCertNo( String certNo )
|
public void setCertno( String certno )
|
||||||
{
|
{
|
||||||
this.certNo = certNo;
|
this.certno = certno;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getServiceId()
|
public String getServiceId()
|
||||||
@@ -68,19 +66,18 @@ public class HmbListItem
|
|||||||
this.xyxNo = xyxNo;
|
this.xyxNo = xyxNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty("psnName")
|
@JsonProperty( "psnName" )
|
||||||
private String psnName;
|
private String psnName;
|
||||||
|
|
||||||
@JsonProperty("certno")
|
@JsonProperty( "certno" )
|
||||||
private String certNo;
|
private String certno;
|
||||||
|
|
||||||
@JsonProperty("serviceId")
|
@JsonProperty( "serviceId" )
|
||||||
private String serviceId;
|
private String serviceId;
|
||||||
|
|
||||||
@JsonProperty("status")
|
@JsonProperty( "status" )
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
@JsonProperty("xyxNo")
|
@JsonProperty( "xyxNo" )
|
||||||
private String xyxNo;
|
private String xyxNo;
|
||||||
|
|
||||||
}
|
}
|
@@ -0,0 +1,112 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 12:50:53
|
||||||
|
* @LastEditors: Kane Wang
|
||||||
|
* @LastModified: 2025-03-16 08:44:52
|
||||||
|
* @FilePath: src/main/java/com/cpic/xim/utils/secrecy/AESUtils.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.secrecy;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import javax.crypto.spec.IvParameterSpec;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AESUtils
|
||||||
|
*/
|
||||||
|
public class AESUtils
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 偏移量,必须是16位字符串
|
||||||
|
*/
|
||||||
|
private static final String IV_STRING = "16-Bytes--String";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产生随机密钥(这里产生密钥必须是16位)
|
||||||
|
*/
|
||||||
|
private static String generateKey()
|
||||||
|
{
|
||||||
|
String key = UUID.randomUUID().toString();
|
||||||
|
key = key.replace( "-", "" ).substring( 0, 16 );// 替换掉-号
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密
|
||||||
|
*
|
||||||
|
* @param publicKey 公钥
|
||||||
|
* @param content 加密数据
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Map<String, String> encryptData( String publicKey, String content )
|
||||||
|
{
|
||||||
|
byte[] encryptedBytes;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] byteContent = content.getBytes( "UTF-8" );
|
||||||
|
// 注意,为了能与 iOS 统一
|
||||||
|
// 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成
|
||||||
|
String key = generateKey();
|
||||||
|
byte[] enCodeFormat = key.getBytes();
|
||||||
|
SecretKeySpec secretKeySpec = new SecretKeySpec( enCodeFormat, "AES" );
|
||||||
|
byte[] initParam = IV_STRING.getBytes();
|
||||||
|
IvParameterSpec ivParameterSpec = new IvParameterSpec( initParam );
|
||||||
|
// 指定加密的算法、工作模式和填充方式
|
||||||
|
Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" );
|
||||||
|
cipher.init( Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec );
|
||||||
|
encryptedBytes = cipher.doFinal( byteContent );
|
||||||
|
// 同样对加密后数据进行 base64 编码
|
||||||
|
key = RSAUtils.encryptByPublicKey( key, publicKey );
|
||||||
|
Map<String, String> result = new HashMap<>( 2 );
|
||||||
|
result.put( "key", key );
|
||||||
|
result.put( "content", Base64Utils.encode( encryptedBytes ) );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( "加密失败:" + e.getMessage(), e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解密
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param privateKey
|
||||||
|
* @param content
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String decryptData( String key, String privateKey, String content )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.out.println( "KEY:" + key );
|
||||||
|
System.out.println( "privateKey:" + privateKey );
|
||||||
|
System.out.println( "content:" + content );
|
||||||
|
// base64 解码
|
||||||
|
byte[] encryptedBytes = Base64Utils.decode( content );
|
||||||
|
key = RSAUtils.decryptByPrivateKey( privateKey, key );
|
||||||
|
byte[] enCodeFormat = key.getBytes();
|
||||||
|
SecretKeySpec secretKey = new SecretKeySpec( enCodeFormat, "AES" );
|
||||||
|
byte[] initParam = IV_STRING.getBytes();
|
||||||
|
IvParameterSpec ivParameterSpec = new IvParameterSpec( initParam );
|
||||||
|
Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" );
|
||||||
|
cipher.init( Cipher.DECRYPT_MODE, secretKey, ivParameterSpec );
|
||||||
|
byte[] result = cipher.doFinal( encryptedBytes );
|
||||||
|
return new String( result, "UTF-8" );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( "解密失败:" + e.getMessage(), e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,165 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 12:50:53
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @LastModified: 2025-03-16 08:40:07
|
||||||
|
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/utils/secrecy/Base64Utils.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.secrecy;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base64Utils
|
||||||
|
*/
|
||||||
|
public class Base64Utils
|
||||||
|
{
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* 文件读取缓冲区大小
|
||||||
|
*/
|
||||||
|
private static final int CACHE_SIZE = 1024;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* BASE64字符串解码为二进制数据
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param base64
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static byte[] decode( String base64 )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
return Base64.decodeBase64( base64.getBytes() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String decode( byte[] b )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
return new String( Base64.decodeBase64( b ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 二进制数据编码为BASE64字符串
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param bytes
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String encode( byte[] bytes )
|
||||||
|
{
|
||||||
|
return new String( Base64.encodeBase64( bytes ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 将文件编码为BASE64字符串
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* 大文件慎用,可能会导致内存溢出
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param filePath 文件绝对路径
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String encodeFile( String filePath )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
byte[] bytes = fileToByte( filePath );
|
||||||
|
return encode( bytes );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* BASE64字符串转回文件
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param filePath 文件绝对路径
|
||||||
|
* @param base64 编码字符串
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static void decodeToFile( String filePath, String base64 )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
byte[] bytes = decode( base64 );
|
||||||
|
byteArrayToFile( bytes, filePath );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 文件转换为二进制数组
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param filePath 文件路径
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static byte[] fileToByte( String filePath )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
byte[] data = new byte[0];
|
||||||
|
File file = new File( filePath );
|
||||||
|
if ( file.exists() )
|
||||||
|
{
|
||||||
|
FileInputStream in = new FileInputStream( file );
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream( 2048 );
|
||||||
|
byte[] cache = new byte[CACHE_SIZE];
|
||||||
|
int nRead = 0;
|
||||||
|
while ( (nRead = in.read( cache )) != -1 )
|
||||||
|
{
|
||||||
|
out.write( cache, 0, nRead );
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
in.close();
|
||||||
|
data = out.toByteArray();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 二进制数据写文件
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param bytes 二进制数据
|
||||||
|
* @param filePath 文件生成目录
|
||||||
|
*/
|
||||||
|
public static void byteArrayToFile( byte[] bytes, String filePath )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
InputStream in = new ByteArrayInputStream( bytes );
|
||||||
|
File destFile = new File( filePath );
|
||||||
|
if ( !destFile.getParentFile().exists() )
|
||||||
|
{
|
||||||
|
destFile.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
destFile.createNewFile();
|
||||||
|
OutputStream out = new FileOutputStream( destFile );
|
||||||
|
byte[] cache = new byte[CACHE_SIZE];
|
||||||
|
int nRead = 0;
|
||||||
|
while ( (nRead = in.read( cache )) != -1 )
|
||||||
|
{
|
||||||
|
out.write( cache, 0, nRead );
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,202 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 12:50:53
|
||||||
|
* @LastEditors: Kane Wang
|
||||||
|
* @LastModified: 2025-03-16 08:43:56
|
||||||
|
* @FilePath: src/main/java/com/cpic/xim/utils/secrecy/RSAUtils.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.secrecy;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.security.*;
|
||||||
|
import java.security.interfaces.RSAPrivateKey;
|
||||||
|
import java.security.interfaces.RSAPublicKey;
|
||||||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
import java.security.spec.RSAPrivateKeySpec;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSAUtils
|
||||||
|
*/
|
||||||
|
public class RSAUtils
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA最大加密明文大小
|
||||||
|
*/
|
||||||
|
private static final int MAX_ENCRYPT_BLOCK = 117;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA最大解密密文大小
|
||||||
|
*/
|
||||||
|
private static final int MAX_DECRYPT_BLOCK = 128;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密算法RSA
|
||||||
|
*/
|
||||||
|
private static final String KEY_ALGORITHM = "RSA";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成公钥和私钥
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static Map<String, String> getKeys()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance( "RSA" );
|
||||||
|
keyPairGen.initialize( 1024 );
|
||||||
|
KeyPair keyPair = keyPairGen.generateKeyPair();
|
||||||
|
RSAPublicKey publicKey = ( RSAPublicKey ) keyPair.getPublic();
|
||||||
|
RSAPrivateKey privateKey = ( RSAPrivateKey ) keyPair.getPrivate();
|
||||||
|
|
||||||
|
String publicKeyStr = getPublicKeyStr( publicKey );
|
||||||
|
String privateKeyStr = getPrivateKeyStr( privateKey );
|
||||||
|
|
||||||
|
Map<String, String> result = new HashMap<>( 2 );
|
||||||
|
result.put( "publicKeyStr", publicKeyStr );
|
||||||
|
result.put( "privateKeyStr", privateKeyStr );
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main( String[] args )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Map<String, String> keys = getKeys();
|
||||||
|
System.out.println( "publicKeyStr=" + keys.get( "publicKeyStr" ) );
|
||||||
|
System.out.println( "privateKeyStr=" + keys.get( "privateKeyStr" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用模和指数生成RSA私钥
|
||||||
|
* 注意:【此代码用了默认补位方式,为RSA/None/PKCS1Padding,不同JDK默认的补位方式可能不同,如Android默认是RSA
|
||||||
|
* /None/NoPadding】
|
||||||
|
*
|
||||||
|
* @param modulus 模
|
||||||
|
* @param exponent 指数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static RSAPrivateKey getPrivateKey( String modulus, String exponent )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BigInteger b1 = new BigInteger( modulus );
|
||||||
|
BigInteger b2 = new BigInteger( exponent );
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance( "RSA" );
|
||||||
|
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec( b1, b2 );
|
||||||
|
return ( RSAPrivateKey ) keyFactory.generatePrivate( keySpec );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公钥加密
|
||||||
|
*
|
||||||
|
* @param data 加密数据
|
||||||
|
* @param publicKey 加密key
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String encryptByPublicKey( String data, String publicKey )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
byte[] dataByte = data.getBytes();
|
||||||
|
byte[] keyBytes = Base64Utils.decode( publicKey );
|
||||||
|
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec( keyBytes );
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance( KEY_ALGORITHM );
|
||||||
|
Key publicK = keyFactory.generatePublic( x509KeySpec );
|
||||||
|
// 对数据加密
|
||||||
|
Cipher cipher = Cipher.getInstance( "RSA/ECB/PKCS1Padding" );
|
||||||
|
cipher.init( Cipher.ENCRYPT_MODE, publicK );
|
||||||
|
int inputLen = dataByte.length;
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
int offSet = 0;
|
||||||
|
byte[] cache;
|
||||||
|
int i = 0;
|
||||||
|
// 对数据分段加密
|
||||||
|
while ( inputLen - offSet > 0 )
|
||||||
|
{
|
||||||
|
if ( inputLen - offSet > MAX_ENCRYPT_BLOCK )
|
||||||
|
{
|
||||||
|
cache = cipher.doFinal( dataByte, offSet, MAX_ENCRYPT_BLOCK );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cache = cipher.doFinal( dataByte, offSet, inputLen - offSet );
|
||||||
|
}
|
||||||
|
out.write( cache, 0, cache.length );
|
||||||
|
i++;
|
||||||
|
offSet = i * MAX_ENCRYPT_BLOCK;
|
||||||
|
}
|
||||||
|
byte[] encryptedData = out.toByteArray();
|
||||||
|
out.close();
|
||||||
|
return Base64Utils.encode( encryptedData );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 私钥解密
|
||||||
|
*
|
||||||
|
* @param privateKey 私钥
|
||||||
|
* @param data 加密数据
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String decryptByPrivateKey( String privateKey, String data )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
byte[] encryptedData = Base64Utils.decode( data );
|
||||||
|
byte[] keyBytes = Base64Utils.decode( privateKey );
|
||||||
|
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec( keyBytes );
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance( KEY_ALGORITHM );
|
||||||
|
Key privateK = keyFactory.generatePrivate( pkcs8KeySpec );
|
||||||
|
// Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
|
||||||
|
Cipher cipher = Cipher.getInstance( "RSA/ECB/PKCS1Padding" );
|
||||||
|
|
||||||
|
cipher.init( Cipher.DECRYPT_MODE, privateK );
|
||||||
|
int inputLen = encryptedData.length;
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
int offSet = 0;
|
||||||
|
byte[] cache;
|
||||||
|
int i = 0;
|
||||||
|
// 对数据分段解密
|
||||||
|
while ( inputLen - offSet > 0 )
|
||||||
|
{
|
||||||
|
if ( inputLen - offSet > MAX_DECRYPT_BLOCK )
|
||||||
|
{
|
||||||
|
cache = cipher.doFinal( encryptedData, offSet, MAX_DECRYPT_BLOCK );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cache = cipher.doFinal( encryptedData, offSet, inputLen - offSet );
|
||||||
|
}
|
||||||
|
out.write( cache, 0, cache.length );
|
||||||
|
i++;
|
||||||
|
offSet = i * MAX_DECRYPT_BLOCK;
|
||||||
|
}
|
||||||
|
byte[] decryptedData = out.toByteArray();
|
||||||
|
out.close();
|
||||||
|
return new String( decryptedData );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getPrivateKeyStr( PrivateKey privateKey )
|
||||||
|
{
|
||||||
|
return Base64Utils.encode( privateKey.getEncoded() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getPublicKeyStr( PublicKey publicKey )
|
||||||
|
{
|
||||||
|
return Base64Utils.encode( publicKey.getEncoded() );
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,66 @@
|
|||||||
|
/**
|
||||||
|
* @Author: Kane Wang <wangkane@qq.com>
|
||||||
|
* @Date: 2025-03-15 18:40:54
|
||||||
|
* @LastEditors: Kane Wang
|
||||||
|
* @LastModified: 2025-03-16 08:56:20
|
||||||
|
* @FilePath: src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 by Kane All rights reserved
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.web.filters.cros;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
|
||||||
|
public class CrosFilter implements Filter
|
||||||
|
{
|
||||||
|
private static Logger logger = LoggerFactory.getLogger( CrosFilter.class );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param req
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doFilter(
|
||||||
|
ServletRequest req,
|
||||||
|
ServletResponse resp,
|
||||||
|
FilterChain chain
|
||||||
|
)
|
||||||
|
throws ServletException,
|
||||||
|
IOException
|
||||||
|
{
|
||||||
|
HttpServletRequest request = ( HttpServletRequest ) req;
|
||||||
|
HttpServletResponse response = ( HttpServletResponse ) resp;
|
||||||
|
String method = request.getMethod();
|
||||||
|
String originHeader = request.getHeader( "Origin" );
|
||||||
|
|
||||||
|
logger.info( "收到" + method + "请求,来自" + originHeader );
|
||||||
|
|
||||||
|
// 如果是Options请求
|
||||||
|
if ( method.equals( HttpMethod.OPTIONS.toString() ) )
|
||||||
|
{
|
||||||
|
originHeader = "*";
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setHeader( "Access-Control-Allow-Origin", originHeader );
|
||||||
|
response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT" );
|
||||||
|
response.setHeader( "Access-Control-Max-Age", "0" );
|
||||||
|
response.setHeader( "Access-Control-Allow-Headers",
|
||||||
|
"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token" );
|
||||||
|
response.setHeader( "Access-Control-Allow-Credentials", "true" );
|
||||||
|
response.setHeader( "XDomainRequestAllowed", "1" );
|
||||||
|
response.setHeader( "XDomainRequestAllowed", "1" );
|
||||||
|
|
||||||
|
chain.doFilter( request, response );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
code/cpicxim-huixiabao/src/main/resources/log4j2.xml
Normal file
40
code/cpicxim-huixiabao/src/main/resources/log4j2.xml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<Configuration status="WARN" monitorInterval="300">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="Console" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" />
|
||||||
|
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
|
||||||
|
</Console>
|
||||||
|
<RollingFile name="rolling_file_win"
|
||||||
|
filePattern="./logs/huixiabao/$${date:yyyy-MM}/huixiabao-%d{MM-dd-yyyy}-%i.log.gz">
|
||||||
|
<PatternLayout>
|
||||||
|
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
|
||||||
|
</PatternLayout>
|
||||||
|
<Policies>
|
||||||
|
<TimeBasedTriggeringPolicy interval="1" />
|
||||||
|
<SizeBasedTriggeringPolicy size="20MB" />
|
||||||
|
<DefaultRolloverStrategy max="20" />
|
||||||
|
</Policies>
|
||||||
|
</RollingFile>
|
||||||
|
<RollingFile name="rolling_file_linux"
|
||||||
|
filePattern="/logs/huixiabao/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
|
||||||
|
<PatternLayout>
|
||||||
|
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
|
||||||
|
</PatternLayout>
|
||||||
|
<Policies>
|
||||||
|
<TimeBasedTriggeringPolicy interval="1" />
|
||||||
|
<SizeBasedTriggeringPolicy size="20MB" />
|
||||||
|
<DefaultRolloverStrategy max="20" />
|
||||||
|
</Policies>
|
||||||
|
</RollingFile>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<!-- <Logger name="mylog" level="info">
|
||||||
|
<AppenderRef ref="rolling_file" />
|
||||||
|
</Logger> -->
|
||||||
|
<Root level="debug">
|
||||||
|
<AppenderRef ref="rolling_file_linux" />
|
||||||
|
<AppenderRef ref="rolling_file_win" />
|
||||||
|
<AppenderRef ref="Console" />
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
34
code/cpicxim-huixiabao/src/main/webapp/WEB-INF/web.xml
Normal file
34
code/cpicxim-huixiabao/src/main/webapp/WEB-INF/web.xml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<web-app
|
||||||
|
version="4.0"
|
||||||
|
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||||
|
xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
|
||||||
|
xmlns:xml="http://www.w3.org/XML/1998/namespace"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
|
||||||
|
<display-name>Archetype Created Web Application</display-name>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>springmvc</servlet-name>
|
||||||
|
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
||||||
|
<init-param>
|
||||||
|
<param-name>contextConfigLocation</param-name>
|
||||||
|
<param-value>classpath:spring.xml</param-value>
|
||||||
|
</init-param>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>springmvc</servlet-name>
|
||||||
|
<url-pattern>/huixibao</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<filter-name>CrosFilter</filter-name>
|
||||||
|
<filter-class>com.cpic.xim.web.filters.cros.CrosFilter</filter-class>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CrosFilter</filter-name>
|
||||||
|
<url-pattern>*</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
|
||||||
|
</web-app>
|
16
code/sql/调试.sql
Normal file
16
code/sql/调试.sql
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
delete from HmbXyxInfo;
|
||||||
|
insert into HmbXyxInfo( psnName, certno, serviceid, status, xyxno)
|
||||||
|
values( '王炜', '350402198106130016', '100007', '1', '100001');
|
||||||
|
insert into HmbXyxInfo( psnName, certno, serviceid, status, xyxno)
|
||||||
|
values( '王炜', '350402198106130016', '100007', '1', '100002');
|
||||||
|
insert into HmbXyxInfo( psnName, certno, serviceid, status, xyxno)
|
||||||
|
values( '王炜', '350402198106130016', '100007', '1', '100003');
|
||||||
|
commit;
|
||||||
|
/*
|
||||||
|
|
||||||
|
select * from HmbXyxInfo_Update;
|
||||||
|
select a.*
|
||||||
|
from HmbXyxInfo a,
|
||||||
|
HmbXyxInfo_Update b
|
||||||
|
where a.xyxNo = b.xyxNo;
|
Reference in New Issue
Block a user