Pārlūkot izejas kodu

传染病上传(基本,诊疗活动)

hsh 2 mēneši atpakaļ
vecāks
revīzija
365889d7b7

+ 0 - 6
src/main/java/thyyxxk/webserver/controller/crbmanagement/CrbBaseController.java

@@ -58,12 +58,6 @@ public class CrbBaseController {
         return service.selectBaseDept(baseDept);
     }
 
-    @PassToken
-    @PostMapping("uploadEmrPatientInfo")
-    public ResultVo<JSONObject> uploadEmrPatientInfo(@RequestBody @Validated EmrPatientInfo emrPatientInfo){
-        return service.uploadEmrPatientInfo(emrPatientInfo);
-    }
-
     @PassToken
     @GetMapping("uploadEmrAdmissionRecord")
     public void uploadEmrAdmissionRecord() {

+ 47 - 0
src/main/java/thyyxxk/webserver/controller/crbmanagement/EmrActivityInfoController.java

@@ -0,0 +1,47 @@
+package thyyxxk.webserver.controller.crbmanagement;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import thyyxxk.webserver.config.auth.PassToken;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfoVo;
+import thyyxxk.webserver.entity.crbmanagement.ParamVo;
+import thyyxxk.webserver.service.crbmanagement.EmrActivityInfoService;
+
+import java.util.List;
+
+/**
+ * @ClassName EmrActivityInfoController
+ * @Author hsh
+ * @Date 2025/9/23 0023 11:06
+ * @Version 1.0
+ * @Description 传染病患者诊疗活动信息表上传
+ **/
+@RestController
+@RequestMapping("/emrActivity")
+public class EmrActivityInfoController {
+
+    private final EmrActivityInfoService service;
+
+    public EmrActivityInfoController(EmrActivityInfoService service) {
+        this.service = service;
+    }
+
+    @PassToken
+    @PostMapping("uploadEmrActivityInfo")
+    public ResultVo<JSONObject> uploadEmrActivityInfo(@RequestBody @Validated EmrActivityInfo emrActivityInfo){
+        return service.uploadEmrActivityInfo(emrActivityInfo);
+    }
+
+    @PassToken
+    @PostMapping("selectActivityInfo")
+    public ResultVo<List<EmrActivityInfoVo>> selectActivityInfo(@RequestBody @Validated ParamVo vo){
+        return service.selectActivityInfo(vo);
+    }
+
+}

+ 48 - 0
src/main/java/thyyxxk/webserver/controller/crbmanagement/EmrPatientInfoController.java

@@ -0,0 +1,48 @@
+package thyyxxk.webserver.controller.crbmanagement;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import thyyxxk.webserver.config.auth.PassToken;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfoVo;
+import thyyxxk.webserver.entity.crbmanagement.ParamVo;
+import thyyxxk.webserver.service.crbmanagement.EmrPatientInfoService;
+
+import java.util.List;
+
+/**
+ * @ClassName EmrPatientInfoController
+ * @Author hsh
+ * @Date 2025/9/23 0023 10:40
+ * @Version 1.0
+ * @Description 传染病患者基本信息表上传
+ **/
+@RestController
+@RequestMapping("/emrPatient")
+public class EmrPatientInfoController {
+
+    private final EmrPatientInfoService service;
+
+    public EmrPatientInfoController(EmrPatientInfoService service) {
+        this.service = service;
+    }
+
+    @PassToken
+    @PostMapping("uploadEmrPatientInfo")
+    public ResultVo<JSONObject> uploadEmrPatientInfo(@RequestBody @Validated EmrPatientInfo emrPatientInfo){
+        return service.uploadEmrPatientInfo(emrPatientInfo);
+    }
+
+    @PassToken
+    @PostMapping("selectPatientInfo")
+    public ResultVo<List<EmrPatientInfoVo>> selectPatientInfo(@RequestBody @Validated ParamVo vo){
+        return service.selectPatientInfo(vo);
+    }
+
+
+}

+ 88 - 0
src/main/java/thyyxxk/webserver/dao/his/crbmanagement/EmrActivityInfoDao.java

@@ -0,0 +1,88 @@
+package thyyxxk.webserver.dao.his.crbmanagement;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfoVo;
+import thyyxxk.webserver.entity.dictionary.EmployeeMi;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName EmrActivityInfoDao
+ * @Author hsh
+ * @Date 2025/9/23 0023 8:43
+ * @Version 1.0
+ * @Description 患者诊疗活动信息
+ **/
+@Mapper
+public interface EmrActivityInfoDao extends BaseMapper<EmrActivityInfoVo> {
+
+    @Select(" select * from emr_activity_info where id = #{id} ")
+    EmrActivityInfo selectEmrActivityInfoById(@Param("id") String id);
+
+    @Select("select top 10 * from a_employee_mi where code = #{code} ")
+    EmployeeMi selectEmployeeMiNyCode(@Param("code") String code);
+
+    @Select(" select rtrim(mz.patient_id) + '_' + cast(mz.times as varchar(4)) as id, rtrim(mz.patient_id) as patientId, case when mz.jz_flag = '1' then '2' else '1' end as activityTypeCode, " +
+            "  case when mz.jz_flag = '1' then '急诊' else '门诊' end as activityTypeName, rtrim(mz.patient_id) as serialNumber, " +
+            "  convert(varchar(100), mz.visit_date, 20) as activityTime, rtrim(mi.name) as patientName, '01' as idCardTypeCode, '居民身份证' as idCardTypeName, rtrim(mi.social_no) as idCard, " +
+            "  bl.emr_chief_complaint as chiefComplaint, bl.emr_hpi as presentIllnessHis, bl.emr_pe as physicalExamination, bl.emr_fzjc as studiesSummaryResult, " +
+            "  convert(varchar(100), bl.visit_date, 20) as diagnoseTime,  mz.icd_code_new as wmDiseaseCode, mz.icd_text_new as wmDiseaseName, " +
+            "  '' as tcmDiseaseCode, '' as tcmDiseaseName, '' as tcmSyndromeCode, '' as tcmSyndromeName, rtrim(emp.name) as fillDoctor, " +
+            "  dt.si_caty as deptCode, dt.si_caty_name as deptName, #{orgCode} as orgCode, #{orgName} as orgName, " +
+            "  rtrim(mz.op_id) as operatorId, convert(varchar(100), mz.op_day, 20) as operationTime, " +
+            "  isnull(ac.upload_flag, 99) as uploadFlag, isnull(ac.upload_msg, '') as uploadMsg " +
+            " from mz_visit_table as mz left join emr_activity_info as ac on rtrim(mz.patient_id) + '_' + cast(mz.times as varchar(4)) = ac.id, " +
+            "      mz_bl_record as bl, mz_patient_mi as mi, " +
+            "      a_employee_mi as emp, zd_unit_code as dt " +
+            " where mz.icd_code_new is not null " +
+            "  and mz.patient_id = bl.patient_id and mz.times = bl.times " +
+            "  and mz.patient_id = mi.patient_id and mz.times = mi.times " +
+            "  and bl.doctor_code = emp.code and bl.dept_code = dt.code " +
+            "  and ${ew.sqlSegment} ")
+    List<EmrActivityInfoVo> selectEmrActivityInfoByMz(@Param("orgCode") String orgCode, @Param("orgName") String orgName, @Param(Constants.WRAPPER) QueryWrapper<?> qw);
+
+    @Select(" select rtrim(zy.inpatient_no) + '_' + cast(zy.admiss_times as varchar(4)) as id, rtrim(zy.inpatient_no) as patientId, '5' as activityTypeCode, '入院' as activityTypeName, " +
+            "  rtrim(zy.inpatient_no) as serialNumber, zy.admiss_times as times, convert(varchar(100), zy.admiss_date, 20) as activityTime, " +
+            "  rtrim(zy.name) as patientName, '01' as idCardTypeCode, '居民身份证' as idCardTypeName, rtrim(mi.social_no) as idCard, " +
+            "  '' as chiefComplaint, '' as presentIllnessHis, '' as physicalExamination, '' as studiesSummaryResult, " +
+            "  convert(varchar(100), zy.admiss_date, 20) as diagnoseTime,  '' as wmDiseaseCode, '' as wmDiseaseName, " +
+            "  '' as tcmDiseaseCode, '' as tcmDiseaseName, '' as tcmSyndromeCode, '' as tcmSyndromeName, '' as fillDoctor, " +
+            "  '' as deptCode, '' as deptName, #{orgCode} as orgCode, #{orgName} as orgName, " +
+            "  '' as operatorId, convert(varchar(100), zy.create_datetime, 20) as operationTime, " +
+            "  99 as uploadFlag, '' as uploadMsg " +
+            " from zy_actpatient as zy, a_patient_mi as mi " +
+            " where zy.inpatient_no = mi.inpatient_no" +
+            "  and ${ew.sqlSegment} ")
+    List<EmrActivityInfoVo> selectEmrActivityInfoByZy(@Param("orgCode") String orgCode, @Param("orgName") String orgName, @Param(Constants.WRAPPER) QueryWrapper<?> qw);
+
+    @Select(" select rtrim(zy.inpatient_no) + '_' + cast(zy.admiss_times as varchar(4)) as id, rtrim(zy.inpatient_no) as patientId, '9' as activityTypeCode, '出院' as activityTypeName, " +
+            "  rtrim(zy.inpatient_no) as serialNumber, zy.admiss_times as times, convert(varchar(100), zy.admiss_date, 20) as activityTime, " +
+            "  rtrim(zy.name) as patientName, '01' as idCardTypeCode, '居民身份证' as idCardTypeName, rtrim(mi.social_no) as idCard, " +
+            "  '' as chiefComplaint, '' as presentIllnessHis, '' as physicalExamination, '' as studiesSummaryResult, " +
+            "  convert(varchar(100), zy.admiss_date, 20) as diagnoseTime,  '' as wmDiseaseCode, '' as wmDiseaseName, " +
+            "  '' as tcmDiseaseCode, '' as tcmDiseaseName, '' as tcmSyndromeCode, '' as tcmSyndromeName, '' as fillDoctor, " +
+            "  '' as deptCode, '' as deptName, #{orgCode} as orgCode, #{orgName} as orgName, " +
+            "  '' as operatorId, convert(varchar(100), zy.create_datetime, 20) as operationTime, " +
+            "  99 as uploadFlag, '' as uploadMsg " +
+            " from zy_inactpatient as zy, a_patient_mi as mi " +
+            " where zy.inpatient_no = mi.inpatient_no " +
+            "  and ${ew.sqlSegment} ")
+    List<EmrActivityInfoVo> selectEmrActivityInfoByCy(@Param("orgCode") String orgCode, @Param("orgName") String orgName, @Param(Constants.WRAPPER) QueryWrapper<?> qw);
+
+    @Select("<script> " +
+            " select distinct rtrim(yb_code) as ybCode, rtrim(yb_name) as ybName, cast(infectiousdiseases_flag as varchar) as infectiousdiseasesFlag " +
+            " from zd_icd_code_new where del_flag = '0' and yb_code in " +
+            " <foreach collection='icdList' item='item' index='index' open='(' close=')' separator=','>  " +
+            "   #{item}" +
+            " </foreach>" +
+            "</script>")
+    List<Map<String, String>> selectIcdNewDataList(List<String> icdList);
+
+}

+ 47 - 0
src/main/java/thyyxxk/webserver/dao/his/crbmanagement/EmrPatientInfoDao.java

@@ -0,0 +1,47 @@
+package thyyxxk.webserver.dao.his.crbmanagement;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfoVo;
+
+import java.util.List;
+
+@Mapper
+public interface EmrPatientInfoDao extends BaseMapper<EmrPatientInfoVo> {
+
+    @Select(" select * from emr_patient_info where id = #{id} ")
+    EmrPatientInfo selectEmrPatientInfoById(@Param("id") String id);
+
+    @Select(" select rtrim(mi.patient_id) as id, rtrim(mi.name) as patientName, '01' as idCardTypeCode, '居民身份证' as idCardTypeName, rtrim(mi.social_no) as idCard, " +
+            "  rtrim(mi.sex) as genderCode, rtrim(s.name) as genderName, convert(varchar(100), mi.birth_day, 23) as birthDate, '' as nationalityCode, '' as nationalityName, " +
+            "  '' as nationCode, '' as nationName, mi.province_code as permanentAddrCode, '' as permanentAddrName, '' as permanentAddrDetail, " +
+            "  '' as currentAddrCode, '' as currentAddrName, mi.adress as currentAddrDetail, mi.work_unit as workunit, '' as maritalStatusCode, " +
+            "  '' as maritalStatusName, '' as educationCode, '' as educationName, '20' as nultitudeTypeCode, '不详' as nultitudeTypeName, " +
+            "  '' as nultitudeTypeOther, rtrim(mi.phone_no) as tel, mi.contract_code as contacts, '' as contactsTel, #{orgCode} as orgCode, #{orgName} as orgName," +
+            "  '' as operatorId, convert(varchar(100), mi.lv_date, 20) as operationTime, isnull(p.upload_flag, 99) as uploadFlag, isnull(p.upload_msg, '') as uploadMsg " +
+            " from mz_patient_mi as mi " +
+            " left join emr_patient_info as p on mi.patient_id = p.id  " +
+            " left join zd_sex_code as s on mi.sex = s.code " +
+            " where ${ew.sqlSegment} ")
+    List<EmrPatientInfoVo> selectEmrPatientInfoByMz(@Param("orgCode") String orgCode, @Param("orgName") String orgName, @Param(Constants.WRAPPER) QueryWrapper<?> qw);
+
+    @Select(" select rtrim(mi.inpatient_no) as id, rtrim(mi.name) as patientName, '01' as idCardTypeCode, '居民身份证' as idCardTypeName, rtrim(mi.social_no) as idCard, " +
+            "  rtrim(mi.sex) as genderCode, rtrim(s.name) as genderName, convert(varchar(100), mi.birth_date, 23) as birthDate, mi.country as nationalityCode, '' as nationalityName, " +
+            "  mi.nation_code as nationCode, '' as nationName, mi.province_code as permanentAddrCode, mi.home_street as permanentAddrName, '' as permanentAddrDetail, " +
+            "  '' as currentAddrCode, '' as currentAddrName, mi.home_street as currentAddrDetail, mi.employer_name as workunit, mi.marry_code as maritalStatusCode, " +
+            "  '' as maritalStatusName, '' as educationCode, '' as educationName, '20' as nultitudeTypeCode, '不详' as nultitudeTypeName, " +
+            "  '' as nultitudeTypeOther, rtrim(mi.home_tel) as tel, rtrim(mi.relation_name) as contacts, rtrim(mi.relation_tel) as contactsTel, #{orgCode} as orgCode, #{orgName} as orgName," +
+            "  '' as operatorId, convert(varchar(100), zy.admiss_date, 20) as operationTime, isnull(p.upload_flag, 99) as uploadFlag, isnull(p.upload_msg, '') as uploadMsg " +
+            " from a_patient_mi as mi " +
+            " inner join view_zy_allpatient as zy on mi.inpatient_no = zy.inpatient_no " +
+            " left join emr_patient_info as p on mi.inpatient_no = p.id " +
+            " left join zd_sex_code as s on mi.sex = s.code " +
+            " where ${ew.sqlSegment} ")
+    List<EmrPatientInfoVo> selectEmrPatientInfoByZy(@Param("orgCode") String orgCode, @Param("orgName") String orgName, @Param(Constants.WRAPPER) QueryWrapper<?> qw);
+
+}

+ 13 - 15
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrActivityInfo.java

@@ -2,8 +2,6 @@ package thyyxxk.webserver.entity.crbmanagement;
 
 import lombok.Data;
 
-import java.util.Date;
-
 /**
  * @ClassName EmrActivityInfo
  * @Author hsh
@@ -40,7 +38,7 @@ public class EmrActivityInfo {
     /**
      * 诊疗活动发生日期时间(医生填写诊断的具体时间,精确到秒 必填,格式:yyyy-MM-dd HH:mm:ss)
      */
-    private Date activityTime;
+    private String activityTime;
     /**
      * 患者姓名(患者真实姓名 必填)
      */
@@ -59,25 +57,25 @@ public class EmrActivityInfo {
      */
     private String idCard;
     /**
-     * 主诉
+     * 主诉(建议填)
      */
     private String chiefComplaint;
     /**
-     * 现病史/入院情况
+     * 现病史/入院情况(建议填)
      */
     private String presentIllnessHis;
     /**
-     * 体格检查
+     * 体格检查(建议填)
      */
     private String physicalExamination;
     /**
-     * 辅助检查
+     * 辅助检查(建议填)
      */
     private String studiesSummaryResult;
     /**
      * 疾病诊断日期(医师做出疾病诊断的具体时间,精确到小时 必填,格式:yyyy-MM-dd HH:mm:ss)
      */
-    private Date diagnoseTime;
+    private String diagnoseTime;
     /**
      * 传染病诊断代码(传染病诊断名称代码 疾病诊断为传染病时必填,多个诊断使用||分隔)
      */
@@ -95,23 +93,23 @@ public class EmrActivityInfo {
      */
     private String wmDiseaseName;
     /**
-     * 中医病名代码
+     * 中医病名代码(非必填,多个病名使用||分隔)
      */
     private String tcmDiseaseCode;
     /**
-     * 中医病名名称
+     * 中医病名名称(非必填,多个病名使用||分隔)
      */
     private String tcmDiseaseName;
     /**
-     * 中医证候编码
+     * 中医证候编码(非必填,多个病名使用||分隔)
      */
     private String tcmSyndromeCode;
     /**
-     * 中医证候名称
+     * 中医证候名称(非必填,多个病名使用||分隔)
      */
     private String tcmSyndromeName;
     /**
-     * 诊断医生(必填)
+     * 诊断医生 (必填)
      */
     private String fillDoctor;
     /**
@@ -127,7 +125,7 @@ public class EmrActivityInfo {
      */
     private String orgCode;
     /**
-     * 医疗机构名称(必填)
+     * 医疗机构名称 (必填)
      */
     private String orgName;
     /**
@@ -137,6 +135,6 @@ public class EmrActivityInfo {
     /**
      * 操作时间(必填,格式:yyyy-MM-dd HH:mm:ss)
      */
-    private Date operatorTime;
+    private String operationTime;
 
 }

+ 26 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrActivityInfoVo.java

@@ -0,0 +1,26 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @ClassName EmrActivityInfoVo
+ * @Author hsh
+ * @Date 2025/9/22 0022 19:14
+ * @Version 1.0
+ * @Description 患者诊疗活动信息表
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("emr_activity_info")
+public class EmrActivityInfoVo extends EmrActivityInfo {
+
+    private Integer uploadFlag; // 上传标志(0:上传失败;1:上传成功;)
+    private String uploadType; // 上传日志类型
+    private String uploadMsg; // 上传日志信息
+    @TableField(exist = false)
+    private Integer times;
+
+}

+ 187 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrOutpatientObs.java

@@ -0,0 +1,187 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * @ClassName EmrOutpatientObs
+ * @Author hsh
+ * @Date 2025/9/22 0022 10:46
+ * @Version 1.0
+ * @Description 门(急)诊留观记录
+ **/
+@Data
+public class EmrOutpatientObs {
+
+    /**
+     * ID (院内唯一识别标识 必填)
+     */
+    @TableId(type = IdType.NONE)
+    private String id;
+    /**
+     * 患者基本信息ID(机构内患者基本信息唯一标识 必填)
+     */
+    private String patientId;
+    /**
+     * 门(急)诊号(必填)
+     */
+    private String serialNumber;
+    /**
+     * 患者姓名(必填)
+     */
+    private String patientName;
+    /**
+     * 身份证件类别代码(必填)
+     */
+    private String idCardTypeCode;
+    /**
+     * 身份证件类别名称(必填)
+     */
+    private String idCardTypeName;
+    /**
+     * 身份证件号码(必填)
+     */
+    private String idCard;
+    /**
+     * 过敏史标志(建议填 0.无 1.有)
+     */
+    private String allergyHisFlag;
+    /**
+     * 过敏史(过敏史标志选择有时必填)
+     */
+    private String allergyHis;
+    /**
+     * 就诊日期时间(建议填。格式为:yyyy-MM-dd HH:mm:ss)
+     */
+    private String outpatientDate;
+    /**
+     * 初诊标志代码(建议填。 1.初诊 2.复诊)
+     */
+    private String initalDiagnosisCode;
+    /**
+     * 主诉(建议填。)
+     */
+    private String chiefComplaint;
+    /**
+     * 现病史(建议填。)
+     */
+    private String presentIllnessHis;
+    /**
+     * 既往史(建议填。)
+     */
+    private String pastIllnessHis;
+    /**
+     * 传染病史(建议填。)
+     */
+    private String infectionHis;
+    /**
+     * 预防接种史(建议填。)
+     */
+    private String vaccinationHis;
+    /**
+     * 手术史(建议填。)
+     */
+    private String operationHis;
+    /**
+     * 输血史(非必填。)
+     */
+    private String bloodTransfusion;
+    /**
+     * 个人史(非必填。)
+     */
+    private String personalHis;
+    /**
+     * 婚育史(非必填。)
+     */
+    private String maritalHis;
+    /**
+     * 月经史(非必填。)
+     */
+    private String menstrualHis;
+    /**
+     * 家族史(非必填。)
+     */
+    private String familyHis;
+    /**
+     * 体格检查(建议填。)
+     */
+    private String physicalExamination;
+    /**
+     * 中医“四诊”观察结果(非必填。)
+     */
+    private String observationResult;
+    /**
+     * 辅助检查(建议填。)
+     */
+    private String studiesSummaryResult;
+    /**
+     * 初步诊断-西医诊断代码(必填。多个病名使用||分隔)
+     */
+    private String wmDiagnosisCode;
+    /**
+     * 初步诊断-西医诊断名称(必填。多个病名使用||分隔)
+     */
+    private String wmDiagnosisName;
+    /**
+     * 初步诊断-中医病名代码(非必填。多个病名使用||分隔)
+     */
+    private String tcmInitalDiagnosisCode;
+    /**
+     * 初步诊断-中医病名名称(非必填。多个病名使用||分隔)
+     */
+    private String tcmInitalDiagnosisName;
+    /**
+     * 初步诊断-中医证候代码(非必填。)
+     */
+    private String tcmInitalSyndromeCode;
+    /**
+     * 初步诊断-中医证候名称(非必填。)
+     */
+    private String tcmInitalSyndromeName;
+    /**
+     * 辨证依据(非必填。)
+     */
+    private String differentiationBasis;
+    /**
+     * 治则治法(非必填。)
+     */
+    private String treatment;
+    /**
+     * 急诊留观病程记录(建议填。)
+     */
+    private String course;
+    /**
+     * 收入观察室日期时间(建议填。)
+     */
+    private String observationDate;
+    /**
+     * 注意事项(建议填。)
+     */
+    private String notes;
+    /**
+     * 医疗机构代码
+     */
+    private String orgCode;
+    /**
+     * 医疗机构名称
+     */
+    private String orgName;
+    /**
+     * 科室代码
+     */
+    private String deptCode;
+    /**
+     * 科室名称
+     */
+    private String deptName;
+    /**
+     * 操作人 ID
+     */
+    private String operatorId;
+    /**
+     * 操作时间
+     */
+    private String operationTime;
+
+}

+ 175 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrOutpatientRecord.java

@@ -0,0 +1,175 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * @ClassName EmrOutpatientRecord
+ * @Author hsh
+ * @Date 2025/9/22 0022 9:27
+ * @Version 1.0
+ * @Description 门(急)诊病历
+ **/
+@Data
+public class EmrOutpatientRecord {
+
+    /**
+     * ID (院内唯一识别标识 必填)
+     */
+    @TableId(type = IdType.NONE)
+    private String id;
+    /**
+     * 患者基本信息ID(机构内患者基本信息唯一标识 必填)
+     */
+    private String patientId;
+    /**
+     * 门(急)诊号(必填)
+     */
+    private String serialNumber;
+    /**
+     * 患者姓名(必填)
+     */
+    private String patientName;
+    /**
+     * 身份证件类别代码(必填)
+     */
+    private String idCardTypeCode;
+    /**
+     * 身份证件类别名称(必填)
+     */
+    private String idCardTypeName;
+    /**
+     * 身份证件号码(必填)
+     */
+    private String idCard;
+    /**
+     * 过敏史标志(建议填 0.无 1.有)
+     */
+    private String allergyHisFlag;
+    /**
+     * 过敏史(过敏史标志选择有时必填)
+     */
+    private String allergyHis;
+    /**
+     * 就诊日期时间(建议填。格式为:yyyy-MM-dd HH:mm:ss)
+     */
+    private String outpatientDate;
+    /**
+     * 初诊标志代码(建议填。 1.初诊 2.复诊)
+     */
+    private String initalDiagnosisCode;
+    /**
+     * 主诉(建议填。)
+     */
+    private String chiefComplaint;
+    /**
+     * 现病史(建议填。)
+     */
+    private String presentIllnessHis;
+    /**
+     * 既往史(建议填。)
+     */
+    private String pastIllnessHis;
+    /**
+     * 传染病史(建议填。)
+     */
+    private String infectionHis;
+    /**
+     * 预防接种史(建议填。)
+     */
+    private String vaccinationHis;
+    /**
+     * 手术史(建议填。)
+     */
+    private String operationHis;
+    /**
+     * 输血史(非必填。)
+     */
+    private String bloodTransfusion;
+    /**
+     * 个人史(非必填。)
+     */
+    private String personalHis;
+    /**
+     * 婚育史(非必填。)
+     */
+    private String maritalHis;
+    /**
+     * 月经史(非必填。)
+     */
+    private String menstrualHis;
+    /**
+     * 家族史(非必填。)
+     */
+    private String familyHis;
+    /**
+     * 体格检查(建议填。)
+     */
+    private String physicalExamination;
+    /**
+     * 中医“四诊”观察结果(非必填。)
+     */
+    private String observationResult;
+    /**
+     * 辅助检查(建议填。)
+     */
+    private String studiesSummaryResult;
+    /**
+     * 初步诊断-西医诊断代码(必填。多个病名使用||分隔)
+     */
+    private String wmDiagnosisCode;
+    /**
+     * 初步诊断-西医诊断名称(必填。多个病名使用||分隔)
+     */
+    private String wmDiagnosisName;
+    /**
+     * 初步诊断-中医病名代码(非必填。多个病名使用||分隔)
+     */
+    private String tcmInitalDiagnosisCode;
+    /**
+     * 初步诊断-中医病名名称(非必填。多个病名使用||分隔)
+     */
+    private String tcmInitalDiagnosisName;
+    /**
+     * 初步诊断-中医证候代码(非必填。)
+     */
+    private String tcmInitalSyndromeCode;
+    /**
+     * 初步诊断-中医证候名称(非必填。)
+     */
+    private String tcmInitalSyndromeName;
+    /**
+     * 辨证依据(非必填。)
+     */
+    private String differentiationBasis;
+    /**
+     * 治则治法(非必填。)
+     */
+    private String treatment;
+    /**
+     * 医疗机构代码
+     */
+    private String orgCode;
+    /**
+     * 医疗机构名称
+     */
+    private String orgName;
+    /**
+     * 科室代码
+     */
+    private String deptCode;
+    /**
+     * 科室名称
+     */
+    private String deptName;
+    /**
+     * 操作人 ID
+     */
+    private String operatorId;
+    /**
+     * 操作时间
+     */
+    private String operationTime;
+
+}

+ 37 - 31
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrPatientInfo.java

@@ -1,5 +1,7 @@
 package thyyxxk.webserver.entity.crbmanagement;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 /**
@@ -12,29 +14,33 @@ import lombok.Data;
 @Data
 public class EmrPatientInfo {
 
+    /**
+     * ID (院内唯一识别标识 必填)
+     */
+    @TableId(type = IdType.NONE)
     private String id;
     /**
-     * 患者姓名
+     * 患者姓名 (必填)
      */
     private String patientName;
     /**
-     * 身份证件类别代码
+     * 身份证件类别代码(必填)
      */
     private String idCardTypeCode;
     /**
-     * 身份证件类别名称
+     * 身份证件类别名称(必填)
      */
     private String idCardTypeName;
     /**
-     * 身份证件号码
+     * 身份证件号码(必填)
      */
     private String idCard;
     /**
-     * 性别代码
+     * 性别代码(建议填)
      */
     private String genderCode;
     /**
-     * 性别名称
+     * 性别名称(建议填)
      */
     private String genderName;
     /**
@@ -42,103 +48,103 @@ public class EmrPatientInfo {
      */
     private String birthDate;
     /**
-     * 国籍/地区 代码
+     * 国籍/地区 代码(建议填)
      */
     private String nationalityCode;
     /**
-     * 国籍/地区 名称
+     * 国籍/地区 名称(建议填)
      */
     private String nationalityName;
     /**
-     * 民族代码
+     * 民族代码(建议填)
      */
     private String nationCode;
     /**
-     * 民族名称
+     * 民族名称(建议填)
      */
     private String nationName;
     /**
-     * 户籍地址代码
+     * 户籍地址代码(建议填)
      */
     private String permanentAddrCode;
     /**
-     * 户籍地址名称
+     * 户籍地址名称(建议填)
      */
     private String permanentAddrName;
     /**
-     * 户籍详细地址
+     * 户籍详细地址(建议填)
      */
     private String permanentAddrDetail;
     /**
-     * 现住地区代码
+     * 现住地区代码(建议填)
      */
     private String currentAddrCode;
     /**
-     * 现住地区名称
+     * 现住地区名称(建议填)
      */
     private String currentAddrName;
     /**
-     * 现住详细地址
+     * 现住详细地址(建议填)
      */
     private String currentAddrDetail;
     /**
-     * 工作单位/学校名称
+     * 工作单位/学校名称(建议填)
      */
     private String workunit;
     /**
-     * 婚姻状况代码
+     * 婚姻状况代码(建议填)
      */
     private String maritalStatusCode;
     /**
-     * 婚姻状况名称
+     * 婚姻状况名称(建议填)
      */
     private String maritalStatusName;
     /**
-     * 学历代码
+     * 学历代码(建议填)
      */
     private String educationCode;
     /**
-     * 学历名称
+     * 学历名称(建议填)
      */
     private String educationName;
     /**
-     * 人群分类代码
+     * 人群分类代码(建议填)
      */
     private String nultitudeTypeCode;
     /**
-     * 人群分类名称
+     * 人群分类名称(建议填)
      */
     private String nultitudeTypeName;
     /**
-     * 人群分类其他
+     * 人群分类其他(建议填)
      */
     private String nultitudeTypeOther;
     /**
-     * 患者电话号码
+     * 患者电话号码(建议填)
      */
     private String tel;
     /**
-     * 联系人/监护人姓名
+     * 联系人/监护人姓名(建议填)
      */
     private String contacts;
     /**
-     * 联系人/监护人电话号码
+     * 联系人/监护人电话号码(建议填)
      */
     private String contactsTel;
     /**
-     * 医疗机构代码
+     * 医疗机构代码(必填)
      */
     private String orgCode;
     /**
-     * 医疗机构名称
+     * 医疗机构名称(必填)
      */
     private String orgName;
     /**
-     * 操作人ID
+     * 操作人ID(--非必填--)
      */
     private String operatorId;
     /**
-     * 操作时间
+     * 操作时间(必填)
      */
     private String operationTime;
 

+ 23 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/EmrPatientInfoVo.java

@@ -0,0 +1,23 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @ClassName EmrPatientInfoVo
+ * @Author hsh
+ * @Date 2025/9/19 0019 16:52
+ * @Version 1.0
+ * @Description TODO
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("emr_patient_info")
+public class EmrPatientInfoVo extends EmrPatientInfo {
+
+    private Integer uploadFlag; // 上传标志(0:上传失败;1:上传成功;)
+    private String uploadType; // 上传日志类型
+    private String uploadMsg; // 上传日志信息
+
+}

+ 22 - 0
src/main/java/thyyxxk/webserver/entity/crbmanagement/ParamVo.java

@@ -0,0 +1,22 @@
+package thyyxxk.webserver.entity.crbmanagement;
+
+import lombok.Data;
+
+/**
+ * @ClassName ParamVo
+ * @Author hsh
+ * @Date 2025/9/18 0018 15:28
+ * @Version 1.0
+ * @Description 查询vo
+ **/
+@Data
+public class ParamVo {
+
+    private String startTime;
+    private String endTime;
+    private String patNo; // 门诊号/住院号
+    private String patName; // 姓名
+    private String idCard; // 身份证号码
+    private String tjType; // 统计类型: 0:全部;1:门诊;2:住院
+
+}

+ 13 - 17
src/main/java/thyyxxk/webserver/service/crbmanagement/CrbBaseService.java

@@ -119,22 +119,6 @@ public class CrbBaseService {
         return ResultVoUtil.success(dao.selectBaseDept(qw));
     }
 
-    /**
-     * @Description 患者基本信息表数据上传
-     * @Author hsh
-     * @param emrPatientInfo 患者基本信息表数据
-     * @return JSONObject
-     * @Date 2025/7/30 0030 16:51
-     */
-    public ResultVo<JSONObject> uploadEmrPatientInfo(EmrPatientInfo emrPatientInfo) {
-        JSONObject object = crbUploadService.uploadEmrPatientInfo(siCrbUrl, emrPatientInfo);
-        boolean f = (boolean) object.get("result");
-        if(!f){
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, errInfoTips(object));
-        }
-        return ResultVoUtil.success(object);
-    }
-
     public ResultVo<String> uploadEmrAdmissionRecord(EmrAdmissionRecord emrAdmissionRecord) {
         JSONObject object = crbUploadService.uploadEmrAdmissionRecord(siCrbUrl, emrAdmissionRecord);
         boolean f = (boolean) object.get("result");
@@ -172,9 +156,21 @@ public class CrbBaseService {
      * @return String 错误提示信息
      * @Date 2025/7/30 0030 16:47
      */
-    private String errInfoTips(JSONObject object) {
+    public String errInfoTips(JSONObject object) {
         String errorName = object.getString("errorName");
         String desc = object.getString("desc");
         return errorName + ": " + desc;
     }
+
+    /**
+     * @Description 查询医院传染病机构编码和名称
+     * @Author hsh
+     * @param code 编码
+     * @return name 名称
+     * @Date 2025/9/23 0023 10:56
+     */
+    public String sysParametersByCode(String code){
+        return dao.selectOrgCodeByCode(code);
+    }
+
 }

+ 236 - 0
src/main/java/thyyxxk/webserver/service/crbmanagement/EmrActivityInfoService.java

@@ -0,0 +1,236 @@
+package thyyxxk.webserver.service.crbmanagement;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.crbmanagement.EmrActivityInfoDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfoVo;
+import thyyxxk.webserver.entity.crbmanagement.ParamVo;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrAdmissionInfo;
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrDischargeInfo;
+import thyyxxk.webserver.entity.dictionary.EmployeeMi;
+import thyyxxk.webserver.service.externalhttp.CrbUploadService;
+import thyyxxk.webserver.utils.ResultVoUtil;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName EmrActivityInfoService
+ * @Author hsh
+ * @Date 2025/9/23 0023 8:42
+ * @Version 1.0
+ * @Description 患者诊疗活动信息
+ **/
+@Service
+@Slf4j
+public class EmrActivityInfoService {
+
+    @Resource
+    private EmrActivityInfoDao dao;
+
+    @Resource
+    private CrbUploadService crbUploadService;
+
+    @Resource
+    private CrbBaseService crbBaseService;
+
+    @Resource
+    private CrbUpdateByEmr crbUpdateByEmr;
+
+    @Value("${si-crb-url}")
+    private String siCrbUrl;
+
+    /**
+     * @Description 患者诊疗活动信息表数据上传
+     * @Author hsh
+     * @param emrActivityInfo 患者诊疗活动信息表数据
+     * @return JSONObject
+     * @Date 2025/9/17 0017 15:31
+     */
+    public ResultVo<JSONObject> uploadEmrActivityInfo(EmrActivityInfo emrActivityInfo) {
+//        JSONObject object = crbUploadService.uploadEmrActivityInfo(siCrbUrl, emrActivityInfo);
+        JSONObject object = new JSONObject();
+        object.put("result", true);
+        object.put("id", emrActivityInfo.getId());
+        object.put("desc", "【测试】操作成功!");
+        EmrActivityInfoVo vo = new EmrActivityInfoVo();
+        BeanUtils.copyProperties(emrActivityInfo, vo);
+        boolean f = (boolean) object.get("result");
+        if(!f){
+            // 保存上传患者诊疗活动信息
+            vo.setUploadFlag(0);
+            vo.setUploadType((String) object.get("errorCode"));
+            vo.setUploadMsg((String) object.get("errorName"));
+            saveActivityInfoData(vo);
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, crbBaseService.errInfoTips(object));
+        } else {
+            // 保存上传患者诊疗活动信息
+            vo.setUploadFlag(1);
+            vo.setUploadType((String) object.get("id"));
+            vo.setUploadMsg((String) object.get("desc"));
+            saveActivityInfoData(vo);
+
+        }
+        return ResultVoUtil.success(object);
+    }
+
+    /**
+     * @Description 查询患者诊疗活动信息表
+     * @Author hsh
+     * @param vo 条件
+     * @return list 患者诊疗活动信息
+     * @Date 2025/9/22 0022 14:31
+     */
+    public ResultVo<List<EmrActivityInfoVo>> selectActivityInfo(ParamVo vo) {
+        QueryWrapper<EmrActivityInfoVo> mzQw = new QueryWrapper<>();
+        QueryWrapper<EmrActivityInfoVo> zyQw = new QueryWrapper<>();
+        QueryWrapper<EmrActivityInfoVo> cyQw = new QueryWrapper<>();
+        String tjType = vo.getTjType();
+        String orgCode = crbBaseService.sysParametersByCode("orgCode");
+        String orgName = crbBaseService.sysParametersByCode("orgName");
+        if(StringUtils.isNotEmpty(vo.getPatNo())){
+            mzQw.eq("mz.patient_id", vo.getPatNo());
+            zyQw.eq("mi.inpatient_no", vo.getPatNo());
+            cyQw.eq("mi.inpatient_no", vo.getPatNo());
+        } else {
+            mzQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "mz.visit_date", vo.getStartTime());
+            mzQw.le(StringUtils.isNotBlank(vo.getEndTime()), "mz.visit_date", vo.getEndTime());
+            zyQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "zy.admiss_date", vo.getStartTime());
+            zyQw.le(StringUtils.isNotBlank(vo.getEndTime()), "zy.admiss_date", vo.getEndTime());
+            cyQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "zy.dis_date", vo.getStartTime());
+            cyQw.le(StringUtils.isNotBlank(vo.getEndTime()), "zy.dis_date", vo.getEndTime());
+        }
+        mzQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
+        zyQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
+        cyQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
+        mzQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
+        zyQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
+        cyQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
+
+        List<EmrActivityInfoVo> result = new ArrayList<>();
+        if("1".equals(tjType)){
+            // 门诊病人
+            List<EmrActivityInfoVo> mzList = dao.selectEmrActivityInfoByMz(orgCode, orgName, mzQw);
+            if(null != mzList && !mzList.isEmpty()){
+                callIllIcdCategory(mzList);
+                result.addAll(mzList);
+            }
+        } else if("2".equals(tjType)){
+            // 在院病人
+            assembleEmrActivityInfoByZy(zyQw, orgCode, orgName, result);
+        } else if("3".equals(tjType)){
+            // 出院病人
+            assembleEmrActivityInfoByCy(cyQw, orgCode, orgName, result);
+        } else {
+            List<EmrActivityInfoVo> mzList = dao.selectEmrActivityInfoByMz(orgCode, orgName, mzQw);
+            if(null != mzList && !mzList.isEmpty()){
+                callIllIcdCategory(mzList);
+                result.addAll(mzList);
+            }
+            assembleEmrActivityInfoByZy(zyQw, orgCode, orgName, result);
+            assembleEmrActivityInfoByCy(cyQw, orgCode, orgName, result);
+        }
+        return ResultVoUtil.success(result);
+    }
+
+    private void assembleEmrActivityInfoByZy(QueryWrapper<EmrActivityInfoVo> zyQw, String orgCode, String orgName, List<EmrActivityInfoVo> result) {
+        List<EmrActivityInfoVo> zyList = dao.selectEmrActivityInfoByZy(orgCode, orgName, zyQw);
+        if(null != zyList && !zyList.isEmpty()){
+            // crbUpdateByEmr.getEmrAdmissionInfo()
+            for(EmrActivityInfoVo infoVo : zyList){
+                EmrAdmissionInfo emrPatientData = crbUpdateByEmr.getEmrAdmissionInfo(infoVo.getPatientId(), infoVo.getTimes());
+                if(null != emrPatientData){
+                    BeanUtils.copyProperties(emrPatientData, infoVo);
+                }
+            }
+            callIllIcdCategory(zyList);
+            result.addAll(zyList);
+        }
+    }
+
+    private void assembleEmrActivityInfoByCy(QueryWrapper<EmrActivityInfoVo> zyQw, String orgCode, String orgName, List<EmrActivityInfoVo> result) {
+        List<EmrActivityInfoVo> cyList = dao.selectEmrActivityInfoByCy(orgCode, orgName, zyQw);
+        if(null != cyList && !cyList.isEmpty()){
+            // crbUpdateByEmr.getEmrAdmissionInfo()
+            for(EmrActivityInfoVo infoVo : cyList){
+                EmrAdmissionInfo emrPatientData = crbUpdateByEmr.getEmrAdmissionInfo(infoVo.getPatientId(), infoVo.getTimes());
+                EmrDischargeInfo emrDischargeInfo = crbUpdateByEmr.getEmrDischargeInfo(infoVo.getPatientId(), infoVo.getTimes(), emrPatientData);
+                if(null != emrPatientData){
+                    BeanUtils.copyProperties(emrPatientData, infoVo);
+                    if(null != emrDischargeInfo){
+                        infoVo.setWmDiseaseCode(emrDischargeInfo.getDischargeDiagnosisCode());
+                        infoVo.setWmDiseaseName(emrDischargeInfo.getDischargeDiagnosisName());
+                        EmployeeMi emi = dao.selectEmployeeMiNyCode(emrDischargeInfo.getChiefPhysicianId());
+                        infoVo.setFillDoctor(StringUtils.trim(emi.getName()));
+                    } else {
+                        infoVo.setWmDiseaseCode(emrPatientData.getWmInitialDiagnosisCode());
+                        infoVo.setWmDiseaseName(emrPatientData.getWmConfirmedDiagnosisName());
+                        EmployeeMi emi = dao.selectEmployeeMiNyCode(emrPatientData.getChiefPhysicianId());
+                        infoVo.setFillDoctor(StringUtils.trim(emi.getName()));
+                    }
+                }
+            }
+            callIllIcdCategory(cyList);
+            result.addAll(cyList);
+        }
+    }
+
+    /**
+     * @Description 筛选传染病诊断并保存
+     * @Author hsh
+     * @param list 患者诊疗活动信息
+     * @Date 2025/9/22 0022 18:51
+     */
+    private void callIllIcdCategory(List<EmrActivityInfoVo> list) {
+        if(null != list && !list.isEmpty()){
+            for (EmrActivityInfoVo vo : list){
+                String icd = vo.getWmDiseaseCode();
+                List<String> icdList = Arrays.asList(icd.split(","));
+                List<Map<String, String>> zdList = dao.selectIcdNewDataList(icdList);
+                StringBuilder crbZd = new StringBuilder();
+                StringBuilder crbZdName = new StringBuilder();
+                for(Map<String, String> map : zdList){
+                    String crbFlag = map.get("infectiousdiseasesFlag");
+                    if("1".equals(crbFlag)){
+                        crbZd.append(map.get("ybCode")).append("||");
+                        crbZdName.append(map.get("ybName")).append("||");
+                    }
+                }
+                if(StringUtils.isNotEmpty(crbZd)){
+                    vo.setDiseaseCode(crbZd.substring(0, crbZd.lastIndexOf("||")));
+                    vo.setDiseaseName(crbZdName.substring(0, crbZdName.lastIndexOf("||")));
+                }
+            }
+        }
+    }
+
+    /**
+     * @Description 保存患者诊疗活动信息
+     * @Author hsh
+     * @param vo 患者诊疗活动信息
+     * @Date 2025/9/19 0019 17:07
+     */
+    public void saveActivityInfoData(EmrActivityInfoVo vo) {
+        EmrActivityInfo info = dao.selectEmrActivityInfoById(vo.getId());
+        if(null != info){
+            dao.deleteById(vo.getId());
+            dao.insert(vo);
+        } else {
+            dao.insert(vo);
+        }
+
+    }
+
+
+}

