You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Aucma.Scada/Aucma.Scada.UI/viewModel/InStoreInfo/InStoreInfoViewModel.cs

326 lines
9.6 KiB
C#

using Aucma.Scada.Business;
using Aucma.Scada.Model.domain;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HighWayIot.Config;
using HighWayIot.Log4net;
using LiveCharts;
using LiveCharts.Wpf;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Media;
namespace Aucma.Scada.UI.viewModel.InStoreInfo
{
public class InStoreInfoViewModel : ViewModelBase
{
private LogHelper logHelper = LogHelper.Instance;
private ObservableCollection<dynamic> listItems = new ObservableCollection<dynamic>();
private ObservableCollection<RealTaskInfo> taskItems = new ObservableCollection<RealTaskInfo>();
private InStoreBusiness inStoreBusiness = InStoreBusiness.Instance;
private OutStoreBusiness outStoreBusiness = OutStoreBusiness.Instance;
private AppConfig appConfig = AppConfig.Instance;
public InStoreInfoViewModel()
{
inStoreBusiness.RefreshInStoreTaskEvent += RefreshInStoreTask;
inStoreBusiness.RefreshScanMateriaCodeEvent += RefreshScanInfo;
inStoreBusiness.RefreshLogMessageEvent += PrintMessageToListBox;
outStoreBusiness.RefreshStoreStockEvent += Init;
QueryCommand = new RelayCommand(Query);
ResetCommand = new RelayCommand(Reset);
materialTypeCombox = "所有";
Init();
}
#region 参数定义
/// <summary>
/// 物料条码
/// </summary>
private string materialCode = string.Empty;
public string MaterialCode
{
get { return materialCode; }
set { materialCode = value; RaisePropertyChanged(nameof(MaterialCode)); }
}
/// <summary>
/// 扫码时间
/// </summary>
private string scanTime = string.Empty;
public string ScanTime
{
get { return scanTime; }
set { scanTime = value; RaisePropertyChanged(nameof(ScanTime)); }
}
/// <summary>
/// 物料名称
/// </summary>
private string materialName = string.Empty;
public string MaterialName
{
get { return materialName; }
set { materialName = value; RaisePropertyChanged(nameof(MaterialName)); }
}
/// <summary>
/// 入库货道
/// </summary>
private string spaceName = string.Empty;
public string SpaceName
{
get { return spaceName; }
set { spaceName = value; RaisePropertyChanged(nameof(SpaceName)); }
}
/// <summary>
/// 提示信息
/// </summary>
private string promptInfo = string.Empty;
public string PromptInfo
{
get { return promptInfo; }
set { promptInfo = value; RaisePropertyChanged(nameof(PromptInfo)); }
}
/// <summary>
/// LisBox数据模板
/// </summary>
private IEnumerable logInfoListBox;
public IEnumerable LogInfoListBox
{
get { return logInfoListBox; }
set { logInfoListBox = value; RaisePropertyChanged(() => LogInfoListBox); }
}
/// <summary>
/// 入库任务DataGrid
/// </summary>
private IEnumerable instoreTask;
public IEnumerable InstoreTask
{
get { return instoreTask; }
set { instoreTask = value; RaisePropertyChanged(() => InstoreTask); }
}
/// <summary>
/// 任务列表搜索条件
/// </summary>
private String search = String.Empty;
public String Search
{
get { return search; }
set { search = value; RaisePropertyChanged(() => Search); }
}
/// <summary>
/// 下拉框
/// </summary>
public string materialTypeCombox;
public string MaterialTypeCombox
{
get { return materialTypeCombox; }
set
{
if (materialTypeCombox != value)
{
materialTypeCombox = value;
RaisePropertyChanged(() => MaterialTypeCombox);
}
}
}
/// <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
#region 事件定义
/// <summary>
/// 查询事件
/// </summary>
public RelayCommand QueryCommand { get; set; }
/// <summary>
/// 重置
/// </summary>
public RelayCommand ResetCommand { get; set; }
#endregion
/// <summary>
/// listBox绑定日志
/// </summary>
/// <param name="message"></param>
private void PrintMessageToListBox(string message)
{
try
{
listItems.Add($"{DateTime.Now.ToString("HH:mm:ss.ss")}==>{message}");
LogInfoListBox = listItems.OrderByDescending(x => x);
}
catch (Exception ex)
{
logHelper.Error("日志数据绑定异常", ex);
}
}
/// <summary>
/// 箱壳入库任务列表查询
/// </summary>
public void Query()
{
lock (string.Empty)
{
try
{
#region 通过数据库获取数据进行刷新
var info = inStoreBusiness.GetInStoreTask();
if (info != null)
{
taskItems = new ObservableCollection<RealTaskInfo>();
try
{
info = info.Where(x => !string.IsNullOrEmpty(search) ? x.materialCode == search : 1 == 1).ToList();
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
foreach (var item in info)
{
item.materialType = inStoreBusiness.GetMaterialName(item.materialType);
taskItems.Add(item);
}
InstoreTask = taskItems;
}));
}
catch (Exception ex)
{
logHelper.Error("入库任务列表刷新异常", ex);
}
}
#endregion
} catch (Exception ex)
{
logHelper.Error("入库任务加载异常", ex);
}
}
}
/// <summary>
/// 重置
/// </summary>
public void Reset()
{
Search = string.Empty;
MaterialTypeCombox = string.Empty;
this.Query();
}
/// <summary>
/// 柱状体加载
/// </summary>
public void Init()
{
Query();
ChartValues<double> achievement = new ChartValues<double>();
MaterialNameList = new List<string>();
var info = inStoreBusiness.GetFoamStoreStock();
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
if (info != null)
{
Achievement.Clear();
foreach (var item in info)
{
if (!string.IsNullOrEmpty(item.materialType))
{
string name = inStoreBusiness.GetMaterialName(item.materialType);
MaterialNameList.Add(name.Substring(0,Math.Min(name.Length,10)));
achievement.Add(item.storeStock);
}
}
}
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "泡后库";
column.Values = achievement;
column.Foreground = Brushes.White;
Achievement.Add(column);
}));
}
/// <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)
{
MaterialCode = materialCode;
MaterialName = materialName;
SpaceName = spaceName;
ScanTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}