//static IEnumerable<IEnumerable<char>> GetMarged(IEnumerable<char[]> source) //{ // CodeSeed prev = null; // foreach (var item in source) // { // var current = CodeSeed.GetSeed(item); // if (current == null) continue; // if (prev == null) // { // prev = current; // } // else if (prev != null) // { // if (prev.TryMarge(current, out var marged)) // prev = marged; // else // { // yield return prev.ToCode(); // prev = current; // } // } // } // if(prev != null) // yield return prev.ToCode(); //} internal static IEnumerable <CodeSeed> GetMarged(IEnumerable <char[]> source) { CodeSeed prev = null; foreach (var item in source) { var current = CodeSeed.GetSeed(item); if (current == null) { continue; } if (prev == null) { prev = current; } else if (prev != null) { if (prev.TryMarge(current, out var marged)) { prev = marged; } else { yield return(prev); prev = current; } } } if (prev != null) { yield return(prev); } }
private void FillOrderNo(EntityEntry entry) { IOrderEntity order = entry.Entity as IOrderEntity; if (order == null || entry.State != EntityState.Added || !string.IsNullOrEmpty(order.OrderNo)) { return; } string key = order.GetType().FullName; CodeSeed seed = this.Set <CodeSeed>().Where(x => x.SeedNo == key).FirstOrDefault(); if (seed == null) { throw new BusinessException(GlobalConstants.EXCEPTION_CODE_DATA_NOT_FOUND, $"没有为{key}配置CodeSeed!"); } lock (typeof(ImmsDbContext)) { int prefixLength = seed.Prefix.Length; order.OrderNo = seed.Prefix + (seed.InitialValue.ToString() + seed.Postfix).PadLeft(seed.TotalLength - prefixLength, '0'); seed.InitialValue += 1; this.Attach(seed).State = EntityState.Modified; } }
public bool TryMarge(CodeSeed b, out CodeSeed ret) { ret = null; if (!(this is CanMargeCodeSeed am)) { return(false); } if (!(b is CanMargeCodeSeed bm)) { return(false); } if (am.Type != bm.Type) { return(false); } ret = CanMargeCodeSeed.Marge(am, bm); return(true); }