549 lines
18 KiB
C#
549 lines
18 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
|
|||
|
|
namespace WebSocketToolsConsole
|
|||
|
|
{
|
|||
|
|
public class Entity
|
|||
|
|
{
|
|||
|
|
public enum Factory
|
|||
|
|
{
|
|||
|
|
杭州锐颖 = 0,
|
|||
|
|
深圳实义德 = 1,
|
|||
|
|
深圳嘉禾兴 = 2
|
|||
|
|
}
|
|||
|
|
public class UiImg
|
|||
|
|
{
|
|||
|
|
public string name;
|
|||
|
|
public string image;
|
|||
|
|
public int x;
|
|||
|
|
public int y;
|
|||
|
|
public int w;
|
|||
|
|
public int h;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 实义德人脸机传输数据类型
|
|||
|
|
/// </summary>
|
|||
|
|
///
|
|||
|
|
public class Rootinfo
|
|||
|
|
{
|
|||
|
|
public int pmsid { get; set; }
|
|||
|
|
|
|||
|
|
public msgx msgx { get; set; }
|
|||
|
|
}
|
|||
|
|
public class cmdinfo
|
|||
|
|
{
|
|||
|
|
public string msgid { get; set; }
|
|||
|
|
|
|||
|
|
public string sn { get; set; }
|
|||
|
|
public string cmd { get; set; }
|
|||
|
|
public msgxinfo msg { get; set; }
|
|||
|
|
}
|
|||
|
|
public class msgxinfo
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息ID
|
|||
|
|
/// </summary>
|
|||
|
|
public string status { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 终端序列号
|
|||
|
|
/// </summary>
|
|||
|
|
public string sn { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息类型: setPerson/removePerson、open/reboot(开门重启)
|
|||
|
|
/// </summary>
|
|||
|
|
public string msg { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// pmsid
|
|||
|
|
/// </summary>
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息主体:Content-Type: application/x-www-formurlencoded
|
|||
|
|
/// </summary>
|
|||
|
|
public msginfo data { get; set; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class msginfo
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public string cameraDetectType { get; set; }
|
|||
|
|
|
|||
|
|
public string faceFeaturePairNumber { get; set; }
|
|||
|
|
|
|||
|
|
public string faceFeaturePairSuccessOrFailWaitTime { get; set; }
|
|||
|
|
public string openDoorType { get; set; }
|
|||
|
|
|
|||
|
|
public string openDoorContinueTime { get; set; }
|
|||
|
|
|
|||
|
|
public string doorType { get; set; }
|
|||
|
|
public string APKVersion { get; set; }
|
|||
|
|
|
|||
|
|
public string sn { get; set; }
|
|||
|
|
|
|||
|
|
public string idCardFaceFeaturePairNumber { get; set; }
|
|||
|
|
|
|||
|
|
public string appWelcomeMsg { get; set; }
|
|||
|
|
|
|||
|
|
public string deviceSoundSize { get; set; }
|
|||
|
|
|
|||
|
|
public string deviceDefendTime { get; set; }
|
|||
|
|
public string deviceName { get; set; }
|
|||
|
|
|
|||
|
|
public string tipsPairFail { get; set; }
|
|||
|
|
|
|||
|
|
public string picQualityRate { get; set; }
|
|||
|
|
public string beginRecoDistance { get; set; }
|
|||
|
|
|
|||
|
|
public string pairSuccessOpenDoor { get; set; }
|
|||
|
|
|
|||
|
|
public string fillLightTimes { get; set; }
|
|||
|
|
public string lowPowerTimes { get; set; }
|
|||
|
|
|
|||
|
|
public string recognitionSwitch { get; set; }
|
|||
|
|
}
|
|||
|
|
public class pmsinterface
|
|||
|
|
{
|
|||
|
|
public int pmsId { get; set; }
|
|||
|
|
public DateTime DateTime { get; set; }
|
|||
|
|
public string pmsContent { get; set; }
|
|||
|
|
public int hotelid { get; set; }
|
|||
|
|
public int room { get; set; }
|
|||
|
|
public string faceSN { get; set; }
|
|||
|
|
public int issueresult { get; set; }
|
|||
|
|
public int pmstype { get; set; }
|
|||
|
|
public string messageid { get; set; }
|
|||
|
|
public string APKVersion { get; set; }
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public class msgx
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息ID
|
|||
|
|
/// </summary>
|
|||
|
|
public string msgid { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 终端序列号
|
|||
|
|
/// </summary>
|
|||
|
|
public string sn { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息类型: setPerson/removePerson、open/reboot(开门重启)
|
|||
|
|
/// </summary>
|
|||
|
|
public string cmd { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// pmsid
|
|||
|
|
/// </summary>
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息主体:Content-Type: application/x-www-formurlencoded
|
|||
|
|
/// </summary>
|
|||
|
|
public string msg { get; set; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public class msgxs
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息ID
|
|||
|
|
/// </summary>
|
|||
|
|
public string msgid { get; set; }
|
|||
|
|
|
|||
|
|
|
|||
|
|
public int pmsid { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 终端序列号
|
|||
|
|
/// </summary>
|
|||
|
|
public string sn { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息类型: setPerson/removePerson、open/reboot(开门重启)
|
|||
|
|
/// </summary>
|
|||
|
|
public string cmd { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// pmsid
|
|||
|
|
/// </summary>
|
|||
|
|
/// <summary>
|
|||
|
|
/// 消息主体:Content-Type: application/x-www-formurlencoded
|
|||
|
|
/// </summary>
|
|||
|
|
public Msg msg { get; set; }
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class Msg
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
///
|
|||
|
|
/// </summary>
|
|||
|
|
public int status { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
///
|
|||
|
|
/// </summary>
|
|||
|
|
public string msg { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// pmsid
|
|||
|
|
/// </summary>
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 实义德人脸机返回结果
|
|||
|
|
/// </summary>
|
|||
|
|
public class msgx_response_msg
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 状态码:0-成功,其他状态见状态码表
|
|||
|
|
/// </summary>
|
|||
|
|
public int status { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 状态描述:状态码的详细描述,比如:成功
|
|||
|
|
/// </summary>
|
|||
|
|
public string msg { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 返回数据:返回请求的数据,比如:请求人员列表,则data即为人员列表的json字符串
|
|||
|
|
/// </summary>
|
|||
|
|
public string data { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 实义德人脸机过闸人员结构
|
|||
|
|
/// </summary>
|
|||
|
|
public class msgx_person
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 秘钥:终端设备的秘钥
|
|||
|
|
/// </summary>
|
|||
|
|
public string key { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员ID:ID,验证人员唯一性的字段,必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string id { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员的名字
|
|||
|
|
/// </summary>
|
|||
|
|
public string name { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 卡号:作为维根号发送到闸机
|
|||
|
|
/// </summary>
|
|||
|
|
public string IC_NO { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 身份证号
|
|||
|
|
/// </summary>
|
|||
|
|
public string ID_NO { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 照片:JPG头像照片要求宽高640x480像素,转为Base64字符串传输,JPG 分辨率最大支持1080x1080
|
|||
|
|
/// </summary>
|
|||
|
|
public string photo { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 最大过闸次数:一共可以过闸的最大次数[0,10000);当此值设置等于10000时,代表可以无限次过闸,默认:10000
|
|||
|
|
/// </summary>
|
|||
|
|
public long passCount { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 起始时间:此时间之后拥有过闸权限,单位:秒(传-1表示无限制),默认无限制
|
|||
|
|
/// </summary>
|
|||
|
|
public double startTs { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 截止时间:此时间之后无过闸权限,单位:秒(传-1表示无限制),默认无限制
|
|||
|
|
/// </summary>
|
|||
|
|
public double endTs { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 访客:true-是访客,false-非访客,默认false
|
|||
|
|
/// </summary>
|
|||
|
|
public bool visitor { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 以周为单位设置每 天不同的时间段:有权限过闸多个时间段,可以周为单位设置每 天不同的时间段,也可以设置每天相同的时间 段,不支持进行缺省设置(时间段格式: “09:00-12:35”,不同时间段间用“;”分割)
|
|||
|
|
/// </summary>
|
|||
|
|
public string weekly { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员添加
|
|||
|
|
/// </summary>
|
|||
|
|
public class SavePersonRequest
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// ID编号:回复id编号;成对出现,用来关联平台的发送和设备的回复
|
|||
|
|
/// </summary>
|
|||
|
|
public int id { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 方法:personnelData.savePersons
|
|||
|
|
/// </summary>
|
|||
|
|
public string method { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息列表
|
|||
|
|
/// </summary>
|
|||
|
|
public List<Params> @params { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息列表
|
|||
|
|
/// </summary>
|
|||
|
|
public class Params
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息
|
|||
|
|
/// </summary>
|
|||
|
|
public Person Person { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息
|
|||
|
|
/// </summary>
|
|||
|
|
public class Person
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员类型,1-内部员工,2-访客, 3-黑名单;必填
|
|||
|
|
/// </summary>
|
|||
|
|
public int Type { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 证件号,与CertificateType组合构成全局唯一人员标识,不允许更新,避免前端和平台端不一致。必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string Code { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 默认权限组。必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string GroupName { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 姓名必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string Name { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 性别必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string Sex { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 出生日期必填
|
|||
|
|
/// </summary>
|
|||
|
|
public string Birthday { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 访客信息,人员类型是访客时有效(非访客不填)
|
|||
|
|
/// </summary>
|
|||
|
|
public GuestInfo GuestInfo { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 通过HTTP协议下载图片的地址;只支持JPG格式;
|
|||
|
|
/// </summary>
|
|||
|
|
public string URL { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// Base64编码的图片数据,与URL字段互斥; base64数据不用带上格式信息如【data:image/jpg;base64,】
|
|||
|
|
/// </summary>
|
|||
|
|
public string Images { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 卡信息
|
|||
|
|
/// </summary>
|
|||
|
|
public Cards Cards { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 访客信息,人员类型是访客时有效(非访客不填)
|
|||
|
|
/// </summary>
|
|||
|
|
public class GuestInfo
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 单位
|
|||
|
|
/// </summary>
|
|||
|
|
public string Corp { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 电话
|
|||
|
|
/// </summary>
|
|||
|
|
public string Phone { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 车牌号码
|
|||
|
|
/// </summary>
|
|||
|
|
public string CarLicense { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 随行人数
|
|||
|
|
/// </summary>
|
|||
|
|
public int Partner { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 被访人
|
|||
|
|
/// </summary>
|
|||
|
|
public string Host { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 准入时间
|
|||
|
|
/// </summary>
|
|||
|
|
public AccessTime AccessTime { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 准入时间
|
|||
|
|
/// </summary>
|
|||
|
|
public class AccessTime
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 开始时间
|
|||
|
|
/// </summary>
|
|||
|
|
public string from { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 结束时间
|
|||
|
|
/// </summary>
|
|||
|
|
public string to { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 卡信息
|
|||
|
|
/// </summary>
|
|||
|
|
public class Cards
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 卡号
|
|||
|
|
/// </summary>
|
|||
|
|
public string ID { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 卡类型:1普通卡,2胁迫卡
|
|||
|
|
/// </summary>
|
|||
|
|
public int Type { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 有效期日期:开始日期yyyy-MM-dd,结束日期yyyy-MM-dd
|
|||
|
|
/// </summary>
|
|||
|
|
public string[] Validity { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 有效期时间(默认:00:00:00,23:59:59):开始时间HH:mm:ss,结束时间HH:mm:ss
|
|||
|
|
/// </summary>
|
|||
|
|
public string[] ValidityTime { get; set; }
|
|||
|
|
public Memo Memo { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// optional其他信息
|
|||
|
|
/// </summary>
|
|||
|
|
public class Memo
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 门禁位置
|
|||
|
|
/// </summary>
|
|||
|
|
public string Entrance { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员添加设备回应
|
|||
|
|
/// </summary>
|
|||
|
|
public class Response
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// ID编号:回复id编号;成对出现,用来关联平台的发送和设备的回复
|
|||
|
|
/// </summary>
|
|||
|
|
public int id { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 方法:personnelData.savePersons,removePersons
|
|||
|
|
/// </summary>
|
|||
|
|
public string method { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 返回结果
|
|||
|
|
/// </summary>
|
|||
|
|
public bool result { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息列表
|
|||
|
|
/// </summary>
|
|||
|
|
public List<ParamsResponse> @params { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 响应人员信息
|
|||
|
|
/// </summary>
|
|||
|
|
public class ParamsResponse
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员类型,1-内部员工,2-访客, 3-黑名单
|
|||
|
|
/// </summary>
|
|||
|
|
//public string CertificateType { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 证件号,与CertificateType组合构成全局唯一人员标识,不允许更新,避免前端和平台端不一致
|
|||
|
|
/// </summary>
|
|||
|
|
public string Code { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 当前人员是否添加成功,失败有错误码和错误信息
|
|||
|
|
/// </summary>
|
|||
|
|
public bool Result { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 错误码
|
|||
|
|
/// </summary>
|
|||
|
|
public int ErrorCode { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
///
|
|||
|
|
/// </summary>
|
|||
|
|
//public string[] ErrorCodePic { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 错误信息
|
|||
|
|
/// </summary>
|
|||
|
|
//public string ErrorMessage { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员删除
|
|||
|
|
/// </summary>
|
|||
|
|
public class RemovePersonRequest
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// ID编号:回复id编号;成对出现,用来关联平台的发送和设备的回复
|
|||
|
|
/// </summary>
|
|||
|
|
public int id { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 方法:personnelData.removePersons
|
|||
|
|
/// </summary>
|
|||
|
|
public string method { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息列表
|
|||
|
|
/// </summary>
|
|||
|
|
public List<RemoveParams> @params { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员信息列表
|
|||
|
|
/// </summary>
|
|||
|
|
public class RemoveParams
|
|||
|
|
{
|
|||
|
|
public string Code { get; set; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 人员删除设备回应
|
|||
|
|
/// </summary>
|
|||
|
|
//public class RemovePersonResponse
|
|||
|
|
//{
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// ID编号:回复id编号;成对出现,用来关联平台的发送和设备的回复
|
|||
|
|
// /// </summary>
|
|||
|
|
// public int id { get; set; }
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 方法:personnelData.removePersons
|
|||
|
|
// /// </summary>
|
|||
|
|
// public string method { get; set; }
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 返回结果
|
|||
|
|
// /// </summary>
|
|||
|
|
// public bool result { get; set; }
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 人员信息列表
|
|||
|
|
// /// </summary>
|
|||
|
|
// public List<Response> @params { get; set; }
|
|||
|
|
//}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 响应人员信息
|
|||
|
|
/// </summary>
|
|||
|
|
//public class RemoveParamsResponse
|
|||
|
|
//{
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 证件号,与CertificateType组合构成全局唯一人员标识,不允许更新,避免前端和平台端不一致
|
|||
|
|
// /// </summary>
|
|||
|
|
// public string Code { get; set; }
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 当前人员是否添加成功,失败有错误码和错误信息
|
|||
|
|
// /// </summary>
|
|||
|
|
// public bool Result { get; set; }
|
|||
|
|
// /// <summary>
|
|||
|
|
// /// 错误码
|
|||
|
|
// /// </summary>
|
|||
|
|
// public int ErrorCode { get; set; }
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
public class Json
|
|||
|
|
{
|
|||
|
|
public int status { get; set; }
|
|||
|
|
public string msg { get; set; }
|
|||
|
|
public Data data { get; set; } = new Data();
|
|||
|
|
}
|
|||
|
|
public class Data
|
|||
|
|
{
|
|||
|
|
public int total_number { get; set; }
|
|||
|
|
public int offset { get; set; }
|
|||
|
|
public int person_number { get; set; }
|
|||
|
|
public List<User> person { get; set; } = new List<User>();
|
|||
|
|
}
|
|||
|
|
public class User
|
|||
|
|
{
|
|||
|
|
public string id { get; set; }
|
|||
|
|
public int passCount { get; set; }
|
|||
|
|
public string startTs { get; set; }
|
|||
|
|
public string endTs { get; set; }
|
|||
|
|
public string name { get; set; }
|
|||
|
|
public string ID_NO { get; set; }
|
|||
|
|
public string IC_NO { get; set; }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|