public void Create() { // 全局初始化设置WorkerId,默认最大2^16-1。(初始化过程全局只需一次,且必须最先设置) var options = new IdGeneratorOptions() { Method = 1, WorkerId = 1 }; YitIdHelper.SetIdGenerator(options); var code = YitIdHelper.NextId().ToString(); var app = _autofacServiceProvider.GetService <FlowInstanceApp>(); var instanceReq = new AddFlowInstanceReq { SchemeId = "0dac17c2-fec7-4bcd-a391-4ff74de8506a", FrmType = 1, DbName = "FrmLeaveReq", FrmData = "{\"id\":\"\",\"userName\":\"周翔宇\",\"requestType\":\"病假\",\"startDate\":\"2021-03-08T16:00:00.000Z\",\"startTime\":\"2021-03-16T15:11:28.000Z\",\"endDate\":\"2021-03-24T16:00:00.000Z\",\"endTime\":\"2021-03-16T15:11:31.000Z\",\"requestComment\":\"1111\",\"attachment\":\"\",\"files\":[],\"extendInfo\":\"\"}", CustomName = DateTime.Now.ToString(), Code = code }; app.CreateInstance(instanceReq); }
public void Generate() { // 全局初始化设置WorkerId,默认最大2^16-1。(初始化过程全局只需一次,且必须最先设置) var options = new IdGeneratorOptions() { Method = 1, WorkerId = 1 }; YitIdHelper.SetIdGenerator(options); long newId = YitIdHelper.NextId(); Console.WriteLine("====================================="); Console.WriteLine("生成的 Id:" + newId); }
protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult <int> result) { var dbContext = eventData.Context; var entities = dbContext.ChangeTracker.Entries().Where(u => u.State == EntityState.Added || u.State == EntityState.Modified || u.State == EntityState.Deleted); foreach (var entity in entities) { switch (entity.State) { case EntityState.Added: entity.Property(nameof(BaseEntity.Id)).CurrentValue = YitIdHelper.NextId(); break; } } }
protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult <int> result) { // 获取所有已更改的实体 var entities = eventData.Context.ChangeTracker.Entries() .Where(u => u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added) .ToList(); // 判断是否是演示环境 var demoEnvFlag = App.GetService <ISysConfigService>().GetDemoEnvFlag().GetAwaiter().GetResult(); if (demoEnvFlag) { var sysUser = entities.Find(u => u.Entity.GetType() == typeof(SysUser)); if (sysUser == null || string.IsNullOrEmpty((sysUser.Entity as SysUser).LastLoginTime.ToString())) // 排除登录 { throw Oops.Oh(ErrorCode.D1200); } } // 当前操作用户信息 var userId = App.User.FindFirst(ClaimConst.CLAINM_USERID)?.Value; var userName = App.User.FindFirst(ClaimConst.CLAINM_ACCOUNT)?.Value; foreach (var entity in entities) { if (entity.Entity.GetType().IsSubclassOf(typeof(DEntityBase <long, MultiTenantDbContextLocator>))) { var obj = entity.Entity as DEntityBase <long, MultiTenantDbContextLocator>; if (entity.State == EntityState.Added) { obj.Id = YitIdHelper.NextId(); obj.CreatedTime = DateTimeOffset.Now; if (!string.IsNullOrEmpty(userId)) { obj.CreatedUserId = long.Parse(userId); obj.CreatedUserName = userName; } } else if (entity.State == EntityState.Modified) { obj.UpdatedTime = DateTimeOffset.Now; obj.UpdatedUserId = long.Parse(userId); obj.UpdatedUserName = userName; } } } }
static void Main(string[] args) { Console.WriteLine("Hello World! C#"); var options = new IdGeneratorOptions() { Method = method, WorkerId = 1, WorkerIdBitLength = 6, SeqBitLength = 6, DataCenterIdBitLength = 10, TopOverCostCount = 2000, //TimestampType = 1, // MinSeqNumber = 1, // MaxSeqNumber = 200, // BaseTime = DateTime.Now.AddYears(-10), }; IdGen = new DefaultIdGenerator(options); GenTest genTest = new GenTest(IdGen, genIdCount, options.WorkerId); // 首先测试一下 IdHelper 方法,获取单个Id YitIdHelper.SetIdGenerator(options); long newId = YitIdHelper.NextId(); Console.WriteLine("====================================="); Console.WriteLine("这是用方法 " + method + " 生成的 Id:" + newId); while (true) { RunSingle(); //CallDll(); //Go(options); Thread.Sleep(1000); // 每隔1秒执行一次Go } }
protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult <int> result) { // 获取当前事件对应上下文 var dbContext = eventData.Context; // 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环) var entities = dbContext.ChangeTracker.Entries() .Where(u => u.Entity.GetType() != typeof(SysLogAudit) && u.Entity.GetType() != typeof(SysLogOp) && u.Entity.GetType() != typeof(SysLogVis) && u.Entity.GetType() != typeof(SysLogEx) && (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).ToList(); if (entities == null || entities.Count < 1) { return; } // 判断是否是演示环境 var demoEnvFlag = App.GetService <ISysConfigService>().GetDemoEnvFlag().GetAwaiter().GetResult(); if (demoEnvFlag) { var sysUser = entities.Find(u => u.Entity.GetType() == typeof(SysUser)); if (sysUser == null || string.IsNullOrEmpty((sysUser.Entity as SysUser).LastLoginTime.ToString())) // 排除登录 { throw Oops.Oh(ErrorCode.D1200); } } // 当前操作者信息 var userId = App.User.FindFirst(ClaimConst.CLAINM_USERID)?.Value; var userName = App.User.FindFirst(ClaimConst.CLAINM_ACCOUNT)?.Value; foreach (var entity in entities) { if (entity.Entity.GetType().IsSubclassOf(typeof(DEntityTenant))) { var obj = entity.Entity as DEntityTenant; switch (entity.State) { // 自动设置租户Id case EntityState.Added: var tenantId = entity.Property(nameof(Entity.TenantId)).CurrentValue; if (tenantId == null || (long)tenantId == 0) { entity.Property(nameof(Entity.TenantId)).CurrentValue = long.Parse(GetTenantId().ToString()); } obj.Id = obj.Id == 0 ? YitIdHelper.NextId() : obj.Id; obj.CreatedTime = DateTimeOffset.Now; if (!string.IsNullOrEmpty(userId)) { obj.CreatedUserId = long.Parse(userId); obj.CreatedUserName = userName; } break; // 排除租户Id case EntityState.Modified: entity.Property(nameof(Entity.TenantId)).IsModified = false; obj.UpdatedTime = DateTimeOffset.Now; if (!string.IsNullOrEmpty(userId)) { obj.UpdatedUserId = long.Parse(userId); obj.UpdatedUserName = userName; } break; } } else if (entity.Entity.GetType().IsSubclassOf(typeof(DEntityBase))) { var obj = entity.Entity as DEntityBase; if (entity.State == EntityState.Added) { obj.Id = obj.Id == 0 ? YitIdHelper.NextId() : obj.Id; obj.CreatedTime = DateTimeOffset.Now; if (!string.IsNullOrEmpty(userId)) { obj.CreatedUserId = long.Parse(userId); obj.CreatedUserName = userName; } } else if (entity.State == EntityState.Modified) { obj.UpdatedTime = DateTimeOffset.Now; if (!string.IsNullOrEmpty(userId)) { obj.UpdatedUserId = long.Parse(userId); obj.UpdatedUserName = userName; } } } } }
/// <summary> /// 审计数据 /// </summary> /// <param name="e"></param> /// <param name="timeOffset"></param> /// <param name="user"></param> public static void AuditValue(AuditValueEventArgs e, TimeSpan timeOffset, IUser user) { if (e.Property.GetCustomAttribute <ServerTimeAttribute>(false) != null && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?)) && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default)) { e.Value = DateTime.Now.Subtract(timeOffset); } if (e.Column.CsType == typeof(long) && e.Property.GetCustomAttribute <SnowflakeAttribute>(false) != null && (e.Value == null || (long)e.Value == default || (long?)e.Value == default)) { e.Value = YitIdHelper.NextId(); } if (user == null || user.Id <= 0) { return; } if (e.AuditValueType == FreeSql.Aop.AuditValueType.Insert) { switch (e.Property.Name) { case "CreatedUserId": if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) { e.Value = user.Id; } break; case "CreatedUserName": if (e.Value == null || ((string)e.Value).IsNull()) { e.Value = user.Name; } break; case "TenantId": if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) { e.Value = user.TenantId; } break; } } else if (e.AuditValueType == FreeSql.Aop.AuditValueType.Update) { switch (e.Property.Name) { case "ModifiedUserId": e.Value = user.Id; break; case "ModifiedUserName": e.Value = user.Name; break; } } }
public long GetId() { return(YitIdHelper.NextId()); }
public async Task <IResponseOutput> Login(LoginInput input) { if (!ModelState.IsValid) { return(ResponseOutput.NotOk(ModelState.Values.First().Errors[0].ErrorMessage)); } var sw = new Stopwatch(); sw.Start(); var context = await _interaction.GetAuthorizationContextAsync(input.ReturnUrl); var user = await _userRepository.Select.Where(a => a.UserName == input.UserName) .ToOneAsync(a => new { a.Id, a.Password, a.NickName, a.TenantId }); if (user == null) { return(ResponseOutput.NotOk("", 1)); } var password = MD5Encrypt.Encrypt32(input.Password); if (user.Password != password) { return(ResponseOutput.NotOk("", 2)); } AuthenticationProperties props = null; if (input.RememberLogin) { props = new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.Add(TimeSpan.FromDays(1)) }; } ; var identityServerUser = new IdentityServerUser(user.Id.ToString()) { DisplayName = input.UserName }; await HttpContext.SignInAsync(identityServerUser, props); sw.Stop(); //写登录日志 var loginLogEntity = new LoginLogEntity() { Id = YitIdHelper.NextId(), TenantId = user.TenantId, CreatedUserId = user.Id, NickName = user.NickName, CreatedUserName = input.UserName, ElapsedMilliseconds = sw.ElapsedMilliseconds, Status = true }; await AddLoginLog(loginLogEntity); return(ResponseOutput.Ok()); }
/// <summary> /// 采用雪花算法计算Id /// </summary> public override void GenerateDefaultKeyVal() { Id = YitIdHelper.NextId(); }
public async Task <IResponseOutput> Login(LoginInput input) { if (!ModelState.IsValid) { return(ResponseOutput.NotOk(ModelState.Values.First().Errors[0].ErrorMessage)); } if (input.Captcha == null) { return(ResponseOutput.NotOk("请完成安全验证!")); } //滑动验证 input.Captcha.DeleteCache = true; using var client = new HttpClient(); var res = await client.GetAsync($"{_appSettings.Captcha.CheckUrl}?{ToParams(input.Captcha)}"); var content = await res.Content.ReadAsStringAsync(); var captchaResult = JsonConvert.DeserializeObject <ResultModel <string> >(content); if (!captchaResult.Success) { return(ResponseOutput.NotOk("安全验证不通过,请重新登录!")); } var sw = new Stopwatch(); sw.Start(); var context = await _interaction.GetAuthorizationContextAsync(input.ReturnUrl); var user = await _userRepository.Select.Where(a => a.UserName == input.UserName) .ToOneAsync(a => new { a.Id, a.Password, a.NickName, a.TenantId }); if (user == null) { return(ResponseOutput.NotOk("", 1)); } var password = MD5Encrypt.Encrypt32(input.Password); if (user.Password != password) { return(ResponseOutput.NotOk("", 2)); } AuthenticationProperties props = null; if (input.RememberLogin) { props = new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.Add(TimeSpan.FromDays(1)) }; } ; var identityServerUser = new IdentityServerUser(user.Id.ToString()) { DisplayName = input.UserName }; await HttpContext.SignInAsync(identityServerUser, props); sw.Stop(); //写登录日志 var loginLogEntity = new LoginLogEntity() { Id = YitIdHelper.NextId(), TenantId = user.TenantId, CreatedUserId = user.Id, NickName = user.NickName, CreatedUserName = input.UserName, ElapsedMilliseconds = sw.ElapsedMilliseconds, Status = true }; await AddLoginLog(loginLogEntity); return(ResponseOutput.Ok()); }