소스 검색

ca接口发送消息到平板中让用户可以编辑病历

xiaochan 2 달 전
부모
커밋
ea386c7725

+ 5 - 0
src/main/java/thyyxxk/webserver/controller/ca/CaController.java

@@ -99,4 +99,9 @@ public class CaController {
         return server.deletePatientIdCardType(id);
     }
 
+    @GetMapping("/sendMedicalRecordsToTablet")
+    public ResultVo<String> sendMedicalRecordsToTablet(@RequestParam("id") String id) {
+        return server.sendMedicalRecordsToTablet(id);
+    }
+
 }

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

@@ -8,11 +8,26 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum SignCompleteEnum {
 
+    // 初始化
     INIT(0, "初始化"),
+    // 医生发起签名的请求到移动平板上面
     SEND_MORE(1, "医生发起签名的请求到移动平板上面"),
-    SEND_CA_API(2, "发送请求到了ca的接口"),
+    // 发送请求到了ca的签名流程
+    SEND_CA_API(2, "发送请求到了ca的签名流程"),
+    // 完成
     COMPLETE(3, "完成签名");
 
     private final Integer code;
     private final String description;
+
+
+    // 根据code获取description
+    public static String getDescriptionByCode(Integer code) {
+        for (SignCompleteEnum signCompleteEnum : SignCompleteEnum.values()) {
+            if (signCompleteEnum.getCode().equals(code)) {
+                return signCompleteEnum.getDescription();
+            }
+        }
+        return "";
+    }
 }

+ 31 - 0
src/main/java/thyyxxk/webserver/service/ca/CaServer.java

@@ -21,6 +21,7 @@ import lombok.*;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
 import thyyxxk.webserver.config.Assertion;
 import thyyxxk.webserver.config.envionment.ArchiveConfig;
 import thyyxxk.webserver.config.envionment.CaData;
@@ -775,12 +776,42 @@ public class CaServer implements Assertion {
 
 
     public ResultVo<String> deletePatientIdCardType(String id) {
+        // 判断传入的id是否为TEMP
         if (TEMP.equals(id)) {
+            // 如果是,则返回失败信息
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "无法删除患者本人的信息");
         }
+        // 根据id删除患者身份证类型
         patientIdCardTypeDao.deleteById(id);
+        // 返回成功信息
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_NOTIFICATION);
     }
 
+    public ResultVo<String> sendMedicalRecordsToTablet(String id) {
+        // 根据id查询病历数据
+        EmrPatientData emrPatientData = emrPatientDao.selectById(id);
+
+        // 如果病历数据为空,则返回失败信息
+        if (emrPatientData == null) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "病历不存在");
+        }
+
+        // 如果病历状态不为INIT,则返回失败信息
+        if (!SignCompleteEnum.INIT.getCode().equals(emrPatientData.getSignComplete())) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, StrUtil.format("此病历状态为:{},无法再次发起签名", SignCompleteEnum.getDescriptionByCode(emrPatientData.getSignComplete())));
+        }
+
+        // 构建更新病历数据对象
+        EmrPatientData update = EmrPatientData.builder()
+                .emrDocumentId(emrPatientData.getEmrDocumentId())
+                .signComplete(SignCompleteEnum.SEND_CA_API.getCode())
+                .build();
+
+        // 更新病历数据
+        emrPatientDao.updateById(update);
+        // 返回成功信息
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
+    }
+
 
 }

+ 44 - 4
src/main/java/thyyxxk/webserver/service/zhuyuanyiji/ClinicalPathwayPatientService.java

@@ -86,6 +86,9 @@ public class ClinicalPathwayPatientService {
             if (ClinicalPathwayPatientState.入径.getCode().equals(patient.getState())) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "患者还在路径中请先选择,退出路径才能选择。");
             }
+            if (patient.getTemplateId().equals(req.getTemplateId())) {
+                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "患者入径不能和上次一样,请勿重复选择。");
+            }
         }
         ClinicalPathwayPatient build = ClinicalPathwayPatient.builder()
                 .id(SnowFlakeId.instance().nextId())
