| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | using DevExpress.Mvvm;using DevExpress.Utils.DirectXPaint;using DevExpress.Xpo;using DevExpress.XtraDiagram.Base;using Ips.Library.Basic;using Ips.Library.Entity;using Ips.Sps.TskResults.Poses;using Ips.Sps.Tsks;using Ips.Sps.Tsks.Commands;using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Ips.Sps.Store{    public class PosStore    {        public static readonly PosStore Default = new PosStore();        public PosStore()        {            _posManager = PosManager.Default;            QueryModel = new PosQueryModel()            {                TskId = TskManager.Default.SelectTskId,                SigId = TskManager.Default.SelectSigId,                LastHours = 1,                ShowNotValidPoint = false            };            ResigiterRecvMsg();        }        public event EventHandler ListFilterChanged;        PosManager _posManager;        public PosQueryModel QueryModel { get; private set; }        private static readonly object obj = new object();        private BindingList<Pos> _posList = new BindingList<Pos>();        public BindingList<Pos> List => _posList;        public IEnumerable<long> FilterPosIds { get; private set; }        private long _gridSelectPosId;        public long GridSelectPosId => _gridSelectPosId;        private long _mapSelectPosId;        public long MapSeLectPosId => _mapSelectPosId;        private string _msgToken;        public void GetAll()        {            lock (obj)            {                var list = _posManager.GetAll(QueryModel);                _posList.Clear();                foreach (var item in list)                {                    _posList.Add(item);                }            }        }        public void Insert(IEnumerable<Pos> posList)        {            if (posList.IsNullOrEmpty()) return;            lock (obj)            {                var posIds = posList.Select(m => m.Id).ToArray();                var posQuery = _posManager.GetSession().Query<Pos>().Where(m => posIds.Contains(m.Id));                var _list = _posManager.CreateFilter(posQuery, QueryModel).ToList();                foreach (var posItem in _list)                {                    //_posList.Insert(0, posItem);                    _posList.Add(posItem);                }            }        }        public void Delete(int[] idxs)        {            var posIds = new long[idxs.Length];            lock (obj)            {                Array.Sort(idxs);                for (int i = idxs.Length - 1; i >= 0; i--)                {                    var idx = idxs[i];                    if (idx < 0) continue;                    var pos = _posList[idx];                    _posList.RemoveAt(idx);                    posIds[i] = pos.Id;                }            }            _posManager.DeleteByIds(posIds);        }        public void UseMirr(int[] idxs)        {            var posIds = new long[idxs.Length];            lock (obj)            {                for (int i = 0; i < idxs.Length; i++)                {                    var idx = idxs[i];                    var pos = _posList[idx];                    pos.UseMirrPos();                    _posList.ResetItem(idx);                    posIds[i] = pos.Id;                }            }            _posManager.DeleteByIds(posIds);        }        public void SetValid(int[] idxs, bool isvalid)        {            var posIds = new long[idxs.Length];            lock (obj)            {                for (int i = 0; i < idxs.Length; i++)                {                    var idx = idxs[i];                    var pos = _posList[idx];                    pos.IsValid = isvalid;                    _posList.ResetItem(idx);                    posIds[i] = pos.Id;                }            }            _posManager.GetSession().ExecuteNonQuery($"update pos set isvalid={isvalid} where id in ({string.Join(',', posIds)})");        }        public void SetGridSelectPosId(long posId)        {            _gridSelectPosId = posId;            Messenger.Default.Send(new PosSelectedChangedMessage(posId), "list");        }        public void ShowPosListByIds(IEnumerable<long> posIds)        {            FilterPosIds = posIds;            ListFilterChanged.InvokeSafely(this);        }        public void SetMapSelectPosId(long posId)        {            _mapSelectPosId = posId;            Messenger.Default.Send(new PosSelectedChangedMessage(posId), "map");        }        private void ResigiterRecvMsg()        {            Messenger.Default.Register<TskSelectedMessage>(this, TskSelectChanged);        }        private void TskSelectChanged(TskSelectedMessage msg)        {            QueryModel.TskId = msg.TskId;            QueryModel.SigId = msg.SigId;            string msgToken = "";            if (QueryModel.SigId > 0)            {                msgToken = $"{QueryModel.TskId}_{QueryModel.SigId}";            }            else if (QueryModel.TskId > 0)            {                msgToken = $"{QueryModel.TskId}";            }            Messenger.Default.Unregister<PosListChangedMessage>(this, _msgToken, OnPosListChanged);            GetAll();            Messenger.Default.Register<PosListChangedMessage>(this, msgToken, OnPosListChanged);            _msgToken = msgToken;        }        private void OnPosListChanged(PosListChangedMessage msg)        {            switch (msg.ChangeType)            {                case DataChangeType.Insert:                    Insert(msg.PosList);                    break;                case DataChangeType.Update:                    break;                case DataChangeType.Delete:                    break;            }        }    }}
 |