Browse Source

初步完成门诊电子病历

xiaochan 4 months ago
parent
commit
311190d462

+ 46 - 14
src/main/java/thyyxxk/webserver/controller/outpatient/thmz/MzEmrController.java

@@ -3,18 +3,17 @@ package thyyxxk.webserver.controller.outpatient.thmz;
 import com.alibaba.fastjson.JSONArray;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-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 org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientData;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientVo;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzEmrAddDirReq;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzEmrAddFileReq;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzSaveFileReq;
 import thyyxxk.webserver.service.outpatient.thmz.MzEmrService;
 import thyyxxk.webserver.utils.ResultVoUtil;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -34,19 +33,52 @@ public class MzEmrController {
         return ResultVoUtil.success(service.getMzEmrModel());
     }
 
-    @PostMapping("/queryMzEmrTree")
-    public ResultVo<List<MzEmrPatientData>> queryMzEmrTree(@RequestBody MzEmrPatientVo param) {
-        return ResultVoUtil.success(service.queryMzEmrTree(param));
-    }
-
     @PostMapping("/queryMzPatientInfo")
     public ResultVo<MzEmrPatientVo> queryMzPatientInfo(@RequestBody MzEmrPatientVo param) {
         return ResultVoUtil.success(service.queryMzPatientInfo(param));
     }
 
-    @PostMapping("/saveMzEmrModel")
-    public ResultVo<String> saveMzEmrModel(@RequestBody MzEmrPatientData param) {
-        return service.saveMzEmrModel(param);
+    @GetMapping("/getEmrModelByPatientId")
+    public ResultVo<List<MzEmrPatientData>> getEmrModelByPatientId(@RequestParam("patientNo") String patientNo,
+                                                                   @RequestParam("times") Integer times) {
+        return service.getEmrModelByPatientId(patientNo, times);
+    }
+
+    @PostMapping("/addDir")
+    public ResultVo<String> addDir(@Valid @RequestBody MzEmrAddDirReq value) {
+        return service.addDir(value);
+    }
+
+    @PostMapping("/addFile")
+    public ResultVo<MzEmrPatientData> addFile(@Valid @RequestBody MzEmrAddFileReq value) {
+        return service.addFile(value);
+    }
+
+    @PostMapping("/updateFile")
+    public ResultVo<String> updateFile(@Valid @RequestBody MzSaveFileReq value) {
+        return service.updateFile(value);
+    }
+
+    @GetMapping("/delFile")
+    public ResultVo<String> delFile(@RequestParam("documentId") String documentId) {
+        return service.delFile(documentId);
+    }
+
+    @GetMapping("/getRecycleBinMedicalRecords")
+    public ResultVo<List<MzEmrPatientData>> getRecycleBinMedicalRecords(@RequestParam("patientNo") String patientNo,
+                                                                        @RequestParam("times") Integer times) {
+        return service.getRecycleBinMedicalRecords(patientNo, times);
+    }
+
+    @GetMapping("/restoreMedicalRecords")
+    public ResultVo<String> restoreMedicalRecords(@RequestParam("documentId") String documentId) {
+        return service.restoreMedicalRecords(documentId);
+    }
+
+    @GetMapping("/getHistoryTimes")
+    public ResultVo<List<MzEmrPatientData>> getHistoryTimes(@RequestParam("patientNo") String patientNo,
+                                                            @RequestParam("times") Integer times) {
+        return service.getHistoryTimes(patientNo, times);
     }
 
 }

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

