在接收2017 数据类型时进行业务处理,筛选出多次扫码的药品追溯码并做记录

This commit is contained in:
daichao 2025-06-24 15:59:40 +08:00
parent 440014eb96
commit de104ebfe0
10 changed files with 212 additions and 10 deletions

View File

@ -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-10199001-9002) 应用信息2011-20202051-2053
testProv("2011");
testProv("2017");
}
public static void testProv(String subType) throws Exception {

View File

@ -0,0 +1,20 @@
package com.alihealth.d2d.provtest.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 药品追溯码多次扫码记录 前端控制器
* </p>
*
* @author Jason
* @since 2025-06-24
*/
@Controller
@RequestMapping("/multy-sacn-code-record")
public class MultySacnCodeRecordController {
}

View File

@ -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;
/**
* <p>
* 药品追溯码多次扫码记录
* </p>
*
* @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;
}

View File

@ -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")

View File

@ -0,0 +1,16 @@
package com.alihealth.d2d.provtest.mapper;
import com.alihealth.d2d.provtest.domain.MultySacnCodeRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 药品追溯码多次扫码记录 Mapper 接口
* </p>
*
* @author Jason
* @since 2025-06-24
*/
public interface MultySacnCodeRecordMapper extends BaseMapper<MultySacnCodeRecord> {
}

View File

@ -0,0 +1,16 @@
package com.alihealth.d2d.provtest.service;
import com.alihealth.d2d.provtest.domain.MultySacnCodeRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 药品追溯码多次扫码记录 服务类
* </p>
*
* @author Jason
* @since 2025-06-24
*/
public interface IMultySacnCodeRecordService extends IService<MultySacnCodeRecord> {
}

View File

@ -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<DrugRetailAndUseApplyInfo> getEntityClass();
protected abstract IService<DrugRetailAndUseApplyInfo> getService();
protected abstract DrugRetailAndUseApplyInfo convertToEntity(EventBody eventBody, ItemDetail item, InstanceDetail detail, String eventId);
@Override
public void handle(VTTSEventS eventS, String eventId) {
List<DrugRetailAndUseApplyInfo> 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<String> ypzsmList = entities.stream().map(entity -> entity.getYpzsm()).collect(Collectors.toList());
List<DrugRetailAndUseApplyInfo> existedList = getService().getBaseMapper().selectList(new QueryWrapper<DrugRetailAndUseApplyInfo>().lambda()
.in(DrugRetailAndUseApplyInfo::getYpzsm, ypzsmList)
);
getService().saveBatch(entities);
}
}
}

View File

@ -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<DrugRetailAndUseApplyInfo> {
public class SubType2017Handler extends EventData2017Handler {
@Autowired
private IDrugRetailAndUseApplyInfoService service;

View File

@ -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;
/**
* <p>
* 药品追溯码多次扫码记录 服务实现类
* </p>
*
* @author Jason
* @since 2025-06-24
*/
@Service
public class MultySacnCodeRecordServiceImpl extends ServiceImpl<MultySacnCodeRecordMapper, MultySacnCodeRecord> implements IMultySacnCodeRecordService {
}

View File

@ -0,0 +1,5 @@
<?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.MultySacnCodeRecordMapper">
</mapper>