SajectConnectSajet.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using PhihongEv.Lib;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace MesAdaptor
  8. {
  9. public class SajectConnectSajet : ISajetConnect
  10. {
  11. private enum CMD
  12. {
  13. Signin = 1,
  14. SnCheck = 2,
  15. WoCheck = -1,
  16. Report = 3,
  17. Log = 4,
  18. HeaderRegister = 8,
  19. ValueReport = 5,
  20. StringValueReport = 6,
  21. }
  22. public bool SajetTransStart() => SajetConnectAdapter.SajetTransStart();
  23. public bool SajetTransClose() => SajetConnectAdapter.SajetTransClose();
  24. private string userId = "";
  25. public bool SajetTransSignIn(ref string data)
  26. {
  27. var attemptId = data;
  28. if (SajetTransData(CMD.Signin, ref data))
  29. {
  30. if (string.IsNullOrEmpty(data) || data.StartsWith("NG"))
  31. {
  32. userId = "";
  33. return false;
  34. }
  35. else
  36. {
  37. userId = attemptId;
  38. return true;
  39. }
  40. }
  41. userId = "";
  42. return false;
  43. }
  44. private string WorkOrder = "";
  45. public bool SajetTransWoCheck(ref string workOrder)
  46. {
  47. return true;
  48. }
  49. private string SN;
  50. public bool SajetTransSnCheck(ref string serialNumber)
  51. {
  52. var attemptSN = serialNumber;
  53. var msg = serialNumber;
  54. if (SajetTransData(CMD.SnCheck, ref msg))
  55. {
  56. if (string.IsNullOrEmpty(msg) || msg.StartsWith("NG"))
  57. {
  58. SN = "";
  59. return false;
  60. }
  61. else
  62. {
  63. SN = attemptSN;
  64. return true;
  65. }
  66. }
  67. SN = "";
  68. return false;
  69. }
  70. public bool SajetTransSnCheck(ref string sn, string model)
  71. {
  72. throw new NotImplementedException();
  73. }
  74. public bool SajetTranFinishSuccess()
  75. {
  76. if (string.IsNullOrEmpty(userId))
  77. return false;
  78. if (string.IsNullOrEmpty(SN))
  79. return false;
  80. string msg = userId + ";" + SN + ";";
  81. if (string.IsNullOrEmpty(msg))
  82. return false;
  83. msg += "OK";
  84. #if DEBUG
  85. return true;
  86. #endif
  87. return SajetTransData(CMD.Report, ref msg);
  88. }
  89. public bool SajetTranFinishFail(MesErrorCode errorCode)
  90. {
  91. if (string.IsNullOrEmpty(userId))
  92. return false;
  93. if (string.IsNullOrEmpty(SN))
  94. return false;
  95. string msg = userId + ";" + SN + ";";
  96. if (string.IsNullOrEmpty(msg))
  97. return false;
  98. msg += $"NG;{errorCode};"; //E114
  99. #if DEBUG
  100. return true;
  101. #endif
  102. return SajetTransData(CMD.Report, ref msg);
  103. }
  104. public string SajetTransRegisterHeader(string model, string header)
  105. {
  106. if (string.IsNullOrEmpty(userId))
  107. return "";
  108. var msg = userId + ";";
  109. msg += model + ";" + header;
  110. if (SajetTransData(CMD.HeaderRegister, ref msg))
  111. {
  112. if (msg.StartsWith("OK"))
  113. {
  114. //get codename
  115. msg = msg.Substring(3);
  116. var spaceIndex = msg.IndexOf(";");
  117. if (spaceIndex > 0)
  118. {
  119. msg = msg.Substring(0, spaceIndex);
  120. }
  121. return msg;
  122. }
  123. return null;
  124. }
  125. return null;
  126. }
  127. public bool SajetTransReport(ValueReportDatas reportPair)
  128. {
  129. //build header
  130. Dictionary<string, int> valuePairs = new Dictionary<string, int>();
  131. foreach (var data in reportPair)
  132. {
  133. if (int.TryParse(data.Val, out int val))
  134. {
  135. valuePairs.Add(data.Key, val);
  136. }
  137. else if (data.Val.ToLower().Contains("fail"))
  138. {
  139. valuePairs.Add(data.Key, 0);
  140. }
  141. else if (data.Val.ToLower().Contains("success"))
  142. {
  143. valuePairs.Add(data.Key, 1);
  144. }
  145. else
  146. {
  147. valuePairs.Add(string.Format("{0}:{1}", data.Key, data.Val), 1);
  148. }
  149. }
  150. //register Header
  151. var codePair = new Dictionary<string, string>();
  152. string model = "";
  153. if (SystemID.TryParse(SN,out var systemID))
  154. {
  155. model = systemID.ModelName.ToString();
  156. }
  157. foreach (var key in valuePairs.Keys)
  158. {
  159. var code = SajetTransRegisterHeader(model, key);
  160. if (string.IsNullOrEmpty(code))
  161. continue;
  162. codePair.Add(key, code);
  163. }
  164. //report value
  165. var reportResult = SajetTransReport(valuePairs, codePair);
  166. return reportResult;
  167. }
  168. public bool SajetTransReport(Dictionary<string, int> resultPair, Dictionary<string, string> codePair)
  169. {
  170. if (string.IsNullOrEmpty(userId))
  171. return false;
  172. if (string.IsNullOrEmpty(SN))
  173. return false;
  174. string msgHeader = userId + ";" + SN;
  175. string msg = "";
  176. foreach (var result in resultPair)
  177. {
  178. if (codePair.Keys.Contains(result.Key))
  179. {
  180. msg = string.Format("{0};{1}:{2};",msgHeader, codePair[result.Key], string.Format("{0}.00", result.Value));
  181. //msg += string.Format(";{0}:{1}", codePair[result.Key], string.Format("{0}.00", result.Value));
  182. }
  183. //msg += ";";
  184. SajetTransData(CMD.ValueReport, ref msg);
  185. //msg = userId + ";" + SN;
  186. }
  187. //msg += ";";
  188. return true;
  189. }
  190. public bool SajetTransReport(Dictionary<string, string> resultPair, Dictionary<string, string> codePair)
  191. {
  192. if (string.IsNullOrEmpty(userId))
  193. return false;
  194. if (string.IsNullOrEmpty(SN))
  195. return false;
  196. string msg = userId + ";" + SN;
  197. foreach (var result in resultPair)
  198. {
  199. if (codePair.Keys.Contains(result.Key))
  200. {
  201. msg += string.Format(";{0}:{1}", codePair[result.Key], string.Format("{0}.00", result.Value));
  202. }
  203. msg += ";";
  204. SajetTransData(CMD.StringValueReport, ref msg);
  205. msg = userId + ";" + SN;
  206. }
  207. msg += ";";
  208. return true;
  209. }
  210. public bool SajetTransLog(string data)
  211. {
  212. return true;
  213. if (string.IsNullOrEmpty(userId))
  214. return false;
  215. if (string.IsNullOrEmpty(SN))
  216. return false;
  217. string prefix = userId + ";" + SN + ";";
  218. while (data.Length > 0)
  219. {
  220. var msg = prefix;
  221. int sendLength = Math.Min(250 - msg.Length, data.Length);
  222. var sendString = data.Substring(0, sendLength);
  223. msg += sendString;
  224. if (!SajetTransData(CMD.Log, ref msg))
  225. {
  226. break;
  227. }
  228. data = data.Substring(sendLength);
  229. }
  230. return data.Length == 0;
  231. }
  232. private bool SajetTransData(CMD command, ref string data)
  233. {
  234. return SajetConnectAdapter.SajetTransData((int)command, ref data);
  235. }
  236. private string GetSendPrefix()
  237. {
  238. string msg = "";
  239. if (string.IsNullOrEmpty(userId))
  240. {
  241. return null;
  242. }
  243. msg = userId + ";";
  244. if (string.IsNullOrEmpty(WorkOrder))
  245. {
  246. return null;
  247. }
  248. msg += WorkOrder + ";";
  249. return msg;
  250. }
  251. }
  252. }