package cn.lihu.jh.module.ecg.service.room; import java.util.*; import javax.annotation.Resource; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomProfile; import cn.lihu.jh.module.ecg.enums.RoomCallingScreenEnum; import cn.lihu.jh.module.ecg.service.queue.QueueService; import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomPageReqVO; import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomSaveReqVO; import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; import cn.lihu.jh.module.ecg.enums.BedStatusEnum; import cn.lihu.jh.framework.common.util.object.BeanUtils; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.ROOM_NOT_EXISTS; /** * 诊室和诊疗床 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class RoomServiceImpl implements RoomService { @Resource private RoomMapper roomMapper; @Resource private OAuth2TokenApi oAuth2TokenApi; @Resource QueueService queueService; @Override public Integer createRoom(RoomSaveReqVO createReqVO) { // 插入 RoomDO room = BeanUtils.toBean(createReqVO, RoomDO.class); roomMapper.insert(room); // 返回 return room.getId(); } @Override public void updateRoom(RoomSaveReqVO updateReqVO) { // 校验存在 validateRoomExists(updateReqVO.getId()); // 更新 RoomDO updateObj = BeanUtils.toBean(updateReqVO, RoomDO.class); roomMapper.updateById(updateObj); } @Override public void deleteRoom(Integer id) { // 校验存在 validateRoomExists(id); // 删除 roomMapper.deleteById(id); } private void validateRoomExists(Integer id) { if (roomMapper.selectById(id) == null) { throw exception(ROOM_NOT_EXISTS); } } @Override public RoomDO getRoom(Integer id) { return roomMapper.selectById(id); } @Override public RoomProfile getRoomByIP(String ip, Long roomId) { List roomDOList = null; if (null != roomId) { roomDOList = roomMapper.selectList(RoomDO::getRoomId, roomId); } else { roomDOList = roomMapper.queueByIp(ip); } RoomProfile roomProfile = new RoomProfile(); roomProfile.setBedNum( 0 ); roomProfile.setCallingScreenType( RoomCallingScreenEnum.NONE.getCallingScreenType() ); for (RoomDO roomDO : roomDOList) { roomProfile.setRoomId(roomDO.getRoomId()); roomProfile.setRoomName(roomDO.getRoomName()); roomProfile.setBedNum( roomProfile.getBedNum() + 1); // 0 检查 1 领用 2 装机 // 计算 诊间屏类型 if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.NONE.getCallingScreenType()) { if ( roomDO.getOpType() == 0 ) { roomProfile.setCallingScreenType(RoomCallingScreenEnum.CHECK_ONLY.getCallingScreenType()); } else if ( roomDO.getOpType() == 1 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.RECEIVE_ONLY.getCallingScreenType()); } else if ( roomDO.getOpType() == 2 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.INSTALL_ONLY.getCallingScreenType()); } } else if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.CHECK_ONLY.getCallingScreenType()) { if ( roomDO.getOpType() == 0 || roomDO.getOpType() == 1 ) { // do nothing } else if ( roomDO.getOpType() == 2 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.CHECK_INSTALL.getCallingScreenType()); } } else if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.RECEIVE_ONLY.getCallingScreenType()) { if ( roomDO.getOpType() == 0 || roomDO.getOpType() == 1 ) { // do nothing } else if ( roomDO.getOpType() == 2 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.RECEIVE_INSTALL.getCallingScreenType()); } } else if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.INSTALL_ONLY.getCallingScreenType()) { if ( roomDO.getOpType() == 0 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.CHECK_INSTALL.getCallingScreenType()); } else if ( roomDO.getOpType() == 1 ) { roomProfile.setCallingScreenType( RoomCallingScreenEnum.RECEIVE_INSTALL.getCallingScreenType()); } else if ( roomDO.getOpType() == 2 ) { // do nothing } } else if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.RECEIVE_INSTALL.getCallingScreenType()) { // do nothing } else if (roomProfile.getCallingScreenType() == RoomCallingScreenEnum.CHECK_INSTALL.getCallingScreenType()) { // do nothing } } return roomProfile; } @Override public PageResult getRoomPage(RoomPageReqVO pageReqVO) { return roomMapper.selectPage(pageReqVO); } @Override public List simpleRoomList() { List bedStatusEnumList = new ArrayList(); bedStatusEnumList.add(BedStatusEnum.OPENING); bedStatusEnumList.add(BedStatusEnum.DOCTOR_ON); bedStatusEnumList.add(BedStatusEnum.DOCTOR_PAUSE); return roomMapper.simpleRoomList(bedStatusEnumList); } @Override public void resetRoom(Boolean needCloseBed) { queueService.startResetRoom(needCloseBed); } @Override public MonitorInfoVO getMonitorInfo() { return queueService.getMonitorInfo(); } }