EquipmentDataQueueVM.cs 3.56 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using HandyControl.Data;
using HHECS.BllModel;
using HHECS.DAQClient.Model;
using LinqKit;
using System.Collections.ObjectModel;
using System.Linq.Expressions;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.DAQClient.ViewModel.EquipmentVM
{
    public partial class EquipmentDataQueueVM : ObservableObject
    {
        [ObservableProperty]
        private string equipmentCode;

        [ObservableProperty]
        private Dictionary<string, string> equipmentTypes = new Dictionary<string, string>();

        [ObservableProperty]
        private string equipmentTypeCode;

        [ObservableProperty]
        private int pageIndex = 1;

        [ObservableProperty]
        private long maxPage;

        [ObservableProperty]
        private int pageSize = 30;

        [ObservableProperty]
        private ObservableCollection<EquipmentDataQueue> dataQueues = new ObservableCollection<EquipmentDataQueue>();

        private readonly IFreeSql _freeSql;

        public EquipmentDataQueueVM(IFreeSql freeSql)
        {
            _freeSql = freeSql;
            InitialData();
            LoadData();
        }

        private void InitialData()
        {
            try
            {
                var result = _freeSql.Queryable<EquipmentTypeExtend>().ToList();
                var keyValuePairs = new Dictionary<string, string>
                {
                    { string.Empty,"全部" }
                };
                foreach (var item in result)
                {
                    keyValuePairs.Add(item.Code, item.Name);
                }
                EquipmentTypes = keyValuePairs;
            }
            catch (Exception ex)
            {
                MessageBox.Error($"[{nameof(EquipmentDataQueueVM)}]加载数据失败.{ex.Message}");
            }
        }

        [RelayCommand]
        public void Serach()
        {
            var result = LoadData();
            if (!result.Success)
            {
                MessageBox.Error($"[{nameof(EquipmentDataQueueVM)}]加载数据失败.{result.Msg}");
            }
        }

        /// <summary>
        /// 页码改变
        /// </summary>
        [RelayCommand]
        private void PageUpdated(FunctionEventArgs<int> info)
        {
            PageIndex = info.Info;
            LoadData();
        }

        private BllResult LoadData()
        {
            try
            {
                var query = _freeSql.Queryable<EquipmentDataQueue>().Where(GetFilter());
                var total = query.Count();
                MaxPage = total / PageSize + Convert.ToInt32(total % PageSize != 0);
                var result = query.OrderByDescending(x => x.Created).Page(PageIndex, PageSize).ToList();
                DataQueues = new ObservableCollection<EquipmentDataQueue>(result);
                return BllResultFactory.Success();
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error(ex.Message);
            }
        }

        private Expression<Func<EquipmentDataQueue, bool>> GetFilter()
        {
            var filter = PredicateBuilder.New<EquipmentDataQueue>(true);
            if (!string.IsNullOrWhiteSpace(EquipmentCode))
            {
                filter = filter.And(x => x.EquipmentCode.Contains(EquipmentCode));
            }
            if (!string.IsNullOrWhiteSpace(EquipmentTypeCode))
            {
                filter = filter.And(x => x.EquipmentTypeCode.Contains(EquipmentTypeCode));
            }
            return filter;
        }
    }
}