package cn.lihu.jh.module.ecg.service.callingscreen; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.module.ecg.controller.admin.checktype.vo.CheckTypePageReqVO; import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO; 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.checktype.CheckTypeMapper; 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 java.util.stream.Collectors; /** * 排队 Service 实现类 * * @author 芋道源码 */ @Service @Validated @Slf4j public class CallingScreenServiceImpl implements CallingScreenService { @Resource private QueueMapper queueMapper; @Resource private RoomMapper roomMapper; @Resource private CheckTypeMapper checkTypeMapper; BigScreenConfig bigScreenConfig; Map mapCheckTypeVsDisplayColumn = null; Integer waitingFrom = 0; Integer passedFrom = 0; @Override public void setBigScreenConfig(BigScreenConfig bigScreenConfig) { this.bigScreenConfig = bigScreenConfig; } @Override public Map> getDisplayColInfo() { CheckTypePageReqVO checkTypePageReqVO = new CheckTypePageReqVO(); checkTypePageReqVO.setPageSize(-1); checkTypePageReqVO.setCallingColumn(-1); // 列号 -1 的不显示 PageResult pageResult = checkTypeMapper.selectPageForCallingScreen(checkTypePageReqVO); // 显示列 包含的检查类型列表 Map> mapDisplayColName = pageResult.getList().stream().collect(Collectors.groupingBy(CheckTypeDO::getCallingColumn)); // 检查类型 对应的显示列 mapCheckTypeVsDisplayColumn = pageResult.getList().stream().collect(Collectors.toMap(CheckTypeDO::getValue, item -> item.getCallingColumn())); // 显示列 对应的检查类型名列表 Map> _map = new HashMap<>(); mapDisplayColName.keySet().forEach(key -> { _map.put(key, mapDisplayColName.get(key).stream().map(item->item.getName()+item.getSeqPrefix()).toList()); }); return _map; } /** * 大屏显示的患者信息 * 不会有安装相关的患者信息 */ @Override public Map> getBigScreenPatient() { Map> mapDisplayColQueue = new HashMap<>(); int displayColCnt = (int) mapCheckTypeVsDisplayColumn.values().stream().distinct().count(); for (int dispCol=0; dispCol columnQueueData = new ArrayList<>(); mapDisplayColQueue.put(dispCol, columnQueueData); } mapDisplayColQueue.values().forEach(List::clear); List queueStatusList = new ArrayList<>(); queueStatusList.add(QueueStatusEnum.READY.getStatus()); queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus()); queueStatusList.add(QueueStatusEnum.WAITING.getStatus()); queueStatusList.add(QueueStatusEnum.RECALLED.getStatus()); queueStatusList.add(QueueStatusEnum.PASSED.getStatus()); queueStatusList.add(QueueStatusEnum.PASSED_WAITING.getStatus()); queueStatusList.add(QueueStatusEnum.AFFINITY.getStatus()); List queueDOList = queueMapper.getQueueByStatus( queueStatusList ); queueDOList.forEach(queueDO -> { List columnQueueData = mapDisplayColQueue.get(mapCheckTypeVsDisplayColumn.get(queueDO.getBookCheckType())); columnQueueData.add( queueDO ); }); mapDisplayColQueue.values().forEach( _queueDOList -> { //把 [亲和的] 挪到主项后面 List affinityWaitingList = new ArrayList<>(); ListIterator iterator = _queueDOList.listIterator(); while (iterator.hasNext()) { QueueDO item = iterator.next(); if (item.getStatus() == QueueStatusEnum.AFFINITY.getStatus()) { iterator.remove(); affinityWaitingList.add(item); } } affinityWaitingList.forEach( affinityWaitingItem -> { for (int i = _queueDOList.size()-1; i >= 0; i--) { if ( affinityWaitingItem.getSeqNum() == _queueDOList.get(i).getSeqNum() ) { _queueDOList.add(i + 1, affinityWaitingItem); break; } } }); }); return mapDisplayColQueue; } @Override public List getRoomCheckRelatedPatient(String ip, Long roomId) { if (null == roomId) { List roomDOList = roomMapper.queueByIp(ip); Optional optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst(); if (!optionalQueueDO.isPresent()) { return new ArrayList(); } roomId = optionalQueueDO.get().getRoomId(); } List queueStatusList = new ArrayList<>(); queueStatusList.add(QueueStatusEnum.RECALLED.getStatus()); queueStatusList.add(QueueStatusEnum.READY.getStatus()); queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus()); queueStatusList.add(QueueStatusEnum.PASSED.getStatus()); queueStatusList.add(QueueStatusEnum.AFFINITY.getStatus()); List queueDOList = queueMapper.getRoomQueueByStatus(roomId, queueStatusList); //把 [亲和的] 挪到主项后面 List affinityWaitingList = new ArrayList<>(); ListIterator iterator = queueDOList.listIterator(); while (iterator.hasNext()) { QueueDO item = iterator.next(); if (item.getStatus() == QueueStatusEnum.AFFINITY.getStatus()) { iterator.remove(); affinityWaitingList.add(item); } } affinityWaitingList.forEach( affinityWaitingItem -> { for (int i = queueDOList.size()-1; i >= 0; i--) { if ( affinityWaitingItem.getSeqNum() == queueDOList.get(i).getSeqNum() ) { queueDOList.add(i + 1, affinityWaitingItem); break; } } }); return queueDOList; } @Override public List getRoomInstallRelatedPatient(String ip, Long roomId) { if (null == roomId) { List roomDOList = roomMapper.queueByIp(ip); Optional optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst(); if (!optionalQueueDO.isPresent()) { return new ArrayList(); } roomId = optionalQueueDO.get().getRoomId(); } List queueStatusList = new ArrayList<>(); queueStatusList.add(QueueStatusEnum.RECEIVED.getStatus()); queueStatusList.add(QueueStatusEnum.PASSED_INSTALL.getStatus()); queueStatusList.add(QueueStatusEnum.AFFINITY_INSTALL.getStatus()); queueStatusList.add(QueueStatusEnum.INSTALLING.getStatus()); queueStatusList.add(QueueStatusEnum.RECALLED_INSTALL.getStatus()); List queueDOList = queueMapper.getRoomQueueByStatus(roomId, queueStatusList); //把 [亲和的] 挪到主项后面 List affinityReceivedList = new ArrayList<>(); ListIterator iterator = queueDOList.listIterator(); while (iterator.hasNext()) { QueueDO item = iterator.next(); if (item.getStatus() == QueueStatusEnum.AFFINITY_INSTALL.getStatus()) { iterator.remove(); affinityReceivedList.add(item); } } affinityReceivedList.forEach( affinityReceivedItem -> { for (int i = queueDOList.size()-1; i >= 0; i--) { if ( affinityReceivedItem.getSeqNum() == queueDOList.get(i).getSeqNum() ) { queueDOList.add(i + 1, affinityReceivedItem); break; } } }); return queueDOList; } }