/// <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); } }
/// <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); }
/// <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); } }
/// <summary> /// 为指定名称的编码规则生成当前时间对应的最新的编号。 /// 性能-仓库访问次数:2。 /// </summary> /// <param name="info">自动编码规则。</param> /// <returns></returns> public string GenerateNext(SerialNumberInfo info) { return(this.GenerateNext(info, DateTime.Now)); }
internal static string GetTimeGroupKey(DateTime time, string timeKeyFormat) { return(SerialNumberInfo.GetTimeGroupKey(time, timeKeyFormat)); }
/// <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)); }
public void Insert(int index, SerialNumberInfo entity) { base.Insert(index, entity); }
public int IndexOf(SerialNumberInfo entity) { return(base.IndexOf(entity)); }
public bool Contains(SerialNumberInfo entity) { return(base.Contains(entity)); }
public void Add(SerialNumberInfo entity) { base.Add(entity); }
public bool Remove(SerialNumberInfo entity) { return(base.Remove(entity)); }