[C#] 纯文本查看 复制代码
/// <summary>
/// 生成申请单号
/// </summary>
/// <returns></returns>
public string GenApplyNum()
{
List<SysCode> listSysCode = GetCode();//获取单号库所有单号
#region 单号库中有单号时取里面单号
if (listSysCode.Count > 0)
{
//如有单号状态为可用则直接使用,没有则将排队单号加1得到新单号
//有可用单号时
SysCode avalibleCode = listSysCode.Where(s => s.CodeStatus.Equals("可用")).FirstOrDefault();
if (avalibleCode != null)
{
CodeUpdateStatus(avalibleCode.CodeName, "占用");//修改状态为占用,防止其它用户使用
return avalibleCode.CodeName;
}
//占用单号加1得到新单号
SysCode orderCode = listSysCode.Where(s => s.CodeStatus.Equals("占用")).OrderByDescending(s => s.CodeId).FirstOrDefault();
if (orderCode != null)
{
string prefix = orderCode.CodeName.Substring(0, 6);
string serialNumber = (Convert.ToInt32(orderCode.CodeName.Substring(6, 3)) + 1).ToString().PadLeft(3, '0');
string newId = prefix + serialNumber;
SaveCode(newId, "占用");
return newId;
}
}
#endregion
#region 单号库为空则生成新单号MyRegion
int maxNumber = GetNewNumber();
//生成单号
string newNum = string.Format("TM{0}{1}{2}", DateTime.Now.ToString("yy"), DateTime.Now.ToString("MM"), maxNumber < 10 ? "00" + maxNumber.ToString() : maxNumber.ToString());
//如生成的单号与单号库里单号相同则单号+1直到不同
while (listSysCode.Exists(s => s.CodeName.Equals(newNum)))
{
newNum = newNum.Substring(0, 6) + (Convert.ToInt32(newNum.Substring(6, 3)) + 1).ToString().PadLeft(3, '0');
}
SaveCode(newNum, "占用");//将生成的单号加入单号库排队
return newNum;
#endregion
}