示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
    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;
            }
        }
    }
示例#4
0
        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;
                    }
                }
            }
        }
示例#5
0
        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
            }
        }
示例#6
0
        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;
                        }
                    }
                }
            }
        }
示例#7
0
        /// <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;
                }
            }
        }
示例#8
0
 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());
        }
示例#10
0
 /// <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());
        }