浏览代码

完成生成病历的接口

xiaochan 3 月之前
父节点
当前提交
f9ead664a6

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>13.8.2</version>
+    <version>13.8.3</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
     <properties>

+ 23 - 0
src/main/java/thyyxxk/webserver/controller/autocreateemr/AutoCreateEmrController.java

@@ -0,0 +1,23 @@
+package thyyxxk.webserver.controller.autocreateemr;
+
+import lombok.RequiredArgsConstructor;
+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.entity.ResultVo;
+import thyyxxk.webserver.service.autocreateemr.AutoCreateEmrParams;
+import thyyxxk.webserver.service.autocreateemr.AutoCreateEmrServer;
+
+@RequiredArgsConstructor
+@RequestMapping("/autoCreateEmr")
+@RestController
+public class AutoCreateEmrController {
+
+    private final AutoCreateEmrServer service;
+
+    @PostMapping("/createEmr")
+    public ResultVo<String> createEmr(@RequestBody AutoCreateEmrParams.Params params) {
+        return service.createEmr(params);
+    }
+}

+ 34 - 0
src/main/java/thyyxxk/webserver/dao/his/autocreateemr/AutoCreateEmrDao.java

@@ -0,0 +1,34 @@
+package thyyxxk.webserver.dao.his.autocreateemr;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface AutoCreateEmrDao {
+
+    @Select("select top 1      a.name,\n" +
+            "                  birth_date AS birthDate,\n" +
+            "                  sex,\n" +
+            "                  social_no   as                 idCard,\n" +
+            "                  mz_no       as                 patientNo,\n" +
+            "                  home_street as                 homeAddr,\n" +
+            "    routeOfAdmissionName  = (select name from zy_zd_admiss_way where code = route_of_admission),\n" +
+            "                  home_tel AS homeTel,\n" +
+            "                  isnull(icd_code, icd_code_new) icdCode,\n" +
+            "                  isnull(icd_text, icd_text_new) icdText,\n" +
+            "    reqDeptName = (select zd.name from zd_unit_code zd where code = small_dept),\n" +
+            "    reqWardName = (select zd.name from zd_unit_code zd where code = req_ward),\n" +
+            "                  doctor_code AS doctorCode," +
+            "    reqDoctorSignName = (select mi.name from a_employee_mi mi where mi.code = a.doctor_code)," +
+            "                  dept_code   as                 reqDeptName,\n" +
+            "                  visit_date  as                 reqDate,\n" +
+            "                  deposit\n" +
+            "from mz_zy_req a\n" +
+            "         inner join a_patient_mi b on (a.patient_id = b.mz_no\n" +
+            "    )\n" +
+            "where patient_id = (select c.mz_no from a_patient_mi c where c.inpatient_no = #{patNo})\n" +
+            "  and req_status <> '4'\n" +
+            "order by visit_date desc")
+    JSONObject zhuyuanzheng(String patNo);
+}

+ 0 - 1
src/main/java/thyyxxk/webserver/dao/his/outpatient/thmz/MzEmrDao.java

@@ -8,7 +8,6 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientData;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientVo;
-import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrFolder;
 
 import java.util.List;
 

+ 6 - 0
src/main/java/thyyxxk/webserver/service/autocreateemr/AutoCreateEmr.java

@@ -0,0 +1,6 @@
+package thyyxxk.webserver.service.autocreateemr;
+
+public interface AutoCreateEmr {
+
+    AutoCreateEmrParams.AutoCreateEmrVo create(AutoCreateEmrParams.Params params);
+}

+ 48 - 0
src/main/java/thyyxxk/webserver/service/autocreateemr/AutoCreateEmrParams.java

@@ -0,0 +1,48 @@
+package thyyxxk.webserver.service.autocreateemr;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.*;
+
+import java.util.List;
+
+@Data
+public class AutoCreateEmrParams {
+
+    @Data
+    public static class Params {
+        private String patNo;
+        private Integer times;
+        // 创建人
+        private String createCode;
+        private List<String> taskName;
+    }
+
+    /**
+     * 电子病历中上传的数据
+     */
+    @Data
+    public static class EmrParams {
+        // 文档类型
+        private String categoryId;
+        // 文档类型编码
+        private String categoryCode;
+        // 文档名称
+        private String documentId;
+        // 填充的数据
+        private JSONObject data;
+        private Boolean enableSign = Boolean.TRUE;
+    }
+
+    @EqualsAndHashCode(callSuper = true)
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class AutoCreateEmrVo extends EmrParams {
+        // 文件的名字
+        private String name;
+        // 放在什么文件夹下面
+        private String parentId;
+    }
+
+}

