using Prism.Mvvm;
using System;
using System.Collections.Generic;
using static TeamAAS_VP.Core.ScrewDriver.XYD_ScrewDriver;
using SqlSugar;
namespace TeamAAS_VP.Models
{
public class LockResult : BindableBase
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
private string _ProductName;
///
/// 产品名称
///
public string ProductName
{
get { return _ProductName; }
set { SetProperty(ref _ProductName, value); }
}
private int __Number;
///
/// 螺丝编号
///
public int Number
{
get { return __Number; }
set { SetProperty(ref __Number, value); }
}
private string __ProductNumber;
///
/// 产品编号
///
[SugarColumn(IsNullable = true)]
public string ProductNumber
{
get { return __ProductNumber; }
set { SetProperty(ref __ProductNumber, value); }
}
private DateTime __Timestamp;
///
/// 时间戳
///
public DateTime Timestamp
{
get { return __Timestamp; }
set { SetProperty(ref __Timestamp, value); }
}
private float __LockTurns;
///
/// 锁付圈数
///
public float LockTurns
{
get { return __LockTurns; }
set { SetProperty(ref __LockTurns, value); }
}
private float __LockTorque;
///
/// 锁付扭矩
///
public float LockTorque
{
get { return __LockTorque; }
set { SetProperty(ref __LockTorque, value); }
}
private float __LockDuration;
///
/// 锁付用时
///
public float LockDuration
{
get { return __LockDuration; }
set { SetProperty(ref __LockDuration, value); }
}
private bool __LockPassed;
///
/// 锁付结果(是否通过)
///
public bool LockPassed
{
get { return __LockPassed; }
set { SetProperty(ref __LockPassed, value); }
}
//
private string _ResultDetails;
///
/// 结果详情
///
[SugarColumn(IsNullable = true)]
public string ResultDetails
{
get { return _ResultDetails; }
set { SetProperty(ref _ResultDetails, value); }
}
private int __ScrewdriverProgramNumber;
///
/// 电批程序号
///
public int ScrewdriverProgramNumber
{
get { return __ScrewdriverProgramNumber; }
set { SetProperty(ref __ScrewdriverProgramNumber, value); }
}
private float __Pressure;
///
/// 压力值
///
public float Pressure
{
get { return __Pressure; }
set { SetProperty(ref __Pressure, value); }
}
private float __TargetTorque;
///
/// 目标扭矩
///
public float TargetTorque
{
get { return __TargetTorque; }
set { SetProperty(ref __TargetTorque, value); }
}
private float __TargetTurnsUpperLimit;
///
/// 目标圈数上限
///
public float TargetTurnsUpperLimit
{
get { return __TargetTurnsUpperLimit; }
set { SetProperty(ref __TargetTurnsUpperLimit, value); }
}
private float __TargetTurnsLowerLimit;
///
/// 目标圈数下限
///
public float TargetTurnsLowerLimit
{
get { return __TargetTurnsLowerLimit; }
set { SetProperty(ref __TargetTurnsLowerLimit, value); }
}
private float __TargetLockSpeed;
///
/// 目标锁付速度
///
public float TargetLockSpeed
{
get { return __TargetLockSpeed; }
set { SetProperty(ref __TargetLockSpeed, value); }
}
private bool _ScrewdriverGetDataSucceed;
///
/// 电批数据是否获取成功
///
public bool ScrewdriverGetDataSucceed
{
get { return _ScrewdriverGetDataSucceed; }
set { SetProperty(ref _ScrewdriverGetDataSucceed, value); }
}
private float __StartPositionX;
///
/// 锁付位置坐标 X 起始值
///
public float StartPositionX
{
get { return __StartPositionX; }
set { SetProperty(ref __StartPositionX, value); }
}
private float __StartPositionY;
///
/// 锁付位置坐标 Y 起始值
///
public float StartPositionY
{
get { return __StartPositionY; }
set { SetProperty(ref __StartPositionY, value); }
}
private float __StartPositionZ;
///
/// 锁付位置坐标 Z 起始值
///
public float StartPositionZ
{
get { return __StartPositionZ; }
set { SetProperty(ref __StartPositionZ, value); }
}
private float __EndPositionZ;
///
/// Z 终点值
///
public float EndPositionZ
{
get { return __EndPositionZ; }
set { SetProperty(ref __EndPositionZ, value); }
}
private float __LockDescentSpeed;
///
/// 锁付下降速度
///
public float LockDescentSpeed
{
get { return __LockDescentSpeed; }
set { SetProperty(ref __LockDescentSpeed, value); }
}
private int __FeederNumber;
///
/// 供料器编号
///
public int FeederNumber
{
get { return __FeederNumber; }
set { SetProperty(ref __FeederNumber, value); }
}
private float _FeederBatchNumber;
///
/// 螺丝批次编号
///
public float FeederBatchNumber
{
get { return _FeederBatchNumber; }
set { SetProperty(ref _FeederBatchNumber, value); }
}
private string __NozzleNumber;
///
/// 披头编号
///
[SugarColumn(IsNullable = true)]
public string NozzleNumber
{
get { return __NozzleNumber; }
set { SetProperty(ref __NozzleNumber, value); }
}
//当前的操作员名称
private string _OperatorName;
[SugarColumn(IsNullable = true)]
public string OperatorName
{
get { return _OperatorName; }
set { SetProperty(ref _OperatorName, value); }
}
private string _ProductImagePath;
///
/// 产品图片路径
///
[SugarColumn(IsNullable = true)]
public string ProductImagePath
{
get { return _ProductImagePath; }
set { SetProperty(ref _ProductImagePath, value); }
}
///
/// 锁付曲线数据列表
///
[SugarColumn(IsIgnore = true)]
public List WaveDatas { get; set; } = new List();
public LockResult()
{
// 默认构造函数
Timestamp = DateTime.Now;
}
public LockResult(int number, string productNumber, float lockTurns, float lockTorque, bool lockPassed)
{
Number = number;
ProductNumber = productNumber;
Timestamp = DateTime.Now;
LockTurns = lockTurns;
LockTorque = lockTorque;
LockPassed = lockPassed;
}
public LockResult Clone()
{
return new LockResult
{
Number = this.Number,
ProductNumber = this.ProductNumber,
Timestamp = this.Timestamp,
LockTurns = this.LockTurns,
LockTorque = this.LockTorque,
LockDuration = this.LockDuration,
LockPassed = this.LockPassed,
ScrewdriverProgramNumber = this.ScrewdriverProgramNumber,
Pressure = this.Pressure,
TargetTorque = this.TargetTorque,
TargetTurnsUpperLimit = this.TargetTurnsUpperLimit,
TargetTurnsLowerLimit = this.TargetTurnsLowerLimit,
TargetLockSpeed = this.TargetLockSpeed,
StartPositionX = this.StartPositionX,
StartPositionY = this.StartPositionY,
StartPositionZ = this.StartPositionZ,
EndPositionZ = this.EndPositionZ,
LockDescentSpeed = this.LockDescentSpeed,
FeederNumber = this.FeederNumber,
NozzleNumber = this.NozzleNumber,
OperatorName = this.OperatorName,
ProductImagePath = this.ProductImagePath,
ScrewdriverGetDataSucceed = this.ScrewdriverGetDataSucceed,
WaveDatas = new List(this.WaveDatas)
};
}
///
/// 将当前的锁付结果结果及波形数据存储至.csv文件中
///
///
public void SaveToCsv(string filePath)
{
string EscapeCsv(object value)
{
if (value == null) return "\"\"";
string s;
if (value is DateTime dt)
{
s = dt.ToString("o"); // ISO 8601
}
else
{
s = Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture);
}
s = s.Replace("\"", "\"\""); // escape quotes
return $"\"{s}\"";
}
using (var writer = new System.IO.StreamWriter(filePath, false, System.Text.Encoding.UTF8))
{
// 写入锁付结果信息表头(已新增字段)
writer.WriteLine("Number,ProductNumber,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber,Pressure,TargetTorque,TargetTurnsUpperLimit,TargetTurnsLowerLimit,TargetLockSpeed,StartPositionX,StartPositionY,StartPositionZ,EndPositionZ,LockDescentSpeed,FeederNumber,FeederBatchNumber,NozzleNumber,ResultDetails,ScrewdriverGetDataSucceed,OperatorName,ProductImagePath");
// 写入锁付结果数据行(所有字段均做 CSV 转义)
writer.WriteLine(string.Join(",",
EscapeCsv(Number),
EscapeCsv(ProductNumber),
EscapeCsv(Timestamp),
EscapeCsv(LockTurns),
EscapeCsv(LockTorque),
EscapeCsv(LockDuration),
EscapeCsv(LockPassed),
EscapeCsv(ScrewdriverProgramNumber),
EscapeCsv(Pressure),
EscapeCsv(TargetTorque),
EscapeCsv(TargetTurnsUpperLimit),
EscapeCsv(TargetTurnsLowerLimit),
EscapeCsv(TargetLockSpeed),
EscapeCsv(StartPositionX),
EscapeCsv(StartPositionY),
EscapeCsv(StartPositionZ),
EscapeCsv(EndPositionZ),
EscapeCsv(LockDescentSpeed),
EscapeCsv(FeederNumber),
EscapeCsv(FeederBatchNumber),
EscapeCsv(NozzleNumber),
EscapeCsv(ResultDetails),
EscapeCsv(ScrewdriverGetDataSucceed),
EscapeCsv(OperatorName),
EscapeCsv(ProductImagePath)
));
// 写入波形数据
writer.WriteLine();
writer.WriteLine("WaveDataIndex,LockAngle,Torque,Turns,Speed,Slopes");
for (int i = 0; i < WaveDatas.Count; i++)
{
var waveData = WaveDatas[i];
writer.WriteLine(string.Join(",",
EscapeCsv(i),
EscapeCsv(waveData.LockAngle),
EscapeCsv(waveData.Torque),
EscapeCsv(waveData.Turns),
EscapeCsv(waveData.Speed),
EscapeCsv(waveData.Slopes)
));
}
}
}
}
}