@@ -1,10 +1,16 @@
 package thyyxxk.webserver.dao.his.outpatient.thmz;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 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;
 
 /**
  * @Description:
@@ -15,6 +21,22 @@ import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientVo;
 public interface MzEmrDao extends BaseMapper<MzEmrPatientData> {
     @Select(" select top 1 rtrim(name) name , case when sex = 1 then '男' when sex = 2 then '女' else '未知' end sex   ,age,birth_day,social_no from mz_patient_mi   where patient_id =#{patientId}")
     MzEmrPatientVo selectMzEmrPatientVo(MzEmrPatientVo param);
+
     @Select(" select top 1 rtrim(inpatient_no) inpatient_no from a_patient_mi where mz_no=  #{patientId} ")
     String selectPatNo(String patientId);
+
+    @Select("select id as emr_document_id, " +
+            "       name as emr_name, name," +
+            "       'This is Dir' as emr_category_code," +
+            "       parent, sort " +
+            "from emr_folder where folder_name = 'OUT_HOSPITAL' ")
+    List<MzEmrPatientData> getMzEmrFolder();
+
+    @Select("select *, (select rtrim(name) from a_employee_mi where code = create_id) create_name" +
+            " from mz_emr_patient_data ${ew.customSqlSegment}")
+    List<MzEmrPatientData> selectMyList(@Param("ew") LambdaQueryWrapper<MzEmrPatientData> ew);
+
+
+    @Update("update mz_emr_patient_data set del_flag = 0 where emr_document_id = #{id}")
+    int restoreMedicalRecords(String id);
 }

+ 109 - 103
src/main/java/thyyxxk/webserver/entity/outpatient/thmz/MzEmrPatientData.java

@@ -1,11 +1,11 @@
 package thyyxxk.webserver.entity.outpatient.thmz;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -13,116 +13,122 @@ import java.util.List;
 
 /**
  * 门诊电子病历患者信息
- * 
+ *
  * @author lh
  * @email lihong@gmail.com
  * @date 2023-10-18 15:57:00
  */
 @Data
 @TableName("mz_emr_patient_data")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class MzEmrPatientData implements Serializable {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	/**
-	 * 自增id
-	 */
-	@TableId(type = IdType.AUTO)
-	private Integer id;
-	/**
-	 * 患者id
-	 */
-	private String patNo;
-	/**
-	 * 住院次数
-	 */
-	private Integer times;
-	/**
-	 * 文档唯一id
-	 */
-	private String emrDocumentId;
-	/**
-	 * 病历模板编码不能为空
-	 */
-	private String emrCategoryCode;
-	/**
-	 * 是否删除
-	 */
-	private Integer delFlag;
-	/**
-	 * 模板的名称
-	 */
-	private String emrName;
-	/**
-	 * 医生取得名称
-	 */
-	private String name;
-	/**
-	 * 创建人
-	 */
-	private String createId;
-	/**
-	 * 创建时间
-	 */
-	private Date createDate;
-	/**
-	 * 修改人
-	 */
-	private String modifyId;
-	/**
-	 * 修改时间
-	 */
-	private Date modifyDate;
-	/**
-	 * 是否提交病历 0 -否 1- 是
-	 */
-	private Integer submit;
-	/**
-	 * 父节点名称
-	 */
-	private String parent;
-	/**
-	 * 管床医生
-	 */
-	private String referPhysician;
-	/**
-	 * 主治医生
-	 */
-	private String consultPhysician;
-	/**
-	 * 主任医生
-	 */
-	private String deptDirector;
-	/**
-	 * 提交人
-	 */
-	private String submitId;
-	/**
-	 * 审核医生
-	 */
-	private String reviewDoctors;
-	/**
-	 * 审核时间
-	 */
-	private Date reviewTime;
-	/**
-	 * 提交时间
-	 */
-	private Date submitTime;
-	/**
-	 * $column.comments
-	 */
-	private Integer sort;
-	@TableField(exist = false)
-	List<MzEmrPatientData> children;
+    /**
+     * 自增id
+     */
+    private Integer id;
+    /**
+     * 患者id
+     */
+    private String patNo;
+    /**
+     * 住院次数
+     */
+    private Integer times;
+    /**
+     * 文档唯一id
+     */
+    @TableId(type = IdType.NONE)
+    private String emrDocumentId;
+    /**
+     * 病历模板编码不能为空
+     */
+    private String emrCategoryCode;
+    /**
+     * 是否删除
+     */
+    @TableLogic
+    private Integer delFlag;
+    /**
+     * 模板的名称
+     */
+    private String emrName;
+    /**
+     * 医生取得名称
+     */
+    private String name;
+    /**
+     * 创建人
+     */
+    private String createId;
+    /**
+     * 创建时间
+     */
+    private Date createDate;
+    /**
+     * 修改人
+     */
+    private String modifyId;
+    /**
+     * 修改时间
+     */
+    private Date modifyDate;
+    /**
+     * 是否提交病历 0 -否 1- 是
+     */
+    private Integer submit;
+    /**
+     * 父节点名称
+     */
+    private String parent;
+    /**
+     * 管床医生
+     */
+    private String referPhysician;
+    /**
+     * 主治医生
+     */
+    private String consultPhysician;
+    /**
+     * 主任医生
+     */
+    private String deptDirector;
+    /**
+     * 提交人
+     */
+    private String submitId;
+    /**
+     * 审核医生
+     */
+    private String reviewDoctors;
+    /**
+     * 审核时间
+     */
+    private Date reviewTime;
+    /**
+     * 提交时间
+     */
+    private Date submitTime;
+    /**
+     * $column.comments
+     */
+    private Integer sort;
+    @TableField(exist = false)
+    List<MzEmrPatientData> children;
 
+    /**
+     * 前端保存的页面数据结构
+     */
+    @TableField(exist = false)
+    private JSONObject documentData;
 
-	/**
-	 * 前端保存的页面数据结构
-	 */
-	@TableField(exist = false)
-	private JSONObject documentData;
+    @TableField(exist = false)
+    private String userIdCode;
 
     @TableField(exist = false)
-	private String userIdCode;
+    private String createName;
 
 }