+ 94 - 0
src/main/java/thyyxxk/webserver/service/autocreateemr/AutoCreateEmrServer.java

@@ -0,0 +1,94 @@
+package thyyxxk.webserver.service.autocreateemr;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.BizException;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.zhuyuanyisheng.emr.EmrPatientDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrPatientData;
+import thyyxxk.webserver.service.externalhttp.emr.EmrEditor;
+import thyyxxk.webserver.utils.ListUtil;
+import thyyxxk.webserver.utils.R;
+import thyyxxk.webserver.utils.SnowFlakeId;
+import thyyxxk.webserver.utils.TokenUtil;
+
+import java.util.Date;
+import java.util.Map;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AutoCreateEmrServer {
+    private final Map<String, AutoCreateEmr> autoCreateEmrList;
+    private final EmrPatientDao dao;
+    private final EmrEditor editor;
+
+    public ResultVo<String> createEmr(AutoCreateEmrParams.Params params) {
+        params.setCreateCode(TokenUtil.getInstance().getTokenUserId());
+        createEmrAsync(params);
+        return R.ok(ExceptionEnum.SUCCESS_AND_EL_MESSAGE, "创建成功。");
+    }
+
+    @Async
+    public void createEmrAsync(AutoCreateEmrParams.Params params) {
+        if (StrUtil.isBlank(params.getCreateCode())) {
+            params.setCreateCode(TokenUtil.getInstance().getTokenUserId());
+        }
+        for (Map.Entry<String, AutoCreateEmr> item : autoCreateEmrList.entrySet()) {
+            if (ListUtil.notBlank(params.getTaskName())) {
+                if (!params.getTaskName().contains(item.getKey())) {
+                    // 如果不在任务列表里面就不执行
+                    continue;
+                }
+            }
+            try {
+                String documentId = SnowFlakeId.instance().nextId();
+                AutoCreateEmrParams.AutoCreateEmrVo rst = item.getValue().create(params);
+                // 强制设置documentId
+                rst.setDocumentId(documentId);
+                EmrPatientData build = EmrPatientData.builder()
+                        .parent(rst.getParentId())
+                        .patNo(params.getPatNo())
+                        .times(params.getTimes())
+                        .createId(params.getCreateCode())
+                        .createDate(new Date())
+                        .emrDocumentId(documentId)
+                        .emrCategoryCode(rst.getCategoryCode())
+                        .parent(rst.getParentId())
+                        .emrName(rst.getName())
+                        .name(rst.getName())
+                        .build();
+                // 调用接口
+                postEmrApi(rst);
+                // 插入数据
+                dao.insert(build);
+            } catch (Exception e) {
+                log.error("入参:{}", JSONObject.toJSONString(params));
+                log.error("生成病历错误", e);
+                throw new BizException(ExceptionEnum.ERROR_EL_MESSAGE, StrUtil.format("生成:【{}】任务错误,错误如下:{}", item.getKey(), e.getMessage()));
+            }
+        }
+    }
+
+
+    public void postEmrApi(AutoCreateEmrParams.AutoCreateEmrVo rst) {
+        AutoCreateEmrParams.EmrParams emrParams = new AutoCreateEmrParams.EmrParams();
+        emrParams.setDocumentId(rst.getDocumentId());
+        emrParams.setCategoryId(rst.getCategoryId());
+        emrParams.setCategoryCode(rst.getCategoryCode());
+        emrParams.setData(rst.getData());
+        log.info("上传数据:{}", emrParams);
+        JSONObject jsonObject = editor.dataFill(emrParams);
+        if (rst.getDocumentId().equals(jsonObject.getString("documentId"))) {
+            return;
+        }
+        throw new RuntimeException(StrUtil.format("文档id,不一致:{}", jsonObject.toString()));
+    }
+
+
+}

