Просмотр исходного кода

新增电子病历的片段数据源

xiaochan 2 месяцев назад
Родитель
Сommit
d393b4b027

+ 33 - 0
src/main/java/thyyxxk/webserver/dao/his/crbmanagement/CrbEmrDao.java

@@ -0,0 +1,33 @@
+package thyyxxk.webserver.dao.his.crbmanagement;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.crbmanagement.PatientInfo;
+
+@Mapper
+public interface CrbEmrDao {
+    @Select("select rtrim(a.inpatient_no)                                   as patient_id,\n" +
+            "       rtrim(a.inpatient_no)                                   as serial_number,\n" +
+            "       rtrim(a.name)                                           as patient_name,\n" +
+            "       social_no                                               as id_card,\n" +
+            "       ward                                                    as ward_no,\n" +
+            "       (select name from zd_unit_code where code = ward)       as ward_name,\n" +
+            "       admiss_date                                             as admission_date,\n" +
+            "       isnull(a.admiss_diag, c.icd_code)                       as admission_diagnosis_code,\n" +
+            "       c.icd_text                                              as admission_diagnosis_name,\n" +
+            "       psn_cert_type                                           as id_card_type_code,\n" +
+            "       (select name\n" +
+            "        from t_zd_psn_cert_type\n" +
+            "        where code = psn_cert_type)                            as id_card_type_name,\n" +
+            "       admiss_physician                                        as visiting_physician_id,\n" +
+            "       refer_physician                                         as resident_physician_id,\n" +
+            "       consult_physician                                       as chief_physician_id,\n" +
+            "       small_dept                                              as dept_code,\n" +
+            "       (select name from zd_unit_code where code = small_dept) as dept_name\n" +
+            "from view_zy_allpatient a\n" +
+            "         left join a_patient_mi b on (a.inpatient_no = b.inpatient_no)\n" +
+            "         left join zy_in_diag_yb c\n" +
+            "                   on (a.inpatient_no = c.inpatient_no and a.admiss_times = c.admiss_times and c.diag_no = 1)where a.inpatient_no = #{patNo}\n" +
+            "  and c.admiss_times = #{times}")
+    PatientInfo selectPatientInfo(String patNo, Integer times);
+}

+ 12 - 11
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/emr/EmrPatientDao.java

