diff --git a/CodeSmith/Add.cshtml.cst b/CodeSmith/Add.cshtml.cst new file mode 100644 index 00000000..2cf8b971 --- /dev/null +++ b/CodeSmith/Add.cshtml.cst @@ -0,0 +1,148 @@ +<%-- +Name: Database Table Properties +Author: Paul Welter +Description: Create a list of properties from a database table +--%> +<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Encoding="utf-8" Description="添加模块" %> +<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" +Description="连接的数据库" %> +<%@ Property Name="ModuleName" Type="String" Category="Context" Description="模块名称" %> +<%@ Property Name="NeedViewModel" Type="Boolean" Category="Context" Default="False" Description="是否需要ViewModel" %> +<%@ Property Name="CascadeId" Type="String" Category="" Default="ParentId" Description="级联字段" %> +<%@ Property Name="CascadeName" Type="String" Category="" Default="ParentName" Description="级联显示的文字" %> +<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %> +<%@ Assembly Name="SchemaExplorer" %> +<%@ Import Namespace="SchemaExplorer" %> + +<%if(NeedViewModel){ %> +@model OpenAuth.App.ViewModel.<%=GetModelName()%> +<%} else{ %> +@model OpenAuth.Domain.<%=GetModelName()%> +<%} %> +@{ + ViewBag.Title = "<%=GetModelName()%>编辑界面"; + Layout = null; +} + +
+
+ + + + + + <% foreach (ColumnSchema column in this.SourceTable.Columns) { + if(column.Name == CascadeName) continue; + %> + + + + <% } %> + +

* 添加

