Compare commits

..

50 Commits

Author SHA1 Message Date
547de1727d 修改log4j2 日志输出的时间格式。 2025-05-26 11:55:29 +08:00
9bb3c0dd85 保存进度! 2025-05-15 19:00:58 +08:00
01d76a9f21 添加文件头模板文件。 2025-05-15 09:31:31 +08:00
ef8f8db904 保存进度! 2025-04-19 20:42:24 +08:00
771f4108c2 保存进度! 2025-04-18 11:58:33 +08:00
217503bfc3 Merge branch 'feature-惠厦保接口' of http://222.76.244.118:3000/CPICXIM/cpicxim-huixiabao into feature-惠厦保接口 2025-04-18 11:58:03 +08:00
3b3bf34bb4 1 2025-04-18 01:37:59 +08:00
48e816f3ae 保存进度 2025-04-11 10:42:48 +08:00
8e8f06717e 保存进度! 2025-03-20 17:07:23 +08:00
05efe7bf81 保存进度! 2025-03-19 16:38:57 +08:00
cb7e70fb81 保存进度! 2025-03-17 19:03:17 +08:00
cd183f6676 保存进度 2025-03-17 07:33:36 +08:00
7ecbdcdfa9 保存进度 2025-03-17 00:35:55 +08:00
5acb55ba43 保存进度 2025-03-16 23:42:22 +08:00
7bdf025bb5 升级到springmvc6容器。 2025-03-16 23:07:27 +08:00
636974c99c 保存进度 2025-03-16 09:01:28 +08:00
d25f43db18 保存进度 2025-03-16 08:41:32 +08:00
5bf6b6f679 保存进度! 2025-03-15 18:42:50 +08:00
47b91d277a 保存进度! 2025-03-15 18:40:54 +08:00
b2237d3270 保存进度 2025-03-15 12:50:53 +08:00
9f805266d6 保存进度 2025-03-15 00:36:24 +08:00
c11d80a7bf 保存进度! 2025-03-14 19:37:04 +08:00
22b6ed81bd 保存进度! 2025-03-14 16:22:32 +08:00
a42d742a5e 保存进度! 2025-03-14 12:18:22 +08:00
2fe8043791 保存进度! 2025-03-14 11:37:33 +08:00
5d117f7b51 保存进度 2025-03-13 22:42:26 +08:00
bec378be36 保存进度 2025-03-13 22:15:51 +08:00
66d55f9e87 Merge branch 'feature-NHSA-repeater' of http://222.76.244.118:3000/CPICXIM/cpicxim-huixiabao into feature-NHSA-repeater 2025-03-13 22:02:03 +08:00
d12a7b14e4 1111 2025-03-13 22:01:52 +08:00
c33b7e8e35 111 2025-03-13 22:01:30 +08:00
c3c14048d7 保存进度 2025-03-13 21:49:18 +08:00
aaef2bd862 保存进度! 2025-03-13 21:48:41 +08:00
ae25e50f3d 一些小修改。 2025-03-13 17:42:41 +08:00
45fb965496 1.0完成。 2025-03-13 11:28:41 +08:00
f77272ff29 准备编写清理函数 2025-03-12 18:44:13 +08:00
a4ccfaf9b8 清理pom.xml文件。 2025-03-12 17:38:52 +08:00
1b1545968c 完成发送代码,开始编写查询和清理已发送数据的代码。 2025-03-12 17:27:02 +08:00
f64cac1c21 完成发送代码,开始编写查询和清理已发送数据的代码。 2025-03-12 11:13:37 +08:00
95047193eb 加入post代码。 2025-03-12 01:09:23 +08:00
a823e3f963 保存进度! 2025-03-11 19:31:11 +08:00
a3dc3480ba 保存进度! 2025-03-11 15:08:37 +08:00
22d92ccf97 Merge branch 'feature-NHSA-repeater' of http://222.76.244.118:3000/CPICXIM/cpicxim-huixiabao into feature-NHSA-repeater 2025-03-11 09:21:20 +08:00
095f5c2c05 开始编写到医保局的repeater。 2025-03-11 09:21:11 +08:00
3f34ed1c8d 保存进度 2025-03-06 00:02:26 +08:00
2e0fbb5008 增加易联众安全规范文档。 2025-03-05 19:16:35 +08:00
e53521356d 更新医保局接口文档 1.5。 2025-02-20 14:48:34 +08:00
85cbca1fa3 保存进度! 2025-02-19 18:20:36 +08:00
6f61d5c07c 保存进度! 2025-02-19 15:13:54 +08:00
807ed211f7 保存进度! 2025-02-18 19:20:35 +08:00
61c6198a9b 创建项目!! 2025-02-18 19:05:41 +08:00
67 changed files with 3517 additions and 1 deletions

View File

@ -1,3 +1,10 @@
# cpicxim-huixiabao
惠厦保相关项目
惠厦保相关项目。
莲富wifi管理员账号admin密码Cpic#1234。wifi ssid HXB密码 CpicXimHXB#2025
GigabitEthernet0/0/11 柜台右一
GigabitEthernet0/0/9 柜台右二

8
code/cpicxim-XMNHSA-repeater/.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="cpicxim-XMNHSA-repeater" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="cpicxim-XMNHSA-repeater" options="-extdirs D:\develop\cpicxim\cpicxim-huixiabao\code\cpicxim-XMNHSA-repeater\lib" />
</option>
</component>
</project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="22 (2)" project-jdk-type="JavaSDK" />
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View 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];

View File

@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
}

Binary file not shown.

View File

