diff --git a/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java b/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java
index 7be4011..80c7fb6 100644
--- a/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java
+++ b/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java
@@ -55,13 +55,13 @@ public class ProvTestClient {
private static final String algorithm = "RSA";
- private static final String XML_DIRECTORY = "C:\\Users\\ThinkPad\\Desktop\\pfx证书\\数据报文示例\\";
-// private static final String XML_DIRECTORY = "C:\\Users\\ThinkPad\\Desktop\\真实接收到的数据集\\";
+// private static final String XML_DIRECTORY = "C:\\Users\\ThinkPad\\Desktop\\pfx证书\\数据报文示例\\";
+ private static final String XML_DIRECTORY = "C:\\Users\\ThinkPad\\Desktop\\真实接收到的数据集\\";
public static void main(String[] args) throws Exception {
//数据文件内容主业务类型 10:基础信息数据 20:应用信息数据
//subType数据文件内容子业务类型 详见:数据类型字典表 基本信息(1011-1019、9001-9002) 应用信息(2011-2020、2051-2053)
- testProv("2011");
+ testProv("2017");
}
public static void testProv(String subType) throws Exception {
diff --git a/src/main/java/com/alihealth/d2d/provtest/controller/MultySacnCodeRecordController.java b/src/main/java/com/alihealth/d2d/provtest/controller/MultySacnCodeRecordController.java
new file mode 100644
index 0000000..cc8edf4
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/controller/MultySacnCodeRecordController.java
@@ -0,0 +1,20 @@
+package com.alihealth.d2d.provtest.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ *
+ * 药品追溯码多次扫码记录 前端控制器
+ *
+ *
+ * @author Jason
+ * @since 2025-06-24
+ */
+@Controller
+@RequestMapping("/multy-sacn-code-record")
+public class MultySacnCodeRecordController {
+
+}
diff --git a/src/main/java/com/alihealth/d2d/provtest/domain/MultySacnCodeRecord.java b/src/main/java/com/alihealth/d2d/provtest/domain/MultySacnCodeRecord.java
new file mode 100644
index 0000000..30a05f7
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/domain/MultySacnCodeRecord.java
@@ -0,0 +1,58 @@
+package com.alihealth.d2d.provtest.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 药品追溯码多次扫码记录
+ *
+ *
+ * @author Jason
+ * @since 2025-06-24
+ */
+@Getter
+@Setter
+@TableName("multy_sacn_code_record")
+public class MultySacnCodeRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 药品追溯码
+ */
+ private String ypzsm;
+
+ /**
+ * 数据处理标识:1-已处理,0-未处理
+ */
+ private Integer handleFlag;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+
+ /**
+ * 是否删除(0-否 1-是)
+ */
+ private Integer isDeleted;
+
+
+}
diff --git a/src/main/java/com/alihealth/d2d/provtest/generator/CodeGenerator.java b/src/main/java/com/alihealth/d2d/provtest/generator/CodeGenerator.java
index 2cbee9a..6460f7a 100644
--- a/src/main/java/com/alihealth/d2d/provtest/generator/CodeGenerator.java
+++ b/src/main/java/com/alihealth/d2d/provtest/generator/CodeGenerator.java
@@ -1,10 +1,7 @@
package com.alihealth.d2d.provtest.generator;
-import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
-import com.baomidou.mybatisplus.generator.config.*;
-import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.nio.file.Paths;
@@ -16,8 +13,8 @@ import java.nio.file.Paths;
public class CodeGenerator {
public static void main(String[] args) {
- String tables="drug_delivery_note_apply_info";// 生成多个指定表,逗号分隔
- FastAutoGenerator.create("jdbc:mysql://47.109.202.121:3306/supervisionx_trace_data", "root", "TCCT3.1415926")
+ String tables="multy_sacn_code_record";// 生成多个指定表,逗号分隔
+ FastAutoGenerator.create("jdbc:mysql://192.168.200.45:3306/supervisionx_trace_data", "supervision", "vtHe%$zvtHeQP")
.globalConfig(builder -> builder
.author("Jason")
.outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")
diff --git a/src/main/java/com/alihealth/d2d/provtest/mapper/MultySacnCodeRecordMapper.java b/src/main/java/com/alihealth/d2d/provtest/mapper/MultySacnCodeRecordMapper.java
new file mode 100644
index 0000000..2ab110e
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/mapper/MultySacnCodeRecordMapper.java
@@ -0,0 +1,16 @@
+package com.alihealth.d2d.provtest.mapper;
+
+import com.alihealth.d2d.provtest.domain.MultySacnCodeRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 药品追溯码多次扫码记录 Mapper 接口
+ *
+ *
+ * @author Jason
+ * @since 2025-06-24
+ */
+public interface MultySacnCodeRecordMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/alihealth/d2d/provtest/service/IMultySacnCodeRecordService.java b/src/main/java/com/alihealth/d2d/provtest/service/IMultySacnCodeRecordService.java
new file mode 100644
index 0000000..1ce7b2e
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/service/IMultySacnCodeRecordService.java
@@ -0,0 +1,16 @@
+package com.alihealth.d2d.provtest.service;
+
+import com.alihealth.d2d.provtest.domain.MultySacnCodeRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 药品追溯码多次扫码记录 服务类
+ *
+ *
+ * @author Jason
+ * @since 2025-06-24
+ */
+public interface IMultySacnCodeRecordService extends IService {
+
+}
diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/EventData2017Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventData2017Handler.java
new file mode 100644
index 0000000..a0de00a
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventData2017Handler.java
@@ -0,0 +1,70 @@
+package com.alihealth.d2d.provtest.service.handle;
+
+import com.alihealth.d2d.provtest.domain.DrugRetailAndUseApplyInfo;
+import com.alihealth.d2d.provtest.entity.EventBody;
+import com.alihealth.d2d.provtest.entity.InstanceDetail;
+import com.alihealth.d2d.provtest.entity.ItemDetail;
+import com.alihealth.d2d.provtest.entity.VTTSEventS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public abstract class EventData2017Handler implements EventDataHandler {
+
+ protected final Logger log = LoggerFactory.getLogger(getClass());
+
+ protected abstract Class getEntityClass();
+
+ protected abstract IService getService();
+
+ protected abstract DrugRetailAndUseApplyInfo convertToEntity(EventBody eventBody, ItemDetail item, InstanceDetail detail, String eventId);
+
+ @Override
+ public void handle(VTTSEventS eventS, String eventId) {
+ List entities = new ArrayList<>();
+
+ for (EventBody eventBody : eventS.getVttsEvent().getEventBodyList()) {
+ if (eventBody.getItemList() != null) {
+ for (ItemDetail item : eventBody.getItemList()) {
+ if (item.getInstanceList() != null) {
+ for (InstanceDetail instance : item.getInstanceList()) {
+ try {
+ entities.add(convertToEntity(eventBody, item, instance, eventId));
+ } catch (Exception e) {
+ log.error("转换实体失败", e);
+ }
+ }
+ } else {
+ try {
+ entities.add(convertToEntity(eventBody, item, null, eventId));
+ } catch (Exception e) {
+ log.error("转换实体失败", e);
+ }
+ }
+
+ }
+ } else {
+ try {
+ entities.add(convertToEntity(eventBody, null, null, eventId));
+ } catch (Exception e) {
+ log.error("转换实体失败", e);
+ }
+ }
+ }
+
+ if (!entities.isEmpty()) {
+ //对2017 药品使用与销售数据集进行单独处理,如果出现重复的药品追溯码ypzsm,需要做记录
+ List ypzsmList = entities.stream().map(entity -> entity.getYpzsm()).collect(Collectors.toList());
+ List existedList = getService().getBaseMapper().selectList(new QueryWrapper().lambda()
+ .in(DrugRetailAndUseApplyInfo::getYpzsm, ypzsmList)
+ );
+
+ getService().saveBatch(entities);
+ }
+ }
+}
diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2017Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2017Handler.java
index c4d793b..d1535bd 100644
--- a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2017Handler.java
+++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2017Handler.java
@@ -6,7 +6,7 @@ import com.alihealth.d2d.provtest.entity.EventBody;
import com.alihealth.d2d.provtest.entity.InstanceDetail;
import com.alihealth.d2d.provtest.entity.ItemDetail;
import com.alihealth.d2d.provtest.service.IDrugRetailAndUseApplyInfoService;
-import com.alihealth.d2d.provtest.service.handle.AbstractEventDataHandler;
+import com.alihealth.d2d.provtest.service.handle.EventData2017Handler;
import com.alihealth.d2d.provtest.service.handle.EventSubType;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +17,7 @@ import java.text.SimpleDateFormat;
@Service
@EventSubType("2017")
-public class SubType2017Handler extends AbstractEventDataHandler {
+public class SubType2017Handler extends EventData2017Handler {
@Autowired
private IDrugRetailAndUseApplyInfoService service;
diff --git a/src/main/java/com/alihealth/d2d/provtest/service/impl/MultySacnCodeRecordServiceImpl.java b/src/main/java/com/alihealth/d2d/provtest/service/impl/MultySacnCodeRecordServiceImpl.java
new file mode 100644
index 0000000..3908dbd
--- /dev/null
+++ b/src/main/java/com/alihealth/d2d/provtest/service/impl/MultySacnCodeRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.alihealth.d2d.provtest.service.impl;
+
+import com.alihealth.d2d.provtest.domain.MultySacnCodeRecord;
+import com.alihealth.d2d.provtest.mapper.MultySacnCodeRecordMapper;
+import com.alihealth.d2d.provtest.service.IMultySacnCodeRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 药品追溯码多次扫码记录 服务实现类
+ *
+ *
+ * @author Jason
+ * @since 2025-06-24
+ */
+@Service
+public class MultySacnCodeRecordServiceImpl extends ServiceImpl implements IMultySacnCodeRecordService {
+
+}
diff --git a/src/main/resources/mapper/MultySacnCodeRecordMapper.xml b/src/main/resources/mapper/MultySacnCodeRecordMapper.xml
new file mode 100644
index 0000000..5f1632b
--- /dev/null
+++ b/src/main/resources/mapper/MultySacnCodeRecordMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+