Untitled
unknown
plain_text
a year ago
12 kB
5
Indexable
Never
declare @StoreTaskLst table (PhysicalStoreID dbo.BIDENT not null, StoreTaskID dbo.BIDENT PRIMARY KEY, ConsigID dbo.BIDENT not null, PostingBatchID dbo.BIDENT not null, SortMethodID dbo.BIDENT not null, IsFreshSimpleSortMethod int null, PostingID dbo.BIDENT not null, ItemID dbo.BIDENT not null, CutOffTime datetime not null, STCount int not null, WithPackage smallint not null); declare @StoreTaskLstTMP table (PhysicalStoreID dbo.BIDENT not null, StoreTaskID dbo.BIDENT PRIMARY KEY, ConsigID dbo.BIDENT not null, PostingBatchID dbo.BIDENT not null, SortMethodID dbo.BIDENT not null, PostingID dbo.BIDENT not null, ItemID dbo.BIDENT not null, CutOffTime datetime not null, WithPackage smallint not null); --Хранение StoreTaskID кандидатов в очередь моно-консолидацию declare @StoreTaskQueue table (StoreTaskID dbo.BIDENT PRIMARY KEY); --Таблица для поиска уникальных заданий declare @StoreTaskSingle table (StoreTaskID dbo.BIDENT PRIMARY KEY, CutOffTime datetime not null, STCount int not null); declare @BatchIDs table (ID dbo.BIDENT null); declare @ConsigID dbo.BIDENT, @ConsigIDNew dbo.BIDENT, @StoreTaskID dbo.BIDENT, @StoreTaskIDNew dbo.BIDENT, @PostingID dbo.BIDENT, @PostingBatchID dbo.BIDENT, @ItemID dbo.BIDENT, @SourceStoreID dbo.BIDENT, @DestinationStoreID dbo.BIDENT, @SourcePhysicalStoreID dbo.BIDENT, @DestinationPhysicalStoreID dbo.BIDENT, @StorageAreaID dbo.BIDENT, @PhysicalStoreID dbo.BIDENT, @PostingBatchParentID dbo.BIDENT, @SortMethodID dbo.BIDENT, @IsSimpleSortMethod int = 0, @ConsigItemID dbo.BIDENT, @tSTID dbo.BIDENT, @ConsigComment varchar(255) = 'МОНО задание, объединены StoreTaskID: ', @CutOffTime datetime, @Qty int, @ID dbo.BIDENT, @ErrorMessage dbo.STRING = null, @ConsolidateCount int = 9, --определяет количество заданий для объединения @ConfigConsolidateCount int, --кол-во задания для объединения из конфига @StoreTaskMONOEnable int = 0, --по умолчанию консолидация выключена, если не включена в настройках. @ConsolidationCount_PhysicalStoreAttributeTypeID dbo.BIDENT = 26, --Лимит ПВЗ-постингов для моно-консолидации @PhysicalStoreType_PhysicalStoreAttributeTypeID dbo.BIDENT = 23, --Тип склада (1 - DS, 2 - РЦ, 3 - Мини) @ConfigConsolidationInterval int = 15, --значение по умолчанию для интервала консолидации @PhysicalStoreConsolidationInterval int, --Интервал консолидации ПВЗ-постингов для моно-консолидации для данного склада @Moment datetime = getdate(), @ItemIdPackage dbo.BIDENT, @QtyPackage int, @OldQtyPackage int, @Priority int = 0, @SortPriority int = 0, @ExecutionMinute int, @WithPackage smallint; --[EWMS-3289] Сохраняем текущую минуту выполнения задания (в рамках дня) select @ExecutionMinute = datepart(minute,@Moment) + datepart(hour,@Moment)*60; --проверяем включена ли МОНО сортировка set @StoreTaskMONOEnable = (select try_cast(Value as int) from dbo.SysConfig sc where sc.Name = 'StoreTaskMONOEnable') if isnull(@StoreTaskMONOEnable,0)!=1 begin select 'Настройка StoreTaskMONOEnable в dbo.SysConfig !=1, МОНО сортировка выключена'; select 0; end; --проверяем есть ли в настройках другое число для обозначения количества заданий на консолидацию if (select top (1) sc.[Value] from dbo.SysConfig sc where sc.Name = 'StoreTaskForMONOCount') is not null begin begin try set @ConfigConsolidateCount = (select cast([Value] as int) from dbo.SysConfig sc where sc.Name = 'StoreTaskForMONOCount') set @ConsolidateCount = @ConfigConsolidateCount; end try begin catch select 'Ошибка получения значения из dbo.SysConfig : '+ ERROR_MESSAGE() AS ErrorMessage; end catch; end; --Установка интервала консолидации по умолчанию set @ConfigConsolidationInterval = (select cast([Value] as int) from dbo.SysConfig sc where sc.Name = 'DefaultMonoPVSConsolidationInterval') set @PhysicalStoreConsolidationInterval = @ConfigConsolidationInterval; --формируем список на консолидацию insert into @StoreTaskLst ( PhysicalStoreID, StoreTaskID, ConsigID, PostingBatchID, SortMethodID, IsFreshSimpleSortMethod, PostingID, ItemID, CutOffTime, STCount, WithPackage ) select st.PhysicalStoreID, st.ID, st.ConsigID, pb.ID, pb.SortMethodID, case when SM.FreshSimple = 1 and PSF.Enabled = 1 --[EWMS-3289] Гибридный режим выкатки then 1 else 0 end as IsFreshSimpleSortMethod, pib.PostingID, ci.ItemID, pb.CutOffTime, count(1) over (partition by st.PhysicalStoreID,pb.CutOffTime,pb.SortMethodID,SM.FreshSimple,PSF.Enabled , case when exists( select 1 from StoreTaskItem sti1 join dbo.ExpressItemInPackage eiip on eiip.ItemID = sti1.ItemID where sti1.StoreTaskID = st.ID ) and pd.[Enabled] = 1 then 1 else 0 end) as [STCount], case when exists( select 1 from StoreTaskItem sti1 join dbo.ExpressItemInPackage eiip on eiip.ItemID = sti1.ItemID where sti1.StoreTaskID = st.ID ) and pd.[Enabled] = 1 then 1 else 0 end as [WithPackage] from dbo.StoreTask st inner join dbo.StoreTaskMONOPhysicalStore stmps on stmps.PhysicalStoreID = st.PhysicalStoreID inner join dbo.ConsigItem ci on ci.ConsigID = st.ConsigID inner join dbo.PostingBatch pb on pb.ID=st.PostingBatchID inner join dbo.PostingInPostingBatch pib on pib.PostingBatchID = pb.ID inner join dbo.SortMethod SM on sm.ID = pb.SortMethodID left join dbo.GetFeatureForPhysicalStoreTable('EnableMonoPVZInvervalConsolidationLogic') PSF --[EWMS-3289] Гибридный режим on PSF.PhysicalStoreID = st.PhysicalStoreID left join dbo.GetFeatureForPhysicalStoreTable('PackingDisable2') pd on pd.PhysicalStoreID = st.PhysicalStoreID where exists( select 1 from dbo.StoreTaskItem STI where STI.StoreTaskID = ST.ID and not exists (select 1 from dbo.ExpressItemInPackage EEINE where EEINE.ItemID = STI.ItemID) --Исключаем пакеты (ExpressItemInPackage) group by STI.StoreTaskID having count(STI.ItemID) = 1 and sum(STI.Qty) = 1 --где только 1 sku и только 1 экземпляр ) --[EWMS-3328] StoreTaskStatusID соответствует StoreTaskTypeID=1 - Подбор and (st.StoreTaskStatusID = 1 --в статусе "Сформировано", то есть ещё не назначено кладовщику --[EWMS-3107] или в статусе "передано в подбор", но находящиеся в таблице очереди на моно-консолидацию or ( st.StoreTaskStatusID = 2 and st.BTUserID is null and --задание не назначено на кладовщика exists(select 1 from dbo.StoreTaskMONOQueue STMQ where STMQ.StoreTaskID = ST.ID) ) ) and not exists (select 1 from dbo.StoreTaskMONO where StoreTaskID = st.ID)--если задание уже было в логе, значит мы его консолидировали и брать заново его не нужно and not exists (select 1 from dbo.ExpressItemInPackage EEINE where EEINE.ItemID = CI.ItemID) --Исключаем пакеты (ExpressItemInPackage) and ((SM.FreshDay2Day = 1 and SM.Name = 'ФРЕШ ДЕНЬ В ДЕНЬ') or (SM.FreshSimple = 1 and SM.Name = 'ФРЕШ ОБЫЧНЫЙ'))--проверка метода сортировки and exists( select 1 from dbo.Consig c where c.ID = st.ConsigID and c.ConsigStatusID = 5)--проверка на то, что накладная в статусе формируется (может лишняя проверка) and st.PhysicalStoreID in ( select ps.ID from dbo.PhysicalStore ps inner JOIN dbo.PhysicalStoreAttribute psa ON psa.PhysicalStoreID = ps.id AND psa.PhysicalStoreAttributeTypeID = @PhysicalStoreType_PhysicalStoreAttributeTypeID AND psa.Value = '1' )--DS and pb.CutOffTime is not null; --[EWMS-3454] не берём батчи с пустым катофом --убираем задания которые уникальны по складу и катофф, так как их не с чем объединять --Но не удаляем FreshSimple, они нужны для накопления delete from @StoreTaskLst where STCount = 1 and IsFreshSimpleSortMethod = 0 select * from @StoreTaskLst