using JLHHJSvr.BLL; using JLHHJSvr.Com.Model; using JLHHJSvr.LJException; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Diagnostics; using LJLib.DAL.SQL; namespace JLHHJSvr.Helper { internal class ERPHelper : HelperBase { private JObject BuildLoginRequest() { return new JObject { { "token", GlobalVar.ERP_TOKEN }, { "account", GlobalVar.ERP_ACCOUNT_NAME }, { "userid", GlobalVar.ERP_ACCOUNT_USERNAME }, { "password", GlobalVar.ERP_ACCOUNT_PASSWORD }, { "clientType", 30 } }; } private static readonly Dictionary _apiResultMap = new Dictionary() { {"GetL1Mtrldef", "mtrldefList"}, {"GetSCWorkgroupList", "scworkgroupList"}, {"GetL1Mtrltype", "mtrltypeList"}, {"GetL1ConfigureCode", "resultList"}, {"CommonDynamicSelect", "datatable"}, }; protected void Login() { var request = BuildLoginRequest(); try { var result = DoExecute("Login", request); var token = result.GetValue("token").ToObject(); if (!string.IsNullOrEmpty(token)) { GlobalVar.ERP_TOKEN = token; } } catch (Exception ex) { throw new LJCommonException($"ERP登录失败: {ex.Message}"); } } public void CheckLogin() { if(string.IsNullOrEmpty(GlobalVar.ERP_TOKEN)) { Login(); } } public List GetERPList(string apiMethod, JObject parameters = null, int tryCnt = 0) { CheckLogin(); try { var request = BuildRequest(parameters); var result = DoExecute(apiMethod, request); if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}"); return result[listKey]?.ToObject>() ?? new List(); } catch (Exception ex) when (IsTokenExpired(ex)) { if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!"); Login(); return GetERPList(apiMethod, parameters, tryCnt + 1); } catch { throw; } } public List GetERPList(string apiMethod, ref int total, JObject parameters = null, int tryCnt = 0) { CheckLogin(); try { var request = BuildRequest(parameters); var result = DoExecute(apiMethod, request); if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}"); total = ((int)result["totalcnt"]); return result[listKey]?.ToObject>() ?? new List(); } catch (Exception ex) when (IsTokenExpired(ex)) { if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!"); Login(); return GetERPList(apiMethod, ref total, parameters, tryCnt + 1); } catch { throw; } } // 提取请求构建逻辑 private JObject BuildRequest(JObject parameters) { var request = new JObject { ["token"] = GlobalVar.ERP_TOKEN }; parameters = parameters ?? new JObject(); foreach (var param in parameters) { request.Add(param.Key, param.Value); } return request; } private bool IsTokenExpired(Exception ex) { const string expiredFlag = "已与服务器失联"; return ex.Message.Contains(expiredFlag); } /// /// 保存物料资料,成功后保存erp_mtrlid /// /// 核价物料资料 /// 错误信息 public string SaveMtrldef(u_mattress mtrl, string fields = "mtrlname,mtrlmode,mtrltypeid,mtrltype,unit,mtrlengname,configname") { var errMsg = string.Empty; var l1Req = new JObject() { ["token"] = GlobalVar.ERP_TOKEN, ["mtrls"] = new JArray { new JObject() { ["mtrlcode"] = mtrl.erp_mtrlcode, ["mtrlname"] = mtrl.erp_mtrlname, ["mtrlmode"] = mtrl.erp_mtrlmode, ["mtrltypeid"] = mtrl.erp_mtrltypeid, ["mtrltype"] = mtrl.erp_mtrltype, ["unit"] = mtrl.erp_mtrlunit, ["mtrlengname"] = mtrl.erp_mtrlengname, ["dijia_cost"] = mtrl.dijia_cost, // 底价1 ["dijia_cost2"] = mtrl.dijia_cost, // 底价2 ["dijia_cost3"] = mtrl.dijia_cost, // 底价3 ["fob"] = mtrl.fob, // fob费用 ["taxes"] = mtrl.taxes, // 税金 ["extras_cost"] = mtrl.extras_cost, // 额外费用 ["planprice"] = mtrl.nottax_factory_cost, // 计划价 ["bj_mxdscrp"] = mtrl.bj_mxdscrp, ["configname"] = mtrl.configname } }, ["updateFields"] = fields }; var l1Rslt = DoExecute("SaveMtrldef", JObject.FromObject(l1Req)); errMsg = $"{l1Rslt.GetValue("ErrMsg")}"; if (string.IsNullOrEmpty(errMsg)) { mtrl.erp_mtrlid = (l1Rslt.GetValue("mtrlids") as JArray)[0].Value(); Trace.Write($"Update erp_mtrlid={mtrl.erp_mtrlid} WHERE mattressid={mtrl.mattressid} AND erp_mtrlcode={mtrl.erp_mtrlcode}"); DbSqlHelper.Update(cmd, mtrl, "erp_mtrlid"); } return errMsg; } /// /// 更新床垫相关选项 /// /// public u_mattress GetMattressMsg(u_mattress mattress, List interfaceList) { var errMsg = string.Empty; var lde_dijia_cost = mattress.nottax_factory_cost / (mattress.dept_profitrate + mattress.dept_profitrate_rangli / 100); var lde_commission = lde_dijia_cost / (1 - (mattress.commission - 1)) - lde_dijia_cost; var ls_bj_mxdscrp = "底价:" + lde_dijia_cost.Value.ToString("###0.00") + ", 佣金:" + lde_commission.Value.ToString("###0.00") + ", 税金:" + mattress.taxes.Value.ToString("###0.00") + ", fob:" + mattress.fob.Value.ToString("###0.00") + ", 最后更新日期:" + DateTime.Today.ToString("yyyy-MM-dd") + "," + mattress.nottax_factory_cost.Value.ToString("###0.00"); mattress.bj_mxdscrp = ls_bj_mxdscrp; mattress.dijia_cost = lde_dijia_cost; string ls_configcode = "", ls_configname = ""; foreach (var item in interfaceList) { string ls_temp_pzcode = item.pzcode; string ls_temp_str, ls_temp_pzname = "", ls_temp_pznamemx; ls_temp_str = item.actual_size + item.sb_craft + item.actual_size_sb; ls_temp_pznamemx = string.IsNullOrEmpty(ls_temp_str) ? item.bj_namemx : item.bj_namemx + "@@" + ls_temp_str + "@@" + item.ss_rate.Value.ToString("###0.00") + "@@" + item.ls_rate.Value.ToString("###0.00"); ls_configcode = ls_configcode + ls_temp_pznamemx + "|"; ls_configname = ls_configname + ls_temp_pzname + ":" + ls_temp_pznamemx + "|"; } mattress.configcode = ls_configcode; mattress.configname = ls_configname; return mattress; } /// /// 更新L1计划价 wf_updateL1_planprice /// /// public string UpdateL1Planprice(int erp_mtrlid, decimal value) { var errMsg = string.Empty; var l1Req = new JObject() { ["token"] = GlobalVar.ERP_TOKEN, ["mtrlid"] = erp_mtrlid, ["value"] = value, }; var l1Rslt = DoExecute("UpdateMtrldefPlanPrice", JObject.FromObject(l1Req)); errMsg = $"{l1Rslt.GetValue("ErrMsg")}"; return errMsg; } } }