ExternalViewService.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using PMS.BusinessModels.ExternalManage;
  2. using PMS.EntityModels.ExternalManage;
  3. using PMS.Plugins.Common;
  4. using QWPlatform.IService;
  5. using QWPlatform.SystemLibrary;
  6. using System;
  7. using System.Activities.Debugger.Symbol;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace PMS.DBService.ExternalManage
  14. {
  15. public class ExternalViewService : DataServiceBase
  16. {
  17. private static readonly Random random = new Random();
  18. public string GenerateCaptcha(int length = 6)
  19. {
  20. const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  21. lock (random) // Ensure thread-safety for the Random instance
  22. {
  23. return new string(Enumerable.Repeat(chars, length)
  24. .Select(s => s[random.Next(s.Length)]).ToArray());
  25. }
  26. }
  27. public DataTable GetAccredit(string id)
  28. {
  29. return this.SelectBuilder.From("外部服务产品授权")
  30. .Columns("*")
  31. .Where("地址标识", id)
  32. .Select();
  33. }
  34. public ExternalValidate GetAccreditByUrl(string id, string projectId)
  35. {
  36. string sql = "select a.* from 外部服务授权验证 a, 外部服务产品授权 b where a.授权产品ID = b.ID and b.地址标识 = :标识 and a.项目ID = :项目ID";
  37. return this.SqlBuilder.SqlText(sql).Parameters("标识", id)
  38. .Parameters("项目ID", projectId)
  39. .Select()
  40. .ToList<ExternalValidate>()?
  41. .FirstOrDefault();
  42. }
  43. public ExternalValidate ApplyVerifyCode(ExternalValidate model)
  44. {
  45. bool res = false;
  46. if (model.ID.IsNullOrEmpty())
  47. {
  48. model.ID = Guid.NewGuid().ToString();
  49. res = this.InsertBuilder.Insert("外部服务授权验证")
  50. .Column("ID", model.ID)
  51. .Column("授权产品ID", model.授权产品ID)
  52. .Column("项目ID", model.项目ID)
  53. .Column("申请时间", DateTime.Now)
  54. .Column("状态", 1)
  55. .Execute() > 0;
  56. }
  57. else
  58. {
  59. if(model.过期时间.HasValue)
  60. {
  61. res = this.UpdateBuilder.Update("外部服务授权验证")
  62. .Column("授权验证码", GenerateCaptcha())
  63. .Column("过期时间", model.过期时间)
  64. .Column("受理时间", DateTime.Now)
  65. .Where("ID", model.ID)
  66. .Execute() > 0;
  67. }else
  68. {
  69. res = this.UpdateBuilder.Update("外部服务授权验证")
  70. .Column("状态", model.状态)
  71. .Where("ID", model.ID)
  72. .Execute() > 0;
  73. }
  74. }
  75. if(res)
  76. {
  77. return this.SelectBuilder.From("外部服务授权验证")
  78. .Columns("*")
  79. .Where("ID", model.ID)
  80. .Select()
  81. .ToList<ExternalValidate>().FirstOrDefault();
  82. }else
  83. {
  84. return model;
  85. }
  86. }
  87. public ExternalValidate VerifyCode(ExternalValidate model)
  88. {
  89. return this.SelectBuilder.From("外部服务授权验证")
  90. .Columns("*")
  91. .Where("授权验证码", model.授权验证码)
  92. .Where("ID", model.ID)
  93. .Select()
  94. .ToList<ExternalValidate>()?.FirstOrDefault();
  95. }
  96. public DataTable GetExternalClass(string keyword, List<string> classIds, string id, int type)
  97. {
  98. if(type == 2)
  99. {
  100. var res = this.SelectBuilder.From("外部服务产品授权")
  101. .Columns("分类IDS")
  102. .Where("地址标识", id)
  103. .Select<string>();
  104. classIds = res.Split(new[] { ','}, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
  105. }
  106. string classIdsParam = string.Join(",", classIds.Select(id1 => $"'{id1}'"));
  107. string sql = $@"WITH w AS ( SELECT a.*
  108. FROM 外部服务分类 a
  109. WHERE a.ID in ({classIdsParam}) UNION ALL
  110. SELECT b.ID, b.分类ID AS 上级ID, b.服务编码 AS 分类编码, b.服务名称 AS 分类名称, b.服务简码 AS 分类简码, b.创建时间 ,b.更新时间, a.产品ID
  111. FROM 外部服务 b, 外部服务分类 a
  112. WHERE a.ID = b.分类ID AND a.ID in ({classIdsParam}) )
  113. SELECT w.* FROM w where 1 = 1 ";
  114. var sqlbuilder = this.SqlBuilder;
  115. if (!(keyword.IsNullOrEmpty()))
  116. {
  117. sql += "and (upper(w.分类编码) like '%' || upper(:keyword) || '%' or upper(w.分类名称) like '%' || upper(:keyword) || '%' or upper(w.分类简码) like '%' || upper(:keyword) || '%')";
  118. sqlbuilder.Parameters("keyword", keyword);
  119. }
  120. sql += " order by w.分类编码";
  121. return sqlbuilder.SqlText(sql).Select();
  122. }
  123. /// <summary>
  124. /// 获取服务列表
  125. /// </summary>
  126. /// <param name="class_id">分类id</param>
  127. /// <param name="keyword">关键字</param>
  128. /// <returns></returns>
  129. public List<v_external> GetExternalView(string class_id, string keyword)
  130. {
  131. var parmeter = new List<v_external>();
  132. string sql = "select a.* from 外部服务 a where (a.分类ID = :class_id or a.ID = :class_id)";
  133. var sqlbuilder = this.SqlBuilder;
  134. if (!(keyword.IsNullOrEmpty()))
  135. {
  136. sql += "and (upper(a.服务编码) like '%' || upper(:keyword) || '%' or a.服务名称 like '%' || :keyword || '%' or upper(a.服务简码) like '%' || upper(:keyword) || '%')";
  137. sqlbuilder.Parameters("keyword", keyword);
  138. }
  139. parmeter = sqlbuilder.SqlText(sql)
  140. .Parameters("class_id", class_id)
  141. .Select().ToList<v_external>();
  142. if (parmeter != null && parmeter.Count > 0)
  143. {
  144. foreach (var item in parmeter)
  145. {
  146. var sql2 = "SELECT a.*, (SELECT b.参数名称 FROM 外部服务参数 b WHERE b.ID = a.父节点ID) AS 父节点 FROM 外部服务参数 a where a.服务ID = :服务ID and 参数类型= :参数类型 order by a.序号";
  147. item.outParameter = this.SqlBuilder.SqlText(sql2)
  148. .Parameters("服务ID", item.ID)
  149. .Parameters("参数类型", "out")
  150. .Select().ToList<dto_parmater>();
  151. item.inParameter = this.SqlBuilder.SqlText(sql2)
  152. .Parameters("服务ID", item.ID)
  153. .Parameters("参数类型", "in")
  154. .Select().ToList<dto_parmater>();
  155. }
  156. }
  157. return parmeter;
  158. }
  159. /// <summary>
  160. /// 获取全部渠道信息
  161. /// </summary>
  162. /// <returns></returns>
  163. public DataTable Datagrid()
  164. {
  165. return this.SelectBuilder.From("渠道信息")
  166. .Columns("*")
  167. .Where("状态", 1)
  168. .OrderBy("编码")
  169. .Select();
  170. }
  171. public bool AddAccessRecords(ExternalRecords model)
  172. {
  173. return this.InsertBuilder.Insert("外部服务文档访问记录")
  174. .Column("id", Guid.NewGuid().ToString())
  175. .Column("访问IP", model.访问IP)
  176. .Column("项目ID", model.项目ID)
  177. .Column("渠道ID", model.渠道ID)
  178. .Column("访问操作", (int)model.访问操作)
  179. .Column("操作时间", DateTime.Now)
  180. .Execute() > 0;
  181. }
  182. }
  183. }