+ 59 - 0
src/main/java/thyyxxk/webserver/service/autocreateemr/imp/ZhuYuanZheng.java

@@ -0,0 +1,59 @@
+package thyyxxk.webserver.service.autocreateemr.imp;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.envionment.MedinsurConfig;
+import thyyxxk.webserver.config.exception.BizException;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.autocreateemr.AutoCreateEmrDao;
+import thyyxxk.webserver.service.autocreateemr.AutoCreateEmr;
+import thyyxxk.webserver.service.autocreateemr.AutoCreateEmrParams;
+import thyyxxk.webserver.utils.DateUtil;
+
+import java.util.Date;
+
+@Service
+@RequiredArgsConstructor
+public class ZhuYuanZheng implements AutoCreateEmr {
+
+    private final AutoCreateEmrDao dao;
+    private final MedinsurConfig config;
+
+    @Override
+    public AutoCreateEmrParams.AutoCreateEmrVo create(AutoCreateEmrParams.Params params) {
+        AutoCreateEmrParams.AutoCreateEmrVo rst = new AutoCreateEmrParams.AutoCreateEmrVo();
+        rst.setParentId("e4ea94c877d04f40a2ddd195eec1d1f0");
+        rst.setName("住院证");
+        rst.setCategoryId("ecd09680815d11f0a11e4d98bd455303");
+        rst.setCategoryCode("zhuyuanzheng");
+        JSONObject data = dao.zhuyuanzheng(params.getPatNo());
+        if (data == null) {
+            throw new BizException(ExceptionEnum.ERROR_EL_MESSAGE, "没有找到住院证数据。");
+        }
+
+        data.forEach((k, v) -> {
+            if (v instanceof String) {
+                data.replace(k, ((String) v).trim());
+            }
+        });
+
+        Date birthDate = DateUtil.parse(data.getString("birthDate"), "yyyy-MM-dd");
+        data.put("age", DateUtil.calculateAge(birthDate, new Date()) + "岁");
+        String sex = data.getString("sex");
+        data.put("sexName", "1".equals(sex) ? "男" : "2".equals(sex) ? "女" : "未知");
+        data.put("医院名称", config.getHospName());
+        data.put("reqDoctorSign", new JSONArray() {{
+            add(new JSONObject() {{
+                put("name", data.getString("reqDoctorSignName"));
+                put("code", data.getString("doctorCode"));
+                put("signature", StrUtil.format("/doctorSignatureImage/{}.png", data.getString("doctorCode")));
+            }});
+        }});
+        rst.setData(data);
+        return rst;
+    }
+
+}

+ 3 - 2
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/ShouShuShenQingService.java

@@ -154,7 +154,7 @@ public class ShouShuShenQingService {
     }
 
 
-// 根据分类代码、名称、总记录数、当前页码、每页记录数查询分类详情
+    // 根据分类代码、名称、总记录数、当前页码、每页记录数查询分类详情
     public ResultVo<IPage<ShouShuFanHui>> fenLeiXiangQing(String code, String name, long total, long currentPage, long pageSize) {
         // 创建分页对象,设置当前页码、每页记录数、是否查询总记录数
         IPage<ShouShuFanHui> page = new Page<>(currentPage, pageSize, total == 0);
@@ -258,6 +258,7 @@ public class ShouShuShenQingService {
             // 插入手术诊断
             dao.insertReqSurgicalDiag(reqSurgicalDiagList);
         } catch (Exception e) {
+            log.error("手术申请错误", e);
             // 如果插入失败,则删除手术记录
             dao.delOpRecord(op.getRecordId(), op.getActOrderNo());
             // 返回失败结果
@@ -268,7 +269,7 @@ public class ShouShuShenQingService {
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
     }
 
-// 根据传入的list、recordId和type,返回一个TReqSurgicalDiag的列表
+    // 根据传入的list、recordId和type,返回一个TReqSurgicalDiag的列表
     private List<TReqSurgicalDiag> surgicalDiagnosisFor(List<CodeName> list, int recordId, int type) {
         // 创建一个临时列表
         List<TReqSurgicalDiag> temp = new ArrayList<>();

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

@@ -1066,5 +1066,4 @@ public class EmrServer {
         return R.ok(emr.dataFill(params));
     }
 
-
 }