|  | @@ -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()));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 |