MonitoringCashierPage.xaml.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Input;
  14. using System.Windows.Media;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Navigation;
  17. using System.Windows.Shapes;
  18. namespace StoreServer
  19. {
  20. /// <summary>
  21. /// Interaction logic for MonitoringCashierPage.xaml
  22. /// </summary>
  23. public partial class MonitoringCashierPage : Page
  24. {
  25. public List<WorkShift> WorkShiftOnCashier = new List<WorkShift>();
  26. public MonitoringCashierPage()
  27. {
  28. InitializeComponent();
  29. foreach (var item in Helper.FindStore.Cashier)
  30. {
  31. WorkShiftOnCashier.Add(new WorkShift
  32. {
  33. StartDateAndTimeWork = null,
  34. EndDateAndTimeWork = null,
  35. Cashier = item,
  36. EmployeeInStore = null
  37. });
  38. }
  39. ListCashier.ItemsSource = WorkShiftOnCashier;
  40. StartSocketServer();
  41. StartHttpServer();
  42. }
  43. public void StartWorkCashier(int CashierID, EmployeeInStore AuthEmployee)
  44. {
  45. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  46. CurrentWorkShift.EmployeeInStore = AuthEmployee;
  47. ListCashier.ItemsSource = null;
  48. ListCashier.ItemsSource = WorkShiftOnCashier;
  49. }
  50. public void StartWorkShift(int CashierID)
  51. {
  52. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  53. CurrentWorkShift.StartDateAndTimeWork = DateTime.Now;
  54. ListCashier.ItemsSource = null;
  55. ListCashier.ItemsSource = WorkShiftOnCashier;
  56. }
  57. public async void StartSocketServer()
  58. {
  59. string IDStore = Helper.FindStore.StoreID.ToString();
  60. if (IDStore.Length == 1) IDStore = IDStore.Insert(0, "0");
  61. IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), Convert.ToInt32("102" + IDStore));
  62. Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  63. Listener.Bind(iPEndPoint);
  64. Listener.Listen(10);
  65. while (true)
  66. {
  67. Socket SocketClient = await Listener.AcceptAsync();
  68. StringBuilder stringBuilder = new StringBuilder();
  69. byte[] data = new byte[256];
  70. int bytes = 0;
  71. do
  72. {
  73. bytes = SocketClient.Receive(data, data.Length,0);
  74. stringBuilder = stringBuilder.Append(Encoding.UTF8.GetString(data, 0, bytes));
  75. } while (SocketClient.Available >0);
  76. string Message = stringBuilder.ToString();
  77. if (Message.Contains("Authorization - Code cashier="))
  78. {
  79. int NumberCashier = Convert.ToInt32(Message.Split(';')[0].Split('=')[1]);
  80. var FindCashier = DB.db.Cashier.FirstOrDefault(x => x.IDStore == Helper.FindStore.StoreID && x.CashierID == NumberCashier);
  81. if (FindCashier == null)
  82. {
  83. byte[] buffer = Encoding.UTF8.GetBytes("Магазин не поддерживает кассу с таким номером");
  84. SocketClient.Send(buffer);
  85. SocketClient.Shutdown(SocketShutdown.Both);
  86. SocketClient.Close();
  87. }
  88. else
  89. {
  90. string CodeEmployee = Message.Split('=')[2];
  91. var FindEmployee = DB.db.EmployeeInStore.FirstOrDefault(x => x.Employee.Code == CodeEmployee && x.IDStore == Helper.FindStore.StoreID);
  92. if (FindEmployee == null)
  93. {
  94. byte[] buffer = Encoding.UTF8.GetBytes("Сотрудник не найден");
  95. SocketClient.Send(buffer);
  96. SocketClient.Shutdown(SocketShutdown.Both);
  97. SocketClient.Close();
  98. }
  99. else
  100. {
  101. StartWorkCashier(FindCashier.CashierID, FindEmployee);
  102. List<RootDataOfProductInStore> dataOfProductInStores = new List<RootDataOfProductInStore>();
  103. foreach (var item in Helper.FindStore.ProductInStore)
  104. {
  105. dataOfProductInStores.Add(new RootDataOfProductInStore
  106. {
  107. ProductInStoreID = item.ProductInStoreID,
  108. RemainsProduct = item.RemainsProduct,
  109. NameProduct = item.Product.NameProduct,
  110. Weight = item.Product.Weight,
  111. Packaging = item.Product.Packaging,
  112. PriceOfOne = item.Product.PriceOfOne,
  113. BarCode = item.Product.BarCode
  114. });
  115. }
  116. string Json = JsonConvert.SerializeObject(dataOfProductInStores);
  117. byte[] buffer = Encoding.UTF8.GetBytes("Добро пожаловать =" + Json);
  118. SocketClient.Send(buffer);
  119. SocketClient.Shutdown(SocketShutdown.Both);
  120. SocketClient.Close();
  121. }
  122. }
  123. }
  124. if (Message.Contains("Start work shift ="))
  125. {
  126. int CashierID = Convert.ToInt32(Message.Split('=')[1]);
  127. StartWorkShift(CashierID);
  128. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  129. DB.db.WorkShift.Add(CurrentWorkShift);
  130. DB.db.SaveChanges();
  131. byte[] buffer = Encoding.UTF8.GetBytes(CurrentWorkShift.WorkShiftID.ToString());
  132. SocketClient.Send(buffer);
  133. SocketClient.Shutdown(SocketShutdown.Both);
  134. SocketClient.Close();
  135. }
  136. }
  137. }
  138. public async void StartHttpServer()
  139. {
  140. HttpListener listener = new HttpListener();
  141. listener.Prefixes.Add("http://127.0.0.2:" + Helper.FindStore.StoreID.ToString() + "/");
  142. listener.Start();
  143. while (true)
  144. {
  145. HttpListenerContext context = await listener.GetContextAsync();
  146. HttpListenerRequest request = context.Request;
  147. }
  148. }
  149. }
  150. }