Browse Source

电子病历解除限制

2998394161@qq.com 2 years ago
parent
commit
d7e7687518

+ 32 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/EmrControlRuleController.java

@@ -1,13 +1,17 @@
 package thyyxxk.webserver.controller.zhuyuanyizheng;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.hibernate.validator.constraints.SafeHtml;
 import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.config.auth.PassToken;
 import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrLimitUnlock;
 import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.*;
 import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrControlRuleSever;
 import thyyxxk.webserver.utils.ResultVoUtil;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 
@@ -97,4 +101,32 @@ public class EmrControlRuleController {
         return server.reviewToLiftRestrictions(param);
     }
 
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    @PostMapping("/requestToUnlockMedicalRecords")
+    public ResultVo<String> requestToUnlockMedicalRecords(@RequestBody EmrLimitUnlock param) {
+        return server.requestToUnlockMedicalRecords(param);
+    }
+
+    @PostMapping("/getApplicationData")
+    public ResultVo<IPage<EmrLimitUnlock>> getApplicationData(@RequestBody SelectUnlockParam param) {
+        return server.getApplicationData(param);
+    }
+
+    @PostMapping("/exportExcelUnlock")
+    @PassToken
+    public void exportExcelUnlock(HttpServletResponse response, @RequestBody SelectUnlockParam param) {
+        server.exportExcelUnlock(response, param);
+    }
+
+    @PostMapping("/reviewMedicalRecordsToUnlock")
+    public ResultVo<String> reviewMedicalRecordsToUnlock(@RequestBody EmrLimitUnlock param) {
+        return server.reviewMedicalRecordsToUnlock(param);
+    }
+
+    @GetMapping("/getMyUnlockByPatNo")
+    public ResultVo<EmrLimitUnlock> getMyUnlockByPatNo(@RequestParam("patNo") String patNo,
+                                                       @RequestParam("times") Integer times) {
+        return server.getMyUnlockByPatNo(patNo, times);
+    }
+
 }

+ 83 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/EmrControlDao.java

@@ -2,8 +2,11 @@ package thyyxxk.webserver.dao.his.zhuyuanyisheng;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.*;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrLimitUnlock;
 import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.*;
 
 import java.util.Date;
@@ -201,5 +204,85 @@ public interface EmrControlDao {
             " where id = #{id}")
     void updateUnlockById(EmrRuleUnlock param);
 
+    @Update("update emr_limit_unlock " +
+            "set state = 3 " +
+            "where pat_no = #{param.patNo} " +
+            "  and times = #{param.times} " +
+            "  and applicant = #{param.applicant} " +
+            "  and effective_time >= getdate()")
+    int updateUnlockOld(@Param("param") EmrLimitUnlock param);
+
+    @Insert("insert into emr_limit_unlock (pat_no, times, unlock_json, applicant, application_time, request_remarks, " +
+            "                              effective_time, state) " +
+            "values (#{param.patNo}, #{param.times},#{param.unlockJson},#{param.applicant},getdate(), #{param.requestRemarks}," +
+            "#{param.effectiveTime},0)")
+    int applicationUnlock(@Param("param") EmrLimitUnlock param);
+
+    @Select("select id, " +
+            "       pat_no, " +
+            "       times, " +
+            "       unlock_json, " +
+            "       applicant," +
+            "applicantName =    (select rtrim(name) from a_employee_mi where code = applicant), " +
+            "       application_time, " +
+            "       request_remarks, " +
+            "       approve," +
+            "approveName   =    (select rtrim(name) from a_employee_mi where code = approve), " +
+            "       review_time, " +
+            "       review_notes, " +
+            "       effective_time, " +
+            "       state " +
+            "from emr_limit_unlock " +
+            "${ew.customSqlSegment}")
+    IPage<EmrLimitUnlock> selectUnlock(IPage<EmrLimitUnlock> page,
+                                       @Param(Constants.WRAPPER) QueryWrapper<?> queryWrapper);
+
+    @Select("select id, " +
+            "       pat_no, " +
+            "       times, " +
+            "       unlock_json, " +
+            "       applicant," +
+            "applicantName =    (select rtrim(name) from a_employee_mi where code = applicant), " +
+            "       application_time, " +
+            "       request_remarks, " +
+            "       approve," +
+            "approveName   =    (select rtrim(name) from a_employee_mi where code = approve), " +
+            "       review_time, " +
+            "       review_notes, " +
+            "       effective_time, " +
+            "       state " +
+            "from emr_limit_unlock  where id = #{id} ")
+    EmrLimitUnlock selectUnlockById(int id);
+
+
+    @Update("update emr_limit_unlock " +
+            "set state       = #{param.state}, " +
+            "    approve     = #{param.approve}, " +
+            "    review_time = getdate(), " +
+            "    review_notes= #{param.reviewNotes} " +
+            "where id = #{param.id} ")
+    void updateUnlockByIdNew(@Param("param") EmrLimitUnlock param);
+
+    @Select("select id,  " +
+            "       pat_no,  " +
+            "       times,  " +
+            "       unlock_json,  " +
+            "       applicant,  " +
+            "       application_time,  " +
+            "       request_remarks,  " +
+            "       approve,  " +
+            "       review_time,  " +
+            "       review_notes,  " +
+            "       effective_time,  " +
+            "       state  " +
+            "from emr_limit_unlock  " +
+            "where pat_no = #{patNo}  " +
+            "  and times = #{times}  " +
+            "  and applicant = #{applicant}" +
+            "  and state = 1  " +
+            "  and effective_time > getdate()")
+    EmrLimitUnlock selectMyUnlockReqByPatNo(String patNo,
+                                            Integer times,
+                                            String applicant);
 
 }

