CreateDocHtml.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986
  1. using DocTools.Entity;
  2. using DocTools.Entity.Doc;
  3. using DocTools.Helper;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace DocTools
  8. {
  9. public class CreateDocHtml
  10. {
  11. private static Dictionary<string, string> PublicEnumDic = new Dictionary<string, string>();
  12. private static string FileName = "demoHtml.html";
  13. /// <summary>
  14. /// 创建最基础json信息
  15. /// </summary>
  16. /// <returns></returns>
  17. public ResultEntity CreateDocProjectString(string version = "", string fileName = "")
  18. {
  19. if (!string.IsNullOrEmpty(fileName))
  20. {
  21. FileName = fileName;
  22. }
  23. var result = new ResultEntity()
  24. {
  25. create_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  26. id = "216603",
  27. name = "新版杏聆荟RPC接口文档",
  28. project_id = "2116053",
  29. project_name = "新版杏聆荟RPC接口文档" + version,
  30. publisher = "mr_kazuta",
  31. target_id = "2116053",
  32. target_type = "project"
  33. };
  34. var projectEntity = new ProjectEntity();
  35. var envItem = new EnvEntity()
  36. {
  37. env_id = "-1",
  38. list = new NullParameterEntity(),
  39. name = "默认环境"
  40. };
  41. projectEntity.envs.Add(envItem);
  42. var respParam = new ResponseParameterEntity()
  43. {
  44. description = "",
  45. is_checked = 1,
  46. key = "",
  47. type = "Text",
  48. value = ""
  49. };
  50. var varsItem = new VarsEntity()
  51. {
  52. variable = new List<NullParameterEntity>(),
  53. script = new ScriptEntity(),
  54. methods = new List<string>() { "POST", "GET", "PUT", "PATCH", "DELETE", "COPY", "HEAD", "OPTIONS", "LINK", "UNLINK", "PURGE", "LOCK", "UNLOCK", "PROPFIND", "VIEW" },
  55. mark = new List<MarkEntity>() {
  56. new MarkEntity() { key = "developing", name = "开发中" },
  57. new MarkEntity() { key = "complated", name = "已完成" },
  58. new MarkEntity() { key = "modifying", name = "需修改" },
  59. },
  60. request = new VarsRequestEntity()
  61. {
  62. body = new List<ResponseParameterEntity>() { respParam },
  63. cookie = new List<ResponseParameterEntity>() { respParam },
  64. header = new List<ResponseParameterEntity>() { respParam },
  65. query = new List<ResponseParameterEntity>() { respParam },
  66. }
  67. };
  68. projectEntity.vars = varsItem;
  69. result.project = projectEntity;
  70. result.targets = GetTargetsFolderString();
  71. return result;
  72. }
  73. /// <summary>
  74. /// 创建文件夹
  75. /// </summary>
  76. /// <returns></returns>
  77. public List<FolderChildrenEntity> GetTargetsFolderString()
  78. {
  79. var resultList = new List<FolderChildrenEntity>();
  80. List<APIModuleEntity> apiModuleList = LoadData.PackageInterfaceMemberInfo() ?? new List<APIModuleEntity>();
  81. for (int i = 0; i < apiModuleList.Count; i++)
  82. {
  83. var customerAPI = new FolderChildrenEntity();
  84. customerAPI.is_doc = "0";
  85. customerAPI.local_parent_id = "0";
  86. customerAPI.local_target_id = Guid.NewGuid().ToString();
  87. customerAPI.mark = "complated";
  88. customerAPI.method = "POST";
  89. customerAPI.name = apiModuleList[i].Example;
  90. customerAPI.script = new ScriptEntity();
  91. customerAPI.sort = 7 + i;
  92. customerAPI.status = 1;
  93. customerAPI.target_id = CommonHelper.GetSpecicalTargetIndex();
  94. customerAPI.target_type = "folder";
  95. customerAPI.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  96. customerAPI.request = new FoldRequestEntity()
  97. {
  98. body = new List<NullParameterEntity>(),
  99. header = new List<NullParameterEntity>(),
  100. query = new List<NullParameterEntity>(),
  101. description = "新版杏聆荟RPC接口文档"
  102. };
  103. customerAPI.children = GetCustomerChildrenList(customerAPI, apiModuleList[i]);
  104. resultList.Add(customerAPI);
  105. }
  106. return resultList;
  107. }
  108. /// <summary>
  109. /// 客户端api接口
  110. /// </summary>
  111. /// <returns></returns>
  112. public List<object> GetCustomerChildrenList(FolderChildrenEntity customerAPI, APIModuleEntity apiModuleEntity)
  113. {
  114. var list = new List<object>();
  115. if (apiModuleEntity.IsShowEnumFolder)
  116. {
  117. FolderChildrenEntity enumFolderEntity = new FolderChildrenEntity();
  118. enumFolderEntity.is_doc = "0";
  119. enumFolderEntity.local_parent_id = customerAPI.local_target_id;
  120. enumFolderEntity.local_target_id = Guid.NewGuid().ToString();
  121. enumFolderEntity.mark = "complated";
  122. enumFolderEntity.method = "POST";
  123. enumFolderEntity.name = "枚举代码";
  124. enumFolderEntity.sort = 17;
  125. enumFolderEntity.status = 1;
  126. enumFolderEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  127. enumFolderEntity.target_type = "folder";
  128. enumFolderEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  129. enumFolderEntity.script = new ScriptEntity();
  130. enumFolderEntity.request = new FoldRequestEntity();
  131. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  132. var enumList = memberList.FindAll(c => c.ParamName.Contains("T:WingInterfaceLibrary.Enum.") && !string.IsNullOrEmpty(c.Remarks));
  133. for (int i = 0; i < enumList.Count; i++)
  134. {
  135. var item = enumList[i];
  136. if (item.ParamName.Contains("WingInterfaceLibrary.Enum.RpcExceptionEnum."))
  137. {
  138. continue;
  139. }
  140. var enumEntity = GetSpecialEnum(item.ParamName.Replace("T:", ""), enumFolderEntity.local_target_id, item.Remarks, i);
  141. enumFolderEntity.children.Add(enumEntity);
  142. }
  143. list.Add(enumFolderEntity);
  144. }
  145. //定义api下属文件夹
  146. //这里可以是多个文件夹
  147. List<InterfaceInfoEntity> interfaceList = apiModuleEntity.MainModelList;
  148. for (int i = 0; i < interfaceList.Count; i++)
  149. {
  150. var interfaceItem = interfaceList[i];
  151. FolderChildrenEntity folderEntity = new FolderChildrenEntity();
  152. folderEntity.is_doc = "0";
  153. folderEntity.local_parent_id = customerAPI.local_target_id;
  154. folderEntity.local_target_id = Guid.NewGuid().ToString();
  155. folderEntity.mark = "complated";
  156. folderEntity.method = "POST";
  157. folderEntity.name = interfaceItem.Value;
  158. folderEntity.sort = i + 1 + customerAPI.sort;
  159. folderEntity.status = 1;
  160. folderEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  161. folderEntity.target_type = "folder";
  162. folderEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  163. folderEntity.script = new ScriptEntity();
  164. folderEntity.request = new FoldRequestEntity();
  165. folderEntity.children = GetInterfaceChildrenList(folderEntity, interfaceItem.Url, interfaceItem.InterfaceList);
  166. list.Add(folderEntity);
  167. }
  168. return list;
  169. }
  170. /// <summary>
  171. /// 获取分类下的接口
  172. /// </summary>
  173. /// <returns></returns>
  174. public List<object> GetInterfaceChildrenList(FolderChildrenEntity folderEntity, string url, List<InterfaceBasicInfoEntity> interfaceList)
  175. {
  176. var exclusiveList = new List<string>() { "IClientLogService", "IEmailService", "ISMSService" };
  177. List<object> resultList = new List<object>();
  178. for (int i = 0; i < interfaceList.Count; i++)
  179. {
  180. var interfaceEntity = interfaceList[i];
  181. if (exclusiveList.Contains(interfaceEntity.InterfaceName))
  182. {
  183. continue;
  184. }
  185. FolderChildrenEntity folderChildEntity = new FolderChildrenEntity();
  186. folderChildEntity.index = 4;
  187. folderChildEntity.is_doc = "0";
  188. folderChildEntity.local_parent_id = folderEntity.local_target_id;
  189. folderChildEntity.local_target_id = Guid.NewGuid().ToString();
  190. folderChildEntity.mark = "complated";
  191. folderChildEntity.method = "POST";
  192. folderChildEntity.name = interfaceEntity.InterfaceSummary;
  193. folderChildEntity.sort = Convert.ToInt32(folderEntity.sort.ToString() + i);
  194. folderChildEntity.status = 1;
  195. folderChildEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  196. folderChildEntity.target_type = "folder";
  197. folderChildEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  198. folderChildEntity.script = new ScriptEntity();
  199. folderChildEntity.request = new FoldRequestEntity();
  200. folderChildEntity.children = new List<object>();
  201. for (int j = 0; j < interfaceEntity.MethodList.Count; j++)
  202. {
  203. var methodEntity = interfaceEntity.MethodList[j];
  204. ChildrenEntity childEntity = new ChildrenEntity();
  205. childEntity.is_doc = "0";
  206. childEntity.index = 5;
  207. childEntity.local_parent_id = folderChildEntity.local_target_id;
  208. childEntity.local_target_id = folderChildEntity.local_target_id + "-" + i;
  209. childEntity.mark = "complated";
  210. childEntity.method = methodEntity.SubmitType;
  211. childEntity.name = methodEntity.Summary;
  212. childEntity.sort = Convert.ToInt32(folderChildEntity.sort.ToString() + j);
  213. childEntity.status = 1;
  214. childEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  215. childEntity.target_type = "api";
  216. childEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  217. if (methodEntity.SubmitType == "PUT")
  218. {
  219. var responseEntity = new ResponseEntity()
  220. {
  221. error = new ResponseResultEntity()
  222. {
  223. raw = "{\n\t\"IsSuccess\": \"False\", //是否成功: True - 表示成功,False - 表示失败\n\t\"Msg\": \"\" //错误信息内容\n}",
  224. parameter = new List<ResponseParameterEntity>()
  225. {
  226. new ResponseParameterEntity()
  227. {
  228. description = "是否成功: True-表示成功,False-表示失败",
  229. is_checked = 1,
  230. key = "IsSuccess",
  231. type = "Text",
  232. field_type = "Boolean",
  233. value = "False"
  234. },
  235. new ResponseParameterEntity()
  236. {
  237. description= "错误信息内容",
  238. is_checked = 1,
  239. key = "Msg",
  240. type = "Text",
  241. field_type = "String",
  242. value = "Upload Fail"
  243. }
  244. }
  245. },
  246. success = new ResponseResultEntity()
  247. {
  248. raw = "{\n\t\"IsSuccess\": \"True\", //是否成功: True-表示成功,False-表示失败\n\t\"Msg\": \"\" //错误信息,如果成功,则为空\n}",
  249. parameter = new List<ResponseParameterEntity>()
  250. {
  251. new ResponseParameterEntity()
  252. {
  253. description = "是否成功: True-表示成功,False-表示失败",
  254. is_checked = 1,
  255. key = "IsSuccess",
  256. type = "Text",
  257. field_type = "Boolean",
  258. value = "True"
  259. },
  260. new ResponseParameterEntity()
  261. {
  262. description= "错误信息,如果成功,则为空",
  263. is_checked = 1,
  264. key = "Msg",
  265. type = "Text",
  266. field_type = "String",
  267. value = ""
  268. }
  269. }
  270. }
  271. };
  272. var fileInfo = methodEntity.RequestList?.FirstOrDefault()?.ParamPropertyList?.Find(c => c.Name == "File") ?? new ParamPropertyEntity();
  273. var requestBodyEntity = new RequestBodyEntity()
  274. {
  275. mode = "form-data",
  276. parameter = new List<ResponseParameterEntity>()
  277. {
  278. new ResponseParameterEntity()
  279. {
  280. description = fileInfo.Desc,
  281. is_checked = 1,
  282. key = fileInfo.Name,
  283. type = fileInfo.TypeFullName,
  284. not_null = "1",
  285. field_type = "",
  286. value = fileInfo.DefaultValue
  287. }
  288. },
  289. raw = "",
  290. raw_para = new List<ResponseParameterEntity>()
  291. };
  292. var headerParameterRequest = new List<object>();
  293. var headerParamList = methodEntity.RequestList?.FirstOrDefault()?.ParamPropertyList?.FindAll(c => c.Name != "File") ?? new List<ParamPropertyEntity>();
  294. if (headerParamList?.Count > 0)
  295. {
  296. foreach (var headerItem in headerParamList)
  297. {
  298. headerParameterRequest.Add(new ResponseParameterEntity()
  299. {
  300. description = headerItem.Desc,
  301. is_checked = 1,
  302. key = headerItem.Name,
  303. type = "Text",
  304. not_null = "1",
  305. field_type = headerItem.TypeFullName,
  306. value = headerItem.DefaultValue
  307. });
  308. }
  309. }
  310. var headerRequest = new
  311. {
  312. parameter = headerParameterRequest
  313. };
  314. childEntity.request = new RequestEntity()
  315. {
  316. url = url + (interfaceEntity.InterfaceName.Contains("Storage") ? "Storage" : interfaceEntity.InterfaceName),
  317. resful = new RequestParameterEntity(),
  318. query = new RequestParameterEntity(),
  319. header = headerRequest,
  320. Event = new ScriptEntity(),
  321. description = "",
  322. cookie = new RequestParameterEntity(),
  323. body = requestBodyEntity
  324. };
  325. childEntity.response = responseEntity;
  326. }
  327. else
  328. {
  329. var errorParameter = new ResponseResultEntity()
  330. {
  331. raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"error\": {\n\t\t\"code\": 1002, //错误码\n\t\t\"message\": \"Permission validation error\" //错误信息\n\t}\n}",
  332. parameter = new List<ResponseParameterEntity>()
  333. {
  334. new ResponseParameterEntity()
  335. {
  336. description = "rpc版本",
  337. is_checked = 1,
  338. key = "jsonrpc",
  339. type = "Text",
  340. field_type = "Number",
  341. value = "2.0"
  342. },
  343. new ResponseParameterEntity()
  344. {
  345. description = "结果Id",
  346. is_checked = 1,
  347. key = "id",
  348. type = "Text",
  349. field_type = "Number",
  350. value = "1"
  351. },
  352. new ResponseParameterEntity()
  353. {
  354. description = "错误响应",
  355. is_checked = 1,
  356. key = "error",
  357. type = "Text",
  358. field_type = "Object",
  359. value = ""
  360. },
  361. new ResponseParameterEntity()
  362. {
  363. description = "错误码",
  364. is_checked = 1,
  365. key = "error.code",
  366. type = "Text",
  367. field_type = "Number",
  368. value = "1002"
  369. },
  370. new ResponseParameterEntity()
  371. {
  372. description = "错误信息",
  373. is_checked = 1,
  374. key = "error.message",
  375. type = "Text",
  376. field_type = "String",
  377. value = "Permission validation error"
  378. }
  379. }
  380. };
  381. var successParameter = new ResponseResultEntity()
  382. {
  383. parameter = new List<ResponseParameterEntity>()
  384. {
  385. new ResponseParameterEntity()
  386. {
  387. description = "rpc版本",
  388. is_checked = 1,
  389. key = "jsonrpc",
  390. type = "Text",
  391. field_type = "Number",
  392. value = "2.0"
  393. },
  394. new ResponseParameterEntity()
  395. {
  396. description = "结果Id",
  397. is_checked = 1,
  398. key = "id",
  399. type = "Text",
  400. field_type = "Number",
  401. value = "1"
  402. }
  403. },
  404. error_result = new List<ExceptionResultEntity>()
  405. };
  406. //计算响应列表枚举
  407. if (methodEntity.ParaList?.Count > 0)
  408. {
  409. foreach (var item in methodEntity.ParaList)
  410. {
  411. var gere = GetExceptionResultEnum(item);
  412. successParameter.error_result.Add(gere);
  413. }
  414. }
  415. var rawResultStr = "";
  416. if (methodEntity.ResponseList?.Count > 0)
  417. {
  418. var returnTypeStr = CommonHelper.GetJsonDataTypeByString(methodEntity.ResponseList.FirstOrDefault().TypeFullName);
  419. var resultObject = new ResponseParameterEntity()
  420. {
  421. description = "结果集",
  422. is_checked = 1,
  423. key = "result",
  424. type = "Text",
  425. field_type = returnTypeStr,
  426. value = ((returnTypeStr != "Object" && returnTypeStr != "Array") ? methodEntity.ResponseList.FirstOrDefault().DefaultValue : "")
  427. };
  428. successParameter.parameter.Add(resultObject);
  429. var rList = GetChildParameterEntity(returnTypeStr, methodEntity.ResponseList, "result");
  430. if (rList?.Count > 0)
  431. {
  432. rawResultStr += returnTypeStr == "Array" ? "[" : "";
  433. successParameter.parameter.AddRange(rList);
  434. rawResultStr += "{";
  435. rawResultStr += DealWithString(GetChildParameterString(returnTypeStr, methodEntity.ResponseList));
  436. //foreach (var rItem in rList)
  437. //{
  438. // rawResultStr += "\n\t\t\""+ rItem.key.Replace("result[0].","").Replace("result.", "") + "\": \""+ rItem.value + "\",";
  439. //}
  440. rawResultStr = rawResultStr.TrimEnd(',');
  441. rawResultStr += "\n\t}";
  442. rawResultStr += returnTypeStr == "Array" ? "]" : "";
  443. }
  444. else
  445. {
  446. rawResultStr = methodEntity.ResponseList.FirstOrDefault().DefaultValue;
  447. }
  448. successParameter.raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"result\": " + rawResultStr + "\n}";
  449. }
  450. else
  451. {
  452. rawResultStr = methodEntity.Returns;
  453. successParameter.raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"result\": " + rawResultStr + "\n}";
  454. }
  455. childEntity.response = new ResponseEntity()
  456. {
  457. error = errorParameter,
  458. success = successParameter
  459. };
  460. string rawStr = "";
  461. var requestRawPara = new List<ResponseParameterEntity>()
  462. {
  463. new ResponseParameterEntity()
  464. {
  465. description = "rpc版本",
  466. is_checked = 1,
  467. key = "jsonrpc",
  468. not_null = "1",
  469. type = "Text",
  470. field_type = "Number",
  471. value = "2.0"
  472. },
  473. new ResponseParameterEntity()
  474. {
  475. description = "结果Id",
  476. is_checked = 1,
  477. key = "id",
  478. not_null = "1",
  479. type = "Text",
  480. field_type = "Number",
  481. value = "1"
  482. },
  483. new ResponseParameterEntity()
  484. {
  485. description = "rpc接口名",
  486. is_checked = 1,
  487. key = "method",
  488. not_null = "1",
  489. type = "Text",
  490. field_type = "String",
  491. value = methodEntity.MethodName
  492. }
  493. };
  494. var paramTypeStr = CommonHelper.GetJsonDataTypeByString(methodEntity.ParamTypeFullName);
  495. var paramObject = new ResponseParameterEntity()
  496. {
  497. description = methodEntity.RequestList.FirstOrDefault().Desc,
  498. is_checked = 1,
  499. key = "params",
  500. not_null = "1",
  501. type = "Text",
  502. field_type = "Array",
  503. value = methodEntity.ParamText
  504. };
  505. requestRawPara.Add(paramObject);
  506. if (methodEntity.RequestList?.Count > 0)
  507. {
  508. var rList = GetChildParameterEntity(paramTypeStr, methodEntity.RequestList, "params");
  509. var rawRequestParamStr = "";
  510. if (rList?.Count > 0)
  511. {
  512. requestRawPara.AddRange(rList);
  513. rawRequestParamStr += "{";
  514. rawRequestParamStr += DealWithString(GetChildParameterString(paramTypeStr, methodEntity.RequestList));
  515. //foreach (var rItem in rList)
  516. //{
  517. // rawRequestParamStr += "\n\t\t\"" + rItem.key.Replace("params[0].", "") + "\": \"" + rItem.value + "\",";
  518. //}
  519. rawRequestParamStr = rawRequestParamStr.TrimEnd(',');
  520. rawRequestParamStr += "\n\t}";
  521. }
  522. rawStr = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"method\": \"" + methodEntity.MethodName + "\", //rpc接口名\n\t\"params\": [" + rawRequestParamStr + "],\n\t\"id\": 1 //结果Id\n}";
  523. }
  524. else
  525. {
  526. rawStr = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"method\": \"" + methodEntity.MethodName + "\", //rpc接口名\n\t\"params\": [],\n\t\"id\": 1 //结果Id\n}";
  527. }
  528. var requestBodyEntity = new RequestBodyEntity()
  529. {
  530. mode = "json",
  531. parameter = new List<ResponseParameterEntity>(),
  532. raw = rawStr,
  533. raw_para = requestRawPara
  534. };
  535. childEntity.request = new RequestEntity()
  536. {
  537. url = url + interfaceEntity.InterfaceName,
  538. resful = new RequestParameterEntity(),
  539. query = new RequestParameterEntity(),
  540. header = new RequestParameterEntity(),
  541. Event = new ScriptEntity(),
  542. description = "",
  543. cookie = new RequestParameterEntity(),
  544. body = requestBodyEntity
  545. };
  546. }
  547. folderChildEntity.children.Add(childEntity);
  548. }
  549. resultList.Add(folderChildEntity);
  550. }
  551. return resultList;
  552. }
  553. private string DealWithString(string resultStr)
  554. {
  555. if (string.IsNullOrEmpty(resultStr))
  556. {
  557. return "";
  558. }
  559. string newStr = "";
  560. int lastIndex = resultStr.LastIndexOf(',');
  561. var lastStr = resultStr.Substring(lastIndex);
  562. if (!lastStr.Contains("\n"))
  563. {
  564. newStr = resultStr.Substring(0, lastIndex) + resultStr.Substring(lastIndex + 1);
  565. }
  566. return newStr;
  567. }
  568. public List<ResponseParameterEntity> GetChildParameterEntity(string returnTypeStr, List<ParamPropertyEntity> responseList, string typeStr, int level = 2)
  569. {
  570. List<ResponseParameterEntity> resultList = new List<ResponseParameterEntity>();
  571. if (returnTypeStr == "Object")
  572. {
  573. var res = responseList.FirstOrDefault();
  574. if (res.ParamPropertyList?.Count > 0)
  575. {
  576. foreach (var responseItem in res.ParamPropertyList)
  577. {
  578. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  579. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  580. var childObject = new ResponseParameterEntity()
  581. {
  582. file_name = FileName,
  583. description = responseItem.Desc,
  584. is_checked = 0,
  585. type = "Text",
  586. field_type = childTypeStr,
  587. value = responseItem.DefaultValue
  588. };
  589. //if (childTypeStr.Contains("Enum"))
  590. //{
  591. // childObject.field_type = "<a href=\"#"+ childTypeStr + "\">" + childObject.field_type + "</a>";
  592. //}
  593. if (childTypeStr.Contains("Enum"))
  594. {
  595. var key = "WingInterfaceLibrary.Enum." + childTypeStr;
  596. if (PublicEnumDic.Keys.Contains(key))
  597. {
  598. childObject.field_type_value = 1;
  599. childObject.field_type_target_id = PublicEnumDic[key];
  600. }
  601. }
  602. if (childTypeStr == "Array" && generalTypeStr != "Object")
  603. {
  604. childObject.value = "[" + responseItem.DefaultValue + "]";
  605. }
  606. childObject.key = typeStr + "." + responseItem.Name;
  607. if (typeStr != "result")
  608. {
  609. childObject.key = typeStr + "[0]." + responseItem.Name;
  610. childObject.not_null = responseItem.IsNotNull;
  611. }
  612. resultList.Add(childObject);
  613. if (responseItem.ParamPropertyList?.Count > 0)
  614. {
  615. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  616. resultList.AddRange(childList);
  617. }
  618. }
  619. }
  620. }
  621. else if (returnTypeStr == "Array")
  622. {
  623. ParamPropertyEntity res = null;
  624. if (level == 2)
  625. {
  626. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  627. }
  628. else
  629. {
  630. res = responseList.FirstOrDefault();
  631. }
  632. if (res?.ParamPropertyList?.Count > 0)
  633. {
  634. foreach (var responseItem in res.ParamPropertyList)
  635. {
  636. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  637. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  638. var childObject = new ResponseParameterEntity()
  639. {
  640. file_name = FileName,
  641. description = responseItem.Desc,
  642. is_checked = 0,
  643. type = "Text",
  644. field_type = childTypeStr,
  645. value = responseItem.DefaultValue
  646. };
  647. //if (childTypeStr.Contains("Enum"))
  648. //{
  649. // childObject.field_type = "<a href=\"#" + childTypeStr + "\">" + childObject.field_type + "</a>";
  650. //}
  651. if (childTypeStr.Contains("Enum"))
  652. {
  653. var key = "WingInterfaceLibrary.Enum." + childTypeStr;
  654. if (PublicEnumDic.Keys.Contains(key))
  655. {
  656. childObject.field_type_value = 1;
  657. childObject.field_type_target_id = PublicEnumDic[key];
  658. }
  659. }
  660. if (childTypeStr == "Array" && generalTypeStr != "Object")
  661. {
  662. childObject.value = "[" + responseItem.DefaultValue + "]";
  663. }
  664. childObject.key = typeStr + "[0]." + responseItem.Name;
  665. if (typeStr != "result")
  666. {
  667. childObject.not_null = responseItem.IsNotNull;
  668. }
  669. resultList.Add(childObject);
  670. if (responseItem.ParamPropertyList?.Count > 0)
  671. {
  672. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  673. resultList.AddRange(childList);
  674. }
  675. }
  676. }
  677. }
  678. else
  679. {
  680. }
  681. return resultList;
  682. }
  683. /// <summary>
  684. /// 拼接显示的字符串
  685. /// </summary>
  686. /// <param name="returnTypeStr">返回类型</param>
  687. /// <param name="responseList">响应列表</param>
  688. /// <param name="level">数据层级</param>
  689. /// <param name="retract">缩进大小</param>
  690. /// <returns></returns>
  691. public string GetChildParameterString(string returnTypeStr, List<ParamPropertyEntity> responseList, int level = 2, int retract = 0)
  692. {
  693. List<string> typeList = new List<string>() { "Boolean", "Double", "Float", "Number", "Integer" };
  694. string resultStr = "";
  695. string retractStr = "";
  696. for (int i = 0; i < (retract + 1); i++)
  697. {
  698. if (i == 0)
  699. {
  700. retractStr += "\t\t";
  701. }
  702. else
  703. {
  704. retractStr += "\t";
  705. }
  706. }
  707. if (returnTypeStr == "Object")
  708. {
  709. var res = responseList.FirstOrDefault();
  710. if (res.ParamPropertyList?.Count > 0)
  711. {
  712. foreach (var responseItem in res.ParamPropertyList)
  713. {
  714. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  715. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  716. if (childTypeStr == "Object")
  717. {
  718. retract++;
  719. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  720. }
  721. else if (childTypeStr == "Array")
  722. {
  723. retract++;
  724. if (generalTypeStr == "Object")
  725. {
  726. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  727. }
  728. else if (generalTypeStr == "Array")
  729. {
  730. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  731. }
  732. else
  733. {
  734. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  735. }
  736. }
  737. else
  738. {
  739. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  740. {
  741. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  742. }
  743. else
  744. {
  745. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  746. }
  747. }
  748. if (responseItem.ParamPropertyList?.Count > 0)
  749. {
  750. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  751. resultStr += childStr;
  752. }
  753. if (childTypeStr == "Object")
  754. {
  755. resultStr += "\n" + retractStr + "},";
  756. }
  757. else if (childTypeStr == "Array")
  758. {
  759. if (generalTypeStr == "Object")
  760. {
  761. resultStr += "\n" + retractStr + "}],";
  762. }
  763. else if (generalTypeStr == "Array")
  764. {
  765. resultStr += "\n" + retractStr + "}]],";
  766. }
  767. else
  768. {
  769. resultStr += "],";
  770. }
  771. }
  772. else
  773. {
  774. }
  775. }
  776. }
  777. }
  778. else if (returnTypeStr == "Array")
  779. {
  780. ParamPropertyEntity res = null;
  781. if (level == 2)
  782. {
  783. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  784. }
  785. else
  786. {
  787. res = responseList.FirstOrDefault();
  788. }
  789. if (res?.ParamPropertyList?.Count > 0)
  790. {
  791. foreach (var responseItem in res.ParamPropertyList)
  792. {
  793. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  794. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  795. if (childTypeStr == "Object")
  796. {
  797. retract++;
  798. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  799. }
  800. else if (childTypeStr == "Array")
  801. {
  802. retract++;
  803. if (generalTypeStr == "Object")
  804. {
  805. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  806. }
  807. else if (generalTypeStr == "Array")
  808. {
  809. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  810. }
  811. else
  812. {
  813. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  814. }
  815. }
  816. else
  817. {
  818. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  819. {
  820. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  821. }
  822. else
  823. {
  824. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  825. }
  826. }
  827. if (responseItem.ParamPropertyList?.Count > 0)
  828. {
  829. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  830. resultStr += childStr;
  831. }
  832. if (childTypeStr == "Object")
  833. {
  834. resultStr += "\n" + retractStr + "},";
  835. }
  836. else if (childTypeStr == "Array")
  837. {
  838. if (generalTypeStr == "Object")
  839. {
  840. resultStr += "\n" + retractStr + "}],";
  841. }
  842. else if (generalTypeStr == "Array")
  843. {
  844. resultStr += "\n" + retractStr + "}]],";
  845. }
  846. else
  847. {
  848. resultStr += "],";
  849. }
  850. }
  851. else
  852. {
  853. }
  854. }
  855. }
  856. }
  857. return resultStr;
  858. }
  859. public ExceptionResultEntity GetExceptionResultEnum(string enumNamespace)
  860. {
  861. var resultEntity = new ExceptionResultEntity();
  862. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  863. var enumInfo = memberList.Find(c => c.ParamName.Contains("T:WingInterfaceLibrary.Enum.RpcExceptionEnum." + enumNamespace) && !string.IsNullOrEmpty(c.Remarks));
  864. if (enumInfo != null)
  865. {
  866. //获取错误枚举、上传文件类型枚举
  867. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumInfo.ParamName.Replace("T:", "")));
  868. if (enumList?.Count > 0)
  869. {
  870. foreach (var item in enumList)
  871. {
  872. if (item.ParamName.Equals(enumInfo.ParamName))
  873. {
  874. //title,name,和header
  875. resultEntity.title = item.Summary;
  876. resultEntity.name = enumNamespace;
  877. resultEntity.header = item.Remarks.Split('|').ToArray().Select(c => c.Trim()).ToList();
  878. }
  879. else
  880. {
  881. var ece = new ExceptionContentEntity();
  882. ece.content_data = item.Remarks.Split('|').ToArray().Select(c => c.Trim()).ToList();
  883. //content
  884. resultEntity.content.Add(ece);
  885. }
  886. }
  887. }
  888. }
  889. return resultEntity;
  890. }
  891. /// <summary>
  892. /// 加载指定枚举注释到文档中
  893. /// </summary>
  894. /// <param name="enumNamespace">枚举的命名空间</param>
  895. /// <param name="local_target_id">上级id</param>
  896. /// <param name="formatterDesc">枚举展示格式标题</param>
  897. /// <param name="index">顺序</param>
  898. /// <returns>封装好的实体</returns>
  899. public ChildrenEntity GetSpecialEnum(string enumNamespace, string local_target_id, string formatterDesc = "代码 | 错误描述", int index = 0)
  900. {
  901. var enumName = string.Empty;
  902. var errorEnumStr = string.Empty;
  903. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  904. //获取错误枚举、上传文件类型枚举
  905. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumNamespace));
  906. if (enumList?.Count > 0)
  907. {
  908. foreach (var item in enumList)
  909. {
  910. if (item.ParamName.Equals("T:" + enumNamespace))
  911. {
  912. enumName = item.Summary;
  913. }
  914. else
  915. {
  916. errorEnumStr += "\n" + item.Summary;
  917. }
  918. }
  919. }
  920. var errorEntity = new ChildrenEntity()
  921. {
  922. is_doc = "0",
  923. local_parent_id = local_target_id,
  924. local_target_id = Guid.NewGuid().ToString(),
  925. mark = "complated",
  926. method = "POST",
  927. name = enumName,
  928. sort = index,
  929. status = 1,
  930. target_id = CommonHelper.GetSpecicalTargetIndex(),
  931. target_type = "doc",
  932. update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  933. response = new ResponseEntity()
  934. {
  935. error = new ResponseResultEntity()
  936. {
  937. parameter = new List<ResponseParameterEntity>(),
  938. raw = ""
  939. },
  940. success = new ResponseResultEntity()
  941. {
  942. raw = "",
  943. parameter = new List<ResponseParameterEntity>()
  944. }
  945. },
  946. request = new RequestEntity()
  947. {
  948. url = "",
  949. resful = new RequestParameterEntity(),
  950. query = new RequestParameterEntity(),
  951. header = new RequestParameterEntity(),
  952. Event = new ScriptEntity(),
  953. description = formatterDesc + "\n--- | ---" + errorEnumStr,
  954. cookie = new RequestParameterEntity(),
  955. body = new RequestBodyEntity()
  956. {
  957. mode = "form-data",
  958. parameter = new List<ResponseParameterEntity>(),
  959. raw = "",
  960. raw_para = new List<ResponseParameterEntity>()
  961. }
  962. }
  963. };
  964. if (!PublicEnumDic.Keys.Contains(enumNamespace))
  965. {
  966. PublicEnumDic.Add(enumNamespace, errorEntity.local_target_id);
  967. }
  968. return errorEntity;
  969. }
  970. }
  971. }