ERPHelper.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  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. using DirectService.Tools;
  10. using System.Data.SqlClient;
  11. namespace JLHHJSvr.Helper
  12. {
  13. internal class ERPHelper : HelperBase
  14. {
  15. private JObject BuildLoginRequest()
  16. {
  17. return new JObject
  18. {
  19. { "token", GlobalVar.ERP_TOKEN },
  20. { "account", GlobalVar.ERP_ACCOUNT_NAME },
  21. { "userid", GlobalVar.ERP_ACCOUNT_USERNAME },
  22. { "password", GlobalVar.ERP_ACCOUNT_PASSWORD },
  23. { "clientType", 30 }
  24. };
  25. }
  26. private static readonly Dictionary<string, string> _apiResultMap = new Dictionary<string, string>()
  27. {
  28. {"GetL1Mtrldef", "mtrldefList"},
  29. {"GetSCWorkgroupList", "scworkgroupList"},
  30. {"GetL1Mtrltype", "mtrltypeList"},
  31. {"GetL1ConfigureCode", "resultList"},
  32. {"CommonDynamicSelect", "datatable"},
  33. };
  34. protected void Login()
  35. {
  36. var request = BuildLoginRequest();
  37. try
  38. {
  39. var result = DoExecute("Login", request);
  40. var token = result.GetValue("token").ToObject<string>();
  41. if (!string.IsNullOrEmpty(token))
  42. {
  43. GlobalVar.ERP_TOKEN = token;
  44. }
  45. }
  46. catch (Exception ex)
  47. {
  48. throw new LJCommonException($"ERP登录失败: {ex.Message}");
  49. }
  50. }
  51. public void CheckLogin()
  52. {
  53. if(string.IsNullOrEmpty(GlobalVar.ERP_TOKEN))
  54. {
  55. Login();
  56. }
  57. }
  58. public List<T> GetERPList<T>(string apiMethod, JObject parameters = null, int tryCnt = 0)
  59. {
  60. CheckLogin();
  61. try
  62. {
  63. var request = BuildRequest(parameters);
  64. var result = DoExecute(apiMethod, request);
  65. if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}");
  66. return result[listKey]?.ToObject<List<T>>() ?? new List<T>();
  67. }
  68. catch (Exception ex) when (IsTokenExpired(ex))
  69. {
  70. if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
  71. Login();
  72. return GetERPList<T>(apiMethod, parameters, tryCnt + 1);
  73. }
  74. catch
  75. {
  76. throw;
  77. }
  78. }
  79. public List<T> GetERPList<T>(string apiMethod, ref int total, JObject parameters = null, int tryCnt = 0)
  80. {
  81. CheckLogin();
  82. try
  83. {
  84. var request = BuildRequest(parameters);
  85. var result = DoExecute(apiMethod, request);
  86. if (!_apiResultMap.TryGetValue(apiMethod, out var listKey)) throw new ArgumentException($"Unsupported API Method: {apiMethod}");
  87. total = ((int)result["totalcnt"]);
  88. return result[listKey]?.ToObject<List<T>>() ?? new List<T>();
  89. }
  90. catch (Exception ex) when (IsTokenExpired(ex))
  91. {
  92. if (tryCnt >= 3) throw new LJCommonException("超过最大重连次数,请检查连接!");
  93. Login();
  94. return GetERPList<T>(apiMethod, ref total, parameters, tryCnt + 1);
  95. }
  96. catch
  97. {
  98. throw;
  99. }
  100. }
  101. public List<L1Mtrldef> GetERPMtrldef(SqlCommand cmd, ref int total, string keyword, L1Mtrldef mtrldef, int pagesize = 0, int pageindex = 0, int simpleField = 1, List<int> mtrlids = null)
  102. {
  103. var mtrldefList = new List<L1Mtrldef>();
  104. var selectFields =
  105. "row_number() over (order by mtrlcode) as rowNum,u_mtrldef.mtrlid,mtrlcode,mtrlname,mtrlorigin,mtrltype,mtrlengname," +
  106. "unit,mtrlmode,mtrlsectype,zxmtrlmode,u_mtrldef.fjcnt,status_config,woodcode_config,pcode_config,statustype,woodcodetype,pcodetype,u_mtrldef.scid";
  107. var outputFields =
  108. "rowNum,mtrlid,mtrlcode,mtrlname,mtrlorigin,mtrltype,unit,mtrlmode,mtrlsectype,zxmtrlmode,mtrlengname," +
  109. "fjcnt,status_config,woodcode_config,pcode_config,statustype,woodcodetype,pcodetype,scid";
  110. if (simpleField != 1)
  111. {
  112. selectFields +=
  113. ",handtype,barcode,u_mtrldef.dscrp,issuliao,isuse,iflimitprice,net_weight,gross_weight,cubage,prdpackcode,opdate,opemp";
  114. outputFields +=
  115. ",handtype,barcode,dscrp,issuliao,isuse,iflimitprice,net_weight,gross_weight,cubage,prdpackcode,opdate,opemp";
  116. }
  117. var selectStr = string.Format(@"
  118. SELECT {0}
  119. FROM u_mtrldef
  120. ",
  121. selectFields);
  122. var whereList = new List<string>();
  123. var parms = new Dictionary<string, object>();
  124. ////查看有权限类别的物料
  125. //var mtrltypeids = UserHelper.ParsePowerStr(cmd, tokenData.empid, "mtrltypestr");
  126. //if (!string.IsNullOrEmpty(mtrltypeids))
  127. //{
  128. // whereList.Add($"u_mtrldef.mtrltypeid IN {mtrltypeids}");
  129. //}
  130. if (mtrldef.mtrlid > 0)
  131. {
  132. whereList.Add("u_mtrldef.mtrlid = @mtrlid");
  133. parms.Add("@mtrlid", mtrldef.mtrlid);
  134. }
  135. else if (mtrlids != null && mtrlids.Count > 0)
  136. {
  137. whereList.Add($"u_mtrldef.mtrlid IN {ListEx.getString(mtrlids)}");
  138. }
  139. else
  140. {
  141. if (mtrldef.mtrlprp != null && mtrldef.mtrlprp != -1)
  142. {
  143. whereList.Add("u_mtrldef.mtrlprp = @mtrlprp");
  144. parms.Add("@mtrlprp", mtrldef.mtrlprp);
  145. }
  146. if (mtrldef.mtrltypeid != null && mtrldef.mtrltypeid != -1)
  147. {
  148. whereList.Add("u_mtrldef.mtrltypeid = @mtrltypeid");
  149. parms.Add("@mtrltypeid", mtrldef.mtrltypeid);
  150. }
  151. if (mtrldef.storageid != null && mtrldef.storageid != -1)
  152. {
  153. whereList.Add(
  154. "EXISTS (SELECT mtrlwareid FROM u_mtrlware WHERE mtrlid = u_mtrldef.mtrlid AND storageid = @storageid)");
  155. parms.Add("@storageid", mtrldef.storageid);
  156. }
  157. if (mtrldef.mtrlorigin != null && mtrldef.mtrlorigin != -1)
  158. {
  159. whereList.Add("u_mtrldef.mtrlorigin = @mtrlorigin");
  160. parms.Add("@mtrlorigin", mtrldef.mtrlorigin);
  161. }
  162. if (mtrldef.isuse != null && mtrldef.isuse != -1)
  163. {
  164. whereList.Add("u_mtrldef.isuse = @isuse");
  165. parms.Add("@isuse", mtrldef.isuse);
  166. }
  167. if (!string.IsNullOrEmpty(keyword))
  168. {
  169. whereList.Add(@"(u_mtrldef.mtrlcode LIKE @keyword)
  170. OR (u_mtrldef.mtrlname LIKE @keyword)
  171. OR (u_mtrldef.mtrlmode LIKE @keyword)
  172. OR (u_mtrldef.mtrlsectype LIKE @keyword)
  173. OR (u_mtrldef.zxmtrlmode LIKE @keyword)
  174. OR (u_mtrldef.usermtrlmode LIKE @keyword)
  175. OR (u_mtrldef.plancode LIKE @keyword)");
  176. parms.Add("@keyword", "%" + keyword + "%");
  177. }
  178. if (!string.IsNullOrEmpty(mtrldef.mtrlcode))
  179. {
  180. whereList.Add("u_mtrldef.mtrlcode LIKE @mtrlcode");
  181. parms.Add("@mtrlcode", "%" + mtrldef.mtrlcode + "%");
  182. }
  183. if (!string.IsNullOrEmpty(mtrldef.mtrlname))
  184. {
  185. whereList.Add("u_mtrldef.mtrlname LIKE @mtrlname");
  186. parms.Add("@mtrlname", "%" + mtrldef.mtrlname + "%");
  187. }
  188. if (!string.IsNullOrEmpty(mtrldef.mtrlmode))
  189. {
  190. whereList.Add("u_mtrldef.mtrlmode LIKE @mtrlmode");
  191. parms.Add("@mtrlmode", "%" + mtrldef.mtrlmode + "%");
  192. }
  193. if (!string.IsNullOrEmpty(mtrldef.mtrlsectype))
  194. {
  195. whereList.Add("u_mtrldef.mtrlsectype LIKE @mtrlsectype");
  196. parms.Add("@mtrlsectype", "%" + mtrldef.mtrlsectype + "%");
  197. }
  198. if (!string.IsNullOrEmpty(mtrldef.zxmtrlmode))
  199. {
  200. whereList.Add("u_mtrldef.zxmtrlmode LIKE @zxmtrlmode");
  201. parms.Add("@zxmtrlmode", "%" + mtrldef.zxmtrlmode + "%");
  202. }
  203. if (!string.IsNullOrEmpty(mtrldef.usermtrlmode))
  204. {
  205. whereList.Add("u_mtrldef.usermtrlmode LIKE @usermtrlmode");
  206. parms.Add("@usermtrlmode", "%" + mtrldef.usermtrlmode + "%");
  207. }
  208. if (!string.IsNullOrEmpty(mtrldef.plancode))
  209. {
  210. whereList.Add("u_mtrldef.plancode LIKE @plancode");
  211. parms.Add("@plancode", "%" + mtrldef.plancode + "%");
  212. }
  213. if (!string.IsNullOrEmpty(mtrldef.mtrlengname))
  214. {
  215. whereList.Add("u_mtrldef.mtrlengname LIKE @mtrlengname");
  216. parms.Add("@mtrlengname", "%" + mtrldef.mtrlengname + "%");
  217. }
  218. }
  219. if (mtrldef.flag != null && mtrldef.flag != -1)
  220. {
  221. whereList.Add("u_mtrldef.flag = @flag");
  222. parms.Add("@flag", mtrldef.flag);
  223. }
  224. var whereStr = ListEx.GetWhereStr(whereList);
  225. var orderStr = "mtrlcode";
  226. DbSqlHelper.SelectJoin(cmd, selectStr, whereStr, parms, orderStr, outputFields, pageindex,
  227. pagesize, mtrldefList, ref total);
  228. return mtrldefList;
  229. }
  230. public List<u_sc_workgroup_erp> GetERPScWorkgroup(SqlCommand cmd)
  231. {
  232. var selectStr = @" SELECT wrkGrpid,
  233. wrkgrpcode,
  234. wrkGrpName,
  235. ifjj,
  236. ifprint,
  237. handtype,
  238. sonflag,
  239. parentid,
  240. inuse,
  241. storageid,
  242. opdate,
  243. opemp,
  244. moddate,
  245. modemp,
  246. ifwkpmtrlware,
  247. dscrp,
  248. empnum,
  249. avggz,
  250. jdtype,
  251. jdnum,
  252. tasktype,
  253. sys_changetime,
  254. userate,
  255. deptid,
  256. OTHour,
  257. shortrate,
  258. iflastfinish,
  259. barcode_check,
  260. ifauto_mode,
  261. ifbj,
  262. jjamt,
  263. finflowop
  264. FROM u_sc_workgroup_erp";
  265. var whereList = new List<string>();
  266. var parms = new Dictionary<string, object>();
  267. //if (request.inuse != null && request.inuse.Value != -1)
  268. //{
  269. // whereList.Add("u_sc_workgroup.inuse = @inuse ");
  270. // parms.Add("@inuse", request.inuse.Value);
  271. //}
  272. var scworkgroupList = new List<u_sc_workgroup_erp>();
  273. var outputFields =
  274. "wrkGrpid,wrkgrpcode,wrkGrpName,ifjj,ifprint,handtype,sonflag,parentid,inuse,storageid,opdate,opemp,moddate,modemp,ifwkpmtrlware,dscrp,empnum,avggz,jdtype,jdnum,tasktype,sys_changetime,userate,deptid,OTHour,shortrate,iflastfinish,barcode_check,ifauto_mode,ifbj,jjamt,finflowop";
  275. DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), parms, "wrkgrpcode", outputFields, 0, 0, scworkgroupList);
  276. return scworkgroupList;
  277. }
  278. public List<u_mtrltype> GetERPMtrltype(SqlCommand cmd)
  279. {
  280. var selectStr = @"
  281. SELECT
  282. mtrltypeid,
  283. mtrltype,
  284. handtype,
  285. sonflag,
  286. parentid,
  287. mtrlprp,
  288. typecode,
  289. typecodestr
  290. FROM u_mtrltype_erp";
  291. var outputFields = "mtrltypeid,mtrltype,handtype,sonflag,parentid,mtrlprp,typecode,typecodestr";
  292. var mtrltypeList = new List<u_mtrltype>();
  293. DbSqlHelper.SelectJoin(cmd, selectStr, null, null, null, outputFields, 0, 0, mtrltypeList);
  294. return mtrltypeList;
  295. }
  296. // 提取请求构建逻辑
  297. private JObject BuildRequest(JObject parameters)
  298. {
  299. var request = new JObject { ["token"] = GlobalVar.ERP_TOKEN };
  300. parameters = parameters ?? new JObject();
  301. foreach (var param in parameters)
  302. {
  303. request.Add(param.Key, param.Value);
  304. }
  305. return request;
  306. }
  307. private bool IsTokenExpired(Exception ex)
  308. {
  309. const string expiredFlag = "已与服务器失联";
  310. return ex.Message.Contains(expiredFlag);
  311. }
  312. /// <summary>
  313. /// 保存物料资料,成功后保存erp_mtrlid
  314. /// </summary>
  315. /// <param name="mtrl">核价物料资料</param>
  316. /// <returns>错误信息</returns>
  317. public string SaveMtrldef(u_mattress mtrl, List<u_mattress_interface> interfaceList = null, string fields = "mtrlname,mtrlmode,mtrltypeid,mtrltype,unit,mtrlengname,configcode,configname,model,configcodetype")
  318. {
  319. var errMsg = string.Empty;
  320. var configure2 = (JArray)null;
  321. if (interfaceList != null)
  322. {
  323. configure2 = new JArray { };
  324. foreach (var item in interfaceList)
  325. {
  326. configure2.Add(new JObject()
  327. {
  328. ["pzid"] = item.erp_pzid,
  329. ["pzcode"] = item.pzcode,
  330. ["pzname"] = item.bj_pzname,
  331. ["pznamemx"] = item.bj_namemx
  332. });
  333. }
  334. }
  335. var l1Req = new JObject()
  336. {
  337. ["token"] = GlobalVar.ERP_TOKEN,
  338. ["mtrls"] = new JArray
  339. {
  340. new JObject()
  341. {
  342. ["mtrlid"] = mtrl.erp_mtrlid,
  343. ["mtrlcode"] = mtrl.erp_mtrlcode,
  344. ["mtrlname"] = mtrl.erp_mtrlname,
  345. ["mtrlmode"] = mtrl.erp_mtrlmode,
  346. ["mtrltypeid"] = mtrl.erp_mtrltypeid,
  347. ["mtrltype"] = mtrl.erp_mtrltype,
  348. ["unit"] = mtrl.erp_mtrlunit,
  349. ["mtrlengname"] = mtrl.erp_mtrlengname,
  350. ["dijia_cost"] = mtrl.dijia_cost, // 底价1
  351. ["dijia_cost2"] = mtrl.dijia_cost, // 底价2
  352. ["dijia_cost3"] = mtrl.dijia_cost, // 底价3
  353. ["fob"] = mtrl.fob, // fob费用
  354. ["taxes"] = mtrl.taxes, // 税金
  355. ["extras_cost"] = mtrl.extras_cost, // 额外费用
  356. ["planprice"] = mtrl.nottax_factory_cost, // 计划价
  357. ["bj_mxdscrp"] = mtrl.bj_mxdscrp,
  358. ["configcode"] = mtrl.configcode,
  359. ["configname"] = mtrl.configname,
  360. ["model"] = mtrl.model,
  361. ["configcodetype"] = mtrl.erp_configcodetype,
  362. ["mtrl_config2"] = configure2
  363. }
  364. },
  365. ["updateFields"] = fields
  366. };
  367. var l1Rslt = DoExecute("SaveMtrldef", JObject.FromObject(l1Req));
  368. errMsg = $"{l1Rslt.GetValue("ErrMsg")}";
  369. if (string.IsNullOrEmpty(errMsg))
  370. {
  371. mtrl.erp_mtrlid = (l1Rslt.GetValue("mtrlids") as JArray)[0].Value<int>();
  372. mtrl.erp_mtrlcode = (l1Rslt.GetValue("mtrlcodes") as JArray)[0].Value<string>();
  373. Trace.Write($"Update erp_mtrlid={mtrl.erp_mtrlid} WHERE mattressid={mtrl.mattressid} AND erp_mtrlcode={mtrl.erp_mtrlcode}");
  374. DbSqlHelper.Update(cmd, mtrl, "erp_mtrlid");
  375. }
  376. return errMsg;
  377. }
  378. /// <summary>
  379. /// 更新床垫相关选项
  380. /// </summary>
  381. /// <param name="mattress"></param>
  382. public u_mattress GetMattressMsg(u_mattress mattress, List<u_mattress_interface> interfaceList)
  383. {
  384. var errMsg = string.Empty;
  385. var mattresstype = new u_mattress_type();
  386. if (DbSqlHelper.SelectOne(cmd, "u_mattress_type", "mattresstypeid = @mattresstypeid", new Dictionary<string, object>() { { "mattresstypeid", mattress.mattresstypeid } }, mattresstype, "typename") == 1)
  387. {
  388. mattress.model = mattresstype.typename;
  389. }
  390. var lde_dijia_cost = mattress.nottax_factory_cost / (mattress.dept_profitrate + mattress.dept_profitrate_rangli / 100);
  391. var lde_commission = lde_dijia_cost / (1 - (mattress.commission - 1)) - lde_dijia_cost;
  392. 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");
  393. mattress.bj_mxdscrp = ls_bj_mxdscrp;
  394. mattress.dijia_cost = lde_dijia_cost;
  395. string ls_configcode = "", ls_configname = "";
  396. foreach (var item in interfaceList)
  397. {
  398. string ls_temp_pzcode = item.pzcode;
  399. string ls_temp_str, ls_temp_pznamemx, ls_temp_pzname = item.pzname;
  400. ls_temp_str = item.actual_size + item.sb_craft + item.actual_size_sb;
  401. 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");
  402. item.bj_namemx = ls_temp_pznamemx;
  403. ls_configcode = ls_configcode + ls_temp_pznamemx + "|";
  404. ls_configname = ls_configname + ls_temp_pzname + ":" + ls_temp_pznamemx + "|";
  405. }
  406. mattress.configcode = ls_configcode;
  407. mattress.configname = ls_configname;
  408. return mattress;
  409. }
  410. /// <summary>
  411. /// 更新L1计划价 wf_updateL1_planprice
  412. /// </summary>
  413. /// <param name="mattress"></param>
  414. public string UpdateL1Planprice(int erp_mtrlid, decimal value)
  415. {
  416. var errMsg = string.Empty;
  417. var l1Req = new JObject()
  418. {
  419. ["token"] = GlobalVar.ERP_TOKEN,
  420. ["mtrlid"] = erp_mtrlid,
  421. ["value"] = value,
  422. };
  423. var l1Rslt = DoExecute("UpdateMtrldefPlanPrice", JObject.FromObject(l1Req));
  424. errMsg = $"{l1Rslt.GetValue("ErrMsg")}";
  425. return errMsg;
  426. }
  427. }
  428. }