場景:創建的訂單號有固定的前綴,中級爲年月日,後綴流水三位,如‘VD20190802001’,如果各位需求不一樣可以稍微修改下方法實現。
//線程鎖,保證併發時不會產生重複的訂單號
private static readonly object SequenceLock = new object();
/// <summary>
/// 獲取單號
/// </summary>
/// <param name="preString">指定前綴</param>
/// <param name="tableName">生成單號的表名</param>
/// <returns></returns>
public static string GetNewOrderNO(string preString,string tableName)
{
lock(SequenceLock)
{
string result = "";
string sql = string.Format(@"Select max(ID) from {0}", tableName);
//連接數據庫查找最大的訂單號
string curid = Pub_DB.OracleDataAccess.ExecuteScalar(ConnfigSetting.GetShipUserConStr(), sql).ToString();
if (string.IsNullOrEmpty(curid))
{
curid = preString + DateTime.Now.ToString("yyyyMMdd") + "000";
}
string maxid = curid.Substring(curid.Length - 3, 3);
string maxdate = curid.Substring(preString.Length, 8);
if (DateTime.Now.ToString("yyyyMMdd") == maxdate)
{
result = preString + maxdate + (Convert.ToInt16(maxid) + 1).ToString("000");
}
else
{
result = preString + DateTime.Now.ToString("yyyyMMdd") + "001";
}
return result;
}
}