diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/BaseInputModel.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/BaseInputModel.java index e0eb442..2c9a63f 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/api/input/BaseInputModel.java +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/BaseInputModel.java @@ -5,38 +5,54 @@ import com.syjiaer.clinic.server.common.api.annotations.IMField; import com.syjiaer.clinic.server.common.exception.MessageException; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public abstract class BaseInputModel { public Map buildToMap() { Map map = new HashMap<>(); - // 遍历所有字段(包含父类) Class clazz = this.getClass(); while (clazz != null) { for (Field field : clazz.getDeclaredFields()) { field.setAccessible(true); try { - Object value = field.get(this); // 检查RequiredField注解 + Object value = field.get(this); String mapKey = null; if (field.isAnnotationPresent(IMField.class)) { - IMField annotation = field.getAnnotation(IMField.class); mapKey = annotation.key(); - if (annotation.required()) { - if (value == null || value.toString().isEmpty()) { - throw new MessageException("[" + annotation.key() + ":"+annotation.name()+"]不能为空"); - } + + if (annotation.required() && (value == null || (value instanceof String && ((String) value).isEmpty()))) { + throw new MessageException("[" + annotation.key() + ":" + annotation.name() + "] 不能为空"); } - } - if (value != null && mapKey != null && !value.toString().isEmpty()){ - map.put(mapKey, field.get(this)); + if (mapKey != null) { + // 处理 BaseInputModel 子类 + if (value instanceof BaseInputModel) { + map.put(mapKey, ((BaseInputModel) value).buildToMap()); + } + // 处理 List + else if (value instanceof List) { + List list = (List) value; + List> mappedList = new ArrayList<>(); + for (Object item : list) { + if (item instanceof BaseInputModel) { + mappedList.add(((BaseInputModel) item).buildToMap()); + } else { + mappedList.add((Map) item); // 假设基本类型已为 Map + } + } + map.put(mapKey, mappedList); + } + // 其他非空值直接放入 + else if (value != null && !(value instanceof String || value.toString().isEmpty())) { + map.put(mapKey, value); + } } - - } catch (IllegalAccessException e) { throw new RuntimeException(e); } @@ -45,4 +61,5 @@ public abstract class BaseInputModel { } return map; } + } diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3101.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3101.java new file mode 100644 index 0000000..564a107 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3101.java @@ -0,0 +1,28 @@ +package com.syjiaer.clinic.server.common.api.input; + + +import com.syjiaer.clinic.server.common.api.annotations.IMField; +import com.syjiaer.clinic.server.common.api.input.im3101.PatientDtos; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.List; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class IM3101 extends BaseInputModel { + @IMField(key="syscode",name = "系统编码",required = true) + private String syscode; + @IMField(key="patient_dtos",name = "参保人信息",required = true) + private List patientDtos; + @IMField(key="rule_ids",name = "规则标识集合") + private List ruleIds; + @IMField(key="task_id",name = "任务ID") + private String taskId; + @IMField(key="trig_scen",name = "触发场景") + private String trigScen; +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiDiagnoseDtos.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiDiagnoseDtos.java new file mode 100644 index 0000000..25588c5 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiDiagnoseDtos.java @@ -0,0 +1,31 @@ +package com.syjiaer.clinic.server.common.api.input.im3101; + +import com.syjiaer.clinic.server.common.api.annotations.IMField; +import com.syjiaer.clinic.server.common.api.input.BaseInputModel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class FsiDiagnoseDtos extends BaseInputModel { + @IMField(key = "dise_id", name = "诊断标识", required = true) + private String diseId; + @IMField(key = "inout_dise_type", name = "出入诊断类别", required = true) + private String inoutDiseType; + @IMField(key = "maindise_flag", name = "主诊断标志", required = true) + private String maindiseFlag; + @IMField(key = "dias_srt_no", name = "诊断排序号", required = true) + private String diasSrtNo; + @IMField(key = "dise_codg", name = "诊断(疾病)编码", required = true) + private String diseCodg; + @IMField(key = "dise_name", name = "诊断(疾病)名称", required = true) + private String diseName; + @IMField(key = "dise_date", name = "诊断日期", required = true) + private LocalDateTime diseDate; +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiEncounterDtos.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiEncounterDtos.java new file mode 100644 index 0000000..bf01b4f --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiEncounterDtos.java @@ -0,0 +1,85 @@ +package com.syjiaer.clinic.server.common.api.input.im3101; + +import com.syjiaer.clinic.server.common.api.annotations.IMField; +import com.syjiaer.clinic.server.common.api.input.BaseInputModel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class FsiEncounterDtos extends BaseInputModel { + @IMField(key = "mdtrt_id", name = "就诊标识", required = true) + private String mdtrtId; + @IMField(key = "medins_id", name = "医疗服务机构标识", required = true) + private String medinsId; + @IMField(key = "medins_name", name = "医疗机构名称", required = true) + private String medinsName; + @IMField(key = "medins_admdvs", name = "医疗机构行政区划编码", required = true) + private String medinsAdmdvs; + @IMField(key = "medins_type", name = "医疗服务机构类型", required = true) + private String medinsType; + @IMField(key = "medins_lv", name = "医疗机构等级", required = true) + private String medinsLv; + @IMField(key = "wardarea_codg", name = "病区标识") + private String wardareaCodg; + @IMField(key = "wardno", name = "病房号") + private String wardno; + @IMField(key = "bedno", name = "病床号") + private String bedno; + @IMField(key = "adm_date", name = "入院日期", required = true) + private LocalDateTime admDate; + @IMField(key = "dscg_date", name = "出院日期", required = true) + private LocalDateTime dscgDate; + @IMField(key = "dscg_main_dise_codg", name = "主诊断编码", required = true) + private String dscgMainDiseCodg; + @IMField(key = "dscg_main_dise_name", name = "主诊断名称", required = true) + private String dscgMainDiseName; + @IMField(key = "fsi_diagnose_dtos", name = "诊断信息DTO", required = true) + private List fsiDiagnoseDtos; + @IMField(key = "dr_codg", name = "医师标识", required = true) + private String drCodg; + @IMField(key = "adm_dept_codg", name = "入院科室标识", required = true) + private String admDeptCodg; + @IMField(key = "adm_dept_name", name = "入院科室名称", required = true) + private String admDeptName; + @IMField(key = "dscg_dept_codg", name = "出院科室标识", required = true) + private String dscgDeptCodg; + @IMField(key = "dscg_dept_name", name = "出院科室名称", required = true) + private String dscgDeptName; + @IMField(key = "med_mdtrt_type", name = "就诊类型", required = true) + private String medMdtrtType; + @IMField(key = "med_type", name = "医疗类别", required = true) + private String medType; + @IMField(key = "fsi_order_dtos", name = "处方(医嘱)信息", required = true) + private List fsiOrderDtos; + @IMField(key = "matn_stas", name = "生育状态", required = true) + private String matnStas; + @IMField(key = "medfee_sumamt", name = "总费用", required = true) + private BigDecimal medfeeSumamt; + @IMField(key = "ownpay_amt", name = "自费金额", required = true) + private BigDecimal ownpayAmt; + @IMField(key = "selfpay_amt", name = "自付金额", required = true) + private BigDecimal selfpayAmt; + @IMField(key = "acct_payamt", name = "个人账户支付金额") + private BigDecimal acctPayamt; + @IMField(key = "ma_amt", name = "救助金支付金额") + private BigDecimal maAmt; + @IMField(key = "hifp_payamt", name = "统筹金支付金额") + private BigDecimal hifpPayamt; + @IMField(key = "setl_totlnum", name = "结算总次数", required = true) + private Integer setlTotlnum; + @IMField(key = "insutype", name = "险种", required = true) + private String insutype; + @IMField(key = "reim_flag", name = "报销标志", required = true) + private String reimFlag; + @IMField(key = "out_setl_flag", name = "异地结算标志", required = true) + private String outSetlFlag; +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiOrderDtos.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiOrderDtos.java new file mode 100644 index 0000000..58c2c32 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/FsiOrderDtos.java @@ -0,0 +1,86 @@ +package com.syjiaer.clinic.server.common.api.input.im3101; + +import com.syjiaer.clinic.server.common.api.annotations.IMField; +import com.syjiaer.clinic.server.common.api.input.BaseInputModel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class FsiOrderDtos extends BaseInputModel { + @IMField(key = "rx_id", name = "处方(医嘱)标识", required = true) + private String rxId; + @IMField(key = "rxno", name = "处方号", required = true) + private String rxno; + @IMField(key = "grpno", name = "组编号") + private String grpno; + @IMField(key = "long_drord_flag", name = "是否为长期医嘱", required = true) + private String longDrordFlag; + @IMField(key = "hilist_type", name = "目录类别", required = true) + private String hilistType; + @IMField(key = "chrg_type", name = "收费类别", required = true) + private String chrgType; + @IMField(key = "drord_bhvr", name = "医嘱行为", required = true) + private String drordBhvr; + @IMField(key = "hilist_code", name = "医保目录代码", required = true) + private String hilistCode; + @IMField(key = "hilist_name", name = "医保目录名称", required = true) + private String hilistName; + @IMField(key = "hilist_dosform", name = "医保目录(药品)剂型") + private String hilistDosform; + @IMField(key = "hilist_lv", name = "医保目录等级", required = true) + private String hilistLv; + @IMField(key = "hilist_pric", name = "医保目录价格", required = true) + private BigDecimal hilistPric; + @IMField(key = "lv1_hosp_item_pric", name = "一级医院目录价格") + private BigDecimal lv1HospItemPric; + @IMField(key = "lv2_hosp_item_pric", name = "二级医院目录价格") + private BigDecimal lv2HospItemPric; + @IMField(key = "lv3_hosp_item_pric", name = "三级医院目录价格") + private BigDecimal lv3HospItemPric; + @IMField(key = "hilist_memo", name = "医保目录备注") + private String hilistMemo; + @IMField(key = "hosplist_code", name = "医院目录代码", required = true) + private String hosplistCode; + @IMField(key = "hosplist_name", name = "医院目录名称", required = true) + private String hosplistName; + @IMField(key = "hosplist_dosform", name = "医院目录(药品)剂型") + private String hosplistDosform; + @IMField(key = "cnt", name = "数量", required = true) + private BigDecimal cnt; + @IMField(key = "pric", name = "单价", required = true) + private BigDecimal pric; + @IMField(key = "sumamt", name = "总费用", required = true) + private BigDecimal sumamt; + @IMField(key = "ownpay_amt", name = "自费金额", required = true) + private BigDecimal ownpayAmt; + @IMField(key = "selfpay_amt", name = "自付金额", required = true) + private BigDecimal selfpayAmt; + @IMField(key = "spec", name = "规格", required = true) + private String spec; + @IMField(key = "spec_unt", name = "数量单位", required = true) + private String specUnt; + @IMField(key = "drord_begn_date", name = "医嘱开始日期", required = true) + private LocalDateTime drordBegnDate; + @IMField(key = "drord_stop_date", name = "医嘱停止日期") + private LocalDateTime drordStopDate; + @IMField(key = "drord_dept_codg", name = "下达医嘱的科室标识", required = true) + private String drordDeptCodg; + @IMField(key = "drord_dept_name", name = "下达医嘱科室名称", required = true) + private String drordDeptName; + @IMField(key = "drord_dr_codg", name = "开处方(医嘱)医生标识", required = true) + private String drordDrCodg; + @IMField(key = "drord_dr_name", name = "开处方(医嘱)医生姓名", required = true) + private String drordDrName; + @IMField(key = "drord_dr_profttl", name = "开处方(医嘱)医职称", required = true) + private String drordDrProfttl; + @IMField(key = "curr_drord_flag", name = "是否当前处方(医嘱)", required = true) + private String currDrordFlag; +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/PatientDtos.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/PatientDtos.java new file mode 100644 index 0000000..07115c1 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/im3101/PatientDtos.java @@ -0,0 +1,32 @@ +package com.syjiaer.clinic.server.common.api.input.im3101; + +import com.syjiaer.clinic.server.common.api.annotations.IMField; +import com.syjiaer.clinic.server.common.api.input.BaseInputModel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.time.LocalDate; +import java.util.List; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class PatientDtos extends BaseInputModel { + @IMField(key = "patn_id", name = "参保人标识", required = true) + private String patnId; + @IMField(key = "patn_name", name = "姓名", required = true) + private String patnName; + @IMField(key = "gend", name = "性别", required = true) + private String gend; + @IMField(key = "brdy", name = "出生日期", required = true) + private LocalDate brdy; + @IMField(key = "poolarea", name = "统筹区编码", required = true) + private String poolarea; + @IMField(key = "curr_mdtrt_id", name = "当前就诊标识", required = true) + private String currMdtrtId; + @IMField(key = "fsi_encounter_dtos", name = "就诊信息集合", required = true) + private List fsiEncounterDtos; +} \ No newline at end of file