修改优化

This commit is contained in:
huzhengkao 2025-06-05 10:36:39 +08:00
parent 45f372cec8
commit 3c2f6560d0
28 changed files with 634 additions and 221 deletions

View File

@ -1,17 +1,20 @@
CREATE TABLE receive_data_log (
event_id VARCHAR(32) PRIMARY KEY COMMENT '事件流水号',
process_id VARCHAR(32) NOT NULL COMMENT '传输标记号',
event_type VARCHAR(100) NOT NULL COMMENT '数据文件内容主业务类型',
sub_type VARCHAR(50) NOT NULL COMMENT '数据文件内容子业务类型',
data TEXT COMMENT '数据文件内容',
ver VARCHAR(10) COMMENT 'API协议版本',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除(0-否 1-是)',
INDEX idx_process_id (process_id),
INDEX idx_event_type (event_type),
INDEX idx_sub_type (sub_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='接收数据日志信息表';
CREATE TABLE `receive_data_log` (
`event_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件流水号',
`process_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '传输标记号',
`event_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据文件内容主业务类型',
`event_type_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据文件内容主业务类型名称',
`sub_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据文件内容子业务类型',
`sub_type_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据文件内容子业务类型名称',
`data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '数据文件内容',
`ver` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API协议版本',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(0-否 1-是)',
PRIMARY KEY (`event_id`) USING BTREE,
KEY `idx_process_id` (`process_id`) USING BTREE,
KEY `idx_event_type` (`event_type`) USING BTREE,
KEY `idx_sub_type` (`sub_type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='接收数据日志信息表';
CREATE TABLE domestic_pharma_base_info (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
@ -45,4 +48,33 @@ CREATE TABLE domestic_pharma_base_info (
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除(0-否 1-是)',
INDEX idx_jnypscqymc (jnypscqymc),
INDEX idx_zsdzszxszzq (zsdzszxszzq)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='境内药品生产企业基本信息数据表';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='境内药品生产企业基本信息数据表';
CREATE TABLE `domestic_drug_production_apply_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`event_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件流水号',
`rec_time` datetime NOT NULL COMMENT '事件响应时间',
`ypzsm` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '药品追溯码',
`syjbzypzsm` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '上一级包装药品追溯码',
`bzcj` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '包装层级',
`ymzt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '暂无',
`tyshxydmscqy` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '统一社会信用代码',
`scqymc` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '境内药品生产企业名称',
`yptymc` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '药品通用名称',
`gjypbsm` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国家药品标识码',
`ymscph` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '药品生产批号',
`scrq` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '药品生产日期',
`ymyxqjzrq` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '药品有效期截止日期',
`scsl` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '生产数量',
`scdz` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '生产地址',
`rkdbh` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单编号',
`rksj` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库时间',
`rkdwmc` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单位名称',
`rkdwtyshxydm` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单位统一社会信用代码',
`rkdwlx` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单位类型',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(0-否 1-是)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国产药品生产信息数据子集';

View File

@ -6,13 +6,19 @@ import com.alihealth.d2d.provtest.utils.Base64;
import com.alihealth.d2d.provtest.utils.EventPojo;
import com.alihealth.d2d.provtest.utils.KeyStoreUtil;
import com.alihealth.d2d.provtest.utils.StreamUtil;
import org.springframework.util.ResourceUtils;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.*;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
@ -49,20 +55,26 @@ public class ProvTestClient {
private static final String algorithm = "RSA";
private static final String XML_DIRECTORY = "D:\\ynyp\\药品追溯\\省市对接药品v0.19-通用版\\省市对接药品v0.19-通用版\\数据报文示例\\";
public static void main(String[] args) throws Exception {
//数据文件内容主业务类型 10基础信息数据 20应用信息数据
//subType数据文件内容子业务类型 详见数据类型字典表 基本信息(1011-10199001-9002) 应用信息2011-20202051-2053
testProv("2011");
}
public static void testProv(String subType) throws Exception{
//入参
String fileName = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 20);
//需要同步的xml
String data = StreamUtil.getStreamContent(fileName, getData());
//需要同步的xml(10-基本信息集 20-应用信息集)
String data = StreamUtil.getStreamContent(fileName, getData(subType));
//流水号
String processId = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 20);
//事件编号
String eventId = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 20);
//数据文件内容主业务类型 10基础信息数据
//20应用信息数据
String eventType = "10";
//数据文件内容子业务类型 详见数据类型字典表
String subType = "1011";
//数据文件内容主业务类型 10基础信息数据 20应用信息数据
//subType数据文件内容子业务类型 详见数据类型字典表
//获取公钥
String publicKey = getPublicKey();
@ -86,6 +98,10 @@ public class ProvTestClient {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("process_id", processId);
paramMap.put("event_id", eventId);
String eventType="10";
if(subType.startsWith("20")){//20开头
eventType="20";
}
paramMap.put("event_type", eventType);
paramMap.put("event", JSONObject.toJSONString(eventPojo));
paramMap.put("timestamp", timestamp);
@ -97,7 +113,6 @@ public class ProvTestClient {
System.out.println(body);
}
/**
@ -178,191 +193,23 @@ public class ProvTestClient {
return dateFormat.format(date);
}
/**
* 获取用于传输的xml
* 动态获取文件内容
* @param subType
* @return
* @throws IOException
*/
// private static String getData(){
// return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
// "\n" +
// "<VTTSBasic xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
// " xsi:noNamespaceSchemaLocation=\"1011.xsd\">\n" +
// "\n" +
// " <datasetName>疫苗生产企业基本信息数据子集</datasetName>\n" +
// " <dataset>\n" +
// " <data>\n" +
// " <TYSHXYDM>912101131181555503</TYSHXYDM>\n" +
// " <QYMC>辽宁依生生物制药有限公司</QYMC>\n" +
// " <QYLX>有限公司</QYLX>\n" +
// " <ZSDZ>新城子区财落镇大辛二村</ZSDZ>\n" +
// " <ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
// " <ZSDZSZXSZZQ>210000</ZSDZSZXSZZQ>\n" +
// " <ZSDZSQZZZM>210100</ZSDZSQZZZM>\n" +
// " <ZSDZXZZXXJS>000044</ZSDZXZZXXJS>\n" +
// " <ZSDZXZJDBSC>新城子区财落镇大辛二村</ZSDZXZJDBSC>\n" +
// " <ZSDZCJLLD>新城子区财落镇大辛二村</ZSDZCJLLD>\n" +
// " <ZSDZMPHM>新城子区财落镇大辛二村</ZSDZMPHM>\n" +
// " <FDDBR>张译</FDDBR>\n" +
// " <ZCZB>4105.512万</ZCZB>\n" +
// " <CLRQ>19190101</CLRQ>\n" +
// " <YYQX>2005-06-29至无固定期限</YYQX>\n" +
// " <JYFW>无</JYFW>\n" +
// " <DJJG>沈阳市沈北新区市场监督管理局</DJJG>\n" +
// " <GDDHHM>无</GDDHHM>\n" +
// " <CZHM>无</CZHM>\n" +
// " <DZXX>无</DZXX>\n" +
// " <QYWZ>无</QYWZ>\n" +
// " <LXR>无</LXR>\n" +
// " <LXDH>无</LXDH>\n" +
// " <ZSGPS></ZSGPS> </data>\n" +
// "\n" +
// "\n" +
// " <data>\n" +
// " <TYSHXYDM>91120116681888972M</TYSHXYDM>\n" +
// " <QYMC>康希诺生物股份公司</QYMC>\n" +
// " <QYLX>股份有限公司(中外合资、上市)</QYLX>\n" +
// " <ZSDZ>天津经济技术开发区西区南大街185号西区生物医药园四层401-420号</ZSDZ>\n" +
// " <ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
// " <ZSDZSZXSZZQ>120000</ZSDZSZXSZZQ>\n" +
// " <ZSDZSQZZZM>120000</ZSDZSQZZZM>\n" +
// " <ZSDZXZZXXJS>000035</ZSDZXZZXXJS>\n" +
// " <ZSDZXZJDBSC>西区南大街185号西区生物医药园四层401-420号</ZSDZXZJDBSC>\n" +
// " <ZSDZCJLLD>西区南大街185号西区生物医药园四层401-420号</ZSDZCJLLD>\n" +
// " <ZSDZMPHM>生物医药园四层401-420号</ZSDZMPHM>\n" +
// " <FDDBR>YU XUEFENG宇学峰</FDDBR>\n" +
// " <ZCZB>77706.99万</ZCZB>\n" +
// " <CLRQ>19910101</CLRQ>\n" +
// " <YYQX>2009-01-13至2059-01-12</YYQX>\n" +
// " <JYFW>无</JYFW>\n" +
// " <DJJG>天津市滨海新区市场和质量监督管理局</DJJG>\n" +
// " <GDDHHM>无</GDDHHM>\n" +
// " <CZHM>无</CZHM>\n" +
// " <DZXX>无</DZXX>\n" +
// " <QYWZ>www.cansinotech.com</QYWZ>\n" +
// " <LXR>无</LXR>\n" +
// " <LXDH>无</LXDH>\n" +
// " <ZSGPS></ZSGPS> </data>\n" +
// "\n" +
// "\n" +
// "\n" +
// " <data>\n" +
// " <TYSHXYDM>9132129168412218X6</TYSHXYDM>\n" +
// " <QYMC>江苏金迪克生物技术有限公司</QYMC>\n" +
// " <QYLX>有限公司</QYLX>\n" +
// " <ZSDZ>泰州市郁金路12号</ZSDZ>\n" +
// " <ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
// " <ZSDZSZXSZZQ>320000</ZSDZSZXSZZQ>\n" +
// " <ZSDZSQZZZM>321200</ZSDZSQZZZM>\n" +
// " <ZSDZXZZXXJS>000025</ZSDZXZZXXJS>\n" +
// " <ZSDZXZJDBSC>郁金路12号</ZSDZXZJDBSC>\n" +
// " <ZSDZCJLLD>郁金路12号</ZSDZCJLLD>\n" +
// " <ZSDZMPHM>郁金路12号</ZSDZMPHM>\n" +
// " <FDDBR>余军</FDDBR>\n" +
// " <ZCZB>无</ZCZB>\n" +
// " <CLRQ>19900101</CLRQ>\n" +
// " <YYQX>无</YYQX>\n" +
// " <JYFW>无</JYFW>\n" +
// " <DJJG>无</DJJG>\n" +
// " <GDDHHM>无</GDDHHM>\n" +
// " <CZHM>无</CZHM>\n" +
// " <DZXX>无</DZXX>\n" +
// " <QYWZ>无</QYWZ>\n" +
// " <LXR>无</LXR>\n" +
// " <LXDH>无</LXDH>\n" +
// " <ZSGPS></ZSGPS> </data>\n" +
// "\n" +
// "\n" +
// " <data>\n" +
// " <TYSHXYDM>912200007307650053</TYSHXYDM>\n" +
// " <QYMC>吉林亚泰生物药业股份有限公司</QYMC>\n" +
// " <QYLX>股份有限公司</QYLX>\n" +
// " <ZSDZ>吉林省长春市高新开发区北湖科技开发区高科技中心B区537-A室</ZSDZ>\n" +
// " <ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
// " <ZSDZSZXSZZQ>220000</ZSDZSZXSZZQ>\n" +
// " <ZSDZSQZZZM>220100</ZSDZSQZZZM>\n" +
// " <ZSDZXZZXXJS>000000</ZSDZXZZXXJS>\n" +
// " <ZSDZXZJDBSC>高新开发区北湖科技开发区高科技中心B区537-A室</ZSDZXZJDBSC>\n" +
// " <ZSDZCJLLD>高新开发区北湖科技开发区高科技中心B区537-A室</ZSDZCJLLD>\n" +
// " <ZSDZMPHM>高科技中心B区537-A室</ZSDZMPHM>\n" +
// " <FDDBR>刘晓峰</FDDBR>\n" +
// " <ZCZB>43564.770000万</ZCZB>\n" +
// " <CLRQ>19940307</CLRQ>\n" +
// " <YYQX>2010-06-30至2020-12-31</YYQX>\n" +
// " <JYFW>小容量注射剂(卡介菌多糖核酸注射液)、疫苗[人用狂犬病疫苗(地鼠肾细胞)]生产药品生产许可证有效期至2020年12月31日及技术咨询、技术服务、研究开发医疗器械研发、生产和销售类、第Ⅱ类、第Ⅲ类体外诊断试剂研发、生产及销售消毒产品危险化学品除外的研发、生产及销售。依法须经批准的项目经相关部门批准后方可开展经营活动</JYFW>\n" +
// " <DJJG>吉林省市场监督管理厅</DJJG>\n" +
// " <GDDHHM>无</GDDHHM>\n" +
// " <CZHM>无</CZHM>\n" +
// " <DZXX>无</DZXX>\n" +
// " <QYWZ>无</QYWZ>\n" +
// " <LXR>无</LXR>\n" +
// " <LXDH>无</LXDH>\n" +
// " <ZSGPS></ZSGPS>\n" +
// " </data>\n" +
// " </dataset>\n" +
// " </VTTSBasic>\n";
// }
private static String getData(String subType) throws IOException {
// 构建文件名
String fileName = subType + ".xml";
// 获取文件路径
File file = ResourceUtils.getFile(XML_DIRECTORY + fileName);
Path path = Paths.get(file.getAbsolutePath());
// 读取文件内容并返回
return new String(Files.readAllBytes(path));
private static String getData(){
return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"\n" +
" <VTTSBasic>\n" +
"<datasetName>境内药品生产企业基本信息数据子集</datasetName>\n" +
"<dataset>\n" +
"<data>\n" +
"<TYSHXYDM>911100007635353107</TYSHXYDM>\n" +
"<JNYPSCQYMC>上海药业有限公司</JNYPSCQYMC>\n" +
"<JNYPSCQYLX>股份有限公司</JNYPSCQYLX>\n" +
"<ZSDZ>吉林省长春市高新开发区北湖科技开发区高科技中心B区537-A室 </ZSDZ>\n" +
"<ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
"<ZSDZSZXSZZQ>220000</ZSDZSZXSZZQ>\n" +
"<ZSDZSQZZZM>220100</ZSDZSQZZZM>\n" +
"<ZSDZXZZXXJS>000000</ZSDZXZZXXJS>\n" +
"<ZSDZXZJDBSC>高新开发区北湖科技开发区高科技中心B区537-A室 </ZSDZXZJDBSC>\n" +
"<ZSDZCJLLD>高新开发区北湖科技开发区高科技中心B区537-A室</ZSDZCJLLD>\n" +
"<ZSDZMPHM>高科技中心B区537-A室</ZSDZMPHM>\n" +
"<FDDBR>刘晓峰</FDDBR>\n" +
"<ZCZB>43564.770000万</ZCZB>\n" +
"<CLRQ>19940307</CLRQ>\n" +
"<YYQX>2010-06-30至2020-12-31</YYQX>\n" +
"<JYFW>小容量注射剂</JYFW>\n" +
"<DJJG>上海市闵行区向阳路888号</DJJG>\n" +
"<GDDHHM>0531-8291****</GDDHHM>\n" +
"<CZHM>0531-8291****</CZHM>\n" +
"<DZXX>***@dsyywl.com</DZXX>\n" +
"<QYWZ>www.dsyywl.com.cn</QYWZ>\n" +
"<LXR>张三</LXR>\n" +
"<LXDH>0531-8291****</LXDH>\n" +
"<ZSGPS>113.54,22.19</ZSGPS>\n" +
"</data>\n" +
"<data>\n" +
"<TYSHXYDM>911100007635353107</TYSHXYDM>\n" +
"<JNYPSCQYMC>上海药业有限公司</JNYPSCQYMC>\n" +
"<JNYPSCQYLX>股份有限公司</JNYPSCQYLX>\n" +
"<ZSDZ>吉林省长春市高新开发区北湖科技开发区高科技中心B区537-A室 </ZSDZ>\n" +
"<ZSDZGJHDQ>156</ZSDZGJHDQ>\n" +
"<ZSDZSZXSZZQ>220000</ZSDZSZXSZZQ>\n" +
"<ZSDZSQZZZM>220100</ZSDZSQZZZM>\n" +
"<ZSDZXZZXXJS>000000</ZSDZXZZXXJS>\n" +
"<ZSDZXZJDBSC>高新开发区北湖科技开发区高科技中心B区537-A室 </ZSDZXZJDBSC>\n" +
"<ZSDZCJLLD>高新开发区北湖科技开发区高科技中心B区537-A室</ZSDZCJLLD>\n" +
"<ZSDZMPHM>高科技中心B区537-A室</ZSDZMPHM>\n" +
"<FDDBR>刘晓峰</FDDBR>\n" +
"<ZCZB>43564.770000万</ZCZB>\n" +
"<CLRQ>19940307</CLRQ>\n" +
"<YYQX>2010-06-30至2020-12-31</YYQX>\n" +
"<JYFW>小容量注射剂</JYFW>\n" +
"<DJJG>上海市闵行区向阳路888号</DJJG>\n" +
"<GDDHHM>0531-8291****</GDDHHM>\n" +
"<CZHM>0531-8291****</CZHM>\n" +
"<DZXX>***@dsyywl.com</DZXX>\n" +
"<QYWZ>www.dsyywl.com.cn</QYWZ>\n" +
"<LXR>张三</LXR>\n" +
"<LXDH>0531-8291****</LXDH>\n" +
"<ZSGPS>113.54,22.19</ZSGPS>\n" +
"</data>\n" +
"</dataset>\n" +
"</VTTSBasic> \n";
}

View File

@ -1,10 +1,15 @@
package com.alihealth.d2d.provtest.controller;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alihealth.d2d.provtest.domain.DomesticDrugProductionApplyInfo;
import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo;
import com.alihealth.d2d.provtest.domain.ReceiveDataLog;
import com.alihealth.d2d.provtest.entity.VTTSBasic;
import com.alihealth.d2d.provtest.entity.*;
import com.alihealth.d2d.provtest.enums.BuzStatusEnum;
import com.alihealth.d2d.provtest.enums.EventTypeEnum;
import com.alihealth.d2d.provtest.enums.SubTypeEnum;
import com.alihealth.d2d.provtest.service.IDomesticDrugProductionApplyInfoService;
import com.alihealth.d2d.provtest.service.IDomesticPharmaBaseInfoService;
import com.alihealth.d2d.provtest.service.IReceiveDataLogService;
import com.alihealth.d2d.provtest.service.XmlParserService;
@ -25,6 +30,11 @@ import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -62,6 +72,9 @@ public class ProvTestServerController {
@Autowired
private IReceiveDataLogService receiveDataLogService;
@Autowired
private IDomesticDrugProductionApplyInfoService domesticDrugProductionApplyInfoService;
@RequestMapping("/receive")
public @ResponseBody
Map<String,Object> receive(HttpServletRequest request) throws IOException {
@ -105,7 +118,9 @@ public class ProvTestServerController {
log.setEventId(eventId);
log.setProcessId(processId);
log.setEventType(eventType);
log.setEventTypeName(EventTypeEnum.getNameByType(eventType));
log.setSubType(eventPojo.getSubType());
log.setSubTypeName(SubTypeEnum.getNameByType(eventPojo.getSubType()));
log.setData(eventPojo.getData());
log.setVer(ver);
receiveDataLogService.save(log);
@ -122,19 +137,72 @@ public class ProvTestServerController {
// xml,
// DomesticPharmaBaseInfo.class
// );
VTTSBasic<DomesticPharmaBaseInfo> result = xmlParserService.parseDataXml(
xml,
DomesticPharmaBaseInfo.class
);
List<DomesticPharmaBaseInfo> list = result.getDataset();
if(list!=null && !list.isEmpty()){
list.stream()
.forEach(item -> {
item.setEventId(eventId);
if(eventType.equals("10")){
VTTSBasic<DomesticPharmaBaseInfo> result = xmlParserService.parseDataXml(
xml,
DomesticPharmaBaseInfo.class
);
List<DomesticPharmaBaseInfo> list = result.getDataset();
if(list!=null && !list.isEmpty()){
list.stream()
.forEach(item -> {
item.setEventId(eventId);
});
domesticPharmaBaseInfoService.saveBatch(list);
logger.info("入库的数据条数:{}", list.size());
}
}else{
List<DomesticDrugProductionApplyInfo> list=new ArrayList<>();
VTTSEventS eventS = xmlParserService.parseAppDataXml(xml);
for (EventBody eventBody : eventS.getVttsEvent().getEventBodyList()) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DomesticDrugProductionApplyInfo applyInfo=new DomesticDrugProductionApplyInfo();
applyInfo.setEventId(eventBody.getEventID());
applyInfo.setRecTime(formatter.parse(eventBody.getRecTime()));
EventBasic evtBasic = eventBody.getEvtBasic();
applyInfo.setRkdbh(evtBasic.getString("RKDBH"));
applyInfo.setRksj(evtBasic.getString("RKSJ"));
applyInfo.setRkdwmc(evtBasic.getString("RKDWMC"));
applyInfo.setRkdwtyshxydm(evtBasic.getString("RKDWTYSHXYDM"));
applyInfo.setRkdwlx(evtBasic.getString("RKDWLX"));
for (ItemDetail item : eventBody.getItemList()) {
applyInfo.setTyshxydmscqy(item.getString("TYSHXYDMSCQY"));
applyInfo.setScqymc(item.getString("SCQYMC"));
applyInfo.setYptymc(item.getString("YPTYMC"));
applyInfo.setGjypbsm(item.getString("GJYPBSM"));
applyInfo.setYmscph(item.getString("YMSCPH"));
String formattedDate = LocalDate.parse(
item.getString("SCRQ"),
DateTimeFormatter.ofPattern("yyyyMMdd")
).format(DateTimeFormatter.ISO_LOCAL_DATE); // 直接使用标准格式
applyInfo.setScrq(formattedDate);
applyInfo.setYmyxqjzrq(item.getString("YMYXQJZRQ"));
applyInfo.setScsl(item.getString("SCSL"));
applyInfo.setScdz(item.getString("SCDZ"));
item.getInstanceList().forEach(instance -> {
applyInfo.setYpzsm(instance.getString("YPZSM"));
applyInfo.setSyjbzypzsm(instance.getString("SYJBZYPZSM"));
applyInfo.setBzcj(instance.getString("BZCJ"));
applyInfo.setYmzt(instance.getString("YMZT"));
list.add(applyInfo);
});
domesticPharmaBaseInfoService.saveBatch(list);
}
}
if(!list.isEmpty()){
domesticDrugProductionApplyInfoService.saveBatch(list);
}
}
logger.info("入库的数据条数:{}", list.size());
return ResponseBuilder.success();
}catch (Exception e){

View File

@ -0,0 +1,85 @@
package com.alihealth.d2d.provtest.domain;
import com.alihealth.d2d.provtest.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
import javax.persistence.Column;
import java.util.Date;
/**
* @author Jason 国产药品生产信息数据子集
* @date 2025年06月04日 11:39:02
*/
@Data
@TableName("domestic_drug_production_apply_info")
public class DomesticDrugProductionApplyInfo extends BaseEntity<DomesticDrugProductionApplyInfo> {
//private String eventId;
@Column(name = "rec_time")
private Date recTime;
@Column(name = "ypzsm")
private String ypzsm;
@Column(name = "syjbzypzsm")
private String syjbzypzsm;
@Column(name = "bzcj")
private String bzcj;
@Column(name = "ymzt")
private String ymzt;
@Column(name = "tyshxydmscqy")
private String tyshxydmscqy;
@Column(name = "scqymc")
private String scqymc;
@Column(name = "yptymc")
private String yptymc;
@Column(name = "gjypbsm")
private String gjypbsm;
@Column(name = "ymscph")
private String ymscph;
@Column(name = "scrq")
private String scrq;
@Column(name = "ymyxqjzrq")
private String ymyxqjzrq;
@Column(name = "scsl")
private String scsl;
@Column(name = "scdz")
private String scdz;
@Column(name = "rkdbh")
private String rkdbh;
@Column(name = "rksj")
private String rksj;
@Column(name = "rkdwmc")
private String rkdwmc;
@Column(name = "rkdwtyshxydm")
private String rkdwtyshxydm;
@Column(name = "rkdwlx")
private String rkdwlx;
@Override
public Class<DomesticDrugProductionApplyInfo> getEntityClass() {
return DomesticDrugProductionApplyInfo.class;
}
@Override
public String getDatasetName() {
return "国产药品生产信息数据子集";
}
}

View File

@ -26,11 +26,15 @@ public class ReceiveDataLog {
@Column(name = "event_type")
private String eventType;
@Column(name = "event_type_name")
private String eventTypeName;
@Column(name = "sub_type")
private String subType;
@Column(name = "sub_type_name")
private String subTypeName;
@Column(name = "data")

View File

@ -1,5 +1,7 @@
package com.alihealth.d2d.provtest.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import org.springframework.data.annotation.Id;
@ -12,11 +14,9 @@ import java.time.LocalDateTime;
* @date 2025年05月30日 09:55:20
*/
@MappedSuperclass
@XmlTransient
@Data
public abstract class BaseEntity<T extends BaseEntity<T>> implements XmlEntity<T>{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId(type = IdType.AUTO) // 明确指定使用数据库自增
private Long id;
@Column(name = "event_id")

View File

@ -0,0 +1,75 @@
package com.alihealth.d2d.provtest.entity;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author Jason 动态字段基类
* @date 2025年06月03日 16:49:21
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class DynamicFieldsEntity {
// 动态字段存储
@JsonIgnore
protected final Map<String, Object> dynamicFields = new LinkedHashMap<>();
// 原始数据
@JsonIgnore
protected JsonNode rawData;
@JsonAnySetter
public void setDynamicField(String name, Object value) {
dynamicFields.put(name, value);
}
public Object getDynamicField(String name) {
return dynamicFields.get(name);
}
@JsonAnyGetter
public Map<String, Object> getDynamicFields() {
return Collections.unmodifiableMap(dynamicFields);
}
@JsonProperty("value")
protected void unpackNested(JsonNode node) {
this.rawData = node;
if (node != null) {
node.fields().forEachRemaining(entry -> {
dynamicFields.put(entry.getKey(),
entry.getValue().isValueNode() ?
entry.getValue().asText() :
entry.getValue());
});
}
}
// 实用方法
public boolean hasField(String name) {
return dynamicFields.containsKey(name);
}
public String getString(String name) {
Object val = dynamicFields.get(name);
return val != null ? val.toString() : null;
}
public Integer getInt(String name) {
try {
return Integer.parseInt(getString(name));
} catch (Exception e) {
return null;
}
}
public Date getDate(String name) {
// 实现日期转换逻辑
return null;
}
}

View File

@ -0,0 +1,8 @@
package com.alihealth.d2d.provtest.entity;
/**
* @author Jason 事件基本信息 (动态字段)
* @date 2025年06月03日 16:51:24
*/
public class EventBasic extends DynamicFieldsEntity{
}

View File

@ -0,0 +1,28 @@
package com.alihealth.d2d.provtest.entity;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
import java.util.List;
/**
* @author Jason
* @date 2025年06月03日 16:37:33
*/
@Data
public class EventBody {
@JacksonXmlProperty(localName = "recTime")
private String recTime;
@JacksonXmlProperty(localName = "eventID")
private String eventID;
@JacksonXmlProperty(localName = "evtBasic")
private EventBasic evtBasic;
@JacksonXmlElementWrapper(localName = "itemList")
@JacksonXmlProperty(localName = "itemDetail")
private List<ItemDetail> itemList;
}

View File

@ -0,0 +1,8 @@
package com.alihealth.d2d.provtest.entity;
/**
* @author Jason
* @date 2025年06月03日 16:52:28
*/
public class InstanceDetail extends DynamicFieldsEntity{
}

View File

@ -0,0 +1,19 @@
package com.alihealth.d2d.provtest.entity;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
import java.util.List;
/**
* @author Jason
* @date 2025年06月03日 16:52:08
*/
@Data
public class ItemDetail extends DynamicFieldsEntity {
@JacksonXmlElementWrapper(localName = "instanceList")
@JacksonXmlProperty(localName = "instanceDetail")
private List<InstanceDetail> instanceList;
}

View File

@ -0,0 +1,23 @@
package com.alihealth.d2d.provtest.entity;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
import java.util.List;
/**
* @author Jason 应用信息集主事件类
* @date 2025年06月03日 16:36:06
*/
@Data
public class VTTSEvent {
@JacksonXmlProperty(localName = "datasetName")
private String datasetName;
@JacksonXmlElementWrapper(localName = "eventBodyList")
@JacksonXmlProperty(localName = "eventBody")
private List<EventBody> eventBodyList;
}

View File

@ -0,0 +1,24 @@
package com.alihealth.d2d.provtest.entity;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
/**
* @author Jason 应用信息集根元素类
* @date 2025年06月03日 16:34:49
*/
@JacksonXmlRootElement(localName = "VTTSEventS")
public class VTTSEventS {
@JacksonXmlProperty(localName = "VTTSEvent")
private VTTSEvent vttsEvent;
// getter和setter
public VTTSEvent getVttsEvent() {
return vttsEvent;
}
public void setVttsEvent(VTTSEvent vttsEvent) {
this.vttsEvent = vttsEvent;
}
}

View File

@ -0,0 +1,38 @@
package com.alihealth.d2d.provtest.enums;
public enum EventTypeEnum {
EVENTTYPE_10("10", "基础信息数据"),
EVENTTYPE_20("20", "应用信息数据");
private final String type;
private final String name;
EventTypeEnum(String type, String name) {
this.type = type;
this.name = name;
}
public String getType() {
return type;
}
public String getName() {
return name;
}
// 根据类型获取枚举实例
public static EventTypeEnum getByType(String type) {
for (EventTypeEnum typeEnum : values()) {
if (typeEnum.type.equals(type)) {
return typeEnum;
}
}
return null;
}
// 根据类型获取名称
public static String getNameByType(String type) {
EventTypeEnum typeEnum = getByType(type);
return typeEnum != null ? typeEnum.getName() : "未知类型";
}
}

View File

@ -0,0 +1,64 @@
package com.alihealth.d2d.provtest.enums;
/**
* @author Jason 数据文件内容子业务类型
* @date 2025年06月04日 11:08:40
*/
public enum SubTypeEnum {
SUBTYPE_1011("1011", "境内药品生产企业基本信息数据子集"),
SUBTYPE_1012("1012", "境外药品生产企业基本信息数据子集"),
SUBTYPE_1013("1013", "药品生产许可证基本信息数据子集"),
SUBTYPE_1014("1014", "药品经营企业基本信息数据子集"),
SUBTYPE_1015("1015", "药品经营许可证基本信息数据子集"),
SUBTYPE_1016("1016", "药品配送企业基本信息数据子集"),
SUBTYPE_1017("1017", "药品使用单位基本信息数据子集"),
SUBTYPE_1018("1018", "国产药品基本信息数据子集"),
SUBTYPE_1019("1019", "进口药品基本信息数据子集"),
SUBTYPE_9001("9001", "药检报告基础信息数据子集"),
SUBTYPE_9002("9002", "药检报告概览回传基础信息数据子集"),
SUBTYPE_2011("2011", "国产药品生产信息数据子集"),
SUBTYPE_2012("2012", "药品进口信息数据子集"),
SUBTYPE_2013("2013", "药品自检信息数据子集"),
SUBTYPE_2015("2015", "发货单信息数据子集"),
SUBTYPE_2016("2016", "收货单信息数据子集"),
SUBTYPE_2017("2017", "药品零售与药品使用信息数据子集"),
SUBTYPE_2018("2018", "药品召回信息数据子集"),
SUBTYPE_2019("2019", "库存上报基本信息数据子集"),
SUBTYPE_2020("2020", "撤销单"),
SUBTYPE_2051("2051", "温度信息子集-单据与存储设备关系信息"),
SUBTYPE_2052("2052", "温度信息子集-存储设备温度信息"),
SUBTYPE_2053("2053", "温度信息子集-运输温度信息");
private final String type;
private final String name;
SubTypeEnum(String type, String name) {
this.type = type;
this.name = name;
}
public String getType() {
return type;
}
public String getName() {
return name;
}
// 根据类型获取枚举实例
public static SubTypeEnum getByType(String type) {
for (SubTypeEnum typeEnum : values()) {
if (typeEnum.type.equals(type)) {
return typeEnum;
}
}
return null;
}
// 根据类型获取名称
public static String getNameByType(String type) {
SubTypeEnum typeEnum = getByType(type);
return typeEnum != null ? typeEnum.getName() : "未知类型";
}
}

View File

@ -0,0 +1,8 @@
package com.alihealth.d2d.provtest.mapper;
import com.alihealth.d2d.provtest.domain.DomesticDrugProductionApplyInfo;
import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface DomesticDrugProductionApplyInfoMapper extends BaseMapper<DomesticDrugProductionApplyInfo> {
}

View File

@ -0,0 +1,11 @@
package com.alihealth.d2d.provtest.service;
import com.alihealth.d2d.provtest.domain.DomesticDrugProductionApplyInfo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Jason
* @date 2025年06月04日 17:18:31
*/
public interface IDomesticDrugProductionApplyInfoService extends IService<DomesticDrugProductionApplyInfo> {
}

View File

@ -2,6 +2,7 @@ package com.alihealth.d2d.provtest.service;
import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo;
import com.alihealth.d2d.provtest.entity.VTTSBasic;
import com.alihealth.d2d.provtest.entity.VTTSEventS;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.springframework.stereotype.Service;
@ -30,7 +31,7 @@ public class XmlParserService {
/**
* 使用Jackson XML 解析xml
* 使用Jackson XML 解析基本信息xml
* @param xml
* @param dataType
* @return
@ -45,6 +46,16 @@ public class XmlParserService {
return xmlMapper.readValue(xml, type);
}
/**
* 解析应用数据xml
* @param xml
* @return
* @throws Exception
*/
public static VTTSEventS parseAppDataXml(String xml) throws Exception {
return xmlMapper.readValue(xml, VTTSEventS.class);
}
/**
* 解析包含多个data节点的XML

View File

@ -0,0 +1,20 @@
package com.alihealth.d2d.provtest.service.impl;
import com.alihealth.d2d.provtest.domain.DomesticDrugProductionApplyInfo;
import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo;
import com.alihealth.d2d.provtest.mapper.DomesticDrugProductionApplyInfoMapper;
import com.alihealth.d2d.provtest.mapper.DomesticPharmaBaseInfoMapper;
import com.alihealth.d2d.provtest.service.IDomesticDrugProductionApplyInfoService;
import com.alihealth.d2d.provtest.service.IDomesticPharmaBaseInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* @author Jason
* @date 2025年06月04日 17:19:17
*/
@Service
public class DomesticDrugProductionApplyInfoServiceImpl extends ServiceImpl<DomesticDrugProductionApplyInfoMapper, DomesticDrugProductionApplyInfo> implements IDomesticDrugProductionApplyInfoService {
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.alihealth.d2d.provtest.mapper.DomesticDrugProductionApplyInfoMapper">
</mapper>

View File

@ -1,17 +1,30 @@
com\alihealth\d2d\provtest\entity\BaseEntity.class
com\alihealth\d2d\provtest\enums\SubTypeEnum.class
com\alihealth\d2d\provtest\entity\DynamicFieldsEntity.class
com\alihealth\d2d\provtest\factory\EntityFactoryManager.class
com\alihealth\d2d\provtest\mapper\DomesticDrugProductionApplyInfoMapper.class
com\alihealth\d2d\provtest\utils\XmlStringParser.class
com\alihealth\d2d\provtest\service\IReceiveDataLogService.class
com\alihealth\d2d\provtest\entity\VTTSEvent.class
com\alihealth\d2d\provtest\service\impl\DomesticPharmaBaseInfoServiceImpl.class
com\alihealth\d2d\provtest\domain\Test.class
com\alihealth\d2d\provtest\domain\ReceiveDataLog.class
com\alihealth\d2d\provtest\service\XmlParserService.class
com\alihealth\d2d\provtest\entity\ItemDetail.class
com\alihealth\d2d\provtest\mapper\DomesticPharmaBaseInfoMapper.class
com\alihealth\d2d\provtest\service\IDomesticDrugProductionApplyInfoService.class
com\alihealth\d2d\provtest\service\IDomesticPharmaBaseInfoService.class
com\alihealth\d2d\provtest\domain\DomesticDrugProductionApplyInfo.class
com\alihealth\d2d\provtest\utils\RequestWrapper$1.class
com\alihealth\d2d\provtest\utils\RequestWrapper.class
com\alihealth\d2d\provtest\domain\DomesticPharmaBaseInfo.class
com\alihealth\d2d\provtest\service\impl\DomesticDrugProductionApplyInfoServiceImpl.class
com\alihealth\d2d\provtest\utils\BouncyCastlePFXGenerator.class
com\alihealth\d2d\provtest\entity\EventBasic.class
com\alihealth\d2d\provtest\utils\EventPojo.class
com\alihealth\d2d\provtest\mapper\ReceiveDataLogMapper.class
com\alihealth\d2d\provtest\entity\InstanceDetail.class
com\alihealth\d2d\provtest\factory\DomesticPharmaBaseInfoFactory.class
com\alihealth\d2d\provtest\entity\EventBody.class
com\alihealth\d2d\provtest\utils\Base64.class
com\alihealth\d2d\provtest\utils\StreamUtil.class
com\alihealth\d2d\provtest\controller\ProvTestServerController.class
@ -20,6 +33,9 @@ com\alihealth\d2d\provtest\utils\EntityProcessor.class
com\alihealth\d2d\provtest\entity\XmlEntity.class
com\alihealth\d2d\provtest\utils\KeyStoreUtil.class
com\alihealth\d2d\provtest\enums\BuzStatusEnum.class
com\alihealth\d2d\provtest\enums\EventTypeEnum.class
com\alihealth\d2d\provtest\entity\VTTSEventS.class
com\alihealth\d2d\provtest\service\impl\ReceiveDataLogServiceImpl.class
com\alihealth\d2d\provtest\enums\StatusEnum.class
com\alihealth\d2d\provtest\ProvtestApplication.class
com\alihealth\d2d\provtest\entity\VTTSBasic.class

View File

@ -1,26 +1,42 @@
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\VTTSEventS.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\XmlEntity.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\domain\ReceiveDataLog.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\RequestWrapper.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\ItemDetail.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\enums\BuzStatusEnum.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\IDomesticDrugProductionApplyInfoService.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\enums\StatusEnum.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\mapper\DomesticPharmaBaseInfoMapper.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\ProvTestClient.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\ProvtestApplication.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\IReceiveDataLogService.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\StreamUtil.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\controller\ProvTestServerController.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\factory\DomesticPharmaBaseInfoFactory.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\XmlStringParser.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\EventPojo.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\impl\ReceiveDataLogServiceImpl.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\impl\DomesticPharmaBaseInfoServiceImpl.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\BouncyCastlePFXGenerator.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\mapper\ReceiveDataLogMapper.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\DynamicFieldsEntity.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\EntityProcessor.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\EventBody.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\XmlParserService.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\enums\EventTypeEnum.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\enums\SubTypeEnum.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\KeyStoreUtil.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\IDomesticPharmaBaseInfoService.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\domain\Test.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\domain\DomesticDrugProductionApplyInfo.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\Base64.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\utils\ResponseBuilder.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\mapper\DomesticDrugProductionApplyInfoMapper.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\domain\DomesticPharmaBaseInfo.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\EventBasic.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\factory\EntityFactoryManager.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\BaseEntity.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\InstanceDetail.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\factory\EntityFactory.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\service\impl\DomesticDrugProductionApplyInfoServiceImpl.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\VTTSBasic.java
D:\work-tcct\provtest\src\main\java\com\alihealth\d2d\provtest\entity\VTTSEvent.java