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#

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.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;
using log4net;
using Aucma.Core.HwPLc;
using System.Text;
using System.Threading;
using Admin.Core.Model.Model_New;
using Aucma.Core.SheetMetalTasks;
/*
* 首页信息
*/
namespace Aucma.Core.SheetMetal.ViewModels
{
public partial class IndexPageViewModel : ObservableObject
{
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(IndexPageViewModel));
#region 初始化接口
protected readonly IExecutePlanInfoServices? _taskExecutionPlanInfoServices;
protected readonly IRecordBackPanelComplateServices _recordBackPanelComplateServices;
protected readonly IRecordSidePanelComplateServices _recordSidePanelComplateServices;
protected readonly IExecutePlanInfoServices? _executePlanInfoServices;
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()
{
ID=1,
TypeName="手动"
},
new SelectModel()
{
ID=2,
TypeName="自动"
}};
#endregion
#region 定义对象和定义字段
public Func<double, string> Formatter { get; set; }
public HwPLc.PlcModel obj = null;
#endregion
#region 构造函数
public IndexPageViewModel()
{
_stationName = Appsettings.app("StationInfo", "StationName");//工位名称
_baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
_executePlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
_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>();
Task.WaitAll(LoadData());
AddSelectData();//添加下拉菜单
RefreshHourAmount();//小时产量
RefreshMaterialStats();//型号产量
//——测试——
//InitEveryDayMethod();//小时产量
//InitExecMethod();//执行列表
//LoadDataTest();
//——测试 end——
AucamSheetMetalTaskService.RefreshCurrentPlanInfoEvent += RefreshCurrentPlanInfo;
QuantityIssuedViewModel.RefreshCretaePlanInfoEvent += LoadData;
AucamSheetMetalTaskService.RefreshCreatePlanInfoEvent += LoadData;
AucamSheetMetalTaskService.RefreshChatEvent += RefreshChat;
AucamSheetMetalTaskService.RefreshPlanInfoEvent += RefreshPlanShow;
}
#endregion
#region 更新前端数据
public Task RefreshChat()
{
RefreshHourAmountChart();//小时产量
RefreshMaterialChart();//型号产量
return Task.CompletedTask;
}
#endregion
#region 下拉
public void AddSelectData()
{
foreach (var item in selectList)
{
LocationSource.Add(item);
}
SelectLocation = ReadFile();
}
#endregion
#region 订单统计
private void InitExecMethod()
{
//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;
//CompletionRate = (_realQuantity / _planMaxNum).ToString("0%");
CompletionRate = double.Parse((RealQuantity / PlanMaxNum).ToString("F3"));
}
#endregion
#region ——测试
/// <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)
};
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "前板";
column.ScalesYAt = 0;
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"
};
//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"
};
#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);
}
#endregion
#region 计划列表
#region 加载DataGrid数据
private async Task LoadData()
{
try
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
CurrentTeamTimeView view = GetTeamHour();
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;
int i = 1;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
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;
task.BeginTime =Convert.ToDateTime(item.BeginTime);
task.IsExec = item.ExecuteStatus;//执行状态
if (item.PlanType == 1)
{
task.PlanType = "前后板联动";
}
if (item.PlanType == 2)
{
task.PlanType = "前板计划";
}
if (item.PlanType == 3)
{
task.PlanType = "后板计划";
}
task.Recipe = item.MaterialSpecificatons;
task.SidePanelAmount = item.SidePanelAmount;
task.BackPanelAmount = item.BackPanelAmount;
task.TaskCode = item.TaskCode;
task.ExecuteStatus = item.ExecuteStatus;//执行状态
PlanInfoDataGrid.Add(task);
i++;
}
}));
}
catch (Exception ex)
{
log.Error("钣金首页数据加载:"+ex.Message);
}
}
#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;
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
#region 向上
/// <summary>
/// 向上
/// </summary>
[RelayCommand]
private async Task MoveUp(string Id)
{
string stationCode = Appsettings.app("StationInfo", "StationCode");
bool result = await _taskExecutionPlanInfoServices.PlanMoveDown(Id, stationCode);
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);
if (result)
{
await LoadData();
}
}
#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
{
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");
}
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("执行计划删除失败", "系统信息");
}
}
catch (Exception ex)
{
log.Error("钣金取消计划异常:"+ex.Message);
}
}
}
#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
{
get => _mesOrderCode;
set => SetProperty(ref _mesOrderCode, value);
}
#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>
private double _planMaxNum;
public double PlanMaxNum
{
get => _planMaxNum;
set => SetProperty(ref _planMaxNum, value);
}
#endregion
#region 实际数量
private double _realQuantity;
public double RealQuantity
{
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");
var info = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
if (info == null) return;
//info= info.First(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
//PlanMaxNum = info.PlanAmount;
//OrderCode = info.OrderCode;
//MesMOrderCode = info.ProductPlanCode;
//ProductModel = info.MaterialName;
//BeginTime = info.BeginTime.ToString();
}));
}
#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));
return model;
}
#endregion
#region 刷新当前执行的计划进度
/// <summary>
/// 刷新当前执行的计划进度
/// </summary>
/// <param name="planInfo"></param>
private void RefreshCurrentPlanInfo()
{
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)
{
if (Achievement.Count != 0) Achievement.Clear();
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;
column.Values = hourAchievement1;
column.Foreground = Brushes.White;
column.FontSize = 18;
Achievement.Add(column);
Achievement.Add(new ColumnSeries
{
DataLabels = true,
Title = "后板",
ScalesYAt = 0,
Values = hourAchievement2,
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
#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>();
if (ModelStatistics.Count != 0)
{
ModelStatistics.Clear();
}
MaterialNameList = new List<string>();
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;
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)),
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();
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 获取当前班组时间
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)
{
log.Error($"获取当前班组时间异常:{ex.Message}");
}
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
}
}