ERPHelper.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using JLHHJSvr.BLL;
  2. using JLHHJSvr.Com.Model;
  3. using JLHHJSvr.LJException;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Diagnostics;
  8. using LJLib.DAL.SQL;
  9. namespace JLHHJSvr.Helper
  10. {
  11. internal class ERPHelper : HelperBase
  12. {
  13. private JObject BuildLoginRequest()
  14. {
  15. return new JObject
  16. {
  17. { "token", GlobalVar.ERP_TOKEN },
  18. { "account", GlobalVar.ERP_ACCOUNT_NAME },
  19. { "userid", GlobalVar.ERP_ACCOUNT_USERNAME },
  20. { "password", GlobalVar.ERP_ACCOUNT_PASSWORD },
  21. { "clientType", 30 }
  22. };
  23. }
  24. private static readonly Dictionary<string, string> _apiResultMap = new Dictionary<string, string>()
  25. {
  26. {"GetL1Mtrldef", "mtrldefList"},
  27. {"GetSCWorkgroupList", "scworkgroupList"},
  28. {"GetL1Mtrltype", "mtrltypeList"},
  29. {"GetL1ConfigureCode", "resultList"},
  30. {"CommonDynamicSelect", "datatable"},
  31. };
  32. protected void Login()
  33. {
  34. var request = BuildLoginRequest();
  35. try
  36. {
  37. var result = DoExecute("Login", request);
  38. var token = result.GetValue("token").ToObject<string>();
  39. if (!string.IsNullOrEmpty(token))
  40. {
  41. GlobalVar.ERP_TOKEN = token;
  42. }
  43. }
  44. catch (Exception ex)
  45. {
  46. throw new LJCommonException($"ERP登录失败: {ex.Message}");
  47. }
  48. }
  49. public void CheckLogin()
  50. {
  51. if(string.IsNullOrEmpty(GlobalVar.ERP_TOKEN))
  52. {
  53. Login();
  54. }
  55. }
  56. public List<T> GetERPList<T>(string apiMethod, JObject parameters = null, int tryCnt = 0)
  57. {
  58. CheckLogin();
  59. try
  60. {
  61. var request = BuildRequest(parameters);
  62. var result = DoExecute(apiMethod, request);
  63. if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}");
  64. return result[listKey]?.ToObject<List<T>>() ?? new List<T>();
  65. }
  66. catch (Exception ex) when (IsTokenExpired(ex))
  67. {
  68. if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
  69. Login();
  70. return GetERPList<T>(apiMethod, parameters, tryCnt + 1);
  71. }
  72. catch
  73. {
  74. throw;
  75. }
  76. }
  77. public List<T> GetERPList<T>(string apiMethod, ref int total, JObject parameters = null, int tryCnt = 0)
  78. {
  79. CheckLogin();
  80. try
  81. {
  82. var request = BuildRequest(parameters);
  83. var result = DoExecute(apiMethod, request);
  84. if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}");
  85. total = ((int)result["totalcnt"]);
  86. return result[listKey]?.ToObject<List<T>>() ?? new List<T>();
  87. }
  88. catch (Exception ex) when (IsTokenExpired(ex))
  89. {
  90. if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
  91. Login();
  92. return GetERPList<T>(apiMethod, ref total, parameters, tryCnt + 1);
  93. }
  94. catch
  95. {
  96. throw;
  97. }
  98. }
  99. // 提取请求构建逻辑
  100. private JObject BuildRequest(JObject parameters)
  101. {
  102. var request = new JObject { ["token"] = GlobalVar.ERP_TOKEN };
  103. parameters = parameters ?? new JObject();
  104. foreach (var param in parameters)
  105. {
  106. request.Add(param.Key, param.Value);
  107. }
  108. return request;
  109. }
  110. private bool IsTokenExpired(Exception ex)
  111. {
  112. const string expiredFlag = "已与服务器失联";
  113. return ex.Message.Contains(expiredFlag);
  114. }
  115. /// <summary>
  116. /// 保存物料资料,成功后保存erp_mtrlid
  117. /// </summary>
  118. /// <param name="mtrl">核价物料资料</param>
  119. /// <returns>错误信息</returns>
  120. public string SaveMtrldef(u_mattress mtrl, List<u_mattress_interface> interfaceList = null, string fields = "mtrlname,mtrlmode,mtrltypeid,mtrltype,unit,mtrlengname,configname,model,configcodetype")
  121. {
  122. var errMsg = string.Empty;
  123. var configure2 = (JArray)null;
  124. if (interfaceList != null)
  125. {
  126. configure2 = new JArray { };
  127. foreach (var item in interfaceList)
  128. {
  129. configure2.Add(new JObject()
  130. {
  131. ["pzid"] = item.erp_pzid,
  132. ["pzcode"] = item.pzcode,
  133. ["pzname"] = item.bj_pzname,
  134. ["pznamemx"] = item.bj_namemx
  135. });
  136. }
  137. }
  138. var l1Req = new JObject()
  139. {
  140. ["token"] = GlobalVar.ERP_TOKEN,
  141. ["mtrls"] = new JArray
  142. {
  143. new JObject()
  144. {
  145. ["mtrlcode"] = mtrl.erp_mtrlcode,
  146. ["mtrlname"] = mtrl.erp_mtrlname,
  147. ["mtrlmode"] = mtrl.erp_mtrlmode,
  148. ["mtrltypeid"] = mtrl.erp_mtrltypeid,
  149. ["mtrltype"] = mtrl.erp_mtrltype,
  150. ["unit"] = mtrl.erp_mtrlunit,
  151. ["mtrlengname"] = mtrl.erp_mtrlengname,
  152. ["dijia_cost"] = mtrl.dijia_cost, // 底价1
  153. ["dijia_cost2"] = mtrl.dijia_cost, // 底价2
  154. ["dijia_cost3"] = mtrl.dijia_cost, // 底价3
  155. ["fob"] = mtrl.fob, // fob费用
  156. ["taxes"] = mtrl.taxes, // 税金
  157. ["extras_cost"] = mtrl.extras_cost, // 额外费用
  158. ["planprice"] = mtrl.nottax_factory_cost, // 计划价
  159. ["bj_mxdscrp"] = mtrl.bj_mxdscrp,
  160. ["configname"] = mtrl.configname,
  161. ["model"] = mtrl.model,
  162. ["configcodetype"] = mtrl.erp_configcodetype,
  163. ["mtrl_config2"] = configure2
  164. }
  165. },
  166. ["updateFields"] = fields
  167. };
  168. var l1Rslt = DoExecute("SaveMtrldef", JObject.FromObject(l1Req));
  169. errMsg = $"{l1Rslt.GetValue("ErrMsg")}";
  170. if (string.IsNullOrEmpty(errMsg))
  171. {
  172. mtrl.erp_mtrlid = (l1Rslt.GetValue("mtrlids") as JArray)[0].Value<int>();
  173. Trace.Write($"Update erp_mtrlid={mtrl.erp_mtrlid} WHERE mattressid={mtrl.mattressid} AND erp_mtrlcode={mtrl.erp_mtrlcode}");
  174. DbSqlHelper.Update(cmd, mtrl, "erp_mtrlid");
  175. }
  176. return errMsg;
  177. }
  178. /// <summary>
  179. /// 更新床垫相关选项
  180. /// </summary>
  181. /// <param name="mattress"></param>
  182. public u_mattress GetMattressMsg(u_mattress mattress, List<u_mattress_interface> interfaceList)
  183. {
  184. var errMsg = string.Empty;
  185. var mattresstype = new u_mattress_type();
  186. if (DbSqlHelper.SelectOne(cmd, "u_mattress_type", "mattresstypeid = @mattresstypeid", new Dictionary<string, object>() { { "mattresstypeid", mattress.mattresstypeid } }, mattresstype, "typename") == 1)
  187. {
  188. mattress.model = mattresstype.typename;
  189. }
  190. var lde_dijia_cost = mattress.nottax_factory_cost / (mattress.dept_profitrate + mattress.dept_profitrate_rangli / 100);
  191. var lde_commission = lde_dijia_cost / (1 - (mattress.commission - 1)) - lde_dijia_cost;
  192. 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");
  193. mattress.bj_mxdscrp = ls_bj_mxdscrp;
  194. mattress.dijia_cost = lde_dijia_cost;
  195. string ls_configcode = "", ls_configname = "";
  196. foreach (var item in interfaceList)
  197. {
  198. string ls_temp_pzcode = item.pzcode;
  199. string ls_temp_str, ls_temp_pznamemx, ls_temp_pzname = item.pzname;
  200. ls_temp_str = item.actual_size + item.sb_craft + item.actual_size_sb;
  201. 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");
  202. ls_configcode = ls_configcode + ls_temp_pznamemx + "|";
  203. ls_configname = ls_configname + ls_temp_pzname + ":" + ls_temp_pznamemx + "|";
  204. }
  205. mattress.configcode = ls_configcode;
  206. mattress.configname = ls_configname;
  207. return mattress;
  208. }
  209. /// <summary>
  210. /// 更新L1计划价 wf_updateL1_planprice
  211. /// </summary>
  212. /// <param name="mattress"></param>
  213. public string UpdateL1Planprice(int erp_mtrlid, decimal value)
  214. {
  215. var errMsg = string.Empty;
  216. var l1Req = new JObject()
  217. {
  218. ["token"] = GlobalVar.ERP_TOKEN,
  219. ["mtrlid"] = erp_mtrlid,
  220. ["value"] = value,
  221. };
  222. var l1Rslt = DoExecute("UpdateMtrldefPlanPrice", JObject.FromObject(l1Req));
  223. errMsg = $"{l1Rslt.GetValue("ErrMsg")}";
  224. return errMsg;
  225. }
  226. }
  227. }