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 __TargetTorqueUpperLimit;
///
/// 目标扭矩上限
///
public float TargetTorqueUpperLimit
{
get { return __TargetTorqueUpperLimit; }
set { SetProperty(ref __TargetTorqueUpperLimit, value); }
}
private float __TargetTorqueLowerLimit;
///
/// 目标扭矩下限
///
public float TargetTorqueLowerLimit
{
get { return __TargetTorqueLowerLimit; }
set { SetProperty(ref __TargetTorqueLowerLimit, 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 __PositionX;
///
/// 锁付位置坐标 X 值
///
public float PositionX
{
get { return __PositionX; }
set { SetProperty(ref __PositionX, value); }
}
private float __PositionY;
///
/// 锁付位置坐标 Y 值
///
public float PositionY
{
get { return __PositionY; }
set { SetProperty(ref __PositionY, 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 _HeadNumber;
///
/// 披头编号
///
[SugarColumn(IsNullable = true)]
public string HeadNumber
{
get { return _HeadNumber; }
set { SetProperty(ref _HeadNumber, 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); }
}
private string _LockCurveImagePath;
///
/// 锁付曲线图路径
///
[SugarColumn(IsNullable = true)]
public string LockCurveImagePath
{
get { return _LockCurveImagePath; }
set { SetProperty(ref _LockCurveImagePath, 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,
ProductName = this.ProductName,
ProductNumber = this.ProductNumber,
Timestamp = this.Timestamp,
LockTurns = this.LockTurns,
LockTorque = this.LockTorque,
LockDuration = this.LockDuration,
LockPassed = this.LockPassed,
ScrewdriverProgramNumber = this.ScrewdriverProgramNumber,
Pressure = this.Pressure,
TargetTorqueUpperLimit = this.TargetTorqueUpperLimit,
TargetTorqueLowerLimit = this.TargetTorqueLowerLimit,
TargetTurnsUpperLimit = this.TargetTurnsUpperLimit,
TargetTurnsLowerLimit = this.TargetTurnsLowerLimit,
TargetLockSpeed = this.TargetLockSpeed,
PositionX = this.PositionX,
PositionY = this.PositionY,
StartPositionZ = this.StartPositionZ,
EndPositionZ = this.EndPositionZ,
LockDescentSpeed = this.LockDescentSpeed,
FeederNumber = this.FeederNumber,
NozzleNumber = this.NozzleNumber,
HeadNumber= this.HeadNumber,
OperatorName = this.OperatorName,
ProductImagePath = this.ProductImagePath,
ScrewdriverGetDataSucceed = this.ScrewdriverGetDataSucceed,
WaveDatas = new List(this.WaveDatas),
LockCurveImagePath = this.LockCurveImagePath,
};
}
///
/// 将当前的锁付结果结果及波形数据存储至.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,ProductName,ProductNumber,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber,Pressure,TargetTorque,TargetTurnsUpperLimit,TargetTurnsLowerLimit,TargetLockSpeed,StartPositionX,StartPositionY,StartPositionZ,EndPositionZ,LockDescentSpeed,FeederNumber,FeederBatchNumber,NozzleNumber,HeadNumber,ResultDetails,ScrewdriverGetDataSucceed,OperatorName,ProductImagePath,LockCurveImagePath");
// 写入锁付结果数据行(所有字段均做 CSV 转义)
writer.WriteLine(string.Join(",",
EscapeCsv(Number),
EscapeCsv(ProductName),
EscapeCsv(ProductNumber),
EscapeCsv(Timestamp),
EscapeCsv(LockTurns),
EscapeCsv(LockTorque),
EscapeCsv(LockDuration),
EscapeCsv(LockPassed),
EscapeCsv(ScrewdriverProgramNumber),
EscapeCsv(Pressure),
EscapeCsv(TargetTorqueUpperLimit),
EscapeCsv(TargetTorqueLowerLimit),
EscapeCsv(TargetTurnsUpperLimit),
EscapeCsv(TargetTurnsLowerLimit),
EscapeCsv(TargetLockSpeed),
EscapeCsv(PositionX),
EscapeCsv(PositionY),
EscapeCsv(StartPositionZ),
EscapeCsv(EndPositionZ),
EscapeCsv(LockDescentSpeed),
EscapeCsv(FeederNumber),
EscapeCsv(FeederBatchNumber),
EscapeCsv(NozzleNumber),
EscapeCsv(HeadNumber),
EscapeCsv(ResultDetails),
EscapeCsv(ScrewdriverGetDataSucceed),
EscapeCsv(OperatorName),
EscapeCsv(ProductImagePath),
EscapeCsv(LockCurveImagePath)
));
// 写入波形数据
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)
));
}
}
}
///
/// 异步保存到csv
///
///
///
public async System.Threading.Tasks.Task SaveToCsvAsync(string filePath)
{
await System.Threading.Tasks.Task.Run(() =>
{
try
{
SaveToCsv(filePath);
}
catch (Exception ex)
{
LogHelper.WriteLogError("保存锁付数据至CSV时出错!", ex);
}
});
}
}
}