|
@@ -24,6 +24,13 @@ namespace JLHHJSvr.Helper
|
|
{ "clientType", 30 }
|
|
{ "clientType", 30 }
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
+ private static readonly Dictionary<string, string> _apiResultMap = new Dictionary<string, string>()
|
|
|
|
+ {
|
|
|
|
+ {"GetL1Mtrldef", "mtrldefList"},
|
|
|
|
+ {"GetSCWorkgroupList", "scworkgroupList"},
|
|
|
|
+ {"GetL1Mtrltype", "mtrltypeList"},
|
|
|
|
+ {"CommonDynamicSelect", "datatable"}
|
|
|
|
+ };
|
|
protected void Login()
|
|
protected void Login()
|
|
{
|
|
{
|
|
var request = BuildLoginRequest();
|
|
var request = BuildLoginRequest();
|
|
@@ -50,53 +57,47 @@ namespace JLHHJSvr.Helper
|
|
Login();
|
|
Login();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- public List<T> GetERPList<T>(string apiMethod, JObject parameters)
|
|
|
|
|
|
+ public List<T> GetERPList<T>(string apiMethod, JObject parameters = null, int tryCnt = 0)
|
|
{
|
|
{
|
|
CheckLogin();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|