Exemplo n.º 1
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);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 创建一个以日期进行分组生成编号的规则,存储到仓库中,并返回。
        /// 性能-仓库访问次数:1。
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="format">The format.</param>
        /// <returns></returns>
        public virtual SerialNumberInfo CreateDailySerialNumberInfo(string name, string format = "yyyyMMdd********")
        {
            var sni = new SerialNumberInfo
            {
                Name            = name,
                TimeGroupFormat = "yyyyMMdd",
                Format          = format,
                RollValueStart  = 1,
                RollValueStep   = 1,
            };

            var infoRepo = RF.Concrete <SerialNumberInfoRepository>();

            infoRepo.Save(sni);

            return(sni);
        }
Exemplo n.º 3
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);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// 为指定名称的编码规则生成当前时间对应的最新的编号。
 /// 性能-仓库访问次数:2。
 /// </summary>
 /// <param name="info">自动编码规则。</param>
 /// <returns></returns>
 public string GenerateNext(SerialNumberInfo info)
 {
     return(this.GenerateNext(info, DateTime.Now));
 }
Exemplo n.º 5
0
 internal static string GetTimeGroupKey(DateTime time, string timeKeyFormat)
 {
     return(SerialNumberInfo.GetTimeGroupKey(time, timeKeyFormat));
 }
Exemplo n.º 6
0
        /// <summary>
        /// 获取指定规则下指定时间对应的当前值。
        /// </summary>
        /// <param name="info"></param>
        /// <param name="specificTime"></param>
        /// <returns></returns>
        public SerialNumberValue GetByTime(SerialNumberInfo info, DateTime specificTime)
        {
            var timeGroupKey = SerialNumberInfo.GetTimeGroupKey(specificTime, info.TimeGroupFormat);

            return(this.GetByKey(info.Name, timeGroupKey));
        }
Exemplo n.º 7
0
 public void Insert(int index, SerialNumberInfo entity)
 {
     base.Insert(index, entity);
 }
Exemplo n.º 8
0
 public int IndexOf(SerialNumberInfo entity)
 {
     return(base.IndexOf(entity));
 }
Exemplo n.º 9
0
 public bool Contains(SerialNumberInfo entity)
 {
     return(base.Contains(entity));
 }
Exemplo n.º 10
0
 public void Add(SerialNumberInfo entity)
 {
     base.Add(entity);
 }
Exemplo n.º 11
0
 public bool Remove(SerialNumberInfo entity)
 {
     return(base.Remove(entity));
 }