using Base62; using Domain.Events; using Domain.SeedWork; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace Domain.AggregateModel.LinkAggregate { public class Link:Entity,IAggregateRoot { /// /// 非自增主键 /// public string ShortCode { get; private set; } public string BaseUrl { get; private set; } public string SuffixUrl { get; private set; } public string FullUrl { get; private set; } public int AppId { get; private set; } public DateTime Time { get; private set; } private Link() { } /// /// 创建一条新的短链接 /// /// /// /// 分配的应用id public Link(string baseUrl,string suffixUrl,string fullUrl,int appId,string shortCode) { BaseUrl = baseUrl; SuffixUrl = suffixUrl; FullUrl = fullUrl; ShortCode = shortCode; AppId = appId; Time = DateTime.Now; AddDomainEvent(new LinkCreatedDomainEvent(this)); } /// /// 根据值计算短链字段 /// /// private void CalculateShortCode() { string code; using (var md5 = MD5.Create()) { var result = md5.ComputeHash(Encoding.UTF8.GetBytes(FullUrl)); var res = new[] { BitConverter.ToInt64(result, 0) ,BitConverter.ToInt64(result,8)}; //任意取其中一条即可 code = res[0].ToBase62(); } ShortCode = code; } } }