@@ -118,43 +121,57 @@ public class ClinicalPathwayPatientService {
     /**
      * 获取患者每天的执行日志
      *
-     * @param patNo
-     * @param times
-     * @return
+     * @param patNo 患者编号
+     * @param times 时间
+     * @return 患者每天的执行日志
      */
     public List<PatientDayWorkVo> getClinicalPathwayDayLog(String patNo, Integer times) {
+        // 根据患者编号和时间获取患者每天的执行日志
         List<PatientDayWorkVo> dayLogByPatientNo = dao.getDayLogByPatientNo(patNo, times);
 
+        // 如果获取到的日志为空,则返回一个空列表
         if (ListUtil.isBlank(dayLogByPatientNo)) {
             return new ArrayList<>();
         }
 
+        // 根据患者编号和时间获取患者的工作日志
         List<ClinicalPathwayPatientWorkLogVo> patientWorkLogByPatientNo = dao.getPatientWorkLogByPatientNo(patNo, times);
 
+        // 如果获取到的工作日志为空,则将每天的执行日志设置为空
         if (ListUtil.isBlank(patientWorkLogByPatientNo)) {
             for (PatientDayWorkVo item : dayLogByPatientNo) {
                 item.setExecute(getEmptyMap());
             }
         } else {
+            // 将工作日志按照天分组
             Map<String, List<ClinicalPathwayPatientWorkLogVo>> workMap = patientWorkLogByPatientNo.stream().collect(
                     Collectors.groupingBy(
                             ClinicalPathwayPatientWorkLogVo::getDayId
                     )
             );
 
+            // 遍历每天的执行日志
             dayLogByPatientNo.forEach(day -> {
+                // 创建一个空的临时Map
                 Map<String, List<ClinicalPathwayPatientWorkLogVo>> tmpMap = getEmptyMap();
+                // 获取当天的工作日志
                 List<ClinicalPathwayPatientWorkLogVo> clinicalPathwayWorks = workMap.get(day.getId());
+                // 如果当天有工作日志
                 if (clinicalPathwayWorks != null) {
+                    // 遍历工作日志
                     for (ClinicalPathwayPatientWorkLogVo item : clinicalPathwayWorks) {
+                        // 获取工作日志的类型
                         List<ClinicalPathwayPatientWorkLogVo> compute = tmpMap.get(ClinicalPathwayService.workTYpe[item.getType()]);
+                        // 将工作日志添加到临时Map中
                         compute.add(item);
                     }
                 }
+                // 将临时Map设置到每天的执行日志中
                 day.setExecute(tmpMap);
             });
         }
 
+        // 返回每天的执行日志
         return dayLogByPatientNo;
     }
 
@@ -186,11 +203,14 @@ public class ClinicalPathwayPatientService {
      * @return ok
      */
     public ResultVo<String> generatePath(String patNo, Integer times) {
+        // 根据住院号和住院次数查询患者临床路径信息
         ClinicalPathwayPatient patient = dao.selectPatientClinicalPathway(patNo, times);
+        // 如果患者临床路径信息为空,则返回失败信息
         if (patient == null) {
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "患者入经无法进入下一个日期。");
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "患者入经无法进入下一个日期。");
         }
 
+        // 如果患者临床路径状态为完成,则返回成功信息
         if (ClinicalPathwayPatientState.完成.getCode().equals(patient.getState())) {
             return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_NOTIFICATION, "患者完成了全部的路径");
         }
@@ -234,12 +254,17 @@ public class ClinicalPathwayPatientService {
     }
 
     public void checkPatientPathway(String patNo, Integer times) {
+        // 根据patNo和times查询患者信息
         List<ClinicalPathwayPatient> patients = dao.selectPatientCount(patNo, times);
+        // 如果患者信息只有一个,则直接返回
         if (patients.size() == 1) {
             return;
         }
+        // 获取患者信息
         ClinicalPathwayPatient patient = patients.get(0);
+        // 获取患者创建时间
         Date createTime = patient.getCreateTime();
+        // 获取当前时间
         Date now = new Date();
         // 执行几天了
         long betweenDay = DateUtil.betweenDay(createTime, now, true);
@@ -292,24 +317,39 @@ public class ClinicalPathwayPatientService {
      * @param params
      */
     public void generateWorks(TemplateDayVo value, GenerateParams params, String id) {
+        // 创建一个ClinicalPathwayPatientWorkLog的列表
         List<ClinicalPathwayPatientWorkLog> insertData = new ArrayList<>();
+        // 遍历value的execute属性
         for (Map.Entry<String, List<ClinicalPathwayWork>> item : value.getExecute().entrySet()) {
+            // 获取execute属性的值
             List<ClinicalPathwayWork> value1 = item.getValue();
+            // 遍历execute属性的值
             for (ClinicalPathwayWork clinicalPathwayWork : value1) {
+                // 创建一个ClinicalPathwayPatientWorkLog对象
                 ClinicalPathwayPatientWorkLog work = new ClinicalPathwayPatientWorkLog();
+                // 设置id
                 work.setId(SnowFlakeId.instance().nextId());
+                // 设置dayId
                 work.setDayId(id);
+                // 判断key是否为huli或zhenliao
                 if (item.getKey().equals("huli") || item.getKey().equals("zhenliao")) {
+                    // 设置complete为1
                     work.setComplete(1);
                 } else {
+                    // 设置complete为0
                     work.setComplete(0);
                 }
+                // 设置patNo
                 work.setPatNo(params.getPatNo());
+                // 设置times
                 work.setTimes(params.getTimes());
+                // 设置contentId
                 work.setContentId(clinicalPathwayWork.getId());
+                // 将work对象添加到insertData列表中
                 insertData.add(work);
             }
         }
+        // 批量插入insertData列表中的数据
         ListUtil.batchList(insertData, ClinicalPathwayPatientWorkLogDao.class, BaseMapper::insert);
     }
 

+ 0 - 1
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -1557,7 +1557,6 @@ public class YiZhuLuRuServer {
             return;
         }
         dao.updateChargeWard(patNo, times, opRecordWard, yzConfig.getShoushubingqu());
-
     }
 
 }

+ 0 - 0
update/2025-05-17/update.md → update/2025-05-17.md


+ 0 - 0
update/2025-06-04/update.md → update/2025-06-04.md


+ 10 - 0
update/2025-06-10.md

@@ -0,0 +1,10 @@
+# ca签名问题
+```sql
+emr_patient_data 表修改为 tinyint 类型
+    sign_complete     tinyint  default 0
+
+exec sp_addextendedproperty 'MS_Description',
+     N'0-初始化值 1-医生发起签名的请求到移动平板上面 2-发送请求到了ca的接口 3-完成签名', 'SCHEMA', 'dbo', 'TABLE',
+     'emr_patient_data', 'COLUMN', 'sign_complete'
+go
+```