358 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			358 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
<#@ template debug="false" hostspecific="true" language="C#" #>
 | 
						||
<#@ assembly name="System.Core" #>
 | 
						||
<#@ import namespace="System" #> 
 | 
						||
<#@ import namespace="System.Linq" #>
 | 
						||
<#@ import namespace="System.Text" #>
 | 
						||
<#@ import namespace="System.IO" #>
 | 
						||
<#@ import namespace="System.Collections.Generic" #> 
 | 
						||
<#@ import namespace="System.Reflection" #> 
 | 
						||
<#@ import namespace="System.ComponentModel" #>  
 | 
						||
<#@ output extension=".cs" #>
 | 
						||
//------------------------------------------------------------------------------
 | 
						||
//     T4模板文件:基础接口类
 | 
						||
//     此代码由T4模板自动生成
 | 
						||
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
 | 
						||
//------------------------------------------------------------------------------
 | 
						||
using APT.Infrastructure.Core;
 | 
						||
using Microsoft.AspNetCore.Mvc;
 | 
						||
using System.Collections.Generic;
 | 
						||
using APT.Utility;
 | 
						||
using APT.Infrastructure.Api;
 | 
						||
using APT.BaseData.Domain.ApiModel.PF;
 | 
						||
 namespace APT.PF.WebApi.Controllers.Api
 | 
						||
 {
 | 
						||
	<#
 | 
						||
		List<string> dlls=new List<string>();
 | 
						||
		List<string> filePaths=new List<string>();
 | 
						||
		//filePaths.Add(@"C:\Users\luxiaoyuan\source\repos\ConsoleApp15\ConsoleApp15\T_MM_SN.cs");
 | 
						||
		List<TableT4> tables = new List<TableT4>();
 | 
						||
		 List<string> modules=new List<string> ();
 | 
						||
 | 
						||
		  dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.MS.Domain\\"));
 | 
						||
	   dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.BaseData.Domain\\"));
 | 
						||
       var moduleFix="PF";
 | 
						||
	   foreach(var dll in dlls){
 | 
						||
			GetFileName(filePaths,dll);
 | 
						||
		}
 | 
						||
 | 
						||
 | 
						||
		foreach(var p in filePaths)
 | 
						||
		{
 | 
						||
			 var classText = File.ReadAllText(p, Encoding.Default);
 | 
						||
 | 
						||
            if (!string.IsNullOrEmpty(classText))
 | 
						||
            {
 | 
						||
                int classTextIndex = 0;
 | 
						||
                var space = GetElement(classText, "namespace", "{", ref classTextIndex);
 | 
						||
                if (!string.IsNullOrEmpty(space) && space.IndexOf("Domain.Entities", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                {
 | 
						||
                    var classEleTxt = GetElement(classText, string.Empty, ":", ref classTextIndex);
 | 
						||
                    classTextIndex--;
 | 
						||
                    var baseClassTxt=GetElement(classText, ":", "{", ref classTextIndex);
 | 
						||
                    if (!string.IsNullOrEmpty(classEleTxt))
 | 
						||
                    {
 | 
						||
                        TableT4 tableT4 = new TableT4();
 | 
						||
                        tableT4.BaseName = baseClassTxt;
 | 
						||
                        tableT4.BaseApiName="AuthorizeApiController";
 | 
						||
                        if(tableT4.BaseName.Contains("TreeEntityBase")){
 | 
						||
                        tableT4.BaseApiName="AuthorizeTreeApiController";
 | 
						||
                        }
 | 
						||
                        tableT4.TableNameSpace = space;
 | 
						||
                        tables.Add(tableT4);
 | 
						||
                        int classEleTxtIndex = 0;
 | 
						||
                        var attrTxt= GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
						||
                        while (!string.IsNullOrEmpty(attrTxt))
 | 
						||
                        {
 | 
						||
                             if(attrTxt=="IgnoreT4")
 | 
						||
                              {
 | 
						||
                                tableT4.IgnoreT4=true;
 | 
						||
                              }
 | 
						||
                            tableT4.Attrs.Add(attrTxt);
 | 
						||
                            attrTxt = GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
						||
                        }
 | 
						||
                         if(tableT4.IgnoreT4)
 | 
						||
                            continue;
 | 
						||
                        var classEleTxt1 =  GetElement(classEleTxt, "class", "", ref classEleTxtIndex);
 | 
						||
                        if (!string.IsNullOrEmpty(classEleTxt1))
 | 
						||
                            tableT4.Name = classEleTxt1;
 | 
						||
 
 | 
						||
                    }
 | 
						||
 | 
						||
                }
 | 
						||
            }
 | 
						||
		}
 | 
						||
 | 
						||
		foreach(var t4 in tables)
 | 
						||
        { 
 | 
						||
            if(t4.IgnoreT4) continue;
 | 
						||
            var newName = t4.Name.ToLower();
 | 
						||
            var newNameAry = newName.Split(new char[] { '_' }); 
 | 
						||
            if (newNameAry.Any() && newNameAry.Length >= 2)
 | 
						||
            {
 | 
						||
                t4.ModuleName = newNameAry[1].ToUpper();
 | 
						||
                if(t4.ModuleName.IndexOf(moduleFix)<0)
 | 
						||
                    continue;
 | 
						||
                for (var n = 2; n < newNameAry.Length; n++)
 | 
						||
                {
 | 
						||
                    t4.FixName += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(newNameAry[n]);
 | 
						||
                }
 | 
						||
            }
 | 
						||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName))continue;
 | 
						||
			if(!modules.Any(i=>i==t4.TableNameSpace)){
 | 
						||
				modules.Add(t4.TableNameSpace);
 | 
						||
			} 
 | 
						||
        }
 | 
						||
		
 | 
						||
		foreach(var space in modules)
 | 
						||
		{
 | 
						||
			WriteLine("using "+space +";");
 | 
						||
		}
 | 
						||
 | 
						||
 | 
						||
		foreach(var t4 in tables)
 | 
						||
		{
 | 
						||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName)||t4.IgnoreT4)continue;
 | 
						||
 | 
						||
			var tableDesc = "";
 | 
						||
            if (t4.Attrs.Any())
 | 
						||
            {
 | 
						||
                foreach(var classAttr in t4.Attrs)
 | 
						||
                {
 | 
						||
                    if (classAttr.IndexOf("Description", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                    { 
 | 
						||
                        var p1 = GetAttrParams(classAttr);
 | 
						||
						if(p1!=null&&p1.Length>0){
 | 
						||
						tableDesc=p1[0];
 | 
						||
						} 
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
 | 
						||
		#>
 | 
						||
			#region  <#= t4.FixName#>-<#= tableDesc#>
 | 
						||
	 /// <summary>
 | 
						||
    ///  <#= tableDesc#>
 | 
						||
    /// </summary>
 | 
						||
	 [Route("api/<#= t4.ModuleName#>/<#= t4.FixName#>")]
 | 
						||
     public partial class <#= t4.FixName#>Controller : <#=t4.BaseApiName#><<#= t4.Name#>>
 | 
						||
     {   
 | 
						||
         /// <summary>
 | 
						||
        /// 查询所有数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="filter">过滤实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("Entities")]
 | 
						||
        public JsonActionResult<IEnumerable<<#= t4.Name#>>> Entities([FromBody]KeywordFilter filter)
 | 
						||
        {
 | 
						||
            return WitEntities(null, filter);
 | 
						||
        }
 | 
						||
         /// <summary>
 | 
						||
        /// 排序查询所有数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="filter">过滤实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
 | 
						||
        [HttpPost, Route("OrderEntities")]
 | 
						||
        public JsonActionResult<IEnumerable<<#= t4.Name#>>> OrderEntities([FromBody]KeywordFilter filter)
 | 
						||
        {
 | 
						||
            return WitOrderEntities(null, filter);
 | 
						||
        }
 | 
						||
         /// <summary>
 | 
						||
        /// 分页查询数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="pageFilter">分页过滤实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("Paged")]
 | 
						||
        public PagedActionResult<<#= t4.Name#>> Paged([FromBody]KeywordPageFilter pageFilter)
 | 
						||
        {
 | 
						||
            return WitPaged(null, pageFilter);
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 排序分页查询数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="pageFilter">分页过滤实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("OrderPaged")]
 | 
						||
        public PagedActionResult<<#= t4.Name#>> OrderPaged([FromBody]KeywordPageFilter pageFilter)
 | 
						||
        {
 | 
						||
            return WitOrderPaged(null, pageFilter);
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 根据主键删除数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="id">主键ID</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpGet, Route("Delete")]
 | 
						||
        public JsonActionResult<bool> Delete(string id)
 | 
						||
        {
 | 
						||
            return WitRealDelete(id);
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 更新或新增数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="entity">对象实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("Update")]
 | 
						||
        public JsonActionResult<bool> Update([FromBody]<#= t4.Name#> entity)
 | 
						||
        {
 | 
						||
            return WitUpdate(entity);
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 批量更新
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="entity">对象实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("BatchUpdate")]
 | 
						||
        public JsonActionResult<bool> BatchUpdate([FromBody] BatchUpdateModel<<#= t4.Name#>> entity)
 | 
						||
        {
 | 
						||
              return WitBantchUpdate(entity?.Data);
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 批量删除数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="ids">id字符串(id用逗号分隔)</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpGet, Route("BatchDelete")]
 | 
						||
        public JsonActionResult<bool> BatchDelete(string ids)
 | 
						||
        {
 | 
						||
            return WitRealBatchDelete(ids);
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获得单条实体数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="filter">过滤实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost, Route("Get")]
 | 
						||
        public JsonActionResult<<#= t4.Name#>> Get([FromBody] KeywordFilter filter)
 | 
						||
        {
 | 
						||
            return WitEntity(null, filter);
 | 
						||
        }
 | 
						||
        <#
 | 
						||
            if(t4.BaseApiName=="AuthorizeTreeApiController"){
 | 
						||
               #>
 | 
						||
               	/// <summary>
 | 
						||
		/// 获得树形实体数据
 | 
						||
		/// </summary>
 | 
						||
		/// <param name="filter"></param>
 | 
						||
		/// <returns></returns>
 | 
						||
		[HttpPost, Route("TreeData")]
 | 
						||
		public JsonActionResult<IEnumerable<TreeNode<<#= t4.Name#>>>> TreeData([FromBody] KeywordFilter filter)
 | 
						||
		{
 | 
						||
			return WitTreeOrderEntities(null, filter);
 | 
						||
		}
 | 
						||
                <#
 | 
						||
            }
 | 
						||
        #>
 | 
						||
 | 
						||
     }
 | 
						||
	 #endregion
 | 
						||
		<#}
 | 
						||
	#>
 | 
						||
 }
 | 
						||
 
 | 
						||
<#+  
 | 
						||
 
 | 
						||
  class TableT4
 | 
						||
    {
 | 
						||
        public string TableNameSpace { get; set; }
 | 
						||
        public string ModuleName { get; set; }
 | 
						||
        public string FixName { get; set; }
 | 
						||
        public string Name { get; set; }
 | 
						||
        public string BaseName { get; set; }
 | 
						||
        public string BaseApiName{get;set;}
 | 
						||
        public bool IgnoreT4{get;set;}
 | 
						||
        public List<FieldT4> Fields = new List<FieldT4>();
 | 
						||
        public List<string> MapDatas = new List<string>();
 | 
						||
        public List<string> Attrs = new List<string>();
 | 
						||
        public TableT4()
 | 
						||
        {
 | 
						||
            MapDatas = new List<string>();
 | 
						||
            Fields = new List<FieldT4>();
 | 
						||
            Attrs = new List<string>();
 | 
						||
        }
 | 
						||
 | 
						||
    }
 | 
						||
 | 
						||
    class FieldT4
 | 
						||
    {
 | 
						||
        public FieldT4()
 | 
						||
        {
 | 
						||
            Attrs = new List<string>();
 | 
						||
        }
 | 
						||
        public string Name { get; set; }
 | 
						||
        public List<string> Attrs = new List<string>();
 | 
						||
    }
 | 
						||
 | 
						||
	private static string GetElement(string txt,string startStr,string endStr, ref int index)
 | 
						||
        {
 | 
						||
            var tempStartIndex=string.IsNullOrEmpty(startStr)?index:
 | 
						||
                    txt.IndexOf(startStr, index, StringComparison.OrdinalIgnoreCase); 
 | 
						||
            var tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : txt.IndexOf(endStr, index, StringComparison.OrdinalIgnoreCase);
 | 
						||
            if (tempStartIndex != -1&&tempEndIndex!=-1)
 | 
						||
            {
 | 
						||
                var tempStartIndex1 = string.IsNullOrEmpty(startStr) ? -1 :
 | 
						||
                        txt.IndexOf(startStr, tempStartIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
						||
                if (tempStartIndex1 != -1&&tempStartIndex1< tempEndIndex)
 | 
						||
                    tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : 
 | 
						||
                            txt.IndexOf(endStr, tempEndIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
						||
 | 
						||
                int startStrLength = (string.IsNullOrEmpty(startStr) ? 0 : startStr.Length);
 | 
						||
                int endStrLength = (string.IsNullOrEmpty(endStr) ? 0 : endStr.Length);
 | 
						||
                index = tempEndIndex + endStrLength;
 | 
						||
                string ret= txt.Substring(tempStartIndex+startStrLength, tempEndIndex-tempStartIndex- startStrLength);
 | 
						||
                return ret.Trim();
 | 
						||
            }
 | 
						||
            return string.Empty;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        private static string GetAttrParam(string str)
 | 
						||
        {
 | 
						||
            int lefIndex = str.IndexOf("(");
 | 
						||
            int rigthIndex = str.LastIndexOf(")");
 | 
						||
            if(lefIndex!=-1&&rigthIndex!=-1)
 | 
						||
            {
 | 
						||
                var ret= str.Substring(lefIndex + 1, rigthIndex - 1- lefIndex);
 | 
						||
                return ret.Trim();
 | 
						||
            }
 | 
						||
            return string.Empty;
 | 
						||
        }
 | 
						||
 | 
						||
        private static string[] GetAttrParams(string str)
 | 
						||
        {
 | 
						||
            var ret = GetAttrParam(str);
 | 
						||
            if (string.IsNullOrEmpty(ret)) return null; 
 | 
						||
            return ret.Split(',').Select(t => t.Trim().Replace("\"", "")).ToArray();
 | 
						||
        }
 | 
						||
 | 
						||
        private static bool ToBoolean(string str)
 | 
						||
        {
 | 
						||
            if (string.IsNullOrEmpty(str)) return false;
 | 
						||
            try
 | 
						||
            {
 | 
						||
                return Convert.ToBoolean(str);
 | 
						||
            }catch{
 | 
						||
                return false;
 | 
						||
            }
 | 
						||
        }
 | 
						||
public static void GetFileName(List<string> filePaths, string path)
 | 
						||
 {
 | 
						||
		DirectoryInfo root = new DirectoryInfo(path);
 | 
						||
		foreach (FileInfo f in root.GetFiles())
 | 
						||
		{
 | 
						||
		  if (f.Extension.ToLower()==".cs".ToLower())
 | 
						||
			{
 | 
						||
				filePaths.Add(f.FullName);
 | 
						||
			}
 | 
						||
		}
 | 
						||
		 foreach (DirectoryInfo d in root.GetDirectories())
 | 
						||
		 {
 | 
						||
		  GetFileName(filePaths, d.FullName);
 | 
						||
		 }
 | 
						||
 }
 | 
						||
#>
 |