From 4adf6ef2e1f7f8dabe398564ddc662da1d7897c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=9F=B3=E5=A4=B4?= Date: Sun, 29 Dec 2024 16:56:35 +0800 Subject: [PATCH] =?UTF-8?q?v11.16=20=E4=BC=98=E5=8C=96=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=9A=84=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E7=94=9F=E6=88=90=E9=AD=94=E6=96=B9?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E7=9A=84=E9=AB=98=E7=BA=A7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XCode/Code/EntityBuilder.cs | 81 ++++-------- XCode/Code/SearchBuilder.cs | 123 ++++++++++++++++++ XCode/XCode.csproj | 2 +- XCodeTool/CubeBuilder.cs | 67 ++++++++-- XCodeTool/XCodeTool.csproj | 2 +- XUnitTest.XCode/Code/Entity/地区.Biz.cs | 4 +- .../Code/Entity/字典参数.Biz.cs | 4 +- XUnitTest.XCode/Code/Entity/用户.Biz.cs | 6 +- XUnitTest.XCode/Code/Entity/租户.Biz.cs | 6 +- .../Code/Entity/租户关系.Biz.cs | 6 +- XUnitTest.XCode/Code/Entity/角色.Biz.cs | 4 +- XUnitTest.XCode/Code/Entity/部门.Biz.cs | 6 +- .../Code/entity_user_normal_biz.cs | 6 +- 13 files changed, 241 insertions(+), 76 deletions(-) create mode 100644 XCode/Code/SearchBuilder.cs diff --git a/XCode/Code/EntityBuilder.cs b/XCode/Code/EntityBuilder.cs index 3ccac0fa2..1e1eb363f 100644 --- a/XCode/Code/EntityBuilder.cs +++ b/XCode/Code/EntityBuilder.cs @@ -1,5 +1,4 @@ -using System.Reflection; -using System.Text; +using System.Text; using NewLife; using NewLife.Collections; using NewLife.Log; @@ -1655,11 +1654,11 @@ public class EntityBuilder : ClassBuilder var methodName = columns.Select(e => e.Name).Join("And"); methodName = $"FindBy{methodName}"; - var (ps, ps2) = GetParameters(columns); + var ps = GetParameters(columns); var args = ps.Join(", ", e => $"{e.Value} {e.Key}"); // 如果方法名已存在,则不生成 - var key = $"{methodName}({ps2.Join(",", e => e.Value)})"; + var key = $"{methodName}({ps.Join(",", e => e.Value)})"; if (Members.Contains(key)) return false; Members.Add(key); @@ -1758,11 +1757,11 @@ public class EntityBuilder : ClassBuilder var methodName = columns.Select(e => e.Name).Join("And"); methodName = $"FindAllBy{methodName}"; - var (ps, ps2) = GetParameters(columns); + var ps = GetParameters(columns); var args = ps.Join(", ", e => $"{e.Value} {e.Key}"); // 如果方法名已存在,则不生成 - var key = $"{methodName}({ps2.Join(",", e => e.Value)})"; + var key = $"{methodName}({ps.Join(",", e => e.Value)})"; if (Members.Contains(key)) return false; Members.Add(key); @@ -1824,7 +1823,7 @@ public class EntityBuilder : ClassBuilder return true; } - private (IDictionary, IDictionary) GetParameters(IList columns) + private IDictionary GetParameters(IList columns) { var ps = new Dictionary(); var ps2 = new Dictionary(); @@ -1850,7 +1849,8 @@ public class EntityBuilder : ClassBuilder ps2[dc.CamelName()] = type; } - return (ps, ps2); + //return (ps, ps2); + return ps2; } /// 自定义查询区域 @@ -1931,47 +1931,16 @@ public class EntityBuilder : ClassBuilder protected virtual IList BuildAdvanceSearch() { // 收集索引信息,索引中的所有字段都参与,构造一个高级查询模板 - var idx = Table.Indexes ?? []; - var cs = new List(); - if (idx != null && idx.Count > 0) - { - // 索引中的所有字段,按照表字段顺序 - var dcs = idx.SelectMany(e => e.Columns).Distinct().ToArray(); - foreach (var dc in Table.Columns) - { - // 主键和自增,不参与 - if (dc.PrimaryKey || dc.Identity) continue; - - if (dc.Name.EqualIgnoreCase(dcs) || dc.ColumnName.EqualIgnoreCase(dcs)) cs.Add(dc); - } - } - - if (cs.Count <= 0) return cs; + var builder = new SearchBuilder(Table) { Nullable = Option.Nullable }; + var cs = builder.GetColumns(); + if (cs.Count == 0) return []; var returnName = ClassName; - // 时间字段。无差别支持UpdateTime/CreateTime - var dcTime = cs.FirstOrDefault(e => e.DataScale.StartsWithIgnoreCase("time")); - dcTime ??= cs.FirstOrDefault(e => e.DataType == typeof(DateTime)); - dcTime ??= Table.GetColumns(["UpdateTime", "CreateTime"])?.FirstOrDefault(); - var dcSnow = cs.FirstOrDefault(e => e.PrimaryKey && !e.Identity && e.DataType == typeof(Int64)); - - if (dcTime != null) cs.Remove(dcTime); - cs.RemoveAll(e => e.Name.EqualIgnoreCase("key", "page")); - if (dcSnow != null || dcTime != null) - cs.RemoveAll(e => e.Name.EqualIgnoreCase("start", "end")); - - var (ps, ps2) = GetParameters(cs); + var ps = builder.GetParameters(cs, true, true, true); // 如果方法名已存在,则不生成 - if (dcTime != null) - { - ps2["start"] = "DateTime"; - ps2["end"] = "DateTime"; - } - ps2["key"] = "String"; - ps2["page"] = "PageParameter"; - var key = $"Search({ps2.Join(",", e => e.Value)})"; + var key = $"Search({ps.Join(",", e => e.Value)})"; if (Members.Contains(key)) return cs; Members.Add(key); @@ -1981,27 +1950,20 @@ public class EntityBuilder : ClassBuilder { WriteLine("/// {1}", dc.CamelName(), dc.Description); } + + var dcTime = builder.DataTime; if (dcTime != null) { WriteLine("/// {0}开始", dcTime.DisplayName); WriteLine("/// {0}结束", dcTime.DisplayName); } - else if (dcSnow != null) - { - WriteLine("/// {0}开始", dcSnow.DisplayName); - WriteLine("/// {0}结束", dcSnow.DisplayName); - } WriteLine("/// 关键字"); WriteLine("/// 分页参数信息。可携带统计和数据权限扩展查询等信息"); WriteLine("/// 实体列表"); // 参数部分 var pis = ps.Join(", ", e => $"{e.Value} {e.Key}"); - var piTime = dcTime == null ? "" : "DateTime start, DateTime end, "; - if (pis.Length > 0) - WriteLine("public static IList<{0}> Search({1}, {2}String key, PageParameter page)", returnName, pis, piTime); - else - WriteLine("public static IList<{0}> Search({2}String key, PageParameter page)", returnName, pis, piTime); + WriteLine("public static IList<{0}> Search({1})", returnName, pis); WriteLine("{"); { WriteLine("var exp = new WhereExpression();"); @@ -2020,10 +1982,13 @@ public class EntityBuilder : ClassBuilder WriteLine("if (!{0}.IsNullOrEmpty()) exp &= _.{1} == {0};", dc.CamelName(), dc.Name); } - if (dcSnow != null) - WriteLine("exp &= _.{0}.Between(start, end, Meta.Factory.Snow);", dcSnow.Name); - else if (dcTime != null) - WriteLine("exp &= _.{0}.Between(start, end);", dcTime.Name); + if (dcTime != null) + { + if (dcTime.DataType == typeof(Int64)) + WriteLine("exp &= _.{0}.Between(start, end, Meta.Factory.Snow);", dcTime.Name); + else + WriteLine("exp &= _.{0}.Between(start, end);", dcTime.Name); + } WriteLine("if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key);"); diff --git a/XCode/Code/SearchBuilder.cs b/XCode/Code/SearchBuilder.cs new file mode 100644 index 000000000..4dfbe79d1 --- /dev/null +++ b/XCode/Code/SearchBuilder.cs @@ -0,0 +1,123 @@ +using NewLife; +using NewLife.Reflection; +using XCode.DataAccessLayer; + +namespace XCode.Code; + +/// 搜索功能代码生成器 +public class SearchBuilder(IDataTable table) +{ + #region 属性 + /// 数据表 + public IDataTable Table { get; set; } = table; + + /// 可为null上下文。生成String?等 + public Boolean Nullable { get; set; } + + /// 数据时间字段 + public IDataColumn? DataTime { get; set; } + #endregion + + #region 构造 + #endregion + + #region 方法 + /// 获取可用于搜索的字段列表 + /// + public IList GetColumns() + { + // 收集索引信息,索引中的所有字段都参与,构造一个高级查询模板 + var idx = Table.Indexes ?? []; + var cs = new List(); + if (idx != null && idx.Count > 0) + { + // 索引中的所有字段,按照表字段顺序 + var dcs = idx.SelectMany(e => e.Columns).Distinct().ToArray(); + foreach (var dc in Table.Columns) + { + // 主键和自增,不参与 + if (dc.PrimaryKey || dc.Identity) continue; + + if (dc.Name.EqualIgnoreCase(dcs) || dc.ColumnName.EqualIgnoreCase(dcs)) cs.Add(dc); + } + } + + // 特殊字段 + foreach (var dc in Table.Columns) + { + if (cs.Contains(dc)) continue; + + if (dc.DataType.IsInt() && dc.DataType.IsEnum) + cs.Add(dc); + else if (dc.DataType.IsInt() && !dc.Map.IsNullOrEmpty()) + cs.Add(dc); + } + foreach (var dc in Table.Columns) + { + if (cs.Contains(dc)) continue; + + if (dc.Name.EqualIgnoreCase("enable", "isDeleted") && dc.DataType == typeof(Boolean)) + cs.Add(dc); + } + + if (cs.Count == 0) return []; + + // 时间字段。无差别支持UpdateTime/CreateTime + var dcTime = cs.FirstOrDefault(e => e.DataScale.StartsWithIgnoreCase("time")); + dcTime ??= cs.FirstOrDefault(e => e.DataType == typeof(DateTime)); + dcTime ??= Table.GetColumns(["UpdateTime", "CreateTime"])?.FirstOrDefault(); + var dcSnow = cs.FirstOrDefault(e => e.PrimaryKey && !e.Identity && e.DataType == typeof(Int64)); + + if (dcTime != null) cs.Remove(dcTime); + cs.RemoveAll(e => e.Name.EqualIgnoreCase("key", "page")); + if (dcSnow != null || dcTime != null) + cs.RemoveAll(e => e.Name.EqualIgnoreCase("start", "end")); + + DataTime = dcSnow ?? dcTime; + + return cs; + } + + /// 获取参数列表。名称+类型 + /// + /// + /// + /// + /// + public IDictionary GetParameters(IList columns, Boolean includeTime = false, Boolean includeKey = false, Boolean includePage = false) + { + var ps = new Dictionary(); + foreach (var dc in columns) + { + var type = dc.Properties["Type"]; + if (type.IsNullOrEmpty()) type = dc.DataType?.Name + ""; + + if (dc.DataType == typeof(Boolean)) + type += "?"; + else if (dc.DataType == typeof(String)) + { + if (Nullable && dc.Nullable) + { + type += "?"; + } + } + + var p = type.LastIndexOf('.'); + if (p > 0) type = type[(p + 1)..]; + ps[dc.CamelName()] = type; + } + + if (includeTime && DataTime != null) + { + ps["start"] = "DateTime"; + ps["end"] = "DateTime"; + } + if (includeKey) + ps["key"] = "String"; + if (includePage) + ps["page"] = "PageParameter"; + + return ps; + } + #endregion +} diff --git a/XCode/XCode.csproj b/XCode/XCode.csproj index cabeabd7d..7ae48dafd 100644 --- a/XCode/XCode.csproj +++ b/XCode/XCode.csproj @@ -7,7 +7,7 @@ 数据中间件,支持MySQL、SQLite、SqlServer、Oracle、Postgresql、TDengine、达梦,重点在缓存、性能、分表、自动建表。 新生命开发团队 ©2002-2024 NewLife - 11.16 + 11.17 $([System.DateTime]::Now.ToString(`yyyy.MMdd`)) $(VersionPrefix).$(VersionSuffix) $(Version) diff --git a/XCodeTool/CubeBuilder.cs b/XCodeTool/CubeBuilder.cs index 65e7d1c69..9bf261ffa 100644 --- a/XCodeTool/CubeBuilder.cs +++ b/XCodeTool/CubeBuilder.cs @@ -4,7 +4,9 @@ using System.IO; using System.Linq; using System.Text; using NewLife; +using NewLife.Collections; using NewLife.Log; +using NewLife.Reflection; using XCode.Code; using XCode.DataAccessLayer; @@ -310,6 +312,15 @@ public class CubeBuilder : ClassBuilder if (Table.Columns.Any(c => c.Name.EqualIgnoreCase("TraceId"))) code = code.Replace("//ListFields.TraceUrl(", "ListFields.TraceUrl("); + var ss = BuildSearch(); + if (!ss.IsNullOrEmpty()) + { + var p1 = code.IndexOf(" //var deviceId = p[\"deviceId\"].ToInt(-1);"); + var p2 = code.IndexOf("p);", p1); + + code = code.Substring(0, p1) + ss + code.Substring(p2 + "p);".Length); + } + Writer.Write(code); } @@ -321,15 +332,55 @@ public class CubeBuilder : ClassBuilder #endregion #region 辅助 - ///// 写入 - ///// - //protected override void WriteLine(String value = null) - //{ - // if (!value.IsNullOrEmpty() && value.Length > 2 && value[0] == '<' && value[1] == '/') SetIndent(false); + private String BuildSearch() + { + // 收集索引信息,索引中的所有字段都参与,构造一个高级查询模板 + var builder = new SearchBuilder(Table) { Nullable = Option.Nullable }; + var cs = builder.GetColumns(); + if (cs.Count <= 0) return null; - // base.WriteLine(value); + var ps = builder.GetParameters(cs, true, true, true); - // if (!value.IsNullOrEmpty() && value.Length > 2 && value[0] == '<' && value[1] != '/' && !value.Contains("(); + foreach (var dc in cs) + { + var name = dc.CamelName(); + + if (dc.DataType.IsInt()) + { + if (dc.DataType.IsEnum) + sb.AppendLine($" var {name} = ({dc.DataType.Name})p[\"{name}\"].ToInt();"); + else if (dc.DataType == typeof(Int64)) + sb.AppendLine($" var {name} = p[\"{name}\"].ToLong(-1);"); + else + sb.AppendLine($" var {name} = p[\"{name}\"].ToInt(-1);"); + } + else if (dc.DataType == typeof(Boolean)) + sb.AppendLine($" var {name} = p[\"{name}\"]?.ToBoolean();"); + else if (dc.DataType == typeof(DateTime)) + sb.AppendLine($" var {name} = p[\"{name}\"].ToDateTime();"); + else if (dc.DataType == typeof(String)) + sb.AppendLine($" var {name} = p[\"{name}\"];"); + else + // 不支持的类型,跳过 + continue; + + pis.Add(name); + } + + if (builder.DataTime != null) + { + sb.AppendLine(); + sb.AppendLine(" var start = p[\"dtStart\"].ToDateTime();"); + sb.AppendLine(" var end = p[\"dtEnd\"].ToDateTime();"); + } + + sb.AppendLine(); + sb.AppendLine($" return {Table.Name}.Search({pis.Join(", ")}, p[\"Q\"], p);"); + + return sb.Return(true).TrimEnd(); + } #endregion } \ No newline at end of file diff --git a/XCodeTool/XCodeTool.csproj b/XCodeTool/XCodeTool.csproj index 1dbe8c4c1..b60a0d34a 100644 --- a/XCodeTool/XCodeTool.csproj +++ b/XCodeTool/XCodeTool.csproj @@ -8,7 +8,7 @@ 数据中间件,代码生成 新生命开发团队 ©2002-2024 NewLife - 11.16 + 11.17 $([System.DateTime]::Now.ToString(`yyyy.MMdd`)) $(VersionPrefix).$(VersionSuffix) $(Version) diff --git a/XUnitTest.XCode/Code/Entity/地区.Biz.cs b/XUnitTest.XCode/Code/Entity/地区.Biz.cs index 4191df641..e99ac1367 100644 --- a/XUnitTest.XCode/Code/Entity/地区.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/地区.Biz.cs @@ -120,12 +120,13 @@ public partial class Area : Entity /// 拼音 /// 简拼 /// 地址编码。字符串前缀相同越多,地理距离越近,8位精度19米,6位610米 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(String? name, Int32 parentId, String? pinYin, String? jianPin, String? geoHash, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(String? name, Int32 parentId, String? pinYin, String? jianPin, String? geoHash, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); @@ -134,6 +135,7 @@ public partial class Area : Entity if (!pinYin.IsNullOrEmpty()) exp &= _.PinYin == pinYin; if (!jianPin.IsNullOrEmpty()) exp &= _.JianPin == jianPin; if (!geoHash.IsNullOrEmpty()) exp &= _.GeoHash == geoHash; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/字典参数.Biz.cs b/XUnitTest.XCode/Code/Entity/字典参数.Biz.cs index 15c272c6f..77a9bde49 100644 --- a/XUnitTest.XCode/Code/Entity/字典参数.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/字典参数.Biz.cs @@ -130,18 +130,20 @@ public partial class Parameter : Entity /// 用户。按用户区分参数,用户0表示系统级 /// 类别 /// 名称 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(Int32 userId, String? category, String? name, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(Int32 userId, String? category, String? name, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); if (userId >= 0) exp &= _.UserID == userId; if (!category.IsNullOrEmpty()) exp &= _.Category == category; if (!name.IsNullOrEmpty()) exp &= _.Name == name; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/用户.Biz.cs b/XUnitTest.XCode/Code/Entity/用户.Biz.cs index 44b0cff69..6c524d32b 100644 --- a/XUnitTest.XCode/Code/Entity/用户.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/用户.Biz.cs @@ -161,12 +161,14 @@ public partial class User : Entity /// 手机 /// 代码。身份证、员工编号等 /// 角色。主要角色 + /// 地区。省市区 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(String name, String? mail, String? mobile, String? code, Int32 roleId, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(String name, String? mail, String? mobile, String? code, Int32 roleId, Int32 areaId, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); @@ -175,6 +177,8 @@ public partial class User : Entity if (!mobile.IsNullOrEmpty()) exp &= _.Mobile == mobile; if (!code.IsNullOrEmpty()) exp &= _.Code == code; if (roleId >= 0) exp &= _.RoleID == roleId; + if (areaId >= 0) exp &= _.AreaId == areaId; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/租户.Biz.cs b/XUnitTest.XCode/Code/Entity/租户.Biz.cs index d77ab192e..fbfa8c60f 100644 --- a/XUnitTest.XCode/Code/Entity/租户.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/租户.Biz.cs @@ -121,16 +121,20 @@ public partial class Tenant : Entity #region 高级查询 /// 高级查询 /// 编码。唯一编码 + /// 管理者 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(String? code, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(String? code, Int32 managerId, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); if (!code.IsNullOrEmpty()) exp &= _.Code == code; + if (managerId >= 0) exp &= _.ManagerId == managerId; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/租户关系.Biz.cs b/XUnitTest.XCode/Code/Entity/租户关系.Biz.cs index 214331a92..a0f1ecfc3 100644 --- a/XUnitTest.XCode/Code/Entity/租户关系.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/租户关系.Biz.cs @@ -119,17 +119,21 @@ public partial class TenantUser : Entity /// 高级查询 /// 租户 /// 用户 + /// 角色。用户在该租户所对应的主要角色,替换用户自身的角色组 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(Int32 tenantId, Int32 userId, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(Int32 tenantId, Int32 userId, Int32 roleId, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); if (tenantId >= 0) exp &= _.TenantId == tenantId; if (userId >= 0) exp &= _.UserId == userId; + if (roleId >= 0) exp &= _.RoleId == roleId; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/角色.Biz.cs b/XUnitTest.XCode/Code/Entity/角色.Biz.cs index b903a49cf..2efe16bc8 100644 --- a/XUnitTest.XCode/Code/Entity/角色.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/角色.Biz.cs @@ -135,16 +135,18 @@ public partial class Role : Entity #region 高级查询 /// 高级查询 /// 名称 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(String name, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(String name, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); if (!name.IsNullOrEmpty()) exp &= _.Name == name; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/Entity/部门.Biz.cs b/XUnitTest.XCode/Code/Entity/部门.Biz.cs index 181aa3c75..f1e72dfa7 100644 --- a/XUnitTest.XCode/Code/Entity/部门.Biz.cs +++ b/XUnitTest.XCode/Code/Entity/部门.Biz.cs @@ -135,12 +135,14 @@ public partial class Department : Entity /// 代码 /// 名称 /// 父级 + /// 管理者 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(Int32 tenantId, String? code, String name, Int32 parentId, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(Int32 tenantId, String? code, String name, Int32 parentId, Int32 managerId, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); @@ -148,6 +150,8 @@ public partial class Department : Entity if (!code.IsNullOrEmpty()) exp &= _.Code == code; if (!name.IsNullOrEmpty()) exp &= _.Name == name; if (parentId >= 0) exp &= _.ParentID == parentId; + if (managerId >= 0) exp &= _.ManagerId == managerId; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key); diff --git a/XUnitTest.XCode/Code/entity_user_normal_biz.cs b/XUnitTest.XCode/Code/entity_user_normal_biz.cs index e1b82a049..329489a87 100644 --- a/XUnitTest.XCode/Code/entity_user_normal_biz.cs +++ b/XUnitTest.XCode/Code/entity_user_normal_biz.cs @@ -157,12 +157,14 @@ public partial class User : Entity /// 代码。身份证、员工编码等,支持登录 /// 角色。主要角色 /// 部门。组织机构 + /// 地区。省市区 + /// 启用 /// 更新时间开始 /// 更新时间结束 /// 关键字 /// 分页参数信息。可携带统计和数据权限扩展查询等信息 /// 实体列表 - public static IList Search(String name, String? mail, String? mobile, String? code, Int32 roleId, Int32 departmentId, DateTime start, DateTime end, String key, PageParameter page) + public static IList Search(String name, String? mail, String? mobile, String? code, Int32 roleId, Int32 departmentId, Int32 areaId, Boolean? enable, DateTime start, DateTime end, String key, PageParameter page) { var exp = new WhereExpression(); @@ -172,6 +174,8 @@ public partial class User : Entity if (!code.IsNullOrEmpty()) exp &= _.Code == code; if (roleId >= 0) exp &= _.RoleID == roleId; if (departmentId >= 0) exp &= _.DepartmentID == departmentId; + if (areaId >= 0) exp &= _.AreaId == areaId; + if (enable != null) exp &= _.Enable == enable; exp &= _.UpdateTime.Between(start, end); if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key);