package com.smartor.statemachine; import com.smartor.domain.PatMedInhosp; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * 住院状态机服务(门面模式) * 提供便捷的状态转换方法 * * @author smartor */ @Slf4j @Service public class InhospStateMachineService { @Autowired private InhospStateMachine stateMachine; /** * 处理预入院 * * @param patMedInhosp 住院记录对象 * @return 是否成功 */ public boolean processPreAdmission(PatMedInhosp patMedInhosp) { log.info("【InhospStateMachineService】处理预入院:serialnum={}, orgid={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid()); return stateMachine.transitionState(patMedInhosp, "3"); } /** * 处理入院 * * @param patMedInhosp 住院记录对象 * @return 是否成功 */ public boolean processInHospital(PatMedInhosp patMedInhosp) { log.info("【InhospStateMachineService】处理入院:serialnum={}, orgid={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid()); return stateMachine.transitionState(patMedInhosp, "0"); } /** * 处理出院 * * @param patMedInhosp 住院记录对象 * @return 是否成功 */ public boolean processDischarge(PatMedInhosp patMedInhosp) { log.info("【InhospStateMachineService】处理出院:serialnum={}, orgid={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid()); return stateMachine.transitionState(patMedInhosp, "1"); } /** * 根据cry参数处理状态转换 * * @param patMedInhosp 住院记录对象 * @param cry 状态码(0:入院, 1:出院, 3:预入院) * @return 是否成功 */ public boolean processStateChange(PatMedInhosp patMedInhosp, String cry) { log.info("【InhospStateMachineService】根据cry处理状态变更:serialnum={}, orgid={}, cry={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid(), cry); if ("0".equals(cry)) { return processInHospital(patMedInhosp); } else if ("1".equals(cry)) { return processDischarge(patMedInhosp); } else if ("3".equals(cry)) { return processPreAdmission(patMedInhosp); } else { log.error("【InhospStateMachineService】未知的cry值:{}", cry); return false; } } /** * 获取当前状态 * * @param serialnum 流水号 * @param orgid 机构ID * @param patno 患者编号 * @return 当前状态码 */ public String getCurrentState(String serialnum, String orgid, String patno) { return stateMachine.getCurrentState(serialnum, orgid, patno); } }