+ 94 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emr/EmrLimitUnlock.java

@@ -0,0 +1,94 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.emr;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EmrLimitUnlock implements Serializable {
+
+    private static final long serialVersionUID = 985823797122253285L;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * patNo
+     */
+    private String patNo;
+
+    /**
+     * times
+     */
+    private Integer times;
+
+    /**
+     * 需要解除那些限制
+     */
+    private String unlockJson;
+
+    /**
+     * 申请人
+     */
+    private String applicant;
+    private String applicantName;
+
+    /**
+     * 申请时间
+     */
+    private Date applicationTime;
+
+    /**
+     * 申请备注
+     */
+    private String requestRemarks;
+
+    /**
+     * 审核人
+     */
+    private String approve;
+    private String approveName;
+
+    /**
+     * 审核时间
+     */
+    private Date reviewTime;
+
+    /**
+     * 审核备注
+     */
+    private String reviewNotes;
+
+    /**
+     * 有效时间
+     */
+    private Date effectiveTime;
+
+    /**
+     * state
+     */
+    private Integer state;
+
+    public String getStateName() {
+        if (state == null) {
+            return "";
+        }
+        switch (state) {
+            case 0:
+                return "待审核";
+            case 1:
+                return "审核通过";
+            case 2:
+                return "审核拒绝";
+            case 3:
+                return "医生删除";
+            default:
+                return "";
+        }
+    }
+
+}

+ 4 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emrcontrolrule/SelectUnlockParam.java

@@ -8,4 +8,8 @@ import java.util.List;
 public class SelectUnlockParam {
     private List<String> dateRange;
     private Integer flag;
+
+    private long currentPage;
+    private long pageSize;
+    private long total;
 }

+ 104 - 23
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/emr/EmrControlRuleSever.java

@@ -5,17 +5,25 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.constants.Capacity;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.EmrControlDao;
 import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.adverseevent.ReportIndex;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emr.EmrLimitUnlock;
 import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.*;
 import thyyxxk.webserver.service.PublicServer;
 import thyyxxk.webserver.service.wxapi.SendWxInfoService;
 import thyyxxk.webserver.utils.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
 /**
@@ -251,39 +259,25 @@ public class EmrControlRuleSever {
 
 
     /**
-     * 创建限制
+     * 创建病历的限制
      *
-     * @param code  病历编码
-     * @param patNo 住院号
-     * @param times 住院次数
-     * @return 返回 boolean
+     * @param code        病历编码
+     * @param patNo       住院号
+     * @param times       住院次数
+     * @param doctorLevel 医生等级
+     * @param id          病历id
+     * @return 返回提示
      */
