private long GetRealMaxId(long newMaxId, SequencedIdEntity entity)
 {
     if (entity.UseMachineRoomId == 1)
     {
         newMaxId = (newMaxId << 5) | 0x1f;
     }
     if (entity.UseRandomTail == 1)
     {
         newMaxId = (newMaxId << 5) | 0x1f;
     }
     return(newMaxId);
 }
        public async Task <SequencedIdBuffer> GetBufferAsync(string businessId)
        {
            SequencedIdEntity sequencedId = null;

            using (var trans = await _idStoreContext.Database.BeginTransactionAsync())
            {
                sequencedId = _idStoreContext.SequencedIds.FirstOrDefault(x => x.BusinessId == businessId);
                if (sequencedId == null)
                {
                    //创建默认记录
                    sequencedId = GetNewEntity(businessId);
                    _idStoreContext.SequencedIds.Add(sequencedId);
                    sequencedId = _idStoreContext.SequencedIds.FirstOrDefault(x => x.BusinessId == businessId);
                }
                long newMaxId     = sequencedId.MaxId + sequencedId.Steps;
                long newRealMaxId = GetRealMaxId(newMaxId, sequencedId);

                sequencedId.MaxId      = newMaxId;
                sequencedId.RealMaxId  = newRealMaxId;
                sequencedId.UpdateTime = DateTime.Now;

                _idStoreContext.SequencedIds.Update(sequencedId);

                _idStoreContext.SaveChanges();
                trans.Commit();
            }
            return(new SequencedIdBuffer()
            {
                BusinessId = businessId,
                MaxId = sequencedId.MaxId,
                UseMachineRoomId = sequencedId.UseMachineRoomId == 1,
                MachineRoomId = sequencedId.MachineRoomId,
                UseRandomTail = sequencedId.UseRandomTail == 1,
                Description = sequencedId.Description,
                RealMaxId = sequencedId.RealMaxId,
                Steps = sequencedId.Steps,
                CurrentId = sequencedId.MaxId - sequencedId.Steps + 1
            });
        }