+ 19 - 0
src/main/java/thyyxxk/webserver/entity/outpatient/thmz/req/MzEmrAddDirReq.java

@@ -0,0 +1,19 @@
+package thyyxxk.webserver.entity.outpatient.thmz.req;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MzEmrAddDirReq extends MzEmrBasicReq {
+    @NotNull(message = "父节点不能为空")
+    @NotBlank(message = "父节点不能为空")
+    private String parent;
+
+    @NotNull(message = "目录名称不能为空")
+    @NotBlank(message = "目录名称不能为空")
+    private String name;
+}

+ 28 - 0
src/main/java/thyyxxk/webserver/entity/outpatient/thmz/req/MzEmrAddFileReq.java

@@ -0,0 +1,28 @@
+package thyyxxk.webserver.entity.outpatient.thmz.req;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MzEmrAddFileReq extends MzEmrBasicReq {
+
+    @NotNull(message = "document不能为空")
+    private JSONObject document;
+
+    @NotNull(message = "emrCategoryCode不能为空")
+    @NotBlank(message = "emrCategoryCode不能为空")
+    private String emrCategoryCode;
+
+    @NotNull(message = "病历名称不能为空")
+    @NotBlank(message = "病历名称不能为空")
+    private String name;
+
+    @NotNull(message = "父节点不能为空")
+    @NotBlank(message = "父节点不能为空")
+    private String parent;
+}

+ 16 - 0
src/main/java/thyyxxk/webserver/entity/outpatient/thmz/req/MzEmrBasicReq.java

@@ -0,0 +1,16 @@
+package thyyxxk.webserver.entity.outpatient.thmz.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class MzEmrBasicReq {
+    @NotNull(message = "门诊号不能为空")
+    @NotBlank(message = "门诊号不能为空")
+    private String patientId;
+
+    @NotNull(message = "就诊次数不能为空")
+    private Integer times;
+}

+ 21 - 0
src/main/java/thyyxxk/webserver/entity/outpatient/thmz/req/MzSaveFileReq.java

@@ -0,0 +1,21 @@
+package thyyxxk.webserver.entity.outpatient.thmz.req;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class MzSaveFileReq {
+
+    @NotNull(message = "document不能为空")
+    @NotBlank(message = "id不能为空")
+    private String emrDocumentId;
+
+    @NotNull(message = "document不能为空")
+    private JSONObject document;
+
+    @NotNull(message = "document不能为空")
+    private JSONObject emrDataElement;
+}

+ 119 - 69
src/main/java/thyyxxk/webserver/service/outpatient/thmz/MzEmrService.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import lombok.RequiredArgsConstructor;
@@ -18,11 +19,14 @@ import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.login.UserInfo;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientData;
 import thyyxxk.webserver.entity.outpatient.thmz.MzEmrPatientVo;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzEmrAddDirReq;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzEmrAddFileReq;
+import thyyxxk.webserver.entity.outpatient.thmz.req.MzSaveFileReq;
 import thyyxxk.webserver.service.externalhttp.emr.EmrEditor;
 import thyyxxk.webserver.service.hutoolcache.DeptCache;
 import thyyxxk.webserver.service.hutoolcache.UserCache;
