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<Integer, Integer> mapCheckTypeVsDisplayColumn = null;
|
|
Integer waitingFrom = 0;
|
Integer passedFrom = 0;
|
|
@Override
|
public void setBigScreenConfig(BigScreenConfig bigScreenConfig) {
|
this.bigScreenConfig = bigScreenConfig;
|
}
|
|
|
@Override
|
public Map<Integer, List<String>> getDisplayColInfo() {
|
CheckTypePageReqVO checkTypePageReqVO = new CheckTypePageReqVO();
|
checkTypePageReqVO.setPageSize(-1);
|
checkTypePageReqVO.setCallingColumn(-1); // 列号 -1 的不显示
|
PageResult<CheckTypeDO> pageResult = checkTypeMapper.selectPageForCallingScreen(checkTypePageReqVO);
|
|
// 显示列 包含的检查类型列表
|
Map<Integer, List<CheckTypeDO>> mapDisplayColName = pageResult.getList().stream().collect(Collectors.groupingBy(CheckTypeDO::getCallingColumn));
|
|
// 检查类型 对应的显示列
|
mapCheckTypeVsDisplayColumn = pageResult.getList().stream().collect(Collectors.toMap(CheckTypeDO::getValue, item -> item.getCallingColumn()));
|
|
// 显示列 对应的检查类型名列表
|
Map<Integer, List<String>> _map = new HashMap<>();
|
mapDisplayColName.keySet().forEach(key -> {
|
_map.put(key, mapDisplayColName.get(key).stream().map(item->item.getName()).toList());
|
});
|
return _map;
|
}
|
|
/**
|
* 大屏显示的患者信息
|
* 不会有安装相关的患者信息
|
*/
|
@Override
|
public Map<Integer, List<QueueDO>> getBigScreenPatient() {
|
Map<Integer, List<QueueDO>> mapDisplayColQueue = new HashMap<>();
|
int displayColCnt = (int) mapCheckTypeVsDisplayColumn.values().stream().distinct().count();
|
for (int dispCol=0; dispCol<displayColCnt; dispCol++) {
|
List<QueueDO> columnQueueData = new ArrayList<>();
|
mapDisplayColQueue.put(dispCol, columnQueueData);
|
}
|
|
mapDisplayColQueue.values().forEach(List::clear);
|
|
List<Integer> 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<QueueDO> queueDOList = queueMapper.getQueueByStatus( queueStatusList );
|
queueDOList.forEach(queueDO -> {
|
List<QueueDO> columnQueueData = mapDisplayColQueue.get(mapCheckTypeVsDisplayColumn.get(queueDO.getBookCheckType()));
|
columnQueueData.add( queueDO );
|
});
|
|
return mapDisplayColQueue;
|
}
|
|
@Override
|
public List<QueueDO> getRoomCheckRelatedPatient(String ip) {
|
List<RoomDO> roomDOList = roomMapper.queueByIp(ip);
|
Optional<RoomDO> optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst();
|
if (!optionalQueueDO.isPresent()) {
|
return new ArrayList<QueueDO>();
|
}
|
|
Long roomId = optionalQueueDO.get().getRoomId();
|
List<Integer> 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<QueueDO> queueDOList = queueMapper.getRoomQueueByStatus(roomId, queueStatusList);
|
|
//把 [亲和的] 挪到主项后面
|
List<QueueDO> affinityWaitingList = new ArrayList<>();
|
ListIterator<QueueDO> 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<QueueDO> getRoomInstallRelatedPatient(String ip) {
|
List<RoomDO> roomDOList = roomMapper.queueByIp(ip);
|
Optional<RoomDO> optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst();
|
if (!optionalQueueDO.isPresent()) {
|
return new ArrayList<QueueDO>();
|
}
|
|
Long roomId = optionalQueueDO.get().getRoomId();
|
List<Integer> 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<QueueDO> queueDOList = queueMapper.getRoomQueueByStatus(roomId, queueStatusList);
|
|
//把 [亲和的] 挪到主项后面
|
List<QueueDO> affinityReceivedList = new ArrayList<>();
|
ListIterator<QueueDO> 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;
|
}
|
|
}
|