package thyyxxk.webserver.service.casefrontsheet; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import thyyxxk.webserver.config.exception.ExceptionEnum; import thyyxxk.webserver.dao.his.casefrontsheet.HuiZhenShenQingDao; import thyyxxk.webserver.entity.ResultVo; import thyyxxk.webserver.entity.casefrontsheet.YshHzRecord; import thyyxxk.webserver.entity.datamodify.GetDropdownBox; import thyyxxk.webserver.service.PublicServer; import thyyxxk.webserver.utils.ListUtil; import thyyxxk.webserver.utils.ResultVoUtil; import thyyxxk.webserver.utils.StringUtil; import thyyxxk.webserver.utils.TokenUtil; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** *

* 描述: 会诊申请 *

* * @author xc * @date 2021-05-07 11:01 */ @Service @Slf4j public class HuiZhenShenQingService { private final HuiZhenShenQingDao dao; private final PublicServer publicServer; public HuiZhenShenQingService(HuiZhenShenQingDao dao, PublicServer publicServer) { this.dao = dao; this.publicServer = publicServer; } /** * @return 返回会诊级别 */ public ResultVo> huiZhenLeiBie() { return ResultVoUtil.success(dao.getYshZdHzLevel()); } /** * 远程搜索科室 * * @param code 模糊查询 * @return 返回科室 */ public ResultVo> queryDept(String code) { return ResultVoUtil.success(dao.getZdUnitCode(StringUtil.isContainChinese(code))); } /** * 会诊申请 * * @param param 申请需要插入的数据 * @return 返回状态 */ public ResultVo submitHuiZhenShenQing(YshHzRecord param) { log.info("会诊申请====>申请人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONString(param)); publicServer.huanZheJieSuan(param.getInpatientNo(), param.getAdmissTimes()); /* * 获取一个新的医嘱号 * 需要一套指令 先把表锁住 在查询出医嘱号 在加一更新加一就完事了 */ dao.lockTable(); float actOrderNo = dao.getActOrderNo() + 1; dao.updateActOrderNo(actOrderNo); //下面是给申请次数 加一 param.setReqTimes(dao.getMaxReqTimes(param.getInpatientNo(), param.getAdmissTimes()) + 1); param.setInputDate(new Date()); param.setActOrderNo((int) actOrderNo); param.setInputId(TokenUtil.getTokenUserId()); param.setReqDate(param.getInputDate()); param.setOrderCode(getOrderCode("00" + param.getHzType())); param.setOrderName(String.format("请%s进行院内会诊", param.getReqDeptName())); //插入会诊申请 dao.chaRuHuiZhenShenQing(param); //申请成功了就还需要插入一条医嘱 dao.chaRuYiZhu(param); log.info("插入数据:{}", JSON.toJSONString(param)); return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "会诊申请成功,正在通知会诊医生。

(〜^㉨^)〜

"); } /** * 查询会诊的信息 * * @param inpatientNo 住院号 * @param admissTimes 住院次数 * @return 返回 */ public ResultVo> chaKanHuiZhenShenQing(String inpatientNo, int admissTimes) { return ResultVoUtil.success(dao.chaKanHuiZhenShenQing(inpatientNo, admissTimes, null)); } /** * 删除会诊申请 要同时删除 会诊申请 和 一条医嘱 * * @param inpatientNo 住院号 * @param admissTimes 住院次数 * @param actOrderNo 医嘱号 * @param reqTimes 申请次数 * @return 返回 */ public ResultVo shanChuHuiZhenShenQing(String inpatientNo, int admissTimes, BigDecimal actOrderNo, int reqTimes) { List huiZhenXinXi = dao.chaKanHuiZhenShenQing(inpatientNo, admissTimes, actOrderNo); if (ListUtil.isBlank(huiZhenXinXi)) { return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到对应信息可能已经被删除了。"); } if (StringUtil.notBlank(huiZhenXinXi.get(0).getStatusFlag()) && huiZhenXinXi.get(0).getStatusFlag().trim().equals("2")) { return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该会诊已经完成了无法删除。"); } //会诊申请是根据 住院号,住院次数,申请次数 来获取到 一条 dao.shanChuShenQing(inpatientNo, admissTimes, reqTimes); //医嘱 只要根据医嘱号来删除 dao.shanChuYiZhu(actOrderNo); log.info("删除会诊申请==》操作人:{},住院号:{},住院次数:{},医嘱号:{},申请次数:{}", TokenUtil.getTokenUserId(), inpatientNo, admissTimes, actOrderNo, reqTimes); return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "删除成功"); } /** * 查询会诊的医生 * * @param deptCode 科室的code * @param hzType 会诊的级别 * @return 返回 医生的code 和 name */ public ResultVo> huiZhenYiSheng(String deptCode, String hzType) { return ResultVoUtil.success(dao.huiZhenYiSheng(deptCode, "00" + hzType)); } /** * 获取患者的主诊断 * * @param patNo 住院号 * @param times 住院次数 * @param flag 1-本院诊断 2-医保诊断 * @return 对应数据 */ public ResultVo> huoQuHuanZheZhuYaoZhenDuan(String patNo, Integer times, Integer flag) { return ResultVoUtil.success(dao.huoQuHuanZheZhuYaoZhenDuan(patNo, times, flag == 1 ? "ba_first_page1" : "zy_dis_diag_yb")); } /** * 用来获取 order_code 这个是写死的 * * @param hzType 会诊的级别 * @return 返回 order_code */ public String getOrderCode(String hzType) { switch (hzType) { case "001": return "01425"; case "002": return "01426"; case "003": return "01427"; default: return "500"; } } }