From fb1e9e63b9e4ed9d611da8f4caebd6dccf96d2d5 Mon Sep 17 00:00:00 2001 From: huzhengkao <562572218@qq.com> Date: Thu, 5 Jun 2025 17:35:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=B7=A5=E5=8E=82=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../d2d/provtest/ProvTestClient.java | 2 +- .../d2d/provtest/ProvtestApplication.java | 2 + .../d2d/provtest/config/HandlerConfig.java | 33 +++++++ .../controller/ProvTestServerController.java | 76 ++------------- .../DomesticDrugProductionApplyInfo.java | 30 +++--- .../d2d/provtest/entity/BaseEntity.java | 3 +- .../provtest/factory/EventHandlerFactory.java | 26 ++++++ .../service/EventProcessingService.java | 47 ++++++++++ .../provtest/service/XmlParserService.java | 4 +- .../handle/AbstractEventDataHandler.java | 47 ++++++++++ .../service/handle/EventDataHandler.java | 16 ++++ .../provtest/service/handle/EventSubType.java | 19 ++++ .../handle/business/SubType1011Handler.java | 74 +++++++++++++++ .../handle/business/SubType2011Handler.java | 87 ++++++++++++++++++ .../handle/business/SubType2012Handler.java | 11 +++ .../handle/business/SubType2013Handler.java | 11 +++ .../d2d/provtest/ProvTestClient.class | Bin 7248 -> 7248 bytes .../d2d/provtest/ProvtestApplication.class | Bin 866 -> 928 bytes .../controller/ProvTestServerController.class | Bin 14176 -> 8262 bytes .../d2d/provtest/entity/BaseEntity.class | Bin 4453 -> 4402 bytes .../provtest/service/XmlParserService.class | Bin 8434 -> 8454 bytes .../compile/default-compile/createdFiles.lst | 39 +++++--- .../compile/default-compile/inputFiles.lst | 32 ++++--- 23 files changed, 449 insertions(+), 110 deletions(-) create mode 100644 src/main/java/com/alihealth/d2d/provtest/config/HandlerConfig.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/factory/EventHandlerFactory.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/EventProcessingService.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/AbstractEventDataHandler.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/EventDataHandler.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/EventSubType.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType1011Handler.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2011Handler.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2012Handler.java create mode 100644 src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2013Handler.java diff --git a/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java b/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java index 63f3221..49cbf1a 100644 --- a/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java +++ b/src/main/java/com/alihealth/d2d/provtest/ProvTestClient.java @@ -60,7 +60,7 @@ public class ProvTestClient { public static void main(String[] args) throws Exception { //数据文件内容主业务类型 10:基础信息数据 20:应用信息数据 //subType数据文件内容子业务类型 详见:数据类型字典表 基本信息(1011-1019、9001-9002) 应用信息(2011-2020、2051-2053) - testProv("2011"); + testProv("1011"); } diff --git a/src/main/java/com/alihealth/d2d/provtest/ProvtestApplication.java b/src/main/java/com/alihealth/d2d/provtest/ProvtestApplication.java index 7e20d48..a7a89b3 100644 --- a/src/main/java/com/alihealth/d2d/provtest/ProvtestApplication.java +++ b/src/main/java/com/alihealth/d2d/provtest/ProvtestApplication.java @@ -3,10 +3,12 @@ package com.alihealth.d2d.provtest; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication // 指定要扫描的Mapper类的包的路径 @MapperScan("com.alihealth.d2d.provtest.mapper") +@EnableAsync public class ProvtestApplication { public static void main(String[] args) { diff --git a/src/main/java/com/alihealth/d2d/provtest/config/HandlerConfig.java b/src/main/java/com/alihealth/d2d/provtest/config/HandlerConfig.java new file mode 100644 index 0000000..5e1ec34 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/config/HandlerConfig.java @@ -0,0 +1,33 @@ +package com.alihealth.d2d.provtest.config; + +import com.alihealth.d2d.provtest.service.handle.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Jason 自动注册处理器 + * @date 2025年06月05日 11:35:20 + */ +@Configuration +public class HandlerConfig { + + @Bean + public Map handlerMap(ApplicationContext context) { + Map map = new HashMap<>(); + context.getBeansOfType(EventDataHandler.class).forEach((beanName, handler) -> { + EventSubType annotation = handler.getClass().getAnnotation(EventSubType.class); + if (annotation != null) { + map.put(annotation.value(), handler); // 使用注解值作为 key + } + }); + return map; + } +} diff --git a/src/main/java/com/alihealth/d2d/provtest/controller/ProvTestServerController.java b/src/main/java/com/alihealth/d2d/provtest/controller/ProvTestServerController.java index 07f9652..e5adde7 100644 --- a/src/main/java/com/alihealth/d2d/provtest/controller/ProvTestServerController.java +++ b/src/main/java/com/alihealth/d2d/provtest/controller/ProvTestServerController.java @@ -9,10 +9,7 @@ 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; +import com.alihealth.d2d.provtest.service.*; import com.alihealth.d2d.provtest.utils.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,6 +72,9 @@ public class ProvTestServerController { @Autowired private IDomesticDrugProductionApplyInfoService domesticDrugProductionApplyInfoService; + @Autowired + private EventProcessingService processingService; + @RequestMapping("/receive") public @ResponseBody Map receive(HttpServletRequest request) throws IOException { @@ -137,72 +137,8 @@ public class ProvTestServerController { // xml, // DomesticPharmaBaseInfo.class // ); - if(eventType.equals("10")){ - VTTSBasic result = xmlParserService.parseDataXml( - xml, - DomesticPharmaBaseInfo.class - ); - List list = result.getDataset(); - if(list!=null && !list.isEmpty()){ - list.stream() - .forEach(item -> { - item.setEventId(eventId); - }); - domesticPharmaBaseInfoService.saveBatch(list); - logger.info("入库的数据条数:{}", list.size()); - } - }else{ - List 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); - }); - - } - } - if(!list.isEmpty()){ - domesticDrugProductionApplyInfoService.saveBatch(list); - } - - } + //解析并处理数据 + processingService.processEvent(eventPojo, xml,eventId); return ResponseBuilder.success(); }catch (Exception e){ diff --git a/src/main/java/com/alihealth/d2d/provtest/domain/DomesticDrugProductionApplyInfo.java b/src/main/java/com/alihealth/d2d/provtest/domain/DomesticDrugProductionApplyInfo.java index 6023780..fce9f8e 100644 --- a/src/main/java/com/alihealth/d2d/provtest/domain/DomesticDrugProductionApplyInfo.java +++ b/src/main/java/com/alihealth/d2d/provtest/domain/DomesticDrugProductionApplyInfo.java @@ -1,11 +1,15 @@ package com.alihealth.d2d.provtest.domain; import com.alihealth.d2d.provtest.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Builder; import lombok.Data; import javax.persistence.Column; +import java.time.LocalDateTime; import java.util.Date; /** @@ -13,8 +17,22 @@ import java.util.Date; * @date 2025年06月04日 11:39:02 */ @Data +@Builder @TableName("domestic_drug_production_apply_info") -public class DomesticDrugProductionApplyInfo extends BaseEntity { +public class DomesticDrugProductionApplyInfo { + + @TableId(type = IdType.AUTO) // 明确指定使用数据库自增 + private Long id; + + @Column(name = "event_id") + private String eventId;//事件流水号 + + @Column(name = "create_time", updatable = false) + // 仅数据库字段 + private LocalDateTime createTime = LocalDateTime.now(); + + @Column(name = "update_time") + private LocalDateTime updateTime; //private String eventId; @Column(name = "rec_time") @@ -72,14 +90,4 @@ public class DomesticDrugProductionApplyInfo extends BaseEntity getEntityClass() { - return DomesticDrugProductionApplyInfo.class; - } - - @Override - public String getDatasetName() { - return "国产药品生产信息数据子集"; - } } diff --git a/src/main/java/com/alihealth/d2d/provtest/entity/BaseEntity.java b/src/main/java/com/alihealth/d2d/provtest/entity/BaseEntity.java index 2f9e144..580236e 100644 --- a/src/main/java/com/alihealth/d2d/provtest/entity/BaseEntity.java +++ b/src/main/java/com/alihealth/d2d/provtest/entity/BaseEntity.java @@ -2,6 +2,7 @@ package com.alihealth.d2d.provtest.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Builder; import lombok.Data; import org.springframework.data.annotation.Id; @@ -13,7 +14,7 @@ import java.time.LocalDateTime; * @author Jason * @date 2025年05月30日 09:55:20 */ -@MappedSuperclass +//@MappedSuperclass @Data public abstract class BaseEntity> implements XmlEntity{ @TableId(type = IdType.AUTO) // 明确指定使用数据库自增 diff --git a/src/main/java/com/alihealth/d2d/provtest/factory/EventHandlerFactory.java b/src/main/java/com/alihealth/d2d/provtest/factory/EventHandlerFactory.java new file mode 100644 index 0000000..539bb21 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/factory/EventHandlerFactory.java @@ -0,0 +1,26 @@ +package com.alihealth.d2d.provtest.factory; + +import com.alihealth.d2d.provtest.service.handle.EventDataHandler; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * @author Jason 事件处理器工厂 + * @date 2025年06月05日 11:29:54 + */ +@Service +public class EventHandlerFactory { + @Autowired + private Map handlerMap; + + public EventDataHandler getHandler(String subType) { + EventDataHandler handler = handlerMap.get(subType); + if (handler == null) { + throw new IllegalArgumentException("未找到对应的处理器: " + subType); + } + return handler; + } +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/EventProcessingService.java b/src/main/java/com/alihealth/d2d/provtest/service/EventProcessingService.java new file mode 100644 index 0000000..605ba17 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/EventProcessingService.java @@ -0,0 +1,47 @@ +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.alihealth.d2d.provtest.factory.EventHandlerFactory; +import com.alihealth.d2d.provtest.service.handle.EventDataHandler; +import com.alihealth.d2d.provtest.utils.EventPojo; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +/** + * @author Jason 事件主处理服务 + * @date 2025年06月05日 11:28:56 + */ +@Service +@RequiredArgsConstructor +public class EventProcessingService { + + private final XmlParserService xmlParserService; + private final EventHandlerFactory handlerFactory; + + /** + * + * @param eventPojo + * @param xml + * @param eventId + */ + @Async + public void processEvent(EventPojo eventPojo, String xml,String eventId) { + EventDataHandler handler = handlerFactory.getHandler(eventPojo.getSubType()); + if(eventPojo.getSubType().startsWith("20")) {//应用数据 + VTTSEventS eventS = null; + try { + eventS = xmlParserService.parseAppDataXml(xml); + } catch (Exception e) { + throw new RuntimeException(e); + } + handler.handle(eventS); + }else{ + handler.handleBase(xml,eventId); + } + + } + +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/XmlParserService.java b/src/main/java/com/alihealth/d2d/provtest/service/XmlParserService.java index df8d7fd..5360b8e 100644 --- a/src/main/java/com/alihealth/d2d/provtest/service/XmlParserService.java +++ b/src/main/java/com/alihealth/d2d/provtest/service/XmlParserService.java @@ -38,7 +38,7 @@ public class XmlParserService { * @param * @throws IOException */ - public static VTTSBasic parseDataXml(String xml, Class dataType) throws IOException { + public VTTSBasic parseDataXml(String xml, Class dataType) throws IOException { JavaType type = xmlMapper.getTypeFactory().constructParametricType( VTTSBasic.class, dataType @@ -52,7 +52,7 @@ public class XmlParserService { * @return * @throws Exception */ - public static VTTSEventS parseAppDataXml(String xml) throws Exception { + public VTTSEventS parseAppDataXml(String xml) throws Exception { return xmlMapper.readValue(xml, VTTSEventS.class); } diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/AbstractEventDataHandler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/AbstractEventDataHandler.java new file mode 100644 index 0000000..879ea23 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/AbstractEventDataHandler.java @@ -0,0 +1,47 @@ +package com.alihealth.d2d.provtest.service.handle; + +import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo; +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.extension.service.IService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Jason + * @date 2025年06月05日 11:11:15 + */ +public abstract class AbstractEventDataHandler implements EventDataHandler { + + protected final Logger log = LoggerFactory.getLogger(getClass()); + + protected abstract Class getEntityClass(); + protected abstract IService getService(); + protected abstract T convertToEntity(EventBody eventBody, ItemDetail item, InstanceDetail detail); + + @Override + public void handle(VTTSEventS eventS) { + List entities = new ArrayList<>(); + + for (EventBody eventBody : eventS.getVttsEvent().getEventBodyList()) { + for (ItemDetail item : eventBody.getItemList()) { + for (InstanceDetail instance : item.getInstanceList()) { + try { + entities.add(convertToEntity(eventBody, item, instance)); + } catch (Exception e) { + log.error("转换实体失败", e); + } + } + } + } + + if (!entities.isEmpty()) { + getService().saveBatch(entities); + } + } +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/EventDataHandler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventDataHandler.java new file mode 100644 index 0000000..733ca5e --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventDataHandler.java @@ -0,0 +1,16 @@ +package com.alihealth.d2d.provtest.service.handle; + +import com.alihealth.d2d.provtest.entity.VTTSEventS; + +/** + * 事件处理接口 + */ +public interface EventDataHandler { + String getSubType(); // 返回业务subType + + //处理应用数据 + void handle(VTTSEventS eventS); + + //处理基础数据 + void handleBase(String xml,String eventId); +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/EventSubType.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventSubType.java new file mode 100644 index 0000000..c1125c3 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/EventSubType.java @@ -0,0 +1,19 @@ +package com.alihealth.d2d.provtest.service.handle; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Jason + * @date 2025年06月05日 15:05:31 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface EventSubType { + String value(); // 如 "2011" +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType1011Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType1011Handler.java new file mode 100644 index 0000000..cb92189 --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType1011Handler.java @@ -0,0 +1,74 @@ +package com.alihealth.d2d.provtest.service.handle.business; + +import com.alihealth.d2d.provtest.domain.DomesticPharmaBaseInfo; +import com.alihealth.d2d.provtest.entity.*; +import com.alihealth.d2d.provtest.service.IDomesticPharmaBaseInfoService; +import com.alihealth.d2d.provtest.service.XmlParserService; +import com.alihealth.d2d.provtest.service.handle.AbstractEventDataHandler; +import com.alihealth.d2d.provtest.service.handle.EventSubType; +import com.baomidou.mybatisplus.extension.service.IService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.List; + +/** + * @author Jason 境内药品生产企业基本信息数据子集 + * @date 2025年06月05日 11:14:43 + */ +@Service +@EventSubType("1011") +public class SubType1011Handler extends AbstractEventDataHandler { + protected final Logger log = LoggerFactory.getLogger(getClass()); + + @Autowired + private IDomesticPharmaBaseInfoService service; + + @Autowired + private XmlParserService xmlParserService; + + @Override + protected Class getEntityClass() { + return DomesticPharmaBaseInfo.class; + } + + @Override + protected IService getService() { + return service; + } + + @Override + protected DomesticPharmaBaseInfo convertToEntity(EventBody eventBody, ItemDetail item, InstanceDetail instance) { + return null; + } + + @Override + public String getSubType() { + return "1011"; + } + + @Override + public void handleBase(String xml,String eventId) { + VTTSBasic result = null; + try { + result = xmlParserService.parseDataXml( + xml, + DomesticPharmaBaseInfo.class + ); + } catch (IOException e) { + throw new RuntimeException(e); + } + List list = result.getDataset(); + if(list!=null && !list.isEmpty()){ + list.stream() + .forEach(item -> { + item.setEventId(eventId); + }); + getService().saveBatch(list); + log.info("数据类型:"+getSubType()+",入库的数据条数:{}", list.size()); + } + } +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2011Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2011Handler.java new file mode 100644 index 0000000..359cbce --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2011Handler.java @@ -0,0 +1,87 @@ +package com.alihealth.d2d.provtest.service.handle.business; + +import com.alihealth.d2d.provtest.domain.DomesticDrugProductionApplyInfo; +import com.alihealth.d2d.provtest.entity.EventBasic; +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.IDomesticDrugProductionApplyInfoService; +import com.alihealth.d2d.provtest.service.handle.AbstractEventDataHandler; +import com.alihealth.d2d.provtest.service.handle.EventSubType; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + * @author Jason + * @date 2025年06月05日 11:14:43 + */ +@Service +@EventSubType("2011") +public class SubType2011Handler extends AbstractEventDataHandler { + + @Autowired + private IDomesticDrugProductionApplyInfoService service; + + @Override + protected Class getEntityClass() { + return DomesticDrugProductionApplyInfo.class; + } + + @Override + protected IService getService() { + return service; + } + + @Override + protected DomesticDrugProductionApplyInfo convertToEntity(EventBody eventBody, ItemDetail item, InstanceDetail instance) { + EventBasic evtBasic = eventBody.getEvtBasic(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String formattedDate = LocalDate.parse( + item.getString("SCRQ"), + DateTimeFormatter.ofPattern("yyyyMMdd") + ).format(DateTimeFormatter.ISO_LOCAL_DATE); // + try { + return DomesticDrugProductionApplyInfo.builder() + .eventId(eventBody.getEventID()) + .recTime(formatter.parse(eventBody.getRecTime())) + .rkdbh(evtBasic.getString("RKDBH")) + .rksj(evtBasic.getString("RKSJ")) + .rkdwmc(evtBasic.getString("RKDWMC")) + .rkdwtyshxydm(evtBasic.getString("RKDWTYSHXYDM")) + .rkdwlx(evtBasic.getString("RKDWLX")) + .tyshxydmscqy(item.getString("TYSHXYDMSCQY")) + .scqymc(item.getString("SCQYMC")) + .yptymc(item.getString("YPTYMC")) + .gjypbsm(item.getString("GJYPBSM")) + .ymscph(item.getString("YMSCPH")) + .scrq(formattedDate) + .ymyxqjzrq(item.getString("YMYXQJZRQ")) + .scsl(item.getString("SCSL")) + .scdz(item.getString("SCDZ")) + .ypzsm(instance.getString("YPZSM")) + .syjbzypzsm(instance.getString("SYJBZYPZSM")) + .bzcj(instance.getString("BZCJ")) + .ymzt(instance.getString("YMZT")) + .build(); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + @Override + public String getSubType() { + return "2011"; + } + + @Override + public void handleBase(String xml, String eventId) { + + } + +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2012Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2012Handler.java new file mode 100644 index 0000000..8f7badf --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2012Handler.java @@ -0,0 +1,11 @@ +package com.alihealth.d2d.provtest.service.handle.business; + +import org.springframework.stereotype.Service; + +/** + * @author Jason + * @date 2025年06月05日 11:37:18 + */ +@Service +public class SubType2012Handler { +} diff --git a/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2013Handler.java b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2013Handler.java new file mode 100644 index 0000000..6cc765e --- /dev/null +++ b/src/main/java/com/alihealth/d2d/provtest/service/handle/business/SubType2013Handler.java @@ -0,0 +1,11 @@ +package com.alihealth.d2d.provtest.service.handle.business; + +import org.springframework.stereotype.Service; + +/** + * @author Jason + * @date 2025年06月05日 11:37:52 + */ +@Service +public class SubType2013Handler { +} diff --git a/target/classes/com/alihealth/d2d/provtest/ProvTestClient.class b/target/classes/com/alihealth/d2d/provtest/ProvTestClient.class index d27f26e28c91c6c8f6f0a79b02b1bedb6646a51b..4d9f32ce3eb8796afda7c6ceb292a522fa4beaac 100644 GIT binary patch delta 14 Vcmca$alvAPCp)9zW-oR&Q2;6-1Y!UH delta 14 Vcmca$alvAPCp)9jW-oR&Q2;6@1Y-aI diff --git a/target/classes/com/alihealth/d2d/provtest/ProvtestApplication.class b/target/classes/com/alihealth/d2d/provtest/ProvtestApplication.class index e866e579f6a08225bab45124a28b69dcef61b9f2..62aea44b2c748fa3c205141efc5e1890e9122cad 100644 GIT binary patch delta 149 zcmaFFwt!vg)W2Q(7#J8#7!( zOHV6G%uOxNFUr<0PR>Y8Da`?j=_lsp<(DLuWaj7TyXGY(<)k_mSLP*KPu|aH!6wJU zAkUyM`7h%`MxM#{ne18l8Q2*FCMz@Rh>I~WGl&3f7G+>$5Q}DDEM^dAkYHc{0A@}m A3jhEB delta 86 zcmZ3${)kQL)W2Q(7#J8#7!$Fq!^^x8Dus}EoGeilhJ}rmWM%(L4LA1 p(?dqC$&$?Wth@~D41AMgnRSGP7?>DDfZ9bF7#YN(85oNh!~qc}4#5Bb diff --git a/target/classes/com/alihealth/d2d/provtest/controller/ProvTestServerController.class b/target/classes/com/alihealth/d2d/provtest/controller/ProvTestServerController.class index 284befeba21b7f698be798a5562b5e205f85962c..dc6420f2dc584d4a9dbfa32de2692e66eae8f2c1 100644 GIT binary patch delta 2423 zcmZWr33!#o6+P!|^S}T7*-7GK(a;FQ1PvMpA;_i#P(p%4(6AUVi4amkNFaa#9%w|x zg4$oZSc|0#SX(6;4GB?77i^`AwN+cY+S6eBIz1F2Z=hijz@%6W?<2ZG6YYi}tWyc)v~@Iwc$xv0dC9Q@e9PaJG=@KXny9sJDT=howOgJ0M)e(5HJ@`i(7 zxfp?8yPEvQ#c%OD2fsJ?gNuC2C?9{c;!jq*>Eh4$i`D*WxBSg&e|PbZLEBq)ddiA_ zTKfNr;ota=)!ugTU%cbue|Xp6v_psm8D${BpsWnJ3^U@=&@qfUbX~^i8K$_H!Bjg* zGfa0en;C|gcFZyy=3nwX9PV(0%aI&q#f33m#5|Xy`2jo4 zkMZIF^LkDN<^q(6j2S#DPD2uI#8WtE{VpwQcWH{dNQh#a6ZhvLk zrVE;|*5hR?Hk{z`a$ezK32q>Y{axV^empv?+(Q#fJWfQv;UtfxoNQR;aSF=~r+U1S z)9hqA5o~MRAU+;vaHhvu==YbT7sYv%$E!J86wd@$*VN##f^+Co$JLa3lgG7OXV~K50N48~v*#JMdfdP^|8RCutcmR&H*ym(*5Bui z4cnCtKRqWm#Le8|7v+r3;#S`3vC}$kvqjj>9e!O-#W*HB?&L0|fwvjn?y-wI4Dax` zn|FG6mUkK6O^oqh43F`Pb2EERFk?_vsKe6k7!((+_wrh|DR1I8Dc95pb@tWF$Qe8hSDCdmxQ;EDBnS(*5BdJ?;?BfguEo8w-^W(m&+Yhd z622FisOCjzQ+6U)!3?xZGiYWI8>Kneic{DmEs8t!1a?Ss@gQEqW@#}!mXBbId_262 zhj6QGDR>jR&?zkyZ^^PvS{n7DHefq;AYJgokibsCDYi3lTWuF^6Zt4RaXY${rBrs{ z4s8x%1e>s1@F9I4EW};X!nj+Z<;ZJrZO_@YJzBd*YZrp26>Y@eLk4>d68jA9HMmdz zpuzo$AKFCtctBd1!iNI0?emdjTVzW6s2o1F3~a~86`pN4U3D>1eRx7hG1(6Gp}epc zQx{}T>%;T`%%~lI1T%Xv>o~5evbL+sL-9~v_|jff$hAnW<>7evSZO3!YJ#QC0Or&l z!Ce1fNnT=JxqAp%@lZURZL%ZTrlA)y#iMbz7uR$-D$mYrXHBU&boyvK+KX$gm|yM= zpt3gZ9>Icc@d+l&zDQXXHx=*@M&k4O?s*J_cpN2o0%bUisp!UZJc+q#oN7F+i}MVc z6F8#E^{Ws^mHGkf#dAv6F{R~83j27nW4ct~H3Io0_Nx;*)jxxp1$#v0vVRBhDQOh= zejLyzAPRf%X?#Ze@>Sl?;&aMLCHBASmP5fQIuv3*o6I9)K0Npr-p4qw0* zmHmeW`FIl8*0>0v(^_DpIbd{tmnXtb9zH?u0Ux(^HI7uw;vek`KAYHY3p$y^WK=@-QGsz zAWcaekk9*#Hc5v+d-m`e?X@q#xx@Q#eP?A+KNb%;Jyl7Ae#|(!VkvkfiC{bb972jt jeokfLd00V}%Dy9-&^?1nvn;8Aa_ z_k{=ECtek`x+LI1ZELNzwXL>VYj3gkw$>h6EB(LuzHBxjEV1PW-@Lirym|M`EU$jP z`voGJsa|rEhs))2lABNFxy5uDpJMPlHx+V)d@75%imTl`pBK3KR9+}hjme8jcrn+? zygHMYl<-onH+h+xZs7)#{U$e>^p45PO?ubl6$Y=A5vLj4Bsf;NvB>EruXfXDK0_*J zx_J$sWpcpaW;cx!g2r)BJ|X#p-Mp693DhD}A_A><^9H*uD%Do`#Dw~I3Agb^lM_Nr zQd&|5r`^1XH@kTYx0mo%K3hKLlo9cTC43QIETb+d;Y;~4lP{OPFT42)zS7{U+*AQ- zF!^dXU&GhB`8vK{2Ha4>H}XyL*=F#~2H#@xt!`Sxw;8$nkiI*m zdY4r1Hu)Ym-^=$&%l#%lAmxK5KP2T2lOLAy5tAR4@-dn5xWQjB`3W}#>`6OKeo{K0 zGWlsKziRR`Qa)>PM#^0#cbMGi=H0x<&Cl`k#eiNA=tb$?Yx38me97dmOZg3xzbWO* zvcR{>i1}67rDn`)CHx(}%+25B?-~5M$=?@Q{-BtD$ZtsFn{NIQ|JcoM@!JOf#N>C} z{8N6{;Gena3jVoNeqr!0-E=Mg%HUs1`5S}ZbJO+0qicDeK<~@vxAOVG;NOYhes1#b zP5y(M|Hyxm&!0>9FZ`jK|H>ap^=~EoF@I?C-`)HVn<4)+`CqbwPfY$)%72^unUw#L zeSGewSsY|4ipJNi3n!S$YU7D@-eh#`%=O+{-B!*tpnkz=YZlbh&R(psIK*nF_>GD+1AUn8}h!^%Z{q%B2m}OvQodx_BazYH4LUEEI1I zCsUDNeM=zG8mJ5;!!@zBaep|mDH6ogs@h<@)fK_c5%RVr;+s;KC*q-WP))sB=!RFe2Ez`y3{MfK=(Mge5BsG`G zHDTfkrh=+?2(lbh8;OONq+6TAiN*lLpj9jwh^`1EB2sr63sNl+$YowWl7jJADiM!H z!wE08wW$%>AS??fpm|OQ$S@qHLdX-eo^H`96Ah=lEvZzScOgD94Gj(9jcFh$pJ?lI zIu(g}>jG`Emqa+3j;5HVXofeX^j7;v`20;^Q5S29!@3p^wfB#$_GAplx9M%BmH$C-}HCnwRIq*t#g zqp_?Tu4NNsu{ey~Dlr5X{06>ov`jPdA#;S$)4YL_fn=C1aP4{LZwZFm#In%`rPr#= zbgUk6Xq{&o=*(G}fSSm5r{|-}-lAhM&J-+M(5&U@ZVSMRCL6=Tyg@n2@0gR_%{06= zo@@KyzhnQAd~5f%vy<`-?xo8;LrnQx&|I5CpBU%=iEjD-f$ktqRg*a@2QS!ol3mRW zx;ZUNo7abfDLrohbU3&HGc;?FdKkPPi7WC4LlH7fq>_eWLn%YK>=X^DnV|}h!$5Dd zT9q_ZAsksbiMrosvM=wg3lT`Z7FC!mjK{*NxU-<#<>P;U-5dz&M%P;QKN zR1^DdvlEiSO?Dz;db1H>cAsItZ*0jnWD4O*+y9hE>QNmICfeKJ-JQVFBLT{hg_9CF zQ6*Pka5lj}umy}$r&q!mY!L5I5JLEeiwlK=I${>Vb!fL?^A^!7m`38%?v2DC0AwfO zq_@FeQJ-}%P-zv6bUBADUQK1(TNP<*2`A85*xU~C;k+ZUwsfjC9D^^Z!GiI%Ywe26 zl`$2GM4)|XI)zc#LpXr&G}hi%B<`*3YXGnpXJ;Bb2nj86S){RsDl(K|DAQ2IhH@LK z1QBpuIMq!x)6fZhvd9Ei{K&w-rIGgPSq^|Lx(CZzf-Kz}jRZBXirczjPp?_oVVG7L z4YW3g0^=Q(7(boq@(EwSogBvq2ql%l#V;A(dlw9>_m3SnIIuap(O{-8zTC~ zaNzEyF)ekpC|3>h5trY63X#75eLDP$Kb}qm!wVvk2_AN^G;XS#FAkQaAH-Z!J+eTz zJ}`L2Y%O}8Ua*v<1{i9fr3R@|iyo)1FnRNwGWrU4K%@p+s*EQYYKWzVs$qs2ZmAJ! zq@g^P8l^@{Wen^ZkrlqyQirL-Ej5-WAuM-owVTSRjt)+Z#HQNu(RcQ_hC0GhN2;TA z2B8y|HIa~|#;Nf-`GVk4N2ktN)}(X-qZ1eCjl|xHY`Ozv=Q#OJ7L~e_vy|KD?-uHOp^}DuWSY++&ISKiL&(p-Kh}JTk2SzWUhx)r@~IOo+C?4E$3v4*-RGgy zQ0107Nu6w{xt2Ob%|raPRE4UvRF$d*!z<(QR5FD;%#OCnK}BkQsTzY~L8&^`QVUg$ zp%z(cv8uJ`tMrVa>MXTHEro~NcgchMcHbyW+xF!9S3mLoo%aIJe6Cl^4AmgIgS>f& zmZ|nn+RKZRvQ(p5jy%9pE7VFuoo1;fHP2G3)al3!EVWwbJ42nxG&#?{9ap3!FTs*& zlwPXOGYRNu$Db*6byGs2BNi_7wYK__NwKSuP~AMM^zupv@xqo`Ba%H!J^|Hisi1=G zgw;|k|82wetnk*I5SOu1K7SCQZr6n)Kp*T2LT)H z&N_cp{X$D6q*masYFGxRAPlXm3xy1ov{Xu^4Yf&jzu8h-RJ*0Ns56 z4$8NLKc6Iv!Qx29^$pUvco9&fUS?W%8 z7vh&*`(U||rS4YuSn6I`_dbb0_p1kbI9EGQWExlPTiqUOZ(IGr)jRjyc)9-fO}OB8|o2DJ*pls)MJ)NC>6eXkAJ}m_)IA^99*F=F!G7Ve9gy6@bm=GLQnNIB zoH;=3OXB`?u%)8wRx)Sck(z|8O4Y=0kcfyP<%}68W3pOd8q z{0WAgiGwnnN0;NC4K4!nmdETCNv9EMdu`3xN1w+_cQTyP&O+`1EmV-1cU=%lRrlF9 zgH!W_s&Fjb>RkEB;Q6T9s=WjkC6(3PwZeS|1T1~!4-9>&zAw5#Msc4Imag?~A|A8Yh} z`vBv$y$QMKV`}K166IOSNw;$E;`@=dW{2B?5qiKos92ZN)PYT(=wU~ZbeBm@S=bkXyoEgNRU6>0P}ID<+Bo}dwLAjlmx`H(rQC3>x{x1(wOVw}Bo=V49K5||Y7E2P4*-iA;!)JL3N!-nK~3 zo^09D9)f4?>Ww0k7Fy&<&E}|#ZFI&ZgBxMpGS&}BFbUiQn-^HNdFuN1w&tXRu&Ff} zYy%NTX^zNUir0Re^UA)3mG)B{L+BMY`jq{-o{lNx5Wpkl>pZ!`s z_lD9ItUs98XvgTL*7hwM*Kd`oNZcPxB52r9Xe;C`5_PUlMXKU&J9Qd&X!Govmvar9 z_#%G#Aa@ZCq5SirJft4rSP!yj*2CtzFcXsSf)I8dIMR`5Nc7W4rV(A_#4xyr zW5KBos!$kCB;+LKWcmkt`eczD~Fgoj+Bkx8k)bl}_3@jp1+dubJP_z%(tt zW0h>E$6SzDuoe&G2vB*2XQypFr{+q=-mQHk(Xzwqb$IqnCq2+FG{P%91>tf5kW~|l z;RgtE)RHHbF+Esk&mHd!28koPU1!feyo}~ru;Znnd7SCC+w44ja&@j!x_&N^?R2K08%QS}l#1-pHv2Gz zlS~9rYQ%(^1Ig41WQ5`iBC!CZYJ%398qJWx&3FxyAQgDyImKzU%54ikS|bE>sF|c3pXH!+HI*l>II8u@+^y|G2Zs< z$gE`+iEWB+2zzVw`ycMv19(Y=uo3S|@Uq=iGt^$huiAKgLmHP^-^o=22Z4P>zc3IB zMZ?MQ_DILs=juidUwcfHgJ16O{&(6-=AWA@P6u;UAR6_AvAHFXF(_G+Zl%yXQ|*Ry~YN+%r`(!Kio6Grf-19%Fx&jI>I;51Nx8j4buHbc?RkJJv6Rq7mfFo zdP+S;hK@#2l%Zo#m>D`&iVm8Pp^1Qi2V9@*Kpg~@O|dIuGc*-YNrt>YKFw3wNz)ar z^q6HcGIacHbS7G7uJjBlo7F+HeSPY)|0RG~A@&RT@5B!>cuXhKA47@ESpJmQB$}&q$jhx?dnoQNZWHXir&l zhJqOiX*jImwHjWh;T8=?G`wEJ8#Eln%vL~Uu?~uNP}|eAF+&O8C=3~up`;#}(j(Iv z-lXBp8s4Jec8@1RThTChH=Qj4I7iWr{Y^VQ|Aq$|u4N>ubFS3RgFrgyOHcZWv{)|i z6m`;tF1Uk>I_TmjVQLkwxvo>_e3;^1Sl$e(g#j+3Vrrm)bz6-y+ew1$I7il}c zM7Q&6bO*mhck*X+w=(D+RZ91%QFOnWNITRtdRU!AkEn(8sA{Cg)LHbniqcMX4Lzf_ z)3fR!%BZJlmwJIZ)T`8~zDK*&8?;CL81TFFoca}>sy?6>)W`Iqi)gRQqE}pF>HDsu z=m)N&>4z>az2PdSx52TWxGLx!*An`vI4~YXV?g&JdYQgOgF$^2y+YrnGT@s_ufp|? z0tMI8YxEuRD1%4ScjP_4P=1ZuG?u~m6?=$& zL_el7TB<&zw}7vR&QQOmw*eWnLA^;o0c29UdYRqt5NNNpz#Vz-(_zoy^7XI9WqdXM&DH8^0$ISceY z{T7;2?5d>?=y!1C16`-m?=ja!qg_7w1N{-&G}Cn?G~kbL<9~)m&BTA&u=(?sEPp8ZfaiZelSN?A=LX^De27X6d_?={5gPjcU?lpK)F(7-KUi0EAR=Oe6+;oh z73Kmi1XRdiKQTl?_#vT=;AMbJ3@ARGILU4}v^~^8mmn@&T32>? z2Yq=DUD0&hF1j*9SM8;%mq^<+z5-7{Ap+}l7&#dueTAOF7iJf^W*e^A<{r8puJ;CC z@vx#{M(8f8*5zP2{{b56Dex2yGXQ7kMxT2J4Y3>a2;Jl<_P8^2)5Rv-!1=?>mf6OR z{kuKI8QLbFn|vf^rG?@zaqtoqZEsr($2!oF_cq~K3_$Z=r zpAml8H}+Hb1JQ$0=-xOU&qwnyd@N6JbfQ>+ZUV)~tmJn;pjPs*`6$5-8c}vz+4c^) zeeonI?&yT?L|nehP8RpdBn%|@B9n(?(=ijCU@{+vc1QmZBiuYCi`YAX9$dveOv?#(ldS1ab@>r z=)Mfy59k36JqYL_4ebE*u!bI)JgF1@pH_A!oTJ2t!6UojjfcVy9}Z7E0bY0-{4o4C z9bqq^y)mjZU3*?(-gKUUNTsyx4RF!xrKR*rX(`VrCD4e&jzgp5yuyy6$*{1;x)-)H z-EGj2o3lHYoLgMC{3)W>cs6z}rd_P)ZJ>V*vMk^e(4cru*1%5$6T6Mvr*1&M82(%Q hBXvEdKBrz(NJIHtw1d5T9u)jbd_G^`K(Fw({|mN;S&IMw diff --git a/target/classes/com/alihealth/d2d/provtest/entity/BaseEntity.class b/target/classes/com/alihealth/d2d/provtest/entity/BaseEntity.class index 229057bcaf587e00dd89a6b81218ec415352c923..1d98fbc6888911d5a96c855ab66bfec8a6bf8956 100644 GIT binary patch delta 315 zcmaE=v`MM{)W2Q(7#J8#7<#!F@)+_t8Q2*LxELfE3PG$Q5K#;wO4u1nxqx&Th$sgs zr~t7lK|~dZs0NAEurt(hG4L}Kaxm0^=z0**z`@YS!O+CP(9FTm0upFtXJ}(*XlG<# z%1qf<|B{8J6ezGchn0z=ty4}pVj^~&Bs#7UAxi#B$o#J{;Z-uh$`^y}cCazR7dN2C8Hqpn;V1hreh@~%? zR=jiXe>`QfkG>voXcwf_gWyY+R>2O9%Z$;|YW4jxKRpuKS{qJEN?`n~OIb7vC_72ew4YLdsGnV~zT=4O=vA se0J<{$i?;R?0_y((>IDECrPW*L{JL`)j@GJy>7?qdOxuHkEe;7KR!$uMF0Q* delta 188 zcmZp3`sBFboP-`HLm)#C0}F!>0|P?|0~-S~kXG2lz_g8lS%`&YF9T~Nvv%+{1~y-y zn3m4uKN1SY3J^sM!3-fl#X#i@p$uURj0_?SJPhFs5e!TWkw8%%pa?`Rih*%*q@