189 8069 5689

代码生成

namespace Qingyun.QingBaiFang.V2.APITest.Web
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System;

    /// 
    /// 构建
    /// 
    [TestClass]
    public class BuildCodeTest
    {
        private string _basePath;

        /// 
        /// 构造
        /// 
        public BuildCodeTest()
        {
            _basePath = Directory.GetParent(AppContext.BaseDirectory).Parent.Parent.Parent.Parent.FullName;
        }

        /// 
        /// 构建
        /// 
        [TestMethod]
        public void ApprovalMeetingSubmit()
        {
            string controllerName = "BuliuderCodeController";
            string controllerRemark = "BuliuderCodeController";
            string actionName = "Demo";
            string actionRemark = "Demo";
            string requstClass = "WebDemoInput";
            string responeseClass = "WebDemoOutput";
            string inheritName = "IDenpendency";
            string managerClassName = "BuliuderCodeManager";
            CreateController(controllerName, controllerRemark, inheritName);
            CreateControllerAction(controllerName, actionName, actionRemark, requstClass, responeseClass);
            CreateInputModel(requstClass, actionRemark);
            CreateOutputModel(requstClass, actionRemark);
            CreateManagerClass(managerClassName, controllerRemark);
            CreateManagerAction(managerClassName, actionName, actionRemark, requstClass, responeseClass);
        }

        /// 
        /// 模板
        /// 
        public void TempCode()
        {
            /*
             *  控制器类或方法
             *  管理类或方法
             *  服务接口类或方法
             *  服务实现类或方法
             *  入参类
             *  出参类
             *  枚举类
             *  数据类
             */
        }

        /// 
        /// 创建控制器方法
        /// 
        /// 控制器名
        /// 方法名
        /// 方法备注
        /// 入参的类名
        /// 出参的类名
        public void CreateControllerAction(string controllerName, string actionName, string actionRemark, string requstClass, string responeseClass)
        {
            List attributeNames = new List();

            string codePath = Path.Combine(_basePath, "API", "Controllers", $"{controllerName}.cs");

            var controllerCodes = File.ReadAllLines(codePath);
            var code = ActionBuilder(actionName, actionRemark, requstClass, responeseClass, attributeNames);
            StringBuilder app = new StringBuilder();
            for (var i = 0; i < controllerCodes.Length - 2; i++)
            {
                app.AppendLine(controllerCodes[i]);
            }

            app.AppendLine(code);
            app.AppendLine($"    }}");
            app.AppendLine($"}}");
            File.WriteAllText(codePath, app.ToString());
        }

        /// 
        /// 创建控制器
        /// 
        /// 控制器名
        /// 方法名
        /// 方法备注
        public void CreateController(string className, string classRemark, string inheritName)
        {
            string nameSpace = "BuliuderCodeController";
            List usingNames = new List();
            string codePath = Path.Combine(_basePath, "API", "Controllers", $"{className}.cs");
            if (!Directory.Exists(codePath))
            {
                string controllerCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
                File.WriteAllText(codePath, controllerCode);
            }
        }

        /// 
        /// 创建入参类
        /// 
        /// 类名
        /// 备注
        public void CreateInputModel(string className, string classRemark)
        {
            string nameSpace = "Qingyun.QingBaiFang.V2.Common.DTOWeb.Input";
            string codePath = Path.Combine(_basePath, "Common", "DTOWeb", "Input", $"{className}.cs");
            string inheritName = string.Empty;
            List usingNames = new List();

            if (!Directory.Exists(codePath))
            {
                string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
                File.WriteAllText(codePath, classCode);
            }
        }

        /// 
        /// 创建出参类
        /// 
        /// 类名
        /// 备注
        public void CreateOutputModel(string className, string classRemark)
        {
            string nameSpace = "Qingyun.QingBaiFang.V2.Common.DTOWeb.Output";
            string codePath = Path.Combine(_basePath, "Common", "DTOWeb", "Output", $"{className}.cs");
            string inheritName = string.Empty;
            List usingNames = new List();

            if (!Directory.Exists(codePath))
            {
                string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
                File.WriteAllText(codePath, classCode);
            }
        }

        /// 
        /// 创建管理类
        /// 
        /// 类名
        /// 备注
        public void CreateManagerClass(string className, string classRemark)
        {
            string nameSpace = "Qingyun.QingBaiFang.V2.Service.Manager.Demo";
            string codePath = Path.Combine(_basePath, "Service", "Manager", "Demo", $"{className}.cs");
            string inheritName = "IDenpendency";
            List usingNames = new List();

            if (!Directory.Exists(codePath))
            {
                string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
                File.WriteAllText(codePath, classCode);
            }
        }

        /// 
        /// 创建管理类方法
        /// 
        /// 类名
        /// 方法名
        /// 方法备注
        /// 入参的类名
        /// 出参的类名
        public void CreateManagerAction(string className, string actionName, string actionRemark, string requstClass, string responeseClass)
        {
            List attributeNames = new List();

            string codePath = Path.Combine(_basePath, "Service", "Manager", "Demo", $"{className}.cs");

            var controllerCodes = File.ReadAllLines(codePath);
            var code = ActionBuilder(actionName, actionRemark, requstClass, responeseClass, attributeNames);
            StringBuilder app = new StringBuilder();
            for (var i = 0; i < controllerCodes.Length - 2; i++)
            {
                app.AppendLine(controllerCodes[i]);
            }

            app.AppendLine(code);
            app.AppendLine($"    }}");
            app.AppendLine($"}}");
            File.WriteAllText(codePath, app.ToString());
        }

        /// 
        /// 生成Code
        /// 
        /// 方法名
        /// 方法备注
        /// 入参的类名
        /// 出参的类名
        /// 特性([HttpGet(\"GetDetailSearch\")])
        /// 生成的代码
        public string ActionBuilder(string actionName, string actionRemark, string requstClass, string responeseClass, List attributeNames)
        {
            // 控制器类或方法
            StringBuilder app = new StringBuilder();
            app.AppendLine($"");
            app.AppendLine($"        /// ");
            app.AppendLine($"        /// {actionRemark}");
            app.AppendLine($"        /// ");
            app.AppendLine($"        /// 入参");
            app.AppendLine($"        /// 结果");
            foreach (var item in attributeNames)
            {
                app.AppendLine($"        {item}");
            }

            app.AppendLine($"        public async Task<{responeseClass}> {actionName}({requstClass} input)");
            app.AppendLine($"        {{");
            app.AppendLine($"           return await _meetingManager.{actionName}(input);");
            app.AppendLine($"        }}");

            return app.ToString().Trim();
        }

        /// 
        /// ClassBuilder
        /// 
        /// 类名
        /// 备注
        /// 继承类(ITask)
        /// 命名空间(Qingyun.QingBaiFang.V2.Service.Service.Tasks)
        /// 引用类
        /// 生成的Code
        public string ClassBuilder(string className, string classRemark, string inheritName, string nameSpace, List usingNames)
        {
            StringBuilder app = new StringBuilder();

            app.AppendLine($"namespace {nameSpace}");
            app.AppendLine($"{{");
            foreach (var item in usingNames)
            {
                app.AppendLine($"{item.Trim(';')};");
            }

            if (usingNames.Count > 0)
            {
                app.AppendLine($"");
            }

            app.AppendLine($"    /// ");
            app.AppendLine($"    /// {classRemark}");
            app.AppendLine($"    /// ");
            if (string.IsNullOrEmpty(inheritName))
            {
                app.AppendLine($"    public class {className}");
            }
            else
            {
                app.AppendLine($"    public class {className} : {inheritName}");
            }

            app.AppendLine($"    {{");
            app.AppendLine($"    }}");
            app.AppendLine($"}}");

            return app.ToString().Trim();
        }
    }
}

当前文章:代码生成
新闻来源:http://jkwzsj.com/article/dsoiojh.html

其他资讯