+ <%if(column.IsPrimaryKeyMember){ %> + @Html.HiddenFor(m =>m.Id) + <% } else if(column.Name == CascadeId) {%> + + + +
    + + <% } else if(CSharpAlias[column.SystemType.FullName] == "bool") {%> + + + + <%} else if(CSharpAlias[column.SystemType.FullName] == "int") {%> + + + <%} else{%> + + + <%} %> +
    +
    +
    + + + \ No newline at end of file diff --git a/CodeSmith/Application.cst b/CodeSmith/Application.cst new file mode 100644 index 00000000..7d3e6d7a --- /dev/null +++ b/CodeSmith/Application.cst @@ -0,0 +1,131 @@ +<%-- +Name: Database Table Properties +Author: Paul Welter +Description: Create a list of properties from a database table +--%> +<%@ CodeTemplate Language="C#" Encoding="utf-8" TargetLanguage="C#" Debug="False" Description="应用层" %> +<%@ Property Name="ModuleName" Type="String" Category="Context" Description="模块名称" %> +<%@ Property Name="NeedViewModel" Type="Boolean" Category="Context" Default="False" Description="是否需要ViewModel" %> +<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %> +<%@ Assembly Name="SchemaExplorer" %> +<%@ Import Namespace="SchemaExplorer" %> + + +<%if(NeedViewModel){ %> +using OpenAuth.App.ViewModel; +<%} %> +using OpenAuth.Domain; +using OpenAuth.Domain.Interface; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAuth.App +{ + public class <%=ModuleName%>ManagerApp + { + private I<%=ModuleName%>Repository _repository; + private IOrgRepository _orgRepository; + + public <%=ModuleName%>ManagerApp(I<%=ModuleName%>Repository repository, + IOrgRepository orgRepository) + { + _repository = repository; + _orgRepository = orgRepository; + } + + public int Get<%=GetModelName()%>CntInOrg(int orgId) + { + if (orgId == 0) + { + return _repository.Find(null).Count(); + } + else + { + return _repository.Get<%=GetModelName()%>CntInOrgs(GetSubOrgIds(orgId)); + } + } + + /// + /// 加载一个部门及子部门全部<%=GetModelName()%>s + /// + public dynamic Load(int orgId, int pageindex, int pagesize) + { + IEnumerable<<%=ModuleName%>> <%=ModuleName%>s; + int total = 0; + if (orgId == 0) + { + <%=ModuleName%>s = _repository.Load<%=ModuleName%>s(pageindex, pagesize); + total = _repository.GetCount(); + } + else + { + <%=ModuleName%>s = _repository.LoadInOrgs(pageindex, pagesize,GetSubOrgIds(orgId)); + total = _repository.Get<%=ModuleName%>CntInOrgs(orgId); + } + <%if(NeedViewModel){ %> + var <%=ModuleName%>views = new List<<%=ModuleName%>View>(); + foreach (var <%=ModuleName%> in <%=ModuleName%>s) + { + <%=ModuleName%>View uv = <%=ModuleName%>; + uv.Organizations = string.Join(",", _orgRepository.LoadBy<%=ModuleName%>(<%=ModuleName%>.Id).Select(u => u.Name).ToList()); + <%=ModuleName%>views.Add(uv); + } + <%} %> + + return new + { + total = total, + list = <%=GetModelName()%>s, + pageCurrent = pageindex + }; + } + + /// + /// 获取当前组织的所有下级组织 + /// + private int[] GetSubOrgIds(int orgId) + { + var org = _orgRepository.FindSingle(u => u.Id == orgId); + var orgs = _orgRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); + return orgs; + } + + public <%=GetModelName()%> Find(int id) + { + var <%=ModuleName.ToLower()%> = _repository.FindSingle(u => u.Id == id); + if (<%=ModuleName.ToLower()%> == null) return new <%=GetModelName()%>(); + + return <%=ModuleName.ToLower() %>; + } + + public void Delete(int id) + { + _repository.Delete(id); + } + + public void AddOrUpdate(<%=GetModelName()%> model) + { + <%=ModuleName%> <%=ModuleName.ToLower()%> = model; + if (<%=ModuleName.ToLower()%>.Id == 0) + { + _repository.Add(<%=ModuleName.ToLower()%>); + } + else + { + _repository.Update(<%=ModuleName.ToLower()%>); + } + + } + + + } +} \ No newline at end of file diff --git a/CodeSmith/Controller.cst b/CodeSmith/Controller.cst new file mode 100644 index 00000000..9b88dd88 --- /dev/null +++ b/CodeSmith/Controller.cst @@ -0,0 +1,102 @@ +<%-- +Name: Database Table Properties +Author: Paul Welter +Description: Create a list of properties from a database table +--%> +<%@ CodeTemplate Language="C#" Encoding="utf-8" TargetLanguage="C#" Debug="False" Description="控制器" %> +<%@ Property Name="ModuleName" Type="String" Category="Context" Description="模块名称" %> +<%@ Property Name="NeedViewModel" Type="Boolean" Category="Context" Default="False" Description="是否需要ViewModel" %> +<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %> +<%@ Assembly Name="SchemaExplorer" %> +<%@ Import Namespace="SchemaExplorer" %> + + +using System; +using System.Web.Mvc; +using Infrastructure; +using OpenAuth.App; +<%if(NeedViewModel){ %> +using OpenAuth.App.ViewModel; +<%} %> + +namespace OpenAuth.Mvc.Controllers +{ + public class <%=ModuleName%>ManagerController : BaseController + { + private <%=ModuleName%>ManagerApp _app; + + public <%=ModuleName%>ManagerController() + { + _app = (<%=ModuleName%>ManagerApp)DependencyResolver.Current.GetService(typeof(<%=ModuleName%>ManagerApp)); + } + + // + // GET: /<%=ModuleName%>Manager/ + public ActionResult Index() + { + return View(); + } + + public ActionResult Add(int id = 0) + { + return View(_app.Find(id)); + } + + //添加或修改组织 + [HttpPost] + public string Add(<%=GetModelName()%> model) + { + try + { + _app.AddOrUpdate(model); + + } + catch (Exception ex) + { + BjuiResponse.statusCode = "300"; + BjuiResponse.message = ex.Message; + } + return JsonHelper.Instance.Serialize(BjuiResponse); + } + + /// + /// 加载组织下面的所有用户 + /// + public string Load(int orgId, int pageCurrent = 1, int pageSize = 30) + { + return JsonHelper.Instance.Serialize(_app.Load(orgId, pageCurrent, pageSize)); + } + + //获取组织下面用户个数 + public int GetCount(int orgId) + { + return _app.Get<%=GetModelName()%>CntInOrg(orgId); + } + + public string Delete(string Id) + { + try + { + foreach (var obj in Id.Split(',')) + { + _app.Delete(int.Parse(obj)); + } + } + catch (Exception e) + { + BjuiResponse.statusCode = "300"; + BjuiResponse.message = e.Message; + } + + return JsonHelper.Instance.Serialize(BjuiResponse); + } + } +} \ No newline at end of file diff --git a/CodeSmith/IRepository.cst b/CodeSmith/IRepository.cst new file mode 100644 index 00000000..4e1ec96c --- /dev/null +++ b/CodeSmith/IRepository.cst @@ -0,0 +1,28 @@ +<%-- +Name: Database Table Properties +Author: Paul Welter +Description: Create a list of properties from a database table +--%> +<%@ CodeTemplate Language="C#" Encoding="utf-8" TargetLanguage="C#" Debug="False" Description="创建包含组织机构的接口" %> +<%@ Property Name="ModuleName" Type="String" Category="Context" Description="模块名称" %> +<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %> +<%@ Assembly Name="SchemaExplorer" %> +<%@ Import Namespace="SchemaExplorer" %> + +using System.Collections.Generic; +using System.Linq; + +namespace OpenAuth.Domain.Interface +{ + public interface I<%=ModuleName%>Repository :IRepository<<%=ModuleName%>> + { + IEnumerable<<%=ModuleName%>> Load<%=ModuleName%>s(int pageindex, int pagesize); + + IEnumerable<<%=ModuleName%>> LoadInOrgs(params int[] orgId); + int Get<%=ModuleName%>CntInOrgs(params int[] orgIds); + IEnumerable<<%=ModuleName%>> LoadInOrgs(int pageindex, int pagesize, params int[] orgIds); + + void Delete(int id); + + } +} \ No newline at end of file diff --git a/CodeSmith/Index.cshtml.cst b/CodeSmith/Index.cshtml.cst new file mode 100644 index 00000000..5396b131 --- /dev/null +++ b/CodeSmith/Index.cshtml.cst @@ -0,0 +1,170 @@ +<%-- +Name: Database Table Properties +Author: Paul Welter +Description: Create a list of properties from a database table +--%> +<%@ CodeTemplate Language="C#" Encoding="utf-8" TargetLanguage="C#" Debug="True" Description="Create a list of properties from database table." %> +<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %> +<%@ Property Name="ModuleName" Type="String" Category="Context" Description="模块名称" %> +<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %> +<%@ Assembly Name="SchemaExplorer" %> +<%@ Import Namespace="SchemaExplorer" %> + +@{ + string _prefix = "<%=ModuleName%>"; + var _treeId = _prefix + "Tree"; + var _gridId = _prefix + "Grid"; + var _treeDetail = _prefix + "Detail"; +} +
    +
    +
    +
      +
      + +
      +
      +
      +
      + + + diff --git a/CodeSmith/proj/cshtml.csp b/CodeSmith/proj/cshtml.csp new file mode 100644 index 00000000..50829c3d --- /dev/null +++ b/CodeSmith/proj/cshtml.csp @@ -0,0 +1,30 @@ + + + + + + + + + $(ConnectionString1) + SchemaExplorer.SqlSchemaProvider,SchemaExplorer.SqlSchemaProvider + + dbo + Module +
      +
      + Module +
      + + + $(ConnectionString1) + SchemaExplorer.SqlSchemaProvider,SchemaExplorer.SqlSchemaProvider + + dbo + Role +
      +
      + Role +
      +
      +
      \ No newline at end of file