using System;
using SqlSugar;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Tiger.Model
{
///
/// 实体:条码规则
///
[Description("Primary:ID")]
[Serializable]
[SugarTable("BAS_CODE_RULE")]
public class BAS_CODE_RULE : DbEntityWithAuth
{
#region 构造函数
///
/// 实体:条码规则
///
public BAS_CODE_RULE() { }
#endregion
#region 公共属性
///
/// 规则代码(系统自动生成,规则:LK+YYYYMMDD+三位流水码)
///
public string RULE_CODE { get; set; }
///
/// 规则名称
///
public string RULE_NAME { get; set; }
///
/// 规则描述
///
public string RULE_DESC { get; set; }
///
/// 规则类型(0Material物料条码|1SemiProduct半成品条码|2Product成品条码|3BizOrder单据号码)
///
public int RULE_TYPE { get; set; }
///
/// 优先级,大于0的整数,越小越优先度越高
///
public int PRIORITY { get; set; }
///
/// 是否启用(Y/N)
///
[DisplayName("是否启用(Y/N)")]
public string IS_ACTIVE { get; set; }
///
/// 条码段分隔符
///
[DisplayName("条码段分隔符")]
public string SEPARATOR { get; set; }
///
/// 条码长度
///
public int CODE_LENGTH { get; set; }
///
/// 校验类型(0RUL自身校验|1MUL关联校验)
///
public int CHECK_TYPE { get; set; }
///
/// 校验表达式
///
public string CHECK_REGEX { get; set; }
///
/// 备注
///
public string REMARK { get; set; }
#endregion
#region 虚拟属性
/*例子
[SugarColumn(IsIgnore = true)]
public string FieldName { get; set; }
*/
///
/// Regex 对象, 正则表达式:^(CHECK_REGEX)$
///
[SugarColumn(IsIgnore = true)]
public Regex Regex => new Regex(Details.Any() ? $"^{string.Concat(Details.OrderBy(q => q.RULE_SEQ).Select(q => q.DATA_REGEX))}$"
: (CHECK_REGEX ?? "").StartsWith("^") ? CHECK_REGEX : $"^{CHECK_REGEX}$");
///
/// 分组的校验表达式,使用RULE_SEQ分组
///
[SugarColumn(IsIgnore = true)]
public string DATA_REGEX_WithGroup => Details.Any() ? $"^{string.Concat(Details.OrderBy(q => q.RULE_SEQ).Select(q => q.DATA_REGEX_WithGroup))}$" : "";
///
/// 校验正则表达式
///
[SugarColumn(IsIgnore = true)]
public Regex GroupRegex => new Regex(DATA_REGEX_WithGroup);
#endregion
#region 外键属性
/*例子
//一对一外键导航
[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BAS_CODE_RULE类里面的外键ID字段
public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
//一对多外键导航
[Navigate(NavigateType.OneToMany, nameof(ClassA.BAS_CODE_RULEId))]//ClassA表中的BAS_CODE_RULEId
public List ClassAList { get; set; }//注意禁止手动赋值,只能是null
//多对多外键导航
[Navigate(typeof(MappingClass), nameof(MappingClass.BAS_CODE_RULEId), nameof(MappingClass.ClassAId))]//注意顺序
public List ClassAList { get; set; } //注意禁止手动赋值,只能是null
*/
///
/// 包含逻辑删除的数据
///
[Navigate(NavigateType.OneToMany, nameof(BAS_CODE_DTL.RULE_ID))]//ClassA表中的BAS_CODE_RULEId
public List DetailsWithGhost { get; set; }//注意禁止手动赋值,只能是null
///
/// 不包含逻辑删除的数据
///
[SugarColumn(IsIgnore = true)]
public List Details => DetailsWithGhost?.Where(q => !q.GHOST_ROW).ToList() ?? new List();
[Navigate(NavigateType.OneToMany, nameof(BAS_CODE_GEN.RULE_ID))]//ClassA表中的BAS_CODE_RULEId
public List SerialsWithGhost { get; set; }//注意禁止手动赋值,只能是null
[SugarColumn(IsIgnore = true)]
public List Serials => SerialsWithGhost?.Where(q => !q.GHOST_ROW).ToList();
#endregion
#region 枚举变量
///
/// 校验类型(0RUL自身校验|1MUL关联校验)
///
public enum CHECK_TYPEs
{
[Description("自身校验")]
RUL,
[Description("关联校验")]
MUL,
}
///
/// 规则类型(0Material物料条码|1SemiProduct半成品条码|2Product成品条码|3BizOrder单据号码)
///
public enum RULE_TYPEs
{
[Description("物料条码")]
Material,
[Description("半成品条码")]
SemiProduct,
[Description("成品条码")]
Product,
[Description("单据号码")]
BizOrder,
}
#endregion
#region 公共方法
#endregion
}//endClass
}