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.

1184 lines
43 KiB
C#

1 year ago
using Aucma.Core.SheetMetal.Models;
using Aucma.Core.SheetMetal.Views;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Linq;
using System.Threading.Tasks;
using Admin.Core.IService;
using Microsoft.Extensions.DependencyInjection;
using Aucma.Core.SheetMetal.Common;
using LiveCharts;
using LiveCharts.Wpf;
using Admin.Core.Model;
using System.Windows.Media;
using Admin.Core.Common;
using LiveCharts.Defaults;
using Aucma.Core.SheetMetal.Business;
using Admin.Core.Model.ViewModels;
1 year ago
using log4net;
using Aucma.Core.HwPLc;
using System.Text;
using System.Threading;
using Admin.Core.Model.Model_New;
1 year ago
using Aucma.Core.SheetMetalTasks;
1 year ago
/*
*
*/
namespace Aucma.Core.SheetMetal.ViewModels
{
public partial class IndexPageViewModel : ObservableObject
{
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(IndexPageViewModel));
#region 初始化接口
1 year ago
protected readonly IExecutePlanInfoServices? _taskExecutionPlanInfoServices;
protected readonly IRecordBackPanelComplateServices _recordBackPanelComplateServices;
protected readonly IRecordSidePanelComplateServices _recordSidePanelComplateServices;
1 year ago
protected readonly IExecutePlanInfoServices? _executePlanInfoServices;
1 year ago
protected readonly IBaseBomInfoServices _baseBomInfoServices;
private readonly ISysUserInfoServices _sysUserInfoServices;
private readonly IRecordInStoreServices _recordInstoreServices;
private readonly IBaseOrderInfoServices _baseOrderInfoServices;
#endregion
#region 初始化下拉数据
private AppConfigHelper appConfig = new AppConfigHelper();//读取保存的文本数据
List<SelectModel> selectList = new List<SelectModel>() { new SelectModel()
1 year ago
{
ID=1,
TypeName="手动"
},
new SelectModel()
{
ID=2,
TypeName="自动"
}};
#endregion
#region 定义对象和定义字段
1 year ago
public Func<double, string> Formatter { get; set; }
public HwPLc.PlcModel obj = null;
#endregion
1 year ago
#region 构造函数
public IndexPageViewModel()
{
_stationName = Appsettings.app("StationInfo", "StationName");//工位名称
_baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
1 year ago
_executePlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
1 year ago
_taskExecutionPlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
_recordBackPanelComplateServices = App.ServiceProvider.GetService<IRecordBackPanelComplateServices>();
_recordSidePanelComplateServices = App.ServiceProvider.GetService<IRecordSidePanelComplateServices>();
_baseBomInfoServices = App.ServiceProvider.GetService<IBaseBomInfoServices>();
_sysUserInfoServices = App.ServiceProvider.GetService<ISysUserInfoServices>();
_recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>();
1 year ago
Task.WaitAll(LoadData());
1 year ago
AddSelectData();//添加下拉菜单
1 year ago
RefreshHourAmount();//小时产量
RefreshMaterialStats();//型号产量
//——测试——
1 year ago
//InitEveryDayMethod();//小时产量
//InitExecMethod();//执行列表
//LoadDataTest();
//——测试 end——
1 year ago
AucamSheetMetalTaskService.RefreshCurrentPlanInfoEvent += RefreshCurrentPlanInfo;
QuantityIssuedViewModel.RefreshCretaePlanInfoEvent += LoadData;
AucamSheetMetalTaskService.RefreshCreatePlanInfoEvent += LoadData;
AucamSheetMetalTaskService.RefreshChatEvent += RefreshChat;
AucamSheetMetalTaskService.RefreshPlanInfoEvent += RefreshPlanShow;
1 year ago
}
#endregion
#region 更新前端数据
1 year ago
public Task RefreshChat()
1 year ago
{
RefreshHourAmountChart();//小时产量
RefreshMaterialChart();//型号产量
1 year ago
return Task.CompletedTask;
}
#endregion
1 year ago
#region 下拉
public void AddSelectData()
{
foreach (var item in selectList)
1 year ago
{
LocationSource.Add(item);
}
SelectLocation = ReadFile();
}
#endregion
#region 订单统计
private void InitExecMethod()
1 year ago
{
//string station = Appsettings.app("StationInfo", "StationCode");
//ExecutePlanInfo info = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ProductLineCode.Equals(station) && d.ExecuteStatus == 2);
//if (info == null) return;
OrderCode="11245376";//订单
MesOrderCode = "2401101789";//Mes订单
ProductModel = "BCD-162CST";
BeginTime = "2024-01-16";
PlanMaxNum = 500;
RealQuantity = 20;
DiffQuantity = 480;
1 year ago
//CompletionRate = (_realQuantity / _planMaxNum).ToString("0%");
CompletionRate = double.Parse((RealQuantity / PlanMaxNum).ToString("F3"));
1 year ago
}
#endregion
#region ——测试
1 year ago
/// <summary>
/// 每日生产
/// </summary>
/// <returns></returns>
private Task InitEveryDayMethod()
{
#region 按时间统计
ChartValues<ObservablePoint> achievement = new ChartValues<ObservablePoint>
{
new ObservablePoint(0, 75),
new ObservablePoint(1, 121),
new ObservablePoint(2, 105),
new ObservablePoint(3,0),
new ObservablePoint(4,0),
new ObservablePoint(5,0),
new ObservablePoint(6,0),
new ObservablePoint(7,0),
new ObservablePoint(8,0),
new ObservablePoint(9,0),
new ObservablePoint(10,0),
new ObservablePoint(11,0)
1 year ago
};
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "前板";
column.ScalesYAt = 0;
1 year ago
column.Values = achievement;
column.Foreground = Brushes.White;
column.FontSize = 18;
//柱子宽度
//column.Width = 30;
//column.MaxColumnWidth = 30;
//column.LabelsPosition = BarLabelPosition.Perpendicular;
//column.Fill = new SolidColorBrush(Color.FromRgb(34, 139, 34)); //柱状图颜色填充
//column.LabelPoint = p => p.Y.ToString(); //柱状图数据显示位置
ProductionHourList = new List<string>()
{
"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00"
1 year ago
};
1 year ago
//Formatter = value => value.ToString("N");
Achievement.Add(column);
Achievement.Add(new ColumnSeries
{
DataLabels = true,
Title = "后板",
Values = achievement,
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
Foreground = Brushes.CadetBlue,
FontSize = 18
});
#endregion
#region 按类型统计
//ChartValues<double> achievement2 = new ChartValues<double>();
ChartValues<ObservablePoint> achievement2 = new ChartValues<ObservablePoint>
{
new ObservablePoint(0,15),
new ObservablePoint(1,106),
new ObservablePoint(2,66),
new ObservablePoint(3,46)
};
var column2 = new ColumnSeries();
column2.DataLabels = true;
column2.Title = "前板";
column2.Values = achievement2;
column2.Foreground = Brushes.White;
column2.FontSize = 18;
ModelStatistics.Add(column2);
ModelStatistics.Add(new ColumnSeries()
{
DataLabels = true,
Title = "后板",
Values = achievement2,
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
Foreground = Brushes.White,
FontSize = 18
});
MaterialNameList = new List<string>()
{
"BCD-162CST", "BCD-212CHG", "BCD-211CHG", "BC/BD-310NF"
};
1 year ago
#endregion
return Task.CompletedTask;
}
private void LoadDataTest()
{
List<TaskExecModel> taskList = new List<TaskExecModel>();
TaskExecModel task = new TaskExecModel();
task.No = 1;
task.ID = "";
task.OrderCode = "11245376";
task.MaterialCode = "9000008460";
task.MaterialName = "BCD-162CST";
task.TaskAmount = 20;
task.CompleteAmount = 15;
task.BeginTime = Convert.ToDateTime("2024-01-16");
task.IsExec =2;//执行状态
task.PlanType = "前后板联动";
task.Recipe = "BCD-162CST";
task.SidePanelAmount =15;
task.BackPanelAmount = 15;
task.TaskCode = "24011017890003";
task.ExecuteStatus = 2;//执行状态
PlanInfoDataGrid.Add(task);
TaskExecModel task2 = new TaskExecModel();
task2.No = 2;
task2.ID = "";
task2.OrderCode = "11244891";
task2.MaterialCode = "9000004738";
task2.MaterialName = "BCD-162CST";
task2.TaskAmount = 20;
task2.CompleteAmount = 50;
task2.BeginTime = Convert.ToDateTime("2024-01-16");
task2.IsExec = 2;//执行状态
task2.PlanType = "前后板联动";
task2.Recipe = "BCD-162CST";
task2.SidePanelAmount = 50;
task2.BackPanelAmount = 50;
task2.TaskCode = "24011300010005";
task2.ExecuteStatus = 3;//执行状态
PlanInfoDataGrid.Add(task2);
TaskExecModel task3 = new TaskExecModel();
task3.No = 3;
task3.ID = "";
task3.OrderCode = "11244793";
task3.MaterialCode = "9000004738";
task3.MaterialName = "BCD-212CHG";
task3.TaskAmount = 60;
task3.CompleteAmount = 60;
task3.BeginTime = Convert.ToDateTime("2024-01-16");
task3.IsExec = 2;//执行状态
task3.PlanType = "前后板联动";
task3.Recipe = "BCD-162CST";
task3.SidePanelAmount = 60;
task3.BackPanelAmount = 60;
task3.TaskCode = "24011200020003";
task3.ExecuteStatus = 3;//执行状态
PlanInfoDataGrid.Add(task3);
TaskExecModel task4 = new TaskExecModel();
task4.No =4;
task4.ID = "";
task4.OrderCode = "11244784";
task4.MaterialCode = "9000008460";
task4.MaterialName = "BC/BD-310NF";
task4.TaskAmount = 40;
task4.CompleteAmount = 40;
task4.BeginTime = Convert.ToDateTime("2024-01-16");
task4.IsExec = 3;//执行状态
task4.PlanType = "前后板联动";
task4.Recipe = "BC/BD-310NF";
task4.SidePanelAmount = 40;
task4.BackPanelAmount = 40;
task4.TaskCode = "24011017840008";
task4.ExecuteStatus = 3;//执行状态
PlanInfoDataGrid.Add(task4);
1 year ago
}
1 year ago
#endregion
#region 计划列表
#region 加载DataGrid数据
1 year ago
private async Task LoadData()
1 year ago
{
1 year ago
try
1 year ago
{
1 year ago
string stationCode = Appsettings.app("StationInfo", "StationCode");
CurrentTeamTimeView view = GetTeamHour();
1 year ago
var executePlanInfoList =await _executePlanInfoServices.QuerySheetMetalSendPlanData("1001");
if (executePlanInfoList == null) return;
List<SheetMetaSendPlanInfoView> execList = executePlanInfoList.Where(d =>Convert.ToDateTime(d.BeginTime) > view.StartTime || d.ExecuteStatus == 1 || d.ExecuteStatus == 2).ToList();
execList= execList.OrderByDescending(d => d.ExecuteOrder).ToList();
if (execList == null) return;
1 year ago
int i = 1;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
1 year ago
{
1 year ago
PlanInfoDataGrid.Clear();
foreach (var item in execList)
{
TaskExecModel task = new TaskExecModel();
task.No = i;
task.ID = item.ObjId.ToString();
task.OrderCode = item.OrderCode;
task.MaterialCode = item.MaterialCode;
task.MaterialName = item.MaterialName;
task.TaskAmount = item.PlanAmount;
task.CompleteAmount = item.CompleteAmount;
1 year ago
task.BeginTime =Convert.ToDateTime(item.BeginTime);
1 year ago
task.IsExec = item.ExecuteStatus;//执行状态
if (item.PlanType == 1)
{
1 year ago
task.PlanType = "前后板联动";
1 year ago
}
if (item.PlanType == 2)
{
1 year ago
task.PlanType = "前板计划";
1 year ago
}
if (item.PlanType == 3)
{
1 year ago
task.PlanType = "后板计划";
1 year ago
}
task.Recipe = item.MaterialSpecificatons;
1 year ago
task.SidePanelAmount = item.SidePanelAmount;
task.BackPanelAmount = item.BackPanelAmount;
1 year ago
task.TaskCode = item.TaskCode;
task.ExecuteStatus = item.ExecuteStatus;//执行状态
PlanInfoDataGrid.Add(task);
i++;
}
}));
1 year ago
}
1 year ago
catch (Exception ex)
1 year ago
{
1 year ago
log.Error("钣金首页数据加载:"+ex.Message);
1 year ago
}
}
#endregion
#region 刷新计划执行
public async void RefreshPlanShow(SheetMetaSendPlanInfoView execPlan)
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
var planInfoList = _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Contains(stationCode)).Result;
if (planInfoList == null || planInfoList.Count == 0) return;
var list = (from d in planInfoList
group d by d.OrderCode into g
select new
{
OrderCode = g.Key,
CompleteAmount = g.Sum(d => d.CompleteAmount)
}).OrderBy(t => t.OrderCode).ToList();
//更新首页显示信息
BaseOrderInfo orderPlan =await _baseOrderInfoServices.FirstAsync(d => d.OrderCode == execPlan.OrderCode);
var orderInfo=list.FirstOrDefault(d=>d.OrderCode == execPlan.OrderCode);
if (orderPlan != null)
{
OrderCode = execPlan.OrderCode;
MesOrderCode = execPlan.ProductPlanCode;
ProductModel = execPlan.MaterialName;
1 year ago
BeginTime = string.IsNullOrEmpty(execPlan.BeginTime)?"": execPlan.BeginTime.ToString();
PlanMaxNum = orderPlan.OrderAmount;//显示SAP订单数而不是拆分订单计划数
RealQuantity = orderInfo.CompleteAmount;
double diff = orderPlan.OrderAmount - RealQuantity;
DiffQuantity = int.Parse(diff.ToString());
//CompletionRate = (_realQuantity/_planMaxNum).ToString("0%");
CompletionRate = double.Parse((RealQuantity / orderPlan.OrderAmount).ToString("F3"));
}
else
{
OrderCode = string.Empty;
MesOrderCode = string.Empty;
ProductModel = string.Empty;
BeginTime = string.Empty;
PlanMaxNum = 0;
RealQuantity = 0.0;
DiffQuantity = 0;
CompletionRate = 0;
}
}
#endregion
1 year ago
#region 向上
/// <summary>
/// 向上
/// </summary>
[RelayCommand]
private async Task MoveUp(string Id)
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
bool result = await _taskExecutionPlanInfoServices.PlanMoveDown(Id, stationCode);
1 year ago
if (result)
{
await LoadData();
}
}
#endregion
#region 向下
/// <summary>
/// 向下
/// </summary>
[RelayCommand]
private async Task MoveDown(string Id)
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
bool result = await _taskExecutionPlanInfoServices.PlanMoveUp(Id, stationCode);
1 year ago
if (result)
{
await LoadData();
1 year ago
}
}
#endregion
#region 删除
/// <summary>
/// 删除
/// </summary>
[RelayCommand]
private async Task DeletePlan(string Id)
{
MessageBoxResult msg = MessageBox.Show("确定要删除吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (MessageBoxResult.Yes == msg)
{
try
1 year ago
{
int id = Convert.ToInt32(Id);
ExecutePlanInfo executionPlanInfo = _taskExecutionPlanInfoServices.FirstAsync(s => s.ObjId == id).Result;
if (executionPlanInfo.PlanAmount == executionPlanInfo.CompleteAmount)
{
MessageBox.Show("执行计划已经完成,不可以删除!", "系统信息");
return;
}
if (executionPlanInfo.PlanType == 1)
{
var obj_sidePanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("SidePanelPlc"));
var obj_backPanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("BackPanelPLC"));
string taskSideCode = this.GetSidePlanCode(obj_sidePanel);
string taskBackCode = this.GetBackPlanCode(obj_backPanel);
if (taskSideCode.Equals(executionPlanInfo.TaskCode))
{
obj_sidePanel.plc.WriteInt16("D6021", "5");
}
if (taskBackCode.Equals(executionPlanInfo.TaskCode))
{
obj_backPanel.plc.WriteInt16("D4021", "5");
}
var backPanelList = _recordBackPanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
int backPanelCount = backPanelList.Sum(d => d.OutPutAmount);
var sidePanelList = _recordSidePanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
int sidePanelCount = sidePanelList.Sum(d => d.OutPutAmount);
if (backPanelCount == 0&& sidePanelCount==0)
{
executionPlanInfo.IsFlag =0;
}
else
{
executionPlanInfo.IsFlag = 1;
}
}
if (executionPlanInfo.PlanType == 2)
{
var obj_sidePanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("SidePanelPlc"));
string taskSideCode = this.GetSidePlanCode(obj_sidePanel);
if (taskSideCode.Equals(executionPlanInfo.TaskCode))
{
obj_sidePanel.plc.WriteInt16("D6021", "5");
}
1 year ago
var sidePanelList = _recordSidePanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
int sidePanelCount = sidePanelList.Sum(d => d.OutPutAmount);
if (sidePanelCount == 0)
{
executionPlanInfo.IsFlag = 0;
}
else
{
executionPlanInfo.IsFlag = 1;
}
}
if (executionPlanInfo.PlanType == 3)
{
var obj_backPanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("BackPanelPLC"));
string taskBackCode = this.GetBackPlanCode(obj_backPanel);
if (taskBackCode.Equals(executionPlanInfo.TaskCode))
{
obj_backPanel.plc.WriteInt16("D4021", "5");
}
var backPanelList = _recordBackPanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
int backPanelCount = backPanelList.Sum(d => d.OutPutAmount);
if (backPanelCount == 0)
{
executionPlanInfo.IsFlag = 0;
}
else
{
executionPlanInfo.IsFlag = 1;
}
}
bool result= false;
if (executionPlanInfo.IsFlag == 0)
{
result = await _taskExecutionPlanInfoServices.DeleteAsync(executionPlanInfo);
}
else
{
result = await _taskExecutionPlanInfoServices.UpdateAsync(executionPlanInfo);
}
if (result)
{
PlanInfoDataGrid.Clear();
await LoadData();
MessageBox.Show("执行计划删除成功", "系统信息");
}
else
{
MessageBox.Show("执行计划删除失败", "系统信息");
}
1 year ago
}
catch (Exception ex)
1 year ago
{
log.Error("钣金取消计划异常:"+ex.Message);
1 year ago
}
}
}
#endregion
#region 下传计划
/// <summary>
/// 下传计划
/// </summary>
[RelayCommand]
private async Task NextPass(string Id)
{
MessageBoxResult msg = MessageBox.Show("确定要下发计划吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (MessageBoxResult.Yes != msg) return;
var model = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ObjId == int.Parse(Id));
if (model.ExecuteStatus == 2)
{
MessageBox.Show("该计划正在执行中,请勿重复下传", "系统信息");
}
else
{
var result = _taskExecutionPlanInfoServices.PlanNextPass(model);
if (result != null)
{
//刷新列表
MessageBox.Show("执行计划已下达", "系统信息");
}
else
{
MessageBox.Show("执行计划下达失败", "系统信息");
}
}
}
#endregion
#region 初始化datagrid
private ObservableCollection<TaskExecModel> planInfoDataGrid = new ObservableCollection<TaskExecModel>();
public ObservableCollection<TaskExecModel> PlanInfoDataGrid
{
get { return planInfoDataGrid; }
set
{
planInfoDataGrid = value;
OnPropertyChanged();//属性通知
}
}
#endregion
#region 计划拆分执行
/// <summary>
/// 计划拆分执行
/// </summary>
[RelayCommand]
private void SplitPlan()
{
SplitPlanView split = new SplitPlanView();
split.ShowDialog();
}
#endregion
#region 物料库存
/// <summary>
/// 物料库存
/// </summary>
[RelayCommand]
private void InventoryStatistics()
{
MaterialStatisticsView model = new MaterialStatisticsView();
model.ShowDialog();
}
#endregion
#endregion
#region 执行计划
#region 工位名称
private string _stationName;
public string StationName
{
get => _stationName;
set => SetProperty(ref _stationName, value);
}
#endregion
#region 订单编号
private string _orderCode;
public string OrderCode
{
get => _orderCode;
set => SetProperty(ref _orderCode, value);
}
#endregion
#region 计划编号
private string _mesOrderCode;
public string MesOrderCode
1 year ago
{
get => _mesOrderCode;
set => SetProperty(ref _mesOrderCode, value);
1 year ago
}
#endregion
#region 成品型号
private string _productModel;
public string ProductModel
{
get => _productModel;
set => SetProperty(ref _productModel, value);
}
#endregion
#region 开始时间
private string _beginTime;
public string BeginTime
{
get => _beginTime;
set => SetProperty(ref _beginTime, value);
}
#endregion
#region 计划数量
private int _planNum;
public int PlanNum
{
get => _planNum;
set => SetProperty(ref _planNum, value);
}
/// <summary>
/// 计划最大值
/// </summary>
1 year ago
private double _planMaxNum;
public double PlanMaxNum
1 year ago
{
get => _planMaxNum;
set => SetProperty(ref _planMaxNum, value);
}
#endregion
#region 实际数量
1 year ago
private double _realQuantity;
public double RealQuantity
1 year ago
{
get => _realQuantity;
set => SetProperty(ref _realQuantity, value);
}
#endregion
#region 差异数量
private int _diffQuantity;
public int DiffQuantity
{
get => _diffQuantity;
set => SetProperty(ref _diffQuantity, value);
}
#endregion
#region 完成率
private double _completionRate;
public double CompletionRate
{
get => _completionRate;
set => SetProperty(ref _completionRate, 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 下拉框 选择执行状态
/// <summary>
/// 下拉框 选择执行状态
/// </summary>
private string materialTypeCombox;
public string MaterialTypeCombox
{
get { return materialTypeCombox; }
set
{
materialTypeCombox = value;
SetProperty(ref materialTypeCombox, value);
}
}
/// <summary>
/// 当ComboBox选中项更改时发生
/// </summary>
private SelectModel _selectLocation;
public SelectModel SelectLocation
{
get
{
return this._selectLocation;
}
set
{
this._selectLocation = value;
//这里操作更改变化的值
//MessageBox.Show(_selectLocation.ID);
if (_selectLocation != null)
{
WriteFile(_selectLocation.ID);
}
SetProperty(ref _selectLocation, value);
}
}
private ObservableCollection<SelectModel> _locationRoad = new ObservableCollection<SelectModel>();
/// <summary>
/// 集合数据
/// </summary>
public ObservableCollection<SelectModel> LocationSource
{
get
{
return this._locationRoad;
}
set
{
SetProperty(ref _locationRoad, value);
}
}
#endregion
#region 刷新界面显示数据
/// <summary>
/// 刷新界面显示数据
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public async Task UpdatePlanSHow()
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
1 year ago
var info = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
1 year ago
if (info == null) return;
//info= info.First(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
1 year ago
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
//PlanMaxNum = info.PlanAmount;
//OrderCode = info.OrderCode;
//MesMOrderCode = info.ProductPlanCode;
//ProductModel = info.MaterialName;
//BeginTime = info.BeginTime.ToString();
1 year ago
}));
}
#endregion
#region 读写文件
public void WriteFile(int obj)
{
//写入到配置文件中
appConfig.queryExec = obj.ToString();
}
public SelectModel ReadFile()
{
//读取入到配置文件中
var queryExec = appConfig.queryExec;
var model = selectList.FirstOrDefault(d => d.ID == int.Parse(queryExec));
1 year ago
return model;
}
#endregion
#region 刷新当前执行的计划进度
/// <summary>
/// 刷新当前执行的计划进度
/// </summary>
/// <param name="planInfo"></param>
private void RefreshCurrentPlanInfo()
1 year ago
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
PlanInfoDataGrid.Clear();
LoadData();
}));
}
#endregion
#region 刷新小时产量统计
/// <summary>
/// 刷新小时产量统计
/// </summary>
private void RefreshHourAmount()
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
//获取小时产量
string stationCode = Appsettings.app("StationInfo", "StationCode");
var hourAmount = _sysUserInfoServices.GetSheetMetaHourData(stationCode).Result;
if (hourAmount != null)
{
1 year ago
if (Achievement.Count != 0) Achievement.Clear();
1 year ago
ProductionHourList = new List<string>();
ChartValues<ObservablePoint> hourAchievement1 = new ChartValues<ObservablePoint>();
ChartValues<ObservablePoint> hourAchievement2 = new ChartValues<ObservablePoint>();
int hour = 0;
foreach (var item in hourAmount)
{
hourAchievement1.Add(new ObservablePoint(hour,Convert.ToDouble(item.FrontPlateAmount)));
hourAchievement2.Add(new ObservablePoint(hour,Convert.ToDouble(item.RearPanelAmount)));
ProductionHourList.Add(item.HourTime);
hour++;
}
#region 按时间统计
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "前板";
column.ScalesYAt = 0;
1 year ago
column.Values = hourAchievement1;
column.Foreground = Brushes.White;
column.FontSize = 18;
Achievement.Add(column);
Achievement.Add(new ColumnSeries
{
DataLabels = true,
Title = "后板",
ScalesYAt = 0,
Values = hourAchievement2,
1 year ago
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
Foreground = Brushes.CadetBlue,
FontSize = 18
});
#endregion
}
}));
}
#endregion
#region 更新小时产量统计
/// <summary>
/// 更新小时产量统计
/// </summary>
private void RefreshHourAmountChart()
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
//获取小时产量
string stationCode = Appsettings.app("StationInfo", "StationCode");
var hourAmount = _sysUserInfoServices.GetSheetMetaHourData(stationCode).Result;
if (hourAmount != null)
{
int hour = 0;
for (int i = 0; i < hourAmount.Count; i++)
{
Achievement[0].Values[i] =
new ObservablePoint(hour, Convert.ToDouble(hourAmount[i].FrontPlateAmount));
Achievement[1].Values[i] =
new ObservablePoint(hour, Convert.ToDouble(hourAmount[i].RearPanelAmount));
hour++;
}
}
}));
}
#endregion
1 year ago
#region 刷新物料型号统计
/// <summary>
/// 刷新物料型号统计
/// </summary>
private void RefreshMaterialStats()
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
//获取物料型号统计
string stationCode = Appsettings.app("StationInfo", "StationCode");
var sheetMetalTypeList = _sysUserInfoServices.GetSheetMetalTypeData(stationCode).Result;
if (sheetMetalTypeList != null)
{
#region 按类型统计
ChartValues<double> achievement1 = new ChartValues<double>();
ChartValues<double> achievement2 = new ChartValues<double>();
1 year ago
if (ModelStatistics.Count != 0)
{
ModelStatistics.Clear();
}
1 year ago
1 year ago
MaterialNameList = new List<string>();
1 year ago
foreach (var item in sheetMetalTypeList)
{
achievement1.Add(Convert.ToInt32(item.FrontPlateAmount));
achievement2.Add(Convert.ToInt32(item.RearPanelAmount));
MaterialNameList.Add(item.MaterialName);
}
var column2 = new ColumnSeries();
column2.DataLabels = true;
column2.Title = "前板";
column2.ScalesYAt = 0;
1 year ago
column2.Values = achievement1;
column2.Foreground = Brushes.White;
column2.FontSize = 18;
ModelStatistics.Add(column2);
ModelStatistics.Add(new ColumnSeries()
{
DataLabels = true,
Title = "后板",
Values = achievement2,
ScalesYAt = 0,
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
1 year ago
Foreground = Brushes.White,
FontSize = 18
});
#endregion
}
}));
}
#endregion
#region 刷新物料型号统计
/// <summary>
/// 刷新物料型号统计
/// </summary>
private void RefreshMaterialChart()
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
//获取物料型号统计
string stationCode = Appsettings.app("StationInfo", "StationCode");
var sheetMetalTypeList = _sysUserInfoServices.GetSheetMetalTypeData(stationCode).Result;
if (sheetMetalTypeList != null)
{
#region 按类型统计
ChartValues<double> achievement1 = new ChartValues<double>();
ChartValues<double> achievement2 = new ChartValues<double>();
for (int i = 0; i < sheetMetalTypeList.Count; i++)
{
if (ModelStatistics.Count==0)
{
RefreshMaterialStats();
}
else
{
if (sheetMetalTypeList.Count()>0)
{
//RefreshMaterialStats();
1 year ago
try
{
double frontPlateAmount = Convert.ToDouble(sheetMetalTypeList[i].FrontPlateAmount);
ModelStatistics[0].Values[i] = frontPlateAmount;
double rearPanelAmount = Convert.ToDouble(sheetMetalTypeList[i].RearPanelAmount);
ModelStatistics[1].Values[i] = rearPanelAmount;
MaterialNameList[i] = sheetMetalTypeList[i].MaterialName;
}
catch (Exception)
{
RefreshMaterialStats();
}
}
else
{
RefreshMaterialStats();
}
}
}
#endregion
}
}));
}
#endregion
#region 获取当前班组时间
1 year ago
public CurrentTeamTimeView GetTeamHour()
{
try
{
List<CurrentTeamTimeView> obj = _sysUserInfoServices.GetTeamData().Result;
if (obj != null)
{
CurrentTeamTimeView view = new CurrentTeamTimeView();
view.TeamName = obj.FirstOrDefault(d => d.Seq == 1).TeamName;
view.StartTime = obj.Min(d => d.StartTime);
view.EndTime = obj.Max(d => d.EndTime);
return view;
}
}
catch (Exception ex)
1 year ago
{
log.Error($"获取当前班组时间异常:{ex.Message}");
1 year ago
}
return null;
}
#endregion
#region PLC存储的当前正在执行的前后板计划编号
public string GetSidePlanCode(PlcModel obj)
{
bool flag = true;
string planCode = string.Empty;
try
{
do
{
byte[] info = obj.plc.Read("D6030", 59);
if (info == null)
{
Thread.Sleep(1000);
continue;
}
//计划编号
planCode = Encoding.ASCII.GetString(info.Skip(0).Take(20).ToArray()).Replace("\0", "").Trim();
if (!string.IsNullOrEmpty(planCode)) flag = false;
} while (flag);
}
catch (Exception ex)
{
log.Error($"获取前板传入的计划编号:{ex.Message}");
}
return planCode;
}
public string GetBackPlanCode(PlcModel obj)
{
string planCode = string.Empty;
try
{
bool flag = true;
do
{
byte[] info = obj.plc.Read("D4030", 59);
if (info == null)
{
Thread.Sleep(1000);
continue;
}
//计划编号
planCode = Encoding.ASCII.GetString(info.Skip(0).Take(20).ToArray()).Replace("\0", "").Trim();
if (!string.IsNullOrEmpty(planCode)) flag = false;
} while (flag);
}
catch (Exception ex)
{
log.Error($"获取后板传入的计划编号:{ex.Message}");
}
return planCode;
}
#endregion
1 year ago
}
1 year ago
}