From 925024a1ed984f8eea5a0db4c7f69e070bd8618c Mon Sep 17 00:00:00 2001 From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com> Date: 星期四, 10 十月 2024 15:43:43 +0800 Subject: [PATCH] 添加批量维护班次信息功能 --- _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def | 164 ++++++++++++++++---------- _Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl | 43 +++++++ _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def | 39 ++++++ _Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl | 3 _Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl | 70 +++++++++++ 5 files changed, 254 insertions(+), 65 deletions(-) diff --git a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl index da1f73a..1de3a99 100644 --- a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl +++ b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl @@ -22,6 +22,9 @@ shiftSchedulingInformation3 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 ); shiftSchedulingInformation3.SingleShiftName( "3鐝�" ); shiftSchedulingInformations.Add( shiftSchedulingInformation3 ); + }else{ + shiftSchedulingInformation := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume ); + shiftSchedulingInformations.Add( shiftSchedulingInformation ); } diff --git a/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl new file mode 100644 index 0000000..c4d476f --- /dev/null +++ b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl @@ -0,0 +1,43 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod BatchSetUnitShiftPattern ( + Unit unit, + ShiftPattern shiftPattern, + Date startDate, + Date endDate, + Numbers weekdays +) +{ + TextBody: + [* + // Akari Oct-10-2024 (created) + owner := unit.MacroPlan(); + dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, + period_MP.TimeUnit() = 'Day' and + period_MP.StartDate() >= startDate and + period_MP.EndDate() <= endDate and exists( weekdays, Elements,dayOfWeek,dayOfWeek = period_MP.StartDate().DayOfWeek() ) ,period_MP.StartDate()); + weekPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, + period_MP.TimeUnit() = 'Week' and + period_MP.StartDate() >= startDate and + period_MP.EndDate() <= endDate and exists( weekdays, Elements,dayOfWeek,dayOfWeek = period_MP.StartDate().DayOfWeek() ),period_MP.StartDate()); + traverse( dayPeriod_MPs ,Elements,element ){ + info( element.StartDate().DayOfWeek() ); + } + + if( dayPeriod_MPs.Size() > 0 ){ + unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( dayPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability())); + if( unitPeriodTimes.Size() > 0 ){ + LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern ); + } + + } + if( weekPeriod_MPs.Size() <> 0 ){ + traverse( weekPeriod_MPs,Elements,period_MP ){ + unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability())); + if( unitPeriodTimes.Size() > 0 ){ + LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern ); + } + } + } + *] +} diff --git a/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl b/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl new file mode 100644 index 0000000..92b0e44 --- /dev/null +++ b/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl @@ -0,0 +1,70 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod SetUnitShiftPattern ( + MacroPlan macroPlan, + UnitPeriodTimes unitPeriodTimes, + ShiftPattern shiftPattern +) +{ + TextBody: + [* + // Akari Oct-10-2024 (created) + firstElement := minselect( unitPeriodTimes, Elements, e, true, e.Start() ); + + start := macroPlan.Start(); + timeunit := macroPlan.StartOfPlanningPeriod().TimeUnit(); + maintenance := Duration::Zero(); + efficiency := 1.0; + allocation := 1.0; + + maxloadpercentage := macroPlan.GlobalParameters_MP().DefaultMaxLoadPercentage(); + nrofunitopen := 1; + minloadthreshold := 0.0; + + if( not isnull( firstElement ) ){ + // To inherit the value from last unit availability while creating a new unit availability + unitavailability := firstElement.UnitAvailability(); + start := firstElement.Start(); + + if( not isnull( unitavailability ) ){ + timeunit := unitavailability.TimeUnit(); + maintenance := unitavailability.Maintenance(); + efficiency := unitavailability.Efficiency(); + allocation := unitavailability.Allocation(); + + maxloadpercentage := unitavailability.MaximumLoadPercentage(); + nrofunitopen := unitavailability.NrOfUnitsOpen(); + minloadthreshold := unitavailability.MinimumLoadThreshold(); + }else{ + timeunit := firstElement.Period_MP().TimeUnit(); + maintenance := firstElement.Maintenance(); + efficiency := firstElement.Efficiency(); + allocation := firstElement.Allocation(); + + maxloadpercentage := firstElement.MaximumLoadPercentage(); + nrofunitopen := firstElement.NrOfOpen(); + minloadthreshold := firstElement.MinimumLoadThreshold(); + } + } + + isbatchedit := unitPeriodTimes.Size() > 1; + UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes, + not isbatchedit or false, + timeunit, + maintenance, + not isbatchedit or false, + efficiency, + false, + allocation, + not isbatchedit or true, + shiftPattern, + not isbatchedit or false, + maxloadpercentage, + not isbatchedit or false, + nrofunitopen, + false, + not isbatchedit or false, + minloadthreshold + ); + *] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def index 8538493..3731f86 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def @@ -5,69 +5,6 @@ BaseType: 'WebPanel' Children: [ - Component cbMonday - { - #keys: '[414996.1.116589495]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 3 - ] - } - Component cbTuesday - { - #keys: '[414996.1.116589517]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 4 - ] - } - Component cbWednesday - { - #keys: '[414996.1.116589519]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 5 - ] - } - Component cbThursday - { - #keys: '[414996.1.116589521]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 6 - ] - } - Component cbFriday - { - #keys: '[414996.1.116589523]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 7 - ] - } - Component cbSaturday - { - #keys: '[414996.1.116589525]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 8 - ] - } - Component cbSunday - { - #keys: '[414996.1.116589527]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 9 - ] - } Component dsStartDate { #keys: '[414996.1.116589712]' @@ -75,7 +12,7 @@ Properties: [ Label: 'Start' - Taborder: 1 + Taborder: 2 ] } Component dsEndDate @@ -85,7 +22,7 @@ Properties: [ Label: 'End' - Taborder: 2 + Taborder: 3 ] } Component LabelSelectUnit @@ -105,6 +42,103 @@ Properties: [ Label: 'Apply' + Taborder: 11 + ] + } + Component ddlShiftPattern + { + #keys: '[414996.1.116430349]' + BaseType: 'WebDropDownList' + Databinding: 'ShiftPattern' + Children: + [ + Component deContent710 id:deContent710_593 + { + #keys: '[414996.1.116430350]' + BaseType: 'WebDataExtractor' + Properties: + [ + DataType: 'MacroPlan' + Source: 'MacroPlan' + Taborder: 0 + Transformation: 'ShiftPattern' + ] + } + ] + Properties: + [ + DisplayField: 'Name' + Label: 'Shift pattern 1' + Taborder: 1 + ] + } + Component cbMonday + { + #keys: '[414996.1.117120493]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Monday' + Taborder: 4 + ] + } + Component cbTuesday + { + #keys: '[414996.1.117120516]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Tuesday' + Taborder: 5 + ] + } + Component cbWednesday + { + #keys: '[414996.1.117120539]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Wednesday' + Taborder: 6 + ] + } + Component cbThursday + { + #keys: '[414996.1.117120576]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Thursday' + Taborder: 7 + ] + } + Component cbFriday + { + #keys: '[414996.1.117120599]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Friday' + Taborder: 8 + ] + } + Component cbSaturday id:cbSaturday_682 + { + #keys: '[414996.1.117120636]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Saturday' + Taborder: 9 + ] + } + Component cbSunday + { + #keys: '[414996.1.117120659]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Sunday' Taborder: 10 ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def new file mode 100644 index 0000000..1a2c721 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def @@ -0,0 +1,39 @@ +Quintiq file version 2.0 +#parent: PanelRight/bApply +Response OnClick () id:Response_PanelRight_bApply_OnClick +{ + #keys: '[414996.1.117189721]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebButton_OnClick' + GroupServerCalls: true + QuillAction + { + Body: + [* + weekdays := construct( Numbers ); + if( cbMonday.Checked() ){ + weekdays.Add( 1 ); + } + if( cbTuesday.Checked() ){ + weekdays.Add( 2 ); + } + if( cbWednesday.Checked() ){ + weekdays.Add( 3 ); + } + if( cbThursday.Checked() ){ + weekdays.Add( 4 ); + } + if( cbFriday.Checked() ){ + weekdays.Add( 5 ); + } + if( cbSaturday.Checked() ){ + weekdays.Add( 6 ); + } + if( cbSunday.Checked() ){ + weekdays.Add( 7 ); + } + LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date(),weekdays ); + WebMessageBox::Success( "Success"); + *] + } +} -- Gitblit v1.9.3