代码生成

打印 上一主题 下一主题

主题 826|帖子 826|积分 2478

  1. namespace Qingyun.QingBaiFang.V2.APITest.Web
  2. {
  3.     using Microsoft.VisualStudio.TestTools.UnitTesting;
  4.     using System.Collections.Generic;
  5.     using System.Text;
  6.     using System.IO;
  7.     using System;
  8.     /// <summary>
  9.     /// 构建
  10.     /// </summary>
  11.     [TestClass]
  12.     public class BuildCodeTest
  13.     {
  14.         private string _basePath;
  15.         /// <summary>
  16.         /// 构造
  17.         /// </summary>
  18.         public BuildCodeTest()
  19.         {
  20.             _basePath = Directory.GetParent(AppContext.BaseDirectory).Parent.Parent.Parent.Parent.FullName;
  21.         }
  22.         /// <summary>
  23.         /// 构建
  24.         /// </summary>
  25.         [TestMethod]
  26.         public void ApprovalMeetingSubmit()
  27.         {
  28.             string controllerName = "BuliuderCodeController";
  29.             string controllerRemark = "BuliuderCodeController";
  30.             string actionName = "Demo";
  31.             string actionRemark = "Demo";
  32.             string requstClass = "WebDemoInput";
  33.             string responeseClass = "WebDemoOutput";
  34.             string inheritName = "IDenpendency";
  35.             string managerClassName = "BuliuderCodeManager";
  36.             CreateController(controllerName, controllerRemark, inheritName);
  37.             CreateControllerAction(controllerName, actionName, actionRemark, requstClass, responeseClass);
  38.             CreateInputModel(requstClass, actionRemark);
  39.             CreateOutputModel(requstClass, actionRemark);
  40.             CreateManagerClass(managerClassName, controllerRemark);
  41.             CreateManagerAction(managerClassName, actionName, actionRemark, requstClass, responeseClass);
  42.         }
  43.         /// <summary>
  44.         /// 模板
  45.         /// </summary>
  46.         public void TempCode()
  47.         {
  48.             /*
  49.              *  控制器类或方法
  50.              *  管理类或方法
  51.              *  服务接口类或方法
  52.              *  服务实现类或方法
  53.              *  入参类
  54.              *  出参类
  55.              *  枚举类
  56.              *  数据类
  57.              */
  58.         }
  59.         /// <summary>
  60.         /// 创建控制器方法
  61.         /// </summary>
  62.         /// <param name="controllerName">控制器名</param>
  63.         /// <param name="actionName">方法名</param>
  64.         /// <param name="actionRemark">方法备注</param>
  65.         /// <param name="requstClass">入参的类名</param>
  66.         /// <param name="responeseClass">出参的类名</param>
  67.         public void CreateControllerAction(string controllerName, string actionName, string actionRemark, string requstClass, string responeseClass)
  68.         {
  69.             List<string> attributeNames = new List<string>();
  70.             string codePath = Path.Combine(_basePath, "API", "Controllers", $"{controllerName}.cs");
  71.             var controllerCodes = File.ReadAllLines(codePath);
  72.             var code = ActionBuilder(actionName, actionRemark, requstClass, responeseClass, attributeNames);
  73.             StringBuilder app = new StringBuilder();
  74.             for (var i = 0; i < controllerCodes.Length - 2; i++)
  75.             {
  76.                 app.AppendLine(controllerCodes[i]);
  77.             }
  78.             app.AppendLine(code);
  79.             app.AppendLine($"    }}");
  80.             app.AppendLine($"}}");
  81.             File.WriteAllText(codePath, app.ToString());
  82.         }
  83.         /// <summary>
  84.         /// 创建控制器
  85.         /// </summary>
  86.         /// <param name="className">控制器名</param>
  87.         /// <param name="classRemark">方法名</param>
  88.         /// <param name="inheritName">方法备注</param>
  89.         public void CreateController(string className, string classRemark, string inheritName)
  90.         {
  91.             string nameSpace = "BuliuderCodeController";
  92.             List<string> usingNames = new List<string>();
  93.             string codePath = Path.Combine(_basePath, "API", "Controllers", $"{className}.cs");
  94.             if (!Directory.Exists(codePath))
  95.             {
  96.                 string controllerCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
  97.                 File.WriteAllText(codePath, controllerCode);
  98.             }
  99.         }
  100.         /// <summary>
  101.         /// 创建入参类
  102.         /// </summary>
  103.         /// <param name="className">类名</param>
  104.         /// <param name="classRemark">备注</param>
  105.         public void CreateInputModel(string className, string classRemark)
  106.         {
  107.             string nameSpace = "Qingyun.QingBaiFang.V2.Common.DTOWeb.Input";
  108.             string codePath = Path.Combine(_basePath, "Common", "DTOWeb", "Input", $"{className}.cs");
  109.             string inheritName = string.Empty;
  110.             List<string> usingNames = new List<string>();
  111.             if (!Directory.Exists(codePath))
  112.             {
  113.                 string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
  114.                 File.WriteAllText(codePath, classCode);
  115.             }
  116.         }
  117.         /// <summary>
  118.         /// 创建出参类
  119.         /// </summary>
  120.         /// <param name="className">类名</param>
  121.         /// <param name="classRemark">备注</param>
  122.         public void CreateOutputModel(string className, string classRemark)
  123.         {
  124.             string nameSpace = "Qingyun.QingBaiFang.V2.Common.DTOWeb.Output";
  125.             string codePath = Path.Combine(_basePath, "Common", "DTOWeb", "Output", $"{className}.cs");
  126.             string inheritName = string.Empty;
  127.             List<string> usingNames = new List<string>();
  128.             if (!Directory.Exists(codePath))
  129.             {
  130.                 string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
  131.                 File.WriteAllText(codePath, classCode);
  132.             }
  133.         }
  134.         /// <summary>
  135.         /// 创建管理类
  136.         /// </summary>
  137.         /// <param name="className">类名</param>
  138.         /// <param name="classRemark">备注</param>
  139.         public void CreateManagerClass(string className, string classRemark)
  140.         {
  141.             string nameSpace = "Qingyun.QingBaiFang.V2.Service.Manager.Demo";
  142.             string codePath = Path.Combine(_basePath, "Service", "Manager", "Demo", $"{className}.cs");
  143.             string inheritName = "IDenpendency";
  144.             List<string> usingNames = new List<string>();
  145.             if (!Directory.Exists(codePath))
  146.             {
  147.                 string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
  148.                 File.WriteAllText(codePath, classCode);
  149.             }
  150.         }
  151.         /// <summary>
  152.         /// 创建管理类方法
  153.         /// </summary>
  154.         /// <param name="className">类名</param>
  155.         /// <param name="actionName">方法名</param>
  156.         /// <param name="actionRemark">方法备注</param>
  157.         /// <param name="requstClass">入参的类名</param>
  158.         /// <param name="responeseClass">出参的类名</param>
  159.         public void CreateManagerAction(string className, string actionName, string actionRemark, string requstClass, string responeseClass)
  160.         {
  161.             List<string> attributeNames = new List<string>();
  162.             string codePath = Path.Combine(_basePath, "Service", "Manager", "Demo", $"{className}.cs");
  163.             var controllerCodes = File.ReadAllLines(codePath);
  164.             var code = ActionBuilder(actionName, actionRemark, requstClass, responeseClass, attributeNames);
  165.             StringBuilder app = new StringBuilder();
  166.             for (var i = 0; i < controllerCodes.Length - 2; i++)
  167.             {
  168.                 app.AppendLine(controllerCodes[i]);
  169.             }
  170.             app.AppendLine(code);
  171.             app.AppendLine($"    }}");
  172.             app.AppendLine($"}}");
  173.             File.WriteAllText(codePath, app.ToString());
  174.         }
  175.         /// <summary>
  176.         /// 生成Code
  177.         /// </summary>
  178.         /// <param name="actionName">方法名</param>
  179.         /// <param name="actionRemark">方法备注</param>
  180.         /// <param name="requstClass">入参的类名</param>
  181.         /// <param name="responeseClass">出参的类名</param>
  182.         /// <param name="attributeNames">特性([HttpGet("GetDetailSearch")])</param>
  183.         /// <returns>生成的代码</returns>
  184.         public string ActionBuilder(string actionName, string actionRemark, string requstClass, string responeseClass, List<string> attributeNames)
  185.         {
  186.             // 控制器类或方法
  187.             StringBuilder app = new StringBuilder();
  188.             app.AppendLine($"");
  189.             app.AppendLine($"        /// <summary>");
  190.             app.AppendLine($"        /// {actionRemark}");
  191.             app.AppendLine($"        /// </summary>");
  192.             app.AppendLine($"        /// <param name="input">入参</param>");
  193.             app.AppendLine($"        /// <returns>结果</returns>");
  194.             foreach (var item in attributeNames)
  195.             {
  196.                 app.AppendLine($"        {item}");
  197.             }
  198.             app.AppendLine($"        public async Task<{responeseClass}> {actionName}({requstClass} input)");
  199.             app.AppendLine($"        {{");
  200.             app.AppendLine($"           return await _meetingManager.{actionName}(input);");
  201.             app.AppendLine($"        }}");
  202.             return app.ToString().Trim();
  203.         }
  204.         /// <summary>
  205.         /// ClassBuilder
  206.         /// </summary>
  207.         /// <param name="className">类名</param>
  208.         /// <param name="classRemark">备注</param>
  209.         /// <param name="inheritName">继承类(ITask)</param>
  210.         /// <param name="nameSpace">命名空间(Qingyun.QingBaiFang.V2.Service.Service.Tasks)</param>
  211.         /// <param name="usingNames">引用类</param>
  212.         /// <returns>生成的Code</returns>
  213.         public string ClassBuilder(string className, string classRemark, string inheritName, string nameSpace, List<string> usingNames)
  214.         {
  215.             StringBuilder app = new StringBuilder();
  216.             app.AppendLine($"namespace {nameSpace}");
  217.             app.AppendLine($"{{");
  218.             foreach (var item in usingNames)
  219.             {
  220.                 app.AppendLine($"{item.Trim(';')};");
  221.             }
  222.             if (usingNames.Count > 0)
  223.             {
  224.                 app.AppendLine($"");
  225.             }
  226.             app.AppendLine($"    /// <summary>");
  227.             app.AppendLine($"    /// {classRemark}");
  228.             app.AppendLine($"    /// </summary>");
  229.             if (string.IsNullOrEmpty(inheritName))
  230.             {
  231.                 app.AppendLine($"    public class {className}");
  232.             }
  233.             else
  234.             {
  235.                 app.AppendLine($"    public class {className} : {inheritName}");
  236.             }
  237.             app.AppendLine($"    {{");
  238.             app.AppendLine($"    }}");
  239.             app.AppendLine($"}}");
  240.             return app.ToString().Trim();
  241.         }
  242.     }
  243. }
复制代码
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表