@ -0,0 +1,179 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cpic.xim</groupId>
<artifactId>cpicxim-XMNHSA-repeater</artifactId>
<version>v20250526</version>
<name>cpicxim-XMNHSA-repeater</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compile.source>1.8</maven.compile.source>
<maven.compile.target>1.8</maven.compile.target>
<!-- <maven.compiler.release>1.8</maven.compiler.release> -->
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.11.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<!-- Optionally: parameterized tests support -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<!--jackson-->
<!-- <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.4</version>
</dependency> -->
<!-- log-4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId> cn.hsa.zephyr</groupId>
<artifactId>zephyr-api-sdk</artifactId>
<version>2.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/zephyr-api-sdk-nhs.jar</systemPath>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.80</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<!-- <version>1.2.83</version> -->
<version>2.0.56</version>
</dependency>
</dependencies>
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.7.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.cpic.xim.huixiabao.AppMain</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.0</version>
<configuration>
<mainClass>com.cpic.xim.huixiabao.AppMain</mainClass>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,61 @@
/*
* @Author: Kane
*
* @Date: 2025-03-11 09:27:40
*
* @LastEditors: Kane
*
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/AppMain.java
*
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao;
import java.util.Vector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.huixiabao.data.config.HuixiabaoConfig;
import com.cpic.xim.huixiabao.data.pojo.HmbXyxInfo;
import com.cpic.xim.huixiabao.nhs.CpicximToXMNHS;
public class AppMain
{
private static Logger logger = LoggerFactory.getLogger( AppMain.class );
public static void main( String[] args )
{
doPostXyxInfo();
System.out.println( "Hello World!" );
}
private static void doPostXyxInfo()
{
while ( true )
{
Vector<HmbXyxInfo> xyxInfo = CpicximToXMNHS.getNeverTransHmbList();
// 发送
if ( xyxInfo.isEmpty() == false )
{
logger.info( "查询到" + String.valueOf( xyxInfo.size() ) + "条数据,开始发送!" );
CpicximToXMNHS.postHmbXyxInfo( xyxInfo );
}
try
{
logger.info( "等待" + String.valueOf( HuixiabaoConfig.getSleepSeconds() ) + "秒。" );
Thread.sleep( HuixiabaoConfig.getSleepSeconds() * 1000 );
}
catch ( InterruptedException error )
{
logger.error( "sleep时出错" + error.getMessage() );
}
}
}
}

View File

@ -0,0 +1,66 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-03-11 15:08:37
* @LastEditors: Kane Wang
* @LastModified: 2025-04-18 00:52:16
* @FilePath: src/main/java/com/cpic/xim/huixiabao/data/config/HuixiabaoConfig.java
* @Description:
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.huixiabao.data.config;
public class HuixiabaoConfig
{
public static String getAppid()
{
return appid;
}
public static String getAppSecret()
{
return appSecret;
}
public static String getSignKey()
{
return signKey;
}
public static String getEncKey()
{
return encKey;
}
public static int getMAX_COUNT_PER_REQUEST()
{
return MAX_COUNT_PER_REQUEST;
}
public static String getUrl()
{
return url;
}
public static String getFunId()
{
return funId;
}
public static int getSleepSeconds()
{
return SLEEP_SECONDS;
}
private static final int MAX_COUNT_PER_REQUEST = 500;
private static final int SLEEP_SECONDS = 10;
private static final String url = "http://172.18.1.150:9040/h3c/new/api/gafe/rest";
// private static final String url = "http://172.16.39.44:9040/h3c/new/api/gafe/rest";
private static final String appid = "hxb-tb";
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 encKey = "08307695B1668EB9FD6210250FED874F";
}

View File

@ -0,0 +1,100 @@
/*
* @Author: Kane
*
* @Date: 2025-03-06 14:33:27
*
* @LastEditors: Kane
*
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/data/pojo/HmbXyxInfo.java
*
* @Description: 小药箱接口参数描述
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao.data.pojo;
// 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 HmbXyxInfo
{
public HmbXyxInfo( String psnName,
String certNo,
String serviceId,
String status,
String xyxNo )
{
this.psnName = psnName;
this.certNo = certNo;
this.serviceId = serviceId;
this.status = status;
this.xyxNo = xyxNo;
}
public String getPsnName()
{
return psnName;
}
public void setPsnName( String psnName )
{
this.psnName = psnName;
}
public String getCertNo()
{
return certNo;
}
public void setCertNo( String certNo )
{
this.certNo = certNo;
}
public String getServiceId()
{
return serviceId;
}
public void setServiceId( String serviceId )
{
this.serviceId = serviceId;
}
public String getStatus()
{
return status;
}
public void setStatus( String status )
{
this.status = status;
}
public String getXyxNo()
{
return xyxNo;
}
public void setXyxNo( String xyxNo )
{
this.xyxNo = xyxNo;
}
@Override
public String toString()
{
return "HmbXyxInfo [psnName=" + psnName + ", certNo=" + certNo + ", serviceId=" + serviceId + ", status=" + status + ", xyxNo=" + xyxNo + "]";
}
private String psnName;
private String certNo;
private String serviceId;
private String status;
private String xyxNo;
}

View File

@ -0,0 +1,51 @@
/*
* @Author: Kane
* @Date: 2025-03-06 14:27:05
* @LastEditors: Kane
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/data/pojo/HmbXyxInfoRequest.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao.data.pojo;
import java.util.Vector;
public class HmbXyxInfoRequest
{
public HmbXyxInfoRequest()
{
this.topic = "hmbXyxInfo";
this.hmbList = new Vector<>();
}
public HmbXyxInfoRequest( String topic, Vector<HmbXyxInfo> 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<HmbXyxInfo> getHmbList()
{
return hmbList;
}
public void setHmbList( Vector<HmbXyxInfo> hmbList )
{
this.hmbList = hmbList;
}
private String topic; // 业务类型
private Vector<HmbXyxInfo> hmbList;
}

View File

@ -0,0 +1,108 @@
/*
* @Author: Kane
*
* @Date: 2025-03-06 14:17:24
*
* @LastEditors: Kane
*
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/data/pojo/NHACommenRequestBody.java
*
* @Description: 易联众请求共通报文结构
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao.data.pojo;
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;
}
public String getData()
{
return data;
}
public void setData( String data )
{
this.data = data;
}
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; // 时间戳
}

View File

@ -0,0 +1,338 @@
/*
* @Author: Kane
*
* @Date: 2025-03-12 09:01:59
*
* @LastEditors: Kane
*
* @FilePath: /cpicxim-XMNHSA-repeater/src/main/java/com/cpic/xim/huixiabao/nhs/CpicximToXMNHS.java
*
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao.nhs;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.Vector;
import com.cpic.xim.huixiabao.data.pojo.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import cn.hsa.zephyr.apisdk.DefaultZephyrClient;
import cn.hsa.zephyr.apisdk.internal.exception.ZephyrApiException;
import cn.hsa.zephyr.apisdk.internal.util.encrypt.EncryptionModeEnum;
import cn.hsa.zephyr.apisdk.internal.util.encrypt.SignTypeEnum;
import cn.hsa.zephyr.apisdk.request.DefaultZephyrRequest;
import cn.hsa.zephyr.apisdk.response.DefaultZephyrResponse;
import com.cpic.xim.huixiabao.data.config.HuixiabaoConfig;
@SuppressWarnings(
"unused"
)
public class CpicximToXMNHS
{
private static Logger logger = LoggerFactory.getLogger( CpicximToXMNHS.class );
private static String driverName = "com.mysql.cj.jdbc.Driver";
private static String url = "jdbc:mysql://10.39.0.85:3306/huixiabao?useUnicode=true&characterEncoding=utf8&useSSL=true";
private static String userName = "huixiabao";
private static String password = "Kane@1981";
/**
* 从HmbXyxInfo_Update中获取未发送过的小药箱数据
*
* @return
*/
public static Vector<HmbXyxInfo> getNeverTransHmbList()
{
Vector<HmbXyxInfo> items = new Vector<HmbXyxInfo>();
HmbXyxInfo item = null;
Connection connection = null;
Statement statement = null;
ResultSet result = null;
try
{
Class.forName( "com.mysql.cj.jdbc.Driver" );
String url = CpicximToXMNHS.url;
String userName = CpicximToXMNHS.userName;
String password = CpicximToXMNHS.password;
// String sql = """
// select info.psnName, info.certNo, info.serviceId, info.status, info.xyxNo
// from HmbXyxInfo info,
// HmbXyxInfo_Update u
// 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 );
statement = connection.createStatement();
result = statement.executeQuery( sql.trim() );
while ( result.next() )
{
item = new HmbXyxInfo( result.getString( "psnName" ),
result.getString( "certno" ),
result.getString( "serviceId" ),
result.getString( "status" ),
result.getString( "xyxNo" ) );
items.add( item );
}
}
catch ( SQLException error )
{
error.printStackTrace();
}
catch ( ClassNotFoundException error )
{
logger.error( "加载sql驱动错误" + error.getMessage() );
}
finally
{
if ( result != null )
{
try
{
result.close();
}
catch ( SQLException error )
{
}
}
if ( statement != null )
{
try
{
statement.close();
}
catch ( SQLException error )
{
}
}
if ( connection != null )
{
try
{
connection.close();
}
catch ( SQLException error )
{
}
}
}
return items;
}
/**
* postedItems 中的小药箱数据冲HmbXyxInfo_update中清除
*
* @param postedItems 已发送的小药箱数据
*/
public static void removePostedHmbXyxInfo( Vector<HmbXyxInfo> postedItems )
{
Vector<HmbXyxInfo> items = new Vector<HmbXyxInfo>();
HmbXyxInfo item = null;
Connection connection = null;
PreparedStatement statement = null;
ResultSet result = null;
try
{
Class.forName( "com.mysql.cj.jdbc.Driver" );
String url = CpicximToXMNHS.url;
String userName = CpicximToXMNHS.userName;
String password = CpicximToXMNHS.password;
String sql = "delete from HmbXyxInfo_Update where xyxNo = ?";
connection = DriverManager.getConnection( url, userName, password );
statement = connection.prepareStatement( sql.trim() );
for ( HmbXyxInfo info : postedItems )
{
statement.setString( 1, info.getXyxNo() );
statement.execute();
}
}
catch ( SQLException error )
{
try
{
connection.rollback();
}
catch ( SQLException e )
{
}
logger.error( "清理已发送数据失败:" + error.getMessage() );
}
catch ( ClassNotFoundException error )
{
}
finally
{
if ( result != null )
{
try
{
result.close();
}
catch ( SQLException error )
{
}
}
if ( statement != null )
{
try
{
statement.close();
}
catch ( SQLException error )
{
logger.error( "加载sql驱动错误" + error.getMessage() );
}
}
if ( connection != null )
{
try
{
connection.close();
}
catch ( SQLException error )
{
}
}
}
}
public static void postHmbXyxInfo( Vector<HmbXyxInfo> items )
{
String url = HuixiabaoConfig.getUrl();
String appId = HuixiabaoConfig.getAppid();
String appSecret = HuixiabaoConfig.getAppSecret();
String funId = HuixiabaoConfig.getFunId();
String encKey = HuixiabaoConfig.getEncKey();
String signKey = HuixiabaoConfig.getSignKey();
SignTypeEnum signType = SignTypeEnum.SM3;
EncryptionModeEnum encType = EncryptionModeEnum.SM4;
// 发送用工具对象
DefaultZephyrClient client = new DefaultZephyrClient( url,
funId,
appId,
appSecret,
signType,
signKey,
encType,
encKey );
DefaultZephyrRequest req = new DefaultZephyrRequest();
DefaultZephyrResponse resp = null;
// 数据
JSONObject data = new JSONObject();
JSONObject requestObject = new JSONObject();
JSONObject xyxInfo = null;
JSONArray xyxInfoList = new JSONArray();
Vector<HmbXyxInfo> postedInfo = new Vector<HmbXyxInfo>(); // 存放已经送出的数据
requestObject.put( "topic", "hmbXyxInfo" );
int request_count = 0; // 计数每个请求不能超过500条
int total_count = 0;
for ( HmbXyxInfo info : items )
{
xyxInfo = new JSONObject();
xyxInfo.put( "psnName", info.getPsnName() );
xyxInfo.put( "certno", info.getCertNo() );
xyxInfo.put( "serviceId", info.getServiceId() );
xyxInfo.put( "status", info.getStatus() );
xyxInfo.put( "xyxNo", info.getXyxNo() );
xyxInfoList.add( xyxInfo );
postedInfo.add( info );
request_count++;
total_count++;
logger.info( "准备数据:" + xyxInfo.toJSONString() );
if ( request_count >= HuixiabaoConfig.getMAX_COUNT_PER_REQUEST() - 1 || total_count == items.size() )
{
// 达到上限或者记录已经全部处理将当前生成的数据送出
requestObject.remove( "hmbList" );
requestObject.put( "hmbList", xyxInfoList );
try
{
data.remove("data");
data.put("data", requestObject);
logger.info( "发送请求内容:" + requestObject.toJSONString() );
logger.info( "请求地址:" + HuixiabaoConfig.getUrl() );
req.setData( requestObject );
resp = client.execute( req );
if ( resp != null )
{
logger.info( "发送成功返回消息Body" + resp.getBody() );
logger.info( "发送成功返回消息data" + resp.getData() );
logger.info( "发送成功返回消息message" + resp.getMessage() );
// 将已发送的数据从HmbXyxInfo_update表中清理掉
removePostedHmbXyxInfo( postedInfo );
}
else
{
logger.info( "已发送请求但获取的DefaultZephyrResponse为null" );
}
}
catch ( ZephyrApiException error )
{
// 发送不成功记录日志
// 不从HmbXyxInfo_update中清理当前这批数据待以后重新发送
logger.error( "发送异常:" + error.getMessage() );
}
finally
{
// 清理清单重置计数
// 如果发送失败在HmbXyxInfo_update表中保留发送失败的记录待下次发送
xyxInfoList.clear();
postedInfo.clear();
request_count = 0;
}
}
}
}
}

