123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- 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<string, string> _apiResultMap = new Dictionary<string, string>()
- {
- {"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<string>();
- 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<T> GetERPList<T>(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<List<T>>() ?? new List<T>();
- }
- catch (Exception ex) when (IsTokenExpired(ex))
- {
- if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
- Login();
- return GetERPList<T>(apiMethod, parameters, tryCnt + 1);
- }
- catch
- {
- throw;
- }
- }
- public List<T> GetERPList<T>(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<List<T>>() ?? new List<T>();
- }
- catch (Exception ex) when (IsTokenExpired(ex))
- {
- if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
- Login();
- return GetERPList<T>(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);
- }
- /// <summary>
- /// 保存物料资料,成功后保存erp_mtrlid
- /// </summary>
- /// <param name="mtrl">核价物料资料</param>
- /// <returns>错误信息</returns>
- 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<int>();
- 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;
- }
- /// <summary>
- /// 更新床垫相关选项
- /// </summary>
- /// <param name="mattress"></param>
- public u_mattress GetMattressMsg(u_mattress mattress, List<u_mattress_interface_qd> qdList)
- {
- 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;
- return mattress;
- }
- /// <summary>
- /// 更新L1计划价 wf_updateL1_planprice
- /// </summary>
- /// <param name="mattress"></param>
- 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;
- }
- }
- }
|