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.
460 lines
16 KiB
C#
460 lines
16 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using LiveCharts.Wpf;
|
|
using LiveCharts;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Media;
|
|
using Admin.Core.IService;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using System.Collections.ObjectModel;
|
|
using Admin.Core.Model;
|
|
using Admin.Core.IRepository;
|
|
using Admin.Core.Common;
|
|
using log4net;
|
|
using System.Collections;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows.Controls;
|
|
using System.Threading;
|
|
using Aucma.Core.DoorFoam.Business;
|
|
using Admin.Core.Service;
|
|
using Admin.Core.Model.Model_New;
|
|
using Admin.Core.Socket;
|
|
|
|
namespace Aucma.Core.DoorFoam.ViewModels
|
|
{
|
|
public partial class RealTimePageViewModel : ObservableObject
|
|
{
|
|
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(RealTimePageViewModel));
|
|
protected readonly IProductPlanInfoServices? _productPlanInfoServices;
|
|
protected readonly IBaseOrderInfoServices? _baseOrderInfoServices;
|
|
protected readonly IDoorMateHistoryServices? _doorMateHistoryServices;
|
|
protected readonly IPrintBarCodeServices? _printBarCodeServices;
|
|
protected readonly ISysUserInfoRepository _sysUserInfoRepository;
|
|
protected readonly IOrderBomInfoServices _orderBomInfoServices;
|
|
private readonly IMaterialCompletionServices _materialCompletionServices;
|
|
private ObservableCollection<dynamic> listItems = new ObservableCollection<dynamic>();
|
|
|
|
public RealTimePageViewModel()
|
|
{
|
|
_orderBomInfoServices = App.ServiceProvider.GetService<IOrderBomInfoServices>();
|
|
_baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
|
|
_productPlanInfoServices = App.ServiceProvider.GetService<IProductPlanInfoServices>();
|
|
_doorMateHistoryServices = App.ServiceProvider.GetService<IDoorMateHistoryServices>();
|
|
_sysUserInfoRepository = App.ServiceProvider.GetService<ISysUserInfoRepository>();
|
|
_printBarCodeServices = App.ServiceProvider.GetService<IPrintBarCodeServices>();
|
|
_materialCompletionServices = App.ServiceProvider.GetService<IMaterialCompletionServices>();
|
|
|
|
TouchSocketService.ReceiveCodeDelegateEvent += OnLoadPlanData;
|
|
|
|
Task.Run(async () =>
|
|
{
|
|
await InitEveryDayMethodAsync();
|
|
});
|
|
}
|
|
/// <summary>
|
|
/// 获取今天的数据
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private async Task InitEveryDayMethodAsync()
|
|
{
|
|
|
|
ChartValues<double> achievement = new ChartValues<double>();
|
|
MaterialNameList = new List<string>();
|
|
|
|
var info =await _doorMateHistoryServices.QueryAsync(x => x.ScanTime.ToString("yyyy-MM-dd").Contains(DateTime.Now.ToString("yyyy-MM-dd")));
|
|
|
|
_ = App.Current.Dispatcher.BeginInvoke((Action)(() =>
|
|
{
|
|
ModelStatistics.Clear();
|
|
|
|
if (info != null)
|
|
{
|
|
var groupResult = from p in info
|
|
group p by p.MaterialName into g
|
|
select new { MaterialName = g.Key, Count = g.Count() };
|
|
foreach (var groupItem in groupResult)
|
|
{
|
|
achievement.Add(groupItem.Count);
|
|
|
|
MaterialNameList.Add(FormatMaterialType(groupItem.MaterialName));
|
|
}
|
|
}
|
|
ColumnSeries column = new ColumnSeries()
|
|
{
|
|
DataLabels = true,
|
|
Title = "型号",
|
|
Values = achievement,
|
|
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
|
|
Foreground = Brushes.White,
|
|
FontSize = 18
|
|
};
|
|
ModelStatistics.Add(column);
|
|
//if (ModelStatistics.Count > 0)
|
|
//{
|
|
// #region 这样添加数据会有问题
|
|
// try
|
|
// {
|
|
// for (int i = 0; i < achievement.Count; i++)
|
|
// {
|
|
// ModelStatistics.FirstOrDefault().Values[i] = achievement[i];
|
|
// }
|
|
// }
|
|
// catch (Exception)
|
|
// {
|
|
|
|
// throw;
|
|
// }
|
|
// #endregion
|
|
// //从数据库重新加载
|
|
|
|
//}
|
|
//else
|
|
//{
|
|
// ModelStatistics.Add(column);
|
|
//}
|
|
|
|
}));
|
|
|
|
|
|
|
|
}
|
|
|
|
#region 扫描信息
|
|
|
|
#region 物料条码
|
|
private string _stationName;
|
|
public string StationName
|
|
{
|
|
get { return _stationName; }
|
|
set
|
|
{
|
|
_stationName = value;
|
|
SetProperty(ref _stationName, value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 物料名称
|
|
private string _materialName;
|
|
public string MaterialName
|
|
{
|
|
get { return _materialName; }
|
|
set
|
|
{
|
|
_materialName = value;
|
|
SetProperty(ref _materialName, value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 订单信息
|
|
private string _orderNo;
|
|
public string OrderNo
|
|
{
|
|
get { return _orderNo; }
|
|
set
|
|
{
|
|
_orderNo = value;
|
|
SetProperty(ref _orderNo, value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 开始时间
|
|
private string _beginTime;
|
|
public string BeginTime
|
|
{
|
|
get { return _beginTime; }
|
|
set
|
|
{
|
|
_beginTime = value;
|
|
SetProperty(ref _beginTime, value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region 当日产量
|
|
|
|
#region 日产量柱状图X轴日期
|
|
/// <summary>
|
|
/// 日产量柱状图X轴日期
|
|
/// </summary>
|
|
private List<string> productionHourList;
|
|
|
|
public List<string> ProductionHourList
|
|
{
|
|
get { return productionHourList; }
|
|
set { productionHourList = value; }
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 日产量柱状图
|
|
/// </summary>
|
|
private SeriesCollection achievement = new SeriesCollection();
|
|
|
|
public SeriesCollection Achievement
|
|
{
|
|
get { return achievement; }
|
|
set { achievement = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 型号统计
|
|
|
|
#region 型号统计柱状图x轴物料类型
|
|
/// <summary>
|
|
/// 型号统计柱状图x轴物料类型
|
|
/// </summary>
|
|
private List<string> materialNameList;
|
|
|
|
public List<string> MaterialNameList
|
|
{
|
|
get { return materialNameList; }
|
|
set { materialNameList = value; }
|
|
}
|
|
#endregion
|
|
|
|
#region 型号统计柱状图
|
|
/// <summary>
|
|
/// 型号统计柱状图
|
|
/// </summary>
|
|
private SeriesCollection modelStatistics = new SeriesCollection();
|
|
|
|
public SeriesCollection ModelStatistics
|
|
{
|
|
get { return modelStatistics; }
|
|
set { modelStatistics = value; }
|
|
}
|
|
#endregion
|
|
#endregion
|
|
|
|
#region 门体匹配队列
|
|
|
|
private int i = 0;
|
|
/// <summary>
|
|
/// 门体匹配队列
|
|
/// </summary>
|
|
/// <param name="code"></param>
|
|
public async void OnLoadPlanData(string IP, string code)
|
|
{
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
string phproductlineCode = Appsettings.app("StationInfo", "PHProductlineCode");
|
|
|
|
if (string.IsNullOrEmpty(code)) return;
|
|
var result = await _doorMateHistoryServices.FirstAsync(d=>d.MaterialBarCode== code);
|
|
if (result!=null) return;
|
|
|
|
var plan = await _productPlanInfoServices.QueryAsync(d => d.PlanAmount > d.CompleteAmount);
|
|
//var plan = _orderBomInfoServices.Query(d => d.MaterialType == "200");
|
|
//var plan = _baseOrderInfoServices.QueryAsync().Result;
|
|
if (plan == null)
|
|
{
|
|
PrintMessageToListBox("未查询到计划信息");
|
|
Console.WriteLine("未查询到计划信息");
|
|
return;
|
|
}
|
|
var obj = await _printBarCodeServices.FirstAsync(d => d.MaterialBarcode == code);
|
|
if (obj == null)
|
|
{
|
|
PrintMessageToListBox($"未查询到条码打印信息【{code}】");
|
|
Console.WriteLine($"未查询到条码打印信息【{code}】");
|
|
return;
|
|
}
|
|
ProductPlanInfo stationPlan = plan.FirstOrDefault(d => d.OrderCode == obj.OrderCode);
|
|
if (stationPlan == null)
|
|
{
|
|
PrintMessageToListBox($"未查询到该条码订单信息;物料二维码【{code}】");
|
|
Console.WriteLine($"未查询到该条码订单信息;条码【{code}】");
|
|
log.Error($"未查询到该条码订单信息;条码【{code}】");
|
|
return;
|
|
}
|
|
|
|
DoorMateHistory model = new DoorMateHistory();
|
|
if (planInfoDataGrid.Count() == 0) model.ObjId = 1;
|
|
else model.ObjId = planInfoDataGrid.Count() + 1;
|
|
|
|
model.PlanCode = stationPlan.PlanCode;
|
|
model.OrderCode = stationPlan.OrderCode;
|
|
model.MaterialBarCode = code;
|
|
model.MaterialCode = stationPlan.MaterialCode;
|
|
model.MaterialName = stationPlan.MaterialName;
|
|
model.ScanTime = DateTime.Now;
|
|
|
|
SaveMateHistory(code, obj, phproductlineCode, plan, model);
|
|
Console.WriteLine($"箱门匹配信息记录成功!箱体码【{code}】");
|
|
PrintMessageToListBox($"箱门匹配信息记录成功!箱体码【{code}】");
|
|
model.MaterialName = this.FormatMaterialType(stationPlan.MaterialName);
|
|
|
|
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
|
|
{
|
|
planInfoDataGrid.Insert(0, model);
|
|
}));
|
|
|
|
await InsertToCompleteAndCheck(model, code);
|
|
await InitEveryDayMethodAsync();//刷新型号统计图表
|
|
Console.WriteLine($"箱门匹配信息记录成功!刷新型号统计图表");
|
|
}
|
|
|
|
#region 记录历史
|
|
/// <summary>
|
|
/// 记录历史
|
|
/// </summary>
|
|
/// <param name="code"></param>
|
|
/// <param name="productLineCode"></param>
|
|
/// <param name="plan"></param>
|
|
/// <param name="model"></param>
|
|
private void SaveMateHistory(string code, PrintBarCode obj, string productLineCode, List<ProductPlanInfo> plan, DoorMateHistory model)
|
|
{
|
|
var planObj = plan.FirstOrDefault(d => d.OrderCode == obj.OrderCode);
|
|
if (planObj == null) return;
|
|
|
|
var stationList = _sysUserInfoRepository.GetProductLineInfo(productLineCode).Result;
|
|
if (stationList != null)
|
|
{
|
|
var station = stationList.FirstOrDefault();
|
|
model.ProductLineCode = planObj.ProductLineCode;
|
|
model.PlantCode = station.PlantCode;
|
|
model.StationCode = station.StationCode;
|
|
int result = _doorMateHistoryServices.AddAsync(model).Result;
|
|
if (result != 0)
|
|
{
|
|
PrintMessageToListBox($"箱门匹配记录异常!扫描箱体条码:【{code}】");
|
|
log.Error($"箱门匹配记录异常!扫描箱体条码:【{code}】");
|
|
}
|
|
else
|
|
{
|
|
PrintMessageToListBox($"箱门匹配成功!扫描箱体条码:【{code}】");
|
|
log.Info($"箱门匹配成功!扫描箱体条码:【{code}】");
|
|
}
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region 初始化datagrid
|
|
private ObservableCollection<DoorMateHistory> planInfoDataGrid = new ObservableCollection<DoorMateHistory>();
|
|
public ObservableCollection<DoorMateHistory> PlanInfoDataGrid
|
|
{
|
|
get { return planInfoDataGrid; }
|
|
set
|
|
{
|
|
planInfoDataGrid = value;
|
|
OnPropertyChanged();//属性通知
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 实时展示数据
|
|
/// <summary>
|
|
/// LisBox数据模板
|
|
/// </summary>
|
|
private IEnumerable logInfoListBox;
|
|
public IEnumerable LogInfoListBox
|
|
{
|
|
get => logInfoListBox;
|
|
set => SetProperty(ref logInfoListBox, value);
|
|
}
|
|
#endregion
|
|
|
|
#region listBox绑定日志
|
|
/// <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)
|
|
{
|
|
log.Error("日志数据绑定异常", ex);
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 截取物料编码
|
|
public string SubString(string barCode)
|
|
{
|
|
string result = string.Empty;
|
|
if (!string.IsNullOrEmpty(barCode))
|
|
{
|
|
result = barCode.Substring(7, 10);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
#endregion
|
|
|
|
#region 格式化物料类型
|
|
/// <summary>
|
|
/// 格式化物料类型
|
|
/// </summary>
|
|
/// <param name="materialType"></param>
|
|
/// <returns></returns>
|
|
private string FormatMaterialType(string materialType)
|
|
{
|
|
string result = "";
|
|
System.Text.RegularExpressions.Match match = Regex.Match(materialType, @".*?,(.*?),");
|
|
|
|
if (match.Success && match.Groups.Count > 1)
|
|
{
|
|
result = match.Groups[1].Value;
|
|
}
|
|
else
|
|
{
|
|
result = materialType;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
#endregion
|
|
|
|
#region 保存过点数
|
|
|
|
/// <summary>
|
|
/// 保存过点数
|
|
/// </summary>
|
|
/// <param name="history"></param>
|
|
/// <param name="barCode"></param>
|
|
/// <returns></returns>
|
|
public async Task InsertToCompleteAndCheck(DoorMateHistory history, string barCode)
|
|
{
|
|
if (history != null) return ;
|
|
List<MaterialCompletion> completionList = new List<MaterialCompletion>();
|
|
#region 更新过点数据
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
MaterialCompletion completion = new MaterialCompletion();
|
|
completion.OrderCode = history.OrderCode;
|
|
completion.MaterialBarcode = barCode;
|
|
completion.MaterialCode = history.MaterialCode;
|
|
completion.MaterialName = history.MaterialName;
|
|
completion.StationName = stationCode;
|
|
completion.ProductLineCode = "CX_02";
|
|
completion.CompleteDate = DateTime.Now;
|
|
completionList.Add(completion);
|
|
#endregion
|
|
|
|
await _materialCompletionServices.AddAsync(completionList);
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|