using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using LM.Core.Configuration; using LM.Core.DBManager; using LM.Core.DbSqlSugar; using LM.Core.Enums; using LM.Core.Extensions; namespace LM.Core.Extensions { public static class IdentityCode { /// /// 创建自增单据号 /// /// /// 实体对象 /// 要设置单据号的字段 /// 单据号前缀,如:{TC}{2023}{0001} /// 排序字段,每天都从第1个号码开始 /// /// 使用示例: /// Sys_User user= new Sys_User(); /// user.Create(x => x.UserName, "U", x => x.CreateDate); /// public static string Create(this T entity, Expression> codeField, string preCode = "Code", Expression> dateFieldExpression = null ) where T : class { string dateField; if (dateFieldExpression == null) { dateField = AppSetting.CreateMember.DateField; } else { dateField = dateFieldExpression.GetExpressionPropertyFirst(); } DateTime dateNow = (DateTime)DateTime.Now.ToString("yyyy-MM-dd").GetDateTime(); var condition = dateField.CreateExpression(dateNow, LinqExpressionType.ThanOrEqual); var field = codeField.GetExpressionPropertyFirst(); var select = field.GetExpression(); string orderNo = DbManger.Db.Queryable().Where(condition) .OrderByDescending(codeField) .Select(select) .FirstOrDefault() ?.ToString(); string rule = $"{preCode}{DateTime.Now.ToString("yyyyMMdd")}"; if (string.IsNullOrEmpty(orderNo)) { rule += "0001"; } else { rule += (orderNo.Substring(orderNo.Length - 4).GetInt() + 1).ToString("0000"); } var property = typeof(T).GetProperty(field); property.SetValue(entity, rule); return rule; } } }