C00225155-02/C00225155/MegaRobo.C00225155/Common/BottleModels/SampleBottleModel.cs

520 lines
16 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Common.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Xml.Serialization;
namespace Common.Models
{
/// <summary>
/// 样品瓶状态
/// </summary>
public enum SampleBottleStateEnum
{
/// <summary>
/// 0:还未投料
/// </summary>
Empty = 0,
/// <summary>
/// 正在投料中
/// </summary>
IsDosing = 1,
DoseFinish = 2,
/// <summary>
/// 1高温反应中
/// </summary>
HighTemperaturReact = 3,
/// <summary>
/// 2低温反应中
/// </summary>
LowTemperaturReact = 4,
/// <summary>
///穿刺取样中
/// </summary>
PunctureSampling = 5,
/// <summary>
/// 开盖取样中
/// </summary>
OpenLidSampling = 6,
/// <summary>
/// 穿刺补液
/// </summary>
PunctureAddLiquid = 7,
/// <summary>
/// 开盖补液
/// </summary>
OpenLidAddLiquid = 8,
/// <summary>
/// 稀释中
/// </summary>
Dilute = 9,
/// <summary>
/// 过滤中
/// </summary>
Filter = 10,
}
/// <summary>
/// 反应温度选择
/// </summary>
public enum SampleBottleReactTemperatureEnum
{
,
,
,
}
/// <summary>
/// 反应模块的操作类型
/// </summary>
public enum ReactOperationEnum
{
,
,
,
}
/// <summary>
/// 取样方式
/// </summary>
public enum SampleMethod
{
穿,
,
}
/// <summary>
/// 补液方式
/// </summary>
public enum AddLiquidMethod
{
穿,
,
}
/// <summary>
/// 稀释方式
/// </summary>
public enum DiluteMethod
{
,
穿,
,
}
/// <summary>
/// 样品瓶盖子的状态
/// </summary>
public enum SampleBottleLidStateEnum
{
Close,
Open,
}
/// <summary>
/// 样品瓶类型
/// </summary>
public enum SampleBottleTypeEnum
{
_5mL = 1,
_12mL = 2,
}
[Serializable]
/// <summary>
/// 样品瓶属性
/// </summary>
public class SampleBottleModel : ObservableObject
{
private long sampleSeqId;
public long SampleSeqId
{
get { return sampleSeqId; }
set { SetProperty(ref sampleSeqId, value); }
}
private SampleBottleTypeEnum sampleBottleType = SampleBottleTypeEnum._5mL;
/// <summary>
/// 样品瓶类型 5ML/12ML
/// </summary>
public SampleBottleTypeEnum SampleBottleType
{
get { return sampleBottleType; }
set { SetProperty(ref sampleBottleType, value); }
}
private string _boxsn = string.Empty;
/// <summary>
/// 样品瓶所在的工装的二维码信息
/// </summary>
public string BoxSNCode
{
get => _boxsn;
set { SetProperty(ref _boxsn, value); }
}
private string _sn = string.Empty;
/// <summary>
/// 样品瓶的二维码信息
/// </summary>
public string SNCode
{
get => _sn;
set { SetProperty(ref _sn, value); }
}
private bool _haveBottle = false;
/// <summary>
/// 是否有样品瓶子
/// </summary>
public bool HaveBottle
{
get => _haveBottle;
set { SetProperty(ref _haveBottle, value); }
}
private bool bdosefinish = false;
/// <summary>
/// 是否配置完成
/// </summary>
public bool bDoseFinish
{
get { return bdosefinish; }
set { bdosefinish = value; }
}
private int _posId_inbox = 1;
/// <summary>
/// 样品瓶在工装中的第几个位置(1-12)
/// </summary>
public int PosId_InBox
{
get => _posId_inbox;
set { SetProperty(ref _posId_inbox, value); }
}
#region
private string _sampleContentName = string.Empty;
/// <summary>
/// 样品瓶投料结果内容名称
/// </summary>
public string SampleContentName
{
get { return _sampleContentName; }
set { SetProperty(ref _sampleContentName, value); }
}
private SampleBottleStateEnum _sampleBottleState = SampleBottleStateEnum.Empty;
/// <summary>
/// 样品瓶状态 正在哪一步操作中
/// </summary>
public SampleBottleStateEnum SampleBoxState
{
get => _sampleBottleState;
set
{
if (_sampleBottleState != value)
{
_sampleBottleState = value;
OnPropertyChanged(nameof(SampleBoxState));
OnPropertyChanged(nameof(DisplayColor_Dose));
OnPropertyChanged(nameof(DisplayColor_React));
}
}
}
/// <summary>
/// 样品瓶状态,在投料站中展示颜色
/// </summary>
public Brush DisplayColor_Dose
{
get
{
switch (SampleBoxState)
{
case SampleBottleStateEnum.Empty:
if (HaveBottle) return (Brush)new BrushConverter().ConvertFrom("#aff0b3");
else return (Brush)new BrushConverter().ConvertFrom("#dcd8d8"); //return "#d1caca".FromHex(); // 未配置:白色
case SampleBottleStateEnum.IsDosing:
return (Brush)new BrushConverter().ConvertFrom("#f6ee73"); // 状态:黄色
case SampleBottleStateEnum.HighTemperaturReact:
case SampleBottleStateEnum.LowTemperaturReact:
return (Brush)new BrushConverter().ConvertFrom("#e3612e"); // 状态:橘色
case SampleBottleStateEnum.OpenLidSampling:
case SampleBottleStateEnum.PunctureSampling:
return (Brush)new BrushConverter().ConvertFrom("#5f84ee"); // 紫色
case SampleBottleStateEnum.Dilute:
case SampleBottleStateEnum.Filter:
return (Brush)new BrushConverter().ConvertFrom("#61b2f5"); // 蓝色
default:
if (HaveBottle) return (Brush)new BrushConverter().ConvertFrom("#aff0b3");
else return (Brush)new BrushConverter().ConvertFrom("#dcd8d8");
}
}
}
/// <summary>
/// 样品瓶状态,在反应站展示颜色
/// </summary>
public Brush DisplayColor_React
{
get
{
switch (SampleBoxState)
{
case SampleBottleStateEnum.Empty:
if (HaveBottle) return (Brush)new BrushConverter().ConvertFrom("#aff0b3");
else return (Brush)new BrushConverter().ConvertFrom("#dcd8d8"); //return "#d1caca".FromHex(); // 未配置:白色
//case SampleBottleStateEnum.IsDosing:
// return (Brush)new BrushConverter().ConvertFrom("#f6ee73"); // 状态:黄色
case SampleBottleStateEnum.HighTemperaturReact:
case SampleBottleStateEnum.LowTemperaturReact:
return (Brush)new BrushConverter().ConvertFrom("#e3612e"); // 状态:橘色
case SampleBottleStateEnum.OpenLidSampling:
case SampleBottleStateEnum.PunctureSampling:
return (Brush)new BrushConverter().ConvertFrom("#5f84ee"); // 紫色
case SampleBottleStateEnum.Dilute:
case SampleBottleStateEnum.Filter:
return (Brush)new BrushConverter().ConvertFrom("#61b2f5"); // 蓝色
default:
if (HaveBottle) return (Brush)new BrushConverter().ConvertFrom("#aff0b3");
else return (Brush)new BrushConverter().ConvertFrom("#dcd8d8");
}
}
}
private SampleBottleLidStateEnum _sampleBottleLidState = SampleBottleLidStateEnum.Close;
/// <summary>
/// 样品瓶盖子的状态
/// </summary>
public SampleBottleLidStateEnum SampleBottleLidState
{
get => _sampleBottleLidState;
set => _sampleBottleLidState = value;
}
private ObservableCollection<MaterialDoseFunctionFlow> _materialDoseFlowList = new ObservableCollection<MaterialDoseFunctionFlow>();
/// <summary>
/// 样品瓶中投料站流程集合用于显示datagridView控件中
/// </summary>
public ObservableCollection<MaterialDoseFunctionFlow> MaterialDoseFlowList
{
get
{
return _materialDoseFlowList;
}
set
{
// 设置新值
if (value != null && SetProperty(ref _materialDoseFlowList, value))
{
// 先取消旧集合的事件订阅
_materialDoseFlowList.CollectionChanged -= LiquidFlowList_CollectionChanged;
// 订阅新集合的事件
_materialDoseFlowList.CollectionChanged += LiquidFlowList_CollectionChanged;
// 手动触发一次计算
LiquidFlowList_CollectionChanged(this, null);
}
}
}
#region
private double _estimatedDuration = 0;
/// <summary>
/// 预估投料耗时时间单位min
/// </summary>
public double EstimatedDuration
{
get => _estimatedDuration;
set
{
SetProperty(ref _estimatedDuration, value, nameof(EstimatedDuration));
{
if (remainDuration == 0) // 假设初始值为0代表未初始化
{
remainDuration = value;
OnPropertyChanged(nameof(RemainDuration));
}
OnPropertyChanged(nameof(ProgressPercentage));
}
}
}
// 液体流程集合项变化时更新时间
private void LiquidFlowList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
EstimatedDuration = 1 * _materialDoseFlowList.Count;
}
private double remainDuration = 0;
/// <summary>
/// 预估原样瓶配置剩余时间单位min
/// </summary>
public double RemainDuration
{
get { return remainDuration; }
set
{
SetProperty(ref remainDuration, value);
OnPropertyChanged(nameof(ProgressPercentage));
}
}
/// <summary>
/// 用于进度绑定的属性
/// </summary>
public double ProgressPercentage
{
get
{
if (EstimatedDuration <= 0) return 1.0;
double usedRatio = 1.0 - (RemainDuration / (EstimatedDuration)); // 注意单位转换
return Math.Max(0, Math.Min(1, usedRatio));
}
}
#endregion
public SampleBottleModel()
{
// ObservableCollection 会在项添加 / 删除时触发 CollectionChanged 事件,需在 ReactBottleModel 中订阅该事件,确保集合项变化时重新计算时间。
// 初始化集合时订阅 CollectionChanged 事件
_materialDoseFlowList.CollectionChanged += LiquidFlowList_CollectionChanged;
}
#endregion
#region
private int _highTempModuleNo = 0;
/// <summary>
/// 样品瓶在高温模块的编号1-4
/// </summary>
public int HighTempModuleNo
{
get => _highTempModuleNo;
set => _highTempModuleNo = value;
}
private int _pos_inhightemperatur = 0;
/// <summary>
/// 样品瓶在高温模块中的位置1-24
/// </summary>
public int Pos_InHighTemperatur
{
get => _pos_inhightemperatur;
set => _pos_inhightemperatur = value;
}
private int _lowTempModuleNo = 0;
/// <summary>
/// 样品瓶在低温模块的编号1-2
/// </summary>
public int LowTempModuleNo
{
get => _lowTempModuleNo;
set => _lowTempModuleNo = value;
}
private int _pos_inlowtemperatur = 0;
/// <summary>
/// 样品瓶在低温模块中的位置1-24
/// </summary>
public int Pos_InLowTemperatur
{
get => _pos_inlowtemperatur;
set => _pos_inlowtemperatur = value;
}
private SampleBottleReactTemperatureEnum reactTemperatureType = SampleBottleReactTemperatureEnum.;
/// <summary>
/// 反应温度方式
/// </summary>
public SampleBottleReactTemperatureEnum ReactTemperatureType
{
get { return reactTemperatureType; }
set
{
SetProperty(ref reactTemperatureType, value);
OnPropertyChanged(nameof(CurrentTemperatureModel));
}
}
private SampleBottleTemperatureModel tempmodel = new SampleBottleTemperatureModel();
public SampleBottleTemperatureModel CurrentTemperatureModel
{
get => tempmodel;
set => SetProperty(ref tempmodel, value);
}
private SampleMethod samplemethod = SampleMethod.穿;
/// <summary>
/// 取样方式
/// </summary>
public SampleMethod SampleMethod
{
get { return samplemethod; }
set
{
SetProperty(ref samplemethod, value);
}
}
private AddLiquidMethod addliquidmethod = AddLiquidMethod.穿;
/// <summary>
/// 补液方式
/// </summary>
public AddLiquidMethod AddLiquidType
{
get { return addliquidmethod; }
set
{
SetProperty(ref addliquidmethod, value);
}
}
private double height = 0;
/// <summary>
/// 穿刺取样高度
/// </summary>
public double PunchHeight
{
get { return height; }
set { SetProperty(ref height, value); }
}
private ObservableCollection<ReactSampleFunctionFlow> sampleFunctionFlowList = new ObservableCollection<ReactSampleFunctionFlow>();
/// <summary>
/// 取样流程
/// </summary>
public ObservableCollection<ReactSampleFunctionFlow> SampleFunctionFlowList
{
get { return sampleFunctionFlowList; }
set { SetProperty(ref sampleFunctionFlowList, value); }
}
private ObservableCollection<AddLiquidFunctionFlow> _addLiquidFlowList = new ObservableCollection<AddLiquidFunctionFlow>();
/// <summary>
/// 加液流程集合用于显示datagridView控件中
/// </summary>
public ObservableCollection<AddLiquidFunctionFlow> AddLiquidFunctionFlowList
{
get { return _addLiquidFlowList; }
set { SetProperty(ref _addLiquidFlowList, value); }
}
#endregion
}
}