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');
}
}
}