View File

@ -0,0 +1,40 @@
<Configuration status="WARN" monitorInterval="300">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd 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{yyyy-MM-dd 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{yyyy-MM-dd 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>

View File

@ -0,0 +1,140 @@
/*
* @Author: Kane
*
* @Date: 2025-03-11 09:27:40
*
* @LastEditors: Kane
*
* @FilePath: /cpicxim-XMNHSA-repeater/src/test/java/com/cpic/xim/huixiabao/AppTest.java
*
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Vector;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cpic.xim.huixiabao.data.pojo.HmbXyxInfo;
import com.cpic.xim.huixiabao.nhs.CpicximToXMNHS;
import cn.hsa.zephyr.apisdk.DefaultZephyrClient;
import cn.hsa.zephyr.apisdk.internal.exception.ZephyrApiException;
import cn.hsa.zephyr.apisdk.internal.util.encrypt.EncryptionModeEnum;
import cn.hsa.zephyr.apisdk.internal.util.encrypt.SignTypeEnum;
import cn.hsa.zephyr.apisdk.request.DefaultZephyrRequest;
import cn.hsa.zephyr.apisdk.response.DefaultZephyrResponse;
/**
* Unit test for simple App.
*/
public class AppTest
{
private Logger logger = LoggerFactory.getLogger( AppTest.class );
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
@Test
public void testLog()
{
for (
int i = 0;
i < 10000;
i++
)
{
// System.out.print("test!");
logger.error( "test!!!!" );
}
}
@Test
public void nhsTest()
{
String url = "172.18.1.150:9040";
String appId = "待定";
String appSecret = "待定";
String funId = "xxx";
String encKey = "A5B6E00DA599G56C41ABFE23A74E6E60";
String signKey = "待定";
SignTypeEnum signType = SignTypeEnum.SM3;
EncryptionModeEnum encType = EncryptionModeEnum.SM4;
try
{
DefaultZephyrClient client = new DefaultZephyrClient( url,
funId,
appId,
appSecret,
signType,
signKey,
encType,
encKey );
DefaultZephyrRequest req = new DefaultZephyrRequest();
JSONObject jsonObject1 = new JSONObject();
DefaultZephyrResponse resp = null;
jsonObject1.put( "code", "XXXXXXXXXXXXXXXXXX" );
jsonObject1.put( "scene_code", "XXX" );
req.setData( jsonObject1 );
resp = client.execute( req );
System.out.println( resp.getData() );
}
catch ( ZephyrApiException e )
{
e.printStackTrace();
}
}
@Test
public void jsonTest()
{
JSONObject requestObject = new JSONObject();
JSONObject item = new JSONObject();
JSONArray hmbList = new JSONArray();
requestObject.put( "topic", "hmbXyxInfo" );
requestObject.put( "hmbList", hmbList );
item.put( "psnName", "王炜" );
item.put( "cerno", "350402198106130016" );
item.put( "serviceId", "100007" );
item.put( "status", "1" );
item.put( "xyxNo", "1234567" );
hmbList.add( item );
String json = requestObject.toJSONString();
System.out.println( json );
}
@Test
public void testMysql()
{
Vector<HmbXyxInfo> items = CpicximToXMNHS.getNeverTransHmbList();
System.out.println( items.toString() );
assert( items.size() > 0 );
}
}

3
code/cpicxim-huixiabao/.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="cpicxim-huixiabao" />
</profile>
</annotationProcessing>
</component>
</project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

12
code/cpicxim-huixiabao/.idea/misc.xml generated Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="22" project-jdk-type="JavaSDK" />
</project>

6
code/cpicxim-huixiabao/.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View File

View File

View File

@ -0,0 +1,78 @@
/**
* 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];

View File

@ -0,0 +1,4 @@
{
"java.configuration.updateBuildConfiguration": "automatic",
"java.compile.nullAnalysis.mode": "automatic"
}

View File

@ -0,0 +1,184 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cpic.xim</groupId>
<artifactId>cpicxim-huixiabao</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>cpicxim-huixiabao-backend</name>
<url>http://www.cpic.com.cn</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
<spring.version>6.2.4</spring.version>
<log4j.version>2.24.3</log4j.version>
<jackson.version>2.18.3</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<!-- springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-fileupload2-jakarta-servlet6</artifactId>
<version>2.0.0-M2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.18.0</version>
</dependency> -->
<!-- <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.18.0</version>
</dependency> -->
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency> -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.codec</artifactId>
<version>1.8</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</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>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.2.0</version>
</dependency>
</dependencies>
<build>
<finalName>cpicxim-huixiabao</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to
parent pom) -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
<!-- <configuration>
<outputDirectory>${project.build.directory}/../../../输出/back/</outputDirectory>
</configuration> -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<source>18</source>
<target>18</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View File

@ -0,0 +1,92 @@
/**
* @Author: Kane
* @Date: 2025-03-17 17:09:29
* @LastEditors: Kane
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/data/config/AppConfig.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.data.config;
public class AppConfig
{
public static String getDrivernamemysql()
{
return driverNameMySQL;
}
public static String getUrlproductmysql()
{
return urlProductMySQL;
}
public static String getUrltestmysql()
{
return urlTestMySQL;
}
public static String getUsernamemysql()
{
return userNameMySQL;
}
public static String getPasswordmysql()
{
return passwordMySQL;
}
public static String getDrivernamegaussdb()
{
return driverNameGaussDB;
}
public static String getUrlgaussdbproduct()
{
return urlGaussDBProduct;
}
public static String getUsernamegaussdbproduct()
{
return userNameGaussDBProduct;
}
public static String getPasswordgaussdbproduct()
{
return passwordGaussDBProduct;
}
public static String getUrlgaussdbtest()
{
return urlGaussDBTest;
}
public static String getUsernamegaussdbtest()
{
return userNameGaussDBTest;
}
public static String getPasswordgaussdbtest()
{
return passwordGaussDBTest;
}
private final static String driverNameMySQL = "com.mysql.cj.jdbc.Driver";
private final static String urlProductMySQL = "jdbc:mysql://10.39.0.85:3306/huixiabao?useUnicode=true&characterEncoding=utf8&useSSL=true";
private final static String urlTestMySQL = "jdbc:mysql://10.39.0.84:3306/huixiabao?useUnicode=true&characterEncoding=utf8&useSSL=true";
private final static String userNameMySQL = "huixiabao";
private final static String passwordMySQL = "Kane@1981";
// 高斯数据库
private final static String driverNameGaussDB = "org.postgresql.Driver";
private final static String urlGaussDBProduct = "jdbc:postgresql://30.191.0.36:25308/qing";
private final static String userNameGaussDBProduct = "xim_ywglxt_app";
private final static String passwordGaussDBProduct = "qYldSdbfQ!o5M4M";
private final static String urlGaussDBTest = "jdbc:postgresql://10.182.2.208:25308/qing";
private final static String userNameGaussDBTest = "cx_xiamen";
private final static String passwordGaussDBTest = "aThK80#!";
}

View File

@ -0,0 +1,109 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-03-17 19:03:17
* @LastEditors: Kane
* @LastModified: 2025-03-20 10:49:49
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/db/HuixiabaoDbUtils.java
* @Description:
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.huixiabao.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Vector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.huixiabao.web.data.nhs.xyx.HmbXyxInfoItem;
import com.cpic.xim.data.config.AppConfig;
public class HuixiabaoDbUtils
{
private static Logger logger = LoggerFactory.getLogger( HuixiabaoDbUtils.class );
public static void saveHmbXyxInfoToMysql( Vector<HmbXyxInfoItem> xyxInfo )
throws ClassNotFoundException,
SQLException
{
Connection connection = null;
PreparedStatement statementDelete = null;
PreparedStatement statementInsert = null;
String sqlDelete = """
delete from HmbXyxInfo where xyxNo = ?
""";
String sqlInsert = """
insert into HmbXyxInfo( psnName, certno, serviceId, status, xyxNo )
values( ?, ?, ?, ?, ? )
""";
try
{
Class.forName( "com.mysql.cj.jdbc.Driver" );
connection = DriverManager.getConnection( AppConfig.getUrltestmysql(),
AppConfig.getUsernamemysql(),
AppConfig.getPasswordmysql() );
statementDelete = connection.prepareStatement( sqlDelete.trim() );
statementInsert = connection.prepareStatement( sqlInsert.trim() );
for ( HmbXyxInfoItem item : xyxInfo )
{
logger.info( "写入记录{<>}", item.getXyxNo() );
statementDelete.setString( 1, item.getXyxNo() );
statementInsert.setString( 1, item.getPsnName() );
statementInsert.setString( 2, item.getCertno() );
statementInsert.setString( 3, item.getServiceId() );
statementInsert.setString( 4, item.getStatus() );
statementInsert.setString( 5, item.getXyxNo() );
statementDelete.execute();
statementInsert.execute();
}
}
finally
{
if ( statementDelete != null )
{
try
{
statementDelete.close();
}
catch ( SQLException error )
{
}
}
if ( statementInsert != null )
{
try
{
statementInsert.close();
}
catch ( SQLException error )
{
}
}
if ( connection != null )
{
try
{
connection.close();
}
catch ( SQLException error )
{
}
}
}
}
}

View File

@ -0,0 +1,119 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-03-15 18:40:54
* @LastEditors: Kane
* @LastModified: 2025-03-16 08:59:16
* @FilePath: /cpicxim-huixiabao/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.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.PostMapping;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.utils.secrecy.*;
import com.cpic.xim.huixiabao.web.data.nhs.xyx.HmbXyxInfo;
import com.cpic.xim.huixiabao.web.data.nhs.xyx.HmbXyxInfoItem;
import com.cpic.xim.huixiabao.db.HuixiabaoDbUtils;
@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
)
{
ObjectMapper jsonMapper = new ObjectMapper();
MediCoverResponse response = null;
HmbXyxInfo xyxInfo = null;
String decryptData = AESUtils.decryptData( request.getKey(), privateKey, request.getBizContent() );
logger.info( "【接收小药箱数据】请求参数<{}>", request.toString() );
logger.info( "【接收小药箱数据】解密参数<{}>", decryptData );
try
{
xyxInfo = jsonMapper.readValue( decryptData, HmbXyxInfo.class );
HuixiabaoDbUtils.saveHmbXyxInfoToMysql( xyxInfo.getHmbList() );
}
catch ( ClassNotFoundException error )
{
logger.error( "加载mysql驱动失败{}", error.getMessage() );
// 解析json错误通知调用者
response = new MediCoverResponse( "500",
"加载mysql驱动失败" + error.getMessage(),
"",
"",
"",
false );
}
catch ( SQLException error )
{
// 执行sql错误通知调用者
logger.error( "执行sql失败{}", error.getMessage() );
response = new MediCoverResponse( "500",
"执行sql失败" + error.getMessage(),
"",
"",
"",
false );
}
catch ( Exception error )
{
// 解析json错误通知调用者
response = new MediCoverResponse( "500",
"解析JSON失败{}" + error.getMessage(),
"",
"",
"",
false );
}
if ( response == null )
{
// 处理成功
response = new MediCoverResponse( "20000",
"处理成功",
"",
"",
"",
true );
}
return response;
}
}

View File

@ -0,0 +1,106 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-03-15 18:40:54
* @LastEditors: Kane Wang
* @LastModified: 2025-03-17 07:21:58
* @FilePath: src/main/java/com/cpic/xim/huixiabao/web/controllers/MediCover/MediCoverRequestBody.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 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 MediCoverRequestBody()
{
}
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 + "]";
}
}

View File

@ -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;
}

View File

@ -0,0 +1,48 @@
/**
* @Author: Kane
* @Date: 2025-03-17 09:17:21
* @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.
*/
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;
}

View File

@ -0,0 +1,53 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-03-16 08:41:32
* @LastEditors: Kane Wang
* @LastModified: 2025-03-16 20:00:26
* @FilePath: src/main/java/com/cpic/xim/huixiabao/web/data/nhs/xyx/HmbXyxInfo.java
* @Description:
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.huixiabao.web.data.nhs.xyx;
import java.util.Vector;
import com.fasterxml.jackson.annotation.JsonProperty;
public class HmbXyxInfo
{
public HmbXyxInfo()
{
}
public HmbXyxInfo( String topic, Vector<HmbXyxInfoItem> hmbList )
{
this.topic = topic;
this.hmbList = hmbList;
}
public String getTopic()
{
return topic;
}
public void setTopic( String topic )
{
this.topic = topic;
}
public Vector<HmbXyxInfoItem> getHmbList()
{
return hmbList;
}
public void setHmbList( Vector<HmbXyxInfoItem> hmbList )
{
this.hmbList = hmbList;
}
@JsonProperty( "topic" )
private String topic;
@JsonProperty( "hmbList" )
private Vector<HmbXyxInfoItem> hmbList;
}

View File

@ -0,0 +1,84 @@
/**
* @Author: Kane
* @Date: 2025-03-15 21:01:56
* @LastEditors: Kane
* @FilePath: /cpicxim-huixiabao/src/main/java/com/cpic/xim/huixiabao/web/data/nhs/xyx/HmbXyxInfoItem.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.huixiabao.web.data.nhs.xyx;
import com.fasterxml.jackson.annotation.JsonProperty;
public class HmbXyxInfoItem
{
public HmbXyxInfoItem() {}
public String getPsnName()
{
return psnName;
}
public void setPsnName( String psnName )
{
this.psnName = psnName;
}
public String getCertno()
{
return certno;
}
public void setCertno( String certno )
{
this.certno = certno;
}
public String getServiceId()
{
return serviceId;
}
public void setServiceId( String serviceId )
{
this.serviceId = serviceId;
}
public String getStatus()
{
return status;
}
public void setStatus( String status )
{
this.status = status;
}
public String getXyxNo()
{
return xyxNo;
}
public void setXyxNo( String xyxNo )
{
this.xyxNo = xyxNo;
}
@JsonProperty( "psnName" )
private String psnName;
@JsonProperty( "certno" )
private String certno;
@JsonProperty( "serviceId" )
private String serviceId;
@JsonProperty( "status" )
private String status;
@JsonProperty( "xyxNo" )
private String xyxNo;
}

View File

@ -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 不可以使用 KeyGeneratorSecureRandomSecretKey 生成
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 );
}
}
}

View File

@ -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();
}
}

View File

@ -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() );
}
}

View File

@ -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 jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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 );
}
}

View 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>

View File

@ -0,0 +1,38 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<context:component-scan base-package="com.cpic.xim" />
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property
name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />
<!-- <bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<property name="maxUploadSize" value="-1" />
</bean> -->
</beans>

View 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>/</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>

View File

@ -0,0 +1,5 @@
<html>
<body>
<h2><%= "Hello World!" %></h2>
</body>
</html>

162
code/nginx配置/nginx.conf Normal file
View File

@ -0,0 +1,162 @@
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8440;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://10.39.7.183:8080;
#index index.html index.htm;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server {
listen 9040;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://172.18.1.150:9040;
#index index.html index.htm;
#proxy_set_header Host $proxy_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# location /h3c/new/test/api/gafe/rest {
# proxy_pass http://172.18.1.150:9040/h3c/new/test/api/gafe/rest;
# #index index.html index.htm;
# #proxy_set_header Host $proxy_host;
# #proxy_set_header X-Real-IP $remote_addr;
# #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# }
# location /h3c/new/api/gafe/rest {
# proxy_pass http://172.18.1.150:9040/h3c/new/api/gafe/rest;
# #index index.html index.htm;
# #proxy_set_header Host $proxy_host;
# #proxy_set_header X-Real-IP $remote_addr;
# #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# }
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}

34
code/sql/HmbXyxInfo.sql Normal file
View File

@ -0,0 +1,34 @@
/*
Navicat Premium Data Transfer
Source Server : mysql - 10.39.0.85
Source Server Type : MySQL
Source Server Version : 90200
Source Host : 10.39.0.85:3306
Source Schema : huixiabao
Target Server Type : MySQL
Target Server Version : 90200
File Encoding : 65001
Date: 12/03/2025 09:14:18
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for HmbXyxInfo
-- ----------------------------
DROP TABLE IF EXISTS `HmbXyxInfo`;
CREATE TABLE `HmbXyxInfo` (
`hmbListIndex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'hmbList的索引由timestamp和hmbList的hash值组成。',
`psnName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名',
`certno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '证件号',
`serviceId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '服务id',
`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单状态',
`xyxNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主键id',
PRIMARY KEY (`xyxNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'HmbXyxInfo的子表。\r\n保存hmbList集合的元素。' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

24
code/sql/触发器.txt Normal file
View File

@ -0,0 +1,24 @@
drop TRIGGER xyxinfo_insert;
CREATE TRIGGER xyxinfo_insert after INSERT ON huixiabao.HmbXyxInfo FOR EACH ROW
BEGIN
delete from huixiabao.HmbXyxInfo_Update u where u.xyxNo = NEW.xyxNo;
INSERT INTO huixiabao.HmbXyxInfo_Update ( xyxNo, update_time )
VALUES
(
new.xyxNo,
SYSDATE());
END;
drop trigger xyxinfo_update;
create trigger xyxinfo_update after update on huixiabao.HmbXyxInfo FOR EACH ROW
BEGIN
delete from huixiabao.HmbXyxInfo_Update u where u.xyxNo = NEW.xyxNo;
INSERT INTO huixiabao.HmbXyxInfo_Update ( xyxNo, update_time )
VALUES
(
new.xyxNo,
SYSDATE());
END;

11
code/sql/调试.sql Normal file
View File

@ -0,0 +1,11 @@
select * from HmbXyxInfo;
select * from HmbXyxInfo_Update;
select a.*
from HmbXyxInfo a,
HmbXyxInfo_Update b
where a.xyxNo = b.xyxNo;
/*
insert into HmbXyxInfo_Update select xyxNo, sysdate() from HmbXyxInfo;
*/

Binary file not shown.

View File

@ -0,0 +1,272 @@
/*
Navicat Premium Data Transfer
Source Server : mysql - 10.39.0.85
Source Server Type : MySQL
Source Server Version : 90200
Source Host : 10.39.0.85:3306
Source Schema : huixiabao
Target Server Type : MySQL
Target Server Version : 90200
File Encoding : 65001
Date: 19/03/2025 15:22:44
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for HmbXyxInfo
-- ----------------------------
DROP TABLE IF EXISTS `HmbXyxInfo`;
CREATE TABLE `HmbXyxInfo` (
`psnName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名',
`certno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '证件号',
`serviceId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '服务id',
`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单状态',
`xyxNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主键id',
PRIMARY KEY (`xyxNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'HmbXyxInfo的子表。\r\n保存hmbList集合的元素。' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of HmbXyxInfo
-- ----------------------------
INSERT INTO `HmbXyxInfo` VALUES ('王素英', '35020419320519302X', '100007', '1', 'C390891677024256');
INSERT INTO `HmbXyxInfo` VALUES ('邱巧娜', '350212199204096022', '100007', '1', 'C397071241969664');
INSERT INTO `HmbXyxInfo` VALUES ('何建龙', '350204196711170019', '100007', '1', 'C397082155548672');
INSERT INTO `HmbXyxInfo` VALUES ('赵瑞兰', '350204196004033023', '100007', '1', 'C397109661794304');
INSERT INTO `HmbXyxInfo` VALUES ('林亚敏', '350211198407063510', '100007', '1', 'C397168646291456');
INSERT INTO `HmbXyxInfo` VALUES ('刘景忠', '350211196704203015', '100007', '1', 'C397768788410368');
INSERT INTO `HmbXyxInfo` VALUES ('林清秀', '350211196503124521', '100007', '1', 'C397881233506304');
INSERT INTO `HmbXyxInfo` VALUES ('何玉琴', '350204196410160028', '100007', '1', 'C397945142116352');
INSERT INTO `HmbXyxInfo` VALUES ('陈延砍', '350221195707153015', '100007', '1', 'C398311690731520');
INSERT INTO `HmbXyxInfo` VALUES ('叶兴珠', '350420196507300040', '100007', '1', 'C398320121282560');
INSERT INTO `HmbXyxInfo` VALUES ('魏书杰', '21122119570902062X', '100007', '1', 'C398486177972224');
INSERT INTO `HmbXyxInfo` VALUES ('林本能', '350204195104120015', '100007', '1', 'C398501764005888');
INSERT INTO `HmbXyxInfo` VALUES ('黄明城', '350204195403063014', '100007', '1', 'C398513264787456');
INSERT INTO `HmbXyxInfo` VALUES ('杨强辉', '350203194712200018', '100007', '1', 'C398611155779584');
INSERT INTO `HmbXyxInfo` VALUES ('许翠英', '350221196706155523', '100007', '1', 'C398638645248000');
INSERT INTO `HmbXyxInfo` VALUES ('洪青奇', '350221197504280531', '100007', '1', 'C398908963946496');
INSERT INTO `HmbXyxInfo` VALUES ('郭耀军', '350221197103123017', '100007', '1', 'C398939892744192');
INSERT INTO `HmbXyxInfo` VALUES ('林燕娇', '35020519830104252X', '100007', '1', 'C398992141189120');
INSERT INTO `HmbXyxInfo` VALUES ('傅双贞', '350322198709205144', '100007', '1', 'C398992875192320');
INSERT INTO `HmbXyxInfo` VALUES ('黄火胜', '350212198301284557', '100007', '1', 'C399001179914240');
INSERT INTO `HmbXyxInfo` VALUES ('纪金顶', '350221196108093019', '100007', '1', 'C399016912748544');
INSERT INTO `HmbXyxInfo` VALUES ('郭天平', '350221194408063015', '100007', '1', 'C399075163242496');
INSERT INTO `HmbXyxInfo` VALUES ('蔡华军', '350211198403283532', '100007', '1', 'C399221171159040');
INSERT INTO `HmbXyxInfo` VALUES ('汪强', '350204196206010014', '100007', '1', 'C399601477091328');
INSERT INTO `HmbXyxInfo` VALUES ('周素兰', '350211196705154024', '100007', '1', 'C399749603393536');
INSERT INTO `HmbXyxInfo` VALUES ('纪金盾', '350221196303153013', '100007', '1', 'C399957296939008');
INSERT INTO `HmbXyxInfo` VALUES ('陈妙绿', '350212198611103029', '100007', '1', 'C400040675508224');
INSERT INTO `HmbXyxInfo` VALUES ('陈荣贵', '350204197909206018', '100007', '1', 'C400054332162048');
INSERT INTO `HmbXyxInfo` VALUES ('吴志超', '350212199101093013', '100007', '1', 'C400056244764672');
INSERT INTO `HmbXyxInfo` VALUES ('王青颖', '350221198011073563', '100007', '1', 'C400056588697600');
INSERT INTO `HmbXyxInfo` VALUES ('陈美云', '350221198112163082', '100007', '1', 'C400058060898304');
INSERT INTO `HmbXyxInfo` VALUES ('陈嘉煜', '350212198906293018', '100007', '1', 'C400101450973184');
INSERT INTO `HmbXyxInfo` VALUES ('洪丽清', '350211197209293548', '100007', '1', 'C400126721654784');
INSERT INTO `HmbXyxInfo` VALUES ('陈锐', '350221197507033034', '100007', '1', 'C400296469331968');
INSERT INTO `HmbXyxInfo` VALUES ('苏海燕', '350212198401073028', '100007', '1', 'C400318057414656');
INSERT INTO `HmbXyxInfo` VALUES ('王玉华', '350204196207122069', '100007', '1', 'C400416975880192');
INSERT INTO `HmbXyxInfo` VALUES ('黄最', '350221196104265020', '100007', '1', 'C400460957351936');
INSERT INTO `HmbXyxInfo` VALUES ('曾德伴', '350221195604186017', '100007', '1', 'C401156926603264');
INSERT INTO `HmbXyxInfo` VALUES ('李淑梅', '350221196701084543', '100007', '1', 'C401805437304832');
INSERT INTO `HmbXyxInfo` VALUES ('沈玉英', '350221195001131041', '100007', '1', 'C401809904238592');
INSERT INTO `HmbXyxInfo` VALUES ('林捷騉', '350204196712220014', '100007', '1', 'C402186787618816');
INSERT INTO `HmbXyxInfo` VALUES ('彭建议', '350221195610101534', '100007', '1', 'C402316987203584');
INSERT INTO `HmbXyxInfo` VALUES ('严克诚', '350203195001102037', '100007', '1', 'C402553424314368');
INSERT INTO `HmbXyxInfo` VALUES ('许亚丽', '350211196910163544', '100007', '1', 'C403309766508544');
INSERT INTO `HmbXyxInfo` VALUES ('高进福', '350221196810212030', '100007', '1', 'C403364141465600');
INSERT INTO `HmbXyxInfo` VALUES ('林土迭', '350221195510123517', '100007', '1', 'C403578369736704');
INSERT INTO `HmbXyxInfo` VALUES ('张淑芳', '350203195505040028', '100007', '1', 'C403947359436800');
INSERT INTO `HmbXyxInfo` VALUES ('叶真珠', '350211194807073541', '100007', '1', 'C404009879732224');
INSERT INTO `HmbXyxInfo` VALUES ('詹鸿坤', '350212199107312010', '100007', '1', 'C404090838188032');
INSERT INTO `HmbXyxInfo` VALUES ('李添华', '352601195012220531', '100007', '1', 'C404097150615552');
INSERT INTO `HmbXyxInfo` VALUES ('万敏', '350203196201223049', '100007', '1', 'C404100690608128');
INSERT INTO `HmbXyxInfo` VALUES ('张门生', '350204195501022013', '100007', '1', 'C404132949000192');
INSERT INTO `HmbXyxInfo` VALUES ('万敏', '350203196201223049', '100007', '1', 'C404447211421696');
INSERT INTO `HmbXyxInfo` VALUES ('郑龙池', '350212198908236017', '100007', '1', 'C404510805458944');
INSERT INTO `HmbXyxInfo` VALUES ('谢志宏', '350203195802163032', '100007', '1', 'C404519454113792');
INSERT INTO `HmbXyxInfo` VALUES ('林中发', '350221195408083539', '100007', '1', 'C404638656233472');
INSERT INTO `HmbXyxInfo` VALUES ('林耀生', '35021219830201353X', '100007', '1', 'C405176714395648');
INSERT INTO `HmbXyxInfo` VALUES ('戴明喜', '350212198301120544', '100007', '1', 'C405178199179264');
INSERT INTO `HmbXyxInfo` VALUES ('陈亚琴', '350204196005060023', '100007', '1', 'C405246172069888');
INSERT INTO `HmbXyxInfo` VALUES ('叶加水', '350212198201133559', '100007', '1', 'C405794170470400');
INSERT INTO `HmbXyxInfo` VALUES ('杜秋雪', '350205198611191029', '100007', '1', 'C405830879150080');
INSERT INTO `HmbXyxInfo` VALUES ('王丽远', '350203195705283040', '100007', '1', 'C405940556005376');
INSERT INTO `HmbXyxInfo` VALUES ('叶丑', '350221195408063554', '100007', '1', 'C406165983199232');
INSERT INTO `HmbXyxInfo` VALUES ('陈晓龙', '350204197608176038', '100007', '1', 'C406167333765120');
INSERT INTO `HmbXyxInfo` VALUES ('张黎景', '350211197502193028', '100007', '1', 'C406194961645568');
INSERT INTO `HmbXyxInfo` VALUES ('陈美治', '350206197802280026', '100007', '1', 'C406504002158592');
INSERT INTO `HmbXyxInfo` VALUES ('吴秀来', '350582198003313044', '100007', '1', 'C406569424912384');
INSERT INTO `HmbXyxInfo` VALUES ('张旭明', '350211198007103042', '100007', '1', 'C406572138627072');
INSERT INTO `HmbXyxInfo` VALUES ('颜汝阵', '350211195611133025', '100007', '1', 'C406598197837824');
INSERT INTO `HmbXyxInfo` VALUES ('张国全', '350211195001043030', '100007', '1', 'C406603923062784');
INSERT INTO `HmbXyxInfo` VALUES ('陈丽凰', '350221197804023529', '100007', '1', 'C406629424431104');
INSERT INTO `HmbXyxInfo` VALUES ('叶月琼', '35022119560302354X', '100007', '1', 'C407752291647488');
INSERT INTO `HmbXyxInfo` VALUES ('张玉清', '350627197406010546', '100007', '1', 'C407988581957632');
INSERT INTO `HmbXyxInfo` VALUES ('吴玉香', '35042619881207354X', '100007', '1', 'C408008538456064');
INSERT INTO `HmbXyxInfo` VALUES ('魏阿珍', '350221193609032528', '100007', '1', 'C408059423752192');
INSERT INTO `HmbXyxInfo` VALUES ('蔡动力', '350221196605144518', '100007', '1', 'C408077425704960');
INSERT INTO `HmbXyxInfo` VALUES ('邹达聪', '350629194910090011', '100007', '1', 'C408108748767232');
INSERT INTO `HmbXyxInfo` VALUES ('李晓琴', '350823199003284221', '100007', '1', 'C408273022877696');
INSERT INTO `HmbXyxInfo` VALUES ('江幼枝', '350205195709131020', '100007', '1', 'C408306833162240');
INSERT INTO `HmbXyxInfo` VALUES ('张梅', '411528197904012964', '100007', '1', 'C408443982708736');
INSERT INTO `HmbXyxInfo` VALUES ('蔡文肯', '350221197511135017', '100007', '1', 'C408792604868608');
INSERT INTO `HmbXyxInfo` VALUES ('陈山卿', '350221195304041051', '100007', '1', 'C408841040691200');
INSERT INTO `HmbXyxInfo` VALUES ('杨佩芬', '350203196011153043', '100007', '1', 'C409071551250432');
INSERT INTO `HmbXyxInfo` VALUES ('周哲靖', '350204197410043037', '100007', '1', 'C409756602728448');
INSERT INTO `HmbXyxInfo` VALUES ('郑志云', '350204198401016023', '100007', '1', 'C409767075905536');
INSERT INTO `HmbXyxInfo` VALUES ('陈掽发', '350211195109202515', '100007', '1', 'C409772809519104');
INSERT INTO `HmbXyxInfo` VALUES ('杨昆池', '350212198402170030', '100007', '1', 'C409835799576576');
INSERT INTO `HmbXyxInfo` VALUES ('黄顺忠', '350205198609132054', '100007', '1', 'C409877843279872');
INSERT INTO `HmbXyxInfo` VALUES ('蔡缝', '350221195806274525', '100007', '1', 'C410123839209472');
INSERT INTO `HmbXyxInfo` VALUES ('张平红', '350206198002222025', '100007', '1', 'C410262721003520');
INSERT INTO `HmbXyxInfo` VALUES ('陈成发', '35022119780201053X', '100007', '1', 'C410545794580480');
INSERT INTO `HmbXyxInfo` VALUES ('邵美月', '350221195106010027', '100007', '1', 'C410585200197632');
INSERT INTO `HmbXyxInfo` VALUES ('龚素欣', '352122196710150541', '100007', '1', 'C410840146771968');
INSERT INTO `HmbXyxInfo` VALUES ('郑建定', '350212198510100515', '100007', '1', 'C410883369598976');
INSERT INTO `HmbXyxInfo` VALUES ('柯艺轻', '350221197008183521', '100007', '1', 'C410914575220736');
INSERT INTO `HmbXyxInfo` VALUES ('李国祥', '350321196701203018', '100007', '1', 'C410935546740736');
INSERT INTO `HmbXyxInfo` VALUES ('曾志清', '350628197910290539', '100007', '1', 'C410972527919104');
INSERT INTO `HmbXyxInfo` VALUES ('龚素谦', '352122196711150527', '100007', '1', 'C410993700765696');
INSERT INTO `HmbXyxInfo` VALUES ('洪环', '35022119510406104X', '100007', '1', 'C411184990388224');
INSERT INTO `HmbXyxInfo` VALUES ('吴建伟', '350221196212061535', '100007', '1', 'C411186340954112');
INSERT INTO `HmbXyxInfo` VALUES ('许毅芳', '350204197611242040', '100007', '1', 'C411189251801088');
INSERT INTO `HmbXyxInfo` VALUES ('叶清火', '350221198012310014', '100007', '1', 'C411197019652096');
INSERT INTO `HmbXyxInfo` VALUES ('郭乞', '350221195708065017', '100007', '1', 'C411236479664128');
INSERT INTO `HmbXyxInfo` VALUES ('林进士', '350221198002071515', '100007', '1', 'C411271355301888');
INSERT INTO `HmbXyxInfo` VALUES ('李冰心', '350204194011220020', '100007', '1', 'C411278506590208');
INSERT INTO `HmbXyxInfo` VALUES ('方西芳', '350212198202220590', '100007', '1', 'C411280540827648');
INSERT INTO `HmbXyxInfo` VALUES ('张翠梅', '350211195203164025', '100007', '1', 'C411359519571968');
INSERT INTO `HmbXyxInfo` VALUES ('郑素霞', '350221196706141041', '100007', '1', 'C411553917173760');
INSERT INTO `HmbXyxInfo` VALUES ('邬炳耀', '350203195306131031', '100007', '1', 'C411569054416896');
INSERT INTO `HmbXyxInfo` VALUES ('叶文显', '350221197711025015', '100007', '1', 'C411931895398400');
INSERT INTO `HmbXyxInfo` VALUES ('黄蔚芬', '35262319760929002X', '100007', '1', 'C412034358050816');
INSERT INTO `HmbXyxInfo` VALUES ('张宝龙', '350211198709193038', '100007', '1', 'C412270157627392');
INSERT INTO `HmbXyxInfo` VALUES ('王雅贤', '350212199005141548', '100007', '1', 'C412276923039744');
INSERT INTO `HmbXyxInfo` VALUES ('陈婷', '350623199108155783', '100007', '1', 'C412359404027904');
INSERT INTO `HmbXyxInfo` VALUES ('王跃美', '350211195504133046', '100007', '1', 'C412386574729216');
INSERT INTO `HmbXyxInfo` VALUES ('林庆全', '350221196708153556', '100007', '1', 'C412391016497152');
INSERT INTO `HmbXyxInfo` VALUES ('张庆祝', '350221195208182532', '100007', '1', 'C412423014842368');
INSERT INTO `HmbXyxInfo` VALUES ('周少龙', '362525196407143317', '100007', '1', 'C412428681347072');
INSERT INTO `HmbXyxInfo` VALUES ('许梅兰', '350221198109040540', '100007', '1', 'C412660949319680');
INSERT INTO `HmbXyxInfo` VALUES ('林华振', '350205197010011059', '100007', '1', 'C412715336859648');
INSERT INTO `HmbXyxInfo` VALUES ('庄梅郑', '350211197312253528', '100007', '1', 'C412740368465920');
INSERT INTO `HmbXyxInfo` VALUES ('杜志超', '350205198709041010', '100007', '1', 'C412749574963200');
INSERT INTO `HmbXyxInfo` VALUES ('康冰育', '350221196503111512', '100007', '1', 'C412766347984896');
INSERT INTO `HmbXyxInfo` VALUES ('郭淮炫', '350205198104091031', '100007', '1', 'C412773411192832');
INSERT INTO `HmbXyxInfo` VALUES ('陈美好', '350221195106261029', '100007', '1', 'C412795531952128');
INSERT INTO `HmbXyxInfo` VALUES ('李荣', '422725197410300063', '100007', '1', 'C412976163848192');
INSERT INTO `HmbXyxInfo` VALUES ('陈晓芹', '350212199209035528', '100007', '1', 'C413015711940608');
INSERT INTO `HmbXyxInfo` VALUES ('林嫦娥', '350221195402191061', '100007', '1', 'C413015883907072');
INSERT INTO `HmbXyxInfo` VALUES ('胡集贺', '350205198301270012', '100007', '1', 'C413032862449664');
INSERT INTO `HmbXyxInfo` VALUES ('黄锦木', '350623198104172717', '100007', '1', 'C413116295544832');
INSERT INTO `HmbXyxInfo` VALUES ('林溢沣', '350524199406030015', '100007', '1', 'C413164500680704');
INSERT INTO `HmbXyxInfo` VALUES ('林丽琼', '350205196310141029', '100007', '1', 'C413411876536320');
INSERT INTO `HmbXyxInfo` VALUES ('张爱治', '350211195708253541', '100007', '1', 'C413420659408896');
INSERT INTO `HmbXyxInfo` VALUES ('郑建元', '350211195707203534', '100007', '1', 'C413442796945408');
INSERT INTO `HmbXyxInfo` VALUES ('吴鸿阳', '350212198303031510', '100007', '1', 'C413479450968064');
INSERT INTO `HmbXyxInfo` VALUES ('林春长', '350221197205252514', '100007', '1', 'C413486212186112');
INSERT INTO `HmbXyxInfo` VALUES ('李爱真', '350524196910050046', '100007', '1', 'C413495808753664');
INSERT INTO `HmbXyxInfo` VALUES ('柳艳萍', '350425198701170324', '100007', '1', 'C413528830509056');
INSERT INTO `HmbXyxInfo` VALUES ('魏文厦', '350204196507082011', '100007', '1', 'C413532664102912');
INSERT INTO `HmbXyxInfo` VALUES ('黄端', '350221197603025069', '100007', '1', 'C413798406815744');
INSERT INTO `HmbXyxInfo` VALUES ('王保贝', '350221196701031521', '100007', '1', 'C413846335127552');
INSERT INTO `HmbXyxInfo` VALUES ('吴国荣', '350203195607142033', '100007', '1', 'C413882632634368');
INSERT INTO `HmbXyxInfo` VALUES ('蔡志朋', '350221196612256016', '100007', '1', 'C413891872686080');
INSERT INTO `HmbXyxInfo` VALUES ('王艺雯', '350204200210070545', '100007', '1', 'C414119745028096');
INSERT INTO `HmbXyxInfo` VALUES ('杨彩花', '350221195709065545', '100007', '1', 'C414121234006016');
INSERT INTO `HmbXyxInfo` VALUES ('林树金', '350221195302242036', '100007', '1', 'C414254445101056');
INSERT INTO `HmbXyxInfo` VALUES ('林圳耀', '350524197312050518', '100007', '1', 'C414278772064256');
INSERT INTO `HmbXyxInfo` VALUES ('郑美珍', '350583197604164381', '100007', '1', 'C414604413632512');
INSERT INTO `HmbXyxInfo` VALUES ('叶爱国', '350205193907060017', '100007', '1', 'C414769690181632');
INSERT INTO `HmbXyxInfo` VALUES ('余雅婷', '350212198301070049', '100007', '1', 'C414818868396032');
INSERT INTO `HmbXyxInfo` VALUES ('叶清河', '350221196904244519', '100007', '1', 'C414823096254464');
INSERT INTO `HmbXyxInfo` VALUES ('蔡锡平', '35062819590305001X', '100007', '1', 'C414826854350848');
INSERT INTO `HmbXyxInfo` VALUES ('叶永赐', '350221196307184511', '100007', '1', 'C414835062603776');
INSERT INTO `HmbXyxInfo` VALUES ('蔡火灿', '35021219890818507X', '100007', '1', 'C414894999207936');
INSERT INTO `HmbXyxInfo` VALUES ('王智勇', '350221198006243513', '100007', '1', 'C414979929669633');
INSERT INTO `HmbXyxInfo` VALUES ('庄鸿祥', '350211195705234011', '100007', '1', 'C414982991511552');
INSERT INTO `HmbXyxInfo` VALUES ('彭莲', '350221194612114529', '100007', '1', 'C414984107196416');
INSERT INTO `HmbXyxInfo` VALUES ('陈水白', '350221195708134035', '100007', '1', 'C414988678987776');
INSERT INTO `HmbXyxInfo` VALUES ('石云山', '350204196310213057', '100007', '1', 'C414989438156800');
INSERT INTO `HmbXyxInfo` VALUES ('庄水能', '350221194805290019', '100007', '1', 'C415176474755072');
INSERT INTO `HmbXyxInfo` VALUES ('林亚香', '350221196506020528', '100007', '1', 'C415192975278080');
INSERT INTO `HmbXyxInfo` VALUES ('辛援', '350221193702084525', '100007', '1', 'C415226919780352');
INSERT INTO `HmbXyxInfo` VALUES ('沈赞', '350221196611281076', '100007', '1', 'C415266992160768');
INSERT INTO `HmbXyxInfo` VALUES ('林志威', '350205198610041037', '100007', '1', 'C415295970607104');
INSERT INTO `HmbXyxInfo` VALUES ('林明瑜', '350202194809301046', '100007', '1', 'C415313066590208');
INSERT INTO `HmbXyxInfo` VALUES ('黄淑霞', '350204195905313028', '100007', '1', 'C415343575957504');
INSERT INTO `HmbXyxInfo` VALUES ('叶曾', '350221193404304518', '100007', '1', 'C415346453250048');
INSERT INTO `HmbXyxInfo` VALUES ('陈炳结', '350204197501173013', '100007', '1', 'C415678507909120');
INSERT INTO `HmbXyxInfo` VALUES ('王智巧', '350205198110172014', '100007', '1', 'C415737576292352');
INSERT INTO `HmbXyxInfo` VALUES ('叶秀凤', '350203195706091024', '100007', '1', 'C416018091343872');
INSERT INTO `HmbXyxInfo` VALUES ('黄莉容', '350521198308243064', '100007', '1', 'C416655222898688');
INSERT INTO `HmbXyxInfo` VALUES ('张溪', '510521200511070605', '100007', '1', 'C416661518548992');
INSERT INTO `HmbXyxInfo` VALUES ('林美丽', '350221196903062529', '100007', '1', 'C416667424129024');
INSERT INTO `HmbXyxInfo` VALUES ('李秀霞', '350525193903246828', '100007', '1', 'C416671970754560');
INSERT INTO `HmbXyxInfo` VALUES ('范泽琳', '350321199511073914', '100007', '1', 'C417455319941120');
INSERT INTO `HmbXyxInfo` VALUES ('郭耀辉', '350205197003260030', '100007', '1', 'C418189822263296');
INSERT INTO `HmbXyxInfo` VALUES ('陈月真', '350203196307300022', '100007', '1', 'C418250102800384');
INSERT INTO `HmbXyxInfo` VALUES ('陈济琛', '350203195010141011', '100007', '1', 'C418546568790016');
INSERT INTO `HmbXyxInfo` VALUES ('蔡书', '350221196308085013', '100007', '1', 'C418554793820160');
INSERT INTO `HmbXyxInfo` VALUES ('林若望', '350204194412151011', '100007', '1', 'C419303816822784');
INSERT INTO `HmbXyxInfo` VALUES ('陈琼平', '35042619670308104X', '100007', '1', 'C419326520590336');
INSERT INTO `HmbXyxInfo` VALUES ('黄加利', '35020319590507303X', '100007', '1', 'C419666515066880');
INSERT INTO `HmbXyxInfo` VALUES ('赵美玉', '350203196207312042', '100007', '1', 'C419669270724608');
INSERT INTO `HmbXyxInfo` VALUES ('洪勇挺', '350221197910262515', '100007', '1', 'C419688195424256');
INSERT INTO `HmbXyxInfo` VALUES ('江端红', '350203196307173027', '100007', '1', 'C420424539045888');
INSERT INTO `HmbXyxInfo` VALUES ('赵玉龙', '350203195701112017', '100007', '1', 'C420453945311232');
INSERT INTO `HmbXyxInfo` VALUES ('聂欣欣', '350204198809090024', '100007', '1', 'C420606970298368');
INSERT INTO `HmbXyxInfo` VALUES ('陈焉', '350221196705213023', '100007', '1', 'C420998797983744');
INSERT INTO `HmbXyxInfo` VALUES ('洪招治', '35020419640614202X', '100007', '1', 'C421024832028672');
INSERT INTO `HmbXyxInfo` VALUES ('洪故', '350221195207252527', '100007', '1', 'C421106776145920');
INSERT INTO `HmbXyxInfo` VALUES ('吴再发', '350420196307190035', '100007', '1', 'C421151638421504');
INSERT INTO `HmbXyxInfo` VALUES ('王建福', '350205196502161016', '100007', '1', 'C421353414066177');
INSERT INTO `HmbXyxInfo` VALUES ('郑慧茹', '350204197708026520', '100007', '1', 'C421389636075520');
INSERT INTO `HmbXyxInfo` VALUES ('黄山峰', '350221196006235557', '100007', '1', 'C421470695194624');
INSERT INTO `HmbXyxInfo` VALUES ('蔡文晓', '35020319661006101X', '100007', '1', 'C421504975241216');
INSERT INTO `HmbXyxInfo` VALUES ('王金莲', '350204194105052021', '100007', '1', 'C421880772296704');
INSERT INTO `HmbXyxInfo` VALUES ('毕建伟', '350204195411043013', '100007', '1', 'C422101732425728');
INSERT INTO `HmbXyxInfo` VALUES ('林素演', '350221198112160527', '100007', '1', 'C422102386737152');
INSERT INTO `HmbXyxInfo` VALUES ('蔡水江', '350221196411031515', '100007', '1', 'C422227246972929');
INSERT INTO `HmbXyxInfo` VALUES ('丁玉琴', '35020319580408002X', '100007', '1', 'C422958264090624');
INSERT INTO `HmbXyxInfo` VALUES ('付忠华', '232602195902221017', '100007', '1', 'C424705158152192');
-- ----------------------------
-- Triggers structure for table HmbXyxInfo
-- ----------------------------
DROP TRIGGER IF EXISTS `xyxinfo_update`;
delimiter ;;
CREATE TRIGGER `xyxinfo_update` AFTER UPDATE ON `HmbXyxInfo` FOR EACH ROW BEGIN
delete from huixiabao.HmbXyxInfo_Update u where u.xyxNo = NEW.xyxNo;
INSERT INTO huixiabao.HmbXyxInfo_Update ( xyxNo, update_time )
VALUES
(
new.xyxNo,
SYSDATE());
END
;;
delimiter ;
-- ----------------------------
-- Triggers structure for table HmbXyxInfo
-- ----------------------------
DROP TRIGGER IF EXISTS `xyxinfo_insert`;
delimiter ;;
CREATE TRIGGER `xyxinfo_insert` AFTER INSERT ON `HmbXyxInfo` FOR EACH ROW BEGIN
delete from huixiabao.HmbXyxInfo_Update u where u.xyxNo = NEW.xyxNo;
INSERT INTO huixiabao.HmbXyxInfo_Update ( xyxNo, update_time )
VALUES
(
new.xyxNo,
SYSDATE());
END
;;
delimiter ;
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -0,0 +1,30 @@
/*
Navicat Premium Data Transfer
Source Server : mysql - 10.39.0.85
Source Server Type : MySQL
Source Server Version : 90200
Source Host : 10.39.0.85:3306
Source Schema : huixiabao
Target Server Type : MySQL
Target Server Version : 90200
File Encoding : 65001
Date: 19/03/2025 15:25:30
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for HmbXyxInfo_Update
-- ----------------------------
DROP TABLE IF EXISTS `HmbXyxInfo_Update`;
CREATE TABLE `HmbXyxInfo_Update` (
`xyxNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '小药箱编号。',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`xyxNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '小药箱信息更新记录表,表中有数据时,表示该小药箱记录需向医保局发送更新记录。' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -0,0 +1 @@
赵瑞兰

9
文档/request.json Normal file
View File

@ -0,0 +1,9 @@
{
"chs_fjs_appid": "",
"chs_fjs_appsecret": "",
"chs_fjs_token": "",
"chs_fjs_funid": "",
"chs_fjs_timestamp": "",
"chs_fjs_encdata": "",
"chs_fjs_sign": ""
}

33
文档/sm2_expl.json Normal file
View File

@ -0,0 +1,33 @@
{
"appId": "43AF047BBA47FC8A1AE8EFB232BDBBCB",
"data": {
"appId": "43AF047BBA47FC8A1AE8EFB232BDBBCB",
"appUserId": "o8z4C5avQXqC0aWFPf1Mzu6D7WCQ_bd",
"idNo": "350181199011193519",
"idType": "01",
"phoneNumber": "13763873033",
"userName": "测试"
},
"encType": "SM4",
"signData": "URVQNdVNn5mz2EhKZhLTlXNwAWTSncFoSe8Ilx7jhn81eABJ46sdRRN1ZiAiQjPUTixG9bwqEhiJupHRGmyO5w==",
"signType": "SM2",
"timestamp": "20200207175759",
"transType": "ec.gen.index",
"version": "1.0.0"
}
appId=43AF047BBA47FC8A1AE8EFB232BDBBCB&data=
{
"appId":"43AF047BBA47FC8A1AE8EFB232BDBBCB",
"appUserId":"o8z4C5avQXqC0aWFPf1Mzu6D7WCQ_bd",
"idNo":"350181199011193519",
"idType":"01",
"phoneNumber":"13763873033",
"userName":"测试"
}
&encType=SM4
&signType=SM2
&timestamp=20200207175759
&transType=ec.gen.index
&version=1.0.0
&key=4117E877F5FA0A0188891283E4B617D5

BIN
文档/地址.xlsx Normal file

Binary file not shown.

View File

@ -0,0 +1,23 @@
public static void main(String[] args) {
String url = "";
String appId = "待定";
String appSecret = "待定";
String funId = "xxx";
SignTypeEnum signType = SignTypeEnum.SM3;
String signKey = "待定";
EncryptionModeEnum encType = EncryptionModeEnum.SM4;
String encKey = "A5B6E00DA599G56C41ABFE23A74E6E60";
try {
DefaultZephyrClient client = new DefaultZephyrClient(url, funId, appId, appSecret,
signType, signKey, encType, encKey);
DefaultZephyrRequest req = new DefaultZephyrRequest();
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("code", "XXXXXXXXXXXXXXXXXX");
jsonObject1.put("scene_code", "XXX");
req.setData(jsonObject1);
DefaultZephyrResponse resp = client.execute(req);
System.out.println(resp.getData());
} catch (ZephyrApiException e) {
e.printStackTrace();
}
}

View File

@ -0,0 +1,6 @@
appid:hxb-tb
appSecret:60F468FB46170DD4CF6CBECE215DBFC0
signKey:1A2F447BD0F930798D8031B137EC6E25
encKey:08307695B1668EB9FD6210250FED874F

Binary file not shown.

Binary file not shown.