-    @DS("his")
     public ResultVo<EmrRuleVerify> createRestrictions(String code, String patNo, Integer times, Integer doctorLevel, String id) {
         log.info("病历编码:{},住院号:{},住院次数:{}", code, patNo, times);
         EmrRuleVerify ruleVerify = new EmrRuleVerify();
+        // 获取质控的list
         List<EmrRule> ruleList = dao.selectRuleByEmrCode(code);
-
+        // 如果质控的list为空就可以创建
         if (ListUtil.isBlank(ruleList)) {
             ruleVerify.setFlag(false);
             return ResultVoUtil.success(ruleVerify);
         }
-
-        String unlockSql;
-        if (StringUtil.notBlank(id)) {
-            unlockSql = "emr_id = '" + id + "'";
-        } else {
-            unlockSql = "code = '" + code + "'";
-        }
-
-        EmrRuleUnlock emrRuleUnlock = dao.selectRemoveRestrictions(patNo, times, unlockSql, TokenUtil.getTokenUserId());
-
-        if (emrRuleUnlock != null) {
-            ruleVerify.setFlag(false);
-            ruleVerify.setMessage(DateUtil.formatDatetime(emrRuleUnlock.getDate(), DateUtil.DATE) + "后,无法编辑。");
-            return ResultVoUtil.success(ruleVerify);
-        }
-
         for (EmrRule item : ruleList) {
             String sql = item.getSql().replace("#{PATNO}", "'" + patNo + "'")
                     .replace("#{TIMES}", "'" + times + "'");
@@ -349,4 +343,91 @@ public class EmrControlRuleSever {
         return ResultVoUtil.success();
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public ResultVo<String> requestToUnlockMedicalRecords(EmrLimitUnlock param) {
+        param.setApplicant(TokenUtil.getTokenUserId());
+        param.setApplicationTime(new Date());
+        log.info("数据:{}", JSON.toJSONString(param));
+
+        // 把原来地申请取消
+        int count = dao.updateUnlockOld(param);
+        String str = "申请成功,等待医务部审核。";
+        if (count > 0) {
+            str = "原申请已顶替,申请成功,等待医务部审核。";
+        }
+        int insert = dao.applicationUnlock(param);
+        if (insert == 0) {
+            throw new BizException(ExceptionEnum.ERROR_MESSAGE, "申请错误。");
+        }
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, str);
+    }
+
+
+    public ResultVo<IPage<EmrLimitUnlock>> getApplicationData(SelectUnlockParam param) {
+        IPage<EmrLimitUnlock> iPage = new Page<>(param.getCurrentPage(), param.getPageSize(), param.getTotal() == 0);
+        QueryWrapper<EmrLimitUnlock> qw = getEmrLimitUnlockQueryWrapper(param);
+        return ResultVoUtil.success(dao.selectUnlock(iPage, qw));
+    }
+
+    @NotNull
+    private static QueryWrapper<EmrLimitUnlock> getEmrLimitUnlockQueryWrapper(SelectUnlockParam param) {
+        QueryWrapper<EmrLimitUnlock> qw = new QueryWrapper<>();
+        if (ListUtil.notBlank(param.getDateRange())) {
+            qw.ge("application_time", param.getDateRange().get(0));
+            qw.lt("application_time", param.getDateRange().get(1));
+        }
+        if (param.getFlag() > -1) {
+            qw.eq("state", param.getFlag());
+        }
+        return qw;
+    }
+
+    public void exportExcelUnlock(HttpServletResponse response, SelectUnlockParam param) {
+        IPage<EmrLimitUnlock> iPage = new Page<>(param.getCurrentPage(), -1, false);
+        QueryWrapper<EmrLimitUnlock> qw = getEmrLimitUnlockQueryWrapper(param);
+        iPage = dao.selectUnlock(iPage, qw);
+        if (ListUtil.isBlank(iPage.getRecords())) {
+            return;
+        }
+
+        String[] title = {"住院号", "住院次数", "申请人", "申请时间", "申请权限", "申请编辑时间", "申请备注", "状态", "审核人", "审核时间", "审核备注"};
+        String[][] content = new String[iPage.getRecords().size()][];
+        for (int i = 0; i < iPage.getRecords().size(); i++) {
+            content[i] = new String[title.length];
+            EmrLimitUnlock index = iPage.getRecords().get(i);
+            content[i][0] = index.getPatNo();
+            content[i][1] = String.valueOf(index.getTimes());
+            content[i][2] = index.getApplicantName();
+            content[i][3] = DateUtil.formatDatetime(index.getApplicationTime());
+            content[i][4] = index.getUnlockJson();
+            content[i][5] = DateUtil.formatDatetime(index.getEffectiveTime());
+            content[i][6] = index.getRequestRemarks();
+            content[i][7] = index.getStateName();
+            content[i][8] = index.getApproveName();
+            content[i][9] = DateUtil.formatDatetime(index.getReviewTime());
+            content[i][10] = index.getReviewNotes();
+        }
+        ExcelUtil.exportExcel(response, title, content);
+        log.info("数据:{}", JSON.toJSONString(iPage));
+    }
+
+    public ResultVo<String> reviewMedicalRecordsToUnlock(EmrLimitUnlock param) {
+        EmrLimitUnlock emrLimitUnlock = dao.selectUnlockById(param.getId());
+        if (emrLimitUnlock.getState().equals(3)) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该数据已经被申请人删除了,无法审核。");
+        }
+        if (emrLimitUnlock.getState().equals(param.getState())) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请勿重复操作。");
+        }
+        param.setApprove(TokenUtil.getTokenUserId());
+        dao.updateUnlockByIdNew(param);
+        log.info("电子病历质控审核:{}", JSON.toJSONString(param));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+    public ResultVo<EmrLimitUnlock> getMyUnlockByPatNo(String patNo, Integer times) {
+        return ResultVoUtil.success(dao.selectMyUnlockReqByPatNo(patNo, times, TokenUtil.getTokenUserId()));
+    }
+
+
 }

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

@@ -754,6 +754,9 @@ public class EmrServer {
 
     public ResultVo<String> emrSocketUnlock(String sid) {
         List<Session> list = WebSocketServer.getEmrMap(sid);
+        if (ListUtil.isBlank(list)) {
+            return ResultVoUtil.success();
+        }
         list.removeIf(item -> {
             if (EmrWebSocketServer.sessionParseUserCode(item).equals(TokenUtil.getTokenUserId())) {
                 WebSocketServer.emrSendMessage(item, "{\"closeSoctek\":\"true\"}");