[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
        }