724 lines
28 KiB
C#
724 lines
28 KiB
C#
|
|
using Common;
|
|||
|
|
using Common.Models;
|
|||
|
|
using CommunityToolkit.Mvvm.Input;
|
|||
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|||
|
|
using MegaRobo.C00225155.AppServer;
|
|||
|
|
using MegaRobo.C00225155.DataAccess;
|
|||
|
|
using MegaRobo.C00225155.Entities;
|
|||
|
|
using MegaRobo.Contract;
|
|||
|
|
using MegaRobo.ControlDevices.Models;
|
|||
|
|
using MegaRobo.Entities;
|
|||
|
|
using MegaRobo.WpfInfrastructure.Abstractions;
|
|||
|
|
using NPOI.HSSF.UserModel;
|
|||
|
|
using NPOI.SS.Formula.Functions;
|
|||
|
|
using NPOI.SS.UserModel;
|
|||
|
|
using NPOI.XSSF.UserModel;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Collections.ObjectModel;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using System.Windows.Input;
|
|||
|
|
|
|||
|
|
namespace MegaRobo.C00225155App.MenuViewModels
|
|||
|
|
{
|
|||
|
|
public class FlowConfigViewModel : ViewModelBaseEx
|
|||
|
|
{
|
|||
|
|
#region 8个缓存位置
|
|||
|
|
public ObservableCollection<int> BoxIndexList { get; set; } = new ObservableCollection<int>();
|
|||
|
|
private int selectedBoxIndex;
|
|||
|
|
public int SelectedBoxIndex
|
|||
|
|
{
|
|||
|
|
get { return selectedBoxIndex; }
|
|||
|
|
set { SetProperty(ref selectedBoxIndex, value); }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private BoxTypeEnum selectedboxtype;
|
|||
|
|
public BoxTypeEnum SelectedBoxType
|
|||
|
|
{
|
|||
|
|
get { return selectedboxtype; }
|
|||
|
|
set {
|
|||
|
|
SetProperty(ref selectedboxtype, value);
|
|||
|
|
if (selectedboxtype == BoxTypeEnum._40mL原液工装)
|
|||
|
|
{
|
|||
|
|
BoxIndexList.Clear(); BoxIndexList.Add(1); BoxIndexList.Add(5);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
BoxIndexList.Clear(); BoxIndexList.Add(3); BoxIndexList.Add(4);
|
|||
|
|
BoxIndexList.Add(7); BoxIndexList.Add(8);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
private ObservableCollection<SampleBottleModel> samplelist = new ObservableCollection<SampleBottleModel>();
|
|||
|
|
private ObservableCollection<SourceLiquidBottleModel> liquidlist = new ObservableCollection<SourceLiquidBottleModel>();
|
|||
|
|
private ObservableCollection<SourcePowderBottleModel> powderlist = new ObservableCollection<SourcePowderBottleModel>();
|
|||
|
|
private ObservableCollection<SourcePowderBottleModel> powderlist_125 = new ObservableCollection<SourcePowderBottleModel>();
|
|||
|
|
|
|||
|
|
private WorkService workService;
|
|||
|
|
private IDataAccessService dataAccessService;
|
|||
|
|
|
|||
|
|
public ProjectProperty ProjectPro
|
|||
|
|
{
|
|||
|
|
get => workService.ProjectPro;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
if (workService.ProjectPro != value)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro = value;
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region 方案按钮操作
|
|||
|
|
public ICommand NewProjectCommand { get; set; }
|
|||
|
|
public ICommand OpenProjectCommand { get; set; }
|
|||
|
|
public ICommand SaveAsCommand { get; set; }
|
|||
|
|
public ICommand SaveCommand { get; set; }
|
|||
|
|
public ICommand ExportExcelCommand { get; set; }
|
|||
|
|
public ICommand ImportExcelCommand { get; set; }
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region 样品工装参数
|
|||
|
|
/// <summary>
|
|||
|
|
/// 更新指定工装的所有配方
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand UpdateSampleBoxPropertyCommand { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 清空指定工装的所有配方
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand ClearSampleBoxPropertyCommand { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 瓶子都置为空
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand ResetAllSampleBottlesCommand { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 瓶子都置为满瓶子
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand FillAllSampleBottlesCommand { get; set; }
|
|||
|
|
|
|||
|
|
public ICommand ResetSampleBottlesCommand { get; set; }
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region Tip头工装
|
|||
|
|
/// <summary>
|
|||
|
|
/// Tip头工装置为空
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand ResetAllTipHeadCommand { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Tip头工装置为满
|
|||
|
|
/// </summary>
|
|||
|
|
public ICommand FillAllTipHeadCommand { get; set; }
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
// 命令:加载工装(参数为BoxTypeEnum)
|
|||
|
|
public ICommand LoadBoxCommand { get; set; }
|
|||
|
|
|
|||
|
|
public FlowConfigViewModel()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void Initialize(ICoreService coreService, string title, params object[] args)
|
|||
|
|
{
|
|||
|
|
base.Initialize(coreService, title, args);
|
|||
|
|
|
|||
|
|
samplelist = new ObservableCollection<SampleBottleModel>();
|
|||
|
|
for (int i = 0; i < 12; i++)
|
|||
|
|
{
|
|||
|
|
samplelist.Add(new SampleBottleModel()
|
|||
|
|
{
|
|||
|
|
SampleBottleLidState = SampleBottleLidStateEnum.Close,
|
|||
|
|
PosId_InBox = i + 1,
|
|||
|
|
HaveBottle = true,
|
|||
|
|
bDoseFinish = false,
|
|||
|
|
SNCode = string.Empty,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
liquidlist = new ObservableCollection<SourceLiquidBottleModel>();
|
|||
|
|
for (int i = 0; i < 8; i++)
|
|||
|
|
{
|
|||
|
|
liquidlist.Add(new SourceLiquidBottleModel()
|
|||
|
|
{
|
|||
|
|
LiquidBottleLidState = SourceBottleLidStateEnum.Close,
|
|||
|
|
PosId_InBox = i + 1,
|
|||
|
|
HaveBottle = true,
|
|||
|
|
RemainVolume = 0,
|
|||
|
|
SNCode = string.Empty,
|
|||
|
|
SourceLiquidBottleState = SourceBottleStateEnum.Idl,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
powderlist = new ObservableCollection<SourcePowderBottleModel>();
|
|||
|
|
for (int i = 0; i < 4; i++)
|
|||
|
|
{
|
|||
|
|
powderlist.Add(new SourcePowderBottleModel()
|
|||
|
|
{
|
|||
|
|
PosId_InBox = i + 1,
|
|||
|
|
HaveBottle = true,
|
|||
|
|
RemainWeight = 0,
|
|||
|
|
SNCode = string.Empty,
|
|||
|
|
SourcePowderBottleState = SourceBottleStateEnum.Idl,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
powderlist_125 = new ObservableCollection<SourcePowderBottleModel>();
|
|||
|
|
for (int i = 0; i < 2; i++)
|
|||
|
|
{
|
|||
|
|
powderlist_125.Add(new SourcePowderBottleModel()
|
|||
|
|
{
|
|||
|
|
PosId_InBox = i + 1,
|
|||
|
|
HaveBottle = true,
|
|||
|
|
RemainWeight = 0,
|
|||
|
|
SNCode = string.Empty,
|
|||
|
|
SourcePowderBottleState = SourceBottleStateEnum.Idl,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//InitialProject();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void LoadServices()
|
|||
|
|
{
|
|||
|
|
base.LoadServices();
|
|||
|
|
this.workService = this.CoreService.GetServiceInstance<WorkService>();
|
|||
|
|
if (workService != null)
|
|||
|
|
{
|
|||
|
|
workService.ProjectProChanged += OnProjectProChanged;
|
|||
|
|
}
|
|||
|
|
this.dataAccessService = this.CoreService.GetServiceInstance<IDataAccessService>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public new event PropertyChangedEventHandler PropertyChanged;
|
|||
|
|
// 当ProjectPro变更时调用此方法
|
|||
|
|
private void OnProjectProChanged()
|
|||
|
|
{
|
|||
|
|
// 通知视图ProjectPro属性已变更
|
|||
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ProjectPro)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void LoadDatas()
|
|||
|
|
{
|
|||
|
|
base.LoadDatas();
|
|||
|
|
BoxIndexList.Clear(); //BoxIndexList.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void Register()
|
|||
|
|
{
|
|||
|
|
base.Register();
|
|||
|
|
NewProjectCommand = new RelayCommand(NewProject);
|
|||
|
|
OpenProjectCommand = new RelayCommand(OpenProject);
|
|||
|
|
SaveAsCommand = new RelayCommand(SaveAsProject);
|
|||
|
|
SaveCommand = new RelayCommand(SaveProject);
|
|||
|
|
ImportExcelCommand = new RelayCommand(ImportExcel);
|
|||
|
|
ExportExcelCommand = new RelayCommand(ExportExcel);
|
|||
|
|
|
|||
|
|
UpdateSampleBoxPropertyCommand = new RelayCommand<int>(UpdateSampleBoxProperty);
|
|||
|
|
ClearSampleBoxPropertyCommand = new RelayCommand<int>(ClearSampleBoxProperty);
|
|||
|
|
ResetAllSampleBottlesCommand = new RelayCommand<int>(ClearSampleBottles);
|
|||
|
|
FillAllSampleBottlesCommand = new RelayCommand<int>(FillSampleBottles);
|
|||
|
|
ResetSampleBottlesCommand = new RelayCommand<int>(ResetSampleBottles);
|
|||
|
|
|
|||
|
|
ResetAllTipHeadCommand = new RelayCommand<int>(ResetAllTipHead);
|
|||
|
|
FillAllTipHeadCommand = new RelayCommand<int>(FillAllTipHead);
|
|||
|
|
|
|||
|
|
LoadBoxCommand = new RelayCommand(LoadBox);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设置某类型的工装到选中位置
|
|||
|
|
/// </summary>
|
|||
|
|
private void LoadBox()
|
|||
|
|
{
|
|||
|
|
if (SelectedBoxIndex < 0 || SelectedBoxIndex > 8)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("请先选择一个缓存工装位置(1-8)!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
switch (SelectedBoxType)
|
|||
|
|
{
|
|||
|
|
case BoxTypeEnum._40mL原液工装:
|
|||
|
|
|
|||
|
|
SourceLiquidBottleBoxModel newBox = new SourceLiquidBottleBoxModel
|
|||
|
|
{
|
|||
|
|
FixtureType = SelectedBoxType,
|
|||
|
|
BoxSNCode = string.Empty,
|
|||
|
|
SourceLiquidBottleCollection = liquidlist,
|
|||
|
|
IsDoseFinish = false,
|
|||
|
|
IsEmpty = false,
|
|||
|
|
IsUseFinsh = false,
|
|||
|
|
BoxArea = BoxAreaEnum._托盘存放平台,
|
|||
|
|
BoxId_inDosingStation = selectedBoxIndex
|
|||
|
|
};
|
|||
|
|
// 更新选中位置的工装
|
|||
|
|
ProjectPro.FixtureCacheArea[SelectedBoxIndex - 1] = File_Operator.DeepCopy(newBox);
|
|||
|
|
break;
|
|||
|
|
case BoxTypeEnum._12mL样品工装:
|
|||
|
|
for (int i = 0; i < samplelist.Count; i++)
|
|||
|
|
{
|
|||
|
|
samplelist[i].SampleBottleType = SampleBottleTypeEnum._12mL;
|
|||
|
|
}
|
|||
|
|
SampleBottleBoxModel newBox1 = new SampleBottleBoxModel
|
|||
|
|
{
|
|||
|
|
FixtureType = SelectedBoxType,
|
|||
|
|
BoxSNCode = string.Empty,
|
|||
|
|
SampleBottleList = samplelist,
|
|||
|
|
IsDoseFinish = false,
|
|||
|
|
SampleBottleType = SampleBottleTypeEnum._12mL,
|
|||
|
|
IsEmpty = false,
|
|||
|
|
IsUseFinsh = false,
|
|||
|
|
BoxId_inDosingStation = selectedBoxIndex,
|
|||
|
|
BoxArea = BoxAreaEnum._托盘存放平台
|
|||
|
|
};
|
|||
|
|
// 更新选中位置的工装
|
|||
|
|
ProjectPro.FixtureCacheArea[SelectedBoxIndex - 1] = File_Operator.DeepCopy(newBox1);
|
|||
|
|
//var a = File_Operator.DeepCopyEx(newBox1);
|
|||
|
|
break;
|
|||
|
|
case BoxTypeEnum._5mL样品工装:
|
|||
|
|
for (int i = 0; i < samplelist.Count; i++)
|
|||
|
|
{
|
|||
|
|
samplelist[i].SampleBottleType = SampleBottleTypeEnum._5mL;
|
|||
|
|
}
|
|||
|
|
SampleBottleBoxModel newBox2 = new SampleBottleBoxModel
|
|||
|
|
{
|
|||
|
|
FixtureType = SelectedBoxType,
|
|||
|
|
BoxSNCode = string.Empty,
|
|||
|
|
SampleBottleList = samplelist,
|
|||
|
|
IsDoseFinish = false,
|
|||
|
|
IsEmpty = false,
|
|||
|
|
IsUseFinsh = false,
|
|||
|
|
SampleBottleType = SampleBottleTypeEnum._5mL,
|
|||
|
|
BoxId_inDosingStation = selectedBoxIndex,
|
|||
|
|
BoxArea = BoxAreaEnum._托盘存放平台
|
|||
|
|
};
|
|||
|
|
// 更新选中位置的工装
|
|||
|
|
ProjectPro.FixtureCacheArea[SelectedBoxIndex - 1] = File_Operator.DeepCopy(newBox2);
|
|||
|
|
break;
|
|||
|
|
case BoxTypeEnum._16mL粉末瓶工装:
|
|||
|
|
break;
|
|||
|
|
case BoxTypeEnum._125mL粉末瓶工装:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
///// <summary>
|
|||
|
|
///// 移除选中位置的工装
|
|||
|
|
///// </summary>
|
|||
|
|
//private void RemoveSelectedBox()
|
|||
|
|
//{
|
|||
|
|
// if (SelectedBoxIndex >= 0 && SelectedBoxIndex < 8)
|
|||
|
|
// {
|
|||
|
|
// ProjectPro.FixtureCacheArea[SelectedBoxIndex] = null;
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 按照瓶1配置信息更新样品工装
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sampleboxIdParam"></param>
|
|||
|
|
private void UpdateSampleBoxProperty(int sampleboxIdParam)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = sampleboxIdParam;
|
|||
|
|
BaseBottleBox box = workService.ProjectPro.FixtureCacheArea.FirstOrDefault(f => f.BoxId_inDosingStation == index);
|
|||
|
|
if (!(box is SampleBottleBoxModel)) return;
|
|||
|
|
SampleBottleBoxModel sampleBottlebox = box as SampleBottleBoxModel;
|
|||
|
|
if (sampleBottlebox != null)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < sampleBottlebox.SampleBottleList.Count; i++)
|
|||
|
|
{
|
|||
|
|
SampleBottleModel sampleBottle = File_Operator.DeepCopy(sampleBottlebox.SampleBottleList[0]);
|
|||
|
|
SampleBottleModel needtochangemodel = sampleBottlebox.SampleBottleList.FirstOrDefault(f => f.PosId_InBox == (i + 1));
|
|||
|
|
needtochangemodel.SampleBottleType = sampleBottle.SampleBottleType;
|
|||
|
|
needtochangemodel.MaterialDoseFlowList = sampleBottle.MaterialDoseFlowList;
|
|||
|
|
needtochangemodel.HaveBottle = sampleBottle.HaveBottle;
|
|||
|
|
//needtochangemodel.SampleFunctionFlowList = sampleBottle.SampleFunctionFlowList;
|
|||
|
|
//needtochangemodel.AddLiquidFunctionFlowList = sampleBottle.AddLiquidFunctionFlowList;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 清空样品工装配置
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sampleboxIdParam"></param>
|
|||
|
|
private void ClearSampleBoxProperty(int sampleboxIdParam)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = sampleboxIdParam;
|
|||
|
|
BaseBottleBox box = workService.ProjectPro.FixtureCacheArea.FirstOrDefault(f => f.BoxId_inDosingStation == index);
|
|||
|
|
if (!(box is SampleBottleBoxModel)) return;
|
|||
|
|
SampleBottleBoxModel sampleBottlebox = box as SampleBottleBoxModel;
|
|||
|
|
if (sampleBottlebox != null)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < sampleBottlebox.SampleBottleList.Count; i++)
|
|||
|
|
{
|
|||
|
|
SampleBottleModel bottle = sampleBottlebox.SampleBottleList.FirstOrDefault(f => f.PosId_InBox == i + 1);
|
|||
|
|
if (bottle != null)
|
|||
|
|
{
|
|||
|
|
bottle.MaterialDoseFlowList.Clear();
|
|||
|
|
bottle.SampleFunctionFlowList.Clear();
|
|||
|
|
bottle.AddLiquidFunctionFlowList.Clear();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private async void ResetSampleBottles(int pos)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.FixtureCacheArea[pos - 1] = new BaseBottleBox()
|
|||
|
|
{
|
|||
|
|
BoxArea = BoxAreaEnum._自动加样模块内,
|
|||
|
|
BoxId_inDosingStation = pos,
|
|||
|
|
IsEmpty = true
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 装置为满
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sampleboxIdParam"></param>
|
|||
|
|
private void FillSampleBottles(int sampleboxIdParam)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = sampleboxIdParam;
|
|||
|
|
BaseBottleBox box = workService.ProjectPro.FixtureCacheArea.FirstOrDefault(f => f.BoxId_inDosingStation == index);
|
|||
|
|
if (!(box is SampleBottleBoxModel)) return;
|
|||
|
|
SampleBottleBoxModel sampleBottlebox = box as SampleBottleBoxModel;
|
|||
|
|
if (sampleBottlebox != null)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < sampleBottlebox.SampleBottleList.Count; i++)
|
|||
|
|
{
|
|||
|
|
SampleBottleModel model = sampleBottlebox.SampleBottleList.FirstOrDefault(f => f.PosId_InBox == i + 1);
|
|||
|
|
model.HaveBottle = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 将样品工装置为空
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sampleboxIdParam"></param>
|
|||
|
|
private void ClearSampleBottles(int sampleboxIdParam)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = sampleboxIdParam;
|
|||
|
|
BaseBottleBox box = workService.ProjectPro.FixtureCacheArea.FirstOrDefault(f => f.BoxId_inDosingStation == index);
|
|||
|
|
if (!(box is SampleBottleBoxModel)) return;
|
|||
|
|
SampleBottleBoxModel sampleBottlebox = box as SampleBottleBoxModel;
|
|||
|
|
if (sampleBottlebox != null)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < sampleBottlebox.SampleBottleList.Count; i++)
|
|||
|
|
{
|
|||
|
|
SampleBottleModel model = sampleBottlebox.SampleBottleList.FirstOrDefault(f => f.PosId_InBox == i + 1);
|
|||
|
|
model.HaveBottle = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private async void ResetAllTipHead(int id)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = id;
|
|||
|
|
TipBoxModel tipBox = workService.ProjectPro.TipHeadArea.FirstOrDefault(c => c.BoxId_inDosingStation == index);
|
|||
|
|
if (tipBox != null)
|
|||
|
|
{
|
|||
|
|
foreach (var tip in tipBox.TipItems)
|
|||
|
|
{
|
|||
|
|
tip.IsAvailable = false;
|
|||
|
|
}
|
|||
|
|
tipBox.HaveBox = false;
|
|||
|
|
tipBox.IsEmpty = true;
|
|||
|
|
//await workService.stationService_Dose.UpdateTipBox(tipBox);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private async void FillAllTipHead(int id)
|
|||
|
|
{
|
|||
|
|
int index = 0;
|
|||
|
|
index = id;
|
|||
|
|
TipBoxModel tipBox = workService.ProjectPro.TipHeadArea.FirstOrDefault(c => c.BoxId_inDosingStation == index);
|
|||
|
|
tipBox.BoxArea = BoxAreaEnum._Tip托盘存放平台;
|
|||
|
|
if (tipBox != null)
|
|||
|
|
{
|
|||
|
|
foreach (var tip in tipBox.TipItems)
|
|||
|
|
{
|
|||
|
|
tip.IsAvailable = true;
|
|||
|
|
}
|
|||
|
|
tipBox.HaveBox = true;
|
|||
|
|
tipBox.IsEmpty = false;
|
|||
|
|
//await workService.stationService_Dose.UpdateTipBox(tipBox);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void InitialProject()
|
|||
|
|
{
|
|||
|
|
string projectAddress = IniHelper.IniRead(Application.StartupPath + "\\projectOpen.ini", "OpenProject", "LastOpenProject", "");
|
|||
|
|
if (!string.IsNullOrWhiteSpace(projectAddress) && File.Exists(projectAddress))
|
|||
|
|
{
|
|||
|
|
bool readOk = false;
|
|||
|
|
workService.ProjectPro = File_Operator.Xml_Serialize(projectAddress, false, workService.ProjectPro, out readOk);
|
|||
|
|
if (readOk)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.LastOpenProject = projectAddress;
|
|||
|
|
workService.ProjectPro.NowOpenProjectFile = projectAddress.Substring(projectAddress.LastIndexOf("\\") + 1).Trim();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//InitialProjectProperty();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//InitialProjectProperty();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void InitialProjectProperty()
|
|||
|
|
{
|
|||
|
|
//加载传送平台 7个工装
|
|||
|
|
workService.ProjectPro.TransferArea.Clear();
|
|||
|
|
for (int i = 0; i < 7; i++)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.TransferArea.Add(new BaseBottleBox()
|
|||
|
|
{
|
|||
|
|
//FixtureType = BoxTypeEnum._40mL原液工装,
|
|||
|
|
BoxId_inDoseDnload = i + 1,
|
|||
|
|
BoxId_inDoseUpload = i + 1,
|
|||
|
|
IsEmpty = true,
|
|||
|
|
IsDoseFinish = false,
|
|||
|
|
IsUseFinsh = false,
|
|||
|
|
BoxArea = BoxAreaEnum._手套箱传送平台,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
workService.ProjectPro.FixtureCacheArea.Clear();
|
|||
|
|
//加载工装暂存区域 8个工装 暂定6个区域可用
|
|||
|
|
for (int i = 0; i < 8; i++)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.FixtureCacheArea.Add(new BaseBottleBox()
|
|||
|
|
{
|
|||
|
|
BoxId_inDosingStation = i + 1,
|
|||
|
|
BoxArea = BoxAreaEnum._托盘存放平台,
|
|||
|
|
IsEmpty = true,
|
|||
|
|
IsDoseFinish = false,
|
|||
|
|
IsUseFinsh = false,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 初始化10个粉末瓶 暂存位置
|
|||
|
|
workService.ProjectPro.PowderHeaderCacheArea.Clear();
|
|||
|
|
for (int i = 0; i < 10; i++)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.PowderHeaderCacheArea.Add(new SourcePowderBottleModel
|
|||
|
|
{
|
|||
|
|
HaveBottle = false,
|
|||
|
|
Pos_InDosePowderHC = i + 1,
|
|||
|
|
SNCode = string.Empty,
|
|||
|
|
PowderBottleType = PowderBottleTypeEnum._125mL,
|
|||
|
|
SourcePowderBottleState = SourceBottleStateEnum.Idl,
|
|||
|
|
OriginWeight = 0,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3个tip头工装
|
|||
|
|
workService.ProjectPro.TipHeadArea.Clear();
|
|||
|
|
for (int i = 0; i < 3; i++)
|
|||
|
|
{
|
|||
|
|
TipBoxModel tipBox = new TipBoxModel()
|
|||
|
|
{
|
|||
|
|
TipType = i switch
|
|||
|
|
{
|
|||
|
|
0 => TipTypeEnum._1000UL,
|
|||
|
|
1 => TipTypeEnum._300UL,
|
|||
|
|
2 => TipTypeEnum._50UL,
|
|||
|
|
_ => TipTypeEnum._300UL
|
|||
|
|
},
|
|||
|
|
HaveBox = false,
|
|||
|
|
UseIndex = 0,
|
|||
|
|
BoxId_inDosingStation = i + 1,
|
|||
|
|
IsEmpty = true, // 初始无工装(可根据需求调整)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 添加96个可用Tip头(避免序列化空引用)
|
|||
|
|
for (int j = 0; j < 8 * 12; j++)
|
|||
|
|
{
|
|||
|
|
tipBox.TipItems.Add(new TipHeadItem { IsAvailable = true, UseIndex = j + 1 });
|
|||
|
|
}
|
|||
|
|
workService.ProjectPro.TipHeadArea.Add(tipBox);
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 新建项目文件
|
|||
|
|
/// </summary>
|
|||
|
|
private void NewProject()
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.LastOpenProject = string.Empty;
|
|||
|
|
workService.ProjectPro.NowOpenProjectFile = string.Empty;
|
|||
|
|
|
|||
|
|
InitialProjectProperty();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 打开项目文件
|
|||
|
|
/// </summary>
|
|||
|
|
private void OpenProject()
|
|||
|
|
{
|
|||
|
|
OpenFileDialog dlgopen = new OpenFileDialog();
|
|||
|
|
dlgopen.Filter = "pro文件(*.pro)|*.pro";
|
|||
|
|
if (!Directory.Exists(Application.StartupPath + @"\Projects")) Directory.CreateDirectory(Application.StartupPath + @"\Projects");
|
|||
|
|
dlgopen.InitialDirectory = Application.StartupPath + @"\Projects";
|
|||
|
|
if (dlgopen.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
ProjectProperty project = new ProjectProperty();
|
|||
|
|
bool readOk = false;
|
|||
|
|
project = File_Operator.Xml_Serialize(dlgopen.FileName, false, project, out readOk);
|
|||
|
|
if (readOk)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro = project;
|
|||
|
|
workService.ProjectPro.LastOpenProject = dlgopen.FileName;
|
|||
|
|
IniHelper.IniWrite(Application.StartupPath + "\\projectOpen.ini", "OpenProject", "LastOpenProject", dlgopen.FileName);
|
|||
|
|
workService.ProjectPro.NowOpenProjectFile = dlgopen.FileName.Substring(dlgopen.FileName.LastIndexOf("\\") + 1).Trim();
|
|||
|
|
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
WeakReferenceMessenger.Default.Send(new DesktopAlertMessage { Content = "打开项目文件成功!" });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 项目文件另存为
|
|||
|
|
/// </summary>
|
|||
|
|
private void SaveAsProject()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|||
|
|
dlg.Filter = "pro文件(*.pro)|*.pro";
|
|||
|
|
if (!Directory.Exists(Application.StartupPath + @"\Projects")) Directory.CreateDirectory(Application.StartupPath + @"\Projects");
|
|||
|
|
dlg.InitialDirectory = Application.StartupPath + @"\Projects";
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.LastOpenProject = dlg.FileName;
|
|||
|
|
IniHelper.IniWrite(Application.StartupPath + "\\projectOpen.ini", "OpenProject", "LastOpenProject", dlg.FileName);
|
|||
|
|
workService.ProjectPro.NowOpenProjectFile = dlg.FileName.Substring(dlg.FileName.LastIndexOf("\\") + 1).Trim();
|
|||
|
|
|
|||
|
|
bool bReadOk = false;
|
|||
|
|
File_Operator.Xml_Serialize<ProjectProperty>(workService.ProjectPro.LastOpenProject, true, workService.ProjectPro, out bReadOk);
|
|||
|
|
Application.DoEvents();
|
|||
|
|
WeakReferenceMessenger.Default.Send(new DesktopAlertMessage { Content = "另存成功!" });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
throw;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 保存项目文件
|
|||
|
|
/// </summary>
|
|||
|
|
private void SaveProject()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(workService.ProjectPro.LastOpenProject) || !File.Exists(workService.ProjectPro.LastOpenProject))
|
|||
|
|
{
|
|||
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|||
|
|
dlg.Filter = "pro文件(*.pro)|*.pro";
|
|||
|
|
if (!Directory.Exists(Application.StartupPath + @"\Projects")) Directory.CreateDirectory(Application.StartupPath + @"\Projects");
|
|||
|
|
dlg.InitialDirectory = Application.StartupPath + @"\Projects";
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
workService.ProjectPro.LastOpenProject = dlg.FileName;
|
|||
|
|
IniHelper.IniWrite(Application.StartupPath + "\\projectOpen.ini", "OpenProject", "LastOpenProject", dlg.FileName);
|
|||
|
|
workService.ProjectPro.NowOpenProjectFile = dlg.FileName.Substring(dlg.FileName.LastIndexOf("\\") + 1).Trim();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
bool bReadOk = false;
|
|||
|
|
File_Operator.Xml_Serialize<ProjectProperty>(workService.ProjectPro.LastOpenProject, true, workService.ProjectPro, out bReadOk);
|
|||
|
|
Application.DoEvents();
|
|||
|
|
WeakReferenceMessenger.Default.Send(new DesktopAlertMessage { Content = "保存成功!" });
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
throw;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ImportExcel()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
OpenFileDialog openFileDialog = new OpenFileDialog();
|
|||
|
|
openFileDialog.Title = "选择要导入的Excel文件";
|
|||
|
|
openFileDialog.Filter = "Excel文件(*.xlsx;*.xls)|*.xlsx;*.xls";
|
|||
|
|
openFileDialog.Multiselect = false; // 只允许选择一个文件
|
|||
|
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
IWorkbook workbook;
|
|||
|
|
using (FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
|
|||
|
|
{
|
|||
|
|
// 根据Excel文件的格式(.xlsx或.xls)选择不同的加载方式
|
|||
|
|
if (openFileDialog.FileName.EndsWith(".xlsx"))
|
|||
|
|
{
|
|||
|
|
workbook = new XSSFWorkbook(fileStream);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
workbook = new HSSFWorkbook(fileStream);
|
|||
|
|
}
|
|||
|
|
//解析excel文档
|
|||
|
|
}
|
|||
|
|
OnPropertyChanged(nameof(ProjectPro));
|
|||
|
|
WeakReferenceMessenger.Default.Send(new DesktopAlertMessage { Content = "导入配方Excel文件成功!" });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
throw;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ExportExcel()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|