У меня есть таблица с именем tblTokenQueue , как показано ниже
CouponNo Status Sequence
A101 Completed 1
A102 Completed 2
A103 Completed 3
A104 Serving 4
A105 Pending 5
A106 Pending 6
A107 Pending 7
A108 Pending 8
A109 Pending 9
A110 Pending 10
A111 Pending 11
A112 Pending 12
A113 Pending 13
A114 Pending 14
A115 Pending 15
У меня есть случай, когда токены могут быть приостановлены.Больница сообщает, что когда мы возобновляем токены удержания, их следует размещать после 3 токенов от текущего токена.В нашем примере допустим, что A105 и A106 приостановлены.Я назначу последовательность -99 для всех жетонов удержания.Тогда таблица становится
CouponNo Status Sequence
A101 Completed 1
A102 Completed 2
A103 Completed 3
A104 Serving 4
A105 Hold -99
A106 Hold -99
A107 Pending 5
A108 Pending 6
A109 Pending 7
A110 Pending 8
A111 Pending 9
A112 Pending 10
A113 Pending 11
A114 Pending 12
A115 Pending 13
И когда мы возобновим оба, я хочу таблицу как ниже.Это означает, что возобновленные токены должны быть размещены после 3 токенов текущего токена.
CouponNo Status Sequence
A101 Completed 1
A102 Completed 2
A103 Completed 3
A104 Serving 4
**A105 Pending 8**
**A106 Pending 9**
A107 Pending 5
A108 Pending 6
A109 Pending 7
A110 Pending 10
A111 Pending 11
A112 Pending 12
A113 Pending 13
A114 Pending 14
A115 Pending 15
Когда мы держим токен и возобновляем работу, могут возникнуть следующие условия
- Обслужен один клиент.в приведенном выше примере его A104 и токен A105 возобновляются.
- Допустим, в настоящий момент обслуживается токен A105, и я поставил его на удержание.Следующий токен - A106, и я тоже остановил его.И сразу же я хочу возобновить A105 в ожидании, не обслуживая ни одного другого.В этом случае никто не получает "обслужен"
- Токен A101 является первым токеном, и я поставил его на удержание и хочу возобновить.на этом этапе никто не получает обслуженных и не завершенных токенов.
- Теперь допустим, что токен A114 находится в режиме ожидания (согласно нашему примеру выше) и хочет возобновить.После него остался только один жетон.Поэтому нет смысла добавлять 3 к его порядковому номеру.
Я создал две процедуры
для удержания токена
create procedure TokenHoldProc(@TokenNo varchar(10))
as
begin
update tblTokenQueue set TokenSequence='-99',TokenStatus='Hold' where TokenNo=@TokenNo
end
для возобновления токена
create procedure TokenResumeProc(@TokenNo varchar(10),@TokenPushCount int)
as
begin
declare @ServingPosition int
select @ServingPosition=TokenSequence from tblTokenQueue where TokenStatus='Serving'
if (@ServingPosition is null) --if no one is getting served at present
begin
select @ServingPosition=TokenSequence from tblTokenQueue where TokenStatus='Completed'
if (@ServingPosition is null) --if its the first token
update tblTokenQueue set TokenSequence = 1 where TokenNo=@TokenNo;
else
begin
update tblTokenQueue set TokenSequence = TokenSequence + 1 where TokenSequence >=@ServingPosition+(@TokenPushCount+1);
update tblTokenQueue set TokenSequence = @ServingPosition+(@TokenPushCount+1),TokenStatus='Pending' where TokenNo=@TokenNo;
end
end
else
begin
update tblTokenQueue set TokenSequence = TokenSequence + 1 where TokenSequence >=@ServingPosition+(@TokenPushCount+1);
update tblTokenQueue set TokenSequence = @ServingPosition+(@TokenPushCount+1),TokenStatus='Pending' where TokenNo=@TokenNo;
end
end
В соответствии с этими процедурами будут выполнены первые 3 случая.Но есть 2 вопроса
- номер дела 4.
- Если я хочу возобновить 2 маркера удержания один за другим, он сгенерирует одинаковый номер последовательности для обоих
Любая помощь будет высоко ценится.