ToB企服应用市场:ToB评测及商务社交产业平台
标题:
代码生成
[打印本页]
作者:
大连密封材料
时间:
2022-11-2 19:03
标题:
代码生成
namespace Qingyun.QingBaiFang.V2.APITest.Web
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System;
/// <summary>
/// 构建
/// </summary>
[TestClass]
public class BuildCodeTest
{
private string _basePath;
/// <summary>
/// 构造
/// </summary>
public BuildCodeTest()
{
_basePath = Directory.GetParent(AppContext.BaseDirectory).Parent.Parent.Parent.Parent.FullName;
}
/// <summary>
/// 构建
/// </summary>
[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);
}
/// <summary>
/// 模板
/// </summary>
public void TempCode()
{
/*
* 控制器类或方法
* 管理类或方法
* 服务接口类或方法
* 服务实现类或方法
* 入参类
* 出参类
* 枚举类
* 数据类
*/
}
/// <summary>
/// 创建控制器方法
/// </summary>
/// <param name="controllerName">控制器名</param>
/// <param name="actionName">方法名</param>
/// <param name="actionRemark">方法备注</param>
/// <param name="requstClass">入参的类名</param>
/// <param name="responeseClass">出参的类名</param>
public void CreateControllerAction(string controllerName, string actionName, string actionRemark, string requstClass, string responeseClass)
{
List<string> attributeNames = new List<string>();
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());
}
/// <summary>
/// 创建控制器
/// </summary>
/// <param name="className">控制器名</param>
/// <param name="classRemark">方法名</param>
/// <param name="inheritName">方法备注</param>
public void CreateController(string className, string classRemark, string inheritName)
{
string nameSpace = "BuliuderCodeController";
List<string> usingNames = new List<string>();
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);
}
}
/// <summary>
/// 创建入参类
/// </summary>
/// <param name="className">类名</param>
/// <param name="classRemark">备注</param>
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<string> usingNames = new List<string>();
if (!Directory.Exists(codePath))
{
string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
File.WriteAllText(codePath, classCode);
}
}
/// <summary>
/// 创建出参类
/// </summary>
/// <param name="className">类名</param>
/// <param name="classRemark">备注</param>
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<string> usingNames = new List<string>();
if (!Directory.Exists(codePath))
{
string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
File.WriteAllText(codePath, classCode);
}
}
/// <summary>
/// 创建管理类
/// </summary>
/// <param name="className">类名</param>
/// <param name="classRemark">备注</param>
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<string> usingNames = new List<string>();
if (!Directory.Exists(codePath))
{
string classCode = ClassBuilder(className, classRemark, inheritName, nameSpace, usingNames);
File.WriteAllText(codePath, classCode);
}
}
/// <summary>
/// 创建管理类方法
/// </summary>
/// <param name="className">类名</param>
/// <param name="actionName">方法名</param>
/// <param name="actionRemark">方法备注</param>
/// <param name="requstClass">入参的类名</param>
/// <param name="responeseClass">出参的类名</param>
public void CreateManagerAction(string className, string actionName, string actionRemark, string requstClass, string responeseClass)
{
List<string> attributeNames = new List<string>();
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());
}
/// <summary>
/// 生成Code
/// </summary>
/// <param name="actionName">方法名</param>
/// <param name="actionRemark">方法备注</param>
/// <param name="requstClass">入参的类名</param>
/// <param name="responeseClass">出参的类名</param>
/// <param name="attributeNames">特性([HttpGet("GetDetailSearch")])</param>
/// <returns>生成的代码</returns>
public string ActionBuilder(string actionName, string actionRemark, string requstClass, string responeseClass, List<string> attributeNames)
{
// 控制器类或方法
StringBuilder app = new StringBuilder();
app.AppendLine($"");
app.AppendLine($" /// <summary>");
app.AppendLine($" /// {actionRemark}");
app.AppendLine($" /// </summary>");
app.AppendLine($" /// <param name="input">入参</param>");
app.AppendLine($" /// <returns>结果</returns>");
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();
}
/// <summary>
/// ClassBuilder
/// </summary>
/// <param name="className">类名</param>
/// <param name="classRemark">备注</param>
/// <param name="inheritName">继承类(ITask)</param>
/// <param name="nameSpace">命名空间(Qingyun.QingBaiFang.V2.Service.Service.Tasks)</param>
/// <param name="usingNames">引用类</param>
/// <returns>生成的Code</returns>
public string ClassBuilder(string className, string classRemark, string inheritName, string nameSpace, List<string> 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($" /// <summary>");
app.AppendLine($" /// {classRemark}");
app.AppendLine($" /// </summary>");
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();
}
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4