RepositoryExtension.GoodsNo.cs 1.0 KB

123456789101112131415161718192021222324252627
  1. using System;
  2. using System.Threading.Tasks;
  3. using Wicture.DbRESTFul.Cache;
  4. using Wicture.DbRESTFul.Infrastructure.Repository;
  5. namespace JiaZhiQuan.Common {
  6. public static partial class RepositoryExtension {
  7. //仓库标志位数
  8. const int StorageBits = 2;
  9. //序列号识位数
  10. const int SequenceBits = 6;
  11. public static async Task<long> GoodsNoNextId(this DbRESTFulRepository repository, RedisCacheProvider redis) {
  12. var now = DateTime.Now;
  13. var today = long.Parse($"{now:yyyyMMdd}");
  14. var _sequence = await redis.Increase(CacheKeys.GoodsNoSequence(now), now.AddDays(1));
  15. var maxSequence = (ulong)Math.Pow(10, SequenceBits);
  16. if (_sequence >= maxSequence) {
  17. //抛异常
  18. throw new Exception($"一天最多生成{maxSequence}个货号");
  19. }
  20. return long.Parse($"{today}{0:D2}{_sequence:D6}"); // 入仓顺序号,不足6位前;
  21. }
  22. }
  23. }