Преглед изворни кода

1、修复核价系统与服务器失联问题

MY пре 2 месеци
родитељ
комит
a4cee854cd
1 измењених фајлова са 33 додато и 32 уклоњено
  1. 33 32
      JLHHJSvr/Helper/ERPHelper.cs

+ 33 - 32
JLHHJSvr/Helper/ERPHelper.cs

@@ -24,6 +24,13 @@ namespace JLHHJSvr.Helper
                 { "clientType", 30 }
             };
         }
+        private static readonly Dictionary<string, string> _apiResultMap = new Dictionary<string, string>()
+        {
+            {"GetL1Mtrldef", "mtrldefList"},
+            {"GetSCWorkgroupList", "scworkgroupList"},
+            {"GetL1Mtrltype", "mtrltypeList"},
+            {"CommonDynamicSelect", "datatable"}
+        };
         protected void Login()
         {
             var request = BuildLoginRequest();
@@ -50,53 +57,47 @@ namespace JLHHJSvr.Helper
                 Login();
             }
         }
-        public List<T> GetERPList<T>(string apiMethod, JObject parameters)
+        public List<T> GetERPList<T>(string apiMethod, JObject parameters = null, int tryCnt = 0)
         {
             CheckLogin();
 
-            // 根据 API 方法的返回结果名称来提取相应的数据
-            var apiDict = new Dictionary<string, string>()
+            try
             {
-                {"GetL1Mtrldef","mtrldefList" },
-                {"GetSCWorkgroupList","scworkgroupList" },
-                {"GetL1Mtrltype","mtrltypeList" },
-                {"CommonDynamicSelect","datatable" }
-            };
+                var request = BuildRequest(parameters);
+                var result = DoExecute(apiMethod, request);
 
-            var request = new JObject();
-            request.Add("token", GlobalVar.ERP_TOKEN);
+                if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}");
 
-            if (parameters != null)
-            {
-                foreach (var param in parameters)
-                {
-                    request.Add(param.Key,param.Value);
-                }
+                return result[listKey]?.ToObject<List<T>>() ?? new List<T>();
             }
+            catch (Exception ex) when (IsTokenExpired(ex))
+            {
+                if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
 
-            var result = DoExecute(apiMethod, request);
-
-            if (!apiDict.TryGetValue(apiMethod, out var listName))
+                Login();
+                return GetERPList<T>(apiMethod, parameters, tryCnt + 1);
+            }
+            catch
             {
-                throw new ArgumentException("Unsupported API method", nameof(apiMethod));
+                throw; 
             }
-
-            return result.GetValue(listName).ToObject<List<T>>();
         }
-
-        public List<erp_mtrldef> GetErpMtrlDefList(JObject parameters)
+        // 提取请求构建逻辑
+        private JObject BuildRequest(JObject parameters)
         {
-            return GetERPList<erp_mtrldef>("GetL1Mtrldef", parameters);
-        }
+            var request = new JObject { ["token"] = GlobalVar.ERP_TOKEN };
+            parameters = parameters ?? new JObject();
 
-        public List<erp_sc_workgroup> GetERPWrkGrpList(JObject parameters)
-        {
-            return GetERPList<erp_sc_workgroup>("GetSCWorkgroupList", parameters);
+            foreach (var param in parameters)
+            {
+                request.Add(param.Key, param.Value);
+            }
+            return request;
         }
-
-        public List<u_mtrltype> GetERPMtrlTypeList(JObject parameters)
+        private bool IsTokenExpired(Exception ex)
         {
-            return GetERPList<u_mtrltype>("GetL1Mtrltype", parameters);
+            const string expiredFlag = "已与服务器失联";
+            return ex.Message.Contains(expiredFlag);
         }
     }
 }