using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace JmSetupSheetReceiver.Models
{
///
/// 程序单对外 POST JSON 的根对象。
///
public class SetupsheetData
{
/// 串联坐标名称
public string NcWpName { get; set; }
/// 项目数据
public ProjectData ProjectData { get; set; }
/// 精公火花位
public double ThicknessF { get; set; }
/// 中公火花位
public double ThicknessM { get; set; }
/// 粗公火花位
public double ThicknessR { get; set; }
/// 精公数量
public int NumberF { get; set; }
/// 中公数量
public int NumberM { get; set; }
/// 粗公数量
public int NumberR { get; set; }
/// 精公自动换刀 NC 名称
public string AutoToolChangNcF { get; set; }
/// 中公自动换刀 NC 名称
public string AutoToolChangNcM { get; set; }
/// 粗公自动换刀 NC 名称
public string AutoToolChangNcR { get; set; }
/// 电极头检测尺寸
public string DetectionSize { get; set; }
/// 电极基准面 Z 值
public double ReferencePlaneZval { get; set; }
/// 程序单生成时间
public string CreatTime { get; set; }
/// 工件号(或工件数量相关标识,以实际报文为准)
public string PieceNumber { get; set; }
/// 工位列表
public List PositionDataList { get; set; }
/// 精公二维码
public string CellBarCodeF { get; set; }
/// 中公二维码
public string CellBarCodeM { get; set; }
/// 粗公二维码
public string CellBarCodeR { get; set; }
/// 工件分中 Z 轴取数方式
public string ZType { get; set; }
/// NC 串联是否旋转工件
public bool NcRotate { get; set; }
/// NC 串联工件旋转角度
public double NcAngle { get; set; }
/// NC 串联是否镜像工件
public bool NcMirror { get; set; }
/// NC 串联镜像参考平面:0=YZ 平面;1=XZ 平面
public int NcAxis { get; set; }
/// 未知或新增字段保留于此,避免丢数据
[JsonExtensionData]
public IDictionary ExtensionData { get; set; }
/// 工位数量(计算属性,不参与 JSON)
[JsonIgnore]
public int PositionCount
{
get { return PositionDataList == null ? 0 : PositionDataList.Count; }
}
/// 遍历全部工位下的刀路
public IEnumerable EnumerateToolPaths()
{
if (PositionDataList == null) yield break;
foreach (var pos in PositionDataList)
{
if (pos == null || pos.ToolPathList == null) continue;
foreach (var tp in pos.ToolPathList)
{
if (tp != null) yield return tp;
}
}
}
}
/// 项目数据
public class ProjectData
{
/// 不考虑工件数量的项目总时长(一般不使用)
public TimeSpan PDTotalTime { get; set; }
/// 不考虑工件数量的项目切削移动时长(一般不使用)
public TimeSpan PDCutTime { get; set; }
/// 项目总时长
public TimeSpan TotalTime { get; set; }
/// 项目切削移动时长
public TimeSpan CutTime { get; set; }
/// 项目路径
public string PDSession { get; set; }
/// NC 输出路径
public string NcprogramPath { get; set; }
/// 项目名称
public string Project { get; set; }
/// 未知或新增字段
[JsonExtensionData]
public IDictionary ExtensionData { get; set; }
}
/// 工位数据
public class PositionData
{
/// 当前工位刀路列表
public List ToolPathList { get; set; }
/// 当前毛坯最大 Z 值
public double StartBlockMaxZ { get; set; }
/// 当前工位名称
public string PositionName { get; set; }
/// 当前工位模型尺寸
public EntitySize ModelSizeByPosition { get; set; }
/// 当前工位毛料尺寸
public EntitySize BlockSizeByPosition { get; set; }
/// 工位总时长
public TimeSpan PositionTotalTime { get; set; }
/// 工位切削移动时长
public TimeSpan PositionCutTime { get; set; }
/// 工位视图图片(JSON 中多为 Base64,还原后为字节数组)
public List ImageBytesList { get; set; }
/// 基准角位置:0 左上角;1 左下角;2 右上角;3 右下角
public int DatumMark { get; set; }
/// 订料尺寸字符串,如 25*25*20
public string BlockSizeString { get; set; }
/// 工位界面配置快照(客户、机床、材质等)
public ConfigSetupSheet ConfigSetupSheet { get; set; }
/// 未知或新增字段
[JsonExtensionData]
public IDictionary ExtensionData { get; set; }
/// 刀路数量(计算属性,不参与 JSON)
[JsonIgnore]
public int ToolPathCount
{
get { return ToolPathList == null ? 0 : ToolPathList.Count; }
}
}
/// 包围盒(模型 / 毛料 / 刀路尺寸)
public class EntitySize
{
/// X 最小
public double Xmin { get; set; }
/// X 最大
public double Xmax { get; set; }
/// Y 最小
public double Ymin { get; set; }
/// Y 最大
public double Ymax { get; set; }
/// Z 最小
public double Zmin { get; set; }
/// Z 最大
public double Zmax { get; set; }
public override string ToString()
{
return string.Format("X[{0:0.###},{1:0.###}] Y[{2:0.###},{3:0.###}] Z[{4:0.###},{5:0.###}]",
Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
}
}
/// 工位界面配置快照(常用字段;其余进 ExtensionData)
public class ConfigSetupSheet
{
/// 客户名称
public string Customers { get; set; }
/// 机床编号
public string MachineNo { get; set; }
/// 材质
public string Material { get; set; }
/// 模号
public string MouldNo { get; set; }
/// 工件名称
public string PieceName { get; set; }
/// 员工姓名
public string EmployeeName { get; set; }
/// 装夹方式
public string ClampType { get; set; }
/// Excel 相关配置标识
public string Excel { get; set; }
/// Html 相关配置标识
public string Html { get; set; }
/// 工作平面相关配置
public string YnWorkplane { get; set; }
/// 分中类型默认值
public string CenterTypeDefault_Value { get; set; }
/// 其余配置字段
[JsonExtensionData]
public IDictionary ExtensionData { get; set; }
}
/// 刀路数据
public class ToolPathData
{
/// 串联坐标名称
public string NcWpName { get; set; }
/// NC 名称
public string Ncprogram { get; set; }
/// 刀路名称
public string Toolpath { get; set; }
/// 刀具名称
public string ToolID { get; set; }
/// 刀尖类型
public string ToolType { get; set; }
/// 刀具直径
public double Dia { get; set; }
/// 刀尖圆角
public double Tip { get; set; }
/// 刀具伸出长度
public double Overhang { get; set; }
/// 刀路 Z 最小值
public double TPZMin { get; set; }
/// 旧版转速(停用)
public double Spindle { get; set; }
/// 旧版进给(停用)
public double Cut { get; set; }
/// 公差
public double Tol { get; set; }
/// 总时间
public TimeSpan Totaltime { get; set; }
/// 切削时间
public TimeSpan CutTime { get; set; }
/// 径向余量
public double Thickness { get; set; }
/// 轴向余量
public double AxialThickness { get; set; }
/// 是否碰撞检测
public bool CollChecked { get; set; }
/// 刀号
public string ToolNumber { get; set; }
/// NC 描述
public string Description { get; set; }
/// 刃长
public double Len { get; set; }
/// 锥度直径
public double TaperDiameter { get; set; }
/// 刀具锥度
public double TaperAngle { get; set; }
/// 行距
public double Stepover { get; set; }
/// 步距
public double Stepdown { get; set; }
/// NC 备注
public string NcprogramNotes { get; set; }
/// 刀具描述
public string ToolDescription { get; set; }
/// 进给(快速相关)
public double FeedRateRapid { get; set; }
/// 刀头最大
public double THUpper { get; set; }
/// 刀柄最大
public double TSUpper { get; set; }
/// 刀头最小
public double THLower { get; set; }
/// 刀柄最小
public double TSLower { get; set; }
/// 刀路坐标
public string WKPLName { get; set; }
/// 刀头名称
public string HolderName { get; set; }
/// 刀具格式后名称
public string Tool { get; set; }
/// 刀具备注
public string ToolNote { get; set; }
/// 加工深度(模型最高 Z 与刀路最小 Z 之差)
public double Depth { get; set; }
/// 刀路备注
public string ToolpathNotes { get; set; }
/// 刀头几何列表
public List ToolHolders { get; set; }
/// 刀柄几何列表
public List ToolShanks { get; set; }
/// NC 路径
public string NcprogramPath { get; set; }
/// 圆角盘铣刀刀具上圆角
public double UpperTip { get; set; }
/// 刀柄名称
public string ShankName { get; set; }
/// 加长杆名称
public string ExtensionName { get; set; }
/// 加长杆长度
public double ExtensionLength { get; set; }
/// 刀柄长度
public double ShankLength { get; set; }
/// 刀头加长杆刀柄
public string HolderExtensioShank { get; set; }
/// 刀头加长杆
public string HolderExtensio { get; set; }
/// 安全高度
public double SafeZ { get; set; }
/// 半径补偿编码
public int CompCode { get; set; }
/// 启用半径补偿
public bool RadiusCompNumber_Active { get; set; }
/// 半径补偿号
public int RadiusCompNumber_Value { get; set; }
/// 夹持名称
public string OldHolderName { get; set; }
/// 刀具半径补偿
public bool CncCutterCompensationActive { get; set; }
/// NC 文件大小
public string NcFileSize { get; set; }
/// NC 输出坐标系
public string NcWorkplane { get; set; }
/// 切削长度
public double CutLength { get; set; }
/// 标题
public string Title { get; set; }
/// 刀具寿命
public double ToolLife { get; set; }
/// 刀路 X 最大值
public double TPXmax { get; set; }
/// 刀路 X 最小值
public double TPXmin { get; set; }
/// 刀路 Y 最大值
public double TPYmax { get; set; }
/// 刀路 Y 最小值
public double TPYmin { get; set; }
/// 刀路 Z 最大值
public double TPZmax { get; set; }
/// 刀路 Z 最小值
public double TPZmin { get; set; }
/// 刀路尺寸列表
public List TpSizeList { get; set; }
/// 标距长度
public double GaugeLength { get; set; }
/// 策略类型
public string Strategy { get; set; }
/// 钻孔径向余量
public double DrillThickness { get; set; }
/// 钻孔轴向余量
public double DrillAxialThickness { get; set; }
/// 径向余量(刀路)
public double TpThickness { get; set; }
/// 轴向余量(刀路)
public double TpAxialThickness { get; set; }
/// 钻孔深度类型
public string DrillDepthType { get; set; }
/// 钻孔深度是否用户定义
public string DrillDepthUserDefined { get; set; }
/// 刀具切削安全状态
public string SafetyToolCuttingStatus { get; set; }
/// 刀具切入切出安全状态
public string SafetyToolLeadsStatus { get; set; }
/// 刀具连接安全状态
public string SafetyToolLinksStatus { get; set; }
/// 刀头切削安全状态
public string SafetyHolderCuttingStatus { get; set; }
/// 刀头切入切出安全状态
public string SafetyHolderLeadsStatus { get; set; }
/// 刀头连接安全状态
public string SafetyHolderLinksStatus { get; set; }
/// 串联二维码
public List NcCodeList { get; set; }
/// 转速
public string Rpm { get; set; }
/// 进给
public string Frate { get; set; }
/// 钻孔循环类型
public string DrillType { get; set; }
/// 钻孔啄孔深度
public string PeckDepth { get; set; }
/// 标记为单独刀具、不合并 NC 的瞬态标志
public bool NoMerge { get; set; }
/// 未知或新增字段
[JsonExtensionData]
public IDictionary ExtensionData { get; set; }
public override string ToString()
{
return string.Format("{0} | 刀 {1} Dia={2} | NC={3}",
Toolpath ?? "(unnamed)",
ToolID ?? Tool ?? "?",
Dia,
Ncprogram ?? "");
}
}
/// 刀头 / 刀柄几何段
public class HolderOrShank
{
/// 上直径
public double UpperDiameter { get; set; }
/// 下直径
public double LowerDiameter { get; set; }
/// 长度
public double Length { get; set; }
}
}