+ 149 - 0
src/main/java/thyyxxk/webserver/service/crbmanagement/EmrPatientInfoService.java

@@ -0,0 +1,149 @@
+package thyyxxk.webserver.service.crbmanagement;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.crbmanagement.EmrPatientInfoDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfo;
+import thyyxxk.webserver.entity.crbmanagement.EmrPatientInfoVo;
+import thyyxxk.webserver.entity.crbmanagement.ParamVo;
+import thyyxxk.webserver.service.externalhttp.CrbUploadService;
+import thyyxxk.webserver.utils.ResultVoUtil;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName EmrPatientInfoService
+ * @Author hsh
+ * @Date 2025/9/19 0019 16:31
+ * @Version 1.0
+ * @Description 传染病患者基本信息
+ **/
+@Service
+@Slf4j
+public class EmrPatientInfoService {
+
+    @Resource
+    private EmrPatientInfoDao dao;
+
+    @Resource
+    private CrbUploadService crbUploadService;
+
+    @Resource
+    private CrbBaseService crbBaseService;
+
+    @Value("${si-crb-url}")
+    private String siCrbUrl;
+
+    /**
+     * @Description 患者基本信息表数据上传
+     * @Author hsh
+     * @param emrPatientInfo 患者基本信息表数据
+     * @return JSONObject
+     * @Date 2025/7/30 0030 16:51
+     */
+    public ResultVo<JSONObject> uploadEmrPatientInfo(EmrPatientInfo emrPatientInfo) {
+//        JSONObject object = crbUploadService.uploadEmrPatientInfo(siCrbUrl, emrPatientInfo);
+        JSONObject object = new JSONObject();
+        object.put("result", true);
+        object.put("id", emrPatientInfo.getId());
+        object.put("desc", "【测试】操作成功!");
+        EmrPatientInfoVo vo = new EmrPatientInfoVo();
+        BeanUtils.copyProperties(emrPatientInfo, vo);
+        boolean f = (boolean) object.get("result");
+        if(!f){
+            // 保存上传患者基本信息
+            vo.setUploadFlag(0);
+            vo.setUploadType((String) object.get("errorCode"));
+            vo.setUploadMsg((String) object.get("errorName"));
+            savePatientInfoData(vo);
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, crbBaseService.errInfoTips(object));
+        } else {
+            // 保存上传患者基本信息
+            vo.setUploadFlag(1);
+            vo.setUploadType((String) object.get("id"));
+            vo.setUploadMsg((String) object.get("desc"));
+            savePatientInfoData(vo);
+        }
+        return ResultVoUtil.success(object);
+    }
+
+    /**
+     * @Description 查询患者基本信息表
+     * @Author hsh
+     * @param vo 查询条件
+     * @return list 患者基本信息
+     * @Date 2025/9/18 0018 10:13
+     */
+    public ResultVo<List<EmrPatientInfoVo>> selectPatientInfo(ParamVo vo) {
+        QueryWrapper<EmrPatientInfoVo> mzQw = new QueryWrapper<>();
+        QueryWrapper<EmrPatientInfoVo> zyQw = new QueryWrapper<>();
+        String tjType = vo.getTjType();
+        String orgCode = crbBaseService.sysParametersByCode("orgCode");
+        String orgName = crbBaseService.sysParametersByCode("orgName");
+        if(StringUtils.isNotEmpty(vo.getPatNo())){
+            mzQw.eq("mi.patient_id", vo.getPatNo());
+            zyQw.eq("mi.inpatient_no", vo.getPatNo());
+        } else {
+            mzQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "mi.lv_date", vo.getStartTime());
+            mzQw.le(StringUtils.isNotBlank(vo.getEndTime()), "mi.lv_date", vo.getEndTime());
+            zyQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "zy.admiss_date", vo.getStartTime());
+            zyQw.le(StringUtils.isNotBlank(vo.getEndTime()), "zy.admiss_date", vo.getEndTime());
+        }
+        mzQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
+        zyQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
+        mzQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
+        zyQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
+
+        List<EmrPatientInfoVo> result = new ArrayList<>();
+        if("1".equals(tjType)){
+            // 门诊病人
+            List<EmrPatientInfoVo> mzList = dao.selectEmrPatientInfoByMz(orgCode, orgName, mzQw);
+            if(null != mzList && !mzList.isEmpty()){
+                result.addAll(mzList);
+            }
+        } else if("2".equals(tjType)){
+            // 住院病人
+            List<EmrPatientInfoVo> zyList = dao.selectEmrPatientInfoByZy(orgCode, orgName, zyQw);
+            if(null != zyList && !zyList.isEmpty()){
+                result.addAll(zyList);
+            }
+        } else {
+            List<EmrPatientInfoVo> mzList = dao.selectEmrPatientInfoByMz(orgCode, orgName, mzQw);
+            if(null != mzList && !mzList.isEmpty()){
+                result.addAll(mzList);
+            }
+            List<EmrPatientInfoVo> zyList = dao.selectEmrPatientInfoByZy(orgCode, orgName, zyQw);
+            if(null != zyList && !zyList.isEmpty()){
+                result.addAll(zyList);
+            }
+        }
+        return ResultVoUtil.success(result);
+    }
+
+    /**
+     * @Description 保存患者基本信息
+     * @Author hsh
+     * @param vo 患者基本信息
+     * @Date 2025/9/19 0019 17:07
+     */
+    public void savePatientInfoData(EmrPatientInfoVo vo) {
+        EmrPatientInfo info = dao.selectEmrPatientInfoById(vo.getId());
+        if(null != info){
+            dao.deleteById(vo.getId());
+            dao.insert(vo);
+        } else {
+            dao.insert(vo);
+        }
+
+    }
+
+}

+ 4 - 1
src/main/java/thyyxxk/webserver/service/externalhttp/CrbUploadService.java

@@ -14,9 +14,12 @@ public interface CrbUploadService {
     @Post("{url}/hclient/emr/receive/baseDept")
     JSONObject uploadBaseDept(@Var("url") String url, @JSONBody BaseDept baseDept);
 
-    @Post("{url}/hclient/emr/receive/baseDept")
+    @Post("{url}/hclient/emr/receive/emrPatientInfo")
     JSONObject uploadEmrPatientInfo(@Var("url") String url, @JSONBody EmrPatientInfo emrPatientInfo);
 
+    @Post("{url}/hclient/emr/receive/emrActivityInfo")
+    JSONObject uploadEmrActivityInfo(@Var("url") String url, @JSONBody EmrActivityInfo emrActivityInfo);
+
     @Post("{url}/hclient/emr/receive/emrAdmissionRecord")
     JSONObject uploadEmrAdmissionRecord(@Var("url") String url, @JSONBody EmrAdmissionRecord emrAdmissionRecord);