/// <summary> /// Возвращает список неотправленных на сервер сессий чтения /// </summary> public List<TubesBundleSession> GetUnshippedBundles() { var sessions = new List<TubesBundleSession>(); var sessionCmd = new SQLiteCommand(@"SELECT * from tubes_bundles where delivery_status <> " + (int)TubesSession.DeliveryStatus.Shipped, connection); using (var sessionReader = sessionCmd.ExecuteReader()) { while (sessionReader.Read()) { var session = new TubesBundleSession { id = sessionReader.GetInt32(0), tag = sessionReader.GetString(1), time = sessionReader.GetString(2), bundle = new TubesBundle() { time = sessionReader.GetInt32(3), districtId = (ushort)sessionReader.GetInt16(4), bundleLength = (ushort)sessionReader.GetInt16(5), }, deliveryStatus = (TubesBundleSession.DeliveryStatus)sessionReader.GetInt32(6), sessionMode = (TubesBundleSession.Mode)sessionReader.GetInt32(7), }; sessions.Add(session); } } return sessions; }
/// <summary> /// Читает данные о подвеске с ближайшей метки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TubesPackReadButton_Click(object sender, EventArgs e) { try { var tag = reader.GetFirstTag(); var data = new byte[TubesBundle.GetSize()]; var result = reader.ReadBytes(tag, ref data, RfidReader.MemorySection.User); if (data != null) { var session = new TubesBundleSession() { time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), sessionMode = TubesBundleSession.Mode.Reading, tag = ByteArrayToHexString(tag), }; var handle = GCHandle.Alloc(data, GCHandleType.Pinned); session.bundle = (TubesBundle)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(TubesBundle)); handle.Free(); TagEpcLabel.Text = ByteArrayToHexString(tag); dateTimePicker.Value = new DateTime(1970, 1, 1).AddSeconds(session.bundle.time).ToLocalTime(); wellNumberInput.Text = session.bundle.districtId.ToString(); tubesLengthInput.Text = session.bundle.bundleLength.ToString(); collector.WriteSession(session); new Thread(new ThreadStart(this.SendBundleSessions)).Start(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Записывает данные о подвеске на ближайшую метку /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TubesPackWriteButton_Click(object sender, EventArgs e) { try { var tag = reader.GetFirstTag(); var data = new byte[TubesBundle.GetSize()]; var session = new TubesBundleSession() { sessionMode = TubesBundleSession.Mode.Writing, tag = ByteArrayToHexString(tag), time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bundle = new TubesBundle() { time = (int)(dateTimePicker.Value - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds, districtId = Convert.ToUInt16(wellNumberInput.Text), bundleLength = Convert.ToUInt16(tubesLengthInput.Text), } }; IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(data)); var handle = GCHandle.Alloc(data, GCHandleType.Pinned); Marshal.StructureToPtr(session.bundle, handle.AddrOfPinnedObject(), false); handle.Free(); if (reader.WriteBytes(tag, data, RfidReader.MemorySection.User) != (int)RfidReader.ResultCode.Ok) { MessageBox.Show("Не удалось записать данные на метку", "Ошибка"); } else { collector.WriteSession(session); new Thread(new ThreadStart(this.SendBundleSessions)).Start(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void WriteSession(TubesBundleSession session) { var transaction = connection.BeginTransaction(); //Register a new session var cmd = new SQLiteCommand(@" INSERT INTO tubes_bundles ( tag, session_time, bundle_time, district_id, bundle_length, delivery_status, session_mode) VALUES(@tag, @session_time, @bundle_time, @district_id, @bundle_length, @delivery_status, @session_mode)", connection); cmd.Parameters.AddWithValue("@tag", session.tag); cmd.Parameters.AddWithValue("@session_time", session.time); cmd.Parameters.AddWithValue("@bundle_time", session.bundle.time); cmd.Parameters.AddWithValue("@district_id", session.bundle.districtId); cmd.Parameters.AddWithValue("@bundle_length", session.bundle.bundleLength); cmd.Parameters.AddWithValue("@delivery_status", session.deliveryStatus); cmd.Parameters.AddWithValue("@session_mode", session.sessionMode); cmd.ExecuteNonQuery(); transaction.Commit(); }