From 5a32cdfbc1d42594eb3fc7621dbd9024cda46ea5 Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期三, 29 五月 2024 19:44:02 +0800
Subject: [PATCH] PP Budget

---
 _Main/BL/Type_Archive/StaticMethod_Archive.qbl                                |   53 +++++++++++++++++
 _Main/BL/Type_ArchivePPA/Attribute_SourceFileBinaryValue.qbl                  |    7 ++
 _Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl                          |   14 ++--
 _Main/BL/Type_Archive/StaticMethod_HandlePR.qbl                               |   18 +++---
 _Main/BL/Type_Archive/StaticMethod_OnException.qbl                            |    3 +
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def |    4 
 _Main/BL/Type_Archive/StaticMethod_Success.qbl                                |    4 +
 _Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl                    |   57 +++++++++++--------
 _Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl                  |   17 ++++-
 9 files changed, 130 insertions(+), 47 deletions(-)

diff --git a/_Main/BL/Type_Archive/StaticMethod_Archive.qbl b/_Main/BL/Type_Archive/StaticMethod_Archive.qbl
new file mode 100644
index 0000000..8452813
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_Archive.qbl
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Archive (
+  JSON respJSON,
+  Archive archive,
+  String archiveType
+)
+{
+  TextBody:
+  [*
+    code             := respJSON.Get( "code" ).GetNumber();
+    archiveFileJSONs := respJSON.Get( "archiveFiles" );
+    info( archiveFileJSONs.AsString() );
+    if ( code = 200 ) {
+      for ( i := 0; i < archiveFileJSONs.Size(); i++ ) {
+        archiveFileJSON := archiveFileJSONs.Get( i );
+        
+        fileName        := archiveFileJSON.Get( "fileName" ).GetString();
+        filePath        := archiveFileJSON.Get( "fileFullPath" ).GetString();
+        
+        if ( archiveType = "PR" ) {
+          apr := select( archive, ArchivePR, tempAPR, tempAPR.Name() = fileName );
+          if ( not isnull( apr ) ) {
+            apr.FilePath( filePath );
+          } else {
+            archive.ArchivePR( relnew, Name := fileName, FilePath := filePath );
+          }
+        } else if ( archiveType = "PP" ) {
+          app := select( archive, ArchivePP, tempAPP, tempAPP.Name() = fileName );
+          if ( not isnull( app ) ) {
+            app.FilePath( filePath );
+          } else {
+            archive.ArchivePP( relnew, Name := fileName, FilePath := filePath );
+          }
+        } else if ( archiveType = "Budget" ) {
+          ab := select( archive, ArchiveBudget, tempAB, tempAB.Name() = fileName );
+          if ( not isnull( ab ) ) {
+            ab.FilePath( filePath );
+          } else {
+            archive.ArchiveBudget( relnew, Name := fileName, FilePath := filePath );
+          }
+        } else if ( archiveType = "PPA" ) {
+          appa := select( archive, ArchivePPA, tempAPPA, tempAPPA.Name() = fileName );
+          if ( not isnull( appa ) ) {
+            appa.FilePath( filePath );
+          } else {
+            archive.ArchivePPA( relnew, Name := fileName, FilePath := filePath );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
index 9291f91..6474582 100644
--- a/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
@@ -11,22 +11,28 @@
   BinaryValue curveBinaryValue,
   String idsFileName,
   BinaryValue idsBinaryValue,
-  String filePath
-)
+  String filePath,
+  Boolean isOverwriteFile
+) as stream[JSON]
 {
   TextBody:
   [*
     // 璇锋眰鍙傛暟
-    pathPPA   := filePath + ppaFileName;
-    pathCurve := filePath + curveFileName;
-    pathIDS   := filePath + idsFileName;
-    //isArchive := ifexpr( isPRArchive, "true", "false" );
-    minorKey  := [String]macroPlan.MDSID().MinorKey();
-    json      := JSON::Object()
-                 .Add( "pathPPA", pathPPA )
-                 .Add( "pathCurve", pathCurve )
-                 .Add( "pathIDS", pathIDS )
-                 .Add( "minorKey", minorKey ).Build().AsString();
+    pathPPA       := filePath + ppaFileName;
+    pathCurve     := filePath + curveFileName;
+    pathIDS       := filePath + idsFileName;
+    info( pathPPA );
+    info( pathCurve );
+    isArchivePPA  := ifexpr( isPPAArchive, "true", "false" );
+    isOverridePPA := ifexpr( isOverwriteFile, "true", "false" );
+    minorKey      := [String]macroPlan.MDSID().MinorKey();
+    json          := JSON::Object()
+                     .Add( "pathPPA", pathPPA )
+                     .Add( "isArchivePPA", isArchivePPA )
+                     .Add( "pathCurve", pathCurve )
+                     .Add( "pathIDS", pathIDS )
+                     .Add( "minorKey", minorKey )
+                     .Add( "isOverridePPA", isOverridePPA ).Build().AsString();
     
     // 鍐欏叆涓存椂鏂囦欢
     Archive::WriteTempFile( pathPPA, ppaBinaryValue );
@@ -36,17 +42,20 @@
     info( json );
     
     // 璋冪敤鎺ュ彛
-    //url := "/PR/Import";
-    //i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
-    //i.URL( url );
-    //i.PostMethod( true );
-    //
-    //try {
-    //  i.Call( json );
-    //  
-    //  htmlresult := i.Result();
-    //} onerror {
-    //
-    //}
+    url := "/IDSPPACurve/Import";
+    
+    i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
+    i.URL( url );
+    i.PostMethod( true );
+    i.MediaType( "application/json" );
+    i.TimeOut( Duration::Minutes( 5 ) );
+    
+    i.Call( json );
+      
+    htmlresult := i.Result();
+      
+    respJSON   := JSON::Parse( htmlresult );
+    
+    return emit( respJSON );
   *]
 }
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
index 24d0b71..abd6fc9 100644
--- a/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
@@ -14,15 +14,15 @@
   TextBody:
   [*
     // 璇锋眰鍙傛暟
-    pathPR     := filePath + prFileName;
-    isArchive  := ifexpr( isPRArchive, "true", "false" );
-    isOverride := ifexpr( isOverwriteFile, "true", "false" );
-    minorKey   := [String]macroPlan.MDSID().MinorKey();
-    json       := JSON::Object()
-                  .Add( "pathPR", pathPR )
-                  .Add( "isArchive", isArchive )
-                  .Add( "isOverride", isOverride )
-                  .Add( "minorKey", minorKey ).Build().AsString();
+    pathPR       := filePath + prFileName;
+    isArchive    := ifexpr( isPRArchive, "true", "false" );
+    isOverride   := ifexpr( isOverwriteFile, "true", "false" );
+    macroPlanKey := [String]macroPlan.MDSID().MinorKey();
+    json         := JSON::Object()
+                    .Add( "pathPR", pathPR )
+                    .Add( "isArchive", isArchive )
+                    .Add( "isOverride", isOverride )
+                    .Add( "minorKey", macroPlanKey ).Build().AsString();
     
     // 鍐欏叆涓存椂鏂囦欢
     Archive::WriteTempFile( pathPR, prBinaryValue );
diff --git a/_Main/BL/Type_Archive/StaticMethod_OnException.qbl b/_Main/BL/Type_Archive/StaticMethod_OnException.qbl
index d231716..2b9ec51 100644
--- a/_Main/BL/Type_Archive/StaticMethod_OnException.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_OnException.qbl
@@ -8,6 +8,9 @@
 {
   TextBody:
   [*
+    // 娓呯┖涓存椂鏁版嵁搴�
+    archiveExecutionStatus.AES_TemporaryDemandData().Source().FlatQuery( "truncate table A_Forecasts" );
+    
     archiveExecutionStatus.RequirementImportExecutionStatus( relnew, 
                                                              ExecutionCode        := 500,
                                                              ExecutionIsSuccess   := false,
diff --git a/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
index b03e1bd..e61f9a7 100644
--- a/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
@@ -37,21 +37,28 @@
     
     if ( prBinaryValue.Size() > 0 ) {
       archive -> Archive::HandlePR( macroPlan, userName, prFileName, prBinaryValue, isPRArchive, filePath, isOverwriteFile ) 
-              -> Archive::Success( macroPlan, archiveExecutionStatus, userName ) 
+              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
+              -> Archive::Archive( archive, "PR" )
               -> Exception() 
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else if ( ppBinaryValue.Size() > 0 ) {
       archive -> Archive::HandlePP( macroPlan, userName, ppFileName, ppBinaryValue, isPPArchive, filePath, isOverwriteFile ) 
-              -> Archive::Success( macroPlan, archiveExecutionStatus, userName ) 
+              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
+              -> Archive::Archive( archive, "PP" )
               -> Exception() 
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else if ( budgetBinaryValue.Size() > 0 ) {
       archive -> Archive::HandleBudget( macroPlan, userName, budgetFileName, budgetBinaryValue, isBudgetArchive, filePath, isOverwriteFile ) 
-              -> Archive::Success( macroPlan, archiveExecutionStatus, userName ) 
-              -> Exception() 
+              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
+              -> Archive::Archive( archive, "Budget" )
+              -> Exception()
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else {
-      Archive::HandlePPA_Curve_IDS( archive, macroPlan, userName, ppaFileName, ppaBinaryValue, isPPAArchive, curveFileName, curveBinaryValue, idsFileName, idsBinaryValue, filePath );
+      archive -> Archive::HandlePPA_Curve_IDS( macroPlan, userName, ppaFileName, ppaBinaryValue, isPPAArchive, curveFileName, curveBinaryValue, idsFileName, idsBinaryValue, filePath, isOverwriteFile ) 
+              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
+              -> Archive::Archive( archive, "PPA" )
+              -> Exception()
+              -> Archive::OnException( archiveExecutionStatus, userName );
     }
   *]
 }
diff --git a/_Main/BL/Type_Archive/StaticMethod_Success.qbl b/_Main/BL/Type_Archive/StaticMethod_Success.qbl
index 8b945f0..5844f72 100644
--- a/_Main/BL/Type_Archive/StaticMethod_Success.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_Success.qbl
@@ -5,7 +5,7 @@
   MacroPlan macroPlan,
   ArchiveExecutionStatus archiveExecutionStatus,
   String userName
-)
+) as stream[JSON]
 {
   TextBody:
   [*
@@ -27,5 +27,7 @@
     } else {
       RequirementImportExecutionStatus::Create( archiveExecutionStatus, code, "Complete", userName, message, false );
     }
+    
+    return emit( respJSON );
   *]
 }
diff --git a/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl b/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl
index 4dbc847..5d861d9 100644
--- a/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl
@@ -7,11 +7,13 @@
 {
   TextBody:
   [*
-    file := OSFile::Construct();
-    
-    file.Open( filePath, "Write", false );
-    file.WriteBinary( binaryValue );
-    
-    file.Close();
+    if ( binaryValue.Size() > 0 ) {
+      file := OSFile::Construct();
+      
+      file.Open( filePath, "Write", false );
+      file.WriteBinary( binaryValue );
+      
+      file.Close();
+    }
   *]
 }
diff --git a/_Main/BL/Type_ArchivePPA/Attribute_SourceFileBinaryValue.qbl b/_Main/BL/Type_ArchivePPA/Attribute_SourceFileBinaryValue.qbl
new file mode 100644
index 0000000..e7278b1
--- /dev/null
+++ b/_Main/BL/Type_ArchivePPA/Attribute_SourceFileBinaryValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SourceFileBinaryValue
+{
+  #keys: '3[414996.0.408054600][414996.0.408054599][414996.0.408054601]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
index 44983ad..3dede70 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
@@ -11,8 +11,8 @@
                                     efPR.Text()                                                                          , guard( dhBinaryDataPR.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPR.Checked(),
                                     efPP.Text()                                                                          , guard( dhBinaryDataPP.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPP.Checked(),
                                     efBudget.Text()                                                                      , guard( dhBinaryDataBudget.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cBudget.Checked(),
-                                    ifexpr( cPPAPPAArchiveEnable.Checked(), ddlPPAArchive.Data().Name(), efCurve.Text() ), guard( dhBinaryDataPPA.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPPA.Checked(),
-                                    efCurve.Text()                                                                       , guard( dhBinaryDataCurve.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
+                                    dhOriginalFileNamePPA.Data()                                                         , guard( dhBinaryDataPPA.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPPA.Checked(),
+                                    dhOriginalFileNameCurve.Data()                                                       , guard( dhBinaryDataCurve.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                     efIDS.Text()                                                                         , guard( dhBinaryDataIDS.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                     false );   
     

--
Gitblit v1.9.3