Untitled

mail@pastecode.io avatar
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