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.Core.OldBoxFoam/ViewModels/OldBoxFoamPageViewModel.cs

728 lines
30 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 Admin.Core.Common;
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using Aucma.Core.HwPLc;
using Aucma.Core.OldBoxFoam.Business;
using Aucma.Core.OldBoxFoam.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using log4net;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
/**
* 老发泡线监控
* */
namespace Aucma.Core.OldBoxFoam.ViewModels
{
public partial class OldBoxFoamPageViewModel : ObservableObject
{
IBoxFoamDataServices? _oldBoxFoamDataServices;
IOldBoxFoamTypeServices _oldBoxFoamTypeServices;
private readonly IBoxFoamPlanServices _boxFoamPlanServices;
private readonly ISysUserInfoServices _sysUserInfoServices;
private readonly ICurrentTeamTimeServices _currentTeamTimeServices;
private readonly IBoxFoamDataRecordServices _boxFoamDataRecordServices;
private readonly IBoxFoamDataRealTimeServices? _boxFoamDataRealTimeServices;
private readonly IBoxFoamDataRealTimeHistoryServices _boxFoamDataRealTimeHistoryServices;
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OldBoxFoamPageViewModel));
Collection collection = new Collection();
System.Timers.Timer timer2 = new System.Timers.Timer(3000);
int totalAmount = 0;
bool flag = true;
public OldBoxFoamPageViewModel() {
_oldBoxFoamDataServices = App.ServiceProvider.GetService<IBoxFoamDataServices>();
_oldBoxFoamTypeServices = App.ServiceProvider.GetService<IOldBoxFoamTypeServices>();
_boxFoamPlanServices = App.ServiceProvider.GetService<IBoxFoamPlanServices>();
_sysUserInfoServices = App.ServiceProvider.GetService<ISysUserInfoServices>();
_currentTeamTimeServices = App.ServiceProvider.GetService<ICurrentTeamTimeServices>();
_boxFoamDataRealTimeServices = App.ServiceProvider.GetService<IBoxFoamDataRealTimeServices>();
_boxFoamDataRecordServices = App.ServiceProvider.GetService<IBoxFoamDataRecordServices>();
_boxFoamDataRealTimeHistoryServices = App.ServiceProvider.GetService<IBoxFoamDataRealTimeHistoryServices>();
//AucamTaskService.RefreshOldBoxFoamDataDelegateEvent += OldBoxFoamOnLoad3;
//timer2.Elapsed += new System.Timers.ElapsedEventHandler(RealTimeFoamingTask); //到达时间的时候执行事件;
//timer2.AutoReset = true;//设置是执行一次false还是一直执行(true)
//timer2.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它
//timer2.Start();//timer.Start()的内部原理还是设置timer.Enabled = true;
}
#region 初始化加载数据
private void OldBoxFoamOnLoad(List<FixtureStatus> prderList)
{
try
{
//collection.startCollect();
///if (collection.listFixtureStatus == null) return;
//var prderList= collection.listFixtureStatus;
int num = prderList.Sum(d => d.Yield);
if (prderList.Count==0) return;
totalAmount = 0;
_fixtureName.Clear();
_production.Clear();
_beat.Clear();
_statusColor.Clear();
foreach (var item in prderList)
{
if (item.Status == 2)//生产
{
_statusColor.Add("green");
}
else
{
_statusColor.Add("red");
}
_fixtureName.Add(item.FixtureBoxType);
_production.Add(item.Yield);
//_beat.Add(item.BoxBeat);
totalAmount = totalAmount + item.Yield;
}
Totle = totalAmount.ToString();
}
catch (Exception ex)
{
log.Error("获取库存接口数据异常." + ex.Message);
}
}
public async Task OldBoxFoamOnLoad3()
{
try
{
//Collection.startCollect();
if (Collection.listFixtureStatus == null) return;
var prderList = Collection.listFixtureStatus;
int num = prderList.Sum(d => d.Yield);
if (prderList.Count==0) return;
totalAmount = 0;
_fixtureName.Clear();
_production.Clear();
_beat.Clear();
_statusColor.Clear();
foreach (var item in prderList)
{
if (item.Status == 1)//生产
{
_statusColor.Add("green");
}
else
{
_statusColor.Add("red");
}
_fixtureName.Add(item.FixtureBoxType);
_production.Add(item.Yield);
//_beat.Add(item.BoxBeat);
totalAmount = totalAmount + item.Yield;
}
Totle = totalAmount.ToString();
}
catch (Exception ex)
{
log.Error("获取库存接口数据异常." + ex.Message);
}
}
public async Task OldBoxFoamTypeOnLoad()
{
var list =await _oldBoxFoamTypeServices.QueryAsync();
if (list == null) return;
foreach (var item in list)
{
OldBoxFoamTypeModel model = new OldBoxFoamTypeModel();
model.ObjId = item.ObjId;
model.Local = item.Local;
model.Boxtype = item.Boxtype;
model.Storeamount = item.Storeamount;
_oldBoxFoamTypeDataGrid.Add(model);
}
}
public Task OldBoxFoamTypeOnLoad3(List<OldBoxFoamType> list)
{
if (list == null) return Task.CompletedTask;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
OldBoxFoamTypeDataGrid.Clear();
foreach (var item in list)
{
OldBoxFoamTypeModel model = new OldBoxFoamTypeModel();
model.ObjId = item.ObjId;
model.Local = item.Local;
model.Boxtype = item.Boxtype;
model.Storeamount = item.Storeamount;
OldBoxFoamTypeDataGrid.Add(model);
}
}));
return Task.CompletedTask;
}
#endregion
#region 初始化发泡线 datagrid
private ObservableCollection<OldBoxFoamDataModel> _oldBoxFoamDataGrid = new ObservableCollection<OldBoxFoamDataModel>();
public ObservableCollection<OldBoxFoamDataModel> OldBoxFoamDataGrid
{
get => _oldBoxFoamDataGrid;
set => SetProperty(ref _oldBoxFoamDataGrid, value);
}
#endregion
#region 初始化泡前库 datagrid
private ObservableCollection<OldBoxFoamTypeModel> _oldBoxFoamTypeDataGrid = new ObservableCollection<OldBoxFoamTypeModel>();
public ObservableCollection<OldBoxFoamTypeModel> OldBoxFoamTypeDataGrid
{
get => _oldBoxFoamTypeDataGrid;
set => SetProperty(ref _oldBoxFoamTypeDataGrid, value);
}
#endregion
#region 夹具状态
private ObservableCollection<string> _statusColor = new ObservableCollection<string>();
public ObservableCollection<string> StatusColor
{
get => _statusColor;
set => SetProperty(ref _statusColor, value);
}
#endregion
#region 夹具名称
private ObservableCollection<string> _fixtureName = new ObservableCollection<string>();
public ObservableCollection<string> FixtureName
{
get => _fixtureName;
set => SetProperty(ref _fixtureName, value);
}
#endregion
#region 夹具产量
/// <summary>
///夹具产量
/// </summary>
private ObservableCollection<int> _production = new ObservableCollection<int>();
public ObservableCollection<int> Production
{
get => _production;
set => SetProperty(ref _production, value);
}
#endregion
#region 节拍
/// <summary>
///夹具产量
/// </summary>
private ObservableCollection<int> _beat = new ObservableCollection<int>();
public ObservableCollection<int> Beat
{
get => _beat;
set => SetProperty(ref _beat, value);
}
#endregion
#region 总计
private string _totle;
public string Totle
{
get => _totle;
set => SetProperty(ref _totle, value);
}
#endregion
Semaphore semaphore = new Semaphore(1, 1);
#region 将采集到的数据保存
/// <summary>
/// 将采集到的数据保存
/// </summary>
/// <param name="mode"></param>
public async void RealTimeFoamingTask(object? sender, ElapsedEventArgs e)
{
semaphore.WaitOne();
try
{
string productLineCode = Appsettings.app("StationInfo", "ProductLineCode");
DateTime now = DateTime.Now;
List<CurrentTeamTime> timeList = await _currentTeamTimeServices.QueryAsync(d => d.StartTime <= now && d.EndTime >= now);
if (timeList.Count > 0)
{
ExecHourDataAsync(productLineCode);
}
else
{
ShiftChangeAsync(productLineCode);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
semaphore.Release();
}
}
#endregion
#region 获取小时数据
public async void ExecHourDataAsync(string productLineCode)
{
List<FixtureStatus> bLis = Collection.listFixtureStatus;
if (bLis.Count == 0) return;
List<BoxFoamPlan> planList = await _boxFoamPlanServices.QueryAsync();
List<BoxFoamDataRealTime> bfds = await _boxFoamDataRealTimeServices.QueryAsync();
for (int j = 0; j < bLis.Count; j++)
{
try
{
if (string.IsNullOrEmpty(bLis[j].FixtureBoxType)) continue;
BoxFoamPlan plan = planList.FirstOrDefault(d => d.MaterialCode == bLis[j].FixtureBoxType && d.PlanAmount > d.CompleteAmount);
if (plan != null)
{
int complateAmount = 0;
BoxFoamDataRealTime bfd = bfds.SingleOrDefault(d => d.FixtureBoxtype == bLis[j].FixtureBoxType && d.SerialNumber == bLis[j].ObjId);
if (bfd != null)
{
//更新计划数量
complateAmount = bLis[j].Yield - bfd.FixtureProductioncapacity;
UpdateClampData(bLis[j], bfd);
}
else
{
FixtureStatus fixtureStatus = bLis[j];
SaveClampData(productLineCode, fixtureStatus);
}
plan.CompleteAmount = plan.CompleteAmount + complateAmount;
if (complateAmount > 0)
{
//保存历史记录
BoxFoamDataRealTimeHistory history = new BoxFoamDataRealTimeHistory();
history.PlantCode = bfd.PlantCode;
history.ProductlineCode = bfd.ProductlineCode;
history.ProcessCode = bfd.ProcessCode;
history.StationCode = bfd.StationCode;
history.FixtureProductioncapacity = bLis[j].Yield;
history.FixtureCuringtimesettingvalue = bLis[j].PlanCuringTime.ToString();
history.FixtureActualtime = bLis[j].RealCuringTime.ToString();
history.UpdatedTime = DateTime.Now;
//事务合并
await _boxFoamDataRealTimeHistoryServices.AddAsync(history);
await _boxFoamPlanServices.UpdateAsync(plan);
}
}
else
{
//更新小时数据
BoxFoamDataRealTime bfd = bfds.SingleOrDefault(d => d.FixtureBoxtype == bLis[j].FixtureBoxType && d.SerialNumber == bLis[j].ObjId);
if (bfd != null)
{
UpdateClampData(bLis[j], bfd);
}
else
{
SaveClampData(productLineCode, bLis[j]);
}
}
}
catch { }
}
}
#endregion
#region 切换班组
private async void ShiftChangeAsync(string productLineCode)
{
try
{
//切换班组计划
var currentTeamTimeList = await _sysUserInfoServices.GetTeamData();
if (currentTeamTimeList.Count == 0) return;
var list = await _boxFoamDataRealTimeServices.QueryAsync(d => d.ProductlineCode == productLineCode);
//更新计划表操作
CurrentTeamTime currentTeamTime = await _currentTeamTimeServices.FirstAsync();
currentTeamTime.TeamName = currentTeamTimeList.FirstOrDefault().TeamName;
currentTeamTime.StartTime = currentTeamTimeList.Min(d => d.StartTime);
currentTeamTime.EndTime = currentTeamTimeList.Max(d => d.EndTime);
bool result = await _currentTeamTimeServices.UpdateAsync(currentTeamTime);
if (result)
{
var obj2 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc"));
if (obj2 == null) { return; }
//清空 当班计划
var realTimeList = await _boxFoamDataRealTimeHistoryServices.QueryAsync(d => d.ProductlineCode == productLineCode);
await _boxFoamDataRealTimeHistoryServices.DeletesAsync(realTimeList);
var plan = await _boxFoamPlanServices.QueryAsync(d => d.ProductLineCode == productLineCode);
await _boxFoamPlanServices.DeletesAsync(plan);
}
}
catch { }
}
#endregion
#region 更新夹具型号
/// <summary>
/// 更新夹具型号
/// </summary>
public async void UpdateClampData(FixtureStatus fixtureStatus, BoxFoamDataRealTime bfd)
{
try
{
bfd.FixtureBoxtype = fixtureStatus.FixtureBoxType;
bfd.FixtureStatus = fixtureStatus.Status.ToString();
bfd.FixtureProductioncapacity = fixtureStatus.Yield;
bfd.FixtureCuringtimesettingvalue = fixtureStatus.PlanCuringTime.ToString();
bfd.FixtureActualtime = fixtureStatus.RealCuringTime.ToString();
bfd.UpdatedTime = DateTime.Now;
await _boxFoamDataRealTimeServices.UpdateAsync(bfd);
}
catch { }
}
#endregion
#region 新增夹具型号
/// <summary>
/// 更新夹具型号
/// </summary>
public async void SaveClampData(string productLineCode, FixtureStatus fixtureStatus)
{
var obj = await _sysUserInfoServices.GetProductLineInfo(productLineCode);
if (obj != null)
{
BoxFoamDataRealTime bfd = new BoxFoamDataRealTime();
bfd.PlantCode = obj.PlantCode;
bfd.ProductlineCode = productLineCode;
bfd.ProcessCode = obj.ProcessCode;
bfd.StationCode = obj.StationCode;
bfd.SerialNumber = fixtureStatus.ObjId;
bfd.FixtureBoxtype = fixtureStatus.FixtureBoxType;
bfd.FixtureStatus = fixtureStatus.Status.ToString();
bfd.FixtureProductioncapacity = fixtureStatus.Yield;
bfd.FixtureCuringtimesettingvalue = fixtureStatus.PlanCuringTime.ToString();
bfd.FixtureActualtime = fixtureStatus.RealCuringTime.ToString();
bfd.CreatedTime = DateTime.Now;
bfd.UpdatedTime = DateTime.Now;
await _boxFoamDataRealTimeServices.AddAsync(bfd);
}
}
#endregion
#region 原数据采集方法
/// <summary>
/// 将采集到的数据保存
/// </summary>
/// <param name="mode"></param>
//public async void RealTimeFoamingTask(object? sender, ElapsedEventArgs e)
//{
// semaphore.WaitOne();
// try
// {
// string productLineCode = Appsettings.app("StationInfo", "ProductLineCode");
// if (Collection.listFixtureStatus == null|| Collection.listFixtureStatus.Count==0) return;
// DateTime now = DateTime.Now;
// CurrentTeamTime time = await _currentTeamTimeServices.FirstAsync(d => d.StartTime <= now && d.EndTime >= now);
// if (time != null)
// {
// ExecHourData(productLineCode);
// }
// else
// {
// ShiftChange(productLineCode);
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine(ex.Message.ToString());
// }
// finally
// {
// semaphore.Release();
// }
//}
//private async void ShiftChange(string productLineCode)
//{
// //切换班组计划
// var list = await _oldBoxFoamDataServices.QueryAsync(d => d.ProductLineCode == productLineCode);
// List<BoxFoamDataRecord> recordList = new List<BoxFoamDataRecord>();
// var currentTeamTimeList = await _sysUserInfoServices.GetTeamData();
// if (currentTeamTimeList.Count == 0) return;
// //更新计划表操作
// CurrentTeamTime currentTeamTime = await _currentTeamTimeServices.FirstAsync();
// currentTeamTime.TeamName = currentTeamTimeList.FirstOrDefault().TeamName;
// currentTeamTime.StartTime = currentTeamTimeList.Min(d => d.StartTime);
// currentTeamTime.EndTime = currentTeamTimeList.Max(d => d.EndTime);
// await _currentTeamTimeServices.UpdateAsync(currentTeamTime);
// //可以使用Mapping 映射
// list.ForEach(d =>
// {
// BoxFoamDataRecord record = new BoxFoamDataRecord();
// record.OrderCode = d.OrderCode;
// record.ProductLineCode = d.ProductLineCode;
// record.Fixturestatus = d.Production;
// record.CuringTimeSettingValue = d.CuringTimeSettingValue;
// record.ActualValue = d.ActualValue;
// record.AnHour = d.AnHour;
// record.TwoHour = d.TwoHour;
// record.ThreeHour = d.ThreeHour;
// record.FourHour = d.FourHour;
// record.FiveHour = d.FiveHour;
// record.SixHour = d.SixHour;
// record.SevenHour = d.SevenHour;
// record.EightHour = d.EightHour;
// record.NineHour = d.NineHour;
// record.TenHour = d.TenHour;
// record.ElevenHour = d.ElevenHour;
// record.TwelveHour = d.TwelveHour;
// record.BoxFixturesideplate = d.BoxFixturesideplate;
// record.BoxClosebetatemperature = d.BoxClosebetatemperature;
// record.BoxBeat = d.BoxBeat;
// record.CreateTime = DateTime.Now;
// });
// int result = await _boxFoamDataRecordServices.AddAsync(recordList);
// if (result > 0)
// {
// var obj2 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc1"));
// if (obj2 == null) { return; }
// obj2.plc.WriteInt16("M216", "1");//换班 数据清空
// //清空 当班计划
// await _oldBoxFoamDataServices.DeletesAsync(list);
// }
//}
//Semaphore semaphore = new Semaphore(1, 1);
//private async void ExecHourData(string productLineCode)
//{
// try
// {
// List<FixtureStatus> bList = new List<FixtureStatus>();
// var collectionList = collection.listFixtureStatus;
// if (collectionList.Count == 0) return;
// bList.AddRange(collectionList);
// List<BoxFoamData> bfds = await _oldBoxFoamDataServices.QueryAsync();
// List<OldBoxFoamType> spaceList = await _oldBoxFoamTypeServices.QueryAsync();
// List<BoxFoamPlan> planList = await _boxFoamPlanServices.QueryAsync();
// for (int j = 0; j < bList.Count; j++)
// {
// try
// {
// OldBoxFoamType space = spaceList.FirstOrDefault(d => d.Boxtype == bList[j].FixtureBoxType);
// //根据夹具找货道,根据货道找物料
// if (spaceList != null)
// {
// BoxFoamPlan plan = planList.FirstOrDefault(d => d.MaterialCode == space.MaterialCode && d.PlanAmount > d.CompleteAmount);
// if (plan != null)
// {
// int complateAmount = 0;
// //更新小时数据
// BoxFoamData bfd = bfds.FirstOrDefault(d => d.Fixtureboxtype == bList[j].FixtureBoxType && d.MainId == bList[j].ObjId);
// if (bfd != null)
// {
// //更新计划数量
// complateAmount = bList[j].Yield - bfd.Production;
// UpdateBoxData(bList[j], bfd);
// }
// else
// {
// SaveBoxData(productLineCode, bList[j]);
// }
// plan.CompleteAmount = plan.CompleteAmount + complateAmount;
// await _boxFoamPlanServices.UpdateAsync(plan);
// }
// else
// {
// //更新小时数据
// BoxFoamData bfd = bfds.FirstOrDefault(d => d.Fixtureboxtype == bList[j].FixtureBoxType && d.MainId == bList[j].ObjId);
// if (bfd != null)
// {
// UpdateBoxData(bList[j], bfd);
// }
// else
// {
// SaveBoxData(productLineCode, bList[j]);
// }
// }
// }
// else
// {
// //更新小时数据
// BoxFoamData bfd = bfds.FirstOrDefault(d => d.Fixtureboxtype == bList[j].FixtureBoxType && d.MainId == bList[j].ObjId);
// if (bfd != null)
// {
// UpdateBoxData(bList[j], bfd);
// }
// else
// {
// SaveBoxData(productLineCode, bList[j]);
// }
// }
// }
// catch { }
// }
// OldBoxFoamOnLoad(bList);
// }
// catch (Exception ex)
// {
// Console.WriteLine(ex.Message);
// }
//}
//private async void UpdateBoxData(FixtureStatus item, BoxFoamData bfd)
//{
// int hour = GetTeamHour(DateTime.Now).Seq;
// switch (hour)
// {
// case 1:
// bfd.AnHour = item.Yield - bfd.Production;
// break;
// case 2:
// bfd.TwoHour = item.Yield - bfd.Production;
// break;
// case 3:
// bfd.ThreeHour = item.Yield - bfd.Production;
// break;
// case 4:
// bfd.FourHour = item.Yield - bfd.Production;
// break;
// case 5:
// bfd.FiveHour = item.Yield - bfd.Production;
// break;
// case 6:
// bfd.SixHour = item.Yield - bfd.Production;
// break;
// case 7:
// bfd.SevenHour = item.Yield - bfd.Production;
// break;
// case 8:
// bfd.EightHour = item.Yield - bfd.Production;
// break;
// case 9:
// bfd.NineHour = item.Yield - bfd.Production;
// break;
// case 10:
// bfd.TenHour = item.Yield - bfd.Production;
// break;
// case 11:
// bfd.ElevenHour = item.Yield - bfd.Production;
// break;
// case 12:
// bfd.TwelveHour = item.Yield - bfd.Production;
// break;
// default:
// break;
// }
// bfd.Production = item.Yield;
// await _oldBoxFoamDataServices.UpdateAsync(bfd);
//}
//private async void SaveBoxData(string productLineCode, FixtureStatus item)
//{
// BoxFoamData bfdata = new BoxFoamData();
// bfdata.MainId = item.ObjId;
// bfdata.ProductLineCode = productLineCode;
// bfdata.Fixtureboxtype = item.FixtureBoxType;
// bfdata.Fixturestatus = item.Status;
// bfdata.Production = item.Yield;
// bfdata.CuringTimeSettingValue = item.PlanCuringTime.ToString();
// bfdata.ActualValue = item.RealCuringTime.ToString();
// int hour = GetTeamHour(DateTime.Now).Seq;
// switch (hour)
// {
// case 1:
// bfdata.AnHour = item.Yield = bfdata.Production;
// break;
// case 2:
// bfdata.TwoHour = item.Yield = bfdata.Production;
// break;
// case 3:
// bfdata.ThreeHour = item.Yield = bfdata.Production;
// break;
// case 4:
// bfdata.FourHour = item.Yield = bfdata.Production;
// break;
// case 5:
// bfdata.FiveHour = item.Yield = bfdata.Production;
// break;
// case 6:
// bfdata.SixHour = item.Yield = bfdata.Production;
// break;
// case 7:
// bfdata.SevenHour = item.Yield = bfdata.Production;
// break;
// case 8:
// bfdata.EightHour = item.Yield = bfdata.Production;
// break;
// case 9:
// bfdata.NineHour = item.Yield = bfdata.Production;
// break;
// case 10:
// bfdata.TenHour = item.Yield = bfdata.Production;
// break;
// case 11:
// bfdata.ElevenHour = item.Yield = bfdata.Production;
// break;
// case 12:
// bfdata.TwelveHour = item.Yield = bfdata.Production;
// break;
// default:
// break;
// }
// bfdata.MainId = item.ObjId;
// await _oldBoxFoamDataServices.AddAsync(bfdata);
//}
//public CurrentTeamTimeView GetTeamHour()
//{
// DateTime now = DateTime.Now;
// var list = _sysUserInfoServices.GetTeamData().Result;
// if (list != null)
// {
// //var obj = list.FirstOrDefault().EndTime.ToString("HH:mm");
// var view = list.FirstOrDefault();
// return view;
// }
// return null;
//}
//public CurrentTeamTimeView GetTeamHour(DateTime now)
//{
// var obj = _sysUserInfoServices.GetTeamData(now).Result;
// if (obj != null)
// {
// return obj;
// }
// return null;
//}
#endregion
}
}