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 @@ + + + + +