BarcodePrint.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using Curtain.DataAccess;
  7. using Curtain.Extension.ExObjectConvert;
  8. using Curtain.Extension.ExSystemData;
  9. using Curtain.Framework.Json;
  10. using Curtain.Helpers;
  11. using Curtain.Log;
  12. using Curtain.Net.Sockets.PLC;
  13. using Curtain.Net.Sockets.PLC.Model;
  14. using Curtain.Net.Sockets.PLC.Model.Melsec;
  15. using Curtain.Net.Sockets.PLC.Model.Siemens;
  16. using PLC_S.Proxy;
  17. namespace PLC_S.ServerModel
  18. {
  19. /// <summary>
  20. /// 条码打印
  21. /// </summary>
  22. public class BarcodePrint : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
  23. {
  24. public Dictionary<string, PLC_S_BP> PLC_FLAGS = new Dictionary<string, PLC_S_BP>();
  25. public const string M_NAME = "BP";
  26. private MES_S _mes_s = null;
  27. private readonly Logger logger = Logger.CreateLogger(M_NAME);
  28. private readonly LogInfo logger_t = new LogInfo();
  29. private readonly LogInfo logger_e = new LogInfo();
  30. public int Interval
  31. {
  32. get;
  33. set;
  34. }
  35. public string EPTS_CODE
  36. {
  37. get;
  38. set;
  39. }
  40. public BarcodePrint()
  41. {
  42. logger.FileExistDays = 30;
  43. logger.FilePrefix = "";
  44. logger.FileSuffix = M_NAME;
  45. logger.LevelOneFile = true;
  46. logger.FileNameWithoutDate = true;
  47. logger_t.SubFolderFormat = "<name>";
  48. logger_t.FileExistDays = 30;
  49. logger_t.LevelOneFile = true;
  50. logger_e.FileExistDays = 10;
  51. this.Model.FormatType = CommandFormatType.StartStopChar;
  52. this.ServerStarting += ServerSocket_ServerStarting;
  53. this.ServerStarted += ServerSocket_ServerStarted;
  54. this.ServerStoping += ServerSocket_ServerStoping;
  55. this.ServerStoped += ServerSocket_ServerStoped;
  56. this.ServerMessage += ServerSocket_ServerMessage;
  57. this.Received += ServerSocket_Received;
  58. _mes_s = MES_S.Get();
  59. }
  60. #region Server
  61. public IFormLogShow FormLogShow
  62. {
  63. get;
  64. set;
  65. }
  66. private void ServerSocket_ServerStarting(object sender, CancelEventArgs e)
  67. {
  68. try
  69. {
  70. logger.OutputTrace($"{M_NAME}_ServerStarting");
  71. }
  72. catch { }
  73. }
  74. private void ServerSocket_ServerStarted(object sender, EventArgs e)
  75. {
  76. try
  77. {
  78. logger.OutputTrace($"{M_NAME}_ServerStarted");
  79. }
  80. catch { }
  81. }
  82. private void ServerSocket_ServerStoping(object sender, CancelEventArgs e)
  83. {
  84. try
  85. {
  86. logger.OutputTrace($"{M_NAME}_ServerStoping");
  87. }
  88. catch { }
  89. }
  90. private void ServerSocket_ServerStoped(object sender, EventArgs e)
  91. {
  92. try
  93. {
  94. logger.OutputTrace($"{M_NAME}_ServerStoped");
  95. }
  96. catch { }
  97. }
  98. private void ServerSocket_ServerMessage(object sender, ServerMessageEventArgs e)
  99. {
  100. try
  101. {
  102. string message = e.ToString();
  103. string cip = e?.Client?.IP;
  104. if (e.Type == ServerMessageType.Debug)
  105. {
  106. Logger.Debug(message, $"{M_NAME}-T[{cip}]", logger_t);
  107. }
  108. if (e.Type == ServerMessageType.Error)
  109. {
  110. Logger.Error(e.Exception, message, $"{M_NAME}-E[{cip}]", logger_e);
  111. }
  112. if (e.Type == ServerMessageType.Trace)
  113. {
  114. Logger.Trace(message, $"{M_NAME}-T[{cip}]", logger_t);
  115. }
  116. if (e.Type == ServerMessageType.Warning)
  117. {
  118. Logger.Warn(message, $"{M_NAME}-E[{cip}]", logger_e);
  119. }
  120. FormLogShow?.ShowLog("ServerMessage=" + message);
  121. }
  122. catch { }
  123. }
  124. #endregion
  125. /// <summary>
  126. /// 返回产品型号
  127. /// </summary>
  128. /// <param name="sender"></param>
  129. /// <param name="e"></param>
  130. private void ServerSocket_Received(object sender, ReceiveSession e)
  131. {
  132. PLC_S_BP plc_s = null;
  133. string cIP = e?.Client?.IP;
  134. string logKeyT = $"{M_NAME}-T[{cIP}]";
  135. string logKeyE = $"{M_NAME}-E[{cIP}]";
  136. SocketClient<SiemensS7_1200Model> plc = null;
  137. Logger LoggerT = null;
  138. try
  139. {
  140. LoggerT = Logger.CreateLogger(logKeyT, logger_t);
  141. lock (LoggerT)
  142. {
  143. LoggerT.BeginTracking();
  144. string outputMessage = e.ToString();
  145. Logger.Trace(outputMessage, logKeyT, logger_t);
  146. FormLogShow?.ShowLog(outputMessage);
  147. if (string.IsNullOrWhiteSpace(e.Content))
  148. {
  149. outputMessage = "接收数据为空";
  150. Logger.Warn(outputMessage, logKeyT, logger_t);
  151. Logger.Warn(outputMessage, logKeyE, logger_e);
  152. FormLogShow?.ShowLog(outputMessage);
  153. return;
  154. }
  155. outputMessage = e.Content;
  156. Logger.Trace(outputMessage, logKeyT, logger_t);
  157. FormLogShow?.ShowLog(outputMessage);
  158. string[] c = e.Content.Split('#');
  159. string flag = null;
  160. if (c.Length > 0)
  161. {
  162. flag = c[0];
  163. }
  164. string barcode = null;
  165. if (c.Length > 1)
  166. {
  167. barcode = c[1];
  168. }
  169. if (string.IsNullOrWhiteSpace(flag))
  170. {
  171. outputMessage = $"[{e.Content}]接收设备代码为空";
  172. Logger.Warn(outputMessage, logKeyT, logger_t);
  173. Logger.Warn(outputMessage, logKeyE, logger_e);
  174. FormLogShow?.ShowLog(outputMessage);
  175. return;
  176. }
  177. plc_s = GetPLC_S_BP(flag, e, logKeyE);
  178. if (plc_s == null || string.IsNullOrWhiteSpace(plc_s.IP) || plc_s.Port == 0)
  179. {
  180. outputMessage = $"[{e.Content}]设备代码[{flag}]未找到ini配置或有错误";
  181. Logger.Error(null, outputMessage, logKeyT, logger_t);
  182. Logger.Error(null, outputMessage, logKeyE, logger_e);
  183. FormLogShow?.ShowLog(outputMessage);
  184. return;
  185. }
  186. outputMessage = $"[{e.Content}]PLC_Connect={JsonHelper.FromObject(plc_s)}";
  187. Logger.Trace(outputMessage, logKeyT, logger_t);
  188. FormLogShow?.ShowLog(outputMessage);
  189. plc = new SocketClient<SiemensS7_1200Model>();
  190. plc.Connect(plc_s.IP, plc_s.Port);
  191. //outputMessage = $"[{e.Content}]PLC_Connect=[{plc_s.IP}:{plc_s.Port}]";
  192. //Logger.Trace(outputMessage, logKeyT, logger_t);
  193. //FormLogShow?.ShowLog(outputMessage);
  194. if (string.IsNullOrWhiteSpace(barcode) ||
  195. barcode == "0" ||
  196. barcode.Length != 11 ||
  197. barcode.StartsWith("0"))
  198. {
  199. outputMessage = $"[{e.Content}]接收条码格式错误";
  200. Logger.Warn(outputMessage, logKeyT, logger_t);
  201. Logger.Warn(outputMessage, logKeyE, logger_e);
  202. FormLogShow?.ShowLog(outputMessage);
  203. SendError(plc_s, e, logKeyT, logKeyE, plc);
  204. return;
  205. }
  206. string usercode = "";
  207. string code;
  208. short intcode;
  209. short intLogoid;
  210. using (IDataAccess dataAccess = PLC_S_DataAccess.GetDataAccess())
  211. {
  212. string sqlString = @"
  213. SELECT t.usercode
  214. FROM tp_mst_workstation t
  215. WHERE t.workstationtypeid = 3161
  216. AND t.workstationid = @workstationid@
  217. ";
  218. CDAParameter[] ps = new CDAParameter[]
  219. {
  220. new CDAParameter("workstationid", plc_s.WS_ID),
  221. };
  222. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, ps);
  223. if (dataTable.HasData())
  224. {
  225. usercode = dataTable.Rows[0]["usercode"].ToString();
  226. }
  227. DataRow codeRow = GetGoodsCode(dataAccess, barcode, e, logKeyE);
  228. if (codeRow == null)
  229. {
  230. outputMessage = $"[{e.Content}]此条码[{barcode}]不存在";
  231. Logger.Warn(outputMessage, logKeyT, logger_t);
  232. Logger.Warn(outputMessage, logKeyE, logger_e);
  233. FormLogShow?.ShowLog(outputMessage);
  234. SendError(plc_s, e, logKeyT, logKeyE, plc);
  235. return;
  236. }
  237. code = codeRow["goodscode"].ToString();
  238. intcode = codeRow["seatcovercode"].ToInt16();
  239. intLogoid = codeRow["logoid"].ToInt16();
  240. }
  241. outputMessage = $"[{e.Content}]产品型号={code}[{intcode}]{intLogoid}";
  242. Logger.Trace(outputMessage, logKeyT, logger_t);
  243. FormLogShow?.ShowLog(outputMessage);
  244. if (intcode == 0)
  245. {
  246. outputMessage = $"[{e.Content}]此条码[{barcode}]未设置型号代码";
  247. Logger.Error(null, outputMessage, logKeyT, logger_t);
  248. Logger.Error(null, outputMessage, logKeyE, logger_e);
  249. FormLogShow?.ShowLog(outputMessage);
  250. SendError(plc_s, e, logKeyT, logKeyE, plc);
  251. return;
  252. }
  253. PLCResult plc_r = null;
  254. // 写入PLC 型号
  255. outputMessage = $"[{e.Content}]SET_G_Code=[{intcode}]{plc_s.Add_SeatCoverCode + plc_s.Add_SeatCoverCodeNum}";
  256. Logger.Trace(outputMessage, logKeyT, logger_t);
  257. FormLogShow?.ShowLog(outputMessage);
  258. PLCResult p_r = plc.Write<short>(plc_s.Add_SeatCoverCode, plc_s.Add_SeatCoverCodeNum, intcode);
  259. outputMessage = $"[{e.Content}]END_G_Code=[{p_r}]{plc_s.Add_SeatCoverCode + plc_s.Add_SeatCoverCodeNum}";
  260. Logger.Trace(outputMessage, logKeyT, logger_t);
  261. FormLogShow?.ShowLog(outputMessage);
  262. // 写入PLC 商标
  263. outputMessage = $"[{e.Content}]SET_L_Code=[{intLogoid}]{plc_s.Add_L_Code + plc_s.Add_L_CodeNum}";
  264. Logger.Trace(outputMessage, logKeyT, logger_t);
  265. FormLogShow?.ShowLog(outputMessage);
  266. p_r = plc.Write<short>(plc_s.Add_L_Code, plc_s.Add_L_CodeNum, intLogoid);
  267. outputMessage = $"[{e.Content}]END_L_Code=[{p_r}]{plc_s.Add_L_Code + plc_s.Add_L_CodeNum}";
  268. Logger.Trace(outputMessage, logKeyT, logger_t);
  269. FormLogShow?.ShowLog(outputMessage);
  270. // 写入条码读取状态
  271. outputMessage = $"[{e.Content}]SET_R_CODE=[1]{plc_s.Add_BarCodeReadFlag + plc_s.Add_BarCodeReadFlagNum}";
  272. Logger.Trace(outputMessage, logKeyT, logger_t);
  273. FormLogShow?.ShowLog(outputMessage);
  274. p_r = plc.Write<short>(plc_s.Add_BarCodeReadFlag, plc_s.Add_BarCodeReadFlagNum, 1);
  275. outputMessage = $"[{e.Content}]END_R_CODE=[{p_r}]{plc_s.Add_BarCodeReadFlag + plc_s.Add_BarCodeReadFlagNum}";
  276. Logger.Trace(outputMessage, logKeyT, logger_t);
  277. FormLogShow?.ShowLog(outputMessage);
  278. outputMessage = $"[{e.Content}]BEGIN_PRINT=[{plc_s.BEGIN_PRINT}]";
  279. Logger.Trace(outputMessage, logKeyT, logger_t);
  280. FormLogShow?.ShowLog(outputMessage);
  281. // xuwei add 由PLC地址控制包装线是 自动帖标 还是 手动打印
  282. // plc_s.Add_PrintCode; plc_s.Add_PrintCodeNum;
  283. // ============================================================
  284. if (!string.IsNullOrEmpty(plc_s.Add_PrintCode) && !string.IsNullOrEmpty(plc_s.Add_PrintCodeNum))
  285. {
  286. //由PLC标识位控制
  287. //读取自动帖标 标识==============================================================
  288. outputMessage = $"[{e.Content}]GET_PrintCode=[]{plc_s.Add_PrintCode + plc_s.Add_PrintCodeNum}";
  289. Logger.Trace(outputMessage, logKeyT, logger_t);
  290. FormLogShow?.ShowLog(outputMessage);
  291. PLCResult<short> se_read = plc.Read<short>(plc_s.Add_PrintCode, plc_s.Add_PrintCodeNum, 1);
  292. outputMessage = $"[{e.Content}]END_PrintCode=[{se_read.ToString()}]{plc_s.Add_PrintCode + plc_s.Add_PrintCodeNum}";
  293. Logger.Trace(outputMessage, logKeyT, logger_t);
  294. FormLogShow?.ShowLog(outputMessage);
  295. string printCode = se_read.Data.ToString();
  296. if( printCode != "1" )
  297. {
  298. return;
  299. }
  300. //===============================================================================
  301. }
  302. else
  303. {
  304. //原始逻辑(如果配置文件没有配置PLC地址使用INI配置)
  305. //TODO 临时只返回型号信息,不打印
  306. if (plc_s.BEGIN_PRINT == null || plc_s.BEGIN_PRINT != "1")
  307. {
  308. return;
  309. }
  310. }
  311. // ============================================================
  312. //xuwei end
  313. //MES_S _mes_s = MES_S.Get();
  314. string result = SmartDeviceProxy.Instance.Invoke<string>(
  315. p => p.PrintBarcode_3BL(
  316. _mes_s.AccountCode,
  317. usercode,
  318. barcode,
  319. plc_s.WS_ID));
  320. outputMessage = $"[{e.Content}]MES_Result=[{result}]";
  321. Logger.Trace(outputMessage, logKeyT, logger_t);
  322. FormLogShow?.ShowLog(outputMessage);
  323. // 返回状态(成功、失败)
  324. if (result == "OK")
  325. {
  326. // 条码打印任务发送状态
  327. outputMessage = $"[{e.Content}]SET_F_Code=[1]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  328. Logger.Trace(outputMessage, logKeyT, logger_t);
  329. FormLogShow?.ShowLog(outputMessage);
  330. p_r = plc.Write<short>(plc_s.Add_F_Code, plc_s.Add_F_CodeNum, 1);
  331. outputMessage = $"[{e.Content}]END_F_Code=[{p_r}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  332. Logger.Trace(outputMessage, logKeyT, logger_t);
  333. FormLogShow?.ShowLog(outputMessage);
  334. // 通信异常标识
  335. outputMessage = $"[{e.Content}]SET_E_CODE=[0]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  336. Logger.Trace(outputMessage, logKeyT, logger_t);
  337. FormLogShow?.ShowLog(outputMessage);
  338. p_r = plc.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, 0);
  339. outputMessage = $"[{e.Content}]END_E_CODE=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  340. Logger.Trace(outputMessage, logKeyT, logger_t);
  341. FormLogShow?.ShowLog(outputMessage);
  342. return;
  343. }
  344. else if (result == "EE")
  345. {
  346. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  347. }
  348. else if (result == "EU-01")
  349. {
  350. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  351. }
  352. else
  353. {
  354. outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  355. }
  356. // 通信异常标识
  357. outputMessage = $"[{e.Content}]SET_E_CODE=[1]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  358. Logger.Trace(outputMessage, logKeyT, logger_t);
  359. FormLogShow?.ShowLog(outputMessage);
  360. p_r = plc.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, 1);
  361. outputMessage = $"[{e.Content}]END_E_CODE=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  362. Logger.Trace(outputMessage, logKeyT, logger_t);
  363. FormLogShow?.ShowLog(outputMessage);
  364. }
  365. }
  366. catch (Exception ex)
  367. {
  368. FormLogShow?.ShowLog($"[{e.Content}]ERROR={ex.Message}");
  369. if (plc_s != null)
  370. {
  371. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyT, logger_t);
  372. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyE, logger_e);
  373. SendError(plc_s, e, logKeyT, logKeyE, plc);
  374. }
  375. else
  376. {
  377. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyT, logger_t);
  378. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyE, logger_e);
  379. }
  380. }
  381. finally
  382. {
  383. LoggerT?.EndTracking();
  384. plc?.Disconnect();
  385. plc?.Close();
  386. }
  387. }
  388. private void SendError(PLC_S_BP plc_s, ReceiveSession e, string loggerNameT,
  389. string loggerNameE, SocketClient<SiemensS7_1200Model> plc)
  390. {
  391. try
  392. {
  393. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  394. {
  395. string outputMessage = $"[{e.Content}]SET_E_CODE=[1]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  396. Logger.Trace(outputMessage, loggerNameT, logger_t);
  397. FormLogShow?.ShowLog(outputMessage);
  398. PLCResult p_r = plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)1);
  399. outputMessage = $"[{e.Content}]END_E_CODE=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  400. Logger.Trace(outputMessage, loggerNameT, logger_t);
  401. FormLogShow?.ShowLog(outputMessage);
  402. }
  403. }
  404. catch (Exception ex)
  405. {
  406. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameT, logger_t);
  407. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameE, logger_e);
  408. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendError={ex.Message}");
  409. }
  410. }
  411. private PLC_S_BP GetPLC_S_BP(string flag, ReceiveSession e, string loggerName)
  412. {
  413. try
  414. {
  415. flag = M_NAME + flag;
  416. if (PLC_FLAGS.ContainsKey(flag))
  417. {
  418. return PLC_FLAGS[flag];
  419. }
  420. else
  421. {
  422. PLC_S_BP plc_s = new PLC_S_BP();
  423. INIHelper ini = INIHelper.Create($@"PLC_S_INI\PLC_S_{M_NAME}.ini");
  424. plc_s.IP = ini.Read(flag, "IP");
  425. plc_s.Port = ini.Read(flag, "Port").ToInt32();
  426. plc_s.WS_ID = ini.Read(flag, "WS_ID").ToInt32();
  427. plc_s.Add_SeatCoverCode = ini.Read(flag, "Add_SeatCoverCode");
  428. plc_s.Add_SeatCoverCodeNum = ini.Read(flag, "Add_SeatCoverCodeNum");
  429. plc_s.Add_BarCodeReadFlag = ini.Read(flag, "Add_BarCodeReadFlag");
  430. plc_s.Add_BarCodeReadFlagNum = ini.Read(flag, "Add_BarCodeReadFlagNum");
  431. plc_s.Add_F_Code = ini.Read(flag, "Add_F_Code");
  432. plc_s.Add_F_CodeNum = ini.Read(flag, "Add_F_CodeNum");
  433. plc_s.Add_Error = ini.Read(flag, "Add_Error");
  434. plc_s.Add_ErrorNum = ini.Read(flag, "Add_ErrorNum");
  435. plc_s.Add_L_Code = ini.Read(flag, "Add_L_Code");
  436. plc_s.Add_L_CodeNum = ini.Read(flag, "Add_L_CodeNum");
  437. plc_s.BEGIN_PRINT = ini.Read(flag, "BEGIN_PRINT");
  438. //xuwei add 2022-02-14 用于控制 自动帖标 或 手动帖标
  439. plc_s.Add_PrintCode = ini.Read(flag, "Add_PrintCode");
  440. plc_s.Add_PrintCodeNum = ini.Read(flag, "Add_PrintCodeNum");
  441. PLC_FLAGS.Add(flag, plc_s);
  442. return plc_s;
  443. }
  444. }
  445. catch (Exception ex)
  446. {
  447. Logger.Error(ex, $"[{e.Content}]ERROR-GetPLC_S_BP", loggerName, logger_e);
  448. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetPLC_S_BP={ex.Message}");
  449. return null;
  450. }
  451. }
  452. private DataRow GetGoodsCode(IDataAccess dataAccess, string barcode, ReceiveSession e, string loggerName)
  453. {
  454. //IDataAccess dataAccess = null;
  455. try
  456. {
  457. //dataAccess = PLC_S_DataAccess.GetDataAccess(e);
  458. string sqlString = "select g.goodscode, g.seatcovercode, gdd.logoid\n" +
  459. " from tp_pm_groutingdailydetail gdd\n" +
  460. " inner join tp_mst_goods g\n" +
  461. " on g.goodsid = gdd.goodsid\n" +
  462. " where gdd.barcode = :barcode";
  463. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, new CDAParameter(":barcode", barcode));
  464. if (dataTable.HasData())
  465. {
  466. return dataTable.Rows[0];
  467. }
  468. return null;
  469. }
  470. catch (Exception ex)
  471. {
  472. Logger.Error(ex, $"[{e.Content}]ERROR-GetGoodsCode", loggerName, logger_e);
  473. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetGoodsCode={ex.Message}");
  474. return null;
  475. }
  476. //finally
  477. //{
  478. // dataAccess?.Close();
  479. //}
  480. }
  481. }
  482. }