using YLShipBuildLandMap.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Transactions; namespace YLShipBuildLandMap.Services.SystemSetting { public class SNServices : ISNServices { private YLShipBuildLandMapContext DbContext { get; set; } public SNServices(YLShipBuildLandMapContext dbContext) { DbContext = dbContext; } /// /// 获取下一个序列号带key(可指定序列号位数) /// /// /// public string GetSN(string key, int postfixLength = 2, string text = "") { if (key == null) { throw new ArgumentNullException("key"); } postfixLength = postfixLength < 0 ? 0 : postfixLength; var result = 1; var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); if (entity != null) { result = entity.Number + 1; } return key + text + result.ToString().PadLeft(postfixLength, '0'); } /// /// 获取下一个序列号带key同时更新(可指定序列号位数) /// /// /// public string SetSN(string key, int postfixLength = 2, string text = "") { if (key == null) { throw new ArgumentNullException("key"); } postfixLength = postfixLength < 0 ? 0 : postfixLength; var result = 1; /*var isInTransaction = Transaction.Current != null; TransactionScope scope = null; if (!isInTransaction) { scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }); }*/ try { var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); if (entity != null) { result = entity.Number + 1; } else { entity = new SysSerialNumber(); entity.SerialNumberKey = key; this.DbContext.SysSerialNumber.Add(entity); } entity.Number = result; entity.ResetTime = DateTime.Now; this.DbContext.SaveChanges(); /*if (!isInTransaction) { scope.Complete(); }*/ } catch (Exception ex) { throw ex; } finally { /*if (!isInTransaction) { scope.Dispose(); }*/ } return key + text + result.ToString().PadLeft(postfixLength, '0'); } /// /// 获取下一位序列号不带key(可指定序列号位数) /// /// /// public string GetSNValue(string key, int postfixLength = 2) { if (key == null) { throw new ArgumentNullException("key"); } var result = 1; postfixLength = postfixLength < 0 ? 0 : postfixLength; var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); if (entity != null) { result = entity.Number + 1; } else { entity = new SysSerialNumber(); entity.SerialNumberKey = key; entity.Number = 0; entity.ResetTime = DateTime.Now; DbContext.Add(entity); DbContext.SaveChanges(); } return result.ToString().PadLeft(postfixLength, '0'); } /// /// 设置下一个序列号,同时更新(带skip) /// /// /// public void SkipSN(string key, int skipCount) { if (key == null) { throw new ArgumentNullException("key"); } var isInTransaction = Transaction.Current != null; TransactionScope scope = null; if (!isInTransaction) { scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }); } try { var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); var result = 1; if (entity != null) { result = entity.Number; } else { entity = new SysSerialNumber(); entity.SerialNumberKey = key; DbContext.Add(entity); } entity.Number = result + skipCount; entity.ResetTime = DateTime.Now; DbContext.SaveChanges(); if (!isInTransaction) { scope.Complete(); } } catch (Exception ex) { throw ex; } finally { if (!isInTransaction) { scope.Dispose(); } } } /// /// 获取下一个序列号带key同时更新(可指定序列号位数) /// /// /// public string SetDialySN(string key, int postfixLength = 2) { if (key == null) { throw new ArgumentNullException("key"); } postfixLength = postfixLength < 0 ? 0 : postfixLength; var result = 1; var isInTransaction = Transaction.Current != null; TransactionScope scope = null; if (!isInTransaction) { scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }); } try { var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); if (entity != null) { if (entity.ResetTime.Date != DateTime.Today) { result = 1; } else { result = entity.Number + 1; } } else { entity = new SysSerialNumber(); entity.SerialNumberKey = key; DbContext.Add(entity); } entity.Number = result; entity.ResetTime = DateTime.Now; DbContext.SaveChanges(); if (!isInTransaction) { scope.Complete(); } } catch (Exception ex) { throw ex; } finally { if (!isInTransaction) { scope.Dispose(); } } return key + DateTime.Now.ToString("yyyyMMdd") + result.ToString().PadLeft(postfixLength, '0'); } /// /// 获取下一个序列号带key同时更新,不带key(可指定序列号位数) /// /// /// public string SetSNValue(string key, int postfixLength = 2, string text = "") { if (key == null) { throw new ArgumentNullException("key"); } postfixLength = postfixLength < 0 ? 0 : postfixLength; var result = 1; var isInTransaction = Transaction.Current != null; TransactionScope scope = null; if (!isInTransaction) { scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }); } try { var entity = DbContext.SysSerialNumber.FirstOrDefault(w => w.SerialNumberKey == key); if (entity != null) { result = entity.Number + 1; } else { entity = new SysSerialNumber(); entity.SerialNumberKey = key; this.DbContext.SysSerialNumber.Add(entity); } entity.Number = result; entity.ResetTime = DateTime.Now; this.DbContext.SaveChanges(); if (!isInTransaction) { scope.Complete(); } } catch (Exception ex) { throw ex; } finally { if (!isInTransaction) { scope.Dispose(); } } return text + result.ToString().PadLeft(postfixLength, '0'); } } }