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<Integer, List<QueueDO>> callingData() {
|
List<Byte> queueStatusList = new ArrayList<>();
|
queueStatusList.add(QueueStatusEnum.READY.getStatus());
|
queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
|
List<QueueDO> listReady = queueMapper.getQueueByStatus( queueStatusList );
|
|
queueStatusList.clear();
|
queueStatusList.add(QueueStatusEnum.WAITING.getStatus());
|
queueStatusList.add(QueueStatusEnum.RECALLED.getStatus());
|
List<QueueDO> listWaiting = queueMapper.getPartialQueueByStatus( queueStatusList, waitingFrom, bigScreenConfig.waitingSize );
|
if (listWaiting.size() < bigScreenConfig.waitingSize && waitingFrom != 0) {
|
List<QueueDO> 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() + 1;
|
}
|
|
queueStatusList.clear();
|
queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
|
List<QueueDO> listPassed = queueMapper.getPartialQueueByStatus( queueStatusList, passedFrom, bigScreenConfig.passedSize );
|
if (listPassed.size() < bigScreenConfig.passedSize && passedFrom != 0) {
|
List<QueueDO> 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<Integer, List<QueueDO>> map = new HashMap<>();
|
map.put(1, listReady);
|
map.put(2, listWaiting);
|
map.put(3, listPassed);
|
return map;
|
}
|
|
@Override
|
public List<QueueDO> getRoomQueue(String ip, List<Byte> statusList) {
|
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<QueueDO> 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;
|
}
|
|
}
|