Пример #1
0
        /// <summary>
        /// 性能-仓库访问次数:1。
        /// </summary>
        /// <param name="currentValue"></param>
        /// <param name="now"></param>
        /// <returns></returns>
        private string GenerateNext(SerialNumberValue currentValue, DateTime now)
        {
            currentValue.RollValue += currentValue.RD_RollValueStep;
            var valueRepo = RF.Concrete <SerialNumberValueRepository>();

            valueRepo.Save(currentValue);

            return(GenerateCode(now, currentValue.RollValue, currentValue.RD_Format));
        }
Пример #2
0
        /// <summary>
        /// 性能-仓库访问次数:1。
        /// </summary>
        /// <param name="currentGroupValue"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        private string GenerateNext(SerialNumberValue currentGroupValue, DateTime time)
        {
            //流动当前的值。
            currentGroupValue.RollValue += currentGroupValue.RD_RollValueStep;

            var valueRepo = RF.Concrete <SerialNumberValueRepository>();

            valueRepo.Save(currentGroupValue);

            return(this.GenerateCode(time, currentGroupValue.RollValue, currentGroupValue.RD_Format));
        }
Пример #3
0
        /// <summary>
        /// 为指定名称的编码规则生成最新的编号。
        /// 性能-仓库访问次数:2。
        /// </summary>
        /// <param name="info">自动编码规则。</param>
        /// <returns></returns>
        public string GenerateNext(SerialNumberInfo info)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            var now = DateTime.Now;

            string timeKey       = null;
            var    timeKeyFormat = info.TimeGroupFormat;

            if (!string.IsNullOrEmpty(timeKeyFormat))
            {
                timeKey = now.ToString(timeKeyFormat);
            }

            var valueRepo = RF.Concrete <SerialNumberValueRepository>();

            using (var tran = RF.TransactionScope(valueRepo))
            {
                //先找到当前的值。
                var currentValue = valueRepo.GetByKey(info.Name, timeKey);

                string res = null;

                if (currentValue != null)
                {
                    res = this.GenerateNext(currentValue, now);
                }
                else
                {
                    //如果当前值还不存在,则直接添加一个到库中。
                    currentValue = new SerialNumberValue
                    {
                        SerialNumberInfo = info,
                        TimeKey          = timeKey,
                        RollValue        = info.RollValueStart
                    };
                    valueRepo.Save(currentValue);

                    res = GenerateCode(now, currentValue.RollValue, info.Format);
                }

                tran.Complete();

                return(res);
            }
        }
Пример #4
0
        /// <summary>
        /// 为指定的编码值对应的编码规则生成最新的编号。
        /// 性能-仓库访问次数:1(未更换组)、2-3(组不可用,需要更换新组)。
        /// </summary>
        /// <param name="currentGroupValue">当前最新的值。</param>
        /// <returns></returns>
        public virtual string GenerateNext(SerialNumberValue currentGroupValue)
        {
            var now     = DateTime.Now;
            var timeKey = GetTimeGroupKey(now, currentGroupValue.RD_TimeKeyFormat);

            //需要验证传入的 Value 是否应是当前时间对应的组。
            if (currentGroupValue.TimeKey == timeKey)
            {
                return(this.GenerateNext(currentGroupValue, now));
            }
            else
            {
                return(this.GenerateNext(currentGroupValue.SerialNumberInfo));
            }
        }
Пример #5
0
        /// <summary>
        /// 为指定名称的编码规则生成指定时间对应的最新的编号。
        /// 性能-仓库访问次数:2。
        /// </summary>
        /// <param name="info">自动编码规则。</param>
        /// <param name="specificTime">需要生成编号的指定的时间。</param>
        /// <returns></returns>
        public virtual string GenerateNext(SerialNumberInfo info, DateTime specificTime)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            //计算 specificTime 时间对应的分组 Key
            string timeGroupKey = GetTimeGroupKey(specificTime, info.TimeGroupFormat);

            var valueRepo = RF.Concrete <SerialNumberValueRepository>();

            using (var tran = RF.TransactionScope(valueRepo))
            {
                //先找到当前的值。
                var currentGroupValue = valueRepo.GetByKey(info.Name, timeGroupKey);

                string res = null;
                if (currentGroupValue != null)
                {
                    res = this.GenerateNext(currentGroupValue, specificTime);
                }
                else
                {
                    //如果当前值还不存在,则直接添加一个到库中。
                    currentGroupValue = new SerialNumberValue
                    {
                        SerialNumberInfo = info,
                        TimeKey          = timeGroupKey,
                        RollValue        = info.RollValueStart
                    };
                    valueRepo.Save(currentGroupValue);

                    res = this.GenerateCode(specificTime, currentGroupValue.RollValue, info.Format);
                }

                tran.Complete();

                return(res);
            }
        }
Пример #6
0
        /// <summary>
        /// 为指定的编码值对应的编码规则生成最新的编号。
        /// 性能-仓库访问次数:1(未更换组)、2-3(组不可用,需要更换新组)。
        /// </summary>
        /// <param name="currentValue">当前最新的值。</param>
        /// <returns></returns>
        public string GenerateNext(SerialNumberValue currentValue)
        {
            var    now           = DateTime.Now;
            string timeKey       = null;
            var    timeKeyFormat = currentValue.RD_TimeKeyFormat;

            if (!string.IsNullOrEmpty(timeKeyFormat))
            {
                timeKey = now.ToString(timeKeyFormat);
            }

            //需要验证传入的 Value 是否应是当前时间对应的组。
            if (currentValue.TimeKey == timeKey)
            {
                return(this.GenerateNext(currentValue, now));
            }
            else
            {
                return(this.GenerateNext(currentValue.SerialNumberInfo));
            }
        }
Пример #7
0
 public void Insert(int index, SerialNumberValue entity)
 {
     base.Insert(index, entity);
 }
Пример #8
0
 public int IndexOf(SerialNumberValue entity)
 {
     return(base.IndexOf(entity));
 }
Пример #9
0
 public bool Contains(SerialNumberValue entity)
 {
     return(base.Contains(entity));
 }
Пример #10
0
 public void Add(SerialNumberValue entity)
 {
     base.Add(entity);
 }
Пример #11
0
 public bool Remove(SerialNumberValue entity)
 {
     return(base.Remove(entity));
 }