using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using YLErp.DBModels.Attributes; using YLErp.DBModels.Enums; using YLErp.Helpers; namespace YLErp.DBModels { /// /// 客户信息 /// [Table("client")] public class Client : DBModelWithOperator, IDBModelWithCreator, IDataEntity, IDataTraceV2, IClonable { [DisplayName("密码")] public string Pwd { get; set; } [DisplayName("资金余额")] public double? Capitalbalance { get; set; } [DisplayName("商品类签署日期")] [DataChange] public DateTime? ProtocolSignDate { get; set; } [DisplayName("权益类签署日期")] [DataChange] public DateTime? RightProtocolSignDate { get; set; } [DisplayName("协议签署版本")] [DataChange] public string ProtocolSignVersion { get; set; } [DisplayName("办公地址")] [DataChange] public string PostalAddress { get; set; } [DisplayName("邮政编码")] [DataChange] public string PostalCode { get; set; } [DisplayName("所属机构")] [DataChange] public int ParentId { get; set; } [DisplayName("报告展示机构名称")] public int? IsDocShowParentName { get; set; } [DisplayName("报告展示机构名称")] [DataChange] public string IsDocShowParentNameStr { get { return IsDocShowParentName == 1 ? "是" : "否"; } } [DisplayName("证件号码")] [DataChange] public string IdentificationNumber { get; set; } [DisplayName("证照编号")] [DataChange] public string LicenseCode { get; set; } [DisplayName("营业执照有效期")] [DataChange] public string LicenseValidTimeStr { get; set; } [NotMapped] public DateTime? LicenseValidTime { get { DateTime date = new DateTime(); if (!string.IsNullOrWhiteSpace(LicenseValidTimeStr) && (DateTime.TryParseExact(LicenseValidTimeStr, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out date) || DateTime.TryParseExact(LicenseValidTimeStr, "yyyy/MM/dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out date) || DateTime.TryParse(LicenseValidTimeStr, out date)) ) { return date; } return null; } set { value = this.LicenseValidTime; } } [DisplayName("电话")] [DataChange] public string Phone { get; set; } [DisplayName("地址")] [DataChange] public string Address { get; set; } [DisplayName("Email")] [DataChange] public string Email { get; set; } /// /// 客户编号 /// [DisplayName("客户编号")] [DataChange] public string Number { set; get; } /// /// 客户名称 /// [DisplayName("客户名称"), Required] [DataChange] public string Name { set; get; } /// /// 默认登录名 /// [DisplayName("默认登录名")] public string DefaultLoginName { get; set; } /// /// 客户等级 /// [DisplayName("客户等级")] [NotMapped] public string Level { set; get; } [DisplayName("客户等级")] public int? LevelId { get; set; } [DisplayName("交易分组"),Obsolete("5.9版本删除")] public int? TradeGroupId { get; set; } /// /// 授信方向 /// [DisplayName("授信方向")] [DataChange] public string CreditDirection { set; get; } /// /// 年度授信 /// [DisplayName("年度授信")] [DataChange] public double? CreditYear { set; get; } /// /// 授信到期日 /// [DisplayName("授信到期日")] [DataChange] public DateTime? CreditDeadline { set; get; } /// /// 临时授信 /// [DisplayName("临时授信")] [DataChange] public double? CreditTemp { set; get; } /// /// 临时授信到期日 /// [DisplayName("临时授信到期日")] [DataChange] public DateTime? CreditTempDeadline { set; get; } /// /// 客户类型 /// [DisplayName("客户类型")] [DataChange] public string Type { set; get; } /// /// 是否需要追保 /// [DisplayName("是否需要追保")] [DataChange] public int? PendingMarginCallPayment { set; get; } [DisplayName("营业部销售")] [DataChange] public string Seller { get; set; } [DisplayName("归属营业部")] [DataChange] public int? SalesDepartmentId { get; set; } [DisplayName("营业部名称")] [NotMapped] public string SalesDepartment { get; set; } [NotMapped] public string CreditName { get; set; } public string ProcessStatus { get; set; } public int? RejectOrderId { get; set; } public int ProcessOrderId { get; set; } public int ProcessOrderBranch { get; set; } [DisplayName("开户时间")] public DateTime? ProcessOptDate { get; set; } public string ApprovalStatus { get; set; } public int ApprovalOrderId { get; set; } public long ApprovalLogId { get; set; } [DisplayName("开户时间")] public DateTime? ApprovalOptDate { get; set; } [DisplayName("评估日期")] [DataChange] public DateTime? EvaluateDate { get; set; } [DisplayName("评估有效期")] [DataChange] public string EvaluateOfValidity { get; set; } [DisplayName("评估到期日")] [DataChange] public DateTime? EvaluateExpireDate { get; set; } [DisplayName("适当性类型")] [DataChange] public string ProperClientClass { get; set; } [DisplayName("个人客户风险承受能力等级")] [DataChange] public string EndureLevel { get; set; } [DisplayName("客户经理")] public string CustomerManager { get; set; } [DisplayName("客户经理")] [DataChange] public string CustomerManagerId { get; set; } [NotMapped] public List CustomerManagerIdsInt { get { if (string.IsNullOrEmpty(CustomerManagerId)) { return new List(); } return CustomerManagerId.Split(","[0]).Select(t => Convert.ToInt32(t)).ToList(); } } /// /// 客户性质 /// [DisplayName("客户性质")] [DataChange] public int? CustomerNature { get; set; } /// /// 客户性质1 /// [DisplayName("客户性质1")] [DataChange] public string CustomerNature1 { get; set; } /// /// 客户性质2 /// [DisplayName("客户性质2")] [DataChange] public string CustomerNature2 { get; set; } /// /// 注册资本(万元) /// [DisplayName("产品规模(万元)")] [DataChange] public string RegisteredCapital { get; set; } /// /// 实际受益人 /// [DisplayName("实际受益人")] [DataChange] public string ActualBeneficiary { get; set; } /// /// 实际控制人 /// [DisplayName("实际控制人")] [DataChange] public string ActualController { get; set; } /// /// 注册地址 /// [DisplayName("注册地址")] [DataChange] public string RegisteredAddress { get; set; } /// /// 财务状况 /// [DisplayName("财务状况")] [DataChange] public string FinancialSituation { get; set; } /// /// 投资经验 /// [DisplayName("投资经验")] [DataChange] public string InvestmentExperience { get; set; } /// /// 所属行业是否和投资品种有关 /// [DisplayName("行业标的相关")] [DataChange] public int? IsIndustryConnectVariety { get; set; } /// /// 投资目标 /// [DisplayName("交易目的")] [DataChange] public string TransactionTarget { get; set; } /// /// 投资目标 /// [DisplayName("交易目的")] public List TransactionTargetList { get { try { if (!string.IsNullOrWhiteSpace(TransactionTarget)) { return TransactionTarget.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); } return new List(); } catch (Exception ex) { LogFactory.GetLogger().Error("TransactionTarget转成List出错", ex); return new List(); } } } /// /// 资金来源 /// [DisplayName("资金来源")] [DataChange] public int? FundsSource { get; set; } /// /// 是否存在实际控制关系 /// [DisplayName("实际控制关系")] [DataChange] public int? IsRealControl { get; set; } /// /// 是否存在小微客户 /// [DisplayName("小微客户")] public int? IsSmallAndMicroEnterprises { get; set; } [DisplayName("上市公司")] [DataChange] public string IsSmallAndMicroEnterprisesStr { get { return IsSmallAndMicroEnterprises == 1 ? "是" : "否"; } } /// /// 投资期限 /// [DisplayName("投资期限")] [DataChange] public int? InvestmentTerm { get; set; } private string _derivativesInvestmentVarieties; /// /// 衍生品投资品种 /// [DisplayName("交易种类")] [DataChange] public string DerivativesInvestmentVarieties { get { return _derivativesInvestmentVarieties ?? ""; } set { _derivativesInvestmentVarieties = value; } } /// /// 风险偏好 /// [DisplayName("风险偏好")] [DataChange] public string RiskPreference { get; set; } /// /// 可接受损失 /// [DisplayName("可接受损失")] [DataChange] public string AcceptableLoss { get; set; } /// /// 期望收益2 /// [DisplayName("期望收益")] [DataChange] public string ExpectedReturn2 { get; set; } /// /// 不良诚信记录 /// [DisplayName("不良诚信记录")] [DataChange] public int? BadFaithRecord { get; set; } /// /// 是否评估 /// [DisplayName("是否评估")] [DataChange] public int? IsEvaluate { get; set; } /// /// 问卷得分 /// [DisplayName("问卷得分")] [DataChange] public int? QuestionnaireScore { get; set; } /// /// 适当性等级 /// [DisplayName("适当性评级")] [DataChange] public int? AppropriatenessDegree { get; set; } /// /// 适当性等级名称 /// 已废弃 /// [DisplayName("适当性等级")] public string AppropriatenessDegreeName { get { if (PS.Config.Is浙期) { switch (AppropriatenessDegree) { case 0: return "专业A级"; case 1: return "专业B级"; case 2: return "普通C4类"; case 3: return "普通C5类"; case 4: return "C2"; case 5: return "C3"; default: return string.Empty; } } else { switch (AppropriatenessDegree) { case 1: return "C1"; case 2: return "C2"; case 3: return "C3"; case 4: return "C4"; case 5: return "C5"; default: return string.Empty; } } } } /// /// 可接受风险服务 /// [DisplayName("可接受风险服务")] [DataChange] public int? RiskServiceDegree { get; set; } /// /// 可接受风险服务 /// [DisplayName("可接受风险服务")] [DataChange] [IgnoreCompareChange] public string RiskServiceDegreeName { get { switch (RiskServiceDegree) { case 1: return "R1"; case 2: return "R2"; case 3: return "R3"; case 4: return "R4"; case 5: return "R5"; default: return string.Empty; } } } /// /// 是否接受高风险等级服务 /// [DisplayName("接受高风险服务")] [DataChange] public int? IsAcceptHighRiskService { get; set; } /// /// 适当性评估人 /// [DisplayName("适当性评估人")] [DataChange] public int? AppropriatenessAssessor { get; set; } /// /// 客户是否要求转化类型 /// [DisplayName("转化类型")] [DataChange] public int? IsRequireConversionTypes { get; set; } /// /// 评估结果是否变动 /// [DisplayName("评估结果变动")] [DataChange] public int? IsAssessmentResultChange { get; set; } /// /// 备注 /// [DisplayName("备注")] [DataChange] public string Remark { get; set; } /// /// 变动原因及历史评估结果 /// [DisplayName("变动原因及历史")] [DataChange] public string ChangeReasonAndEvaluationResults { get; set; } /// /// 失信行为记录 /// [DisplayName("失信行为记录")] [DataChange] public string DisbeliefRecord { get; set; } ///// ///// 资信等级Id(废弃) ///// //[DisplayName("资信级别")] //[Obsolete] //public int? CreditRatingId { get; set; } /// /// 资信等级 /// [NotMapped] public string CreditRatingStr { get; set; } /// /// 营业执照号有效期 /// [DisplayName("营业执照号有效期")] [DataChange] public DateTime? LicenseCodeDate { get; set; } /// /// 经营范围 /// [DisplayName("经营范围")] [DataChange] public int? BusinessScope { get; set; } /// /// 私募基金产品信息 /// [DisplayName("私募基金产品信息")] [DataChange] public string PrivateFundProductInformation { get; set; } [DisplayName("客户代码")] [DataChange] public string Code { get; set; } [DisplayName("交易确认书当前编号")] [DataChange] public int? CurrentContractNo { get; set; } //[DisplayName("授信总额")] //public double? Credit { get; set; } /// /// 该字段和客户登陆系统数据库systemusers表中的Guid做匹配 /// public string Guid { get; set; } [DisplayName("客户类别")] [DataChange] public string ClientType { get; set; } [DisplayName("产品编号")] [DataChange] public string ProductNumber { get; set; } [DisplayName("机构属性")] [DataChange] public string InstitutionalAttributes { get; set; } [DisplayName("行业")] [DataChange] public string BusinessType { get; set; } [DisplayName("证照类型")] [DataChange] public string LicenseType { get; set; } [DisplayName("地域")] [DataChange] public string Region { get; set; } /// /// 授信是否可以用来支付期权费 /// true:授信可以支付期权费和预付金 /// false:授信只可以支付预付金 /// [DisplayName("期权费授信")] [DataChange] public int? IsTradeCredit { get; set; } /// /// 是否可以添加授信开关 /// 为空或者0时,授信审批无法提交 /// [DisplayName("授信")] public int? IsCreditOn { get; set; } /// /// 追保方向 /// [DisplayName("追保方向")] [DataChange] public int MarginOptionType { get; set; } /// /// 是否自动撤单(通道业务) /// public int? IsAutoReback { get; set; } /// /// 是否曾通过审批 /// public int HadPass { get; set; } /// /// 衍生品投资品种 /// [NotMapped] public string DerivativesInvestmentVarietiesName { get { if (!string.IsNullOrWhiteSpace(DerivativesInvestmentVarieties)) { var list = DerivativesInvestmentVarieties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(n => int.TryParse(n, out var nn) ? nn : 0).Where(n => n > 0).ToList(); return string.Join(",", list.Select(v => System.Enum.Parse(typeof(DerivativesInvestmentVarietiesEnum), v.ToString()))); } return ""; } } /// /// 投资者类型 /// [DisplayName("投资者类型")] [DataChange] public int? InvestorType { get; set; } /// /// 管理人全称 /// [DisplayName("管理人全称")] [DataChange] public string AdminFullName { get; set; } /// /// 管理人登记编号 /// [DisplayName("管理人登记编号")] [DataChange] public string AdminRegisteredNum { get; set; } /// /// 投资者类型 /// [NotMapped] public string InvestorTypeName { get { if (InvestorType == null) { return ""; } return Enum.Parse(typeof(InvestorTypeEnum), InvestorType.ToString()).ToString(); } } /// /// 0:同业;1:非同业 /// [DisplayName("同业/非同业")] public int? SamePeer { get; set; } /// /// 公司缩写 /// [DisplayName("客户简称")] [DataChange] public string Abbreviation { get; set; } /// /// 同业/非同业 /// [NotMapped] [DisplayName("同业/非同业")] [DataChange] public string SamePeerDesc { get { if (!SamePeer.HasValue) { return ""; } return EnumHelper.GetDescriptionByName((SamePeerEnum)SamePeer.Value); } } /// /// 上传文件时,如果时双录视频文件,需要填写时间 /// [NotMapped] [DisplayName("双录时间:")] public DateTime? BookTime { get; set; } /// /// 交易资产 /// [DataChange] [DisplayName("交易资产:")] public TradingInstTypeEnum TradingInstType { get; set; } [NotMapped] public string TradingInstTypeName { get; set; } [DisplayName("组织机构代码")] [DataChange] public string CounterpartyCode { get; set; } [DisplayName("行业代码")] [DataChange] public string NFICode { get; set; } private AccessRuleEnum _accessRule = AccessRuleEnum.BothAccess; [DisplayName("准入规则")] public int? AccessRule { get { return (Nullable)_accessRule; } set { if (value.HasValue) { _accessRule = (AccessRuleEnum)value.Value; } } } /// /// 阈值 /// [DisplayName("阈值")] public double? FundThreshold { get; set; } [DisplayName("预付金追加方式")] public string RuleT0orT1 { get; set; } /// /// 国君特殊逻辑 处理这个字段,具体逻辑是按 补充协议二日期来赋值,当补充协议二日期 有值这是单章版 ,反之双章版 /// 其余客户公司正常使用 /// [DisplayName("确认书模板")] public string ConfirmBookMode { get; set; } [DisplayName("上市公司")] public int? IsListed { get; set; } [DisplayName("上市公司")] [DataChange] public string IsListedStr { get { if (IsListed == null) { return ""; } return IsListed == 1 ? "是" : "否"; } } [DisplayName("内部客户")] public int? IsInsided { get; set; } [DisplayName("内部客户")] [DataChange] public string IsInsidedStr { get { if (IsInsided == null) { return ""; } return IsInsided == 1 ? "是" : "否"; } } [DisplayName("追保通知")] public int? IsSendRecovery { get; set; } [DisplayName("追保通知")] [DataChange] public string IsSendRecoveryStr { get { if (IsSendRecovery == null) { return ""; } return IsSendRecovery == 0 ? "否" : "是"; } } [DisplayName("结算币种")] public string SettlementCurrency { get; set; } /// /// 准入规则 /// [NotMapped] [DisplayName("准入规则")] [DataChange] public string AccessRuleDesc { get { if (!AccessRule.HasValue) { return ""; } return EnumHelper.GetDescriptionByName((AccessRuleEnum)AccessRule.Value); } } [DisplayName("资金流向")] public BoundSideEnum BoundSide { get; set; } [DisplayName("席位")] public string Seat { get; set; } [DisplayName("履约协议编号")] public string AgreementBookNo { get; set; } /// /// 协议编号类型 单向 true 双向 false /// [DisplayName("履约协议类型")] public bool? AgreementBookType { get; set; } /// /// 协议编号类型 单向 true 双向 false /// [NotMapped] [DisplayName("履约协议类型")] public string AgreementBookTypeDesc { get { return AgreementBookType ?? true ? "单向" : "双向"; } } /// /// 清算机构 /// [DisplayName("清算机构")] public string ClearingAgency { get; set; } /// /// 主协议编号 /// [DisplayName("主协议编号")] public string MainProtocolCode { get; set; } /// /// 补充协议编号 /// [DisplayName("补充协议编号")] public string SupProtocolCode { get; set; } /// /// 补充协议二签署日期 /// 次月生效;例:值7.15,8.1号之前为双章版,之后为单章版 /// [DisplayName("补充协议二签署日期")] public DateTime? SupProtocolDate { get; set; } /// /// 银行信用评级(只用于银行类客户) /// [DisplayName("银行信用评级")] public string BankCreditRating { get; set; } /// /// 互换对冲方式 0 手动 1 自动 /// [DisplayName("互换对冲方式")] public int? SwapHedgingType { get; set; } /// /// 资金流向 /// [NotMapped] [DisplayName("资金流向")] [DataChange] public string BoundSideDesc { get { return EnumHelper.GetDescriptionByName(BoundSide); } } /// /// 产品名称 /// [NotMapped] [DisplayName("产品名称")] public string ProductName { get; set; } Dictionary _metaDic; /// /// 扩展元数据字典(特别增加这个字段为了这个类的扩展性) /// 以后不要轻易动这个字段了,前端和模板经常用到 /// [NotMapped] public Dictionary MetaDic { get { return _metaDic ?? (_metaDic = new Dictionary(StringComparer.OrdinalIgnoreCase)); } set { _metaDic = value; } } [NotMapped] public bool creditCanApplySwap { get { //授信是否可用于收益互换 3A银行或证券同业 if (BusinessType != null && ((BusinessType.Contains("银行") && "AAA".Equals(BankCreditRating)) || (BusinessType.Contains("证券") && SamePeer == 0))) { return true; } return false; } } public string GetDataTraceKeyId() { return id.ToString(); } public Client Clone() { return (Client)MemberwiseClone(); } /// /// 获取交易资产类型枚举描述 /// public string GetTradingInstTypeDesc() { return TradingInstTypeUtil.GetDesc(TradingInstType); } public override string ToString() { return $"{Name}--{id}"; } public string GetDataTraceKeyInfo() { return "客户:" + Name; } /// /// LEI编码 /// [DisplayName("LEI编码")] public string LEICode { get; set; } /// /// 是否中央对手方清算 /// [DisplayName("是否中央对手方清算")] public string IsCentralClearing { get; set; } /// /// 中央清算平台名称 /// [DisplayName("中央清算平台名称")] public string CentralClearingPaltform { get; set; } /// /// 交易平台 /// [DisplayName("交易平台")] public string TradingPaltform { get; set; } /// /// 追保系数 /// [DisplayName("追保系数")] public double? MarginRate { get; set; } /// /// 可取系数 /// [DisplayName("可取系数")] public double? DesirableRate { get; set; } /// /// 最小转账金额 /// [DisplayName("最小转账金额")] public double? MinimumTransferAmount { get; set; } /// /// 创建人ID /// [DisplayName("操作人")] public int? CreatorId { set; get; } /// /// 创建人名称 /// [DisplayName("操作人")] public string CreatorName { set; get; } /// /// 创建时间 /// [DisplayName("操作时间")] public DateTime? CreateDate { set; get; } /// /// 所属部门 /// [DisplayName("所属部门")] public string Department { get; set; } /// /// 业务种类 /// [DisplayName("业务种类")] public string ServiceType { get; set; } /// /// 客户端权限 /// [DisplayName("客户端权限")] [Column("client_right")] public string ClientRight { get; set; } /// /// 客户端权限 /// [NotMapped] [DisplayName("客户端权限")] [DataChange] public string ClientRightDesc { get { switch (this.ClientRight) { case "4": return "只看报价"; case "5": return "查看报价与交易"; case "6": return "无权限"; default: return this.ClientRight; } } } /// /// 代理委托邮箱 /// [DisplayName("代理委托邮箱")] [Column("proxy_email")] [DataChange] public string ProxyEmail { get; set; } /// /// 邮箱授权码 /// [DisplayName("邮箱授权码")] [Column("proxy_email_pwd")] public string ProxyEmailPwd { get; set; } /// /// 收益互换交易类别1:MDA,0:非DMA /// [DisplayName("收益互换交易类别")] [Column("swap_trade_type")] public int? SwapTradeType { get; set; } /// /// 收益互换交易类别 /// [NotMapped] [DisplayName("收益互换交易类别")] [DataChange] public string SwapTradeTypeStr { get { switch (this.SwapTradeType) { case 0: return "普通"; case 1: return "定义文件"; default: return "普通"; } } } /// /// 统一社会信用代码 /// [DisplayName("统一社会信用代码")] [Column("unified_social_credit_code")] [DataChange] public string UnifiedSocialCreditCode { get; set; } [DisplayName("管理人名称")] [Column("manager")] [DataChange] public string Manager { get; set; } [DisplayName("外部编号")] [Column("out_number")] [DataChange] public string OutNumber { get; set; } [DisplayName("定义文件编号")] [Column("settle_file_number")] [DataChange] public string SettleFileNumber { get; set; } [DisplayName("业务类型")] [Column("business_use_type")] public string BusinessUseType { get; set; } /// /// 业务类型 /// [NotMapped] [DisplayName("业务类型")] [DataChange] public string BusinessUseTypeStr { get { if (!string.IsNullOrEmpty(this.BusinessUseType)) { return this.BusinessUseType.Replace("0","TRS").Replace("1","做市报价"); } return "TRS"; } } [DisplayName("管理人社会信用代码")] [Column("manager_social_credit_code")] [DataChange] public string ManagerSocialCreditCode { get; set; } [DisplayName("管理人简称")] [Column("manager_abbreviation")] [DataChange] public string ManagerAbbreviation { get; set; } /// /// 是否不再预警(0:预警,1:不预警) /// [DisplayName("是否不再预警")] public bool? isWarning { get; set; } } [NotMapped] public class ClientDto : Client { } public enum BoundSideEnum { 南向, 北向, 无 } }