GoodsLevel_QR2.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.ServiceModel;
  7. using Curtain.DataAccess;
  8. using Curtain.Extension.ExCompareOperator;
  9. using Curtain.Extension.ExObjectConvert;
  10. using Curtain.Extension.ExSystemData;
  11. using Curtain.Framework.Json;
  12. using Curtain.Helpers;
  13. using Curtain.Log;
  14. using Curtain.Net.Sockets.PLC;
  15. using Curtain.Net.Sockets.PLC.Model;
  16. using Curtain.Net.Sockets.PLC.Model.Siemens;
  17. using PLC_S.Proxy;
  18. namespace PLC_S.ServerModel
  19. {
  20. /// <summary>
  21. /// 返回扫码结果(0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码验证错误)等信息(3#刮登对接乾润)
  22. /// </summary>
  23. public class GoodsLevel_QR2 : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
  24. {
  25. public Dictionary<string, PLC_S_GL_QR> PLC_FLAGS = new Dictionary<string, PLC_S_GL_QR>();
  26. public const string M_NAME = "GL_QR";
  27. private MES_S _mes_s = null;
  28. private readonly Logger logger = Logger.CreateLogger(M_NAME);
  29. private readonly LogInfo logger_t = new LogInfo();
  30. private readonly LogInfo logger_e = new LogInfo();
  31. private bool _S_STOP = false;
  32. public int Interval
  33. {
  34. get;
  35. set;
  36. }
  37. public string EPTS_CODE
  38. {
  39. get;
  40. set;
  41. }
  42. public GoodsLevel_QR2()
  43. {
  44. logger.FileExistDays = 30;
  45. logger.FilePrefix = "";
  46. logger.FileSuffix = M_NAME;
  47. logger.LevelOneFile = true;
  48. logger.FileNameWithoutDate = true;
  49. logger_t.SubFolderFormat = "<name>";
  50. logger_t.FileExistDays = 30;
  51. logger_t.LevelOneFile = true;
  52. logger_e.FileExistDays = 10;
  53. this.Model.FormatType = CommandFormatType.StartStopChar;
  54. this.ServerStarting += ServerSocket_ServerStarting;
  55. this.ServerStarted += ServerSocket_ServerStarted;
  56. this.ServerStoping += ServerSocket_ServerStoping;
  57. this.ServerStoped += ServerSocket_ServerStoped;
  58. this.ServerMessage += ServerSocket_ServerMessage;
  59. this.Received += ServerSocket_Received;
  60. _mes_s = MES_S.Get();
  61. }
  62. #region Server
  63. public IFormLogShow FormLogShow
  64. {
  65. get;
  66. set;
  67. }
  68. private void ServerSocket_ServerStarting(object sender, CancelEventArgs e)
  69. {
  70. try
  71. {
  72. _S_STOP = false;
  73. logger.OutputTrace($"{M_NAME}_ServerStarting");
  74. }
  75. catch { }
  76. }
  77. private void ServerSocket_ServerStarted(object sender, EventArgs e)
  78. {
  79. try
  80. {
  81. _S_STOP = false;
  82. logger.OutputTrace($"{M_NAME}_ServerStarted");
  83. }
  84. catch { }
  85. }
  86. private void ServerSocket_ServerStoping(object sender, CancelEventArgs e)
  87. {
  88. try
  89. {
  90. _S_STOP = false;
  91. logger.OutputTrace($"{M_NAME}_ServerStoping");
  92. }
  93. catch { }
  94. }
  95. private void ServerSocket_ServerStoped(object sender, EventArgs e)
  96. {
  97. try
  98. {
  99. _S_STOP = false;
  100. logger.OutputTrace($"{M_NAME}_ServerStoped");
  101. }
  102. catch { }
  103. }
  104. private void ServerSocket_ServerMessage(object sender, ServerMessageEventArgs e)
  105. {
  106. try
  107. {
  108. _S_STOP = false;
  109. string message = e.ToString();
  110. string cip = e?.Client?.IP;
  111. if (e.Type == ServerMessageType.Debug)
  112. {
  113. Logger.Debug(message, $"{M_NAME}-T[{cip}]", logger_t);
  114. }
  115. if (e.Type == ServerMessageType.Error)
  116. {
  117. Logger.Error(e.Exception, message, $"{M_NAME}-E[{cip}]", logger_e);
  118. }
  119. if (e.Type == ServerMessageType.Trace)
  120. {
  121. Logger.Trace(message, $"{M_NAME}-T[{cip}]", logger_t);
  122. }
  123. if (e.Type == ServerMessageType.Warning)
  124. {
  125. Logger.Warn(message, $"{M_NAME}-E[{cip}]", logger_e);
  126. }
  127. FormLogShow?.ShowLog("ServerMessage=" + message);
  128. }
  129. catch { }
  130. }
  131. #endregion
  132. int int_code = 0;
  133. /// <summary>
  134. /// 返回产品型号
  135. /// </summary>
  136. /// <param name="sender"></param>
  137. /// <param name="e"></param>
  138. private void ServerSocket_Received(object sender, ReceiveSession e)
  139. {
  140. PLC_S_GL_QR plc_s = null;
  141. string cIP = e?.Client?.IP;
  142. string logKeyT = $"{M_NAME}-T[{cIP}]";
  143. string logKeyE = $"{M_NAME}-E[{cIP}]";
  144. _S_STOP = false;
  145. SocketClient<SiemensS7_1200Model> plc = null;
  146. Logger LoggerT = null;
  147. try
  148. {
  149. LoggerT = Logger.CreateLogger(logKeyT, logger_t);
  150. lock (LoggerT)
  151. {
  152. LoggerT.BeginTracking();
  153. string outputMessage = e.ToString();
  154. Logger.Trace(outputMessage, logKeyT, logger_t);
  155. FormLogShow?.ShowLog(outputMessage);
  156. if (string.IsNullOrWhiteSpace(e.Content))
  157. {
  158. outputMessage = "接收数据为空";
  159. Logger.Warn(outputMessage, logKeyT, logger_t);
  160. Logger.Warn(outputMessage, logKeyE, logger_e);
  161. FormLogShow?.ShowLog(outputMessage);
  162. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  163. return;
  164. }
  165. outputMessage = e.Content;
  166. Logger.Trace(outputMessage, logKeyT, logger_t);
  167. FormLogShow?.ShowLog(outputMessage);
  168. string[] c = e.Content.Split('#');
  169. string flag = null;
  170. if (c.Length > 0)
  171. {
  172. flag = c[0];
  173. }
  174. string barcode = null;
  175. if (c.Length > 1)
  176. {
  177. barcode = c[1];
  178. }
  179. if (string.IsNullOrWhiteSpace(flag))
  180. {
  181. outputMessage = $"[{e.Content}]接收设备代码为空";
  182. Logger.Warn(outputMessage, logKeyT, logger_t);
  183. Logger.Warn(outputMessage, logKeyE, logger_e);
  184. FormLogShow?.ShowLog(outputMessage);
  185. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  186. return;
  187. }
  188. //int ws_id = 0;
  189. //if (flag == "0")
  190. //{
  191. // // 3#刮登
  192. // ws_id = 74;
  193. //}
  194. plc_s = GetPLC_S_GC(flag, e, logKeyE);
  195. if (plc_s == null)
  196. {
  197. outputMessage = $"[{e.Content}]设备代码[{flag}]未找到ini配置或有错误";
  198. Logger.Error(null, outputMessage, logKeyT, logger_t);
  199. Logger.Error(null, outputMessage, logKeyE, logger_e);
  200. FormLogShow?.ShowLog(outputMessage);
  201. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  202. return;
  203. }
  204. outputMessage = $"[{e.Content}]PLC_Connect={JsonHelper.FromObject(plc_s)}";
  205. Logger.Trace(outputMessage, logKeyT, logger_t);
  206. FormLogShow?.ShowLog(outputMessage);
  207. plc = new SocketClient<SiemensS7_1200Model>();
  208. plc.Connect(plc_s.IP, plc_s.Port);
  209. if (string.IsNullOrWhiteSpace(barcode) ||
  210. barcode == "0" ||
  211. barcode.Length != 11 ||
  212. barcode.StartsWith("0"))
  213. {
  214. outputMessage = $"[{e.Content}]接收条码格式错误";
  215. Logger.Warn(outputMessage, logKeyT, logger_t);
  216. Logger.Warn(outputMessage, logKeyE, logger_e);
  217. FormLogShow?.ShowLog(outputMessage);
  218. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  219. return;
  220. }
  221. string usercode = "";
  222. string p_id = "";
  223. string goodstypecode = "";
  224. //string se_flag = null;
  225. //string se_flag_code = null;
  226. using (IDataAccess dataAccess = PLC_S_DataAccess.GetDataAccess())
  227. {
  228. string sqlString = "select gdd.GOODSLEVELTYPEID,g.goodstypeid, inp.flowprocedureid,gt.goodstypecode\n" +
  229. " from tp_pm_groutingdailydetail gdd\n" +
  230. " LEFT JOIN tp_pm_inproduction inp on inp.groutingdailydetailid = gdd.groutingdailydetailid\n" +
  231. " inner join tp_mst_goods g on g.goodsid = gdd.goodsid\n" +
  232. " inner join tp_mst_goodsType gt on g.goodstypeid = gt.goodstypeid\n" +
  233. " where gdd.barcode = :barcode";
  234. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, new CDAParameter(":barcode", barcode));
  235. DataRow codeRow = null;
  236. if (dataTable.HasData())
  237. {
  238. codeRow = dataTable.Rows[0];
  239. }
  240. if (codeRow == null)
  241. {
  242. outputMessage = $"[{e.Content}]此条码[{barcode}]不存在";
  243. Logger.Warn(outputMessage, logKeyT, logger_t);
  244. Logger.Warn(outputMessage, logKeyE, logger_e);
  245. FormLogShow?.ShowLog(outputMessage);
  246. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  247. return;
  248. }
  249. p_id = codeRow["flowprocedureid"].ToString();
  250. goodstypecode = codeRow["goodstypecode"].ToString();
  251. #region 刮边工号 从工位配置中读取
  252. sqlString = @"
  253. SELECT t.usercode, u.userid
  254. FROM tp_mst_workstation t
  255. inner join tp_mst_user u on u.usercode = t.usercode
  256. WHERE t.workstationtypeid = 3201
  257. AND t.workstationid = @workstationid@
  258. ";
  259. CDAParameter[] ps = new CDAParameter[]
  260. {
  261. new CDAParameter("workstationid", plc_s.WS_ID),
  262. };
  263. int userid = 0;
  264. dataTable = dataAccess.ExecuteDatatable(sqlString, ps);
  265. if (dataTable.HasData())
  266. {
  267. usercode = dataTable.Rows[0]["usercode"].ToString();
  268. userid = dataTable.Rows[0]["userid"].ToInt32();
  269. }
  270. outputMessage = $"[{e.Content}]DB_UserCode=[{usercode}]";
  271. Logger.Trace(outputMessage, logKeyT, logger_t);
  272. FormLogShow?.ShowLog(outputMessage);
  273. #endregion
  274. // 是否启用防伪码 S_PM_031 这个是验证的
  275. //se_flag = "," + dataAccess.ExecuteScalar("select t.settingvalue from tp_mst_systemsetting t where t.settingcode = 'S_PM_031'") + ",";
  276. //se_flag_code = dataAccess.ExecuteScalar("select t.settingvalue from tp_mst_systemsetting t where t.settingcode = 'S_PM_032'") + "";
  277. }
  278. #region 防伪码处理过程 xuwei add 2021-12-30
  279. //【防伪码】1寄存条码到PLC,用于防伪码绑定读取===================================
  280. outputMessage = $"[{e.Content}]SET_SE_BarCode=[{barcode}]{plc_s.Add_SE_BarCode + plc_s.Add_SE_BarCodeNum}";
  281. Logger.Trace(outputMessage, logKeyT, logger_t);
  282. FormLogShow?.ShowLog(outputMessage);
  283. PLCResult p_r = plc?.Write<string>(plc_s.Add_SE_BarCode, plc_s.Add_SE_BarCodeNum, barcode);
  284. outputMessage = $"[{e.Content}]END_SE_BarCode=[{p_r.ToString()}]{plc_s.Add_SE_BarCode + plc_s.Add_SE_BarCodeNum}";
  285. Logger.Trace(outputMessage, logKeyT, logger_t);
  286. FormLogShow?.ShowLog(outputMessage);
  287. //===============================================================================
  288. //【防伪码】2寄存产品类型到PLC,用于设置控制智能扫码头还是连体扫码头去扫码=======
  289. Int16 goodsType = Convert.ToInt16(GetGoodsType(barcode, e, logKeyT));
  290. outputMessage = $"[{e.Content}]SET_SE_Type=[{goodsType}]{plc_s.Add_SE_Type + plc_s.Add_SE_TypeNum}";
  291. Logger.Trace(outputMessage, logKeyT, logger_t);
  292. FormLogShow?.ShowLog(outputMessage);
  293. p_r = plc?.Write<short>(plc_s.Add_SE_Type, plc_s.Add_SE_TypeNum, goodsType);
  294. outputMessage = $"[{e.Content}]END_SE_Type=[{p_r.ToString()}]{plc_s.Add_SE_Type + plc_s.Add_SE_TypeNum}";
  295. Logger.Trace(outputMessage, logKeyT, logger_t);
  296. FormLogShow?.ShowLog(outputMessage);
  297. //===============================================================================
  298. //【防伪码】3写产品是否验证防伪码标识到PLC,以确定是否继续扫描防伪码还是放行=====
  299. string resultFlag = SmartDeviceProxy.Instance.Invoke<string>(
  300. p => p.GetStatusByBarcode(
  301. _mes_s.AccountCode,
  302. usercode,
  303. barcode,
  304. plc_s.P_ID + ""
  305. ));
  306. if (resultFlag.IndexOf("OK") != 0)
  307. {
  308. if (resultFlag == "EX")
  309. {
  310. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  311. }
  312. else if (resultFlag == "EU-01")
  313. {
  314. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  315. }
  316. else
  317. {
  318. outputMessage = $"其他错误(详情参见MES端日志)[{resultFlag}]";
  319. }
  320. Logger.Error(null, outputMessage, logKeyT, logger_t);
  321. Logger.Error(null, outputMessage, logKeyE, logger_e);
  322. FormLogShow?.ShowLog(outputMessage);
  323. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  324. return;
  325. }
  326. //Logger.Trace(resultFlag+"_"+resultFlag.Substring(3), logKeyT, logger_t);
  327. Int16 goodsFlag = Convert.ToInt16(resultFlag.Substring(3));
  328. outputMessage = $"[{e.Content}]SET_SE_Flag=[{goodsFlag}]{plc_s.Add_SE_Flag + plc_s.Add_SE_FlagNum}";
  329. Logger.Trace(outputMessage, logKeyT, logger_t);
  330. FormLogShow?.ShowLog(outputMessage);
  331. p_r = plc?.Write<short>(plc_s.Add_SE_Flag, plc_s.Add_SE_FlagNum, goodsFlag);
  332. outputMessage = $"[{e.Content}]END_SE_Flag=[{p_r.ToString()}]{plc_s.Add_SE_Flag + plc_s.Add_SE_FlagNum}";
  333. Logger.Trace(outputMessage, logKeyT, logger_t);
  334. FormLogShow?.ShowLog(outputMessage);
  335. //===============================================================================
  336. #endregion
  337. #region 防伪码 取消原方法
  338. /*
  339. if (!string.IsNullOrWhiteSpace(plc_s.Add_SE_Code1) &&
  340. se_flag.Contains($",{plc_s.P_ID},") &&
  341. goodstypecode.StartsWith(se_flag_code)
  342. )
  343. {
  344. // 读取防伪码
  345. //outputMessage = $"[{e.Content}]GET_SE_Code1=[ ]{plc_s.Add_SE_Code1 + plc_s.Add_SE_Code1Num}";
  346. //Logger.Trace(outputMessage, logKeyT, logger_t);
  347. //FormLogShow?.ShowLog(outputMessage);
  348. PLCResult<string> se1_result = plc.Read<string>(plc_s.Add_SE_Code1, plc_s.Add_SE_Code1Num, 12);
  349. outputMessage = $"[{e.Content}]END_SE_Code1=[{se1_result.Data}]{se1_result}";
  350. Logger.Trace(outputMessage, logKeyT, logger_t);
  351. FormLogShow?.ShowLog(outputMessage);
  352. ////outputMessage = $"[{e.Content}]GET_SE_Code2=[ ]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  353. ////Logger.Trace(outputMessage, logKeyT, logger_t);
  354. ////FormLogShow?.ShowLog(outputMessage);
  355. //PLCResult<string> se2_result = plc.Read<string>(plc_s.Add_SE_Code2, plc_s.Add_SE_Code2Num, 12);
  356. //outputMessage = $"[{e.Content}]END_SE_Code2=[{se2_result.Data}]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  357. //Logger.Trace(outputMessage, logKeyT, logger_t);
  358. //FormLogShow?.ShowLog(outputMessage);
  359. string se_code = "";
  360. if (!string.IsNullOrWhiteSpace(se1_result.Data) &&
  361. !se1_result.Data.StartsWith("0") &&
  362. !se1_result.Data.StartsWith("ERROR")
  363. )
  364. {
  365. se_code = se1_result.Data;
  366. }
  367. //else if (!string.IsNullOrWhiteSpace(se2_result.Data) && !se2_result.Data.StartsWith("0"))
  368. //{
  369. // se_code = se2_result.Data;
  370. //}
  371. if (string.IsNullOrWhiteSpace(se_code))
  372. {
  373. SendCode(plc_s, e, logKeyT, logKeyE, plc, 4);
  374. return;
  375. }
  376. string result = SmartDeviceProxy.Instance.Invoke<string>(
  377. p => p.CheckSecurityCodeByBarcode(
  378. _mes_s.AccountCode,
  379. usercode,
  380. barcode,
  381. se_code
  382. ));
  383. outputMessage = $"[{e.Content}]SE_Result=[{result}]{se_code}";
  384. Logger.Trace(outputMessage, logKeyT, logger_t);
  385. FormLogShow?.ShowLog(outputMessage);
  386. // 返回状态(成功、失败)
  387. if (result != "OK")
  388. {
  389. if (result == "EX")
  390. {
  391. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  392. }
  393. else if (result == "EU-01")
  394. {
  395. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  396. }
  397. else
  398. {
  399. outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  400. }
  401. Logger.Error(null, outputMessage, logKeyT, logger_t);
  402. Logger.Error(null, outputMessage, logKeyE, logger_e);
  403. FormLogShow?.ShowLog(outputMessage);
  404. SendCode(plc_s, e, logKeyT, logKeyE, plc, 5);
  405. return;
  406. }
  407. }
  408. */
  409. #endregion
  410. if (p_id != plc_s.P_ID.ToString())
  411. {
  412. // 3#刮登计件
  413. string result = SmartDeviceProxy.Instance.Invoke<string>(
  414. p => p.AddWorkPieceByStatus3(
  415. _mes_s.AccountCode,
  416. //plc_s.USER_CODE,
  417. usercode,
  418. null,
  419. plc_s.P_ID,
  420. barcode,
  421. null));
  422. outputMessage = $"[{e.Content}]MES_Result=[{result}]";
  423. Logger.Trace(outputMessage, logKeyT, logger_t);
  424. FormLogShow?.ShowLog(outputMessage);
  425. // 返回状态(成功、失败)
  426. if (result != "OK")
  427. {
  428. if (result == "EE")
  429. {
  430. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  431. }
  432. else if (result == "EU-01")
  433. {
  434. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  435. }
  436. else
  437. {
  438. outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  439. }
  440. Logger.Error(null, outputMessage, logKeyT, logger_t);
  441. Logger.Error(null, outputMessage, logKeyE, logger_e);
  442. FormLogShow?.ShowLog(outputMessage);
  443. SendCode(plc_s, e, logKeyT, logKeyE, plc, 3);
  444. return;
  445. }
  446. }
  447. //1:通过
  448. if (goodsFlag == 2 || goodsFlag == 1)
  449. SendCode(plc_s, e, logKeyT, logKeyE, plc, 0);
  450. else
  451. SendCode(plc_s, e, logKeyT, logKeyE, plc, 1);
  452. }
  453. }
  454. catch (Exception ex)
  455. {
  456. FormLogShow?.ShowLog($"[{e.Content}]ERROR={ex.Message}");
  457. if (plc_s != null)
  458. {
  459. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyT, logger_t);
  460. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyE, logger_e);
  461. if (plc?.Socket?.Connected ?? false)
  462. {
  463. SendCode(plc_s, e, logKeyT, logKeyE, plc, 3);
  464. }
  465. }
  466. else
  467. {
  468. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyT, logger_t);
  469. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyE, logger_e);
  470. }
  471. }
  472. finally
  473. {
  474. LoggerT?.EndTracking();
  475. plc?.Disconnect();
  476. plc?.Close();
  477. //e.ReturnMessage("0000");
  478. }
  479. }
  480. private void SendCode(PLC_S_GL_QR plc_s, ReceiveSession e, string loggerNameT,
  481. string loggerNameE, SocketClient<SiemensS7_1200Model> plc, short code)
  482. {
  483. try
  484. {
  485. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  486. {
  487. // 扫码结果:【0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码绑定错误】
  488. string outputMessage = $"[{e.Content}]SET_CODE=[{code}]{plc_s.Add_Code + plc_s.Add_CodeNum}【0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码验证错误】";
  489. Logger.Trace(outputMessage, loggerNameT, logger_t);
  490. FormLogShow?.ShowLog(outputMessage);
  491. PLCResult p_r = plc?.Write<short>(plc_s.Add_Code, plc_s.Add_CodeNum, code);
  492. outputMessage = $"[{e.Content}]END_CODE=[{p_r}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  493. Logger.Trace(outputMessage, loggerNameT, logger_t);
  494. FormLogShow?.ShowLog(outputMessage);
  495. }
  496. }
  497. catch (Exception ex)
  498. {
  499. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameT, logger_t);
  500. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameE, logger_e);
  501. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendCode={ex.Message}");
  502. }
  503. }
  504. private PLC_S_GL_QR GetPLC_S_GC(string flag, ReceiveSession e, string loggerName)
  505. {
  506. try
  507. {
  508. flag = M_NAME + flag;
  509. if (PLC_FLAGS.ContainsKey(flag))
  510. {
  511. return PLC_FLAGS[flag];
  512. }
  513. else
  514. {
  515. PLC_S_GL_QR plc_s = new PLC_S_GL_QR();
  516. INIHelper ini = INIHelper.Create($@"PLC_S_INI\PLC_S_{M_NAME}.ini");
  517. plc_s.IP = ini.Read(flag, "IP");
  518. plc_s.Port = ini.Read(flag, "Port").ToInt32();
  519. plc_s.P_ID = ini.Read(flag, "P_ID").ToInt32();
  520. plc_s.WS_ID = ini.Read(flag, "WS_ID").ToInt32();
  521. plc_s.USER_CODE = ini.Read(flag, "USER_CODE");
  522. plc_s.Add_Code = ini.Read(flag, "Add_Code");
  523. plc_s.Add_CodeNum = ini.Read(flag, "Add_CodeNum");
  524. plc_s.Add_SE_Code1 = ini.Read(flag, "Add_SE_Code1");
  525. plc_s.Add_SE_Code1Num = ini.Read(flag, "Add_SE_Code1Num");
  526. plc_s.Add_SE_Code2 = ini.Read(flag, "Add_SE_Code2");
  527. plc_s.Add_SE_Code2Num = ini.Read(flag, "Add_SE_Code2Num");
  528. //xuwei add 2021-12-24
  529. plc_s.Add_FinishFlag = ini.Read(flag, "Add_FinishFlag");
  530. plc_s.Add_FinishFlagNum = ini.Read(flag, "Add_FinishFlagNum");
  531. //xuwei add 2021-12-30
  532. plc_s.Add_SE_Flag = ini.Read(flag, "Add_SE_Flag");
  533. plc_s.Add_SE_FlagNum = ini.Read(flag, "Add_SE_FlagNum");
  534. plc_s.Add_SE_Type = ini.Read(flag, "Add_SE_Type");
  535. plc_s.Add_SE_TypeNum = ini.Read(flag, "Add_SE_TypeNum");
  536. plc_s.Add_SE_BarCode = ini.Read(flag, "Add_SE_BarCode");
  537. plc_s.Add_SE_BarCodeNum = ini.Read(flag, "Add_SE_BarCodeNum");
  538. PLC_FLAGS.Add(flag, plc_s);
  539. return plc_s;
  540. }
  541. }
  542. catch (Exception ex)
  543. {
  544. Logger.Error(ex, $"[{e.Content}]ERROR-GetPLC_S_GC", loggerName, logger_e);
  545. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetPLC_S_GC={ex.Message}");
  546. return null;
  547. }
  548. }
  549. private string GetGoodsType(string barcode, ReceiveSession e, string loggerName)
  550. {
  551. using (IDataAccess dataAccess = PLC_S_DataAccess.GetDataAccess(e))
  552. {
  553. try
  554. {
  555. string sqlString = @"
  556. SELECT
  557. -- G.GOODSCODE,
  558. -- G.SEATCOVERCODE,
  559. CASE
  560. WHEN T.GOODSTYPECODE = '001001001' THEN 2 --连体
  561. WHEN T.GOODSTYPECODE = '001001002' THEN 0 --分体
  562. WHEN T.GOODSTYPECODE = '001001003' THEN 1 --智能
  563. WHEN T.GOODSTYPECODE = '001001004' THEN 1 --智能高压
  564. ELSE 0 --其他
  565. END AS GOODSTYPE
  566. FROM
  567. TP_PM_GROUTINGDAILYDETAIL GDD
  568. INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID
  569. INNER JOIN TP_MST_GOODSTYPE T ON G.GOODSTYPEID = T.GOODSTYPEID
  570. WHERE
  571. GDD.BARCODE = :BARCODE --'10006800247'
  572. ";
  573. string goodsType = dataAccess.ExecuteScalar(sqlString, new CDAParameter(":BARCODE", barcode)).ToString();
  574. return goodsType;
  575. }
  576. catch (Exception ex)
  577. {
  578. Logger.Error(ex, $"[{e.Content}]ERROR-GetGoodsType", loggerName, logger_e);
  579. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetGoodsType={ex.Message}");
  580. return "-1";
  581. }
  582. }
  583. }
  584. }
  585. }