Example #1
0
        //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;
            }
        }
Example #3
0
            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);
            }