package cn.lihu.jh.module.ecg.service.callingscreen; import cn.lihu.jh.framework.common.exception.ErrorCode; import cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO; import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper; import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.PATIENT_NOT_EXISTS; /** * 排队 Service 实现类 * * @author 芋道源码 */ @Service @Validated @Slf4j public class CallingScreenServiceImpl implements CallingScreenService { @Resource private queueMapper queueMapper; @Resource private RoomMapper roomMapper; BigScreenConfig bigScreenConfig; Integer waitingFrom = 0; Integer passedFrom = 0; @Override public void setBigScreenConfig(BigScreenConfig bigScreenConfig) { this.bigScreenConfig = bigScreenConfig; } @Override public Map> callingData() { List queueStatusList = new ArrayList<>(); queueStatusList.add(QueueStatusEnum.READY.getStatus()); queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus()); List listReady = queueMapper.getQueueByStatus( queueStatusList ); queueStatusList.clear(); queueStatusList.add(QueueStatusEnum.WAITING.getStatus()); queueStatusList.add(QueueStatusEnum.RECALLED.getStatus()); List listWaiting = queueMapper.getPartialQueueByStatus( queueStatusList, waitingFrom, bigScreenConfig.waitingSize ); if (listWaiting.size() < bigScreenConfig.waitingSize && waitingFrom != 0) { List listWaiting_next = queueMapper.getPartialQueueByStatus( queueStatusList, 0, bigScreenConfig.waitingSize - listWaiting.size()); listWaiting.addAll(listWaiting_next); } if (listWaiting.size() < bigScreenConfig.waitingSize) { waitingFrom = 0; } else { waitingFrom = listWaiting.getLast().getId(); } queueStatusList.clear(); queueStatusList.add(QueueStatusEnum.PASSED.getStatus()); List listPassed = queueMapper.getPartialQueueByStatus( queueStatusList, passedFrom, bigScreenConfig.passedSize ); if (listPassed.size() < bigScreenConfig.passedSize && passedFrom != 0) { List listPassed_next = queueMapper.getPartialQueueByStatus( queueStatusList, 0, bigScreenConfig.passedSize - listPassed.size()); listPassed.addAll(listPassed_next); } if (listPassed.size() < bigScreenConfig.passedSize) { passedFrom = 0; } else { passedFrom = listPassed.getLast().getId(); } log.info( " waitingFrom: {} passedFrom: {} ", waitingFrom, passedFrom); Map> map = new HashMap<>(); map.put(1, listReady); map.put(2, listWaiting); map.put(3, listPassed); return map; } @Override public List getRoomQueue(String ip, List statusList) { List roomDOList = roomMapper.queueByIp(ip); Optional optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst(); if (!optionalQueueDO.isPresent()) { return new ArrayList(); } Long roomId = optionalQueueDO.get().getRoomId(); List queueDOList = queueMapper.getRoomQueueByStatus(roomId, statusList); return queueDOList; } @Override public ErrorCode markCalled(String patientId) { Integer rowNum = queueMapper.markCalled(patientId); if (rowNum == 1) return GlobalErrorCodeConstants.SUCCESS; return PATIENT_NOT_EXISTS; } }