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 }); }