PosStore.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. using DevExpress.Mvvm;
  2. using DevExpress.Utils.DirectXPaint;
  3. using DevExpress.Xpo;
  4. using DevExpress.XtraDiagram.Base;
  5. using Ips.Library.Basic;
  6. using Ips.Library.Entity;
  7. using Ips.Sps.TskResults.Poses;
  8. using Ips.Sps.Tsks;
  9. using Ips.Sps.Tsks.Commands;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. namespace Ips.Sps.Store
  17. {
  18. public class PosStore
  19. {
  20. public static readonly PosStore Default = new PosStore();
  21. public PosStore()
  22. {
  23. _posManager = PosManager.Default;
  24. QueryModel = new PosQueryModel()
  25. {
  26. TskId = TskManager.Default.SelectTskId,
  27. SigId = TskManager.Default.SelectSigId,
  28. LastHours = 1,
  29. ShowNotValidPoint = false
  30. };
  31. ResigiterRecvMsg();
  32. }
  33. public event EventHandler ListFilterChanged;
  34. PosManager _posManager;
  35. public PosQueryModel QueryModel { get; private set; }
  36. private static readonly object obj = new object();
  37. private BindingList<Pos> _posList = new BindingList<Pos>();
  38. public BindingList<Pos> List => _posList;
  39. public IEnumerable<long> FilterPosIds { get; private set; }
  40. private long _gridSelectPosId;
  41. public long GridSelectPosId => _gridSelectPosId;
  42. private long _mapSelectPosId;
  43. public long MapSeLectPosId => _mapSelectPosId;
  44. private string _msgToken;
  45. public void GetAll()
  46. {
  47. lock (obj)
  48. {
  49. var list = _posManager.GetAll(QueryModel);
  50. _posList.Clear();
  51. foreach (var item in list)
  52. {
  53. _posList.Add(item);
  54. }
  55. }
  56. }
  57. public void Insert(IEnumerable<Pos> posList)
  58. {
  59. if (posList.IsNullOrEmpty()) return;
  60. lock (obj)
  61. {
  62. var posIds = posList.Select(m => m.Id).ToArray();
  63. var posQuery = _posManager.GetSession().Query<Pos>().Where(m => posIds.Contains(m.Id));
  64. var _list = _posManager.CreateFilter(posQuery, QueryModel).ToList();
  65. foreach (var posItem in _list)
  66. {
  67. //_posList.Insert(0, posItem);
  68. _posList.Add(posItem);
  69. }
  70. }
  71. }
  72. public void Delete(int[] idxs)
  73. {
  74. var posIds = new long[idxs.Length];
  75. lock (obj)
  76. {
  77. Array.Sort(idxs);
  78. for (int i = idxs.Length - 1; i >= 0; i--)
  79. {
  80. var idx = idxs[i];
  81. if (idx < 0) continue;
  82. var pos = _posList[idx];
  83. _posList.RemoveAt(idx);
  84. posIds[i] = pos.Id;
  85. }
  86. }
  87. _posManager.DeleteByIds(posIds);
  88. }
  89. public void UseMirr(int[] idxs)
  90. {
  91. var posIds = new long[idxs.Length];
  92. lock (obj)
  93. {
  94. for (int i = 0; i < idxs.Length; i++)
  95. {
  96. var idx = idxs[i];
  97. var pos = _posList[idx];
  98. pos.UseMirrPos();
  99. _posList.ResetItem(idx);
  100. posIds[i] = pos.Id;
  101. }
  102. }
  103. _posManager.DeleteByIds(posIds);
  104. }
  105. public void SetValid(int[] idxs, bool isvalid)
  106. {
  107. var posIds = new long[idxs.Length];
  108. lock (obj)
  109. {
  110. for (int i = 0; i < idxs.Length; i++)
  111. {
  112. var idx = idxs[i];
  113. var pos = _posList[idx];
  114. pos.IsValid = isvalid;
  115. _posList.ResetItem(idx);
  116. posIds[i] = pos.Id;
  117. }
  118. }
  119. _posManager.GetSession().ExecuteNonQuery($"update pos set isvalid={isvalid} where id in ({string.Join(',', posIds)})");
  120. }
  121. public void SetGridSelectPosId(long posId)
  122. {
  123. _gridSelectPosId = posId;
  124. Messenger.Default.Send(new PosSelectedChangedMessage(posId), "list");
  125. }
  126. public void ShowPosListByIds(IEnumerable<long> posIds)
  127. {
  128. FilterPosIds = posIds;
  129. ListFilterChanged.InvokeSafely(this);
  130. }
  131. public void SetMapSelectPosId(long posId)
  132. {
  133. _mapSelectPosId = posId;
  134. Messenger.Default.Send(new PosSelectedChangedMessage(posId), "map");
  135. }
  136. private void ResigiterRecvMsg()
  137. {
  138. Messenger.Default.Register<TskSelectedMessage>(this, TskSelectChanged);
  139. }
  140. private void TskSelectChanged(TskSelectedMessage msg)
  141. {
  142. QueryModel.TskId = msg.TskId;
  143. QueryModel.SigId = msg.SigId;
  144. string msgToken = "";
  145. if (QueryModel.SigId > 0)
  146. {
  147. msgToken = $"{QueryModel.TskId}_{QueryModel.SigId}";
  148. }
  149. else if (QueryModel.TskId > 0)
  150. {
  151. msgToken = $"{QueryModel.TskId}";
  152. }
  153. Messenger.Default.Unregister<PosListChangedMessage>(this, _msgToken, OnPosListChanged);
  154. GetAll();
  155. Messenger.Default.Register<PosListChangedMessage>(this, msgToken, OnPosListChanged);
  156. _msgToken = msgToken;
  157. }
  158. private void OnPosListChanged(PosListChangedMessage msg)
  159. {
  160. switch (msg.ChangeType)
  161. {
  162. case DataChangeType.Insert:
  163. Insert(msg.PosList);
  164. break;
  165. case DataChangeType.Update:
  166. break;
  167. case DataChangeType.Delete:
  168. break;
  169. }
  170. }
  171. }
  172. }