-import thyyxxk.webserver.utils.AssertUtil;
-import thyyxxk.webserver.utils.ResultVoUtil;
+import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrServer;
+import thyyxxk.webserver.utils.*;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -40,7 +44,6 @@ import java.util.stream.Collectors;
 public class MzEmrService {
     private final MzEmrDao dao;
     private final EmrEditor emr;
-    private final EmrPatientDao emrPatientDao;
     private final UserCache userCache;
     private final DeptCache deptCache;
 
@@ -49,52 +52,6 @@ public class MzEmrService {
         return emr.getDeptList("1400000");
     }
 
-    /**
-     * @description:查询 1住院 2当前  3历史记录
-     * @author: lihong
-     * @date: 2023/10/18 16:51
-     * @param: type
-     * @return: java.util.Map<java.lang.String, java.util.List < com.alibaba.fastjson.JSONObject>>
-     **/
-    public List<MzEmrPatientData> queryMzEmrTree(MzEmrPatientVo param) {
-        List<MzEmrPatientData> result;
-        QueryWrapper<MzEmrPatientData> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("pat_no", param.getPatientId());
-        String strTemplate = "";
-        List<MzEmrPatientData> list;
-        if (param.getType() == 1) {
-            String patNo = dao.selectPatNo(param.getPatientId());
-            list = emrPatientDao.selectDataByPatNo(patNo);
-            strTemplate = "第{}住院记录";
-        } else if (param.getType() == 2) {
-            queryWrapper.eq("times", param.getTimes());
-            list = dao.selectList(queryWrapper);
-            return list;
-        } else {
-            strTemplate = "第{}就诊记录";
-            queryWrapper.ne("times", param.getTimes());
-            list = dao.selectList(queryWrapper);
-        }
-        result = getTree(list, strTemplate);
-        return result;
-    }
-
-
-    private List<MzEmrPatientData> getTree(List<MzEmrPatientData> list, String strTemplate) {
-        if (CollUtil.isEmpty(list)) return list;
-        List<MzEmrPatientData> result = new ArrayList<>();
-        Map<Integer, List<MzEmrPatientData>> collect = list.stream().collect(Collectors.groupingBy(MzEmrPatientData::getTimes));
-        int index = 1;
-        for (Integer key : collect.keySet()) {
-            MzEmrPatientData tem = new MzEmrPatientData();
-            tem.setId(index);
-            tem.setName(StrUtil.format(strTemplate, key));
-            tem.setChildren(collect.get(key));
-            result.add(tem);
-        }
-        return result;
-    }
-
     public MzEmrPatientVo queryMzPatientInfo(MzEmrPatientVo param) {
         AssertUtil.isnotBlank(param.getPatientId(), "门诊号不能为空");
         MzEmrPatientVo data = dao.selectMzEmrPatientVo(param);
@@ -118,35 +75,128 @@ public class MzEmrService {
         return data;
     }
 
+    private LambdaQueryWrapper<MzEmrPatientData> getQueryWrapper(String patientNo, Integer times) {
+        LambdaQueryWrapper<MzEmrPatientData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MzEmrPatientData::getPatNo, patientNo);
+        queryWrapper.eq(MzEmrPatientData::getTimes, times);
+        return queryWrapper;
+    }
+
+    public ResultVo<List<MzEmrPatientData>> getEmrModelByPatientId(String patientNo, Integer times) {
+        List<MzEmrPatientData> mzEmrFolder = dao.getMzEmrFolder();
+        LambdaQueryWrapper<MzEmrPatientData> queryWrapper = getQueryWrapper(patientNo, times);
+        queryWrapper.eq(MzEmrPatientData::getDelFlag, 0);
+        List<MzEmrPatientData> mzEmrPatientData = dao.selectMyList(queryWrapper);
+        mzEmrFolder.addAll(mzEmrPatientData);
 
-    public ResultVo<String> saveMzEmrModel(MzEmrPatientData param) {
-        AssertUtil.isnotBlank(param.getEmrDocumentId(), "文档id不能为空");
-        AssertUtil.isnotBlank(param.getUserIdCode(), "用户不能为空");
-        JSONObject saveJson = new JSONObject();
-        saveJson.put("document", param.getDocumentData());
+        List<MzEmrPatientData> execute = TreeUtilV2
+                .create(mzEmrFolder)
+                .id("emrDocumentId")
+                .children("children")
+                .parentId("parent").execute();
+
+        return R.ok(execute);
+    }
+
+    public ResultVo<String> addDir(MzEmrAddDirReq value) {
+        MzEmrPatientData data = new MzEmrPatientData();
+        data.setName(value.getName());
+        data.setEmrName(value.getName());
+        data.setEmrCategoryCode(EmrServer.THIS_IS_DIR);
+        data.setEmrDocumentId(SnowFlakeId.instance().nextId());
+        data.setParent(value.getParent());
+        data.setPatNo(value.getPatientId());
+        data.setTimes(value.getTimes());
+        data.setCreateId(TokenUtil.getInstance().getTokenUserId());
+        dao.insert(data);
+        return R.ok(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
+    }
+
+    public ResultVo<MzEmrPatientData> addFile(MzEmrAddFileReq value) {
+        String id = SnowFlakeId.instance().nextId();
+        JSONObject document = value.getDocument();
+        // 设置id,这里不用在包裹一层 document 了,前端包裹了,但是需要设置id
+        document.getJSONObject("document").put("_id", id);
         try {
-            emr.saveDocument(saveJson);
+            emr.saveDocument(document);
         } catch (Exception e) {
             return ResultVoUtil.fail(ExceptionEnum.EMR_SAVE, "病历保存错误,请重试!" + e.getMessage());
         }
-        QueryWrapper<MzEmrPatientData> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("emr_document_id", param.getEmrDocumentId());
-        MzEmrPatientData mzEmrPatientData = dao.selectOne(queryWrapper);
+        MzEmrPatientData insert = MzEmrPatientData.builder()
+                .emrCategoryCode(value.getEmrCategoryCode())
+                .name(value.getName())
+                .emrName(value.getName())
+                .createId(TokenUtil.getInstance().getTokenUserId())
+                .parent(value.getParent())
+                .patNo(value.getPatientId())
+                .times(value.getTimes())
+                .emrDocumentId(id)
+                .build();
+        dao.insert(insert);
+        return R.ok(insert);
+    }
+
+    public ResultVo<String> updateFile(MzSaveFileReq value) {
+        MzEmrPatientData mzEmrPatientData = dao.selectById(value.getEmrDocumentId());
         if (mzEmrPatientData == null) {
-            param.setCreateId(param.getUserIdCode());
-            dao.insert(param);
-        } else {
-            param.setModifyId(param.getUserIdCode());
-            param.setModifyDate(new Date());
-            UpdateWrapper<MzEmrPatientData> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.eq("emr_document_id", param.getEmrDocumentId());
-            dao.update(param, updateWrapper);
+            return R.fail(ExceptionEnum.LOGICAL_ERROR, "病历不存在。");
+        }
+        if (!mzEmrPatientData.getCreateId().equals(TokenUtil.getInstance().getTokenUserId())) {
+            return R.fail(ExceptionEnum.LOGICAL_ERROR, "创建人不是您无法删除。");
+        }
+        try {
+            emr.saveDocument(value.getDocument());
+        } catch (Exception e) {
+            return ResultVoUtil.fail(ExceptionEnum.EMR_SAVE, "病历保存错误,请重试!" + e.getMessage());
+        }
+
+        MzEmrPatientData build = MzEmrPatientData.builder()
+                .emrDocumentId(value.getEmrDocumentId())
+                .modifyDate(new Date())
+                .modifyId(TokenUtil.getInstance().getTokenUserId())
+                .build();
+        dao.updateById(build);
+        return R.ok(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
+    }
+
+    public ResultVo<String> delFile(String documentId) {
+        MzEmrPatientData mzEmrPatientData = dao.selectById(documentId);
+        if (mzEmrPatientData == null) {
+            return R.fail(ExceptionEnum.LOGICAL_ERROR, "病历不存在。");
+        }
+        if (!mzEmrPatientData.getCreateId().equals(TokenUtil.getInstance().getTokenUserId())) {
+            return R.fail(ExceptionEnum.LOGICAL_ERROR, "创建人不是您无法删除。");
+        }
+        int i = dao.deleteById(documentId);
+        if (i > 0) {
+            return R.ok(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
+        }
+        return R.fail(ExceptionEnum.LOGICAL_ERROR, "删除失败。");
+    }
+
+    public ResultVo<List<MzEmrPatientData>> getRecycleBinMedicalRecords(String patientNo, Integer times) {
+        LambdaQueryWrapper<MzEmrPatientData> queryWrapper = getQueryWrapper(patientNo, times);
+        queryWrapper.eq(MzEmrPatientData::getCreateId, TokenUtil.getInstance().getTokenUserId());
+        queryWrapper.eq(MzEmrPatientData::getDelFlag, 1);
+        queryWrapper.ne(MzEmrPatientData::getEmrCategoryCode, EmrServer.THIS_IS_DIR);
+        return R.ok(dao.selectMyList(queryWrapper));
+    }
+
+    public ResultVo<String> restoreMedicalRecords(String documentId) {
+        int i = dao.restoreMedicalRecords(documentId);
+        if (i > 0) {
+            return R.ok(ExceptionEnum.SUCCESS_AND_EL_MESSAGE);
         }
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE, "保存成功");
+        return R.fail(ExceptionEnum.LOGICAL_ERROR, "恢复失败。");
     }
 
-    public ResultVo<List<Object>> getEmrModelByPatientId(String patientNo) {
-        return null;
+    public ResultVo<List<MzEmrPatientData>> getHistoryTimes(String patientNo, Integer times) {
+        LambdaQueryWrapper<MzEmrPatientData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MzEmrPatientData::getPatNo, patientNo);
+        queryWrapper.ne(MzEmrPatientData::getTimes, times);
+        queryWrapper.eq(MzEmrPatientData::getDelFlag, 0);
+        queryWrapper.ne(MzEmrPatientData::getEmrCategoryCode, EmrServer.THIS_IS_DIR);
+        return R.ok(dao.selectMyList(queryWrapper));
     }