@@ -65,17 +65,13 @@ public interface EmrPatientDao extends BaseMapper<EmrPatientData> {
     @Delete("delete emr_progress_note where document_id = #{documentId} ")
     void delOldFragment(Integer documentId);
 
-    @Insert("<script>" +
-            "insert into emr_progress_note " +
-            "(document_id, name, create_id, creation_time," +
+    @Insert("insert into emr_progress_note " +
+            "(document_id, name, create_id, creation_time,data_element," +
             " refer_physician, consult_physician, dept_director) " +
             "values" +
-            "<foreach collection='list' item='item' separator=','>" +
-            " (#{documentId}, #{item.name},#{item.createId},#{item.creationTime}," +
-            "#{item.referPhysician},#{item.consultPhysician},#{item.deptDirector})" +
-            "</foreach>" +
-            "</script>")
-    void insertFragment(@Param("list") List<EmrProgressNote> list,
+            " (#{documentId}, #{item.name},#{item.createId},#{item.creationTime},#{item.dataElement}," +
+            "#{item.referPhysician},#{item.consultPhysician},#{item.deptDirector})")
+    void insertFragment(@Param("item") EmrProgressNote list,
                         @Param("documentId") Integer documentId);
 
     @Update("update emr_patient_data " +
@@ -563,15 +559,20 @@ public interface EmrPatientDao extends BaseMapper<EmrPatientData> {
 
     @Select("select top 1 emr_data_element\n" +
             "from emr_patient_data\n" +
-            "where emr_category_code = 'ruyuanjiluzhuanyong' and pat_no = #{patNo} and times = #{times} " +
+            "where emr_category_code = 'ruyuanjiluzhuanyong' and pat_no = #{patNo} and times = #{times} and del_flag = 0 " +
             "order by create_date desc")
     String obtainAdmissionDiagnosis(String patNo, Integer times);
 
 
     @Select("select top 1 emr_data_element\n" +
             "from emr_patient_data\n" +
-            "where emr_category_code = '${code}' and pat_no = #{patNo} and times = #{times} " +
+            "where emr_category_code = '${code}' and pat_no = #{patNo} and times = #{times} and del_flag = 0 " +
             "order by create_date desc")
     String findEmrByCode(String patNo, Integer times, String code);
 
+    @Select("select top 1 emr_data_element as emrDataElementStr, *\n" +
+            "from emr_patient_data\n" +
+            "where emr_category_code = '${code}' and pat_no = #{patNo} and times = #{times} and del_flag = 0 " +
+            "order by create_date desc")
+    EmrPatientData findEmrDataByCode(String patNo, Integer times, String code);
 }

+ 53 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/PatientInfo.java

@@ -0,0 +1,53 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PatientInfo {
+    // 2. 患者基本信息ID
+    private String patientId; // varchar 80 必填,患者唯一标识
+
+    // 3. 住院号
+    private String serialNumber; // varchar 20 必填,住院就诊顺序号
+
+    // 4. 病区名称
+    private String wardName; // varchar 50 建议填
+
+    // 5. 病房号
+    private String wardNo; // varchar 10 建议填
+
+    // 6. 病床号
+    private String bedNo; // varchar 10 建议填
+
+    // 7. 患者姓名
+    private String patientName; // varchar 100 必填,公安户籍姓名
+
+    // 8. 身份证件类别代码
+    private String idCardTypeCode; // varchar 2 必填,值域:WS364.3-2023 CV02.01.101
+
+    // 9. 身份证件类别名称
+    private String idCardTypeName; // varchar 20 必填,需与代码一致
+
+    // 10. 身份证件号码
+    private String idCard; // varchar 50 必填,新生儿用出生日期8位
+
+    // 11. 入院日期时间
+    private Date admissionDate; // timestamp 建议填,格式:yyyy-MM-dd HH:mm:ss
+
+    // 56. 接诊医师
+    private String visitingPhysicianId; // varchar 50 建议填,医师用户ID
+
+    // 57. 住院医师
+    private String residentPhysicianId; // varchar 50 建议填,医师用户ID
+
+    // 58. 主治医师
+    private String chiefPhysicianId; // varchar 50 建议填,医师用户ID
+
+    // 61. 科室代码
+    private String deptCode; // varchar 20 必填,院内科室代码
+
+    // 62. 科室名称
+    private String deptName; // varchar 50 必填,需与代码一致
+}

+ 182 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/emr/EmrAdmissionInfo.java

@@ -0,0 +1,182 @@
+package thyyxxk.webserver.entity.crbmanagement.emr;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import thyyxxk.webserver.entity.crbmanagement.PatientInfo;
+
+
+import java.util.Date;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class EmrAdmissionInfo extends PatientInfo {
+    // 1. 入院记录ID
+    private String id; // varchar 80 必填,院内唯一标识
+
+    // 12. 主诉
+    @EmrContrast({"主诉"})
+    private String chiefComplaint; // text 建议填,主要症状及持续时间
+
+    // 13. 现病史
+    @EmrContrast("现病史")
+    private String presentIllnessHis; // text 建议填,当前疾病详细描述
+
+    // 14. 一般健康状况标志
+    private String healthStatusCode; // varchar 1 建议填
+
+    // 15. 疾病史(含外伤)
+    @EmrContrast("疾病史")
+    private String pastIllnessHis; // text 建议填
+
+    // 16. 患者传染性标志
+    private String infectionCode; // varchar 1 建议填
+
+    // 17. 传染病史
+    @EmrContrast("传染病史")
+    private String infectionHis; // text 建议填
+
+    // 18. 预防接种史
+    @EmrContrast("预防接种史")
+    private String vaccinationHis; // text 非必填
+
+    // 19. 手术史
+    @EmrContrast("手术史")
+    private String operationHis; // text 非必填
+
+    // 20. 输血史
+    @EmrContrast("输血史")
+    private String bloodTransfusion; // text 非必填
+
+    // 21. 过敏史
+    @EmrContrast("过敏史")
+    private String allergyHis; // text 建议填
+
+    // 22. 个人史
+    @EmrContrast("个人史")
+    private String personalHis; // text 非必填
+
+    // 23. 婚育史
+    @EmrContrast("婚育史")
+    private String maritalHis; // text 非必填
+
+    // 24. 月经史
+    @EmrContrast("月经史")
+    private String menstrualHis; // text 非必填
+
+    // 25. 家族史
+    @EmrContrast("家族史")
+    private String familyHis; // text 非必填
+
+    // 26. 体格检查
+    @EmrContrast("体格检查")
+    private String physicalExamination; // text 建议填,含阳性/阴性体征
+
+    // 27. 专科情况
+    @EmrContrast("专科情况")
+    private String specializedExamination; // text 非必填
+
+    // 28. 辅助检查
+    @EmrContrast("辅助检查")
+    private String studiesSummaryResult; // text 建议填
+
+    // 29. 中医“四诊”观察结果
+    private String observationResult; // text 非必填
+
+    // 30. 治则治法
+    private String treatment; // varchar 100 非必填,值域:GB/T 16751.3-2023
+
+    // 31. 初步诊断-西医诊断编码
+    private String wmInitialDiagnosisCode; // varchar 400 建议填,ICD10代码
+
+    // 32. 初步诊断-西医诊断名称
+    private String wmInitialDiagnosisName; // varchar 400 建议填,需与代码一致
+
+    // 33. 初步诊断-中医病名代码
+    private String tcmInitialDiagnosisCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 34. 初步诊断-中医病名名称
+    private String tcmInitialDiagnosisName; // varchar 250 非必填,需与代码一致
+
+    // 35. 初步诊断-中医证候代码
+    private String tcmInitialSyndromeCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 36. 初步诊断-中医证候名称
+    private String tcmInitialSyndromeName; // varchar 250 非必填,需与代码一致
+
+    // 37. 初步诊断日期
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date initalDiagnosisDate; // timestamp 建议填,格式:yyyy-MM-dd
+
+    // 38. 修正诊断-西医诊断代码
+    private String wmRevisedDiagnosisCode; // varchar 400 建议填,ICD10代码
+
+    // 39. 修正诊断-西医诊断名称
+    private String wmRevisedDiagnosisName; // varchar 400 建议填,需与代码一致
+
+    // 40. 修正诊断-中医病名代码
+    private String tcmRevisedDiagnosisCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 41. 修正诊断-中医病名名称
+    private String tcmRevisedDiagnosisName; // varchar 250 非必填,需与代码一致
+
+    // 42. 修正诊断-中医证候代码
+    private String tcmRevisedSyndromeCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 43. 修正诊断-中医证候名称
+    private String tcmRevisedSyndromeName; // varchar 250 非必填,需与代码一致
+
+    // 44. 修正诊断日期
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date revisedDiagnosisDate; // timestamp 建议填,格式:yyyy-MM-dd
+
+    // 45. 确定诊断-西医诊断代码
+    private String wmConfirmedDiagnosisCode; // varchar 400 必填,ICD10代码
+
+    // 46. 确定诊断-西医诊断名称
+    private String wmConfirmedDiagnosisName; // varchar 400 必填,需与代码一致
+
+    // 47. 确定诊断-中医病名代码
+    private String tcmConfirmedDiagnosisCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 48. 确定诊断-中医病名名称
+    private String tcmConfirmedDiagnosisName; // varchar 250 非必填,需与代码一致
+
+    // 49. 确定诊断-中医证候代码
+    private String tcmConfirmedSyndromeCode; // varchar 250 非必填,GB/T 15657-2021
+
+    // 50. 确定诊断-中医证候名称
+    private String tcmConfirmedSyndromeName; // varchar 250 非必填,需与代码一致
+
+    // 51. 确定诊断日期
+    private Date confirmedDiagnosisDate; // timestamp 必填,格式:yyyy-MM-dd HH:mm:ss
+
+    // 52. 补充诊断编码
+    private String complementaryDiagnosisCode; // varchar 50 建议填,ICD10代码
+
+    // 53. 补充诊断名称
+    private String complementaryDiagnosisName; // varchar 250 建议填,需与代码一致
+
+    // 54. 补充诊断日期
+    private Date complementaryDiagnosisDate; // timestamp 建议填,格式:yyyy-MM-dd HH:mm:ss
+
+    // 55. 入院诊断顺位
+    private String admissionDiagnosisOrder; // varchar 2 非必填
+
+    // 59. 医疗机构代码
+    private String orgCode; // varchar 9 必填,疾控机构代码
+
+    // 60. 医疗机构名称
+    private String orgName; // varchar 100 必填,需与代码一致
+
+    // 63. 操作人ID
+    private String operatorId; // varchar 40 非必填,系统用户ID
+
+    // 64. 操作时间
+    private Date operationTime; // timestamp 必填,格式:yyyy-MM-dd HH:mm:ss
+}

+ 13 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/emr/EmrContrast.java

@@ -0,0 +1,13 @@
+package thyyxxk.webserver.entity.crbmanagement.emr;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EmrContrast {
+
+    String[] value() default "";
+}

+ 220 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/emr/EmrDischargeInfo.java

@@ -0,0 +1,220 @@
+package thyyxxk.webserver.entity.crbmanagement.emr;
+
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class EmrDischargeInfo {
+
+    /**
+     * ID
+     */
+    private String id;
+
+    /**
+     * 患者基本信息ID
+     */
+    private String patientId;
+
+    /**
+     * 住院号
+     */
+    private String serialNumber;
+
+    /**
+     * 患者姓名
+     */
+    private String patientName;
+
+    /**
+     * 身份证件类别代码
+     */
+    private String idCardTypeCode;
+
+    /**
+     * 身份证件类别名称
+     */
+    private String idCardTypeName;
+
+    /**
+     * 身份证件号码
+     */
+    private String idCard;
+
+    /**
+     * 病区名称
+     */
+    private String wardName;
+
+    /**
+     * 病房号
+     */
+    private String wardNo;
+
+    /**
+     * 病床号
+     */
+    private String bedNo;
+
+    /**
+     * 入院日期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date admissionDate;
+
+    /**
+     * 入院情况
+     */
+    private String admissionDesc;
+
+    /**
+     * 入院诊断编码
+     */
+    private String admissionDiagnosisCode;
+
+    /**
+     * 入院诊断名称
+     */
+    private String admissionDiagnosisName;
+
+    /**
+     * 阳性辅助检查结果
+     */
+    private String studiesSummaryResult;
+
+    /**
+     * 中医"四诊"观察结果
+     */
+    private String observationResult;
+
+    /**
+     * 治则治法
+     */
+    private String treatment;
+
+    /**
+     * 诊疗过程描述
+     */
+    @EmrContrast({"诊疗经过"})
+    private String treatmentDesc;
+
+    /**
+     * 中药煎煮方法
+     */
+    private String tcmDecoctionMethod;
+
+    /**
+     * 中药用药方法
+     */
+    private String tcmUseMethod;
+
+    /**
+     * 出院情况
+     */
+    @EmrContrast({"出院情况"})
+    private String dischargeDesc;
+
+    /**
+     * 出院日期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date dischargeDate;
+
+    /**
+     * 出院诊断-西医诊断代码
+     */
+    private String dischargeDiagnosisCode;
+
+    /**
+     * 出院诊断-西医诊断名称
+     */
+    private String dischargeDiagnosisName;
+
+    /**
+     * 出院诊断-中医病名代码
+     */
+    private String tcmDischargeDiagnosisCode;
+
+    /**
+     * 出院诊断-中医病名名称
+     */
+    private String tcmDischargeDiagnosisName;
+
+    /**
+     * 出院诊断-中医证候代码
+     */
+    private String tcmDischargeSyndromeCode;
+
+    /**
+     * 出院诊断-中医证候名称
+     */
+    private String tcmDischargeSyndromeName;
+
+    /**
+     * 出院时症状与体征
+     */
+    private String dischargeSymptomsSigns;
+
+    /**
+     * 出院医嘱
+     */
+    @EmrContrast({"出院医嘱"})
+    private String dischargeOrder;
+
+    /**
+     * 病情转归代码
+     */
+    private String diseaseProgressionCode;
+
+    /**
+     * 病情转归名称
+     */
+    private String diseaseProgressionName;
+
+    /**
+     * 住院医师
+     */
+    private String residentPhysicianId;
+
+    /**
+     * 主治医师
+     */
+    private String chiefPhysicianId;
+
+    /**
+     * 医疗机构代码
+     */
+    private String orgCode;
+
+    /**
+     * 医疗机构名称
+     */
+    private String orgName;
+
+    /**
+     * 科室代码
+     */
+    private String deptCode;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+
+    /**
+     * 操作人ID
+     */
+    private String operatorId;
+
+    /**
+     * 操作时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date operationTime;
+}

+ 206 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/emr/EmrFirstCourse.java

@@ -0,0 +1,206 @@
+package thyyxxk.webserver.entity.crbmanagement.emr;
+
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class EmrFirstCourse {
+
+    /**
+     * ID
+     */
+    private String id;
+
+    /**
+     * 患者基本信息ID
+     */
+    private String patientId;
+
+    /**
+     * 住院号
+     */
+    private String serialNumber;
+
+    /**
+     * 患者姓名
+     */
+    private String patientName;
+
+    /**
+     * 身份证件类别代码
+     */
+    private String idCardTypeCode;
+
+    /**
+     * 身份证件类别名称
+     */
+    private String idCardTypeName;
+
+    /**
+     * 身份证件号码
+     */
+    private String idCard;
+
+    /**
+     * 病区名称
+     */
+    private String wardName;
+
+    /**
+     * 病房号
+     */
+    private String wardNo;
+
+    /**
+     * 病床号
+     */
+    private String bedNo;
+
+    /**
+     * 记录日期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 主诉
+     */
+    private String chiefComplaint;
+
+    /**
+     * 病例特点
+     */
+    @EmrContrast({"病例特点", "临床表现", "辅助检查", "诊断依据", "诊疗计划"})
+    private String presentIllnessHis;
+
+    /**
+     * 中医"四诊"观察结果
+     */
+    private String observationResult;
+
+    /**
+     * 诊断依据
+     */
+    private String diagnosisBasis;
+
+    /**
+     * 初步诊断西医诊断编码
+     */
+    private String wmInitalDiagnosisCode;
+
+    /**
+     * 初步诊断西医诊断名称
+     */
+    private String wmInitalDiagnosisName;
+
+    /**
+     * 初步诊断中医病名代码
+     */
+    private String tcmInitalDiagnosisCode;
+
+    /**
+     * 初步诊断中医病名名称
+     */
+    private String tcmInitalDiagnosisName;
+
+    /**
+     * 初步诊断中医证候代码
+     */
+    private String tcmInitalSyndromeCode;
+
+    /**
+     * 初步诊断中医证候名称
+     */
+    private String tcmInitalSyndromeName;
+
+    /**
+     * 鉴别诊断西医诊断代码
+     */
+    private String wmDiffDiagnosisCode;
+
+    /**
+     * 鉴别诊断西医诊断名称
+     */
+    private String wmDiffDiagnosisName;
+
+    /**
+     * 鉴别诊断中医病名代码
+     */
+    private String tcmPrimaryDiagnosisCode;
+
+    /**
+     * 鉴别诊断中医病名名称
+     */
+    private String tcmPrimaryDiagnosisName;
+
+    /**
+     * 鉴别诊断中医证候代码
+     */
+    private String tcmPrimarySyndromeCode;
+
+    /**
+     * 鉴别诊断中医证候名称
+     */
+    private String tcmPrimarySyndromeName;
+
+    /**
+     * 治则治法
+     */
+    private String treatment;
+
+    /**
+     * 诊疗计划
+     */
+    private String treatmentPlan;
+
+    /**
+     * 病情转归代码
+     */
+    private String diseaseProgressionCode;
+
+    /**
+     * 病情转归名称
+     */
+    private String diseaseProgressionName;
+
+    /**
+     * 住院医师
+     */
+    private String residentPhysicianId;
+
+    /**
+     * 医疗机构代码
+     */
+    private String orgCode;
+
+    /**
+     * 医疗机构名称
+     */
+    private String orgName;
+
+    /**
+     * 科室代码
+     */
+    private String deptCode;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+
+    /**
+     * 操作人ID
+     */
+    private String operatorId;
+
+    /**
+     * 操作时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date operationTime;
+}

+ 132 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/emr/EmrOrder.java

@@ -0,0 +1,132 @@
+package thyyxxk.webserver.entity.crbmanagement.emr;
+
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class EmrOrder {
+
+    /**
+     * ID
+     */
+    private String id;
+
+    /**
+     * 患者基本信息ID
+     */
+    private String patientId;
+
+    /**
+     * 就诊记录类型代码
+     */
+    private String activityTypeCode;
+
+    /**
+     * 就诊记录类型名称
+     */
+    private String activityTypeName;
+
+    /**
+     * 就诊流水号
+     */
+    private String serialNumber;
+
+    /**
+     * 患者姓名
+     */
+    private String patientName;
+
+    /**
+     * 身份证件类别代码
+     */
+    private String idCardTypeCode;
+
+    /**
+     * 身份证件类别名称
+     */
+    private String idCardTypeName;
+
+    /**
+     * 身份证件号码
+     */
+    private String idCard;
+
+    /**
+     * 处方编号
+     */
+    private String prescriptionNo;
+
+    /**
+     * 处方类别代码
+     */
+    private String prescriptionTypeCode;
+
+    /**
+     * 处方开立日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date prescriptionIssuanceDate;
+
+    /**
+     * 处方有效天数
+     */
+    private String prescriptionValidityDays;
+
+    /**
+     * 医嘱处方执行日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date excuteDate;
+
+    /**
+     * 处方开立医师
+     */
+    private String prescriptionIssuanceId;
+
+    /**
+     * 处方发药药剂师
+     */
+    private String prescriptionDispensingId;
+
+    /**
+     * 处方备注信息
+     */
+    private String prescriptionNotes;
+
+    /**
+     * 医疗机构代码
+     */
+    private String orgCode;
+
+    /**
+     * 医疗机构名称
+     */
+    private String orgName;
+
+    /**
+     * 科室代码
+     */
+    private String deptCode;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+
+    /**
+     * 操作人ID
+     */
+    private String operatorId;
+
+    /**
+     * 操作时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date operationTime;
+}

+ 1 - 1
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emr/EmrPatientData.java

@@ -200,7 +200,7 @@ public class EmrPatientData implements Serializable {
         if (emrDataElement != null) {
             return emrDataElement.toString();
         }
-        return "";
+        return emrDataElementStr;
     }
 
     public static LambdaQueryWrapper<EmrPatientData> lambdaQueryWrapper() {

+ 47 - 43
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emr/EmrProgressNote.java

@@ -1,52 +1,56 @@
 package thyyxxk.webserver.entity.zhuyuanyisheng.emr;
 
 import java.io.Serializable;
+
 import lombok.Data;
+
 import java.util.Date;
 
 @Data
-public class EmrProgressNote  implements Serializable {
-
-	private static final long serialVersionUID =  6840863528152959447L;
-
-	/**
-	 * id
-	 */
-	private Integer id;
-
-	/**
-	 * 文档id对应 emr_patient_data 表中的 id
-	 */
-	private String documentId;
-
-	/**
-	 * 病程片段的名称
-	 */
-	private String name;
-
-	/**
-	 * 创建人
-	 */
-	private String createId;
-
-	/**
-	 * 创建时间
-	 */
-	private Date creationTime;
-
-	/**
-	 * 管床医生
-	 */
-	private String referPhysician;
-
-	/**
-	 * 主治医生
-	 */
-	private String consultPhysician;
-
-	/**
-	 * 主任医生
-	 */
-	private String deptDirector;
+public class EmrProgressNote implements Serializable {
+
+    private static final long serialVersionUID = 6840863528152959447L;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 文档id对应 emr_patient_data 表中的 id
+     */
+    private String documentId;
+
+    /**
+     * 病程片段的名称
+     */
+    private String name;
+
+    /**
+     * 创建人
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date creationTime;
+
+    /**
+     * 管床医生
+     */
+    private String referPhysician;
+
+    /**
+     * 主治医生
+     */
+    private String consultPhysician;
+
+    /**
+     * 主任医生
+     */
+    private String deptDirector;
+
+    private String dataElement;
 
 }

+ 137 - 0
src/main/java/thyyxxk/webserver/service/crbmanagement/CrbUpdateByEmr.java

@@ -0,0 +1,137 @@
+package thyyxxk.webserver.service.crbmanagement;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONConfig;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.envionment.MedinsurConfig;
+import thyyxxk.webserver.dao.his.crbmanagement.CrbEmrDao;
+import thyyxxk.webserver.dao.his.zhuyuanyisheng.emr.EmrPatientDao;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrAdmissionInfo;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrDischargeInfo;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrFirstCourse;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrPatientData;
+import thyyxxk.webserver.utils.DateUtil;
+import thyyxxk.webserver.utils.EmrJsonUtils2;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@RequiredArgsConstructor
+@Service
+@Slf4j
+public class CrbUpdateByEmr {
+    private final EmrPatientDao emrDao;
+    private final CrbEmrDao dao;
+    private final static String EMPTY = "-";
+    private final MedinsurConfig config;
+
+    @PostConstruct
+    public void init() {
+        getData("000362", 14);
+    }
+
+    public Map<String, Object> getData(String patNo, Integer times) {
+        Map<String, Object> map = new HashMap<>();
+        EmrAdmissionInfo admissionInfo = getEmrAdmissionInfo(patNo, times);
+        map.put("EmrAdmissionInfo", admissionInfo);
+        map.put("EmrFirstCourse", getEmrFirstCourse(patNo, times, admissionInfo));
+        map.put("EmrDischargeInfo", getEmrDischargeInfo(patNo, times, admissionInfo));
+        log.info("数据:{}", JSONUtil.toJsonStr(map, new JSONConfig().setDateFormat(DateUtil.DEFAULT_PATTERN)));
+        return map;
+    }
+
+    /**
+     * 获取患者入院信息
+     *
+     * @param patNo 住院号
+     * @param times 住院次数
+     * @return str
+     */
+    public EmrAdmissionInfo getEmrAdmissionInfo(String patNo, Integer times) {
+        EmrPatientData emrPatientData = emrDao.findEmrDataByCode(patNo, times, "ruyuanjiluzhuanyong");
+        EmrJsonUtils2 json = EmrJsonUtils2.create(emrPatientData.getEmrDataElementStr());
+        EmrAdmissionInfo info = BeanUtil.toBean(dao.selectPatientInfo(patNo, times), EmrAdmissionInfo.class);
+        info.setId(emrPatientData.getEmrDocumentId());
+        boolean isNotNull = !json.isEmpty();
+
+        json.setObjectByEmrBusiness(info);
+
+        if (!isNotNull) {
+            return info;
+        }
+
+        json.getFirstArr("入院诊断", (value) -> {
+            info.setWmInitialDiagnosisCode(value.getCode());
+            info.setWmInitialDiagnosisName(value.getName());
+            info.setInitalDiagnosisDate(emrPatientData.getCreateDate());
+
+
+            info.setWmConfirmedDiagnosisCode(value.getCode());
+            info.setWmConfirmedDiagnosisName(value.getName());
+            info.setConfirmedDiagnosisDate(emrPatientData.getCreateDate());
+        });
+        json.getFirstArr("目前诊断", (val) -> {
+            info.setWmRevisedDiagnosisCode(val.getCode());
+            info.setWmRevisedDiagnosisName(val.getName());
+            info.setRevisedDiagnosisDate(DateUtil.parse(json.getKeyArrStrValue("诊断时间", 0), DateUtil.DATE));
+        });
+
+        json.getKeyArrValue("补充诊断", 0, (val) -> {
+            info.setComplementaryDiagnosisCode(val.get(0).getCode());
+            info.setComplementaryDiagnosisName(val.get(0).getName());
+            info.setComplementaryDiagnosisDate(DateUtil.parse(json.getKeyArrStrValue("诊断时间", 1)));
+        });
+
+
+        info.setOrgCode(config.getHospId());
+        info.setOrgName(config.getHospName());
+        info.setOperatorId(emrPatientData.getCreateId());
+        info.setOperationTime(new Date());
+
+        return info;
+    }
+
+
+    public EmrFirstCourse getEmrFirstCourse(String patNo, Integer times, EmrAdmissionInfo admissionInfo) {
+        EmrFirstCourse info = BeanUtil.toBean(admissionInfo, EmrFirstCourse.class);
+        EmrPatientData emrData = emrDao.findEmrDataByCode(patNo, times, "shoucibingchengjilu");
+
+        EmrJsonUtils2 emrJsonUtils2 = EmrJsonUtils2.create(emrData.getEmrDataElementStr());
+
+        info.setCreateTime(emrData.getCreateDate());
+
+        info.setOrgCode(config.getHospId());
+        info.setOrgName(config.getHospName());
+        info.setOperatorId(emrData.getCreateId());
+        info.setOperationTime(new Date());
+
+        emrJsonUtils2.setObjectByEmrBusiness(info);
+        return info;
+    }
+
+    public EmrDischargeInfo getEmrDischargeInfo(String patNo, Integer times, EmrAdmissionInfo admissionInfo) {
+        EmrDischargeInfo info = BeanUtil.toBean(admissionInfo, EmrDischargeInfo.class);
+        EmrPatientData emrData = emrDao.findEmrDataByCode(patNo, times, "chuyuanjilu");
+        EmrJsonUtils2 emrJsonUtils2 = EmrJsonUtils2.create(emrData.getEmrDataElementStr());
+        emrJsonUtils2.setObjectByEmrBusiness(info);
+
+        info.setDischargeDate(DateUtil.parse(emrJsonUtils2.getStr("出院时间")));
+
+        emrJsonUtils2.getFirstArr("出院诊断", (val) -> {
+            info.setDischargeDiagnosisCode(val.getCode());
+            info.setDischargeDiagnosisName(val.getName());
+        });
+        info.setOrgCode(config.getHospId());
+        info.setOrgName(config.getHospName());
+        info.setOperatorId(emrData.getCreateId());
+        info.setOperationTime(new Date());
+        return info;
+    }
+
+
+}

+ 3 - 4
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/emr/EmrServer.java

@@ -365,10 +365,9 @@ public class EmrServer {
             return;
         }
         dao.delOldFragment(id);
-        List<List<EmrProgressNote>> lists = ListUtils.partition(fragment, 50);
-        for (List<EmrProgressNote> list : lists) {
-            dao.insertFragment(list, id);
-        }
+        ListUtil.batchList(fragment, EmrPatientDao.class, (m, i) -> {
+            m.insertFragment(i, id);
+        });
     }
 
     /**

+ 234 - 0
src/main/java/thyyxxk/webserver/utils/EmrJsonUtils2.java

@@ -0,0 +1,234 @@
+package thyyxxk.webserver.utils;
+
+import cn.hutool.core.util.ReflectUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.Getter;
+import thyyxxk.webserver.entity.CodeName;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrContrast;
+
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+public class EmrJsonUtils2 {
+
+    private final String VALUE = ".value";
+
+
+    public static enum TypeEnum {
+        JSONObject,
+        JSONArray,
+        String
+    }
+
+    @Getter
+    private JSONObject json;
+
+    public static EmrJsonUtils2 create(String value) {
+        return new EmrJsonUtils2(value);
+    }
+
+    public EmrJsonUtils2(String value) {
+        json = JSONUtil.parseObj(value);
+    }
+
+    public boolean isEmpty() {
+        return json.isEmpty();
+    }
+
+    private <T> T tryValue(Supplier<T> supplier, T defaultValue) {
+        try {
+            return supplier.get();
+        } catch (Exception ignore) {
+            return defaultValue;
+        }
+    }
+
+    private <T> T tryValue(Supplier<T> supplier) {
+        try {
+            return supplier.get();
+        } catch (Exception ignore) {
+            return null;
+        }
+    }
+
+    /**
+     * <pre>{
+     *     "value": "暂缺。",
+     *     "id": "k56CUd_u1PmL",
+     *     "format": null,
+     *  }
+     * </pre>
+     *
+     * @param key 业务编码
+     * @return 返回 value
+     */
+    public String getStr(String key) {
+        return tryValue(() -> json.getByPath(key + VALUE, String.class), "");
+    }
+
+    /**
+     * 解析下面的数据格式
+     *
+     * <pre> {
+     *     "value": [
+     *         {
+     *             "code": "01",
+     *             "name": "未见蠕动波"
+     *         }
+     *     ],
+     *     "id": "P5nWuuGSLVOL",
+     *     "format": null,
+     * }
+     *
+     * </pre>
+     *
+     * @param key 业务编码
+     * @return 返回 List<CodeName>
+     */
+    public List<CodeName> getArr(String key) {
+        return tryValue(() -> json.getByPath(key + VALUE, JSONArray.class).toList(CodeName.class));
+    }
+
+    /**
+     * 获取数组对象的第一个数据,解析上面的数据格式
+     *
+     * @param key 业务编码
+     * @return CodeName
+     */
+    public CodeName getFirstArr(String key) {
+        List<CodeName> arr = getArr(key);
+        if (arr != null) {
+            return arr.get(0);
+        }
+        return null;
+    }
+
+
+    public void getFirstArr(String key, Consumer<CodeName> predicate) {
+        CodeName firstArr = getFirstArr(key);
+        if (firstArr != null) {
+            predicate.accept(firstArr);
+        }
+    }
+
+
+    /**
+     * 如果一个数据源在一份病历中有多个的话就会是一个数组
+     * <pre>
+     * {"key" : [{"value": null}, {"value": "2025-09-18 00:00:00"}]}
+     * </pre>
+     *
+     * @param key   编码
+     * @param index 要第几个
+     * @return str
+     */
+    public String getKeyArrStrValue(String key, int index) {
+        return tryValue(() -> json.getByPath(key + "[" + index + "]" + VALUE, String.class));
+    }
+
+
+    /**
+     * <pre>
+     *
+     * "补充诊断": [
+     *         {
+     *             "value": [
+     *                 {
+     *                     "code": "A00.100x001",
+     *                     "name": "埃尔托生物型霍乱"
+     *                 }
+     *             ]
+     *         },
+     *         {
+     *             "value": null
+     *         },
+     *         {
+     *             "value": null
+     *         },
+     *         {
+     *             "value": null
+     *         }
+     *     ]
+     * </pre>
+     */
+    public List<CodeName> getKeyArrValue(String key, Integer index) {
+        return tryValue(() -> json.getByPath(key + "[" + index + "]" + VALUE, JSONArray.class).toList(CodeName.class));
+    }
+
+    public void getKeyArrValue(String key, Integer index, Consumer<List<CodeName>> consumer) {
+        List<CodeName> value = getKeyArrValue(key, index);
+        if (value != null) {
+            consumer.accept(value);
+        }
+    }
+
+
+    public TypeEnum getType(String key) {
+        Object obj = json.getObj(key);
+        if (obj instanceof JSONObject) {
+            return TypeEnum.JSONObject;
+        }
+
+        if (obj instanceof JSONArray) {
+            return TypeEnum.JSONArray;
+        }
+        return null;
+    }
+
+    /**
+     * 获取 json 的value类型
+     *
+     * @param key 业务编码
+     * @return 数据
+     */
+    public TypeEnum getValueType(String key) {
+        Object obj = json.getByPath(key + VALUE, Object.class);
+        if (obj instanceof String) {
+            return TypeEnum.String;
+        }
+
+        if (obj instanceof JSONArray) {
+            return TypeEnum.JSONArray;
+        }
+        if (obj instanceof JSONObject) {
+            return TypeEnum.JSONObject;
+        }
+        return null;
+    }
+
+
+    public void setObjectByEmrBusiness(Object clazz) {
+        for (Field field : clazz.getClass().getDeclaredFields()) {
+            EmrContrast annotation = field.getAnnotation(EmrContrast.class);
+            if (annotation != null && !json.isEmpty()) {
+                String value = parseData(annotation.value());
+                ReflectUtil.invoke(clazz, StringUtil.setMethodName(field.getName()), value);
+            }
+        }
+    }
+
+    private String parseData(String[] key) {
+        StringBuilder sb = new StringBuilder();
+        for (String s : key) {
+            TypeEnum type = getValueType(s);
+            if (type == null) {
+                continue;
+            }
+            if (type == TypeEnum.String) {
+                sb.append(getStr(s));
+            }
+            if (type == TypeEnum.JSONArray) {
+                getFirstArr(s, (val) -> {
+                    sb.append(val.getName());
+                });
+            }
+        }
+        return sb.toString();
+    }
+
+
+}

+ 7 - 0
update/2025-09-19.md

@@ -0,0 +1,7 @@
+新增字段,片段的json业务数据源
+
+```sql
+alter table emr_progress_note
+    add data_element text
+go
+```