From 42bc9d737ef67ac298062a01854b0faa438c84ac Mon Sep 17 00:00:00 2001 From: limj <limj@taizhitech.com> Date: 星期二, 26 九月 2023 23:27:20 +0800 Subject: [PATCH] 优先级因子计算 --- _Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl | 72 ++++++++ _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def | 2 _Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl | 8 _Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl | 7 _Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl | 7 _Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl | 8 _Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl | 18 ++ _Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl | 49 ++++- _Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl | 8 _Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl | 8 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def | 8 _Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl | 3 _Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl | 8 _Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl | 46 +++++ _Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl | 7 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def | 4 _Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl | 6 _Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl | 88 +++++++++ _Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl | 8 _Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl | 8 _Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl | 7 _Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl | 79 ++++++++ _Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl | 24 ++ _Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl | 3 _Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl | 7 _Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def | 3 _Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl | 8 27 files changed, 483 insertions(+), 21 deletions(-) diff --git a/_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl b/_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl new file mode 100644 index 0000000..ea0a67e --- /dev/null +++ b/_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl @@ -0,0 +1,6 @@ +Quintiq file version 2.0 +#root +#parent: #root +KnowledgeBase Knowledge_MP #extension +{ +} diff --git a/_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl b/_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl index f82bfcb..afab52f 100644 --- a/_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl +++ b/_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl @@ -21,6 +21,9 @@ // 濡傛灉涓嶅瓨鍦ㄥ垯娣诲姞 if( not checkExist ){ owner.BusinessType(relnew,BusinessTypeName := businessName); + + // 鍒濆鍖栦紭鍏堢骇鍥犲瓙鏁版嵁 + PriorityFactor::InitData( macroPlan,businessName); } *] } diff --git a/_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl new file mode 100644 index 0000000..19d7605 --- /dev/null +++ b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute CustomerOrderID +{ + #keys: '3[414382.0.554303146][414382.0.554303145][414382.0.554303147]' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl new file mode 100644 index 0000000..d3d12e5 --- /dev/null +++ b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute ForecastID +{ + #keys: '3[414382.0.554303156][414382.0.554303155][414382.0.554303157]' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl new file mode 100644 index 0000000..f3c1564 --- /dev/null +++ b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl @@ -0,0 +1,46 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod RefreshData ( + MacroPlan owner, + GlobalOTDTable globalOTDTable +) +{ + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + // 鑾峰彇宸茬粡瀛樺湪 customerOrderID 鍜宖orecastID + customerOrderIDs := selectvalues( owner,CustomerAndForecastOrder,c, + c.CustomerOrderID() <> '', + c.CustomerID() + ); + + forecastIDs := selectvalues( owner,CustomerAndForecastOrder,c, + c.ForecastID() <> '', + c.ForecastID() + ); + + + // 浠庢暟鎹箹 Global_MappingCustomerOrder Global_MappingForecast 涓幏鍙栨柊鐨勮鍗曟暟鎹� + + traverse( globalOTDTable,Global_MappingCustomOrder,cus) + { + if(customerOrderIDs.Find( cus.ID()) = -1 ) + { + owner.CustomerAndForecastOrder(relnew,OrderID := cus.OrderID(),ProductID := cus.ProductID(),BusinessType := cus.BusinessType(),Customer := cus.Customer(),CustomerID := cus.CustomerID(), + Quantity := cus.Quantity(),UnitOfMeasureName := cus.UnitOfMeasureName(),DemandDate := cus.OrderDate() + ); + } + } + + traverse( globalOTDTable,Global_MappingForecast,forecast) + { + if(forecastIDs.Find( forecast.ID()) = -1 ) + { + owner.CustomerAndForecastOrder(relnew,ProductID := forecast.ProductID(),BusinessType := forecast.BusinessType(), + Quantity := forecast.Quantity(),UnitOfMeasureName := forecast.UnitOfMeasureName(),DemandDate := forecast.EndDate() + ); + } + } + *] +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl b/_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl new file mode 100644 index 0000000..a39b026 --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute BusinessType +{ + #keys: '3[414382.0.554303217][414382.0.554303216][414382.0.554303218]' + Description: '浜嬩笟閮�' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl b/_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl new file mode 100644 index 0000000..6647d7a --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute CustomerPolicy +{ + #keys: '3[414382.0.554014841][414382.0.554014840][414382.0.554014842]' + Description: '瀹㈡埛绛栫暐' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl b/_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl new file mode 100644 index 0000000..1a6ca55 --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute IsAvailable +{ + #keys: '3[414382.0.554303237][414382.0.554303236][414382.0.554303238]' + Description: '璁㈠崟鏄惁鍙備笌璁″垝' + ValueType: Boolean +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl b/_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl new file mode 100644 index 0000000..e89a41d --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute OrderTime +{ + #keys: '3[414382.0.554303277][414382.0.554303276][414382.0.554303278]' + Description: '璁㈠崟涓嬪崟鏃堕棿' + ValueType: Date +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl b/_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl new file mode 100644 index 0000000..4efd905 --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute OrderType +{ + #keys: '3[414382.0.554303227][414382.0.554303226][414382.0.554303228]' + Description: '璁㈠崟绫诲瀷' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl b/_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl new file mode 100644 index 0000000..76e256b --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute ProductGrade +{ + #keys: '3[414382.0.554303247][414382.0.554303246][414382.0.554303248]' + Description: '浜у搧绛夌骇' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl b/_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl new file mode 100644 index 0000000..6f488d6 --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute SegmentPriority +{ + #keys: '3[414382.0.554303257][414382.0.554303256][414382.0.554303258]' + Description: '缁嗗垎甯傚満浼樺厛绾�' + ValueType: String +} diff --git a/_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl b/_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl new file mode 100644 index 0000000..726b8ab --- /dev/null +++ b/_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl @@ -0,0 +1,8 @@ +Quintiq file version 2.0 +#parent: #root +Attribute SheetProfitability +{ + #keys: '3[414382.0.554303267][414382.0.554303266][414382.0.554303268]' + Description: '澶у紶鐩堝埄姘村钩' + ValueType: String +} diff --git a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl index e0aa42b..3f0ea88 100644 --- a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl +++ b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl @@ -34,8 +34,7 @@ salesSegmentName := salesSegmentNameList.Concatenate( ",") schemeDate := Date::Today(); - - filllingCapacityOrderScheme := owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID, + owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID, SalesSegmentName := salesSegmentName); diff --git a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl new file mode 100644 index 0000000..3f5a69d --- /dev/null +++ b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute ReflectionAttribute +{ + #keys: '3[414382.0.554303396][414382.0.554303395][414382.0.554303397]' + ValueType: String +} diff --git a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl new file mode 100644 index 0000000..49b163b --- /dev/null +++ b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute ReflectionType +{ + #keys: '3[414382.0.554014806][414382.0.554014805][414382.0.554014807]' + ValueType: String +} diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl index c6c69c4..01917f6 100644 --- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl +++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl @@ -15,15 +15,46 @@ isBusinessType := true; } - priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5, + if( priorityFactor.Name() = "澶у紶鐩堝埄姘村钩" ) + { + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5, IsRange := false,GradingName := "澶х泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); - priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3, - IsRange := false,GradingName := "灏忕泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); - priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0, - IsRange := false,GradingName := "鎸佸钩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); - priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3, - IsRange := false,GradingName := "灏忎簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); - priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5, - IsRange := false,GradingName := "澶т簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3, + IsRange := false,GradingName := "灏忕泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0, + IsRange := false,GradingName := "鎸佸钩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3, + IsRange := false,GradingName := "灏忎簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5, + IsRange := false,GradingName := "澶т簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + } + + if( priorityFactor.Name() = "瀹㈡埛绛栫暐" ) + { + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5, + IsRange := false,GradingName := "81%鈮鈮�100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4, + IsRange := false,GradingName := "61%鈮鈮�80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3, + IsRange := false,GradingName := "41%鈮鈮�60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2, + IsRange := false,GradingName := "21%鈮鈮�40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1, + IsRange := false,GradingName := "1%鈮鈮�20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + } + + if( priorityFactor.Name() = "瀹㈡埛绛夌骇" ) + { + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5, + IsRange := false,GradingName := "81%鈮鈮�100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4, + IsRange := false,GradingName := "61%鈮鈮�80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3, + IsRange := false,GradingName := "41%鈮鈮�60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2, + IsRange := false,GradingName := "21%鈮鈮�40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1, + IsRange := false,GradingName := "1%鈮鈮�20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name()); + } *] } diff --git a/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl b/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl new file mode 100644 index 0000000..f65a510 --- /dev/null +++ b/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute CustomerOrderID +{ + #keys: '3[414382.0.554015006][414382.0.554015005][414382.0.554015007]' + ValueType: String +} diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl new file mode 100644 index 0000000..90f1891 --- /dev/null +++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl @@ -0,0 +1,18 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod CalculateBracketScore ( + String calcStr, + CustomerOrder customerOrder, + String businessType, + MacroPlan macroPlan +) as Real +{ + Description: '璁$畻鍏紡涓嫭鍙峰唴鐨勬暟鎹�' + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + + return PriorityResult::CalculateScore( calcStr,customerOrder,businessType,macroPlan,0.0); + *] +} diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl new file mode 100644 index 0000000..22b6924 --- /dev/null +++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl @@ -0,0 +1,88 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod CalculateScore ( + String formula, + CustomerOrder customerOrder, + String businessType, + MacroPlan macroPlan, + Real lastScore +) as Real +{ + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + score := 0.0; + remindFormula := formula; + + // 閬嶅巻浼樺厛绾у洜瀛愰厤缃� + + if( not remindFormula = '' ) + { + // 浠庤捣濮嬩綅缃紑濮嬪尮閰� + if(remindFormula.StartsWith( "+" )) + { + remindFormula := remindFormula.SubString( 1,remindFormula.Length()); + score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan); + score := lastScore + score; + + // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻 + remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan); + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score); + } + else if( remindFormula.StartsWith( "-" )) + { + remindFormula := remindFormula.SubString( 1,remindFormula.Length()); + score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan); + score := lastScore - score; + + // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻 + remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan); + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score); + } + else if( remindFormula.StartsWith( "*" ) ) + { + remindFormula := remindFormula.SubString( 1,remindFormula.Length()); + score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan); + score := lastScore * score; + + // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻 + remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan); + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score); + } + else if( remindFormula.StartsWith( "/" ) ) + { + remindFormula := remindFormula.SubString( 1,remindFormula.Length()); + score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan); + score := lastScore / score; + + // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻 + remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan); + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score); + } + else if( remindFormula.StartsWith( "(" ) ) + { + // 鎵惧埌绗竴涓粨鏉熺殑 ) + // 璁$畻鎷彿涓殑鍐呭 + rightBracket := remindFormula.FindString( ")",0); + calcStr := remindFormula.SubString( 1,rightBracket); + PriorityResult::CalculateBracketScore(calcStr,customerOrder,businessType,macroPlan); + + // 鎴彇 ) 鍚庣殑瀛楃缁х画杩涜璁$畻 + remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()); + } + else + { + // 涓嶆槸绗﹀彿 鐩存帴鑾峰彇璁$畻鍚庣殑鏁板�� + score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan); + + // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻 + remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan); + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score); + } + } + + // 娌℃湁鍖归厤 鍏紡璁$畻瀹屾垚 + return lastScore; + *] +} diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl new file mode 100644 index 0000000..ba8486e --- /dev/null +++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl @@ -0,0 +1,79 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod GetDetailsValue ( + CustomerOrder customerOrder, + String formula, + MacroPlan macroPlan +) as Real +{ + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + value := 0.0; + + priorityFactor := null( PriorityFactor); + + traverse( macroPlan,PriorityFactor,p) + { + if( formula.StartsWith( p.Name()) ) + { + priorityFactor := p; + } + } + + if( "瀹㈡埛绛栫暐" = priorityFactor.Name()) + { + obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "瀹㈡埛绛栫暐" and p.GradingName() = customerOrder.CustomerPolicy()); + value := priorityFactor.Coefficient() * obj.GradeTarget(); + } + + if( "澶у紶鐩堝埄姘村钩" = priorityFactor.Name()) + { + obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "澶у紶鐩堝埄姘村钩" and p.GradingName() = customerOrder.SheetProfitability()); + value := priorityFactor.Coefficient() * obj.GradeTarget(); + } + + if( "DOI" = priorityFactor.Name()) + { + // DOI鏁版嵁鏆傛椂缂哄皯 + value := 1; + } + + if( "DSI" = priorityFactor.Name()) + { + // DOI鏁版嵁鏆傛椂缂哄皯 + value := 1; + } + + if( "缁嗗垎甯傚満绛夌骇" = priorityFactor.Name()) + { + obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "缁嗗垎甯傚満绛夌骇" and p.GradingName() = customerOrder.SegmentPriority()); + value := priorityFactor.Coefficient() * obj.GradeTarget(); + } + + if( "闇�姹傜被鍨�" = priorityFactor.Name()) + { + // 鏈夐娴� 鏃犻娴� 绾娴� + obj := selectobject( priorityFactor,PriorityFactorDetails,p,p.GradingName() = customerOrder.OrderType()); + value := priorityFactor.Coefficient() * obj.GradeTarget(); + } + + if( "瀹㈡埛绛夌骇" = priorityFactor.Name()) + { + // 閫氳繃鏁版嵁婀栬绠楀鎴风瓑绾� + value := 1; + } + + if( "璁㈠崟涓嬪崟鏃堕棿" = priorityFactor.Name()) + { + // 涓嬪崟鏃堕棿 + orderTime := customerOrder.OrderTime(); + days := orderTime.TotalInDays() - customerOrder.EndDate().TotalInDays(); + obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "璁㈠崟涓嬪崟鏃堕棿" and days >= [Number]p.GradingName()); + value := priorityFactor.Coefficient() * obj.GradeTarget(); + } + + return value; + *] +} diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl new file mode 100644 index 0000000..7c211d6 --- /dev/null +++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl @@ -0,0 +1,24 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod GetRemindFormula ( + String formula, + MacroPlan macroPlan +) as String +{ + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + str := ""; + + traverse( macroPlan,PriorityFactor,p) + { + if( formula.StartsWith( p.Name()) ) + { + str := formula.SubString( 0 + p.Name().Length(),formula.Length()); + } + } + + return str; + *] +} diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl new file mode 100644 index 0000000..4021601 --- /dev/null +++ b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl @@ -0,0 +1,72 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod CalculatePriorityResult ( + CustomerOrders customerOrders, + String priorityPolicyName, + String businessType, + MacroPlan macroPlan +) +{ + TextBody: + [* + // NBoTk Sep-26-2023 (created) + + // 璁$畻瀹㈡埛璁㈠崟鐨勪紭鍏堢骇寰楀垎 鍥炲~鏉冮噸鏁版嵁 鐢熸垚鏂扮殑Priority鏄庣粏鏁版嵁 + + traverse( customerOrders,Elements,e) + { + // 浜嬩笟閮ㄤ俊鎭� + businessType := e.BusinessType(); + + // 鑾峰彇瀵瑰簲浜嬩笟閮ㄨ绠楀叕寮� + priorityPolicys := selectobject( macroPlan,PriorityPolicy,p,p.BusinessType() = businessType and p.Name() = priorityPolicyName); + formula := priorityPolicys.Formula(); + + // 閫掑綊澶勭悊璁$畻鍏紡 鑾峰彇褰撳墠璁㈠崟鐨勫緱鍒� + value := PriorityResult::CalculateScore( formula,e,businessType,macroPlan,0.0); + + // 鐢熸垚浼樺厛绾у洜瀛愯窇鍒嗙粨鏋� + priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(), + DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(), + StockingPointID := e.StockingPointID(),UnitOfMeasureName := e.UnitOfMeasureName() + ); + + // 鍒ゆ柇鏄泦鍥� 杩樻槸浜嬩笟閮� + if( businessType.FindString( "闆嗗洟",0 ) <> -1) + { + priorityResult.PriorityResultGroupDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(), + DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value, + Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(), + UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value + ); + } + else + { + priorityResult.PriorityResultBusinessTypeDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(), + DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value, + Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(), + UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value + ); + } + } + + // 浼樺厛绾у洜瀛愬鐞嗗畬鎴愬悗 鎺掑簭鍥炲~鏁版嵁 + resultList := selectsortedset( macroPlan,PriorityResult,result, + true, + result.PriorityResultScore() + ) + + priorityValue := 1; + traverse( resultList,Elements,e) + { + obj := selectobject( customerOrders,Elements,order, + order.ID() = e.CustomerOrderID() + ); + obj.PriorityName([String]priorityValue); + + // 鍒涘缓浼樺厛绾ф暟鎹� + macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue); + priorityValue := priorityValue + 1; + } + *] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def index 7c1b15d..4172fa3 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def @@ -15,9 +15,6 @@ businessType := DataHolderBusinessType.Data().BusinessTypeName(); DataHolderBusinessType.Data().Commit(); - // PriorityFactor - PriorityFactor::InitData( MacroPlan,businessType); - this.Close(); *] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def index 01848c5..8ba1423 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def @@ -16,7 +16,7 @@ Title: 'Filling' ] } - Component MenuTest + Component MenuRefresh { #keys: '[414382.0.415603149]' BaseType: 'WebMenu' @@ -24,7 +24,7 @@ [ Image: 'ADD2' Taborder: 4 - Title: 'Test' + Title: '鍒锋柊' ] } ] diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def similarity index 70% rename from _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def rename to _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def index f292299..aba413a 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def @@ -1,17 +1,17 @@ Quintiq file version 2.0 #parent: ListCustomerAndFillingCapacityOrder -Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick +Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick { #keys: '[414382.0.415724061]' CanBindMultiple: false DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick - GroupServerCalls: true - Initiator: 'MenuTest' + Initiator: 'MenuRefresh' QuillAction { Body: [* - CustomerAndForecastOrder::CreateTestData( MacroPlan); + CustomerAndForecastOrder::RefreshData( MacroPlan,GlobalOTDTable); *] + GroupServerCalls: false } } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def index 59bd67d..96d7545 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def @@ -13,7 +13,7 @@ Body: [* - selection.Delete(); + selection.Delete(); *] GroupServerCalls: false } -- Gitblit v1.9.3