using Admin.Core.Model; using Admin.Core.Service; using Aucma.Scada.UI.Common; using Aucma.Scada.UI; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using LiveCharts; using LiveCharts.Wpf; using log4net; using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; namespace Aucma.Scada.UI.ViewModel.InStoreInfo { public partial class InStoreInfoViewModel : ObservableObject { private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(ExecutePlanInfoServices)); private ObservableCollection<dynamic> listItems = new ObservableCollection<dynamic>(); private ObservableCollection<RealTaskInfo> taskItems = new ObservableCollection<RealTaskInfo>(); private InStoreBusiness inStoreBusiness = new InStoreBusiness();// InStoreBusiness.Instance; private OutStoreBusiness outStoreBusiness = new OutStoreBusiness();// OutStoreBusiness.Instance; private AppConfig appConfig = new AppConfig();//AppConfig.Instance; public InStoreInfoViewModel() { inStoreBusiness.RefreshInStoreTaskEvent += RefreshInStoreTask; inStoreBusiness.RefreshScanMateriaCodeEvent += RefreshScanInfo; inStoreBusiness.RefreshLogMessageEvent += PrintMessageToListBox; outStoreBusiness.RefreshStoreStockEvent += Init; materialTypeCombox = "所有"; Init(); } #region 参数定义 /// <summary> /// 箱壳物料条码 /// </summary> private string shellMaterialCode = string.Empty; public string ShellMaterialCode { get => shellMaterialCode; set => SetProperty(ref shellMaterialCode, value); } /// <summary> /// 箱壳物料名称 /// </summary> private string shellMaterialName = string.Empty; public string ShellMaterialName { get => shellMaterialName; set => SetProperty(ref shellMaterialName, value); } /// <summary> /// 箱壳入库货道 /// </summary> private string shellSpaceName = string.Empty; public string ShellSpaceName { get => shellSpaceName; set => SetProperty(ref shellSpaceName, value); } /// <summary> /// 内胆物料条码 /// </summary> private string linerMaterialCode = string.Empty; public string LinerMaterialCode { get => linerMaterialCode; set => SetProperty(ref linerMaterialCode, value); } /// <summary> /// 内胆物料名称 /// </summary> private string linerMaterialName = string.Empty; public string LinerMaterialName { get => linerMaterialName; set => SetProperty(ref linerMaterialName, value); } /// <summary> /// 内胆入库货道 /// </summary> private string linerSpaceName = string.Empty; public string LinerSpaceName { get => linerSpaceName; set => SetProperty(ref linerSpaceName, value); } /// <summary> /// LisBox数据模板 /// </summary> private IEnumerable logInfoListBox; public IEnumerable LogInfoListBox { get => logInfoListBox; set => SetProperty(ref logInfoListBox, value); } /// <summary> /// 箱壳入库任务DataGrid /// </summary> private IEnumerable instoreTask; public IEnumerable InstoreTask { get => instoreTask; set => SetProperty(ref instoreTask, value); } /// <summary> /// 内胆入库任务DataGrid /// </summary> private ObservableCollection<SysUserInfo> linerInstoreTask; public ObservableCollection<SysUserInfo> LinerInstoreTask { get => linerInstoreTask; set => SetProperty(ref linerInstoreTask, value); } /// <summary> /// 任务列表搜索条件 /// </summary> private String search = String.Empty; public String Search { get => search; set => SetProperty(ref search, value); } /// <summary> /// 下拉框 /// </summary> public string materialTypeCombox; public string MaterialTypeCombox { get => materialTypeCombox; set => SetProperty(ref materialTypeCombox, value); } /// <summary> /// 库存统计柱状图 /// </summary> private SeriesCollection achievement = new SeriesCollection(); public SeriesCollection Achievement { get { return achievement; } set { achievement = value; } } /// <summary> /// 库存统计柱状图X轴物料信息 /// </summary> private List<string> materialNameList; public List<string> MaterialNameList { get { return materialNameList; } set { materialNameList = value; } } #endregion /// <summary> /// listBox绑定日志 /// </summary> /// <param name="message"></param> private void PrintMessageToListBox(string message) { try { listItems.Add($"{DateTime.Now.ToString("HH:mm:ss")}==>{message}"); LogInfoListBox = listItems.OrderByDescending(x => x); } catch (Exception ex) { logHelper.Error("日志数据绑定异常", ex); } } /// <summary> /// 箱壳入库任务列表查询 /// </summary> [RelayCommand] public async void Query() { try { taskItems = new ObservableCollection<RealTaskInfo>(); #region 通过数据库获取数据进行刷新 var info = await inStoreBusiness.GetInStoreTask(); if (info != null) { if (materialTypeCombox == "箱壳") { materialTypeCombox = appConfig.shellStoreCode; } else if (materialTypeCombox == "内胆") { materialTypeCombox = appConfig.linerStoreCode; } else if (materialTypeCombox == "所有") { materialTypeCombox = string.Empty; } //info.ForEach(x => RefreshInStoreTask(x)); try { info = info.Where(x => !string.IsNullOrEmpty(search) ? x.MaterialCode == search : 1 == 1 && !string.IsNullOrEmpty(materialTypeCombox) ? x.StoreCode == materialTypeCombox : 1 == 1).ToList(); _ = App.Current.Dispatcher.BeginInvoke((Action)(async () => { foreach (var item in info) { item.MaterialType = await inStoreBusiness.GetMaterialName(item.MaterialType); taskItems.Add(item); } InstoreTask = taskItems; })); } catch (Exception ex) { logHelper.Error("入库任务列表刷新异常", ex); } } #endregion } catch (Exception ex) { logHelper.Error("入库任务加载异常", ex); } } /// <summary> /// 重置 /// </summary> [RelayCommand] public void Reset() { Search = string.Empty; MaterialTypeCombox = string.Empty; this.Query(); } /// <summary> /// 柱状体加载 /// </summary> public async void Init() { Query(); ChartValues<double> shellAchievement = new ChartValues<double>(); ChartValues<double> linerAchievement = new ChartValues<double>(); MaterialNameList = new List<string>(); _ = App.Current.Dispatcher.BeginInvoke((Action)(async () => { List<dynamic> info = await inStoreBusiness.GetMaterialStock(); if (info != null) { Achievement.Clear(); foreach (var item in info) { MaterialNameList.Add(item.parentMaterialName); shellAchievement.Add(Convert.ToDouble(item.shellStock)); linerAchievement.Add(Convert.ToDouble(item.linerStock)); } } var shellColumn = new ColumnSeries(); shellColumn.DataLabels = true; shellColumn.Title = "箱壳"; shellColumn.Values = shellAchievement; var linerColumn = new ColumnSeries(); linerColumn.DataLabels = true; linerColumn.Title = "内胆"; linerColumn.Values = linerAchievement; Achievement.Add(shellColumn); Achievement.Add(linerColumn); })); } /// <summary> /// 刷新入库任务列表 /// </summary> /// <param name="taskInfo"></param> private void RefreshInStoreTask(RealTaskInfo taskInfo, bool isFinsih = false) { if (isFinsih) { Init(); } else { Query(); } } /// <summary> /// 刷新扫码信息 /// </summary> /// <param name="materialCode"></param> /// <param name="materialName"></param> /// <param name="spaceName"></param> /// <param name="materialType"></param> private void RefreshScanInfo(string materialCode, string materialName, string spaceName, string materialType) { if (materialType == appConfig.shellStoreCode) { ShellMaterialCode = materialCode; ShellMaterialName = materialName; ShellSpaceName = spaceName; } else if (materialType == appConfig.linerStoreCode) { LinerMaterialCode = materialCode; LinerMaterialName = materialName; LinerSpaceName = spaceName; } } } }