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

400 lines
12 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.Threading.Tasks;
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>();
/// <summary>
/// 删除计划
/// </summary>
public RelayCommand<object> CompletePlanCommand { get; set; }
private InStoreBusiness inStoreBusiness = InStoreBusiness.Instance;
private OutStoreBusiness outStoreBusiness = OutStoreBusiness.Instance;
private AppConfig appConfig = AppConfig.Instance;
public InStoreInfoViewModel()
{
CompletePlanCommand = new RelayCommand<object>(obj => CompletePlan(obj));
inStoreBusiness.RefreshInStoreTaskEvent += RefreshInStoreTask;
inStoreBusiness.RefreshScanMateriaCodeEvent += RefreshScanInfo;
inStoreBusiness.RefreshLogMessageEvent += PrintMessageToListBox;
outStoreBusiness.RefreshStoreStockEvent += Init;
QueryCommand = new RelayCommand(Query);
DeleteCommand = new RelayCommand(DeleteAllTask);
materialTypeCombox = "所有";
Init();
}
/// <summary>
/// 删除所有多余的任务
/// </summary>
public async void DeleteAllTask()
{
bool result = await inStoreBusiness.DeleteTasksAsync();
PrintMessageToListBox($"删除任务成功每次最多删除1000条");
}
/// <summary>
/// 完成计划
/// </summary>
/// <param name="obj"></param>
public void CompletePlan(object obj)
{
string info = obj as string;
inStoreBusiness.InStoreFinish(info);
}
#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 = new List<string>();
public List<string> MaterialNameList
{
get { return materialNameList; }
set { materialNameList = value; }
}
#endregion
#region 事件定义
/// <summary>
/// 查询事件
/// </summary>
public RelayCommand QueryCommand { get; set; }
/// <summary>
/// 删除所有任务
/// </summary>
public RelayCommand DeleteCommand { get; set; }
#endregion
private string lastMessage = "";
/// <summary>
/// listBox绑定日志
/// </summary>
/// <param name="message"></param>
private void PrintMessageToListBox(string message)
{
try
{
if (lastMessage != message)
{
listItems.Add($"{DateTime.Now.ToString("HH:mm:ss.ss")}==>{message}");
lastMessage = message;
while (listItems.Count > 120)
{
listItems.RemoveAt(0);
}
LogInfoListBox = listItems.OrderByDescending(x => x);
}
}
catch (Exception ex)
{
logHelper.Error("日志数据绑定异常", ex);
}
}
/// <summary>
/// 箱壳入库任务列表查询
/// </summary>
public void Query()
{
Task.Run(() =>
{
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();
MaterialNameList.Clear();
foreach (var item in info)
{
if (!string.IsNullOrEmpty(item.materialType))
{
string name = inStoreBusiness.GetMaterialName(item.materialType);
MaterialNameList.Add(GetTextBetweenCommas(name));
achievement.Add(item.storeStock);
}
}
}
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "泡后库";
column.Values = achievement;
column.Foreground = Brushes.White;
Achievement.Add(column);
}));
}
public static string GetTextBetweenCommas(string input)
{
// 查找第一个逗号的位置
int firstCommaIndex = input.IndexOf(',');
if (firstCommaIndex == -1)
{
return input;
}
// 查找第二个逗号的位置,从第一个逗号的下一个位置开始查找
int secondCommaIndex = input.IndexOf(',', firstCommaIndex + 1);
// 如果找不到第二个逗号,则返回从第一个逗号到字符串末尾的子字符串
if (secondCommaIndex == -1)
{
return input;
}
// 截取两个逗号之间的字符
return input.Substring(firstCommaIndex + 1, secondCommaIndex - firstCommaIndex - 1);
}
/// <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");
}
}
}